Skip to content

Commit 588289d

Browse files
committed
feat!: rewrite
1 parent 5162bd6 commit 588289d

File tree

5 files changed

+663
-1111
lines changed

5 files changed

+663
-1111
lines changed

README.md

Lines changed: 0 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -2,78 +2,3 @@
22

33
Parses the accept-language header from an HTTP request and produces an array of
44
language objects sorted by quality.
5-
6-
## Installation
7-
8-
`npm install @escapace/accept-language-parser`
9-
10-
## API
11-
12-
#### parse(acceptLanguageHeader)
13-
14-
```js
15-
import { parse } from '@escapace/accept-language-parser'
16-
17-
const languages = parse('en-GB,en;q=0.8')
18-
19-
console.log(languages)
20-
```
21-
22-
Output will be:
23-
24-
```js
25-
;[
26-
{
27-
code: 'en',
28-
region: 'GB',
29-
quality: 1.0,
30-
},
31-
{
32-
code: 'en',
33-
region: undefined,
34-
quality: 0.8,
35-
},
36-
]
37-
```
38-
39-
Output is always sorted in quality order from highest -> lowest. As per the HTTP spec, omitting the quality value implies 1.0.
40-
41-
#### pick(supportedLangugagesArray, acceptLanguageHeader, options = {})
42-
43-
```js
44-
import { pick } from '@escapace/accept-language-parser'
45-
46-
const language = pick(['fr-CA', 'fr-FR', 'fr'], 'en-GB,en-US;q=0.9,fr-CA;q=0.7,en;q=0.8')
47-
48-
console.log(language)
49-
```
50-
51-
Output will be:
52-
53-
```js
54-
'fr-CA'
55-
```
56-
57-
The `options` supports the `loose` flag which allows partial matching on supported languages.
58-
59-
For example:
60-
61-
```js
62-
pick(['fr', 'en'], 'en-GB,en-US;q=0.9,fr-CA;q=0.7,en;q=0.8', {
63-
loose: true,
64-
})
65-
```
66-
67-
Would return:
68-
69-
```js
70-
'fr'
71-
```
72-
73-
In loose mode the order of `supportedLanguagesArray` matters, as it is the first partially matching language that is returned. It means that if you want to pick more specific langauges first, you should list it first as well.
74-
75-
For example:
76-
77-
```javascript
78-
;['fr-CA', 'fr']
79-
```

package.json

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,31 @@
77
"email": "opensource@escapace.com"
88
},
99
"bugs": "https://github.com/escapace/accept-language-parser/issues",
10+
"dependencies": {
11+
"bcp-47-match": "^2.0.3",
12+
"bcp-47-normalize": "^2.3.0"
13+
},
1014
"devDependencies": {
11-
"@commitlint/cli": "19.6.0",
12-
"@commitlint/config-conventional": "19.6.0",
15+
"@commitlint/cli": "19.7.1",
16+
"@commitlint/config-conventional": "19.7.1",
1317
"@escapace/pnpm-pack": "0.5.4",
1418
"@ls-lint/ls-lint": "2.2.3",
15-
"@vitest/coverage-v8": "2.1.8",
16-
"eslint": "9.17.0",
17-
"eslint-config-escapace": "5.4.1",
18-
"esroll": "0.3.1",
19-
"knip": "5.40.0",
20-
"lefthook": "1.9.2",
21-
"prettier": "3.4.2",
19+
"@vitest/coverage-v8": "3.0.5",
20+
"eslint": "9.20.1",
21+
"eslint-config-escapace": "5.4.5",
22+
"esroll": "0.4.0",
23+
"hono": "4.7.0",
24+
"knip": "5.44.0",
25+
"lefthook": "1.10.10",
26+
"prettier": "3.5.0",
2227
"prettier-config-escapace": "1.2.1",
23-
"syncpack": "13.0.0",
28+
"syncpack": "13.0.2",
2429
"tsx": "4.19.2",
25-
"typescript": "5.7.2",
26-
"vitest": "2.1.9"
30+
"typescript": "5.7.3",
31+
"vitest": "3.0.5"
2732
},
2833
"engines": {
29-
"pnpm": ">=9.14.4"
34+
"pnpm": ">=9.15.4"
3035
},
3136
"exports": {
3237
".": {
@@ -41,6 +46,12 @@
4146
"homepage": "https://github.com/escapace/accept-language-parser#readme",
4247
"license": "MPL-2.0",
4348
"module": "lib/neutral/index.js",
49+
"pnpm": {
50+
"onlyBuiltDependencies": [
51+
"esbuild",
52+
"lefthook"
53+
]
54+
},
4455
"private": false,
4556
"publishConfig": {
4657
"access": "public",

0 commit comments

Comments
 (0)