@payloadcms/translations 4.0.0-internal.bc5cf8c → 4.0.0-internal.bf4bcce
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/LICENSE.md +1 -1
- package/dist/clientKeys.d.ts +1 -1
- package/dist/clientKeys.d.ts.map +1 -1
- package/dist/clientKeys.js +85 -1
- package/dist/clientKeys.js.map +1 -1
- package/dist/dateFNS/ar.js +1 -0
- package/dist/dateFNS/az.js +1 -0
- package/dist/dateFNS/bg.js +1 -0
- package/dist/dateFNS/bn.js +1 -0
- package/dist/dateFNS/ca.js +1 -0
- package/dist/dateFNS/chunk-YT6ULX4E.js +1 -0
- package/dist/dateFNS/cs.js +1 -0
- package/dist/dateFNS/da.js +1 -0
- package/dist/dateFNS/de.js +1 -0
- package/dist/dateFNS/es.js +1 -0
- package/dist/dateFNS/et.js +1 -0
- package/dist/dateFNS/fa-IR.js +1 -0
- package/dist/dateFNS/fr.js +1 -0
- package/dist/dateFNS/he.js +1 -0
- package/dist/dateFNS/hr.js +1 -0
- package/dist/dateFNS/hu.js +1 -0
- package/dist/dateFNS/id.js +1 -0
- package/dist/dateFNS/is.js +1 -0
- package/dist/dateFNS/it.js +1 -0
- package/dist/dateFNS/ja.js +1 -0
- package/dist/dateFNS/ko.js +1 -0
- package/dist/dateFNS/lt.js +1 -0
- package/dist/dateFNS/lv.js +1 -0
- package/dist/dateFNS/nb.js +1 -0
- package/dist/dateFNS/nl.js +1 -0
- package/dist/dateFNS/pl.js +1 -0
- package/dist/dateFNS/pt.js +1 -0
- package/dist/dateFNS/ro.js +1 -0
- package/dist/dateFNS/ru.js +1 -0
- package/dist/dateFNS/sk.js +1 -0
- package/dist/dateFNS/sl.js +1 -0
- package/dist/dateFNS/sr-Latn.js +1 -0
- package/dist/dateFNS/sr.js +1 -0
- package/dist/dateFNS/sv.js +1 -0
- package/dist/dateFNS/ta.js +1 -0
- package/dist/dateFNS/th.js +1 -0
- package/dist/dateFNS/tr.js +1 -0
- package/dist/dateFNS/uk.js +1 -0
- package/dist/dateFNS/vi.js +1 -0
- package/dist/dateFNS/zh-CN.js +1 -0
- package/dist/dateFNS/zh-TW.js +1 -0
- package/dist/importDateFNSLocale.d.ts.map +1 -1
- package/dist/importDateFNSLocale.js +41 -41
- package/dist/languages/ar.d.ts.map +1 -1
- package/dist/languages/ar.js +89 -3
- package/dist/languages/ar.js.map +1 -1
- package/dist/languages/az.d.ts.map +1 -1
- package/dist/languages/az.js +89 -3
- package/dist/languages/az.js.map +1 -1
- package/dist/languages/bg.d.ts.map +1 -1
- package/dist/languages/bg.js +89 -3
- package/dist/languages/bg.js.map +1 -1
- package/dist/languages/bnBd.d.ts.map +1 -1
- package/dist/languages/bnBd.js +89 -3
- package/dist/languages/bnBd.js.map +1 -1
- package/dist/languages/bnIn.d.ts.map +1 -1
- package/dist/languages/bnIn.js +89 -3
- package/dist/languages/bnIn.js.map +1 -1
- package/dist/languages/ca.d.ts.map +1 -1
- package/dist/languages/ca.js +89 -3
- package/dist/languages/ca.js.map +1 -1
- package/dist/languages/cs.d.ts.map +1 -1
- package/dist/languages/cs.js +89 -3
- package/dist/languages/cs.js.map +1 -1
- package/dist/languages/da.d.ts.map +1 -1
- package/dist/languages/da.js +89 -3
- package/dist/languages/da.js.map +1 -1
- package/dist/languages/de.d.ts.map +1 -1
- package/dist/languages/de.js +89 -3
- package/dist/languages/de.js.map +1 -1
- package/dist/languages/en.d.ts +87 -1
- package/dist/languages/en.d.ts.map +1 -1
- package/dist/languages/en.js +89 -3
- package/dist/languages/en.js.map +1 -1
- package/dist/languages/es.d.ts.map +1 -1
- package/dist/languages/es.js +89 -3
- package/dist/languages/es.js.map +1 -1
- package/dist/languages/et.d.ts.map +1 -1
- package/dist/languages/et.js +89 -3
- package/dist/languages/et.js.map +1 -1
- package/dist/languages/fa.d.ts.map +1 -1
- package/dist/languages/fa.js +89 -3
- package/dist/languages/fa.js.map +1 -1
- package/dist/languages/fr.d.ts.map +1 -1
- package/dist/languages/fr.js +89 -3
- package/dist/languages/fr.js.map +1 -1
- package/dist/languages/he.d.ts.map +1 -1
- package/dist/languages/he.js +89 -3
- package/dist/languages/he.js.map +1 -1
- package/dist/languages/hr.d.ts.map +1 -1
- package/dist/languages/hr.js +89 -3
- package/dist/languages/hr.js.map +1 -1
- package/dist/languages/hu.d.ts.map +1 -1
- package/dist/languages/hu.js +89 -3
- package/dist/languages/hu.js.map +1 -1
- package/dist/languages/hy.d.ts.map +1 -1
- package/dist/languages/hy.js +89 -3
- package/dist/languages/hy.js.map +1 -1
- package/dist/languages/id.d.ts.map +1 -1
- package/dist/languages/id.js +89 -3
- package/dist/languages/id.js.map +1 -1
- package/dist/languages/is.d.ts.map +1 -1
- package/dist/languages/is.js +89 -3
- package/dist/languages/is.js.map +1 -1
- package/dist/languages/it.d.ts.map +1 -1
- package/dist/languages/it.js +89 -3
- package/dist/languages/it.js.map +1 -1
- package/dist/languages/ja.d.ts.map +1 -1
- package/dist/languages/ja.js +106 -20
- package/dist/languages/ja.js.map +1 -1
- package/dist/languages/ko.d.ts.map +1 -1
- package/dist/languages/ko.js +89 -3
- package/dist/languages/ko.js.map +1 -1
- package/dist/languages/lt.d.ts.map +1 -1
- package/dist/languages/lt.js +89 -3
- package/dist/languages/lt.js.map +1 -1
- package/dist/languages/lv.d.ts.map +1 -1
- package/dist/languages/lv.js +89 -3
- package/dist/languages/lv.js.map +1 -1
- package/dist/languages/my.d.ts.map +1 -1
- package/dist/languages/my.js +89 -3
- package/dist/languages/my.js.map +1 -1
- package/dist/languages/nb.d.ts.map +1 -1
- package/dist/languages/nb.js +89 -3
- package/dist/languages/nb.js.map +1 -1
- package/dist/languages/nl.d.ts.map +1 -1
- package/dist/languages/nl.js +89 -3
- package/dist/languages/nl.js.map +1 -1
- package/dist/languages/pl.d.ts.map +1 -1
- package/dist/languages/pl.js +89 -3
- package/dist/languages/pl.js.map +1 -1
- package/dist/languages/pt.d.ts.map +1 -1
- package/dist/languages/pt.js +89 -3
- package/dist/languages/pt.js.map +1 -1
- package/dist/languages/ro.d.ts.map +1 -1
- package/dist/languages/ro.js +89 -3
- package/dist/languages/ro.js.map +1 -1
- package/dist/languages/rs.d.ts.map +1 -1
- package/dist/languages/rs.js +89 -3
- package/dist/languages/rs.js.map +1 -1
- package/dist/languages/rsLatin.d.ts.map +1 -1
- package/dist/languages/rsLatin.js +89 -3
- package/dist/languages/rsLatin.js.map +1 -1
- package/dist/languages/ru.d.ts.map +1 -1
- package/dist/languages/ru.js +89 -3
- package/dist/languages/ru.js.map +1 -1
- package/dist/languages/sk.d.ts.map +1 -1
- package/dist/languages/sk.js +89 -3
- package/dist/languages/sk.js.map +1 -1
- package/dist/languages/sl.d.ts.map +1 -1
- package/dist/languages/sl.js +89 -3
- package/dist/languages/sl.js.map +1 -1
- package/dist/languages/sv.d.ts.map +1 -1
- package/dist/languages/sv.js +89 -3
- package/dist/languages/sv.js.map +1 -1
- package/dist/languages/ta.d.ts.map +1 -1
- package/dist/languages/ta.js +89 -3
- package/dist/languages/ta.js.map +1 -1
- package/dist/languages/th.d.ts.map +1 -1
- package/dist/languages/th.js +89 -3
- package/dist/languages/th.js.map +1 -1
- package/dist/languages/tr.d.ts.map +1 -1
- package/dist/languages/tr.js +89 -3
- package/dist/languages/tr.js.map +1 -1
- package/dist/languages/uk.d.ts.map +1 -1
- package/dist/languages/uk.js +89 -3
- package/dist/languages/uk.js.map +1 -1
- package/dist/languages/vi.d.ts.map +1 -1
- package/dist/languages/vi.js +89 -3
- package/dist/languages/vi.js.map +1 -1
- package/dist/languages/zh.d.ts.map +1 -1
- package/dist/languages/zh.js +89 -3
- package/dist/languages/zh.js.map +1 -1
- package/dist/languages/zhTw.d.ts.map +1 -1
- package/dist/languages/zhTw.js +107 -21
- package/dist/languages/zhTw.js.map +1 -1
- package/dist/utilities/getTranslation.d.ts.map +1 -1
- package/dist/utilities/getTranslationsByContext.d.ts +89 -3
- package/dist/utilities/getTranslationsByContext.d.ts.map +1 -1
- package/dist/utilities/getTranslationsByContext.js +41 -33
- package/dist/utilities/getTranslationsByContext.js.map +1 -1
- package/dist/utilities/init.d.ts +3 -3
- package/dist/utilities/init.d.ts.map +1 -1
- package/dist/utilities/languages.d.ts +2 -2
- package/dist/utilities/languages.d.ts.map +1 -1
- package/package.json +8 -6
- package/dist/utilities/deepMergeSimple.spec.js +0 -81
- package/dist/utilities/deepMergeSimple.spec.js.map +0 -1
- package/dist/utilities/languages.spec.js +0 -42
- package/dist/utilities/languages.spec.js.map +0 -1
|
@@ -1,41 +1,49 @@
|
|
|
1
1
|
import { clientTranslationKeys } from '../clientKeys.js';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* The client translation keys, grouped by namespace. For example, the keys `general:cancel`,
|
|
4
|
+
* `general:item` and `authentication:account` are stored as:
|
|
5
|
+
*
|
|
6
|
+
* `Map { 'general' => Set { 'cancel', 'item' }, 'authentication' => Set { 'account' } }`
|
|
7
|
+
*/ const clientKeysByNamespace = new Map();
|
|
8
|
+
for (const clientKey of clientTranslationKeys){
|
|
9
|
+
const separatorIndex = clientKey.indexOf(':');
|
|
10
|
+
const namespace = clientKey.slice(0, separatorIndex);
|
|
11
|
+
const key = clientKey.slice(separatorIndex + 1);
|
|
12
|
+
const keys = clientKeysByNamespace.get(namespace) ?? new Set();
|
|
13
|
+
clientKeysByNamespace.set(namespace, keys.add(key));
|
|
14
|
+
}
|
|
15
|
+
/** Plural forms of a key, for example `item_one` and `item_other` for `item` */ const pluralSuffix = /_(?:zero|one|two|few|many|other)$/;
|
|
16
|
+
/**
|
|
17
|
+
* Keeps only the translations the admin needs in the browser: the keys listed in
|
|
18
|
+
* `clientTranslationKeys`, plus their plural forms. Namespaces that end up empty are left out.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* // With the client keys `general:cancel` and `general:item`:
|
|
22
|
+
* filterClientKeys({
|
|
23
|
+
* general: { cancel: 'Cancel', item: 'Item', item_other: 'Items', save: 'Save' },
|
|
24
|
+
* error: { notFound: 'Not found' },
|
|
25
|
+
* })
|
|
26
|
+
* // => { general: { cancel: 'Cancel', item: 'Item', item_other: 'Items' } }
|
|
27
|
+
*/ function filterClientKeys(translations) {
|
|
3
28
|
const result = {};
|
|
4
|
-
for (const [
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
result[namespaceKey] = value;
|
|
29
|
+
for (const [namespace, value] of Object.entries(translations)){
|
|
30
|
+
if (namespace === '$schema') {
|
|
31
|
+
result[namespace] = value;
|
|
8
32
|
continue;
|
|
9
33
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
if (parentGroupKey === groupKey) {
|
|
19
|
-
if (namespaceKey === selector) {
|
|
20
|
-
result[selector] = value;
|
|
21
|
-
} else {
|
|
22
|
-
const pluralKeys = [
|
|
23
|
-
'zero',
|
|
24
|
-
'one',
|
|
25
|
-
'two',
|
|
26
|
-
'few',
|
|
27
|
-
'many',
|
|
28
|
-
'other'
|
|
29
|
-
];
|
|
30
|
-
pluralKeys.forEach((pluralKey)=>{
|
|
31
|
-
if (namespaceKey === `${selector}_${pluralKey}`) {
|
|
32
|
-
result[`${selector}_${pluralKey}`] = value;
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
}
|
|
34
|
+
const clientKeys = clientKeysByNamespace.get(namespace);
|
|
35
|
+
if (!clientKeys || typeof value !== 'object' || value === null) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const clientTranslations = {};
|
|
39
|
+
for (const [key, translation] of Object.entries(value)){
|
|
40
|
+
if (clientKeys.has(key) || clientKeys.has(key.replace(pluralSuffix, ''))) {
|
|
41
|
+
clientTranslations[key] = translation;
|
|
37
42
|
}
|
|
38
43
|
}
|
|
44
|
+
if (Object.keys(clientTranslations).length > 0) {
|
|
45
|
+
result[namespace] = clientTranslations;
|
|
46
|
+
}
|
|
39
47
|
}
|
|
40
48
|
return result;
|
|
41
49
|
}
|
|
@@ -52,7 +60,7 @@ function sortObject(obj) {
|
|
|
52
60
|
}
|
|
53
61
|
export const getTranslationsByContext = (selectedLanguage, context)=>{
|
|
54
62
|
if (context === 'client') {
|
|
55
|
-
return sortObject(
|
|
63
|
+
return sortObject(filterClientKeys(selectedLanguage.translations));
|
|
56
64
|
} else {
|
|
57
65
|
return selectedLanguage.translations;
|
|
58
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/getTranslationsByContext.ts"],"sourcesContent":["import type { Language } from '../types.js'\n\nimport { clientTranslationKeys } from '../clientKeys.js'\n\
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/getTranslationsByContext.ts"],"sourcesContent":["import type { Language } from '../types.js'\n\nimport { clientTranslationKeys } from '../clientKeys.js'\n\n/**\n * The client translation keys, grouped by namespace. For example, the keys `general:cancel`,\n * `general:item` and `authentication:account` are stored as:\n *\n * `Map { 'general' => Set { 'cancel', 'item' }, 'authentication' => Set { 'account' } }`\n */\nconst clientKeysByNamespace = new Map<string, Set<string>>()\nfor (const clientKey of clientTranslationKeys) {\n const separatorIndex = clientKey.indexOf(':')\n const namespace = clientKey.slice(0, separatorIndex)\n const key = clientKey.slice(separatorIndex + 1)\n const keys = clientKeysByNamespace.get(namespace) ?? new Set<string>()\n clientKeysByNamespace.set(namespace, keys.add(key))\n}\n\n/** Plural forms of a key, for example `item_one` and `item_other` for `item` */\nconst pluralSuffix = /_(?:zero|one|two|few|many|other)$/\n\n/**\n * Keeps only the translations the admin needs in the browser: the keys listed in\n * `clientTranslationKeys`, plus their plural forms. Namespaces that end up empty are left out.\n *\n * @example\n * // With the client keys `general:cancel` and `general:item`:\n * filterClientKeys({\n * general: { cancel: 'Cancel', item: 'Item', item_other: 'Items', save: 'Save' },\n * error: { notFound: 'Not found' },\n * })\n * // => { general: { cancel: 'Cancel', item: 'Item', item_other: 'Items' } }\n */\nfunction filterClientKeys(translations: Record<string, unknown>) {\n const result: Record<string, unknown> = {}\n\n for (const [namespace, value] of Object.entries(translations)) {\n if (namespace === '$schema') {\n result[namespace] = value\n continue\n }\n\n const clientKeys = clientKeysByNamespace.get(namespace)\n if (!clientKeys || typeof value !== 'object' || value === null) {\n continue\n }\n\n const clientTranslations: Record<string, unknown> = {}\n for (const [key, translation] of Object.entries(value)) {\n if (clientKeys.has(key) || clientKeys.has(key.replace(pluralSuffix, ''))) {\n clientTranslations[key] = translation\n }\n }\n\n if (Object.keys(clientTranslations).length > 0) {\n result[namespace] = clientTranslations\n }\n }\n\n return result\n}\n\nfunction sortObject(obj: Record<string, unknown>) {\n const sortedObject: Record<string, unknown> = {}\n Object.keys(obj)\n .sort()\n .forEach((key) => {\n if (typeof obj[key] === 'object') {\n sortedObject[key] = sortObject(obj[key] as Record<string, unknown>)\n } else {\n sortedObject[key] = obj[key]\n }\n })\n return sortedObject\n}\n\nexport const getTranslationsByContext = (selectedLanguage: Language, context: 'api' | 'client') => {\n if (context === 'client') {\n return sortObject(filterClientKeys(selectedLanguage.translations))\n } else {\n return selectedLanguage.translations\n }\n}\n"],"names":["clientTranslationKeys","clientKeysByNamespace","Map","clientKey","separatorIndex","indexOf","namespace","slice","key","keys","get","Set","set","add","pluralSuffix","filterClientKeys","translations","result","value","Object","entries","clientKeys","clientTranslations","translation","has","replace","length","sortObject","obj","sortedObject","sort","forEach","getTranslationsByContext","selectedLanguage","context"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ,mBAAkB;AAExD;;;;;CAKC,GACD,MAAMC,wBAAwB,IAAIC;AAClC,KAAK,MAAMC,aAAaH,sBAAuB;IAC7C,MAAMI,iBAAiBD,UAAUE,OAAO,CAAC;IACzC,MAAMC,YAAYH,UAAUI,KAAK,CAAC,GAAGH;IACrC,MAAMI,MAAML,UAAUI,KAAK,CAACH,iBAAiB;IAC7C,MAAMK,OAAOR,sBAAsBS,GAAG,CAACJ,cAAc,IAAIK;IACzDV,sBAAsBW,GAAG,CAACN,WAAWG,KAAKI,GAAG,CAACL;AAChD;AAEA,8EAA8E,GAC9E,MAAMM,eAAe;AAErB;;;;;;;;;;;CAWC,GACD,SAASC,iBAAiBC,YAAqC;IAC7D,MAAMC,SAAkC,CAAC;IAEzC,KAAK,MAAM,CAACX,WAAWY,MAAM,IAAIC,OAAOC,OAAO,CAACJ,cAAe;QAC7D,IAAIV,cAAc,WAAW;YAC3BW,MAAM,CAACX,UAAU,GAAGY;YACpB;QACF;QAEA,MAAMG,aAAapB,sBAAsBS,GAAG,CAACJ;QAC7C,IAAI,CAACe,cAAc,OAAOH,UAAU,YAAYA,UAAU,MAAM;YAC9D;QACF;QAEA,MAAMI,qBAA8C,CAAC;QACrD,KAAK,MAAM,CAACd,KAAKe,YAAY,IAAIJ,OAAOC,OAAO,CAACF,OAAQ;YACtD,IAAIG,WAAWG,GAAG,CAAChB,QAAQa,WAAWG,GAAG,CAAChB,IAAIiB,OAAO,CAACX,cAAc,MAAM;gBACxEQ,kBAAkB,CAACd,IAAI,GAAGe;YAC5B;QACF;QAEA,IAAIJ,OAAOV,IAAI,CAACa,oBAAoBI,MAAM,GAAG,GAAG;YAC9CT,MAAM,CAACX,UAAU,GAAGgB;QACtB;IACF;IAEA,OAAOL;AACT;AAEA,SAASU,WAAWC,GAA4B;IAC9C,MAAMC,eAAwC,CAAC;IAC/CV,OAAOV,IAAI,CAACmB,KACTE,IAAI,GACJC,OAAO,CAAC,CAACvB;QACR,IAAI,OAAOoB,GAAG,CAACpB,IAAI,KAAK,UAAU;YAChCqB,YAAY,CAACrB,IAAI,GAAGmB,WAAWC,GAAG,CAACpB,IAAI;QACzC,OAAO;YACLqB,YAAY,CAACrB,IAAI,GAAGoB,GAAG,CAACpB,IAAI;QAC9B;IACF;IACF,OAAOqB;AACT;AAEA,OAAO,MAAMG,2BAA2B,CAACC,kBAA4BC;IACnE,IAAIA,YAAY,UAAU;QACxB,OAAOP,WAAWZ,iBAAiBkB,iBAAiBjB,YAAY;IAClE,OAAO;QACL,OAAOiB,iBAAiBjB,YAAY;IACtC;AACF,EAAC"}
|
package/dist/utilities/init.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import type { DefaultTranslationKeys, DefaultTranslationsObject, I18n, Language
|
|
|
9
9
|
export declare const getTranslationString: <TTranslations = DefaultTranslationsObject, TTranslationKeys = DefaultTranslationKeys>({ count, key, translations, }: {
|
|
10
10
|
count?: number;
|
|
11
11
|
key: TTranslationKeys;
|
|
12
|
-
translations: Language<TTranslations>[
|
|
12
|
+
translations: Language<TTranslations>['translations'];
|
|
13
13
|
}) => string;
|
|
14
14
|
/**
|
|
15
15
|
* @function t
|
|
@@ -26,11 +26,11 @@ export declare function t<TTranslations = DefaultTranslationsObject, TTranslatio
|
|
|
26
26
|
}): string;
|
|
27
27
|
export declare const initI18n: (args: {
|
|
28
28
|
config: import("../types.js").I18nOptions;
|
|
29
|
-
context:
|
|
29
|
+
context: 'api';
|
|
30
30
|
language: import("../types.js").AcceptedLanguages;
|
|
31
31
|
} | {
|
|
32
32
|
config: import("../types.js").I18nOptions<import("../types.js").ClientTranslationsObject>;
|
|
33
|
-
context:
|
|
33
|
+
context: 'client';
|
|
34
34
|
language: import("../types.js").AcceptedLanguages;
|
|
35
35
|
}) => Promise<I18n>;
|
|
36
36
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/utilities/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EACzB,IAAI,EAGJ,QAAQ,EACT,MAAM,aAAa,CAAA;AAMpB;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,aAAa,GAAG,yBAAyB,EACzC,gBAAgB,GAAG,sBAAsB,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/utilities/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EACzB,IAAI,EAGJ,QAAQ,EACT,MAAM,aAAa,CAAA;AAMpB;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,aAAa,GAAG,yBAAyB,EACzC,gBAAgB,GAAG,sBAAsB,iCAKxC;IACD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,gBAAgB,CAAA;IACrB,YAAY,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAA;CACtD,KAAG,MAyCH,CAAA;AAiCD;;;;;;;GAOG;AACH,wBAAgB,CAAC,CACf,aAAa,GAAG,yBAAyB,EACzC,gBAAgB,GAAG,sBAAsB,EACzC,EACA,GAAG,EACH,YAAY,EACZ,IAAI,GACL,EAAE;IACD,GAAG,EAAE,gBAAgB,CAAA;IACrB,YAAY,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAA;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC3B,GAAG,MAAM,CAmBT;AA4CD,eAAO,MAAM,QAAQ;;;;;;;;MAjBL,OAAO,CAAC,IAAI,CA+C3B,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AcceptedLanguages } from '../types.js';
|
|
2
|
-
export declare const rtlLanguages: readonly [
|
|
3
|
-
export declare const acceptedLanguages: readonly [
|
|
2
|
+
export declare const rtlLanguages: readonly ['ar', 'fa', 'he'];
|
|
3
|
+
export declare const acceptedLanguages: readonly ['ar', 'az', 'bg', 'bn-BD', 'bn-IN', 'ca', 'cs', 'bn-BD', 'bn-IN', 'da', 'de', 'en', 'es', 'et', 'fa', 'fr', 'he', 'hr', 'hu', 'hy', 'id', 'is', 'it', 'ja', 'ko', 'lt', 'lv', 'my', 'nb', 'nl', 'pl', 'pt', 'ro', 'rs', 'rs-latin', 'ru', 'sk', 'sl', 'sv', 'ta', 'th', 'tr', 'uk', 'vi', 'zh', 'zh-TW'];
|
|
4
4
|
export declare function extractHeaderLanguage(acceptLanguageHeader: string): AcceptedLanguages | undefined;
|
|
5
5
|
//# sourceMappingURL=languages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"languages.d.ts","sourceRoot":"","sources":["../../src/utilities/languages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAsB,MAAM,aAAa,CAAA;AAExE,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"languages.d.ts","sourceRoot":"","sources":["../../src/utilities/languages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAsB,MAAM,aAAa,CAAA;AAExE,eAAO,MAAM,YAAY,YAAI,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAA;AAEvD,eAAO,MAAM,iBAAiB,YAC5B,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,OAAO,CAqFC,CAAA;AAkBV,wBAAgB,qBAAqB,CAAC,oBAAoB,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAuBjG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/translations",
|
|
3
|
-
"version": "4.0.0-internal.
|
|
3
|
+
"version": "4.0.0-internal.bf4bcce",
|
|
4
4
|
"homepage": "https://payloadcms.com",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -46,18 +46,20 @@
|
|
|
46
46
|
"dist"
|
|
47
47
|
],
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"date-fns": "4.
|
|
49
|
+
"date-fns": "4.4.0"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@types/react": "19.
|
|
53
|
-
"@types/react-dom": "19.
|
|
52
|
+
"@types/react": "19.3.0",
|
|
53
|
+
"@types/react-dom": "19.3.0",
|
|
54
54
|
"dotenv": "16.4.7",
|
|
55
|
+
"esbuild": "0.27.1",
|
|
55
56
|
"prettier": "3.5.3",
|
|
56
|
-
"typescript": "6.0.
|
|
57
|
+
"typescript": "npm:@typescript/typescript6@6.0.2",
|
|
57
58
|
"@payloadcms/eslint-config": "3.28.0"
|
|
58
59
|
},
|
|
59
60
|
"scripts": {
|
|
60
|
-
"build": "pnpm build:types && pnpm build:swc",
|
|
61
|
+
"build": "pnpm build:types && pnpm build:swc && pnpm build:dateFNS",
|
|
62
|
+
"build:dateFNS": "node bundleDateFNSLocales.js",
|
|
61
63
|
"build:debug": "pnpm build",
|
|
62
64
|
"build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
|
|
63
65
|
"build:types": "tsc --emitDeclarationOnly --outDir dist",
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { deepMergeSimple } from './deepMergeSimple.js';
|
|
3
|
-
describe('deepMergeSimple', ()=>{
|
|
4
|
-
it('should merge two flat objects', ()=>{
|
|
5
|
-
const result = deepMergeSimple({
|
|
6
|
-
a: 1
|
|
7
|
-
}, {
|
|
8
|
-
b: 2
|
|
9
|
-
});
|
|
10
|
-
expect(result).toEqual({
|
|
11
|
-
a: 1,
|
|
12
|
-
b: 2
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
it('should let obj2 override obj1 keys', ()=>{
|
|
16
|
-
const result = deepMergeSimple({
|
|
17
|
-
a: 1
|
|
18
|
-
}, {
|
|
19
|
-
a: 2
|
|
20
|
-
});
|
|
21
|
-
expect(result).toEqual({
|
|
22
|
-
a: 2
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
it('should recursively merge nested objects', ()=>{
|
|
26
|
-
const result = deepMergeSimple({
|
|
27
|
-
a: {
|
|
28
|
-
b: 1,
|
|
29
|
-
c: 2
|
|
30
|
-
}
|
|
31
|
-
}, {
|
|
32
|
-
a: {
|
|
33
|
-
c: 3,
|
|
34
|
-
d: 4
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
expect(result).toEqual({
|
|
38
|
-
a: {
|
|
39
|
-
b: 1,
|
|
40
|
-
c: 3,
|
|
41
|
-
d: 4
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
it('should not mutate the input objects', ()=>{
|
|
46
|
-
const obj1 = {
|
|
47
|
-
a: 1
|
|
48
|
-
};
|
|
49
|
-
const obj2 = {
|
|
50
|
-
b: 2
|
|
51
|
-
};
|
|
52
|
-
deepMergeSimple(obj1, obj2);
|
|
53
|
-
expect(obj1).toEqual({
|
|
54
|
-
a: 1
|
|
55
|
-
});
|
|
56
|
-
expect(obj2).toEqual({
|
|
57
|
-
b: 2
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
it('should not pollute global Object.prototype via __proto__', ()=>{
|
|
61
|
-
const malicious = JSON.parse('{"__proto__": {"isAdmin": true}}');
|
|
62
|
-
deepMergeSimple({}, malicious);
|
|
63
|
-
expect({}.isAdmin).toBeUndefined();
|
|
64
|
-
});
|
|
65
|
-
it('should not hijack the returned object prototype via __proto__', ()=>{
|
|
66
|
-
const malicious = JSON.parse('{"__proto__": {"isAdmin": true}}');
|
|
67
|
-
const result = deepMergeSimple({}, malicious);
|
|
68
|
-
expect(result.isAdmin).toBeUndefined();
|
|
69
|
-
});
|
|
70
|
-
it('should not hijack prototype via nested __proto__ key', ()=>{
|
|
71
|
-
const malicious = JSON.parse('{"a": {"__proto__": {"isAdmin": true}}}');
|
|
72
|
-
const base = {
|
|
73
|
-
a: {}
|
|
74
|
-
};
|
|
75
|
-
const result = deepMergeSimple(base, malicious);
|
|
76
|
-
expect(result.a.isAdmin).toBeUndefined();
|
|
77
|
-
expect({}.isAdmin).toBeUndefined();
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
//# sourceMappingURL=deepMergeSimple.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/deepMergeSimple.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { deepMergeSimple } from './deepMergeSimple.js'\n\ndescribe('deepMergeSimple', () => {\n it('should merge two flat objects', () => {\n const result = deepMergeSimple({ a: 1 }, { b: 2 })\n expect(result).toEqual({ a: 1, b: 2 })\n })\n\n it('should let obj2 override obj1 keys', () => {\n const result = deepMergeSimple({ a: 1 }, { a: 2 })\n expect(result).toEqual({ a: 2 })\n })\n\n it('should recursively merge nested objects', () => {\n const result = deepMergeSimple({ a: { b: 1, c: 2 } }, { a: { c: 3, d: 4 } })\n expect(result).toEqual({ a: { b: 1, c: 3, d: 4 } })\n })\n\n it('should not mutate the input objects', () => {\n const obj1 = { a: 1 }\n const obj2 = { b: 2 }\n deepMergeSimple(obj1, obj2)\n expect(obj1).toEqual({ a: 1 })\n expect(obj2).toEqual({ b: 2 })\n })\n\n it('should not pollute global Object.prototype via __proto__', () => {\n const malicious = JSON.parse('{\"__proto__\": {\"isAdmin\": true}}')\n deepMergeSimple({}, malicious)\n expect(({} as any).isAdmin).toBeUndefined()\n })\n\n it('should not hijack the returned object prototype via __proto__', () => {\n const malicious = JSON.parse('{\"__proto__\": {\"isAdmin\": true}}')\n const result = deepMergeSimple({}, malicious) as any\n expect(result.isAdmin).toBeUndefined()\n })\n\n it('should not hijack prototype via nested __proto__ key', () => {\n const malicious = JSON.parse('{\"a\": {\"__proto__\": {\"isAdmin\": true}}}')\n const base = { a: {} }\n const result = deepMergeSimple(base, malicious) as any\n expect(result.a.isAdmin).toBeUndefined()\n expect(({} as any).isAdmin).toBeUndefined()\n })\n})\n"],"names":["describe","expect","it","deepMergeSimple","result","a","b","toEqual","c","d","obj1","obj2","malicious","JSON","parse","isAdmin","toBeUndefined","base"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAE7C,SAASC,eAAe,QAAQ,uBAAsB;AAEtDH,SAAS,mBAAmB;IAC1BE,GAAG,iCAAiC;QAClC,MAAME,SAASD,gBAAgB;YAAEE,GAAG;QAAE,GAAG;YAAEC,GAAG;QAAE;QAChDL,OAAOG,QAAQG,OAAO,CAAC;YAAEF,GAAG;YAAGC,GAAG;QAAE;IACtC;IAEAJ,GAAG,sCAAsC;QACvC,MAAME,SAASD,gBAAgB;YAAEE,GAAG;QAAE,GAAG;YAAEA,GAAG;QAAE;QAChDJ,OAAOG,QAAQG,OAAO,CAAC;YAAEF,GAAG;QAAE;IAChC;IAEAH,GAAG,2CAA2C;QAC5C,MAAME,SAASD,gBAAgB;YAAEE,GAAG;gBAAEC,GAAG;gBAAGE,GAAG;YAAE;QAAE,GAAG;YAAEH,GAAG;gBAAEG,GAAG;gBAAGC,GAAG;YAAE;QAAE;QAC1ER,OAAOG,QAAQG,OAAO,CAAC;YAAEF,GAAG;gBAAEC,GAAG;gBAAGE,GAAG;gBAAGC,GAAG;YAAE;QAAE;IACnD;IAEAP,GAAG,uCAAuC;QACxC,MAAMQ,OAAO;YAAEL,GAAG;QAAE;QACpB,MAAMM,OAAO;YAAEL,GAAG;QAAE;QACpBH,gBAAgBO,MAAMC;QACtBV,OAAOS,MAAMH,OAAO,CAAC;YAAEF,GAAG;QAAE;QAC5BJ,OAAOU,MAAMJ,OAAO,CAAC;YAAED,GAAG;QAAE;IAC9B;IAEAJ,GAAG,4DAA4D;QAC7D,MAAMU,YAAYC,KAAKC,KAAK,CAAC;QAC7BX,gBAAgB,CAAC,GAAGS;QACpBX,OAAO,AAAC,CAAC,EAAUc,OAAO,EAAEC,aAAa;IAC3C;IAEAd,GAAG,iEAAiE;QAClE,MAAMU,YAAYC,KAAKC,KAAK,CAAC;QAC7B,MAAMV,SAASD,gBAAgB,CAAC,GAAGS;QACnCX,OAAOG,OAAOW,OAAO,EAAEC,aAAa;IACtC;IAEAd,GAAG,wDAAwD;QACzD,MAAMU,YAAYC,KAAKC,KAAK,CAAC;QAC7B,MAAMG,OAAO;YAAEZ,GAAG,CAAC;QAAE;QACrB,MAAMD,SAASD,gBAAgBc,MAAML;QACrCX,OAAOG,OAAOC,CAAC,CAACU,OAAO,EAAEC,aAAa;QACtCf,OAAO,AAAC,CAAC,EAAUc,OAAO,EAAEC,aAAa;IAC3C;AACF"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { extractHeaderLanguage } from './languages.js';
|
|
3
|
-
describe('extractHeaderLanguage', ()=>{
|
|
4
|
-
it('should return exact match when base language tag is supported', ()=>{
|
|
5
|
-
expect(extractHeaderLanguage('ja')).toBe('ja');
|
|
6
|
-
expect(extractHeaderLanguage('en')).toBe('en');
|
|
7
|
-
expect(extractHeaderLanguage('de')).toBe('de');
|
|
8
|
-
});
|
|
9
|
-
it('should fall back to base tag when regional tag has no exact match', ()=>{
|
|
10
|
-
expect(extractHeaderLanguage('ja-JP')).toBe('ja');
|
|
11
|
-
expect(extractHeaderLanguage('de-AT')).toBe('de');
|
|
12
|
-
expect(extractHeaderLanguage('fr-BE')).toBe('fr');
|
|
13
|
-
});
|
|
14
|
-
it('should match exact regional tag when it is supported', ()=>{
|
|
15
|
-
// zh-TW is in acceptedLanguages, so it should match directly
|
|
16
|
-
expect(extractHeaderLanguage('zh-TW')).toBe('zh-TW');
|
|
17
|
-
// bn-BD is in acceptedLanguages
|
|
18
|
-
expect(extractHeaderLanguage('bn-BD')).toBe('bn-BD');
|
|
19
|
-
});
|
|
20
|
-
it('should fall back to base tag for unsupported regional variant of a supported regional language', ()=>{
|
|
21
|
-
// zh-CN is not in acceptedLanguages, but zh is
|
|
22
|
-
expect(extractHeaderLanguage('zh-CN')).toBe('zh');
|
|
23
|
-
});
|
|
24
|
-
it('should return undefined for unsupported languages', ()=>{
|
|
25
|
-
expect(extractHeaderLanguage('xx')).toBeUndefined();
|
|
26
|
-
expect(extractHeaderLanguage('xx-XX')).toBeUndefined();
|
|
27
|
-
});
|
|
28
|
-
it('should respect quality ordering and return highest quality supported language', ()=>{
|
|
29
|
-
expect(extractHeaderLanguage('ja-JP;q=0.9, en;q=1.0')).toBe('en');
|
|
30
|
-
expect(extractHeaderLanguage('ja-JP, en;q=0.9')).toBe('ja');
|
|
31
|
-
});
|
|
32
|
-
it('should skip unsupported languages and find the next supported one', ()=>{
|
|
33
|
-
expect(extractHeaderLanguage('xx-XX, ja-JP')).toBe('ja');
|
|
34
|
-
expect(extractHeaderLanguage('xx, yy, de-DE')).toBe('de');
|
|
35
|
-
});
|
|
36
|
-
it('should handle empty string', ()=>{
|
|
37
|
-
// empty string produces one entry with empty language, which won't match
|
|
38
|
-
expect(extractHeaderLanguage('')).toBeUndefined();
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
//# sourceMappingURL=languages.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/languages.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { extractHeaderLanguage } from './languages.js'\n\ndescribe('extractHeaderLanguage', () => {\n it('should return exact match when base language tag is supported', () => {\n expect(extractHeaderLanguage('ja')).toBe('ja')\n expect(extractHeaderLanguage('en')).toBe('en')\n expect(extractHeaderLanguage('de')).toBe('de')\n })\n\n it('should fall back to base tag when regional tag has no exact match', () => {\n expect(extractHeaderLanguage('ja-JP')).toBe('ja')\n expect(extractHeaderLanguage('de-AT')).toBe('de')\n expect(extractHeaderLanguage('fr-BE')).toBe('fr')\n })\n\n it('should match exact regional tag when it is supported', () => {\n // zh-TW is in acceptedLanguages, so it should match directly\n expect(extractHeaderLanguage('zh-TW')).toBe('zh-TW')\n // bn-BD is in acceptedLanguages\n expect(extractHeaderLanguage('bn-BD')).toBe('bn-BD')\n })\n\n it('should fall back to base tag for unsupported regional variant of a supported regional language', () => {\n // zh-CN is not in acceptedLanguages, but zh is\n expect(extractHeaderLanguage('zh-CN')).toBe('zh')\n })\n\n it('should return undefined for unsupported languages', () => {\n expect(extractHeaderLanguage('xx')).toBeUndefined()\n expect(extractHeaderLanguage('xx-XX')).toBeUndefined()\n })\n\n it('should respect quality ordering and return highest quality supported language', () => {\n expect(extractHeaderLanguage('ja-JP;q=0.9, en;q=1.0')).toBe('en')\n expect(extractHeaderLanguage('ja-JP, en;q=0.9')).toBe('ja')\n })\n\n it('should skip unsupported languages and find the next supported one', () => {\n expect(extractHeaderLanguage('xx-XX, ja-JP')).toBe('ja')\n expect(extractHeaderLanguage('xx, yy, de-DE')).toBe('de')\n })\n\n it('should handle empty string', () => {\n // empty string produces one entry with empty language, which won't match\n expect(extractHeaderLanguage('')).toBeUndefined()\n })\n})\n"],"names":["describe","expect","it","extractHeaderLanguage","toBe","toBeUndefined"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAE7C,SAASC,qBAAqB,QAAQ,iBAAgB;AAEtDH,SAAS,yBAAyB;IAChCE,GAAG,iEAAiE;QAClED,OAAOE,sBAAsB,OAAOC,IAAI,CAAC;QACzCH,OAAOE,sBAAsB,OAAOC,IAAI,CAAC;QACzCH,OAAOE,sBAAsB,OAAOC,IAAI,CAAC;IAC3C;IAEAF,GAAG,qEAAqE;QACtED,OAAOE,sBAAsB,UAAUC,IAAI,CAAC;QAC5CH,OAAOE,sBAAsB,UAAUC,IAAI,CAAC;QAC5CH,OAAOE,sBAAsB,UAAUC,IAAI,CAAC;IAC9C;IAEAF,GAAG,wDAAwD;QACzD,6DAA6D;QAC7DD,OAAOE,sBAAsB,UAAUC,IAAI,CAAC;QAC5C,gCAAgC;QAChCH,OAAOE,sBAAsB,UAAUC,IAAI,CAAC;IAC9C;IAEAF,GAAG,kGAAkG;QACnG,+CAA+C;QAC/CD,OAAOE,sBAAsB,UAAUC,IAAI,CAAC;IAC9C;IAEAF,GAAG,qDAAqD;QACtDD,OAAOE,sBAAsB,OAAOE,aAAa;QACjDJ,OAAOE,sBAAsB,UAAUE,aAAa;IACtD;IAEAH,GAAG,iFAAiF;QAClFD,OAAOE,sBAAsB,0BAA0BC,IAAI,CAAC;QAC5DH,OAAOE,sBAAsB,oBAAoBC,IAAI,CAAC;IACxD;IAEAF,GAAG,qEAAqE;QACtED,OAAOE,sBAAsB,iBAAiBC,IAAI,CAAC;QACnDH,OAAOE,sBAAsB,kBAAkBC,IAAI,CAAC;IACtD;IAEAF,GAAG,8BAA8B;QAC/B,yEAAyE;QACzED,OAAOE,sBAAsB,KAAKE,aAAa;IACjD;AACF"}
|