Socket
Socket
Sign inDemoInstall

bcp-47-match

Package Overview
Dependencies
0
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.0.2 to 2.0.3

26

index.d.ts

@@ -13,12 +13,36 @@ export function basicFilter(

): string | undefined
/**
* BCP-47 tag.
*/
export type Tag = string
/**
* List of BCP-47 tags.
*/
export type Tags = Array<Tag>
/**
* RFC 4647 range.
*/
export type Range = string
/**
* List of RFC 4647 range.
*/
export type Ranges = Array<Range>
/**
* An internal check.
*/
export type Check = (tag: Tag, range: Range) => boolean
/**
* Filter: yields all tags that match a range.
*/
export type Filter = FilterOrLookup<true>
/**
* Lookup: yields the best tag that matches a range.
*/
export type Lookup = FilterOrLookup<false>
/**
* A check.
*/
export type FilterOrLookup<IsFilter extends boolean> = (
tags: Tag | Tags,
ranges?: string | Ranges | undefined
ranges?: Range | Ranges | undefined
) => IsFilter extends true ? Tags : Tag | undefined
/**
* See <https://tools.ietf.org/html/rfc4647#section-3.1>
* for more information on the algorithms.
* for more info on the algorithms.
*/

@@ -8,13 +8,23 @@

* @typedef {string} Tag
* BCP-47 tag.
* @typedef {Array<Tag>} Tags
* List of BCP-47 tags.
* @typedef {string} Range
* RFC 4647 range.
* @typedef {Array<Range>} Ranges
* List of RFC 4647 range.
*
* @callback Check
* An internal check.
* @param {Tag} tag
* BCP-47 tag.
* @param {Range} range
* RFC 4647 range.
* @returns {boolean}
* Whether the range matches the tag.
*
* @typedef {FilterOrLookup<true>} Filter
* Filter: yields all tags that match a range.
* @typedef {FilterOrLookup<false>} Lookup
* Lookup: yields the best tag that matches a range.
*/

@@ -24,6 +34,11 @@

* @template {boolean} IsFilter
* Whether to filter or perform a lookup.
* @callback FilterOrLookup
* A check.
* @param {Tag|Tags} tags
* @param {Range|Ranges} [ranges='*']
* One or more BCP-47 tags.
* @param {Range|Ranges|undefined} [ranges='*']
* One or more RFC 4647 ranges.
* @returns {IsFilter extends true ? Tags : Tag|undefined}
* Result.
*/

@@ -33,2 +48,3 @@

* Factory to perform a filter or a lookup.
*
* This factory creates a function that accepts a list of tags and a list of

@@ -38,11 +54,22 @@ * ranges, and contains logic to exit early for lookups.

