From 2f6fc286183df815eb055b2bf25583e1f6cdfb8a Mon Sep 17 00:00:00 2001 From: kazuya kawaguchi Date: Tue, 17 Oct 2023 16:35:43 +0900 Subject: [PATCH] feat: translation utility implementation (#2) * feat: translation utility implementation * updates * update bun lock --- .github/labels.yml | 15 +++ README.md | 155 ++++++++++++++++++++- bun.lockb | Bin 139986 -> 263681 bytes package.json | 8 +- spec/integration.spec.ts | 88 ++++++++++++ src/index.ts | 213 ++++++++++++++++++++++------- src/utils.ts | 43 ------ test/index.test.ts | 283 ++++++++------------------------------- test/utils.test.ts | 57 -------- 9 files changed, 484 insertions(+), 378 deletions(-) create mode 100644 spec/integration.spec.ts delete mode 100644 src/utils.ts delete mode 100644 test/utils.test.ts diff --git a/.github/labels.yml b/.github/labels.yml index 270bd72..0fdc1ca 100644 --- a/.github/labels.yml +++ b/.github/labels.yml @@ -70,3 +70,18 @@ - name: 'status: need more repro codes or info' description: Lacks enough info to make progress color: 'F9C90A' +- name: '๐Ÿงน p1-chore' + description: 'Priority 1: no change in change code behavior' + color: '#FDDFD7' +- name: '๐Ÿฐ p2-nice-to-have' + description: "Priority 2: nothing is broken but it's worth addressing" + color: '#0e8a16' +- name: '๐Ÿ”จ p3-minor-bug' + description: 'Priority 3: a bug in an edge case that only affects very specific usage' + color: '#fbca04' +- name: 'โ— p4-important' + description: 'Priority 4: bugs that violate documented behavior, or significantly impact perf' + color: '#d93f0b' +- name: '๐Ÿ”ฅ p5-urgent' + description: 'Priority 5: build-breaking bugs that affect most users and should be fixed ASAP' + color: '#ee0701' diff --git a/README.md b/README.md index 4496beb..8952aaf 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,156 @@ # @intlify/h3 -Internationalization utilitis for h3 +[![npm version][npm-version-src]][npm-version-href] +[![npm downloads][npm-downloads-src]][npm-downloads-href] +[![CI][ci-src]][ci-href] -**NOTICE: This is a work in progress ๐Ÿ‘ท** +Internationalization middleware & utilitis for h3 + +## ๐ŸŒŸ Features + +โœ…๏ธ  **Translation:** Simple API like +[vue-i18n](https://vue-i18n.intlify.dev/) + +โœ…  **Custom locale detector:** You can implement your own locale detector +on server-side + +โœ…๏ธ๏ธ  **Useful utilities:** support internationalization composables +utilities via [@intlify/utils](https://github.com/intlify/utils) + +## ๐Ÿ’ฟ Installation + +```sh +# Using npm +npm install @intlify/h3 + +# Using yarn +yarn add @intlify/h3 + +# Using pnpm +pnpm add @intlify/h3 + +# Using bun +bun add @intlify/h3 +``` + +## ๐Ÿš€ Usage + +```ts +import { createServer } from 'node:http' +import { createApp, createRouter, eventHandler, toNodeListener } from 'h3' +import { + defineI18nMiddleware, + detectLocaleFromAcceptLanguageHeader, + useTranslation, +} from '@intlify/h3' + +// define middleware with vue-i18n like options +const middleware = defineI18nMiddleware({ + // detect locale with `accept-language` header + locale: detectLocaleFromAcceptLanguageHeader, + // resource messages + messages: { + en: { + hello: 'Hello {name}!', + }, + ja: { + hello: 'ใ“ใ‚“ใซใกใฏใ€{name}๏ผ', + }, + }, + // something options + // ... +}) + +// install middleware with `createApp` option +const app = createApp({ ...middleware }) + +const router = createRouter() +router.get( + '/', + eventHandler((event) => { + // use `useTranslation` in event handler + const t = useTranslation(event) + return t('hello', { name: 'h3' }) + }), +) + +app.use(router) +createServer(toNodeListener(app)).listen(3000) +``` + +## ๐Ÿ› ๏ธ Custom locale detection + +You can detect locale with your custom logic from current `H3Event`. + +example for detecting locale from url query header: + +```ts +import { defineI18nMiddleware, getQueryLocale } from '@intlify/h3' +import type { H3Event } from 'h3' + +const DEFAULT_LOCALE = 'en' + +// define custom locale detector +const localeDetector = (event: H3Event): string => { + try { + return getQueryLocale(event).toString() + } catch () { + return DEFAULT_LOCALE + } +} + +const middleware = defineI18nMiddleware({ + // set your custom locale detector + locale: localeDetector, + // something options + // ... +}) +``` + +## ๐Ÿ› ๏ธ Utilites & Helpers + +`@intlify/h3` has a concept of composable utilities & helpers. + +### Utilities + +`@intlify/h3` composable utilities accept event (from +`eventHandler((event) => {})`) as their first argument. (Exclud +`useTranslation`) return the +[`Intl.Locale`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale) + +### Translations + +- `useTranslation(event)`: use translation function + +### Headers + +- `getHeaderLocale(event)`: get locale from `accept-language` header +- `getHeaderLocales(event)`: get some locales from `accept-language` header + +### Cookies + +- `getCookieLocale()`: get locale from cookie +- `setCookieLocale()`: set locale to cookie + +### Misc + +- `getPathLocale(event)`: get locale from path +- `getQueryLocale(event)`: get locale from query + +## Helpers + +- `detectLocaleFromAcceptLanguageHeader`: detect locale from `accept-language` + header + +## ยฉ๏ธ License + +[MIT](http://opensource.org/licenses/MIT) + + + +[npm-version-src]: https://img.shields.io/npm/v/@intlify/h3?style=flat&colorA=18181B&colorB=FFAD33 +[npm-version-href]: https://npmjs.com/package/@intlify/h3 +[npm-downloads-src]: https://img.shields.io/npm/dm/@intlify/h3?style=flat&colorA=18181B&colorB=FFAD33 +[npm-downloads-href]: https://npmjs.com/package/@intlify/h3 +[ci-src]: https://github.com/intlify/utils/actions/workflows/ci.yml/badge.svg +[ci-href]: https://github.com/intlify/utils/actions/workflows/ci.yml diff --git a/bun.lockb b/bun.lockb index 38639ff6160f62a5dcbc1dae7fedfce93161711c..42172f6815ed6e9edd99ebb7bcbbd81cf76bcda2 100755 GIT binary patch literal 263681 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 z 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 delta 46340 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 diff --git a/package.json b/package.json index 6d92a14..a314711 100644 --- a/package.json +++ b/package.json @@ -63,11 +63,15 @@ "@vitest/coverage-v8": "^0.34.4", "bumpp": "^9.2.0", "gh-changelogen": "^0.2.8", - "h3": "^1.8.1", + "h3": "^1.8.2", "lint-staged": "^14.0.0", "supertest": "^6.3.3", "typescript": "^5.2.2", "unbuild": "^2.0.0", - "vitest": "^0.34.4" + "vitest": "^1.0.0-beta.1" + }, + "dependencies": { + "@intlify/core": "npm:@intlify/core-edge@9.5.0-3caed81", + "@intlify/utils": "^0.8.0" } } diff --git a/spec/integration.spec.ts b/spec/integration.spec.ts new file mode 100644 index 0000000..ad2e321 --- /dev/null +++ b/spec/integration.spec.ts @@ -0,0 +1,88 @@ +import { afterEach, expect, test, vi } from 'vitest' +import { createApp, eventHandler, toNodeListener } from 'h3' +import { getQueryLocale } from '@intlify/utils/h3' +import supertest from 'supertest' + +import { + defineI18nMiddleware, + detectLocaleFromAcceptLanguageHeader, + useTranslation, +} from '../src/index.ts' + +import type { App, H3Event } from 'h3' +import type { SuperTest, Test } from 'supertest' + +let app: App +let request: SuperTest + +afterEach(() => { + vi.resetAllMocks() +}) + +test('translation', async () => { + const middleware = defineI18nMiddleware({ + locale: detectLocaleFromAcceptLanguageHeader, + messages: { + en: { + hello: 'hello, {name}', + }, + ja: { + hello: 'ใ“ใ‚“ใซใกใฏ, {name}', + }, + }, + }) + app = createApp({ ...middleware }) + request = supertest(toNodeListener(app)) + + app.use( + '/', + eventHandler((event) => { + const t = useTranslation(event) + return { message: t('hello', { name: 'h3' }) } + }), + ) + + const res = await request.get('/').set( + 'accept-language', + 'en;q=0.9,ja;q=0.8', + ) + expect(res.body).toEqual({ message: 'hello, h3' }) +}) + +test('custom locale detection', async () => { + const defaultLocale = 'en' + + // define custom locale detector + const localeDetector = (event: H3Event): string => { + try { + return getQueryLocale(event).toString() + } catch (_e) { + return defaultLocale + } + } + + const middleware = defineI18nMiddleware({ + locale: localeDetector, + messages: { + en: { + hello: 'hello, {name}', + }, + ja: { + hello: 'ใ“ใ‚“ใซใกใฏ, {name}', + }, + }, + }) + app = createApp({ ...middleware }) + request = supertest(toNodeListener(app)) + + app.use( + '/', + eventHandler((event) => { + const t = useTranslation(event) + return { message: t('hello', { name: 'h3' }) } + }), + ) + + const res = await request.get('/?locale=ja') + expect(res.body).toEqual({ message: 'ใ“ใ‚“ใซใกใฏ, h3' }) +}) diff --git a/src/index.ts b/src/index.ts index 78d3f10..f44ddbb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,73 +1,192 @@ -import { getCookie, getHeaders, setCookie } from 'h3' -import { isLocale, parseAcceptLanguage, validateLanguageTag } from './utils.ts' +import { + createCoreContext, + NOT_REOSLVED, + translate as _translate, +} from '@intlify/core' +import { getHeaderLocale } from '@intlify/utils/h3' -import type { H3Event } from 'h3' +export * from '@intlify/utils/h3' + +import type { AppOptions, H3Event } from 'h3' +import type { + CoreContext, + CoreOptions, + Locale, + LocaleDetector, +} from '@intlify/core' + +declare module 'h3' { + interface H3EventContext { + i18n?: CoreContext + } +} /** - * get accpet languages + * i18n middleware for h3 * - * @description parse `accept-language` header string - * - * @param {H3Event} event The {@link H3Event | H3} event - * - * @returns {Array} The array of language tags, if `*` (any language) or empty string is detected, return an empty array. + * @description + * The middleware for h3 [`createApp`]({@link https://www.jsdocs.io/package/h3#createApp}) */ -export function getAcceptLanguages(event: H3Event): string[] { - const headers = getHeaders(event) - const acceptLanguage = headers['accept-language'] - return acceptLanguage ? parseAcceptLanguage(acceptLanguage) : [] +export interface I18nMiddleware { + /** + * `onRequest` option of `createApp` + */ + onRequest: AppOptions['onRequest'] + /** + * `onAfterResponse` option of `createApp` + */ + onAfterResponse: AppOptions['onAfterResponse'] } /** - * get locale + * define i18n middleware for h3 + * + * @description + * Define the middleware to be specified for h3 [`createApp`]({@link https://www.jsdocs.io/package/h3#createApp}) * - * @param {H3Event} event The {@link H3Event | H3} event - * @param {string} lang The default language tag, default is `en-US`. You must specify the language tag with the {@link https://datatracker.ietf.org/doc/html/rfc4646#section-2.1 | BCP 47 syntax}. + * @param {CoreOptions} options - An i18n options like vue-i18n [`createI18n`]({@link https://vue-i18n.intlify.dev/guide/#javascript}), which are passed to `createCoreContext` of `@intlify/core`, see about details [`CoreOptions` of `@intlify/core`](https://github.com/intlify/vue-i18n-next/blob/6a9947dd3e0fe90de7be9c87ea876b8779998de5/packages/core-base/src/context.ts#L196-L216) * - * @throws {RangeError} Throws a {@link RangeError} if `lang` option or `accpet-languages` are not a well-formed BCP 47 language tag. + * @returns {I18nMiddleware} A defined i18n middleware, which is included `onRequest` and `onAfterResponse` options of `createApp` * - * @returns {Intl.Locale} The locale that resolved from `accept-language` header string, first language tag is used. if `*` (any language) or empty string is detected, return `en-US`. + * @example + * + * ```js + * import { defineI18nMiddleware } from '@intlify/h3' + * + * const middleware = defineI18nMiddleware({ + * messages: { + * en: { + * hello: 'Hello {name}!', + * }, + * ja: { + * hello: 'ใ“ใ‚“ใซใกใฏใ€{name}๏ผ', + * }, + * }, + * // your locale detection logic here + * locale: (event) => { + * // ... + * }, + * }) + * + * const app = createApp({ ...middleware }) + * ``` */ -export function getLocale(event: H3Event, lang = 'en-US'): Intl.Locale { - const language = getAcceptLanguages(event)[0] || lang - return new Intl.Locale(language) +export function defineI18nMiddleware( + options: CoreOptions = {}, +): { + onRequest: AppOptions['onRequest'] + onAfterResponse: AppOptions['onAfterResponse'] +} { + const i18n = createCoreContext(options) + const orgLocale = i18n.locale + + let staticLocaleDetector: LocaleDetector | null = null + if (typeof orgLocale === 'string') { + console.warn( + `defineI18nMiddleware 'locale' option is static ${orgLocale} locale! you should specify dynamic locale detector function.`, + ) + staticLocaleDetector = () => orgLocale + } + + const getLocaleDetector = (event: H3Event): LocaleDetector => { + // deno-fmt-ignore + return typeof orgLocale === 'function' + ? orgLocale.bind(null, event) + : staticLocaleDetector != null + ? staticLocaleDetector.bind(null, event) + : detectLocaleFromAcceptLanguageHeader.bind(null, event) + } + + return { + onRequest(event: H3Event) { + i18n.locale = getLocaleDetector(event) + event.context.i18n = i18n as CoreContext + }, + onAfterResponse(event: H3Event) { + i18n.locale = orgLocale + delete event.context.i18n + }, + } } /** - * get locale from cookie + * locale detection with `Accept-Language` header + * + * @param {H3Event} event - A h3 event + * + * @returns {Locale} A locale string, which will be detected of **first** from `Accept-Language` header * - * @param {H3Event} event The {@link H3Event | H3} event - * @param {string} options.lang The default language tag, default is `en-US`. You must specify the language tag with the {@link https://datatracker.ietf.org/doc/html/rfc4646#section-2.1 | BCP 47 syntax}. - * @param {string} options.name The cookie name, default is `i18n_locale` + * @example + * ```js + * import { createApp } from 'h3' + * import { defineI18nMiddleware, detectLocaleWithAcceeptLanguageHeader } from '@intlify/h3' * - * @throws {RangeError} Throws a {@link RangeError} if `lang` option or cookie name value are not a well-formed BCP 47 language tag. + * const middleware = defineI18nMiddleware({ + * messages: { + * en: { + * hello: 'Hello {name}!', + * }, + * ja: { + * hello: 'ใ“ใ‚“ใซใกใฏใ€{name}๏ผ', + * }, + * }, + * locale: detectLocaleWithAcceeptLanguageHeader + * }) * - * @returns The locale that resolved from cookie + * const app = createApp({ ...middleware }) + * ``` */ -export function getCookieLocale( +export const detectLocaleFromAcceptLanguageHeader = ( event: H3Event, - { lang = 'en-US', name = 'i18n_locale' } = {}, -): Intl.Locale { - return new Intl.Locale(getCookie(event, name) || lang) -} +): Locale => getHeaderLocale(event).toString() + +// TODO: should support key completion +type TranslationFunction = ( + key: string, + ...args: unknown[] +) => string /** - * @param {H3Event} event The {@link H3Event | H3} event - * @param {string | Intl.Locale} locale The locale value - * @param options.name The cookie name, default is `i18n_locale` + * use translation function in event handler + * + * @description + * This function must be initialized with defineI18nMiddleware. See about the {@link defineI18nMiddleware} * - * @throws {SyntaxError} Throws a {@link SyntaxError} if `locale` is invalid. + * @param {H3Event} event - A h3 event + * + * @returns {TranslationFunction} Return a translation function, which can be translated with i18n resource messages + * + * @example + * ```js + * import { createRouter } from 'h3' + * + * const router = createRouter() + * router.get( + * '/', + * eventHandler((event) => { + * const t = useTranslation(event) + * return t('hello', { name: 'h3' }) + * }), + * ) + * ``` */ -export function setCookieLocale( - event: H3Event, - locale: string | Intl.Locale, - { name = 'i18n_locale' } = {}, -): void { - if ( - !(isLocale(locale) || - typeof locale === 'string' && validateLanguageTag(locale)) - ) { - throw new SyntaxError(`locale is invalid: ${locale.toString()}`) +// TODO: should support key completion +export function useTranslation(event: H3Event): TranslationFunction { + if (event.context.i18n == null) { + throw new Error( + 'middleware not initialized, please setup `onRequest` and `onAfterResponse` options of `createApp` with the middleware obtained with `defineI18nRequestMiddleware`', + ) } - setCookie(event, name, locale.toString()) + + // TODO: should design rest arguments + function translate(key: string, ...args: unknown[]): string { + const result = Reflect.apply(_translate, null, [ + event.context.i18n!, + key, + ...args, + ]) + return NOT_REOSLVED === result ? key : result as string + } + + return translate } diff --git a/src/utils.ts b/src/utils.ts deleted file mode 100644 index cd85fc4..0000000 --- a/src/utils.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * parse `accept-language` header string - * - * @param {string} value The accept-language header string - * - * @returns {Array} The array of language tags, if `*` (any language) or empty string is detected, return an empty array. - */ -export function parseAcceptLanguage(value: string): string[] { - return value.split(',').map((tag) => tag.split(';')[0]).filter((tag) => - !(tag === '*' || tag === '') - ) -} - -const objectToString = Object.prototype.toString -const toTypeString = (value: unknown): string => objectToString.call(value) - -/** - * check whether the value is a `Intl.Locale` instance - * - * @param {unknown} val The locale value - * - * @returns {boolean} Returns `true` if the value is a `Intl.Locale` instance, else `false`. - */ -export function isLocale(val: unknown): val is Intl.Locale { - return toTypeString(val) === '[object Intl.Locale]' -} - -/** - * validate the language tag whether is a well-formed {@link https://datatracker.ietf.org/doc/html/rfc4646#section-2.1 | BCP 47 language tag}. - * - * @param {string} lang a language tag - * - * @returns {boolean} Returns `true` if the language tag is valid, else `false`. - */ -export function validateLanguageTag(lang: string): boolean { - try { - // TODO: if we have a better way to validate the language tag, we should use it. - new Intl.Locale(lang) - return true - } catch { - return false - } -} diff --git a/test/index.test.ts b/test/index.test.ts index 47e719f..d0fabcd 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -1,268 +1,97 @@ -import { beforeEach, describe, expect, test } from 'vitest' -import { createApp, eventHandler, toNodeListener } from 'h3' -import supertest from 'supertest' +import { describe, expect, test } from 'vitest' +import { createCoreContext } from '@intlify/core' + import { - getAcceptLanguages, - getCookieLocale, - getLocale, - setCookieLocale, + defineI18nMiddleware, + detectLocaleFromAcceptLanguageHeader, + useTranslation, } from '../src/index.ts' -import type { App, H3Event } from 'h3' -import type { SuperTest, Test } from 'supertest' - -describe('getAcceptLanguages', () => { - test('basic', () => { - const eventMock = { - node: { - req: { - method: 'GET', - headers: { - 'accept-language': 'en-US,en;q=0.9,ja;q=0.8', - }, - }, - }, - } as H3Event - expect(getAcceptLanguages(eventMock)).toEqual(['en-US', 'en', 'ja']) - }) - - test('any language', () => { - const eventMock = { - node: { - req: { - method: 'GET', - headers: { - 'accept-language': '*', - }, - }, - }, - } as H3Event - expect(getAcceptLanguages(eventMock)).toEqual([]) - }) +import type { H3Event } from 'h3' +import type { CoreContext, LocaleDetector } from '@intlify/core' - test('empty', () => { - const eventMock = { - node: { - req: { - method: 'GET', - headers: {}, +test('detectLocaleFromAcceptLanguageHeader', () => { + const eventMock = { + node: { + req: { + method: 'GET', + headers: { + 'accept-language': 'en-US,en;q=0.9,ja;q=0.8', }, }, - } as H3Event - expect(getAcceptLanguages(eventMock)).toEqual([]) - }) + }, + } as H3Event + expect(detectLocaleFromAcceptLanguageHeader(eventMock)).toBe('en-US') }) -describe('getLocale', () => { - test('basic', () => { - const eventMock = { - node: { - req: { - method: 'GET', - headers: { - 'accept-language': 'en-US,en;q=0.9,ja;q=0.8', - }, - }, +test('defineI18nMiddleware', () => { + const middleware = defineI18nMiddleware({ + locale: detectLocaleFromAcceptLanguageHeader, + messages: { + en: { + hello: 'hello, {name}', }, - } as H3Event - const locale = getLocale(eventMock) - - expect(locale.baseName).toEqual('en-US') - expect(locale.language).toEqual('en') - expect(locale.region).toEqual('US') - }) - - test('accept-language is any language', () => { - const eventMock = { - node: { - req: { - method: 'GET', - headers: { - 'accept-language': '*', - }, - }, + ja: { + hello: 'ใ“ใ‚“ใซใกใฏ, {name}', }, - } as H3Event - const locale = getLocale(eventMock) - - expect(locale.baseName).toEqual('en-US') - }) - - test('specify default language', () => { - const eventMock = { - node: { - req: { - method: 'GET', - headers: { - 'accept-language': '*', - }, - }, - }, - } as H3Event - const locale = getLocale(eventMock, 'ja-JP') - - expect(locale.baseName).toEqual('ja-JP') - }) - - test('RangeError', () => { - const eventMock = { - node: { - req: { - method: 'GET', - headers: { - 'accept-language': 's', - }, - }, - }, - } as H3Event - - expect(() => getLocale(eventMock, 'ja-JP')).toThrowError(RangeError) + }, }) + expect(middleware.onRequest).toBeDefined() + expect(middleware.onAfterResponse).toBeDefined() }) -describe('getCookieLocale', () => { +describe('useTranslation', () => { test('basic', () => { - const eventMock = { - node: { - req: { - method: 'GET', - headers: { - cookie: 'i18n_locale=ja-US', - }, + /** + * setup `defineI18nMiddleware` emulates + */ + const context = createCoreContext({ + locale: detectLocaleFromAcceptLanguageHeader, + messages: { + en: { + hello: 'hello, {name}', }, - }, - } as H3Event - const locale = getCookieLocale(eventMock) - - expect(locale.baseName).toEqual('ja-US') - expect(locale.language).toEqual('ja') - expect(locale.region).toEqual('US') - }) - - test('cookie is empty', () => { - const eventMock = { - node: { - req: { - method: 'GET', - headers: {}, - }, - }, - } as H3Event - const locale = getCookieLocale(eventMock) - - expect(locale.baseName).toEqual('en-US') - }) - - test('specify default language', () => { - const eventMock = { - node: { - req: { - method: 'GET', - headers: {}, + ja: { + hello: 'ใ“ใ‚“ใซใกใฏ, {name}', }, }, - } as H3Event - const locale = getCookieLocale(eventMock, { lang: 'ja-JP' }) - - expect(locale.baseName).toEqual('ja-JP') - }) - - test('specify cookie name', () => { + }) const eventMock = { node: { req: { method: 'GET', headers: { - cookie: 'intlify_locale=fr-FR', + 'accept-language': 'ja,en', }, }, }, + context: { + i18n: context as CoreContext, + }, } as H3Event - const locale = getCookieLocale(eventMock, { name: 'intlify_locale' }) + const locale = context.locale as unknown + const bindLocaleDetector = (locale as LocaleDetector).bind(null, eventMock) + // @ts-ignore ignore type error because this is test + context.locale = bindLocaleDetector - expect(locale.baseName).toEqual('fr-FR') + // test `useTranslation` + const t = useTranslation(eventMock) + expect(t('hello', { name: 'h3' })).toEqual('ใ“ใ‚“ใซใกใฏ, h3') }) - test('RangeError', () => { + test('not initilize context', () => { const eventMock = { node: { req: { method: 'GET', headers: { - cookie: 'intlify_locale=f', + 'accept-language': 'ja,en', }, }, }, + context: {}, } as H3Event - expect(() => getCookieLocale(eventMock, { name: 'intlify_locale' })) - .toThrowError(RangeError) - }) -}) - -describe('setCookieLocale', () => { - let app: App - let request: SuperTest - - beforeEach(() => { - app = createApp({ debug: false }) - request = supertest(toNodeListener(app)) - }) - - test('specify Locale instance', async () => { - app.use( - '/', - eventHandler((event) => { - const locale = new Intl.Locale('ja-JP') - setCookieLocale(event, locale) - return '200' - }), - ) - const result = await request.get('/') - expect(result.headers['set-cookie']).toEqual([ - 'i18n_locale=ja-JP; Path=/', - ]) - }) - - test('specify language tag', async () => { - app.use( - '/', - eventHandler((event) => { - setCookieLocale(event, 'ja-JP') - return '200' - }), - ) - const result = await request.get('/') - expect(result.headers['set-cookie']).toEqual([ - 'i18n_locale=ja-JP; Path=/', - ]) - }) - - test('specify cookie name', async () => { - app.use( - '/', - eventHandler((event) => { - setCookieLocale(event, 'ja-JP', { name: 'intlify_locale' }) - return '200' - }), - ) - const result = await request.get('/') - expect(result.headers['set-cookie']).toEqual([ - 'intlify_locale=ja-JP; Path=/', - ]) - }) - - test('Syntax Error', () => { - const eventMock = { - node: { - req: { - method: 'GET', - headers: {}, - }, - }, - } as H3Event - - expect(() => setCookieLocale(eventMock, 'j')) - .toThrowError(/locale is invalid: j/) + expect(() => useTranslation(eventMock)).toThrowError() }) }) diff --git a/test/utils.test.ts b/test/utils.test.ts deleted file mode 100644 index 0ba3202..0000000 --- a/test/utils.test.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { describe, expect, test } from 'vitest' -import { - isLocale, - parseAcceptLanguage, - validateLanguageTag, -} from '../src/utils.ts' - -describe('parseAcceptLanguage', () => { - test('basic: ja,en-US;q=0.7,en;q=0.3', () => { - expect(parseAcceptLanguage('ja,en-US;q=0.7,en;q=0.3')).toEqual([ - 'ja', - 'en-US', - 'en', - ]) - }) - - test('q-factor nothing: ja,en-US', () => { - expect(parseAcceptLanguage('ja,en-US')).toEqual([ - 'ja', - 'en-US', - ]) - }) - - test('single: ja', () => { - expect(parseAcceptLanguage('ja')).toEqual([ - 'ja', - ]) - }) - - test('any language: *', () => { - expect(parseAcceptLanguage('*')).toEqual([]) - }) - - test('empty: ""', () => { - expect(parseAcceptLanguage('')).toEqual([]) - }) -}) - -describe('isLocale', () => { - test('Locale instance', () => { - expect(isLocale(new Intl.Locale('en-US'))).toBe(true) - }) - - test('not Locale instance', () => { - expect(isLocale('en-US')).toBe(false) - }) -}) - -describe('validateLanguageTag', () => { - test('valid', () => { - expect(validateLanguageTag('en-US')).toBe(true) - }) - - test('invalid', () => { - expect(validateLanguageTag('j')).toBe(false) - }) -})