├── .editorconfig ├── .gitignore ├── .npmignore ├── .travis.yml ├── LICENSE ├── Library └── Typings.d.ts ├── README.md ├── Source └── AcceptLanguage.ts ├── Tests └── Test.ts ├── Typings └── bcp47.d.ts ├── package-lock.json ├── package.json └── tsconfig.json /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | charset = utf-8 6 | trim_trailing_whitespace = true 7 | insert_final_newline = true 8 | indent_style = space 9 | indent_size = 4 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .vscode 3 | Build/ 4 | node_modules/ 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | 2 | .editorconfig 3 | .gitignore 4 | .travis.yml 5 | 6 | index.ts 7 | tsconfig.json 8 | 9 | Source/ 10 | Typings/ 11 | Tests/ 12 | Build/Tests/ 13 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | 2 | language: node_js 3 | before_install: 4 | - npm install typescript@next -g 5 | before_script: 6 | - tsc 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Tingan Ho 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Library/Typings.d.ts: -------------------------------------------------------------------------------- 1 | 2 | declare module 'accept-language' { 3 | 4 | interface AcceptLanguage { 5 | 6 | /** 7 | * Define your supported languages. The first language will be your default language. 8 | */ 9 | languages(languages: string[]): void; 10 | 11 | /** 12 | * Get matched language. If no match, the default language will be returned. 13 | */ 14 | get(priorityList: string | null | undefined): string | null; 15 | } 16 | 17 | interface AcceptLanguageModule extends AcceptLanguage { 18 | 19 | /** 20 | * Create instance of parser 21 | */ 22 | create(): AcceptLanguage; 23 | } 24 | 25 | const __$export: AcceptLanguageModule & { default: AcceptLanguageModule }; 26 | export = __$export; 27 | } 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | accept-language [![Build Status](https://travis-ci.org/tinganho/node-accept-language.png)](https://travis-ci.org/tinganho/node-accept-language) 2 | ======================== 3 | 4 | [![NPM](https://nodei.co/npm/accept-language.png?downloads=true&stars=true)](https://nodei.co/npm/accept-language/) 5 | 6 | `accept-language` parses HTTP Accept-Language header ([BCP47][] compliant) and returns a matched defined language. 7 | 8 | ### Installation: 9 | 10 | ``` 11 | npm install accept-language --save 12 | ``` 13 | 14 | ### Usage: 15 | 16 | ```ts 17 | // var acceptLanguage = require('accept-language'); 18 | import acceptLanguage from 'accept-language'; 19 | acceptLanguage.languages(['en-US', 'zh-CN']); 20 | console.log(acceptLanguage.get('en-GB,en;q=0.8,sv')); 21 | /* 22 | 23 | 'en-US' 24 | 25 | */ 26 | ``` 27 | 28 | ### Usage with Express: 29 | If you are using Express server please use the middleware [express-request-language](https://www.npmjs.com/package/express-request-language). 30 | 31 | ### API 32 | #### acceptLanguage.languages(Array languageTags); 33 | Provide your language tags in order of priority. The language tags must comply with [BCP47][] standard. 34 | 35 | ```javascript 36 | acceptLanguage.languages(['en-US', 'zh-CN']); 37 | ``` 38 | 39 | #### acceptLanguage.get(String acceptLanguageString); 40 | Returns the most likely language given an `Accept-Language` string. At least 1 language tag must be provided. 41 | ```javascript 42 | acceptLanguage.get('en-GB,en;q=0.8,sv'); 43 | ``` 44 | 45 | ### Maintainer 46 | 47 | Tingan Ho [@tingan87][] 48 | 49 | ### License 50 | MIT 51 | 52 | [L10ns]: http://l10ns.org 53 | [BCP47]: https://tools.ietf.org/html/bcp47 54 | [@tingan87]: https://twitter.com/tingan87 55 | -------------------------------------------------------------------------------- /Source/AcceptLanguage.ts: -------------------------------------------------------------------------------- 1 | 2 | import bcp47 = require('bcp47'); 3 | 4 | interface LanguageTagWithValue extends bcp47.LanguageTag { 5 | value: string; 6 | } 7 | 8 | interface LanguageScore { 9 | unmatchedRequestedSubTag: number; 10 | quality: number; 11 | languageTag: string; 12 | } 13 | 14 | class AcceptLanguage { 15 | private languageTagsWithValues: { 16 | [language: string]: [LanguageTagWithValue]; 17 | } = {}; 18 | 19 | private defaultLanguageTag: string | null = null; 20 | 21 | public languages(definedLanguages: string[]) { 22 | if (definedLanguages.length < 1) { 23 | throw new Error('No language tags defined. Provide at least 1 language tag to match.'); 24 | } 25 | 26 | this.languageTagsWithValues = {}; 27 | definedLanguages.forEach((languageTagString) => { 28 | const languageTag = bcp47.parse(languageTagString); 29 | if (!languageTag) { 30 | throw new TypeError(`'${ languageTagString }' is not bcp47 compliant. More about bcp47 https://tools.ietf.org/html/bcp47.`); 31 | } 32 | const language = languageTag.langtag.language.language; 33 | if (!language) { 34 | throw new TypeError(`${ languageTagString } is not supported.`); 35 | } 36 | const langtag = languageTag.langtag; 37 | let languageTagWithValues: LanguageTagWithValue = langtag as LanguageTagWithValue; 38 | languageTagWithValues.value = languageTagString; 39 | const lowerCasedLanguageTagWithValues: LanguageTagWithValue = { 40 | language: { 41 | language: langtag.language.language.toLowerCase(), 42 | extlang: langtag.language.extlang.map((e) => e.toLowerCase()), 43 | }, 44 | region: langtag.region && langtag.region.toLowerCase(), 45 | script: langtag.script && langtag.script.toLowerCase(), 46 | variant: langtag.variant.map((v) => v.toLowerCase()), 47 | privateuse: langtag.privateuse.map((p) => p.toLowerCase()), 48 | extension: langtag.extension.map((e) => { 49 | return { 50 | extension: e.extension && e.extension.map((e) => e.toLowerCase()), 51 | singleton: e.singleton.toLowerCase(), 52 | } 53 | }), 54 | value: languageTagString, 55 | }; 56 | if (!this.languageTagsWithValues[language]) { 57 | this.languageTagsWithValues[language] = [lowerCasedLanguageTagWithValues]; 58 | } 59 | else { 60 | this.languageTagsWithValues[language].push(lowerCasedLanguageTagWithValues); 61 | } 62 | }); 63 | 64 | this.defaultLanguageTag = definedLanguages[0]; 65 | } 66 | 67 | public get(languagePriorityList: string | null | undefined): string | null { 68 | return this.parse(languagePriorityList)[0]; 69 | } 70 | 71 | public create(): this { 72 | return null as any; 73 | } 74 | 75 | private parse(languagePriorityList: string | null | undefined): (string | null)[] { 76 | if (!languagePriorityList) { 77 | return [this.defaultLanguageTag]; 78 | } 79 | const parsedAndSortedLanguageTags = parseAndSortLanguageTags(languagePriorityList); 80 | const result: LanguageScore[] = []; 81 | for (const languageTag of parsedAndSortedLanguageTags) { 82 | const requestedLang = bcp47.parse(languageTag.tag); 83 | 84 | if (!requestedLang) { 85 | continue; 86 | } 87 | 88 | const requestedLangTag = requestedLang.langtag; 89 | 90 | if (!this.languageTagsWithValues[requestedLangTag.language.language]) { 91 | continue; 92 | } 93 | 94 | middle: 95 | for (const definedLangTag of this.languageTagsWithValues[requestedLangTag.language.language]) { 96 | let unmatchedRequestedSubTag = 0; 97 | for (const prop of ['privateuse', 'extension', 'variant', 'region', 'script']) { 98 | const definedLanguagePropertValue = (definedLangTag as any)[prop]; 99 | if (!definedLanguagePropertValue) { 100 | const requestedLanguagePropertyValue = (requestedLangTag as any)[prop]; 101 | if (requestedLanguagePropertyValue) { 102 | unmatchedRequestedSubTag++; 103 | } 104 | switch (prop) { 105 | case 'privateuse': 106 | case 'variant': 107 | for (let i = 0; i < requestedLanguagePropertyValue.length; i++) { 108 | if (requestedLanguagePropertyValue[i]) { 109 | unmatchedRequestedSubTag++; 110 | } 111 | } 112 | break; 113 | case 'extension': 114 | for (let i = 0; i < requestedLanguagePropertyValue.length; i++) { 115 | const extension = requestedLanguagePropertyValue[i].extension; 116 | for (let ei = 0; ei < extension.length; ei++) { 117 | if (!requestedLanguagePropertyValue[i].extension[ei]) { 118 | unmatchedRequestedSubTag++; 119 | } 120 | } 121 | } 122 | break; 123 | } 124 | continue; 125 | } 126 | 127 | // Filter out wider requested languages first. If someone requests 'zh' 128 | // and my defined language is 'zh-Hant'. I cannot match 'zh-Hant', because 129 | // 'zh' is wider than 'zh-Hant'. 130 | const requestedLanguagePropertyValue = (requestedLangTag as any)[prop]; 131 | if (!requestedLanguagePropertyValue) { 132 | continue middle; 133 | } 134 | 135 | 136 | switch (prop) { 137 | case 'privateuse': 138 | case 'variant': 139 | for (let i = 0; i < definedLanguagePropertValue.length; i++) { 140 | if (!requestedLanguagePropertyValue[i] || definedLanguagePropertValue[i] !== requestedLanguagePropertyValue[i].toLowerCase()) { 141 | continue middle; 142 | } 143 | } 144 | break; 145 | case 'extension': 146 | for (let i = 0; i < definedLanguagePropertValue.length; i++) { 147 | const extension = definedLanguagePropertValue[i].extension; 148 | for (let ei = 0; ei < extension.length; ei++) { 149 | if (!requestedLanguagePropertyValue[i]) { 150 | continue middle; 151 | } 152 | if (!requestedLanguagePropertyValue[i].extension[ei]) { 153 | continue middle; 154 | } 155 | if (extension[ei] !== requestedLanguagePropertyValue[i].extension[ei].toLowerCase()) { 156 | continue middle; 157 | } 158 | } 159 | } 160 | break; 161 | default: 162 | if (definedLanguagePropertValue !== requestedLanguagePropertyValue.toLowerCase()) { 163 | continue middle; 164 | } 165 | } 166 | } 167 | 168 | result.push({ 169 | unmatchedRequestedSubTag, 170 | quality: languageTag.quality, 171 | languageTag: definedLangTag.value 172 | }); 173 | } 174 | } 175 | 176 | return result.length > 0 ? result.sort((a, b) => { 177 | const quality = b.quality - a.quality; 178 | if (quality != 0) { 179 | return quality; 180 | } 181 | return a.unmatchedRequestedSubTag - b.unmatchedRequestedSubTag; 182 | }).map((l) => l.languageTag) : [this.defaultLanguageTag]; 183 | 184 | function parseAndSortLanguageTags(languagePriorityList: string) { 185 | return languagePriorityList.split(',').map((weightedLanguageRange) => { 186 | const components = weightedLanguageRange.replace(/\s+/, '').split(';'); 187 | return { 188 | tag: components[0], 189 | quality: components[1] ? parseFloat(components[1].split('=')[1]) : 1.0 190 | }; 191 | }) 192 | 193 | // Filter non-defined language tags 194 | .filter((languageTag) => { 195 | if (!languageTag) { 196 | return false; 197 | } 198 | if (!languageTag.tag) { 199 | return false; 200 | } 201 | return languageTag; 202 | }); 203 | } 204 | } 205 | } 206 | 207 | function create() { 208 | const al = new AcceptLanguage(); 209 | al.create = function() { 210 | return new AcceptLanguage(); 211 | } 212 | return al; 213 | } 214 | 215 | declare var module: any; 216 | module.exports = create(); 217 | module.exports.default = create(); 218 | 219 | export default create(); 220 | -------------------------------------------------------------------------------- /Tests/Test.ts: -------------------------------------------------------------------------------- 1 | 2 | require('source-map-support').install(); 3 | 4 | import AcceptLanguage from '../Source/AcceptLanguage'; 5 | import chai = require('chai'); 6 | const expect = chai.expect; 7 | 8 | function createInstance(definedLanguages?: string[]) { 9 | const al = AcceptLanguage.create(); 10 | if (definedLanguages) { 11 | al.languages(definedLanguages); 12 | } 13 | return al; 14 | } 15 | 16 | describe('Language definitions', () => { 17 | it('should throw when defined languages is empty', () => { 18 | const method = () => { 19 | createInstance([]); 20 | }; 21 | expect(method).to.throw(); 22 | }); 23 | 24 | it('should return null on no defined languages', () => { 25 | const al = createInstance(); 26 | expect(al.get('sv')).to.equal(null); 27 | }); 28 | 29 | it('match / no-match: should return default language when no match', () => { 30 | const al = createInstance(['en']); 31 | expect(al.get('sv')).to.equal('en'); 32 | }); 33 | 34 | it('match / case-insensitive: language matching should be case-insensitive', () => { 35 | const al = createInstance(['fr-FR', 'de-DE']); 36 | expect(al.get('de-de')).to.equal('de-DE'); 37 | }); 38 | 39 | it('match / mutliple-language-requests: should match multiple requested languages', () => { 40 | const al = createInstance(['en-US']); 41 | expect(al.get('en-US,sv-SE')).to.equal('en-US'); 42 | }); 43 | 44 | it('match / mutliple-defined-languages: should match multiple defined languages', () => { 45 | const al = createInstance(['en-US', 'sv-SE']); 46 | expect(al.get('en-US,sv-SE')).to.equal('en-US'); 47 | }); 48 | 49 | it('match / quality: should match based on quality score', () => { 50 | const al = createInstance(['en-US', 'zh-CN']); 51 | expect(al.get('en-US;q=0.8,zh-CN;q=1.0')).to.equal('zh-CN'); 52 | }); 53 | 54 | it('match / specificity: should match based on specificity', () => { 55 | const al = createInstance(['en', 'en-US']); 56 | expect(al.get('en-US')).to.equal('en-US'); 57 | const al2 = createInstance(['en', 'en-US']); 58 | expect(al2.get('en, en-US')).to.equal('en'); 59 | }); 60 | 61 | it('script / perfect match', () => { 62 | const al = createInstance(['en-US', 'zh-Hant']); 63 | expect(al.get('zh-Hant;q=1,en-US;q=0.8')).to.equal('zh-Hant'); 64 | }); 65 | 66 | it('script / false match', () => { 67 | const al = createInstance(['en-US', 'zh-Hant']); 68 | expect(al.get('zh-Hans;q=1,en-US;q=0.8')).to.equal('en-US'); 69 | }); 70 | 71 | it('region / broader match', () => { 72 | const al = createInstance(['en-US', 'zh']); 73 | expect(al.get('zh-Hant')).to.equal('zh'); 74 | }); 75 | 76 | it('script / narrower match', () => { 77 | const al = createInstance(['en-US', 'zh-Hant']); 78 | expect(al.get('zh;q=1,en-US;q=0.8')).to.equal('en-US'); 79 | }); 80 | 81 | it('region / perfect match', () => { 82 | const al = createInstance(['en-US', 'zh-CN']); 83 | expect(al.get('en-US;q=0.8, zh-CN;q=1.0')).to.equal('zh-CN'); 84 | }); 85 | 86 | it('region / false match', () => { 87 | const al = createInstance(['en-US', 'zh-CN']); 88 | expect(al.get('en-US;q=0.8, zh-US;q=1.0')).to.equal('en-US'); 89 | }); 90 | 91 | it('region / broader match', () => { 92 | const al = createInstance(['en-US', 'zh']); 93 | expect(al.get('zh-CN')).to.equal('zh'); 94 | }); 95 | 96 | it('region / narrower match', () => { 97 | const al = createInstance(['en-US', 'zh-CN']); 98 | expect(al.get('zh')).to.equal('en-US'); 99 | }); 100 | 101 | it('variant / perfect match', () => { 102 | const al = createInstance(['en-US', 'de-CH-1996']); 103 | expect(al.get('en-US;q=0.8, de-CH-1996;q=1.0')).to.equal('de-CH-1996'); 104 | }); 105 | 106 | it('variant / broader match', () => { 107 | const al = createInstance(['en-US', 'de-CH-1996']); 108 | expect(al.get('en-US;q=0.8, de-CH-1996-2001;q=1.0')).to.equal('de-CH-1996'); 109 | }); 110 | 111 | it('variant / narrower match', () => { 112 | const al = createInstance(['en-US', 'de-CH-1996-2001']); 113 | expect(al.get('en-US;q=0.8, de-CH-1996;q=1.0')).to.equal('en-US'); 114 | }); 115 | 116 | it('privateuse / perfect match', () => { 117 | const al = createInstance(['en-US', 'de-CH-x-a']); 118 | expect(al.get('en-US;q=0.8, de-CH-x-a;q=1.0')).to.equal('de-CH-x-a'); 119 | }); 120 | 121 | it('privateuse / broader request', () => { 122 | const al = createInstance(['en-US', 'de-CH-x-a']); 123 | expect(al.get('en-US;q=0.8, de-CH-x-a-b;q=1.0')).to.equal('de-CH-x-a'); 124 | }); 125 | 126 | it('privateuse / narrower request', () => { 127 | const al = createInstance(['en-US', 'de-CH-x-a-b']); 128 | expect(al.get('en-US;q=0.8, de-CH-x-a;q=1.0')).to.equal('en-US'); 129 | }); 130 | 131 | it('extension / perfect match', () => { 132 | const al = createInstance(['zh-CN', 'en-a-bbb']); 133 | expect(al.get('en-US;q=0.8, en-a-bbb;q=1.0')).to.equal('en-a-bbb'); 134 | }); 135 | 136 | it('extension / broader match', () => { 137 | const al = createInstance(['zh-CN', 'en-a-bbb']); 138 | expect(al.get('en-US;q=0.8, en-a-bbb-ccc;q=1.0')).to.equal('en-a-bbb'); 139 | }); 140 | 141 | it('extension / narrower match', () => { 142 | const al = createInstance(['zh-CN', 'en-a-bbb-ccc']); 143 | expect(al.get('en-US;q=0.8, en-a-bbb;q=1.0')).to.equal('zh-CN'); 144 | }); 145 | 146 | it('extension / multiple extensions / perfect match', () => { 147 | const al = createInstance(['zh-CN', 'en-a-bbb-ccc-b-ddd']); 148 | expect(al.get('en-US;q=0.8, en-a-bbb-ccc-b-ddd;q=1.0')).to.equal('en-a-bbb-ccc-b-ddd'); 149 | }); 150 | 151 | it('extension / multiple extensions / broader match', () => { 152 | const al = createInstance(['zh-CN', 'en-a-bbb-ccc-b-ddd']); 153 | expect(al.get('en-US;q=0.8, en-a-bbb-ccc-ddd-b-ddd-aaa;q=1.0')).to.equal('en-a-bbb-ccc-b-ddd'); 154 | }); 155 | 156 | it('extension / multiple extensions / narrower match', () => { 157 | const al = createInstance(['zh-CN', 'en-a-bbb-ccc-b-ddd']); 158 | expect(al.get('en-US;q=0.8, en-a-bbb-b-ddd;q=1.0')).to.equal('zh-CN'); 159 | }); 160 | 161 | it('multiple subscripts / perfect match', () => { 162 | const al = createInstance(['sv-SE', 'zh-Hant-CN-x-red']); 163 | expect(al.get('en-US;q=0.8,zh-Hant-CN-x-red;q=1')).to.equal('zh-Hant-CN-x-red'); 164 | }); 165 | 166 | it('multiple subscripts / broader match', () => { 167 | const al = createInstance(['sv-SE', 'zh-Hant-CN-x-red']); 168 | expect(al.get('en-US;q=0.8,zh-Hant-CN-x-red-blue;q=1')).to.equal('zh-Hant-CN-x-red'); 169 | }); 170 | 171 | it('multiple subscripts / narrower match', () => { 172 | const al = createInstance(['sv-SE', 'zh-Hant-CN-x-red-blue']); 173 | expect(al.get('en-US;q=0.8,zh-Hant-CN-x-red;q=1')).to.equal('sv-SE'); 174 | }); 175 | 176 | it('multiple subscripts / no match', () => { 177 | const al = createInstance(['sv-SE', 'zh-Hant-CN-x-red']); 178 | expect(al.get('en-US;q=0.8,zh-Hans-CN-x-red;q=1')).to.equal('sv-SE'); 179 | }); 180 | 181 | it('should match on *', () => { 182 | const al = createInstance(['en-US']); 183 | expect(al.get('*')).to.equal('en-US'); 184 | }); 185 | 186 | it('should keep priority defined by languages', () => { 187 | const al = createInstance(['en', 'ja', 'ko', 'zh-CN', 'zh-TW', 'de', 'es', 'fr', 'it']); 188 | expect(al.get('en, ja, ne, zh, zh-TW, zh-CN, af, sq, am, ar, an')).to.equal('en'); 189 | }); 190 | 191 | it('should return default language on falsy get', () => { 192 | const al = createInstance(['sv-SE', 'zh-Hant-CN-x-red']); 193 | expect(al.get(undefined)).to.equal('sv-SE'); 194 | expect(al.get(null)).to.equal('sv-SE'); 195 | expect(al.get('')).to.equal('sv-SE'); 196 | }); 197 | }); 198 | -------------------------------------------------------------------------------- /Typings/bcp47.d.ts: -------------------------------------------------------------------------------- 1 | 2 | declare module 'bcp47' { 3 | interface Extension { 4 | singleton: string; 5 | extension: string[]; 6 | } 7 | 8 | interface Language { 9 | 10 | /** 11 | * shortest ISO 639 code sometimes followed by extended language 12 | * subtags or reserved for future use or registered language subtag. 13 | */ 14 | language: string; 15 | 16 | /** 17 | * selected ISO 639 codes permanently reserved. 18 | */ 19 | extlang: string[]; 20 | } 21 | 22 | interface LanguageTag { 23 | language: Language; 24 | 25 | /** 26 | * ISO 3166-1 code. 27 | */ 28 | region: string | null; 29 | 30 | /** 31 | * ISO 15924 code. 32 | */ 33 | script: string | null; 34 | 35 | /** 36 | * Registered variants. 37 | */ 38 | variant: string[]; 39 | 40 | /** 41 | * Extensions. 42 | */ 43 | extension: Extension[]; 44 | 45 | /** 46 | * Single alphanumerics "x" reserved for private use. 47 | */ 48 | privateuse: string[]; 49 | } 50 | 51 | interface LanguageData { 52 | langtag: LanguageTag; 53 | privateuse: string[]; 54 | } 55 | 56 | export function parse(languageRange: string): LanguageData; 57 | } 58 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "accept-language", 3 | "version": "3.0.20", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "accept-language", 9 | "version": "3.0.20", 10 | "license": "MIT", 11 | "dependencies": { 12 | "bcp47": "^1.1.2" 13 | }, 14 | "devDependencies": { 15 | "@types/chai": "^3.4.32", 16 | "@types/mocha": "^2.2.31", 17 | "@types/node": "^8.0.31", 18 | "chai": "~1.9.1", 19 | "mocha": "^10.7.3", 20 | "source-map-support": "^0.4.18" 21 | } 22 | }, 23 | "node_modules/@types/chai": { 24 | "version": "3.5.2", 25 | "resolved": "https://registry.npmjs.org/@types/chai/-/chai-3.5.2.tgz", 26 | "integrity": "sha512-+ZvkforUDGqwU1npZYIMPuszsInIypxL81rFAsCGDs9CRhAEWO6s3rpO+TfJk9mgUgxKNMnSVQa/npPPD4gJXw==", 27 | "dev": true 28 | }, 29 | "node_modules/@types/mocha": { 30 | "version": "2.2.48", 31 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", 32 | "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", 33 | "dev": true 34 | }, 35 | "node_modules/@types/node": { 36 | "version": "8.10.66", 37 | "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", 38 | "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", 39 | "dev": true 40 | }, 41 | "node_modules/ansi-colors": { 42 | "version": "4.1.3", 43 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", 44 | "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", 45 | "dev": true, 46 | "engines": { 47 | "node": ">=6" 48 | } 49 | }, 50 | "node_modules/ansi-regex": { 51 | "version": "5.0.1", 52 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 53 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 54 | "dev": true, 55 | "engines": { 56 | "node": ">=8" 57 | } 58 | }, 59 | "node_modules/ansi-styles": { 60 | "version": "4.3.0", 61 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 62 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 63 | "dev": true, 64 | "dependencies": { 65 | "color-convert": "^2.0.1" 66 | }, 67 | "engines": { 68 | "node": ">=8" 69 | }, 70 | "funding": { 71 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 72 | } 73 | }, 74 | "node_modules/anymatch": { 75 | "version": "3.1.3", 76 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 77 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 78 | "dev": true, 79 | "dependencies": { 80 | "normalize-path": "^3.0.0", 81 | "picomatch": "^2.0.4" 82 | }, 83 | "engines": { 84 | "node": ">= 8" 85 | } 86 | }, 87 | "node_modules/argparse": { 88 | "version": "2.0.1", 89 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 90 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 91 | "dev": true 92 | }, 93 | "node_modules/assertion-error": { 94 | "version": "1.0.0", 95 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz", 96 | "integrity": "sha512-g/gZV+G476cnmtYI+Ko9d5khxSoCSoom/EaNmmCfwpOvBXEJ18qwFrxfP1/CsIqk2no1sAKKwxndV0tP7ROOFQ==", 97 | "dev": true, 98 | "engines": { 99 | "node": "*" 100 | } 101 | }, 102 | "node_modules/balanced-match": { 103 | "version": "1.0.2", 104 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 105 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 106 | "dev": true 107 | }, 108 | "node_modules/bcp47": { 109 | "version": "1.1.2", 110 | "resolved": "https://registry.npmjs.org/bcp47/-/bcp47-1.1.2.tgz", 111 | "integrity": "sha512-JnkkL4GUpOvvanH9AZPX38CxhiLsXMBicBY2IAtqiVN8YulGDQybUydWA4W6yAMtw6iShtw+8HEF6cfrTHU+UQ==", 112 | "engines": { 113 | "node": ">=0.10" 114 | } 115 | }, 116 | "node_modules/binary-extensions": { 117 | "version": "2.3.0", 118 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", 119 | "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", 120 | "dev": true, 121 | "engines": { 122 | "node": ">=8" 123 | }, 124 | "funding": { 125 | "url": "https://github.com/sponsors/sindresorhus" 126 | } 127 | }, 128 | "node_modules/brace-expansion": { 129 | "version": "2.0.1", 130 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 131 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 132 | "dev": true, 133 | "dependencies": { 134 | "balanced-match": "^1.0.0" 135 | } 136 | }, 137 | "node_modules/braces": { 138 | "version": "3.0.3", 139 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 140 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 141 | "dev": true, 142 | "dependencies": { 143 | "fill-range": "^7.1.1" 144 | }, 145 | "engines": { 146 | "node": ">=8" 147 | } 148 | }, 149 | "node_modules/browser-stdout": { 150 | "version": "1.3.1", 151 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 152 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 153 | "dev": true 154 | }, 155 | "node_modules/camelcase": { 156 | "version": "6.3.0", 157 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 158 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 159 | "dev": true, 160 | "engines": { 161 | "node": ">=10" 162 | }, 163 | "funding": { 164 | "url": "https://github.com/sponsors/sindresorhus" 165 | } 166 | }, 167 | "node_modules/chai": { 168 | "version": "1.9.2", 169 | "resolved": "https://registry.npmjs.org/chai/-/chai-1.9.2.tgz", 170 | "integrity": "sha512-olRoaitftnzWHFEAza6MXR4w+FfZrOVyV7r7U/Z8ObJefCgL8IuWkAuASJjSXrpP9wvgoL8+1dB9RbMLc2FkNg==", 171 | "dev": true, 172 | "dependencies": { 173 | "assertion-error": "1.0.0", 174 | "deep-eql": "0.1.3" 175 | }, 176 | "engines": { 177 | "node": ">= 0.4.0" 178 | } 179 | }, 180 | "node_modules/chalk": { 181 | "version": "4.1.2", 182 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 183 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 184 | "dev": true, 185 | "dependencies": { 186 | "ansi-styles": "^4.1.0", 187 | "supports-color": "^7.1.0" 188 | }, 189 | "engines": { 190 | "node": ">=10" 191 | }, 192 | "funding": { 193 | "url": "https://github.com/chalk/chalk?sponsor=1" 194 | } 195 | }, 196 | "node_modules/chalk/node_modules/supports-color": { 197 | "version": "7.2.0", 198 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 199 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 200 | "dev": true, 201 | "dependencies": { 202 | "has-flag": "^4.0.0" 203 | }, 204 | "engines": { 205 | "node": ">=8" 206 | } 207 | }, 208 | "node_modules/chokidar": { 209 | "version": "3.6.0", 210 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", 211 | "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 212 | "dev": true, 213 | "dependencies": { 214 | "anymatch": "~3.1.2", 215 | "braces": "~3.0.2", 216 | "glob-parent": "~5.1.2", 217 | "is-binary-path": "~2.1.0", 218 | "is-glob": "~4.0.1", 219 | "normalize-path": "~3.0.0", 220 | "readdirp": "~3.6.0" 221 | }, 222 | "engines": { 223 | "node": ">= 8.10.0" 224 | }, 225 | "funding": { 226 | "url": "https://paulmillr.com/funding/" 227 | }, 228 | "optionalDependencies": { 229 | "fsevents": "~2.3.2" 230 | } 231 | }, 232 | "node_modules/cliui": { 233 | "version": "7.0.4", 234 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 235 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 236 | "dev": true, 237 | "dependencies": { 238 | "string-width": "^4.2.0", 239 | "strip-ansi": "^6.0.0", 240 | "wrap-ansi": "^7.0.0" 241 | } 242 | }, 243 | "node_modules/color-convert": { 244 | "version": "2.0.1", 245 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 246 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 247 | "dev": true, 248 | "dependencies": { 249 | "color-name": "~1.1.4" 250 | }, 251 | "engines": { 252 | "node": ">=7.0.0" 253 | } 254 | }, 255 | "node_modules/color-name": { 256 | "version": "1.1.4", 257 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 258 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 259 | "dev": true 260 | }, 261 | "node_modules/debug": { 262 | "version": "4.3.6", 263 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", 264 | "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", 265 | "dev": true, 266 | "dependencies": { 267 | "ms": "2.1.2" 268 | }, 269 | "engines": { 270 | "node": ">=6.0" 271 | }, 272 | "peerDependenciesMeta": { 273 | "supports-color": { 274 | "optional": true 275 | } 276 | } 277 | }, 278 | "node_modules/debug/node_modules/ms": { 279 | "version": "2.1.2", 280 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 281 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 282 | "dev": true 283 | }, 284 | "node_modules/decamelize": { 285 | "version": "4.0.0", 286 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 287 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 288 | "dev": true, 289 | "engines": { 290 | "node": ">=10" 291 | }, 292 | "funding": { 293 | "url": "https://github.com/sponsors/sindresorhus" 294 | } 295 | }, 296 | "node_modules/deep-eql": { 297 | "version": "0.1.3", 298 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", 299 | "integrity": "sha512-6sEotTRGBFiNcqVoeHwnfopbSpi5NbH1VWJmYCVkmxMmaVTT0bUTrNaGyBwhgP4MZL012W/mkzIn3Da+iDYweg==", 300 | "dev": true, 301 | "dependencies": { 302 | "type-detect": "0.1.1" 303 | }, 304 | "engines": { 305 | "node": "*" 306 | } 307 | }, 308 | "node_modules/diff": { 309 | "version": "5.2.0", 310 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", 311 | "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", 312 | "dev": true, 313 | "engines": { 314 | "node": ">=0.3.1" 315 | } 316 | }, 317 | "node_modules/emoji-regex": { 318 | "version": "8.0.0", 319 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 320 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 321 | "dev": true 322 | }, 323 | "node_modules/escalade": { 324 | "version": "3.1.2", 325 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", 326 | "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", 327 | "dev": true, 328 | "engines": { 329 | "node": ">=6" 330 | } 331 | }, 332 | "node_modules/escape-string-regexp": { 333 | "version": "4.0.0", 334 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 335 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 336 | "dev": true, 337 | "engines": { 338 | "node": ">=10" 339 | }, 340 | "funding": { 341 | "url": "https://github.com/sponsors/sindresorhus" 342 | } 343 | }, 344 | "node_modules/fill-range": { 345 | "version": "7.1.1", 346 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 347 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 348 | "dev": true, 349 | "dependencies": { 350 | "to-regex-range": "^5.0.1" 351 | }, 352 | "engines": { 353 | "node": ">=8" 354 | } 355 | }, 356 | "node_modules/find-up": { 357 | "version": "5.0.0", 358 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 359 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 360 | "dev": true, 361 | "dependencies": { 362 | "locate-path": "^6.0.0", 363 | "path-exists": "^4.0.0" 364 | }, 365 | "engines": { 366 | "node": ">=10" 367 | }, 368 | "funding": { 369 | "url": "https://github.com/sponsors/sindresorhus" 370 | } 371 | }, 372 | "node_modules/flat": { 373 | "version": "5.0.2", 374 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 375 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 376 | "dev": true, 377 | "bin": { 378 | "flat": "cli.js" 379 | } 380 | }, 381 | "node_modules/fs.realpath": { 382 | "version": "1.0.0", 383 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 384 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 385 | "dev": true 386 | }, 387 | "node_modules/fsevents": { 388 | "version": "2.3.3", 389 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 390 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 391 | "dev": true, 392 | "hasInstallScript": true, 393 | "optional": true, 394 | "os": [ 395 | "darwin" 396 | ], 397 | "engines": { 398 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 399 | } 400 | }, 401 | "node_modules/get-caller-file": { 402 | "version": "2.0.5", 403 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 404 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 405 | "dev": true, 406 | "engines": { 407 | "node": "6.* || 8.* || >= 10.*" 408 | } 409 | }, 410 | "node_modules/glob": { 411 | "version": "8.1.0", 412 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", 413 | "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", 414 | "deprecated": "Glob versions prior to v9 are no longer supported", 415 | "dev": true, 416 | "dependencies": { 417 | "fs.realpath": "^1.0.0", 418 | "inflight": "^1.0.4", 419 | "inherits": "2", 420 | "minimatch": "^5.0.1", 421 | "once": "^1.3.0" 422 | }, 423 | "engines": { 424 | "node": ">=12" 425 | }, 426 | "funding": { 427 | "url": "https://github.com/sponsors/isaacs" 428 | } 429 | }, 430 | "node_modules/glob-parent": { 431 | "version": "5.1.2", 432 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 433 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 434 | "dev": true, 435 | "dependencies": { 436 | "is-glob": "^4.0.1" 437 | }, 438 | "engines": { 439 | "node": ">= 6" 440 | } 441 | }, 442 | "node_modules/has-flag": { 443 | "version": "4.0.0", 444 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 445 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 446 | "dev": true, 447 | "engines": { 448 | "node": ">=8" 449 | } 450 | }, 451 | "node_modules/he": { 452 | "version": "1.2.0", 453 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 454 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 455 | "dev": true, 456 | "bin": { 457 | "he": "bin/he" 458 | } 459 | }, 460 | "node_modules/inflight": { 461 | "version": "1.0.6", 462 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 463 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 464 | "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", 465 | "dev": true, 466 | "dependencies": { 467 | "once": "^1.3.0", 468 | "wrappy": "1" 469 | } 470 | }, 471 | "node_modules/inherits": { 472 | "version": "2.0.4", 473 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 474 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 475 | "dev": true 476 | }, 477 | "node_modules/is-binary-path": { 478 | "version": "2.1.0", 479 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 480 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 481 | "dev": true, 482 | "dependencies": { 483 | "binary-extensions": "^2.0.0" 484 | }, 485 | "engines": { 486 | "node": ">=8" 487 | } 488 | }, 489 | "node_modules/is-extglob": { 490 | "version": "2.1.1", 491 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 492 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 493 | "dev": true, 494 | "engines": { 495 | "node": ">=0.10.0" 496 | } 497 | }, 498 | "node_modules/is-fullwidth-code-point": { 499 | "version": "3.0.0", 500 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 501 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 502 | "dev": true, 503 | "engines": { 504 | "node": ">=8" 505 | } 506 | }, 507 | "node_modules/is-glob": { 508 | "version": "4.0.3", 509 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 510 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 511 | "dev": true, 512 | "dependencies": { 513 | "is-extglob": "^2.1.1" 514 | }, 515 | "engines": { 516 | "node": ">=0.10.0" 517 | } 518 | }, 519 | "node_modules/is-number": { 520 | "version": "7.0.0", 521 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 522 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 523 | "dev": true, 524 | "engines": { 525 | "node": ">=0.12.0" 526 | } 527 | }, 528 | "node_modules/is-plain-obj": { 529 | "version": "2.1.0", 530 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 531 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 532 | "dev": true, 533 | "engines": { 534 | "node": ">=8" 535 | } 536 | }, 537 | "node_modules/is-unicode-supported": { 538 | "version": "0.1.0", 539 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 540 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 541 | "dev": true, 542 | "engines": { 543 | "node": ">=10" 544 | }, 545 | "funding": { 546 | "url": "https://github.com/sponsors/sindresorhus" 547 | } 548 | }, 549 | "node_modules/js-yaml": { 550 | "version": "4.1.0", 551 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 552 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 553 | "dev": true, 554 | "dependencies": { 555 | "argparse": "^2.0.1" 556 | }, 557 | "bin": { 558 | "js-yaml": "bin/js-yaml.js" 559 | } 560 | }, 561 | "node_modules/locate-path": { 562 | "version": "6.0.0", 563 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 564 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 565 | "dev": true, 566 | "dependencies": { 567 | "p-locate": "^5.0.0" 568 | }, 569 | "engines": { 570 | "node": ">=10" 571 | }, 572 | "funding": { 573 | "url": "https://github.com/sponsors/sindresorhus" 574 | } 575 | }, 576 | "node_modules/log-symbols": { 577 | "version": "4.1.0", 578 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 579 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 580 | "dev": true, 581 | "dependencies": { 582 | "chalk": "^4.1.0", 583 | "is-unicode-supported": "^0.1.0" 584 | }, 585 | "engines": { 586 | "node": ">=10" 587 | }, 588 | "funding": { 589 | "url": "https://github.com/sponsors/sindresorhus" 590 | } 591 | }, 592 | "node_modules/minimatch": { 593 | "version": "5.1.6", 594 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 595 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 596 | "dev": true, 597 | "dependencies": { 598 | "brace-expansion": "^2.0.1" 599 | }, 600 | "engines": { 601 | "node": ">=10" 602 | } 603 | }, 604 | "node_modules/mocha": { 605 | "version": "10.7.3", 606 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", 607 | "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", 608 | "dev": true, 609 | "dependencies": { 610 | "ansi-colors": "^4.1.3", 611 | "browser-stdout": "^1.3.1", 612 | "chokidar": "^3.5.3", 613 | "debug": "^4.3.5", 614 | "diff": "^5.2.0", 615 | "escape-string-regexp": "^4.0.0", 616 | "find-up": "^5.0.0", 617 | "glob": "^8.1.0", 618 | "he": "^1.2.0", 619 | "js-yaml": "^4.1.0", 620 | "log-symbols": "^4.1.0", 621 | "minimatch": "^5.1.6", 622 | "ms": "^2.1.3", 623 | "serialize-javascript": "^6.0.2", 624 | "strip-json-comments": "^3.1.1", 625 | "supports-color": "^8.1.1", 626 | "workerpool": "^6.5.1", 627 | "yargs": "^16.2.0", 628 | "yargs-parser": "^20.2.9", 629 | "yargs-unparser": "^2.0.0" 630 | }, 631 | "bin": { 632 | "_mocha": "bin/_mocha", 633 | "mocha": "bin/mocha.js" 634 | }, 635 | "engines": { 636 | "node": ">= 14.0.0" 637 | } 638 | }, 639 | "node_modules/ms": { 640 | "version": "2.1.3", 641 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 642 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 643 | "dev": true 644 | }, 645 | "node_modules/normalize-path": { 646 | "version": "3.0.0", 647 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 648 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 649 | "dev": true, 650 | "engines": { 651 | "node": ">=0.10.0" 652 | } 653 | }, 654 | "node_modules/once": { 655 | "version": "1.4.0", 656 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 657 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 658 | "dev": true, 659 | "dependencies": { 660 | "wrappy": "1" 661 | } 662 | }, 663 | "node_modules/p-limit": { 664 | "version": "3.1.0", 665 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 666 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 667 | "dev": true, 668 | "dependencies": { 669 | "yocto-queue": "^0.1.0" 670 | }, 671 | "engines": { 672 | "node": ">=10" 673 | }, 674 | "funding": { 675 | "url": "https://github.com/sponsors/sindresorhus" 676 | } 677 | }, 678 | "node_modules/p-locate": { 679 | "version": "5.0.0", 680 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 681 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 682 | "dev": true, 683 | "dependencies": { 684 | "p-limit": "^3.0.2" 685 | }, 686 | "engines": { 687 | "node": ">=10" 688 | }, 689 | "funding": { 690 | "url": "https://github.com/sponsors/sindresorhus" 691 | } 692 | }, 693 | "node_modules/path-exists": { 694 | "version": "4.0.0", 695 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 696 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 697 | "dev": true, 698 | "engines": { 699 | "node": ">=8" 700 | } 701 | }, 702 | "node_modules/picomatch": { 703 | "version": "2.3.1", 704 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 705 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 706 | "dev": true, 707 | "engines": { 708 | "node": ">=8.6" 709 | }, 710 | "funding": { 711 | "url": "https://github.com/sponsors/jonschlinkert" 712 | } 713 | }, 714 | "node_modules/randombytes": { 715 | "version": "2.1.0", 716 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 717 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 718 | "dev": true, 719 | "dependencies": { 720 | "safe-buffer": "^5.1.0" 721 | } 722 | }, 723 | "node_modules/readdirp": { 724 | "version": "3.6.0", 725 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 726 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 727 | "dev": true, 728 | "dependencies": { 729 | "picomatch": "^2.2.1" 730 | }, 731 | "engines": { 732 | "node": ">=8.10.0" 733 | } 734 | }, 735 | "node_modules/require-directory": { 736 | "version": "2.1.1", 737 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 738 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 739 | "dev": true, 740 | "engines": { 741 | "node": ">=0.10.0" 742 | } 743 | }, 744 | "node_modules/safe-buffer": { 745 | "version": "5.2.1", 746 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 747 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 748 | "dev": true, 749 | "funding": [ 750 | { 751 | "type": "github", 752 | "url": "https://github.com/sponsors/feross" 753 | }, 754 | { 755 | "type": "patreon", 756 | "url": "https://www.patreon.com/feross" 757 | }, 758 | { 759 | "type": "consulting", 760 | "url": "https://feross.org/support" 761 | } 762 | ] 763 | }, 764 | "node_modules/serialize-javascript": { 765 | "version": "6.0.2", 766 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", 767 | "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", 768 | "dev": true, 769 | "dependencies": { 770 | "randombytes": "^2.1.0" 771 | } 772 | }, 773 | "node_modules/source-map": { 774 | "version": "0.5.7", 775 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 776 | "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", 777 | "dev": true, 778 | "engines": { 779 | "node": ">=0.10.0" 780 | } 781 | }, 782 | "node_modules/source-map-support": { 783 | "version": "0.4.18", 784 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 785 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", 786 | "dev": true, 787 | "dependencies": { 788 | "source-map": "^0.5.6" 789 | } 790 | }, 791 | "node_modules/string-width": { 792 | "version": "4.2.3", 793 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 794 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 795 | "dev": true, 796 | "dependencies": { 797 | "emoji-regex": "^8.0.0", 798 | "is-fullwidth-code-point": "^3.0.0", 799 | "strip-ansi": "^6.0.1" 800 | }, 801 | "engines": { 802 | "node": ">=8" 803 | } 804 | }, 805 | "node_modules/strip-ansi": { 806 | "version": "6.0.1", 807 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 808 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 809 | "dev": true, 810 | "dependencies": { 811 | "ansi-regex": "^5.0.1" 812 | }, 813 | "engines": { 814 | "node": ">=8" 815 | } 816 | }, 817 | "node_modules/strip-json-comments": { 818 | "version": "3.1.1", 819 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 820 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 821 | "dev": true, 822 | "engines": { 823 | "node": ">=8" 824 | }, 825 | "funding": { 826 | "url": "https://github.com/sponsors/sindresorhus" 827 | } 828 | }, 829 | "node_modules/supports-color": { 830 | "version": "8.1.1", 831 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 832 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 833 | "dev": true, 834 | "dependencies": { 835 | "has-flag": "^4.0.0" 836 | }, 837 | "engines": { 838 | "node": ">=10" 839 | }, 840 | "funding": { 841 | "url": "https://github.com/chalk/supports-color?sponsor=1" 842 | } 843 | }, 844 | "node_modules/to-regex-range": { 845 | "version": "5.0.1", 846 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 847 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 848 | "dev": true, 849 | "dependencies": { 850 | "is-number": "^7.0.0" 851 | }, 852 | "engines": { 853 | "node": ">=8.0" 854 | } 855 | }, 856 | "node_modules/type-detect": { 857 | "version": "0.1.1", 858 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", 859 | "integrity": "sha512-5rqszGVwYgBoDkIm2oUtvkfZMQ0vk29iDMU0W2qCa3rG0vPDNczCMT4hV/bLBgLg8k8ri6+u3Zbt+S/14eMzlA==", 860 | "dev": true, 861 | "engines": { 862 | "node": "*" 863 | } 864 | }, 865 | "node_modules/workerpool": { 866 | "version": "6.5.1", 867 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", 868 | "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", 869 | "dev": true 870 | }, 871 | "node_modules/wrap-ansi": { 872 | "version": "7.0.0", 873 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 874 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 875 | "dev": true, 876 | "dependencies": { 877 | "ansi-styles": "^4.0.0", 878 | "string-width": "^4.1.0", 879 | "strip-ansi": "^6.0.0" 880 | }, 881 | "engines": { 882 | "node": ">=10" 883 | }, 884 | "funding": { 885 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 886 | } 887 | }, 888 | "node_modules/wrappy": { 889 | "version": "1.0.2", 890 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 891 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 892 | "dev": true 893 | }, 894 | "node_modules/y18n": { 895 | "version": "5.0.8", 896 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 897 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 898 | "dev": true, 899 | "engines": { 900 | "node": ">=10" 901 | } 902 | }, 903 | "node_modules/yargs": { 904 | "version": "16.2.0", 905 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 906 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 907 | "dev": true, 908 | "dependencies": { 909 | "cliui": "^7.0.2", 910 | "escalade": "^3.1.1", 911 | "get-caller-file": "^2.0.5", 912 | "require-directory": "^2.1.1", 913 | "string-width": "^4.2.0", 914 | "y18n": "^5.0.5", 915 | "yargs-parser": "^20.2.2" 916 | }, 917 | "engines": { 918 | "node": ">=10" 919 | } 920 | }, 921 | "node_modules/yargs-parser": { 922 | "version": "20.2.9", 923 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 924 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", 925 | "dev": true, 926 | "engines": { 927 | "node": ">=10" 928 | } 929 | }, 930 | "node_modules/yargs-unparser": { 931 | "version": "2.0.0", 932 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 933 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 934 | "dev": true, 935 | "dependencies": { 936 | "camelcase": "^6.0.0", 937 | "decamelize": "^4.0.0", 938 | "flat": "^5.0.2", 939 | "is-plain-obj": "^2.1.0" 940 | }, 941 | "engines": { 942 | "node": ">=10" 943 | } 944 | }, 945 | "node_modules/yocto-queue": { 946 | "version": "0.1.0", 947 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 948 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 949 | "dev": true, 950 | "engines": { 951 | "node": ">=10" 952 | }, 953 | "funding": { 954 | "url": "https://github.com/sponsors/sindresorhus" 955 | } 956 | } 957 | } 958 | } 959 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "accept-language", 3 | "version": "3.0.20", 4 | "description": "Accept-Language parser for nodejs", 5 | "main": "Build/Source/AcceptLanguage.js", 6 | "scripts": { 7 | "build": "tsc", 8 | "test": "node node_modules/mocha/bin/mocha Build/Tests/Test.js" 9 | }, 10 | "types": "Library/Typings.d.ts", 11 | "repository": { 12 | "type": "git", 13 | "url": "git://github.com/tinganho/node-accept-language.git" 14 | }, 15 | "keywords": [ 16 | "accept-language", 17 | "i18n", 18 | "http" 19 | ], 20 | "author": "Tingan Ho ", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/tinganho/node-accept-language/issues" 24 | }, 25 | "homepage": "https://github.com/tinganho/node-accept-language", 26 | "devDependencies": { 27 | "@types/chai": "^3.4.32", 28 | "@types/mocha": "^2.2.31", 29 | "@types/node": "^8.0.31", 30 | "chai": "~1.9.1", 31 | "mocha": "^10.7.3", 32 | "source-map-support": "^0.4.18" 33 | }, 34 | "dependencies": { 35 | "bcp47": "^1.1.2" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "outDir": "Build", 5 | "module": "commonjs", 6 | "sourceMap": true, 7 | "noUnusedLocals": true, 8 | "noUnusedParameters": true, 9 | "strict": true 10 | } 11 | } 12 | --------------------------------------------------------------------------------