* This match function iterates over ranges, and for each range,
* iterates over tags. That way, earlier ranges matching any tag have
* precedence over later ranges.
* iterates over tags.
* That way, earlier ranges matching any tag have precedence over later ranges.
*
* @template {boolean} IsFilter
* @param {Check} check
* A check.
* @param {IsFilter} filter
* Whether to filter or perform a lookup.
* @returns {FilterOrLookup<IsFilter>}
* Filter or lookup.
*/
function factory(check, filter) {
/**
* @param {Tag|Tags} tags
* One or more BCP-47 tags.
* @param {Range|Ranges|undefined} [ranges='*']
* One or more RFC 4647 ranges.
* @returns {IsFilter extends true ? Tags : Tag|undefined}
* Result.
*/
return function (tags, ranges) {

@@ -97,2 +124,9 @@ let left = cast(tags, 'tag')

* of basic language ranges (Section 2.1) to sets of language tags.
*
* @param {Tag|Tags} tags
* One or more BCP-47 tags.
* @param {Range|Ranges|undefined} [ranges='*']
* One or more RFC 4647 ranges.
* @returns {Tags}
* List of BCP-47 tags.
*/

@@ -107,2 +141,9 @@ export const basicFilter = factory(function (tag, range) {

* tags.
*
* @param {Tag|Tags} tags
* One or more BCP-47 tags.
* @param {Range|Ranges|undefined} [ranges='*']
* One or more RFC 4647 ranges.
* @returns {Tags}
* List of BCP-47 tags.
*/

@@ -157,2 +198,9 @@ export const extendedFilter = factory(function (tag, range) {

* that best matches the range.
*
* @param {Tag|Tags} tags
* One or more BCP-47 tags.
* @param {Range|Ranges|undefined} [ranges='*']
* One or more RFC 4647 ranges.
* @returns {Tag|undefined}
* BCP-47 tag.
*/

@@ -159,0 +207,0 @@ export const lookup = factory(function (tag, range) {

16

package.json
{
"name": "bcp-47-match",
"version": "2.0.2",
"version": "2.0.3",
"description": "Match BCP 47 language tags with language ranges per RFC 4647",

@@ -38,20 +38,18 @@ "license": "MIT",

"devDependencies": {
"@types/tape": "^4.0.0",
"@types/node": "^18.0.0",
"c8": "^7.0.0",
"chalk": "^5.0.0",
"prettier": "^2.0.0",
"remark-cli": "^10.0.0",
"remark-cli": "^11.0.0",
"remark-preset-wooorm": "^9.0.0",
"rimraf": "^3.0.0",
"tape": "^5.0.0",
"type-coverage": "^2.0.0",
"typescript": "^4.0.0",
"xo": "^0.48.0"
"xo": "^0.52.0"
},
"scripts": {
"prepublishOnly": "npm run build && npm run format",
"build": "rimraf \"*.d.ts\" && tsc && type-coverage",
"prepack": "npm run build && npm run format",
"build": "tsc --build --clean && tsc --build && type-coverage",
"format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix",
"test-api": "node --conditions development test.js",
"test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api",
"test-coverage": "c8 --check-coverage --100 --reporter lcov npm run test-api",
"test": "npm run build && npm run format && npm run test-coverage"

@@ -58,0 +56,0 @@ },

@@ -44,3 +44,3 @@ <!--lint disable no-html-->

This package is [ESM only][esm].
In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]:
In Node.js (version 14.14+, 16.0+), install with [npm][]:

@@ -70,3 +70,3 @@ ```sh

var tags = ['en-GB', 'de-CH', 'en', 'de']
const tags = ['en-GB', 'de-CH', 'en', 'de']

@@ -95,4 +95,4 @@ console.log(basicFilter(tags, '*')) // => [ 'en-GB', 'de-CH', 'en', 'de' ]

This package exports the following identifiers: `basicFilter`, `extendedFilter`,
and `lookup`.
This package exports the identifier `basicFilter`, `extendedFilter`, and
`lookup`.
There is no default export.

@@ -138,3 +138,3 @@

— list of BCP 47 tags
* `ranges` (`string` or `Array<string>`)
* `ranges` (`string` or `Array<string>`, default: `'*'`)
— list of RFC 4647

@@ -186,3 +186,3 @@ [basic ranges][basic-range]

— list of BCP 47 tags
* `ranges` (`string` or `Array<string>`)
* `ranges` (`string` or `Array<string>`, default: `'*'`)
— list of RFC 4647 [extended ranges][extended-range]

@@ -244,2 +244,3 @@ (aka, matching `/^(\*|[a-z]{1,8})(-(\*|[a-z0-9]{1,8}))*$/i`)

This package is fully typed with [TypeScript][].
It exports no additional types.

@@ -249,3 +250,3 @@ ## Compatibility

This package is at least compatible with all maintained versions of Node.js.
As of now, that is Node.js 12.20+, 14.14+, and 16.0+.
As of now, that is Node.js 14.14+ and 16.0+.
It also works in Deno and modern browsers.

@@ -252,0 +253,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc