generaltranslation 7.1.0-alpha.5 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/id.cjs.min.cjs +1 -1
- package/dist/id.cjs.min.cjs.map +1 -1
- package/dist/id.esm.min.mjs +1 -1
- package/dist/id.esm.min.mjs.map +1 -1
- package/dist/index.cjs.min.cjs +1 -1
- package/dist/index.cjs.min.cjs.map +1 -1
- package/dist/index.esm.min.mjs +1 -1
- package/dist/index.esm.min.mjs.map +1 -1
- package/dist/internal.cjs.min.cjs.map +1 -1
- package/dist/internal.esm.min.mjs.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.esm.min.mjs.map +1 -1
- package/package.json +1 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"internal.cjs.min.cjs","sources":["../src/settings/settingsUrls.ts","../src/settings/plurals.ts","../src/cache/IntlCache.ts","../src/utils/minify.ts","../src/locales/getPluralForm.ts","../src/settings/settings.ts","../src/utils/isVariable.ts"],"sourcesContent":["export const defaultCacheUrl = 'https://cdn.gtx.dev' as const;\nexport const defaultBaseUrl = 'https://api2.gtx.dev' as const;\nexport const defaultRuntimeApiUrl = 'https://runtime2.gtx.dev' as const;\nexport const translateBatchUrl = '/v1/translate/batch' as const;\nexport const translateJsxUrl = '/v1/translate/react' as const;\nexport const translateContentUrl = '/v1/translate/content' as const;\nexport const translateIcuUrl = '/v1/translate/icu' as const;\nexport const updateProjectTranslationsUrl =\n '/v1/project/translations/update' as const;\nexport const getProjectLocalesUrl = '/v1/project/locales' as const;\n","export const pluralForms = [\n 'singular',\n 'plural',\n 'dual',\n 'zero',\n 'one',\n 'two',\n 'few',\n 'many',\n 'other',\n] as const;\nexport type PluralType = (typeof pluralForms)[number];\nexport function isAcceptedPluralForm(form: string): form is PluralType {\n return pluralForms.includes(form as (typeof pluralForms)[number]);\n}\n","class IntlCache {\n private cache: Map<string, any>;\n\n constructor() {\n // Create separate caches for each Intl constructor\n this.cache = new Map();\n }\n\n private _generateKey(\n constructor: string,\n locales: string | string[],\n options = {}\n ) {\n // Handle both string and array locales\n const localeKey = Array.isArray(locales) ? locales.join(',') : locales;\n // Sort option keys to ensure consistent key generation\n const sortedOptions = options\n ? JSON.stringify(options, Object.keys(options).sort())\n : '{}';\n return `${constructor}:${localeKey}:${sortedOptions}`;\n }\n\n get<K extends keyof typeof Intl>(\n constructor: K,\n locales: string | string[],\n options = {}\n ): /* @ts-expect-error constructors must be valid */\n InstanceType<(typeof Intl)[K]> {\n const key = this._generateKey(constructor, locales, options);\n if (!this.cache.has(key)) {\n // Create a new Intl object if not in cache\n const intlObject = new (Intl[constructor] as any)(locales, options);\n this.cache.set(key, intlObject);\n }\n return this.cache.get(key);\n }\n}\n\nexport const intlCache = new IntlCache();\n","import { VariableTransformationSuffix, VariableType } from '../types';\n\nconst VARIABLE_TRANSFORMATION_SUFFIXES_TO_MINIFIED_NAMES = {\n variable: 'v',\n number: 'n',\n datetime: 'd',\n currency: 'c',\n} as const;\n\nexport function minifyVariableType(\n variableType: VariableTransformationSuffix\n): VariableType {\n return VARIABLE_TRANSFORMATION_SUFFIXES_TO_MINIFIED_NAMES[variableType];\n}\n","import { intlCache } from 'src/cache/IntlCache';\nimport { pluralForms, PluralType } from '../settings/plurals';\nimport { libraryDefaultLocale } from '../settings/settings';\n\n/**\n * Given a number and a list of allowed plural forms, return the plural form that best fits the number.\n *\n * @param {number} n - The number to determine the plural form for.\n * @param {locales[]} forms - The allowed plural forms.\n * @returns {PluralType} The determined plural form, or an empty string if none fit.\n */\nexport default function _getPluralForm(\n n: number,\n forms: PluralType[] = pluralForms as any,\n locales: string[] = [libraryDefaultLocale]\n): PluralType | '' {\n const pluralRules = intlCache.get('PluralRules', locales);\n const provisionalBranchName = pluralRules.select(n);\n // aliases\n const absN = Math.abs(n);\n // 0\n if (absN === 0 && forms.includes('zero')) return 'zero'; // override\n // 1\n if (absN === 1) {\n if (forms.includes('singular')) return 'singular'; // override\n if (forms.includes('one')) return 'one'; // override\n }\n if (provisionalBranchName === 'one' && forms.includes('singular'))\n return 'singular';\n // 2\n if (absN === 2) {\n if (forms.includes('dual')) return 'dual'; // override\n if (forms.includes('two')) return 'two'; // override\n }\n if (provisionalBranchName === 'two' && forms.includes('dual')) return 'dual';\n // fallbacks\n if (forms.includes(provisionalBranchName)) return provisionalBranchName;\n // two\n if (provisionalBranchName === 'two' && forms.includes('dual')) return 'dual';\n if (provisionalBranchName === 'two' && forms.includes('plural'))\n return 'plural';\n if (provisionalBranchName === 'two' && forms.includes('other'))\n return 'other';\n // few\n if (provisionalBranchName === 'few' && forms.includes('plural'))\n return 'plural';\n if (provisionalBranchName === 'few' && forms.includes('other'))\n return 'other';\n // many\n if (provisionalBranchName === 'many' && forms.includes('plural'))\n return 'plural';\n if (provisionalBranchName === 'many' && forms.includes('other'))\n return 'other';\n // other\n if (provisionalBranchName === 'other' && forms.includes('plural'))\n return 'plural';\n return '';\n}\n","export const libraryDefaultLocale = 'en' as const;\nexport const maxTimeout = 60000;\n","import { Variable } from '../types';\n\nexport default function isVariable(obj: unknown): obj is Variable {\n const variableObj = obj as Variable;\n if (\n variableObj &&\n typeof variableObj === 'object' &&\n typeof (variableObj as Variable).k === 'string'\n ) {\n const k = Object.keys(variableObj);\n if (k.length === 1) return true;\n if (k.length === 2) {\n if (typeof variableObj.i === 'number') return true;\n if (typeof variableObj.v === 'string') return true;\n }\n if (k.length === 3) {\n if (\n typeof variableObj.v === 'string' &&\n typeof variableObj.i === 'number'\n )\n return true;\n }\n }\n return false;\n}\n"],"names":["pluralForms","intlCache","IntlCache","this","cache","Map","prototype","_generateKey","constructor","locales","options","localeKey","Array","isArray","join","sortedOptions","JSON","stringify","Object","keys","sort","concat","get","key","has","intlObject","Intl","set","VARIABLE_TRANSFORMATION_SUFFIXES_TO_MINIFIED_NAMES","variable","number","datetime","currency","n","forms","provisionalBranchName","select","absN","Math","abs","includes","form","obj","variableObj","k","length","i","v","variableType"],"mappings":"aAAO,ICAMA,EAAc,CACzB,WACA,SACA,OACA,OACA,MACA,MACA,MACA,OACA,SCTF,IAsCaC,EAAY,IAtCzB,WAGE,SAAAC,IAEEC,KAAKC,MAAQ,IAAIC,
|
1
|
+
{"version":3,"file":"internal.cjs.min.cjs","sources":["../src/settings/settingsUrls.ts","../src/settings/plurals.ts","../src/cache/IntlCache.ts","../src/utils/minify.ts","../src/locales/getPluralForm.ts","../src/settings/settings.ts","../src/utils/isVariable.ts"],"sourcesContent":["export const defaultCacheUrl = 'https://cdn.gtx.dev' as const;\nexport const defaultBaseUrl = 'https://api2.gtx.dev' as const;\nexport const defaultRuntimeApiUrl = 'https://runtime2.gtx.dev' as const;\nexport const translateBatchUrl = '/v1/translate/batch' as const;\nexport const translateJsxUrl = '/v1/translate/react' as const;\nexport const translateContentUrl = '/v1/translate/content' as const;\nexport const translateIcuUrl = '/v1/translate/icu' as const;\nexport const updateProjectTranslationsUrl =\n '/v1/project/translations/update' as const;\nexport const getProjectLocalesUrl = '/v1/project/locales' as const;\n","export const pluralForms = [\n 'singular',\n 'plural',\n 'dual',\n 'zero',\n 'one',\n 'two',\n 'few',\n 'many',\n 'other',\n] as const;\nexport type PluralType = (typeof pluralForms)[number];\nexport function isAcceptedPluralForm(form: string): form is PluralType {\n return pluralForms.includes(form as (typeof pluralForms)[number]);\n}\n","class IntlCache {\n private cache: Map<string, any>;\n\n constructor() {\n // Create separate caches for each Intl constructor\n this.cache = new Map();\n }\n\n private _generateKey(\n constructor: string,\n locales: string | string[],\n options = {}\n ) {\n // Handle both string and array locales\n const localeKey = Array.isArray(locales) ? locales.join(',') : locales;\n // Sort option keys to ensure consistent key generation\n const sortedOptions = options\n ? JSON.stringify(options, Object.keys(options).sort())\n : '{}';\n return `${constructor}:${localeKey}:${sortedOptions}`;\n }\n\n get<K extends keyof typeof Intl>(\n constructor: K,\n locales: string | string[],\n options = {}\n ): /* @ts-expect-error constructors must be valid */\n InstanceType<(typeof Intl)[K]> {\n const key = this._generateKey(constructor, locales, options);\n if (!this.cache.has(key)) {\n // Create a new Intl object if not in cache\n const intlObject = new (Intl[constructor] as any)(locales, options);\n this.cache.set(key, intlObject);\n }\n return this.cache.get(key);\n }\n}\n\nexport const intlCache = new IntlCache();\n","import { VariableTransformationSuffix, VariableType } from '../types';\n\nconst VARIABLE_TRANSFORMATION_SUFFIXES_TO_MINIFIED_NAMES = {\n variable: 'v',\n number: 'n',\n datetime: 'd',\n currency: 'c',\n} as const;\n\nexport function minifyVariableType(\n variableType: VariableTransformationSuffix\n): VariableType {\n return VARIABLE_TRANSFORMATION_SUFFIXES_TO_MINIFIED_NAMES[variableType];\n}\n","import { intlCache } from 'src/cache/IntlCache';\nimport { pluralForms, PluralType } from '../settings/plurals';\nimport { libraryDefaultLocale } from '../settings/settings';\n\n/**\n * Given a number and a list of allowed plural forms, return the plural form that best fits the number.\n *\n * @param {number} n - The number to determine the plural form for.\n * @param {locales[]} forms - The allowed plural forms.\n * @returns {PluralType} The determined plural form, or an empty string if none fit.\n */\nexport default function _getPluralForm(\n n: number,\n forms: PluralType[] = pluralForms as any,\n locales: string[] = [libraryDefaultLocale]\n): PluralType | '' {\n const pluralRules = intlCache.get('PluralRules', locales);\n const provisionalBranchName = pluralRules.select(n);\n // aliases\n const absN = Math.abs(n);\n // 0\n if (absN === 0 && forms.includes('zero')) return 'zero'; // override\n // 1\n if (absN === 1) {\n if (forms.includes('singular')) return 'singular'; // override\n if (forms.includes('one')) return 'one'; // override\n }\n if (provisionalBranchName === 'one' && forms.includes('singular'))\n return 'singular';\n // 2\n if (absN === 2) {\n if (forms.includes('dual')) return 'dual'; // override\n if (forms.includes('two')) return 'two'; // override\n }\n if (provisionalBranchName === 'two' && forms.includes('dual')) return 'dual';\n // fallbacks\n if (forms.includes(provisionalBranchName)) return provisionalBranchName;\n // two\n if (provisionalBranchName === 'two' && forms.includes('dual')) return 'dual';\n if (provisionalBranchName === 'two' && forms.includes('plural'))\n return 'plural';\n if (provisionalBranchName === 'two' && forms.includes('other'))\n return 'other';\n // few\n if (provisionalBranchName === 'few' && forms.includes('plural'))\n return 'plural';\n if (provisionalBranchName === 'few' && forms.includes('other'))\n return 'other';\n // many\n if (provisionalBranchName === 'many' && forms.includes('plural'))\n return 'plural';\n if (provisionalBranchName === 'many' && forms.includes('other'))\n return 'other';\n // other\n if (provisionalBranchName === 'other' && forms.includes('plural'))\n return 'plural';\n return '';\n}\n","export const libraryDefaultLocale = 'en' as const;\nexport const maxTimeout = 60000;\n","import { Variable } from '../types';\n\nexport default function isVariable(obj: unknown): obj is Variable {\n const variableObj = obj as Variable;\n if (\n variableObj &&\n typeof variableObj === 'object' &&\n typeof (variableObj as Variable).k === 'string'\n ) {\n const k = Object.keys(variableObj);\n if (k.length === 1) return true;\n if (k.length === 2) {\n if (typeof variableObj.i === 'number') return true;\n if (typeof variableObj.v === 'string') return true;\n }\n if (k.length === 3) {\n if (\n typeof variableObj.v === 'string' &&\n typeof variableObj.i === 'number'\n )\n return true;\n }\n }\n return false;\n}\n"],"names":["pluralForms","intlCache","IntlCache","this","cache","Map","prototype","_generateKey","constructor","locales","options","localeKey","Array","isArray","join","sortedOptions","JSON","stringify","Object","keys","sort","concat","get","key","has","intlObject","Intl","set","VARIABLE_TRANSFORMATION_SUFFIXES_TO_MINIFIED_NAMES","variable","number","datetime","currency","n","forms","provisionalBranchName","select","absN","Math","abs","includes","form","obj","variableObj","k","length","i","v","variableType"],"mappings":"aAAO,ICAMA,EAAc,CACzB,WACA,SACA,OACA,OACA,MACA,MACA,MACA,OACA,SCTF,IAsCaC,EAAY,IAtCzB,WAGE,SAAAC,IAEEC,KAAKC,MAAQ,IAAIC,GACnB,CA8BF,OA5BUH,EAAAI,UAAAC,aAAR,SACEC,EACAC,EACAC,QAAA,IAAAA,IAAAA,EAAA,CAAA,GAGA,IAAMC,EAAYC,MAAMC,QAAQJ,GAAWA,EAAQK,KAAK,KAAOL,EAEzDM,EAAgBL,EAClBM,KAAKC,UAAUP,EAASQ,OAAOC,KAAKT,GAASU,QAC7C,KACJ,MAAO,UAAGZ,EAAW,KAAAa,OAAIV,EAAS,KAAAU,OAAIN,EACxC,EAEAb,EAAAI,UAAAgB,IAAA,SACEd,EACAC,EACAC,QAAA,IAAAA,IAAAA,EAAA,CAAA,GAGA,IAAMa,EAAMpB,KAAKI,aAAaC,EAAaC,EAASC,GACpD,IAAKP,KAAKC,MAAMoB,IAAID,GAAM,CAExB,IAAME,EAAa,IAAKC,KAAKlB,GAAqBC,EAASC,GAC3DP,KAAKC,MAAMuB,IAAIJ,EAAKE,EACtB,CACA,OAAOtB,KAAKC,MAAMkB,IAAIC,EACxB,EACFrB,CAAA,KClCA,IAAM0B,EAAqD,CACzDC,SAAU,IACVC,OAAQ,IACRC,SAAU,IACVC,SAAU,4BHLkB,+CADC,mDAEK,iDIStB,SACZC,EACAC,EACAzB,QADA,IAAAyB,IAAAA,EAAsBlC,QACtB,IAAAS,IAAAA,EAAA,CCdkC,ODgBlC,IACM0B,EADclC,EAAUqB,IAAI,cAAeb,GACP2B,OAAOH,GAE3CI,EAAOC,KAAKC,IAAIN,GAEtB,GAAa,IAATI,GAAcH,EAAMM,SAAS,QAAS,MAAO,OAEjD,GAAa,IAATH,EAAY,CACd,GAAIH,EAAMM,SAAS,YAAa,MAAO,WACvC,GAAIN,EAAMM,SAAS,OAAQ,MAAO,KACpC,CACA,GAA8B,QAA1BL,GAAmCD,EAAMM,SAAS,YACpD,MAAO,WAET,GAAa,IAATH,EAAY,CACd,GAAIH,EAAMM,SAAS,QAAS,MAAO,OACnC,GAAIN,EAAMM,SAAS,OAAQ,MAAO,KACpC,CACA,MAA8B,QAA1BL,GAAmCD,EAAMM,SAAS,QAAgB,OAElEN,EAAMM,SAASL,GAA+BA,EAEpB,QAA1BA,GAAmCD,EAAMM,SAAS,QAAgB,OACxC,QAA1BL,GAAmCD,EAAMM,SAAS,UAC7C,SACqB,QAA1BL,GAAmCD,EAAMM,SAAS,SAC7C,QAEqB,QAA1BL,GAAmCD,EAAMM,SAAS,UAC7C,SACqB,QAA1BL,GAAmCD,EAAMM,SAAS,SAC7C,QAEqB,SAA1BL,GAAoCD,EAAMM,SAAS,UAC9C,SACqB,SAA1BL,GAAoCD,EAAMM,SAAS,SAC9C,QAEqB,UAA1BL,GAAqCD,EAAMM,SAAS,UAC/C,SACF,EACT,+BH7CM,SAA+BC,GACnC,OAAOzC,EAAYwC,SAASC,EAC9B,qBKZc,SAAqBC,GACjC,IAAMC,EAAcD,EACpB,GACEC,GACuB,iBAAhBA,GACgC,iBAA/BA,EAAyBC,EACjC,CACA,IAAMA,EAAI1B,OAAOC,KAAKwB,GACtB,GAAiB,IAAbC,EAAEC,OAAc,OAAO,EAC3B,GAAiB,IAAbD,EAAEC,OAAc,CAClB,GAA6B,iBAAlBF,EAAYG,EAAgB,OAAO,EAC9C,GAA6B,iBAAlBH,EAAYI,EAAgB,OAAO,CAChD,CACA,GAAiB,IAAbH,EAAEC,QAEuB,iBAAlBF,EAAYI,GACM,iBAAlBJ,EAAYG,EAEnB,OAAO,CAEb,CACA,OAAO,CACT,+BDxBoC,gCFS9B,SACJE,GAEA,OAAOpB,EAAmDoB,EAC5D"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"internal.esm.min.mjs","sources":["../src/settings/settingsUrls.ts","../src/settings/settings.ts","../src/settings/plurals.ts","../src/cache/IntlCache.ts","../src/locales/getPluralForm.ts","../src/utils/isVariable.ts","../src/utils/minify.ts"],"sourcesContent":["export const defaultCacheUrl = 'https://cdn.gtx.dev' as const;\nexport const defaultBaseUrl = 'https://api2.gtx.dev' as const;\nexport const defaultRuntimeApiUrl = 'https://runtime2.gtx.dev' as const;\nexport const translateBatchUrl = '/v1/translate/batch' as const;\nexport const translateJsxUrl = '/v1/translate/react' as const;\nexport const translateContentUrl = '/v1/translate/content' as const;\nexport const translateIcuUrl = '/v1/translate/icu' as const;\nexport const updateProjectTranslationsUrl =\n '/v1/project/translations/update' as const;\nexport const getProjectLocalesUrl = '/v1/project/locales' as const;\n","export const libraryDefaultLocale = 'en' as const;\nexport const maxTimeout = 60000;\n","export const pluralForms = [\n 'singular',\n 'plural',\n 'dual',\n 'zero',\n 'one',\n 'two',\n 'few',\n 'many',\n 'other',\n] as const;\nexport type PluralType = (typeof pluralForms)[number];\nexport function isAcceptedPluralForm(form: string): form is PluralType {\n return pluralForms.includes(form as (typeof pluralForms)[number]);\n}\n","class IntlCache {\n private cache: Map<string, any>;\n\n constructor() {\n // Create separate caches for each Intl constructor\n this.cache = new Map();\n }\n\n private _generateKey(\n constructor: string,\n locales: string | string[],\n options = {}\n ) {\n // Handle both string and array locales\n const localeKey = Array.isArray(locales) ? locales.join(',') : locales;\n // Sort option keys to ensure consistent key generation\n const sortedOptions = options\n ? JSON.stringify(options, Object.keys(options).sort())\n : '{}';\n return `${constructor}:${localeKey}:${sortedOptions}`;\n }\n\n get<K extends keyof typeof Intl>(\n constructor: K,\n locales: string | string[],\n options = {}\n ): /* @ts-expect-error constructors must be valid */\n InstanceType<(typeof Intl)[K]> {\n const key = this._generateKey(constructor, locales, options);\n if (!this.cache.has(key)) {\n // Create a new Intl object if not in cache\n const intlObject = new (Intl[constructor] as any)(locales, options);\n this.cache.set(key, intlObject);\n }\n return this.cache.get(key);\n }\n}\n\nexport const intlCache = new IntlCache();\n","import { intlCache } from 'src/cache/IntlCache';\nimport { pluralForms, PluralType } from '../settings/plurals';\nimport { libraryDefaultLocale } from '../settings/settings';\n\n/**\n * Given a number and a list of allowed plural forms, return the plural form that best fits the number.\n *\n * @param {number} n - The number to determine the plural form for.\n * @param {locales[]} forms - The allowed plural forms.\n * @returns {PluralType} The determined plural form, or an empty string if none fit.\n */\nexport default function _getPluralForm(\n n: number,\n forms: PluralType[] = pluralForms as any,\n locales: string[] = [libraryDefaultLocale]\n): PluralType | '' {\n const pluralRules = intlCache.get('PluralRules', locales);\n const provisionalBranchName = pluralRules.select(n);\n // aliases\n const absN = Math.abs(n);\n // 0\n if (absN === 0 && forms.includes('zero')) return 'zero'; // override\n // 1\n if (absN === 1) {\n if (forms.includes('singular')) return 'singular'; // override\n if (forms.includes('one')) return 'one'; // override\n }\n if (provisionalBranchName === 'one' && forms.includes('singular'))\n return 'singular';\n // 2\n if (absN === 2) {\n if (forms.includes('dual')) return 'dual'; // override\n if (forms.includes('two')) return 'two'; // override\n }\n if (provisionalBranchName === 'two' && forms.includes('dual')) return 'dual';\n // fallbacks\n if (forms.includes(provisionalBranchName)) return provisionalBranchName;\n // two\n if (provisionalBranchName === 'two' && forms.includes('dual')) return 'dual';\n if (provisionalBranchName === 'two' && forms.includes('plural'))\n return 'plural';\n if (provisionalBranchName === 'two' && forms.includes('other'))\n return 'other';\n // few\n if (provisionalBranchName === 'few' && forms.includes('plural'))\n return 'plural';\n if (provisionalBranchName === 'few' && forms.includes('other'))\n return 'other';\n // many\n if (provisionalBranchName === 'many' && forms.includes('plural'))\n return 'plural';\n if (provisionalBranchName === 'many' && forms.includes('other'))\n return 'other';\n // other\n if (provisionalBranchName === 'other' && forms.includes('plural'))\n return 'plural';\n return '';\n}\n","import { Variable } from '../types';\n\nexport default function isVariable(obj: unknown): obj is Variable {\n const variableObj = obj as Variable;\n if (\n variableObj &&\n typeof variableObj === 'object' &&\n typeof (variableObj as Variable).k === 'string'\n ) {\n const k = Object.keys(variableObj);\n if (k.length === 1) return true;\n if (k.length === 2) {\n if (typeof variableObj.i === 'number') return true;\n if (typeof variableObj.v === 'string') return true;\n }\n if (k.length === 3) {\n if (\n typeof variableObj.v === 'string' &&\n typeof variableObj.i === 'number'\n )\n return true;\n }\n }\n return false;\n}\n","import { VariableTransformationSuffix, VariableType } from '../types';\n\nconst VARIABLE_TRANSFORMATION_SUFFIXES_TO_MINIFIED_NAMES = {\n variable: 'v',\n number: 'n',\n datetime: 'd',\n currency: 'c',\n} as const;\n\nexport function minifyVariableType(\n variableType: VariableTransformationSuffix\n): VariableType {\n return VARIABLE_TRANSFORMATION_SUFFIXES_TO_MINIFIED_NAMES[variableType];\n}\n"],"names":["defaultCacheUrl","defaultBaseUrl","defaultRuntimeApiUrl","libraryDefaultLocale","pluralForms","isAcceptedPluralForm","form","includes","intlCache","IntlCache","this","cache","Map","prototype","_generateKey","constructor","locales","options","localeKey","Array","isArray","join","sortedOptions","JSON","stringify","Object","keys","sort","concat","get","key","has","intlObject","Intl","set","_getPluralForm","n","forms","provisionalBranchName","select","absN","Math","abs","isVariable","obj","variableObj","k","length","i","v","VARIABLE_TRANSFORMATION_SUFFIXES_TO_MINIFIED_NAMES","variable","number","datetime","currency","minifyVariableType","variableType"],"mappings":"AAAO,IAAMA,EAAkB,sBAClBC,EAAiB,uBACjBC,EAAuB,2BCFvBC,EAAuB,KCAvBC,EAAc,CACzB,WACA,SACA,OACA,OACA,MACA,MACA,MACA,OACA,SAGI,SAAUC,EAAqBC,GACnC,OAAOF,EAAYG,SAASD,EAC9B,CCdA,IAsCaE,EAAY,IAtCzB,WAGE,SAAAC,IAEEC,KAAKC,MAAQ,IAAIC,
|
1
|
+
{"version":3,"file":"internal.esm.min.mjs","sources":["../src/settings/settingsUrls.ts","../src/settings/settings.ts","../src/settings/plurals.ts","../src/cache/IntlCache.ts","../src/locales/getPluralForm.ts","../src/utils/isVariable.ts","../src/utils/minify.ts"],"sourcesContent":["export const defaultCacheUrl = 'https://cdn.gtx.dev' as const;\nexport const defaultBaseUrl = 'https://api2.gtx.dev' as const;\nexport const defaultRuntimeApiUrl = 'https://runtime2.gtx.dev' as const;\nexport const translateBatchUrl = '/v1/translate/batch' as const;\nexport const translateJsxUrl = '/v1/translate/react' as const;\nexport const translateContentUrl = '/v1/translate/content' as const;\nexport const translateIcuUrl = '/v1/translate/icu' as const;\nexport const updateProjectTranslationsUrl =\n '/v1/project/translations/update' as const;\nexport const getProjectLocalesUrl = '/v1/project/locales' as const;\n","export const libraryDefaultLocale = 'en' as const;\nexport const maxTimeout = 60000;\n","export const pluralForms = [\n 'singular',\n 'plural',\n 'dual',\n 'zero',\n 'one',\n 'two',\n 'few',\n 'many',\n 'other',\n] as const;\nexport type PluralType = (typeof pluralForms)[number];\nexport function isAcceptedPluralForm(form: string): form is PluralType {\n return pluralForms.includes(form as (typeof pluralForms)[number]);\n}\n","class IntlCache {\n private cache: Map<string, any>;\n\n constructor() {\n // Create separate caches for each Intl constructor\n this.cache = new Map();\n }\n\n private _generateKey(\n constructor: string,\n locales: string | string[],\n options = {}\n ) {\n // Handle both string and array locales\n const localeKey = Array.isArray(locales) ? locales.join(',') : locales;\n // Sort option keys to ensure consistent key generation\n const sortedOptions = options\n ? JSON.stringify(options, Object.keys(options).sort())\n : '{}';\n return `${constructor}:${localeKey}:${sortedOptions}`;\n }\n\n get<K extends keyof typeof Intl>(\n constructor: K,\n locales: string | string[],\n options = {}\n ): /* @ts-expect-error constructors must be valid */\n InstanceType<(typeof Intl)[K]> {\n const key = this._generateKey(constructor, locales, options);\n if (!this.cache.has(key)) {\n // Create a new Intl object if not in cache\n const intlObject = new (Intl[constructor] as any)(locales, options);\n this.cache.set(key, intlObject);\n }\n return this.cache.get(key);\n }\n}\n\nexport const intlCache = new IntlCache();\n","import { intlCache } from 'src/cache/IntlCache';\nimport { pluralForms, PluralType } from '../settings/plurals';\nimport { libraryDefaultLocale } from '../settings/settings';\n\n/**\n * Given a number and a list of allowed plural forms, return the plural form that best fits the number.\n *\n * @param {number} n - The number to determine the plural form for.\n * @param {locales[]} forms - The allowed plural forms.\n * @returns {PluralType} The determined plural form, or an empty string if none fit.\n */\nexport default function _getPluralForm(\n n: number,\n forms: PluralType[] = pluralForms as any,\n locales: string[] = [libraryDefaultLocale]\n): PluralType | '' {\n const pluralRules = intlCache.get('PluralRules', locales);\n const provisionalBranchName = pluralRules.select(n);\n // aliases\n const absN = Math.abs(n);\n // 0\n if (absN === 0 && forms.includes('zero')) return 'zero'; // override\n // 1\n if (absN === 1) {\n if (forms.includes('singular')) return 'singular'; // override\n if (forms.includes('one')) return 'one'; // override\n }\n if (provisionalBranchName === 'one' && forms.includes('singular'))\n return 'singular';\n // 2\n if (absN === 2) {\n if (forms.includes('dual')) return 'dual'; // override\n if (forms.includes('two')) return 'two'; // override\n }\n if (provisionalBranchName === 'two' && forms.includes('dual')) return 'dual';\n // fallbacks\n if (forms.includes(provisionalBranchName)) return provisionalBranchName;\n // two\n if (provisionalBranchName === 'two' && forms.includes('dual')) return 'dual';\n if (provisionalBranchName === 'two' && forms.includes('plural'))\n return 'plural';\n if (provisionalBranchName === 'two' && forms.includes('other'))\n return 'other';\n // few\n if (provisionalBranchName === 'few' && forms.includes('plural'))\n return 'plural';\n if (provisionalBranchName === 'few' && forms.includes('other'))\n return 'other';\n // many\n if (provisionalBranchName === 'many' && forms.includes('plural'))\n return 'plural';\n if (provisionalBranchName === 'many' && forms.includes('other'))\n return 'other';\n // other\n if (provisionalBranchName === 'other' && forms.includes('plural'))\n return 'plural';\n return '';\n}\n","import { Variable } from '../types';\n\nexport default function isVariable(obj: unknown): obj is Variable {\n const variableObj = obj as Variable;\n if (\n variableObj &&\n typeof variableObj === 'object' &&\n typeof (variableObj as Variable).k === 'string'\n ) {\n const k = Object.keys(variableObj);\n if (k.length === 1) return true;\n if (k.length === 2) {\n if (typeof variableObj.i === 'number') return true;\n if (typeof variableObj.v === 'string') return true;\n }\n if (k.length === 3) {\n if (\n typeof variableObj.v === 'string' &&\n typeof variableObj.i === 'number'\n )\n return true;\n }\n }\n return false;\n}\n","import { VariableTransformationSuffix, VariableType } from '../types';\n\nconst VARIABLE_TRANSFORMATION_SUFFIXES_TO_MINIFIED_NAMES = {\n variable: 'v',\n number: 'n',\n datetime: 'd',\n currency: 'c',\n} as const;\n\nexport function minifyVariableType(\n variableType: VariableTransformationSuffix\n): VariableType {\n return VARIABLE_TRANSFORMATION_SUFFIXES_TO_MINIFIED_NAMES[variableType];\n}\n"],"names":["defaultCacheUrl","defaultBaseUrl","defaultRuntimeApiUrl","libraryDefaultLocale","pluralForms","isAcceptedPluralForm","form","includes","intlCache","IntlCache","this","cache","Map","prototype","_generateKey","constructor","locales","options","localeKey","Array","isArray","join","sortedOptions","JSON","stringify","Object","keys","sort","concat","get","key","has","intlObject","Intl","set","_getPluralForm","n","forms","provisionalBranchName","select","absN","Math","abs","isVariable","obj","variableObj","k","length","i","v","VARIABLE_TRANSFORMATION_SUFFIXES_TO_MINIFIED_NAMES","variable","number","datetime","currency","minifyVariableType","variableType"],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
@@ -300,6 +300,9 @@ type Metadata = {
|
|
300
300
|
[key: string]: any;
|
301
301
|
};
|
302
302
|
type FormatVariables = Record<string, string | number | boolean | null | undefined | Date>;
|
303
|
+
/**
|
304
|
+
* @deprecated This type is deprecated and will be removed in a future version.
|
305
|
+
*/
|
303
306
|
type Update = {
|
304
307
|
type: 'content';
|
305
308
|
data: {
|
@@ -313,6 +316,9 @@ type Update = {
|
|
313
316
|
metadata: Metadata;
|
314
317
|
};
|
315
318
|
};
|
319
|
+
/**
|
320
|
+
* @deprecated This type is deprecated and will be removed in a future version.
|
321
|
+
*/
|
316
322
|
type Request = {
|
317
323
|
type: 'content';
|
318
324
|
data: {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.esm.min.mjs","sources":["../src/types-dir/content.ts"],"sourcesContent":["import { Variable } from './variables';\n\n/**\n * Map of data-_gt properties to their corresponding React props\n */\nexport const HTML_CONTENT_PROPS = {\n pl: 'placeholder',\n ti: 'title',\n alt: 'alt',\n arl: 'aria-label',\n arb: 'aria-labelledby',\n ard: 'aria-describedby',\n} as const;\n\nexport type HtmlContentPropKeysRecord = Partial<\n Record<keyof typeof HTML_CONTENT_PROPS, string>\n>;\nexport type HtmlContentPropValuesRecord = Partial<\n Record<(typeof HTML_CONTENT_PROPS)[keyof typeof HTML_CONTENT_PROPS], string>\n>;\n\n/**\n * GTProp is an internal property used to contain data for translating and rendering elements.\n * note, transformations are only read on the server side if they are 'plural' or 'branch'\n */\nexport type GTProp = {\n b?: Record<string, JsxChildren>; // Branches\n t?: 'p' | 'b'; // Branch Transformation\n} & HtmlContentPropKeysRecord;\n\nexport type JsxElement = {\n t?: string; // tag name\n i?: number; // id\n d?: GTProp; // GT data\n c?: JsxChildren; // children\n};\n\nexport type JsxChild = string | JsxElement | Variable;\n\n/**\n * The format of the content\n */\nexport type DataFormat = 'JSX' | 'ICU' | 'I18NEXT';\n\n/**\n * A content type representing JSX, ICU, and I18next messages\n */\nexport type Content = JsxChildren | IcuMessage | I18nextMessage;\n\n/**\n * A content type representing JSX elements\n */\nexport type JsxChildren = JsxChild | JsxChild[];\n\n/**\n * A content type representing ICU messages\n */\nexport type IcuMessage = string;\n\n/**\n * A content type representing I18next messages\n */\nexport type I18nextMessage = string;\n"],"names":["HTML_CONTENT_PROPS","pl","ti","alt","arl","arb","ard"],"mappings":"
|
1
|
+
{"version":3,"file":"types.esm.min.mjs","sources":["../src/types-dir/content.ts"],"sourcesContent":["import { Variable } from './variables';\n\n/**\n * Map of data-_gt properties to their corresponding React props\n */\nexport const HTML_CONTENT_PROPS = {\n pl: 'placeholder',\n ti: 'title',\n alt: 'alt',\n arl: 'aria-label',\n arb: 'aria-labelledby',\n ard: 'aria-describedby',\n} as const;\n\nexport type HtmlContentPropKeysRecord = Partial<\n Record<keyof typeof HTML_CONTENT_PROPS, string>\n>;\nexport type HtmlContentPropValuesRecord = Partial<\n Record<(typeof HTML_CONTENT_PROPS)[keyof typeof HTML_CONTENT_PROPS], string>\n>;\n\n/**\n * GTProp is an internal property used to contain data for translating and rendering elements.\n * note, transformations are only read on the server side if they are 'plural' or 'branch'\n */\nexport type GTProp = {\n b?: Record<string, JsxChildren>; // Branches\n t?: 'p' | 'b'; // Branch Transformation\n} & HtmlContentPropKeysRecord;\n\nexport type JsxElement = {\n t?: string; // tag name\n i?: number; // id\n d?: GTProp; // GT data\n c?: JsxChildren; // children\n};\n\nexport type JsxChild = string | JsxElement | Variable;\n\n/**\n * The format of the content\n */\nexport type DataFormat = 'JSX' | 'ICU' | 'I18NEXT';\n\n/**\n * A content type representing JSX, ICU, and I18next messages\n */\nexport type Content = JsxChildren | IcuMessage | I18nextMessage;\n\n/**\n * A content type representing JSX elements\n */\nexport type JsxChildren = JsxChild | JsxChild[];\n\n/**\n * A content type representing ICU messages\n */\nexport type IcuMessage = string;\n\n/**\n * A content type representing I18next messages\n */\nexport type I18nextMessage = string;\n"],"names":["HTML_CONTENT_PROPS","pl","ti","alt","arl","arb","ard"],"mappings":"AAKO,IAAMA,EAAqB,CAChCC,GAAI,cACJC,GAAI,QACJC,IAAK,MACLC,IAAK,aACLC,IAAK,kBACLC,IAAK"}
|