payload-intl 1.1.2 → 1.2.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/README.md +62 -221
- package/dist/components/MessageController.d.ts +4 -6
- package/dist/components/MessageController.d.ts.map +1 -1
- package/dist/components/MessageController.js +25 -41
- package/dist/components/MessageController.js.map +1 -1
- package/dist/components/MessageFormContext.d.ts +29 -0
- package/dist/components/MessageFormContext.d.ts.map +1 -0
- package/dist/components/MessageFormContext.js +30 -0
- package/dist/components/MessageFormContext.js.map +1 -0
- package/dist/components/MessagesForm.d.ts +2 -2
- package/dist/components/MessagesForm.d.ts.map +1 -1
- package/dist/components/MessagesForm.js +126 -112
- package/dist/components/MessagesForm.js.map +1 -1
- package/dist/components/MessagesForm.module.css +41 -0
- package/dist/{exports/link.d.ts → components/MessagesLink.d.ts} +3 -3
- package/dist/components/MessagesLink.d.ts.map +1 -0
- package/dist/components/MessagesLink.js +19 -0
- package/dist/components/MessagesLink.js.map +1 -0
- package/dist/components/MessagesView.d.ts +10 -0
- package/dist/components/MessagesView.d.ts.map +1 -0
- package/dist/components/MessagesView.js +48 -0
- package/dist/components/MessagesView.js.map +1 -0
- package/dist/components/actions/JsonImport.d.ts.map +1 -1
- package/dist/components/actions/JsonImport.js +68 -61
- package/dist/components/actions/JsonImport.js.map +1 -1
- package/dist/components/actions/JsonImport.module.css +14 -0
- package/dist/components/actions/Move.d.ts.map +1 -1
- package/dist/components/actions/Move.js +41 -0
- package/dist/components/actions/Move.js.map +1 -0
- package/dist/components/actions/Move.module.css +8 -0
- package/dist/components/inputs/InputWrapper.d.ts +1 -1
- package/dist/components/inputs/InputWrapper.d.ts.map +1 -1
- package/dist/components/inputs/InputWrapper.js +31 -29
- package/dist/components/inputs/InputWrapper.js.map +1 -1
- package/dist/components/inputs/InputWrapper.module.css +34 -0
- package/dist/components/inputs/LexicalInput.d.ts +3 -3
- package/dist/components/inputs/LexicalInput.js +86 -0
- package/dist/components/inputs/LexicalInput.js.map +1 -0
- package/dist/components/inputs/MessageInput.d.ts +2 -2
- package/dist/components/inputs/MessageInput.d.ts.map +1 -1
- package/dist/components/inputs/MessageInput.js +110 -37
- package/dist/components/inputs/MessageInput.js.map +1 -1
- package/dist/components/inputs/MessageInput.module.css +25 -0
- package/dist/components/inputs/variables/VariableChip.d.ts +8 -2
- package/dist/components/inputs/variables/VariableChip.d.ts.map +1 -1
- package/dist/components/inputs/variables/VariableChip.js +86 -64
- package/dist/components/inputs/variables/VariableChip.js.map +1 -1
- package/dist/components/inputs/variables/VariableChip.module.css +66 -0
- package/dist/components/inputs/variables/VariableIcon.d.ts +1 -1
- package/dist/components/inputs/variables/VariableIcon.d.ts.map +1 -1
- package/dist/components/inputs/variables/VariableIcon.js +35 -0
- package/dist/components/inputs/variables/VariableIcon.js.map +1 -0
- package/dist/components/inputs/variables/VariableNode.d.ts +11 -0
- package/dist/components/inputs/variables/VariableNode.d.ts.map +1 -0
- package/dist/components/inputs/variables/VariableNode.js +36 -0
- package/dist/components/inputs/variables/VariableNode.js.map +1 -0
- package/dist/components/inputs/variables/VariableSuggestion.module.css +34 -0
- package/dist/components/inputs/variables/editors/DateVariableEditor.d.ts +2 -2
- package/dist/components/inputs/variables/editors/DateVariableEditor.d.ts.map +1 -1
- package/dist/components/inputs/variables/editors/DateVariableEditor.js +15 -0
- package/dist/components/inputs/variables/editors/DateVariableEditor.js.map +1 -0
- package/dist/components/inputs/variables/editors/PluralVariableEditor.d.ts +1 -1
- package/dist/components/inputs/variables/editors/PluralVariableEditor.d.ts.map +1 -1
- package/dist/components/inputs/variables/editors/PluralVariableEditor.js +191 -172
- package/dist/components/inputs/variables/editors/PluralVariableEditor.js.map +1 -1
- package/dist/components/inputs/variables/editors/PluralVariableEditor.module.css +149 -0
- package/dist/components/inputs/variables/editors/SelectVariableEditor.d.ts +1 -1
- package/dist/components/inputs/variables/editors/SelectVariableEditor.d.ts.map +1 -1
- package/dist/components/inputs/variables/editors/SelectVariableEditor.js +58 -52
- package/dist/components/inputs/variables/editors/SelectVariableEditor.js.map +1 -1
- package/dist/components/inputs/variables/editors/SelectVariableEditor.module.css +25 -0
- package/dist/components/inputs/variables/editors/TagVariableEditor.d.ts +1 -1
- package/dist/components/inputs/variables/editors/TagVariableEditor.d.ts.map +1 -1
- package/dist/components/inputs/variables/editors/TagVariableEditor.js +36 -32
- package/dist/components/inputs/variables/editors/TagVariableEditor.js.map +1 -1
- package/dist/components/inputs/variables/editors/TagVariableEditor.module.css +7 -0
- package/dist/components/inputs/variables/editors/TimeVariableEditor.d.ts +2 -2
- package/dist/components/inputs/variables/editors/TimeVariableEditor.d.ts.map +1 -1
- package/dist/components/inputs/variables/editors/TimeVariableEditor.js +15 -0
- package/dist/components/inputs/variables/editors/TimeVariableEditor.js.map +1 -0
- package/dist/components/inputs/variables/pickers/NumericVariablePicker.d.ts +1 -1
- package/dist/components/inputs/variables/pickers/NumericVariablePicker.d.ts.map +1 -1
- package/dist/components/inputs/variables/pickers/NumericVariablePicker.js +48 -51
- package/dist/components/inputs/variables/pickers/NumericVariablePicker.js.map +1 -1
- package/dist/components/inputs/variables/pickers/NumericVariablePicker.module.css +27 -0
- package/dist/components/inputs/variables/pickers/TemporalElementEditor.d.ts +1 -1
- package/dist/components/inputs/variables/pickers/TemporalElementEditor.d.ts.map +1 -1
- package/dist/components/inputs/variables/pickers/TemporalElementEditor.js +58 -0
- package/dist/components/inputs/variables/pickers/TemporalElementEditor.js.map +1 -0
- package/dist/components/inputs/variables/pickers/TemporalElementEditor.module.css +27 -0
- package/dist/components/layout/MessageField.d.ts +3 -3
- package/dist/components/layout/MessageField.d.ts.map +1 -1
- package/dist/components/layout/MessageField.js +56 -56
- package/dist/components/layout/MessageField.js.map +1 -1
- package/dist/components/layout/MessageField.module.css +19 -0
- package/dist/components/layout/MessagesTabs.d.ts +1 -1
- package/dist/components/layout/MessagesTabs.d.ts.map +1 -1
- package/dist/components/layout/MessagesTabs.js +40 -43
- package/dist/components/layout/MessagesTabs.js.map +1 -1
- package/dist/components/layout/MessagesTabs.module.css +21 -0
- package/dist/components/layout/MessagesTree.d.ts +3 -2
- package/dist/components/layout/MessagesTree.d.ts.map +1 -1
- package/dist/components/layout/MessagesTree.js +65 -67
- package/dist/components/layout/MessagesTree.js.map +1 -1
- package/dist/components/layout/MessagesTree.module.css +36 -0
- package/dist/const.d.ts +8 -9
- package/dist/const.d.ts.map +1 -1
- package/dist/const.js +16 -13
- package/dist/const.js.map +1 -1
- package/dist/endpoints/get-messages.d.ts +1 -1
- package/dist/endpoints/get-messages.d.ts.map +1 -1
- package/dist/endpoints/get-messages.js +7 -13
- package/dist/endpoints/get-messages.js.map +1 -1
- package/dist/endpoints/set-messages.d.ts +1 -1
- package/dist/endpoints/set-messages.d.ts.map +1 -1
- package/dist/endpoints/set-messages.js +61 -45
- package/dist/endpoints/set-messages.js.map +1 -1
- package/dist/entities.d.ts +5 -0
- package/dist/entities.d.ts.map +1 -0
- package/dist/entities.js +38 -0
- package/dist/entities.js.map +1 -0
- package/dist/exports/client.d.ts +2 -0
- package/dist/exports/client.d.ts.map +1 -0
- package/dist/exports/client.js +3 -0
- package/dist/exports/client.js.map +1 -0
- package/dist/exports/rsc.d.ts +2 -2
- package/dist/exports/rsc.d.ts.map +1 -1
- package/dist/exports/rsc.js +4 -7
- package/dist/exports/rsc.js.map +1 -1
- package/dist/hooks.d.ts +4 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +24 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +20 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +64 -80
- package/dist/index.js.map +1 -1
- package/dist/payload-types.d.ts +258 -0
- package/dist/payload-types.d.ts.map +1 -0
- package/dist/payload-types.js +15 -0
- package/dist/payload-types.js.map +1 -0
- package/dist/requests/fetchMessageFromAPI.d.ts +10 -0
- package/dist/requests/fetchMessageFromAPI.d.ts.map +1 -0
- package/dist/requests/fetchMessageFromAPI.js +15 -0
- package/dist/requests/fetchMessageFromAPI.js.map +1 -0
- package/dist/requests/fetchMessageFromPayload.d.ts +3 -0
- package/dist/requests/fetchMessageFromPayload.d.ts.map +1 -0
- package/dist/requests/fetchMessageFromPayload.js +29 -0
- package/dist/requests/fetchMessageFromPayload.js.map +1 -0
- package/dist/requests/fetchMessages.d.ts +3 -11
- package/dist/requests/fetchMessages.d.ts.map +1 -1
- package/dist/requests/fetchMessages.js +10 -40
- package/dist/requests/fetchMessages.js.map +1 -1
- package/dist/types.d.ts +7 -23
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/config.d.ts +3 -3
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +27 -17
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/error-handling.js +14 -12
- package/dist/utils/error-handling.js.map +1 -1
- package/dist/utils/format.d.ts +1 -1
- package/dist/utils/format.js +21 -13
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/guards.d.ts +2 -1
- package/dist/utils/guards.js +8 -18
- package/dist/utils/guards.js.map +1 -1
- package/dist/utils/icu-tranform.d.ts +13 -18
- package/dist/utils/icu-tranform.d.ts.map +1 -1
- package/dist/utils/icu-tranform.js +140 -108
- package/dist/utils/icu-tranform.js.map +1 -1
- package/dist/utils/sanitize.d.ts +1 -1
- package/dist/utils/sanitize.js +36 -17
- package/dist/utils/sanitize.js.map +1 -1
- package/dist/utils/schema.d.ts +1 -3
- package/dist/utils/schema.d.ts.map +1 -1
- package/dist/utils/schema.js +42 -34
- package/dist/utils/schema.js.map +1 -1
- package/dist/utils/validate.d.ts +2 -2
- package/dist/utils/validate.js +52 -53
- package/dist/utils/validate.js.map +1 -1
- package/package.json +35 -52
- package/dist/components/inputs/variables/VariableSuggestion.d.ts +0 -9
- package/dist/components/inputs/variables/VariableSuggestion.d.ts.map +0 -1
- package/dist/components/inputs/variables/VariableSuggestion.js +0 -41
- package/dist/components/inputs/variables/VariableSuggestion.js.map +0 -1
- package/dist/components/inputs/variables/extension.d.ts +0 -4
- package/dist/components/inputs/variables/extension.d.ts.map +0 -1
- package/dist/components/inputs/variables/extension.js +0 -93
- package/dist/components/inputs/variables/extension.js.map +0 -1
- package/dist/context/messages-form.d.ts +0 -29
- package/dist/context/messages-form.d.ts.map +0 -1
- package/dist/context/messages-form.js +0 -26
- package/dist/context/messages-form.js.map +0 -1
- package/dist/exports/link.d.ts.map +0 -1
- package/dist/exports/link.js +0 -21
- package/dist/exports/link.js.map +0 -1
- package/dist/exports/view.d.ts +0 -10
- package/dist/exports/view.d.ts.map +0 -1
- package/dist/exports/view.js +0 -53
- package/dist/exports/view.js.map +0 -1
- package/dist/styles.css +0 -1
- package/dist/utils/cn.d.ts +0 -3
- package/dist/utils/cn.d.ts.map +0 -1
- package/dist/utils/cn.js +0 -9
- package/dist/utils/cn.js.map +0 -1
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import { z
|
|
2
|
-
async function
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { z } from 'zod/v4-mini';
|
|
2
|
+
export async function getErrorMessage(response) {
|
|
3
|
+
try {
|
|
4
|
+
const json = await response.json();
|
|
5
|
+
const schema = z.object({
|
|
6
|
+
message: z.string()
|
|
7
|
+
});
|
|
8
|
+
const result = schema.safeParse(json);
|
|
9
|
+
return result.success ? result.data.message : `${response.status} Error`;
|
|
10
|
+
} catch {
|
|
11
|
+
return 'Unknown error';
|
|
12
|
+
}
|
|
9
13
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
};
|
|
13
|
-
//# sourceMappingURL=error-handling.js.map
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=error-handling.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/utils/error-handling.ts"],"sourcesContent":["import { z } from 'zod/v4-mini';\n\nexport async function getErrorMessage(response: Response) {\n try {\n const json = await response.json();\n const schema = z.object({ message: z.string() });\n const result = schema.safeParse(json);\n\n return result.success ? result.data.message : `${response.status} Error`;\n } catch {\n return 'Unknown error';\n }\n}\n"],"names":["z","getErrorMessage","response","json","schema","object","message","string","result","safeParse","success","data","status"],"mappings":"AAAA,SAASA,CAAC,QAAQ,cAAc;AAEhC,OAAO,eAAeC,gBAAgBC,QAAkB;IACtD,IAAI;QACF,MAAMC,OAAO,MAAMD,SAASC,IAAI;QAChC,MAAMC,SAASJ,EAAEK,MAAM,CAAC;YAAEC,SAASN,EAAEO,MAAM;QAAG;QAC9C,MAAMC,SAASJ,OAAOK,SAAS,CAACN;QAEhC,OAAOK,OAAOE,OAAO,GAAGF,OAAOG,IAAI,CAACL,OAAO,GAAG,GAAGJ,SAASU,MAAM,CAAC,MAAM,CAAC;IAC1E,EAAE,OAAM;QACN,OAAO;IACT;AACF"}
|
package/dist/utils/format.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TemplateVariable } from '../types';
|
|
1
|
+
import type { TemplateVariable } from '../types';
|
|
2
2
|
export declare const toWords: (inputString: string, joinWords?: boolean) => string;
|
|
3
3
|
export declare const formatVariableLabel: (variable: TemplateVariable) => string;
|
|
4
4
|
//# sourceMappingURL=format.d.ts.map
|
package/dist/utils/format.js
CHANGED
|
@@ -1,15 +1,23 @@
|
|
|
1
|
-
import { isTagElement
|
|
2
|
-
const
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { isTagElement } from './guards';
|
|
2
|
+
export const toWords = (inputString, joinWords = false)=>{
|
|
3
|
+
const capitalizeFirstLetter = (string)=>string.charAt(0).toUpperCase() + string.slice(1);
|
|
4
|
+
const notNullString = inputString || '';
|
|
5
|
+
const trimmedString = notNullString.trim();
|
|
6
|
+
const arrayOfStrings = trimmedString.split(/[\s-]/);
|
|
7
|
+
const splitStringsArray = [];
|
|
8
|
+
arrayOfStrings.forEach((tempString)=>{
|
|
9
|
+
if (tempString !== '') {
|
|
10
|
+
const splitWords = tempString.split(/(?=[A-Z])/).join(' ');
|
|
11
|
+
splitStringsArray.push(capitalizeFirstLetter(splitWords));
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
return joinWords ? splitStringsArray.join('').replace(/\s/g, '') : splitStringsArray.join(' ');
|
|
15
|
+
};
|
|
16
|
+
export const formatVariableLabel = (variable)=>{
|
|
17
|
+
if (isTagElement(variable)) {
|
|
18
|
+
return `<${variable.value}/>`;
|
|
8
19
|
}
|
|
9
|
-
|
|
10
|
-
}, u = (t) => l(t) ? `<${t.value}/>` : t.value;
|
|
11
|
-
export {
|
|
12
|
-
u as formatVariableLabel,
|
|
13
|
-
m as toWords
|
|
20
|
+
return variable.value;
|
|
14
21
|
};
|
|
15
|
-
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=format.js.map
|
package/dist/utils/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/utils/format.ts"],"sourcesContent":["import type { TemplateVariable } from '@/types';\n\nimport { isTagElement } from './guards';\n\nexport const toWords = (inputString: string, joinWords = false): string => {\n const capitalizeFirstLetter = (string: string): string =>\n string.charAt(0).toUpperCase() + string.slice(1);\n const notNullString = inputString || '';\n const trimmedString = notNullString.trim();\n const arrayOfStrings = trimmedString.split(/[\\s-]/);\n\n const splitStringsArray: string[] = [];\n arrayOfStrings.forEach((tempString) => {\n if (tempString !== '') {\n const splitWords = tempString.split(/(?=[A-Z])/).join(' ');\n splitStringsArray.push(capitalizeFirstLetter(splitWords));\n }\n });\n\n return joinWords\n ? splitStringsArray.join('').replace(/\\s/g, '')\n : splitStringsArray.join(' ');\n};\n\nexport const formatVariableLabel = (variable: TemplateVariable) => {\n if (isTagElement(variable)) {\n return `<${variable.value}/>`;\n }\n return variable.value;\n};\n"],"names":["isTagElement","toWords","inputString","joinWords","capitalizeFirstLetter","string","charAt","toUpperCase","slice","notNullString","trimmedString","trim","arrayOfStrings","split","splitStringsArray","forEach","tempString","splitWords","join","push","replace","formatVariableLabel","variable","value"],"mappings":"AAEA,SAASA,YAAY,QAAQ,WAAW;AAExC,OAAO,MAAMC,UAAU,CAACC,aAAqBC,YAAY,KAAK;IAC5D,MAAMC,wBAAwB,CAACC,SAC7BA,OAAOC,MAAM,CAAC,GAAGC,WAAW,KAAKF,OAAOG,KAAK,CAAC;IAChD,MAAMC,gBAAgBP,eAAe;IACrC,MAAMQ,gBAAgBD,cAAcE,IAAI;IACxC,MAAMC,iBAAiBF,cAAcG,KAAK,CAAC;IAE3C,MAAMC,oBAA8B,EAAE;IACtCF,eAAeG,OAAO,CAAC,CAACC;QACtB,IAAIA,eAAe,IAAI;YACrB,MAAMC,aAAaD,WAAWH,KAAK,CAAC,aAAaK,IAAI,CAAC;YACtDJ,kBAAkBK,IAAI,CAACf,sBAAsBa;QAC/C;IACF;IAEA,OAAOd,YACHW,kBAAkBI,IAAI,CAAC,IAAIE,OAAO,CAAC,OAAO,MAC1CN,kBAAkBI,IAAI,CAAC;AAC7B,EAAE;AAEF,OAAO,MAAMG,sBAAsB,CAACC;IAClC,IAAItB,aAAasB,WAAW;QAC1B,OAAO,CAAC,CAAC,EAAEA,SAASC,KAAK,CAAC,EAAE,CAAC;IAC/B;IACA,OAAOD,SAASC,KAAK;AACvB,EAAE"}
|
package/dist/utils/guards.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { DateElement, MessageFormatElement, NumberElement, PluralElement, TimeElement
|
|
1
|
+
import type { DateElement, MessageFormatElement, NumberElement, PluralElement, TimeElement } from '@formatjs/icu-messageformat-parser';
|
|
2
|
+
import { isArgumentElement, isDateElement, isLiteralElement, isNumberElement, isPluralElement, isSelectElement, isTagElement, isTimeElement } from '@formatjs/icu-messageformat-parser';
|
|
2
3
|
export declare const isNumericElement: (element: MessageFormatElement) => element is NumberElement | PluralElement;
|
|
3
4
|
export declare const isTemporalElement: (element: MessageFormatElement) => element is DateElement | TimeElement;
|
|
4
5
|
export { isLiteralElement, isArgumentElement, isNumberElement, isSelectElement, isPluralElement, isDateElement, isTimeElement, isTagElement, };
|
package/dist/utils/guards.js
CHANGED
|
@@ -1,19 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
|
|
1
|
+
import { isArgumentElement, isDateElement, isLiteralElement, isNumberElement, isPluralElement, isSelectElement, isTagElement, isTimeElement } from '@formatjs/icu-messageformat-parser';
|
|
2
|
+
export const isNumericElement = (element)=>isNumberElement(element) || isPluralElement(element);
|
|
3
|
+
export const isTemporalElement = (element)=>isDateElement(element) || isTimeElement(element);
|
|
4
|
+
export { isLiteralElement, isArgumentElement, isNumberElement, isSelectElement, isPluralElement, isDateElement, isTimeElement, isTagElement };
|
|
5
|
+
export const uncaughtSwitchCase = (value)=>{
|
|
6
|
+
throw new Error(`Unhandled switch case: ${value}`);
|
|
5
7
|
};
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
u as isDateElement,
|
|
9
|
-
h as isLiteralElement,
|
|
10
|
-
p as isNumberElement,
|
|
11
|
-
s as isNumericElement,
|
|
12
|
-
w as isPluralElement,
|
|
13
|
-
T as isSelectElement,
|
|
14
|
-
g as isTagElement,
|
|
15
|
-
r as isTemporalElement,
|
|
16
|
-
N as isTimeElement,
|
|
17
|
-
E as uncaughtSwitchCase
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=guards.js.map
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=guards.js.map
|
package/dist/utils/guards.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/utils/guards.ts"],"sourcesContent":["import type {\n DateElement,\n MessageFormatElement,\n NumberElement,\n PluralElement,\n TimeElement,\n} from '@formatjs/icu-messageformat-parser';\nimport {\n isArgumentElement,\n isDateElement,\n isLiteralElement,\n isNumberElement,\n isPluralElement,\n isSelectElement,\n isTagElement,\n isTimeElement,\n} from '@formatjs/icu-messageformat-parser';\n\nexport const isNumericElement = (\n element: MessageFormatElement,\n): element is NumberElement | PluralElement =>\n isNumberElement(element) || isPluralElement(element);\n\nexport const isTemporalElement = (\n element: MessageFormatElement,\n): element is DateElement | TimeElement =>\n isDateElement(element) || isTimeElement(element);\n\nexport {\n isLiteralElement,\n isArgumentElement,\n isNumberElement,\n isSelectElement,\n isPluralElement,\n isDateElement,\n isTimeElement,\n isTagElement,\n};\n\nexport const uncaughtSwitchCase = (value: never) => {\n throw new Error(`Unhandled switch case: ${value}`);\n};\n"],"names":["isArgumentElement","isDateElement","isLiteralElement","isNumberElement","isPluralElement","isSelectElement","isTagElement","isTimeElement","isNumericElement","element","isTemporalElement","uncaughtSwitchCase","value","Error"],"mappings":"AAOA,SACEA,iBAAiB,EACjBC,aAAa,EACbC,gBAAgB,EAChBC,eAAe,EACfC,eAAe,EACfC,eAAe,EACfC,YAAY,EACZC,aAAa,QACR,qCAAqC;AAE5C,OAAO,MAAMC,mBAAmB,CAC9BC,UAEAN,gBAAgBM,YAAYL,gBAAgBK,SAAS;AAEvD,OAAO,MAAMC,oBAAoB,CAC/BD,UAEAR,cAAcQ,YAAYF,cAAcE,SAAS;AAEnD,SACEP,gBAAgB,EAChBF,iBAAiB,EACjBG,eAAe,EACfE,eAAe,EACfD,eAAe,EACfH,aAAa,EACbM,aAAa,EACbD,YAAY,GACZ;AAEF,OAAO,MAAMK,qBAAqB,CAACC;IACjC,MAAM,IAAIC,MAAM,CAAC,uBAAuB,EAAED,OAAO;AACnD,EAAE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { MessageFormatElement } from '@formatjs/icu-messageformat-parser';
|
|
2
|
-
import {
|
|
1
|
+
import type { MessageFormatElement } from '@formatjs/icu-messageformat-parser';
|
|
2
|
+
import type { SerializedParagraphNode } from '@payloadcms/richtext-lexical/lexical';
|
|
3
3
|
/**
|
|
4
4
|
* Parse an ICU message string into a AST array
|
|
5
5
|
*/
|
|
@@ -8,24 +8,19 @@ export declare const parseICUMessage: (message: string) => MessageFormatElement[
|
|
|
8
8
|
* Serialize an ICU message AST array into a ICU message string
|
|
9
9
|
*/
|
|
10
10
|
export declare const serializeICUMessage: (elements: MessageFormatElement[]) => string;
|
|
11
|
-
type
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
type: 'doc';
|
|
21
|
-
content: {
|
|
22
|
-
type: 'paragraph';
|
|
23
|
-
content: (TextContent | VariableContent)[];
|
|
24
|
-
}[];
|
|
11
|
+
type SerializedICUEditorState = {
|
|
12
|
+
root: {
|
|
13
|
+
type: 'root';
|
|
14
|
+
version: 1;
|
|
15
|
+
direction: null;
|
|
16
|
+
format: '';
|
|
17
|
+
indent: 0;
|
|
18
|
+
children: [SerializedParagraphNode];
|
|
19
|
+
};
|
|
25
20
|
};
|
|
26
21
|
/**
|
|
27
|
-
* Parse an ICU message string into a
|
|
22
|
+
* Parse an ICU message string into a Lexical serialized editor state
|
|
28
23
|
*/
|
|
29
|
-
export declare const
|
|
24
|
+
export declare const parseIcuToLexicalState: (icuMessage: string) => SerializedICUEditorState;
|
|
30
25
|
export {};
|
|
31
26
|
//# sourceMappingURL=icu-tranform.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icu-tranform.d.ts","sourceRoot":"","sources":["../../src/utils/icu-tranform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"icu-tranform.d.ts","sourceRoot":"","sources":["../../src/utils/icu-tranform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,OAAO,KAAK,EAEV,uBAAuB,EAExB,MAAM,sCAAsC,CAAC;AAK9C;;GAEG;AACH,eAAO,MAAM,eAAe,YAAa,MAAM,KAAG,oBAAoB,EACtD,CAAC;AAEjB;;GAEG;AACH,eAAO,MAAM,mBAAmB,aAAc,oBAAoB,EAAE,KAAG,MA8C1D,CAAC;AA4Cd,KAAK,wBAAwB,GAAG;IAC9B,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,CAAC,CAAC;QACX,SAAS,EAAE,IAAI,CAAC;QAChB,MAAM,EAAE,EAAE,CAAC;QACX,MAAM,EAAE,CAAC,CAAC;QACV,QAAQ,EAAE,CAAC,uBAAuB,CAAC,CAAC;KACrC,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,eACrB,MAAM,KACjB,wBAwEF,CAAC"}
|
|
@@ -1,115 +1,147 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { formatVariableLabel
|
|
3
|
-
import { uncaughtSwitchCase
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}).join(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
1
|
+
import { parse, TYPE } from '@formatjs/icu-messageformat-parser';
|
|
2
|
+
import { formatVariableLabel } from './format';
|
|
3
|
+
import { uncaughtSwitchCase } from './guards';
|
|
4
|
+
/**
|
|
5
|
+
* Parse an ICU message string into a AST array
|
|
6
|
+
*/ export const parseICUMessage = (message)=>parse(message);
|
|
7
|
+
/**
|
|
8
|
+
* Serialize an ICU message AST array into a ICU message string
|
|
9
|
+
*/ export const serializeICUMessage = (elements)=>elements.map((element)=>{
|
|
10
|
+
switch(element.type){
|
|
11
|
+
case TYPE.literal:
|
|
12
|
+
return element.value;
|
|
13
|
+
case TYPE.argument:
|
|
14
|
+
return stringifyElement(element.value);
|
|
15
|
+
case TYPE.number:
|
|
16
|
+
// TODO serialize element.style
|
|
17
|
+
return stringifyElement(element.value, 'number');
|
|
18
|
+
case TYPE.select:
|
|
19
|
+
return stringifyElement(element.value, 'select', Object.entries(element.options).map(([key, option])=>`${key} {${option.value.length > 0 ? serializeICUMessage(option.value) : key}}`));
|
|
20
|
+
case TYPE.plural:
|
|
21
|
+
return stringifyElement(element.value, 'plural', [
|
|
22
|
+
element.offset < 0 && `offset:${element.offset}`,
|
|
23
|
+
...Object.entries(element.options).map(([key, option])=>`${key} {${option.value.length > 0 ? serializeICUMessage(option.value) : key}}`)
|
|
24
|
+
]);
|
|
25
|
+
case TYPE.tag:
|
|
26
|
+
return `<${element.value}>${serializeICUMessage(element.children)}</${element.value}>`;
|
|
27
|
+
case TYPE.date:
|
|
28
|
+
// TODO serialize element.style
|
|
29
|
+
return stringifyElement(element.value, 'date');
|
|
30
|
+
case TYPE.time:
|
|
31
|
+
// TODO serialize element.style
|
|
32
|
+
return stringifyElement(element.value, 'time');
|
|
33
|
+
case TYPE.pound:
|
|
34
|
+
return '#';
|
|
35
|
+
default:
|
|
36
|
+
return uncaughtSwitchCase(element);
|
|
37
|
+
}
|
|
38
|
+
}).join('');
|
|
39
|
+
const stringifyElement = (name, type, options = [])=>{
|
|
40
|
+
if (type === undefined) return `{${name}}`;
|
|
41
|
+
const filteredOptions = options.filter((option)=>typeof option === 'string' && option.length > 0);
|
|
42
|
+
if (filteredOptions.length === 0) return `{${name}, ${type}}`;
|
|
43
|
+
return `{${name}, ${type}, ${filteredOptions.join(' ')}}`;
|
|
44
|
+
};
|
|
45
|
+
function serializeTextNode(text) {
|
|
46
46
|
return {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
47
|
+
type: 'text',
|
|
48
|
+
version: 1,
|
|
49
|
+
text,
|
|
50
|
+
detail: 0,
|
|
51
|
+
format: 0,
|
|
52
|
+
mode: 'normal',
|
|
53
|
+
style: ''
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function serializeMentionNode(name, label, icu) {
|
|
57
|
+
return {
|
|
58
|
+
type: 'variableMention',
|
|
59
|
+
version: 1,
|
|
60
|
+
trigger: '@',
|
|
61
|
+
value: name,
|
|
62
|
+
data: {
|
|
63
|
+
label,
|
|
64
|
+
icu
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Parse an ICU message string into a Lexical serialized editor state
|
|
70
|
+
*/ export const parseIcuToLexicalState = (icuMessage)=>{
|
|
71
|
+
try {
|
|
72
|
+
const elements = parseICUMessage(icuMessage);
|
|
73
|
+
const children = elements.flatMap((element)=>{
|
|
74
|
+
switch(element.type){
|
|
75
|
+
case TYPE.literal:
|
|
76
|
+
return [
|
|
77
|
+
serializeTextNode(element.value)
|
|
78
|
+
];
|
|
79
|
+
case TYPE.pound:
|
|
80
|
+
return [
|
|
81
|
+
serializeTextNode('#')
|
|
82
|
+
];
|
|
83
|
+
case TYPE.argument:
|
|
84
|
+
case TYPE.number:
|
|
85
|
+
case TYPE.date:
|
|
86
|
+
case TYPE.time:
|
|
87
|
+
case TYPE.select:
|
|
88
|
+
case TYPE.plural:
|
|
89
|
+
case TYPE.tag:
|
|
90
|
+
return [
|
|
91
|
+
serializeMentionNode(element.value, formatVariableLabel(element), serializeICUMessage([
|
|
92
|
+
element
|
|
93
|
+
]))
|
|
94
|
+
];
|
|
95
|
+
default:
|
|
96
|
+
return uncaughtSwitchCase(element);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
return {
|
|
100
|
+
root: {
|
|
101
|
+
type: 'root',
|
|
102
|
+
version: 1,
|
|
103
|
+
direction: null,
|
|
104
|
+
format: '',
|
|
105
|
+
indent: 0,
|
|
106
|
+
children: [
|
|
63
107
|
{
|
|
64
|
-
|
|
65
|
-
|
|
108
|
+
type: 'paragraph',
|
|
109
|
+
version: 1,
|
|
110
|
+
direction: null,
|
|
111
|
+
format: '',
|
|
112
|
+
indent: 0,
|
|
113
|
+
textFormat: 0,
|
|
114
|
+
textStyle: '',
|
|
115
|
+
children
|
|
66
116
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
} catch {
|
|
121
|
+
return {
|
|
122
|
+
root: {
|
|
123
|
+
type: 'root',
|
|
124
|
+
version: 1,
|
|
125
|
+
direction: null,
|
|
126
|
+
format: '',
|
|
127
|
+
indent: 0,
|
|
128
|
+
children: [
|
|
76
129
|
{
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
130
|
+
type: 'paragraph',
|
|
131
|
+
version: 1,
|
|
132
|
+
direction: null,
|
|
133
|
+
format: '',
|
|
134
|
+
indent: 0,
|
|
135
|
+
textFormat: 0,
|
|
136
|
+
textStyle: '',
|
|
137
|
+
children: [
|
|
138
|
+
serializeTextNode(icuMessage)
|
|
139
|
+
]
|
|
83
140
|
}
|
|
84
|
-
|
|
85
|
-
default:
|
|
86
|
-
return o(a);
|
|
87
|
-
}
|
|
141
|
+
]
|
|
88
142
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
]
|
|
92
|
-
};
|
|
93
|
-
} catch {
|
|
94
|
-
return {
|
|
95
|
-
type: "doc",
|
|
96
|
-
content: [
|
|
97
|
-
{
|
|
98
|
-
type: "paragraph",
|
|
99
|
-
content: [
|
|
100
|
-
{
|
|
101
|
-
type: "text",
|
|
102
|
-
text: e
|
|
103
|
-
}
|
|
104
|
-
]
|
|
105
|
-
}
|
|
106
|
-
]
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
export {
|
|
111
|
-
l as parseICUMessage,
|
|
112
|
-
$ as parseIcuToProseMirrorJSON,
|
|
113
|
-
c as serializeICUMessage
|
|
143
|
+
};
|
|
144
|
+
}
|
|
114
145
|
};
|
|
115
|
-
|
|
146
|
+
|
|
147
|
+
//# sourceMappingURL=icu-tranform.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/utils/icu-tranform.ts"],"sourcesContent":["import type { MessageFormatElement } from '@formatjs/icu-messageformat-parser';\nimport { parse, TYPE } from '@formatjs/icu-messageformat-parser';\nimport type {\n SerializedLexicalNode,\n SerializedParagraphNode,\n SerializedTextNode,\n} from '@payloadcms/richtext-lexical/lexical';\nimport type { SerializedBeautifulMentionNode } from 'lexical-beautiful-mentions';\nimport { formatVariableLabel } from './format';\nimport { uncaughtSwitchCase } from './guards';\n\n/**\n * Parse an ICU message string into a AST array\n */\nexport const parseICUMessage = (message: string): MessageFormatElement[] =>\n parse(message);\n\n/**\n * Serialize an ICU message AST array into a ICU message string\n */\nexport const serializeICUMessage = (elements: MessageFormatElement[]): string =>\n elements\n .map((element) => {\n switch (element.type) {\n case TYPE.literal:\n return element.value;\n case TYPE.argument:\n return stringifyElement(element.value);\n case TYPE.number:\n // TODO serialize element.style\n return stringifyElement(element.value, 'number');\n case TYPE.select:\n return stringifyElement(\n element.value,\n 'select',\n Object.entries(element.options).map(\n ([key, option]) =>\n `${key} {${option.value.length > 0 ? serializeICUMessage(option.value) : key}}`,\n ),\n );\n case TYPE.plural:\n return stringifyElement(element.value, 'plural', [\n element.offset < 0 && `offset:${element.offset}`,\n ...Object.entries(element.options).map(\n ([key, option]) =>\n `${key} {${\n option.value.length > 0\n ? serializeICUMessage(option.value)\n : key\n }}`,\n ),\n ]);\n case TYPE.tag:\n return `<${element.value}>${serializeICUMessage(element.children)}</${element.value}>`;\n case TYPE.date:\n // TODO serialize element.style\n return stringifyElement(element.value, 'date');\n case TYPE.time:\n // TODO serialize element.style\n return stringifyElement(element.value, 'time');\n case TYPE.pound:\n return '#';\n default:\n return uncaughtSwitchCase(element);\n }\n })\n .join('');\n\nconst stringifyElement = (\n name: string,\n type?: string,\n options: (string | boolean)[] = [],\n) => {\n if (type === undefined) return `{${name}}`;\n\n const filteredOptions = options.filter(\n (option): option is string =>\n typeof option === 'string' && option.length > 0,\n );\n if (filteredOptions.length === 0) return `{${name}, ${type}}`;\n\n return `{${name}, ${type}, ${filteredOptions.join(' ')}}`;\n};\n\nfunction serializeTextNode(text: string): SerializedTextNode {\n return {\n type: 'text',\n version: 1,\n text,\n detail: 0,\n format: 0,\n mode: 'normal',\n style: '',\n };\n}\n\nfunction serializeMentionNode(\n name: string,\n label: string,\n icu: string,\n): SerializedBeautifulMentionNode {\n return {\n type: 'variableMention',\n version: 1,\n trigger: '@',\n value: name,\n data: { label, icu },\n };\n}\n\ntype SerializedICUEditorState = {\n root: {\n type: 'root';\n version: 1;\n direction: null;\n format: '';\n indent: 0;\n children: [SerializedParagraphNode];\n };\n};\n\n/**\n * Parse an ICU message string into a Lexical serialized editor state\n */\nexport const parseIcuToLexicalState = (\n icuMessage: string,\n): SerializedICUEditorState => {\n try {\n const elements = parseICUMessage(icuMessage);\n const children = elements.flatMap<SerializedLexicalNode>((element) => {\n switch (element.type) {\n case TYPE.literal:\n return [serializeTextNode(element.value)];\n case TYPE.pound:\n return [serializeTextNode('#')];\n case TYPE.argument:\n case TYPE.number:\n case TYPE.date:\n case TYPE.time:\n case TYPE.select:\n case TYPE.plural:\n case TYPE.tag:\n return [\n serializeMentionNode(\n element.value,\n formatVariableLabel(element),\n serializeICUMessage([element]),\n ),\n ];\n default:\n return uncaughtSwitchCase(element);\n }\n });\n\n return {\n root: {\n type: 'root',\n version: 1,\n direction: null,\n format: '',\n indent: 0,\n children: [\n {\n type: 'paragraph',\n version: 1,\n direction: null,\n format: '',\n indent: 0,\n textFormat: 0,\n textStyle: '',\n children,\n },\n ],\n },\n };\n } catch {\n return {\n root: {\n type: 'root',\n version: 1,\n direction: null,\n format: '',\n indent: 0,\n children: [\n {\n type: 'paragraph',\n version: 1,\n direction: null,\n format: '',\n indent: 0,\n textFormat: 0,\n textStyle: '',\n children: [serializeTextNode(icuMessage)],\n },\n ],\n },\n };\n }\n};\n"],"names":["parse","TYPE","formatVariableLabel","uncaughtSwitchCase","parseICUMessage","message","serializeICUMessage","elements","map","element","type","literal","value","argument","stringifyElement","number","select","Object","entries","options","key","option","length","plural","offset","tag","children","date","time","pound","join","name","undefined","filteredOptions","filter","serializeTextNode","text","version","detail","format","mode","style","serializeMentionNode","label","icu","trigger","data","parseIcuToLexicalState","icuMessage","flatMap","root","direction","indent","textFormat","textStyle"],"mappings":"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"}
|
package/dist/utils/sanitize.d.ts
CHANGED
package/dist/utils/sanitize.js
CHANGED
|
@@ -1,19 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Sanitize messages data to match the schema.
|
|
3
|
+
* Stored messages might contain keys that are not in the config.
|
|
4
|
+
* This happens when messages in the config were (re)moved.
|
|
5
|
+
*
|
|
6
|
+
* Keep exactly the keys from `shape`, fill values from `source` when present.
|
|
7
|
+
* - Leaf present as string -> included
|
|
8
|
+
* - Leaf missing/non-string -> omitted
|
|
9
|
+
* - Empty nested groups -> omitted
|
|
10
|
+
*/ /**
|
|
11
|
+
|
|
12
|
+
*/ export function sanitizeMessages(config, data) {
|
|
13
|
+
const out = {};
|
|
14
|
+
const src = isObj(data) ? data : {};
|
|
15
|
+
for (const key of Object.keys(config)){
|
|
16
|
+
const shapeVal = config[key];
|
|
17
|
+
const srcVal = src[key];
|
|
18
|
+
if (isObj(shapeVal)) {
|
|
19
|
+
const child = sanitizeMessages(shapeVal, srcVal);
|
|
20
|
+
if (isObj(child) && Object.keys(child).length > 0) {
|
|
21
|
+
out[key] = child;
|
|
22
|
+
}
|
|
23
|
+
// else: omit empty group
|
|
24
|
+
} else {
|
|
25
|
+
// Leaf: only keep if the source has a string
|
|
26
|
+
if (typeof srcVal === 'string') {
|
|
27
|
+
out[key] = srcVal;
|
|
28
|
+
}
|
|
29
|
+
// else: omit leaf
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return out;
|
|
12
33
|
}
|
|
13
|
-
function
|
|
14
|
-
|
|
34
|
+
function isObj(x) {
|
|
35
|
+
return !!x && typeof x === 'object' && !Array.isArray(x);
|
|
15
36
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=sanitize.js.map
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/utils/sanitize.ts"],"sourcesContent":["import type { DeepPartial, Messages } from '@/types';\n\n/**\n * Sanitize messages data to match the schema.\n * Stored messages might contain keys that are not in the config.\n * This happens when messages in the config were (re)moved.\n *\n * Keep exactly the keys from `shape`, fill values from `source` when present.\n * - Leaf present as string -> included\n * - Leaf missing/non-string -> omitted\n * - Empty nested groups -> omitted\n */\n\n/**\n\n */\nexport function sanitizeMessages(\n config: Messages,\n data: unknown,\n): DeepPartial<Messages> {\n const out: Record<string, unknown> = {};\n const src = isObj(data) ? data : {};\n\n for (const key of Object.keys(config)) {\n const shapeVal = (config as Record<string, unknown>)[key];\n const srcVal = src[key];\n\n if (isObj(shapeVal)) {\n const child = sanitizeMessages(shapeVal as Messages, srcVal);\n if (isObj(child) && Object.keys(child).length > 0) {\n out[key] = child;\n }\n // else: omit empty group\n } else {\n // Leaf: only keep if the source has a string\n if (typeof srcVal === 'string') {\n out[key] = srcVal;\n }\n // else: omit leaf\n }\n }\n\n return out as DeepPartial<Messages>;\n}\n\nfunction isObj(x: unknown): x is Record<string, unknown> {\n return !!x && typeof x === 'object' && !Array.isArray(x);\n}\n"],"names":["sanitizeMessages","config","data","out","src","isObj","key","Object","keys","shapeVal","srcVal","child","length","x","Array","isArray"],"mappings":"AAEA;;;;;;;;;CASC,GAED;;CAEC,GACD,OAAO,SAASA,iBACdC,MAAgB,EAChBC,IAAa;IAEb,MAAMC,MAA+B,CAAC;IACtC,MAAMC,MAAMC,MAAMH,QAAQA,OAAO,CAAC;IAElC,KAAK,MAAMI,OAAOC,OAAOC,IAAI,CAACP,QAAS;QACrC,MAAMQ,WAAW,AAACR,MAAkC,CAACK,IAAI;QACzD,MAAMI,SAASN,GAAG,CAACE,IAAI;QAEvB,IAAID,MAAMI,WAAW;YACnB,MAAME,QAAQX,iBAAiBS,UAAsBC;YACrD,IAAIL,MAAMM,UAAUJ,OAAOC,IAAI,CAACG,OAAOC,MAAM,GAAG,GAAG;gBACjDT,GAAG,CAACG,IAAI,GAAGK;YACb;QACA,yBAAyB;QAC3B,OAAO;YACL,6CAA6C;YAC7C,IAAI,OAAOD,WAAW,UAAU;gBAC9BP,GAAG,CAACG,IAAI,GAAGI;YACb;QACA,kBAAkB;QACpB;IACF;IAEA,OAAOP;AACT;AAEA,SAASE,MAAMQ,CAAU;IACvB,OAAO,CAAC,CAACA,KAAK,OAAOA,MAAM,YAAY,CAACC,MAAMC,OAAO,CAACF;AACxD"}
|
package/dist/utils/schema.d.ts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { MessageSchema, TemplateVariable } from '../types';
|
|
1
|
+
import type { MessageSchema, TemplateVariable } from '../types';
|
|
2
2
|
export declare const parseMessageSchema: (schema: MessageSchema) => MessageConfig;
|
|
3
3
|
export declare const extractTemplateVariables: (schema: MessageSchema) => TemplateVariable[];
|
|
4
|
-
export type MessageType = 'icu';
|
|
5
4
|
export type MessageConfig = {
|
|
6
5
|
description: string | undefined;
|
|
7
|
-
type: MessageType;
|
|
8
6
|
variables: TemplateVariable[];
|
|
9
7
|
};
|
|
10
8
|
//# sourceMappingURL=schema.d.ts.map
|