diff --git a/README.md b/README.md index 7dcff75..efefce4 100644 --- a/README.md +++ b/README.md @@ -45,8 +45,7 @@ If you are directly using `@intlify/utils` as a dependency: } ``` -**Note:** Make sure to recreate lockfile and `node_modules` after reinstall to -avoid hoisting issues. +**Note:** Make sure to recreate lockfile and `node_modules` after reinstall to avoid hoisting issues. @@ -148,29 +147,21 @@ You can do `import { ... } from '@intlify/utils'` the above utilities - `getPathLocale` - `getQueryLocale` -The about utilies functions accpet Web APIs such as -[Request](https://developer.mozilla.org/en-US/docs/Web/API/Request) and -[Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) that is -supported by JS environments (such as Deno, Bun, and Browser) +The about utilies functions accpet Web APIs such as [Request](https://developer.mozilla.org/en-US/docs/Web/API/Request) and [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) that is supported by JS environments (such as Deno, Bun, and Browser) #### Specialized environments -If you will use Node.js and H3, You can do -`import { ... } from '@intlify/utils/{ENV}'` the above utilities. +If you will use Node.js and H3, You can do `import { ... } from '@intlify/utils/{ENV}'` the above utilities. The namespace `{ENV}` is one of the following: -- `node`: accpet `IncomingMessage` and `Outgoing` by Node.js - [http](https://nodejs.org/api/http.html) module +- `node`: accpet `IncomingMessage` and `Outgoing` by Node.js [http](https://nodejs.org/api/http.html) module - `h3`: accept `H3Event` by HTTP framework [h3](https://github.com/unjs/h3) +- `hono`: accept `Context` by edge-side web framework [hono](https://github.com/honojs/hono) ## 🙌 Contributing guidelines -If you are interested in contributing to `@intlify/utils`, I highly recommend -checking out [the contributing guidelines](/CONTRIBUTING.md) here. You'll find -all the relevant information such as -[how to make a PR](/CONTRIBUTING.md#pull-request-guidelines), -[how to setup development](/CONTRIBUTING.md#development-setup)) etc., there. +If you are interested in contributing to `@intlify/utils`, I highly recommend checking out [the contributing guidelines](/CONTRIBUTING.md) here. You'll find all the relevant information such as [how to make a PR](/CONTRIBUTING.md#pull-request-guidelines), [how to setup development](/CONTRIBUTING.md#development-setup)) etc., there. ## ©️ License diff --git a/deno.jsonc b/deno.jsonc index d281a7c..d8d8c4a 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -4,7 +4,8 @@ "include": [ ], */ - "exclude": ["node_modules", "dist"], + "lineWidth": 100, + "exclude": ["node_modules", "dist", "**/*.md"], "semiColons": false, "singleQuote": true }, diff --git a/src/h3.ts b/src/h3.ts index e6727cd..3fb50f3 100644 --- a/src/h3.ts +++ b/src/h3.ts @@ -1,8 +1,4 @@ -import { - ACCEPT_LANGUAGE_HEADER, - DEFAULT_COOKIE_NAME, - DEFAULT_LANG_TAG, -} from './constants.ts' +import { ACCEPT_LANGUAGE_HEADER, DEFAULT_COOKIE_NAME, DEFAULT_LANG_TAG } from './constants.ts' import { getHeaderLanguagesWithGetter, getLocaleWithGetter, @@ -16,12 +12,7 @@ import { pathLanguageParser } from './shared.ts' import { getCookie, getHeaders, getRequestURL, setCookie } from 'h3' import type { H3Event } from 'h3' -import type { - CookieOptions, - HeaderOptions, - PathOptions, - QueryOptions, -} from './http.ts' +import type { CookieOptions, HeaderOptions, PathOptions, QueryOptions } from './http.ts' /** * get languages from header @@ -164,9 +155,7 @@ export function getHeaderLocale( parser = parseDefaultHeader, }: HeaderOptions & { lang?: string } = {}, ): Intl.Locale { - return getLocaleWithGetter(() => - getHeaderLanguages(event, { name, parser })[0] || lang - ) + return getLocaleWithGetter(() => getHeaderLanguages(event, { name, parser })[0] || lang) } /** diff --git a/src/hono.ts b/src/hono.ts index b0bf396..b45344a 100644 --- a/src/hono.ts +++ b/src/hono.ts @@ -1,8 +1,4 @@ -import { - ACCEPT_LANGUAGE_HEADER, - DEFAULT_COOKIE_NAME, - DEFAULT_LANG_TAG, -} from './constants.ts' +import { ACCEPT_LANGUAGE_HEADER, DEFAULT_COOKIE_NAME, DEFAULT_LANG_TAG } from './constants.ts' import { getHeaderLanguagesWithGetter, getLocaleWithGetter, @@ -165,9 +161,7 @@ export function getHeaderLocale( parser = parseDefaultHeader, }: HeaderOptions & { lang?: string } = {}, ): Intl.Locale { - return getLocaleWithGetter(() => - getHeaderLanguages(context, { name, parser })[0] || lang - ) + return getLocaleWithGetter(() => getHeaderLanguages(context, { name, parser })[0] || lang) } /** diff --git a/src/http.test.ts b/src/http.test.ts index b804d49..32bbe79 100644 --- a/src/http.test.ts +++ b/src/http.test.ts @@ -1,10 +1,5 @@ import { describe, expect, test } from 'vitest' -import { - getPathLanguage, - getPathLocale, - getQueryLanguage, - getQueryLocale, -} from './http.ts' +import { getPathLanguage, getPathLocale, getQueryLanguage, getQueryLocale } from './http.ts' describe('getPathLanguage', () => { test('basic', () => { diff --git a/src/http.ts b/src/http.ts index e4d0b26..5a1b8d6 100644 --- a/src/http.ts +++ b/src/http.ts @@ -131,9 +131,7 @@ export function getHeaderLanguagesWithGetter( const langString = getter() return langString ? name === ACCEPT_LANGUAGE_HEADER - ? parser === parseDefaultHeader - ? parseAcceptLanguage(langString) - : parser(langString) + ? parser === parseDefaultHeader ? parseAcceptLanguage(langString) : parser(langString) : parser(langString) : [] } diff --git a/src/locale.ts b/src/locale.ts index 62795e5..e7ff923 100644 --- a/src/locale.ts +++ b/src/locale.ts @@ -320,8 +320,8 @@ export type ParseUnicodeRegionSubtag< : [never, 7, RestChunks] // require characters length : ThroughErrorWithChunks // require characters length -type ThroughErrorWithChunks = - Length extends 0 ? Result : [never, never, Chunks] +type ThroughErrorWithChunks = Length extends 0 ? Result + : [never, never, Chunks] /** * parse unicode variant subtag @@ -402,11 +402,10 @@ type ParseUnicodeExtensions< Chunks, Extensions >, - Result extends [Omit, number, unknown[]] = - Length extends 0 ? [{ extensions: [] }, never, Chunks] - : IsNever extends false - ? [{ extensions: [] }, ResultExtensions[1], Chunks] - : [ResultExtensions[0], never, ResultExtensions[2]], + Result extends [Omit, number, unknown[]] = Length extends 0 + ? [{ extensions: [] }, never, Chunks] + : IsNever extends false ? [{ extensions: [] }, ResultExtensions[1], Chunks] + : [ResultExtensions[0], never, ResultExtensions[2]], > = Result // type p1 = ParseUnicodeExtensions<['x', '1234']> @@ -427,12 +426,11 @@ type _ParseUnicodeExtensions< // : never, // parse for PuExtension - ResultParsePu extends [PuExtension, number, unknown[]] = - _ParseUnicodeExtensionsPu< - RestChunks, - Type, - ExistPuExtension - >, + ResultParsePu extends [PuExtension, number, unknown[]] = _ParseUnicodeExtensionsPu< + RestChunks, + Type, + ExistPuExtension + >, _ExtensionsPu extends UnicodeLocaleId['extensions'] = Push< Extensions, ResultParsePu[0] @@ -467,8 +465,7 @@ type _ParseUnicodeExtensions< NextExistPuExtension extends PuExtension = ResultParsePu[0], > = IsNever extends false ? [never, Error, Chunks] : Length extends 0 ? [{ extensions: Extensions }, never, Chunks] - : Length extends 0 - ? [{ extensions: NextExtensions }, never, NextChunks] + : Length extends 0 ? [{ extensions: NextExtensions }, never, NextChunks] : _ParseUnicodeExtensions< NextChunks, NextExtensions, @@ -482,12 +479,11 @@ type _ParseUnicodeExtensionsPu< Chunks extends unknown[], Type extends string, ExistPuExtension extends PuExtension = never, - ResultParsePuExtension extends unknown[] = - CheckExtensionType extends true - ? ParsePuExtension<[...Chunks]> - : never, - _PuExtension extends PuExtension = ResultParsePuExtension[0] extends - PuExtension ? ResultParsePuExtension[0] + ResultParsePuExtension extends unknown[] = CheckExtensionType extends true + ? ParsePuExtension<[...Chunks]> + : never, + _PuExtension extends PuExtension = ResultParsePuExtension[0] extends PuExtension + ? ResultParsePuExtension[0] : never, RestChunks extends unknown[] = ResultParsePuExtension[2] extends unknown[] ? ResultParsePuExtension[2] @@ -516,21 +512,19 @@ type _ParseUnicodeExtensionsOther< Chunks extends unknown[], Type extends string, ExistOtherExtensions extends unknown[] = never, - MalformedError extends number = - Includes, Type> extends false ? 16 - : never, + MalformedError extends number = Includes, Type> extends false ? 16 + : never, Error extends number = MalformedError extends number ? MalformedError : Includes extends true ? 17 : never, - ResultParseOtherExtension extends [string, unknown[]] = IsNever extends - true ? ParseOtherExtension<[...Chunks]> + ResultParseOtherExtension extends [string, unknown[]] = IsNever extends true + ? ParseOtherExtension<[...Chunks]> : [never, Chunks], RestChunks extends unknown[] = ResultParseOtherExtension[1] extends unknown[] ? ResultParseOtherExtension[1] : Chunks, Result extends [OtherExtension, number, unknown[]] = [ - ResultParseOtherExtension[0] extends string - ? { type: 'a'; value: ResultParseOtherExtension[0] } + ResultParseOtherExtension[0] extends string ? { type: 'a'; value: ResultParseOtherExtension[0] } : never, Error, RestChunks, diff --git a/src/node.ts b/src/node.ts index 6e40751..0f0008e 100644 --- a/src/node.ts +++ b/src/node.ts @@ -10,19 +10,10 @@ import { parseDefaultHeader, validateLocale, } from './http.ts' -import { - ACCEPT_LANGUAGE_HEADER, - DEFAULT_COOKIE_NAME, - DEFAULT_LANG_TAG, -} from './constants.ts' +import { ACCEPT_LANGUAGE_HEADER, DEFAULT_COOKIE_NAME, DEFAULT_LANG_TAG } from './constants.ts' import { normalizeLanguageName, pathLanguageParser } from './shared.ts' -import type { - CookieOptions, - HeaderOptions, - PathOptions, - QueryOptions, -} from './http.ts' +import type { CookieOptions, HeaderOptions, PathOptions, QueryOptions } from './http.ts' /** * get languages from header @@ -171,9 +162,7 @@ export function getHeaderLocale( parser = parseDefaultHeader, }: HeaderOptions & { lang?: string } = {}, ): Intl.Locale { - return getLocaleWithGetter(() => - getHeaderLanguages(request, { name, parser })[0] || lang - ) + return getLocaleWithGetter(() => getHeaderLanguages(request, { name, parser })[0] || lang) } /** diff --git a/src/shared.ts b/src/shared.ts index 3f0837a..c148fcc 100644 --- a/src/shared.ts +++ b/src/shared.ts @@ -112,8 +112,7 @@ export function createPathIndexLanguageParser( } } -export let pathLanguageParser: PathLanguageParser = - /* #__PURE__*/ createPathIndexLanguageParser() +export let pathLanguageParser: PathLanguageParser = /* #__PURE__*/ createPathIndexLanguageParser() /** * register the path language parser diff --git a/src/types.ts b/src/types.ts index 85e4c20..9d14d31 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,12 +1,10 @@ export type IsNever = [T] extends [never] ? true : false -export type Split = string extends S - ? string[] - : S extends `${infer A}${SEP}${infer B}` - ? [A, ...(B extends '' ? [] : Split)] +export type Split = string extends S ? string[] + : S extends `${infer A}${SEP}${infer B}` ? [A, ...(B extends '' ? [] : Split)] : SEP extends '' ? [] : [S] -export type Join = T extends - [infer F, ...infer R] ? R['length'] extends 0 ? `${F & string}` +export type Join = T extends [infer F, ...infer R] + ? R['length'] extends 0 ? `${F & string}` : `${F & string}${U}${Join}` : never export type Shift = T extends [unknown, ...infer U] ? U @@ -15,8 +13,9 @@ export type First = T extends [infer A, ...infer rest] ? A : never export type Last = [unknown, ...T][T['length']] export type Length = T['length'] -export type IsEqual = (() => T extends X ? 1 : 2) extends - (() => T extends Y ? 1 : 2) ? true : false +export type IsEqual = (() => T extends X ? 1 : 2) extends (() => T extends Y ? 1 : 2) + ? true + : false export type All = T extends [infer L, ...infer R] ? IsEqual extends true ? All : false @@ -42,13 +41,13 @@ export type LastInUnion = UnionToIntersection< : never export type UnionToTuple> = [U] extends [never] ? [] : [...UnionToTuple>, Last] -export type TupleToUnion = T extends - Array ? R +export type TupleToUnion = T extends Array ? R : never -export type StringToUnion = T extends - `${infer Letter}${infer Rest}` ? Letter | StringToUnion +export type StringToUnion = T extends `${infer Letter}${infer Rest}` + ? Letter | StringToUnion : never -export type StringToArray = T extends - `${infer Letter}${infer Rest}` ? [Letter, ...StringToArray] : [] +export type StringToArray = T extends `${infer Letter}${infer Rest}` + ? [Letter, ...StringToArray] + : [] diff --git a/src/web.ts b/src/web.ts index 78083dd..eb8ac86 100644 --- a/src/web.ts +++ b/src/web.ts @@ -10,18 +10,9 @@ import { validateLocale, } from './http.ts' import { pathLanguageParser } from './shared.ts' -import { - ACCEPT_LANGUAGE_HEADER, - DEFAULT_COOKIE_NAME, - DEFAULT_LANG_TAG, -} from './constants.ts' +import { ACCEPT_LANGUAGE_HEADER, DEFAULT_COOKIE_NAME, DEFAULT_LANG_TAG } from './constants.ts' -import type { - CookieOptions, - HeaderOptions, - PathOptions, - QueryOptions, -} from './http.ts' +import type { CookieOptions, HeaderOptions, PathOptions, QueryOptions } from './http.ts' /** * get languages from header @@ -171,9 +162,7 @@ export function getHeaderLocale( parser = parseDefaultHeader, }: HeaderOptions & { lang?: string } = {}, ): Intl.Locale { - return getLocaleWithGetter(() => - getHeaderLanguages(request, { name, parser })[0] || lang - ) + return getLocaleWithGetter(() => getHeaderLanguages(request, { name, parser })[0] || lang) } /**