@intlayer/core 7.6.0-canary.1 → 8.0.0-canary.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.
Files changed (149) hide show
  1. package/dist/cjs/dictionaryManipulator/editDictionaryByKeyPath.cjs +1 -1
  2. package/dist/cjs/dictionaryManipulator/editDictionaryByKeyPath.cjs.map +1 -1
  3. package/dist/cjs/dictionaryManipulator/getContentNodeByKeyPath.cjs +1 -1
  4. package/dist/cjs/dictionaryManipulator/getContentNodeByKeyPath.cjs.map +1 -1
  5. package/dist/cjs/dictionaryManipulator/getDefaultNode.cjs +5 -0
  6. package/dist/cjs/dictionaryManipulator/getDefaultNode.cjs.map +1 -1
  7. package/dist/cjs/dictionaryManipulator/getEmptyNode.cjs +1 -1
  8. package/dist/cjs/dictionaryManipulator/getEmptyNode.cjs.map +1 -1
  9. package/dist/cjs/dictionaryManipulator/getNodeChildren.cjs +1 -1
  10. package/dist/cjs/dictionaryManipulator/getNodeChildren.cjs.map +1 -1
  11. package/dist/cjs/dictionaryManipulator/removeContentNodeByKeyPath.cjs +1 -1
  12. package/dist/cjs/dictionaryManipulator/removeContentNodeByKeyPath.cjs.map +1 -1
  13. package/dist/cjs/dictionaryManipulator/renameContentNodeByKeyPath.cjs +1 -1
  14. package/dist/cjs/dictionaryManipulator/renameContentNodeByKeyPath.cjs.map +1 -1
  15. package/dist/cjs/index.cjs +56 -2
  16. package/dist/cjs/interpreter/getContent/deepTransform.cjs +1 -0
  17. package/dist/cjs/interpreter/getContent/deepTransform.cjs.map +1 -1
  18. package/dist/cjs/interpreter/getContent/getContent.cjs +2 -2
  19. package/dist/cjs/interpreter/getContent/getContent.cjs.map +1 -1
  20. package/dist/cjs/interpreter/getContent/plugins.cjs +3 -2
  21. package/dist/cjs/interpreter/getContent/plugins.cjs.map +1 -1
  22. package/dist/cjs/interpreter/getEnumeration.cjs.map +1 -1
  23. package/dist/cjs/interpreter/getHTML.cjs +106 -0
  24. package/dist/cjs/interpreter/getHTML.cjs.map +1 -0
  25. package/dist/cjs/interpreter/getInsertion.cjs +3 -1
  26. package/dist/cjs/interpreter/getInsertion.cjs.map +1 -1
  27. package/dist/cjs/interpreter/getTranslation.cjs +2 -2
  28. package/dist/cjs/interpreter/getTranslation.cjs.map +1 -1
  29. package/dist/cjs/interpreter/index.cjs +2 -0
  30. package/dist/cjs/localization/getBrowserLocale.cjs +1 -1
  31. package/dist/cjs/localization/getLocale.cjs +4 -3
  32. package/dist/cjs/localization/getLocale.cjs.map +1 -1
  33. package/dist/cjs/markdown/compiler.cjs +806 -0
  34. package/dist/cjs/markdown/compiler.cjs.map +1 -0
  35. package/dist/cjs/markdown/constants.cjs +334 -0
  36. package/dist/cjs/markdown/constants.cjs.map +1 -0
  37. package/dist/cjs/markdown/index.cjs +49 -0
  38. package/dist/cjs/markdown/parser.cjs +73 -0
  39. package/dist/cjs/markdown/parser.cjs.map +1 -0
  40. package/dist/cjs/markdown/renderer.cjs +68 -0
  41. package/dist/cjs/markdown/renderer.cjs.map +1 -0
  42. package/dist/cjs/markdown/types.cjs +0 -0
  43. package/dist/cjs/markdown/utils.cjs +397 -0
  44. package/dist/cjs/markdown/utils.cjs.map +1 -0
  45. package/dist/cjs/transpiler/html/getHTMLCustomComponents.cjs +15 -0
  46. package/dist/cjs/transpiler/html/getHTMLCustomComponents.cjs.map +1 -0
  47. package/dist/cjs/transpiler/html/index.cjs +133 -0
  48. package/dist/cjs/transpiler/html/index.cjs.map +1 -0
  49. package/dist/cjs/transpiler/index.cjs +3 -0
  50. package/dist/cjs/transpiler/insertion/getInsertionValues.cjs +2 -2
  51. package/dist/cjs/transpiler/insertion/getInsertionValues.cjs.map +1 -1
  52. package/dist/cjs/transpiler/insertion/insertion.cjs.map +1 -1
  53. package/dist/cjs/utils/intl.cjs +35 -3
  54. package/dist/cjs/utils/intl.cjs.map +1 -1
  55. package/dist/esm/dictionaryManipulator/editDictionaryByKeyPath.mjs +1 -1
  56. package/dist/esm/dictionaryManipulator/editDictionaryByKeyPath.mjs.map +1 -1
  57. package/dist/esm/dictionaryManipulator/getContentNodeByKeyPath.mjs +1 -1
  58. package/dist/esm/dictionaryManipulator/getContentNodeByKeyPath.mjs.map +1 -1
  59. package/dist/esm/dictionaryManipulator/getDefaultNode.mjs +5 -0
  60. package/dist/esm/dictionaryManipulator/getDefaultNode.mjs.map +1 -1
  61. package/dist/esm/dictionaryManipulator/getEmptyNode.mjs +1 -1
  62. package/dist/esm/dictionaryManipulator/getEmptyNode.mjs.map +1 -1
  63. package/dist/esm/dictionaryManipulator/getNodeChildren.mjs +1 -1
  64. package/dist/esm/dictionaryManipulator/getNodeChildren.mjs.map +1 -1
  65. package/dist/esm/dictionaryManipulator/removeContentNodeByKeyPath.mjs +1 -1
  66. package/dist/esm/dictionaryManipulator/removeContentNodeByKeyPath.mjs.map +1 -1
  67. package/dist/esm/dictionaryManipulator/renameContentNodeByKeyPath.mjs +1 -1
  68. package/dist/esm/dictionaryManipulator/renameContentNodeByKeyPath.mjs.map +1 -1
  69. package/dist/esm/index.mjs +11 -4
  70. package/dist/esm/interpreter/getContent/deepTransform.mjs +1 -0
  71. package/dist/esm/interpreter/getContent/deepTransform.mjs.map +1 -1
  72. package/dist/esm/interpreter/getContent/getContent.mjs +2 -2
  73. package/dist/esm/interpreter/getContent/getContent.mjs.map +1 -1
  74. package/dist/esm/interpreter/getContent/plugins.mjs +3 -2
  75. package/dist/esm/interpreter/getContent/plugins.mjs.map +1 -1
  76. package/dist/esm/interpreter/getEnumeration.mjs.map +1 -1
  77. package/dist/esm/interpreter/getHTML.mjs +105 -0
  78. package/dist/esm/interpreter/getHTML.mjs.map +1 -0
  79. package/dist/esm/interpreter/getInsertion.mjs +3 -1
  80. package/dist/esm/interpreter/getInsertion.mjs.map +1 -1
  81. package/dist/esm/interpreter/getTranslation.mjs +2 -2
  82. package/dist/esm/interpreter/getTranslation.mjs.map +1 -1
  83. package/dist/esm/interpreter/index.mjs +2 -1
  84. package/dist/esm/localization/getBrowserLocale.mjs +1 -1
  85. package/dist/esm/localization/getLocale.mjs +2 -1
  86. package/dist/esm/localization/getLocale.mjs.map +1 -1
  87. package/dist/esm/markdown/compiler.mjs +804 -0
  88. package/dist/esm/markdown/compiler.mjs.map +1 -0
  89. package/dist/esm/markdown/constants.mjs +254 -0
  90. package/dist/esm/markdown/constants.mjs.map +1 -0
  91. package/dist/esm/markdown/index.mjs +7 -0
  92. package/dist/esm/markdown/parser.mjs +73 -0
  93. package/dist/esm/markdown/parser.mjs.map +1 -0
  94. package/dist/esm/markdown/renderer.mjs +67 -0
  95. package/dist/esm/markdown/renderer.mjs.map +1 -0
  96. package/dist/esm/markdown/types.mjs +0 -0
  97. package/dist/esm/markdown/utils.mjs +368 -0
  98. package/dist/esm/markdown/utils.mjs.map +1 -0
  99. package/dist/esm/transpiler/html/getHTMLCustomComponents.mjs +15 -0
  100. package/dist/esm/transpiler/html/getHTMLCustomComponents.mjs.map +1 -0
  101. package/dist/esm/transpiler/html/index.mjs +131 -0
  102. package/dist/esm/transpiler/html/index.mjs.map +1 -0
  103. package/dist/esm/transpiler/index.mjs +2 -1
  104. package/dist/esm/transpiler/insertion/getInsertionValues.mjs +2 -2
  105. package/dist/esm/transpiler/insertion/getInsertionValues.mjs.map +1 -1
  106. package/dist/esm/transpiler/insertion/insertion.mjs.map +1 -1
  107. package/dist/esm/utils/intl.mjs +35 -4
  108. package/dist/esm/utils/intl.mjs.map +1 -1
  109. package/dist/types/deepTransformPlugins/getFilterMissingTranslationsContent.d.ts +11 -10
  110. package/dist/types/deepTransformPlugins/getFilterTranslationsOnlyContent.d.ts +11 -10
  111. package/dist/types/deepTransformPlugins/getFilterTranslationsOnlyContent.d.ts.map +1 -1
  112. package/dist/types/deepTransformPlugins/getFilteredLocalesContent.d.ts +11 -10
  113. package/dist/types/deepTransformPlugins/getFilteredLocalesContent.d.ts.map +1 -1
  114. package/dist/types/getStorageAttributes.d.ts.map +1 -1
  115. package/dist/types/index.d.ts +11 -3
  116. package/dist/types/interpreter/getContent/getContent.d.ts +1 -1
  117. package/dist/types/interpreter/getContent/getContent.d.ts.map +1 -1
  118. package/dist/types/interpreter/getContent/index.d.ts +2 -2
  119. package/dist/types/interpreter/getContent/plugins.d.ts +58 -18
  120. package/dist/types/interpreter/getContent/plugins.d.ts.map +1 -1
  121. package/dist/types/interpreter/getEnumeration.d.ts +1 -1
  122. package/dist/types/interpreter/getHTML.d.ts +14 -0
  123. package/dist/types/interpreter/getHTML.d.ts.map +1 -0
  124. package/dist/types/interpreter/getTranslation.d.ts.map +1 -1
  125. package/dist/types/interpreter/index.d.ts +3 -2
  126. package/dist/types/localization/getLocale.d.ts.map +1 -1
  127. package/dist/types/markdown/compiler.d.ts +10 -0
  128. package/dist/types/markdown/compiler.d.ts.map +1 -0
  129. package/dist/types/markdown/constants.d.ts +193 -0
  130. package/dist/types/markdown/constants.d.ts.map +1 -0
  131. package/dist/types/markdown/index.d.ts +7 -0
  132. package/dist/types/markdown/parser.d.ts +17 -0
  133. package/dist/types/markdown/parser.d.ts.map +1 -0
  134. package/dist/types/markdown/renderer.d.ts +23 -0
  135. package/dist/types/markdown/renderer.d.ts.map +1 -0
  136. package/dist/types/markdown/types.d.ts +367 -0
  137. package/dist/types/markdown/types.d.ts.map +1 -0
  138. package/dist/types/markdown/utils.d.ts +141 -0
  139. package/dist/types/markdown/utils.d.ts.map +1 -0
  140. package/dist/types/messageFormat/ICU.d.ts.map +1 -1
  141. package/dist/types/transpiler/enumeration/enumeration.d.ts.map +1 -1
  142. package/dist/types/transpiler/html/getHTMLCustomComponents.d.ts +9 -0
  143. package/dist/types/transpiler/html/getHTMLCustomComponents.d.ts.map +1 -0
  144. package/dist/types/transpiler/html/index.d.ts +33 -0
  145. package/dist/types/transpiler/html/index.d.ts.map +1 -0
  146. package/dist/types/transpiler/index.d.ts +2 -1
  147. package/dist/types/utils/intl.d.ts +21 -2
  148. package/dist/types/utils/intl.d.ts.map +1 -1
  149. package/package.json +15 -7
@@ -0,0 +1,106 @@
1
+
2
+ //#region src/interpreter/getHTML.ts
3
+ /**
4
+ * Helper to parse attributes from a tag string.
5
+ */
6
+ const parseAttributes = (attributes) => {
7
+ const props = {};
8
+ const attrRegex = /([a-zA-Z0-9-]+)="([^"]*)"/g;
9
+ let match = attrRegex.exec(attributes);
10
+ while (match !== null) {
11
+ props[match[1]] = match[2];
12
+ match = attrRegex.exec(attributes);
13
+ }
14
+ return props;
15
+ };
16
+ const htmlCache = /* @__PURE__ */ new Map();
17
+ /**
18
+ * Allow to interpret HTML/JSX-like strings and replace tags with components.
19
+ */
20
+ const getHTML = (content, values) => {
21
+ const cacheKey = JSON.stringify({
22
+ content,
23
+ components: Object.keys(values)
24
+ });
25
+ if (htmlCache.has(cacheKey)) return htmlCache.get(cacheKey);
26
+ const tagRegex = /<(\/)?([a-zA-Z0-9.-]+)([\s\S]*?)(\/?)>/g;
27
+ const elements = [];
28
+ const stack = [];
29
+ let lastIndex = 0;
30
+ let tagIndex = 0;
31
+ let match = tagRegex.exec(content);
32
+ const renderValue = (tagName, tagProps, children, index) => {
33
+ let override = values[tagName];
34
+ if (!override) {
35
+ const lowerTagName = tagName.toLowerCase();
36
+ const foundKey = Object.keys(values).find((key$1) => key$1.toLowerCase() === lowerTagName);
37
+ if (foundKey) override = values[foundKey];
38
+ }
39
+ const key = `html-tag-${tagName}-${index}`;
40
+ if (typeof override === "function") return override({
41
+ ...tagProps,
42
+ children,
43
+ key
44
+ });
45
+ if (typeof override === "string") {
46
+ const component = values[override];
47
+ if (typeof component === "function") return component({
48
+ ...tagProps,
49
+ children,
50
+ key
51
+ });
52
+ return children;
53
+ }
54
+ if (typeof override === "object" && override !== null && "tag" in override) {
55
+ const { tag: targetTag, props: extraProps } = override;
56
+ const component = values[targetTag];
57
+ if (typeof component === "function") return component({
58
+ ...tagProps,
59
+ ...extraProps,
60
+ children,
61
+ key
62
+ });
63
+ return children;
64
+ }
65
+ return children;
66
+ };
67
+ const appendChild = (child) => {
68
+ const target = stack.length > 0 ? stack[stack.length - 1].children : elements;
69
+ if (Array.isArray(child)) target.push(...child);
70
+ else target.push(child);
71
+ };
72
+ while (match !== null) {
73
+ const [fullMatch, isClosingRaw, tagName, attributesRaw, isSelfClosingRaw] = match;
74
+ const matchIndex = match.index;
75
+ if (matchIndex > lastIndex) appendChild(content.slice(lastIndex, matchIndex));
76
+ const isClosing = isClosingRaw === "/";
77
+ const isSelfClosing = isSelfClosingRaw === "/" || attributesRaw.trim().endsWith("/") || fullMatch.endsWith("/>");
78
+ const cleanedAttributes = attributesRaw.trim().replace(/\/$/, "").trim();
79
+ if (isClosing) {
80
+ const last = stack.pop();
81
+ if (last) appendChild(renderValue(tagName, last.props, last.children, tagIndex++));
82
+ } else if (isSelfClosing) appendChild(renderValue(tagName, parseAttributes(cleanedAttributes), [], tagIndex++));
83
+ else {
84
+ const tagProps = parseAttributes(cleanedAttributes);
85
+ stack.push({
86
+ tagName,
87
+ children: [],
88
+ props: tagProps
89
+ });
90
+ }
91
+ lastIndex = matchIndex + fullMatch.length;
92
+ match = tagRegex.exec(content);
93
+ }
94
+ if (lastIndex < content.length) appendChild(content.slice(lastIndex));
95
+ while (stack.length > 0) {
96
+ const last = stack.shift();
97
+ if (last) appendChild(last.children);
98
+ }
99
+ const result = elements.length === 1 ? elements[0] : elements;
100
+ htmlCache.set(cacheKey, result);
101
+ return result;
102
+ };
103
+
104
+ //#endregion
105
+ exports.getHTML = getHTML;
106
+ //# sourceMappingURL=getHTML.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getHTML.cjs","names":["key"],"sources":["../../../src/interpreter/getHTML.ts"],"sourcesContent":["type Component = (props: any) => any;\ntype ComponentObject = {\n tag: string;\n props?: Record<string, any>;\n};\ntype Components = Record<string, Component | string | ComponentObject>;\n\n/**\n * Helper to parse attributes from a tag string.\n */\nconst parseAttributes = (attributes: string): Record<string, string> => {\n const props: Record<string, string> = {};\n const attrRegex = /([a-zA-Z0-9-]+)=\"([^\"]*)\"/g;\n\n let match = attrRegex.exec(attributes);\n while (match !== null) {\n props[match[1]] = match[2];\n match = attrRegex.exec(attributes);\n }\n return props;\n};\n\nconst htmlCache = new Map<string, any>();\n\n/**\n * Allow to interpret HTML/JSX-like strings and replace tags with components.\n */\nexport const getHTML = (content: string, values: Components): any => {\n const cacheKey = JSON.stringify({ content, components: Object.keys(values) });\n\n if (htmlCache.has(cacheKey)) {\n return htmlCache.get(cacheKey);\n }\n\n const tagRegex = /<(\\/)?([a-zA-Z0-9.-]+)([\\s\\S]*?)(\\/?)>/g;\n\n const elements: any[] = [];\n const stack: {\n tagName: string;\n children: any[];\n props: Record<string, string>;\n }[] = [];\n\n let lastIndex = 0;\n let tagIndex = 0;\n let match = tagRegex.exec(content);\n\n const renderValue = (\n tagName: string,\n tagProps: Record<string, any>,\n children: any[],\n index: number\n ) => {\n let override = values[tagName];\n\n if (!override) {\n const lowerTagName = tagName.toLowerCase();\n const foundKey = Object.keys(values).find(\n (key) => key.toLowerCase() === lowerTagName\n );\n if (foundKey) override = values[foundKey];\n }\n\n const key = `html-tag-${tagName}-${index}`;\n\n if (typeof override === 'function') {\n return override({ ...tagProps, children, key });\n }\n\n if (typeof override === 'string') {\n const component = values[override];\n if (typeof component === 'function') {\n return component({ ...tagProps, children, key });\n }\n return children;\n }\n\n if (\n typeof override === 'object' &&\n override !== null &&\n 'tag' in override\n ) {\n const { tag: targetTag, props: extraProps } = override as ComponentObject;\n const component = values[targetTag];\n if (typeof component === 'function') {\n return component({ ...tagProps, ...extraProps, children, key });\n }\n return children;\n }\n\n // Default: Skip tag, render children\n return children;\n };\n\n const appendChild = (child: any) => {\n const target =\n stack.length > 0 ? stack[stack.length - 1].children : elements;\n if (Array.isArray(child)) {\n target.push(...child);\n } else {\n target.push(child);\n }\n };\n\n while (match !== null) {\n const [fullMatch, isClosingRaw, tagName, attributesRaw, isSelfClosingRaw] =\n match;\n const matchIndex = match.index;\n\n if (matchIndex > lastIndex) {\n appendChild(content.slice(lastIndex, matchIndex));\n }\n\n const isClosing = isClosingRaw === '/';\n const isSelfClosing =\n isSelfClosingRaw === '/' ||\n attributesRaw.trim().endsWith('/') ||\n fullMatch.endsWith('/>');\n\n const cleanedAttributes = attributesRaw.trim().replace(/\\/$/, '').trim();\n\n if (isClosing) {\n const last = stack.pop();\n if (last) {\n appendChild(\n renderValue(tagName, last.props, last.children, tagIndex++)\n );\n }\n } else if (isSelfClosing) {\n const tagProps = parseAttributes(cleanedAttributes);\n appendChild(renderValue(tagName, tagProps, [], tagIndex++));\n } else {\n const tagProps = parseAttributes(cleanedAttributes);\n stack.push({ tagName, children: [], props: tagProps });\n }\n\n lastIndex = matchIndex + fullMatch.length;\n match = tagRegex.exec(content);\n }\n\n if (lastIndex < content.length) {\n appendChild(content.slice(lastIndex));\n }\n\n while (stack.length > 0) {\n const last = stack.shift();\n if (last) appendChild(last.children);\n }\n\n const result = elements.length === 1 ? elements[0] : elements;\n\n htmlCache.set(cacheKey, result);\n\n return result;\n};\n"],"mappings":"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"}
@@ -13,7 +13,9 @@
13
13
  * ```
14
14
  *
15
15
  */
16
- const getInsertion = (content, values) => content.replace(/\{\{(.*?)\}\}/g, (_, key) => (values[key] ?? "").toString());
16
+ const getInsertion = (content, values) => content.replace(/\{\{\s*(.*?)\s*\}\}/g, (_, key) => {
17
+ return (values[key.trim()] ?? "").toString();
18
+ });
17
19
 
18
20
  //#endregion
19
21
  exports.getInsertion = getInsertion;
@@ -1 +1 @@
1
- {"version":3,"file":"getInsertion.cjs","names":[],"sources":["../../../src/interpreter/getInsertion.ts"],"sourcesContent":["import type { InsertionContent } from '../transpiler';\n\n/**\n * Allow to insert values in a string.\n *\n * Usage:\n *\n * ```ts\n * const content = getInsertion('Hello {{name}}!', {\n * name: 'John',\n * });\n * // 'Hello John!'\n * ```\n *\n */\nexport const getInsertion = (\n content: string,\n values: { [K in InsertionContent['fields'][number]]: string | number }\n) =>\n content.replace(/\\{\\{(.*?)\\}\\}/g, (_, key) => (values[key] ?? '').toString());\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAa,gBACX,SACA,WAEA,QAAQ,QAAQ,mBAAmB,GAAG,SAAS,OAAO,QAAQ,IAAI,UAAU,CAAC"}
1
+ {"version":3,"file":"getInsertion.cjs","names":[],"sources":["../../../src/interpreter/getInsertion.ts"],"sourcesContent":["import type { InsertionContent } from '../transpiler';\n\n/**\n * Allow to insert values in a string.\n *\n * Usage:\n *\n * ```ts\n * const content = getInsertion('Hello {{name}}!', {\n * name: 'John',\n * });\n * // 'Hello John!'\n * ```\n *\n */\nexport const getInsertion = (\n content: string,\n values: { [K in InsertionContent['fields'][number]]: string | number }\n) =>\n content.replace(/\\{\\{\\s*(.*?)\\s*\\}\\}/g, (_, key) => {\n const trimmedKey = key.trim();\n return (values[trimmedKey] ?? '').toString();\n });\n"],"mappings":";;;;;;;;;;;;;;;AAeA,MAAa,gBACX,SACA,WAEA,QAAQ,QAAQ,yBAAyB,GAAG,QAAQ;AAElD,SAAQ,OADW,IAAI,MAAM,KACC,IAAI,UAAU;EAC5C"}
@@ -7,7 +7,7 @@
7
7
  const isPlainObject = (value) => {
8
8
  if (value === null || typeof value !== "object") return false;
9
9
  if (value instanceof Promise || typeof value.then === "function") return false;
10
- if (value.$$typeof !== void 0) return false;
10
+ if (value.$$typeof !== void 0 || value.__v_isVNode !== void 0 || value._isVNode !== void 0 || value.isJSX !== void 0) return false;
11
11
  const proto = Object.getPrototypeOf(value);
12
12
  return proto === Object.prototype || proto === null || Array.isArray(value);
13
13
  };
@@ -99,7 +99,7 @@ const getTranslation = (languageContent, locale, fallback) => {
99
99
  }
100
100
  }
101
101
  if (results.length === 0) return;
102
- const cleanResults = results.map((item) => removeUndefinedValues(item));
102
+ const cleanResults = results.filter((item) => typeof item !== "undefined").map((item) => removeUndefinedValues(item));
103
103
  if (cleanResults.length === 1) return cleanResults[0];
104
104
  if (Array.isArray(cleanResults[0])) return cleanResults[0];
105
105
  return cleanResults.reduce((acc, curr) => deepMergeObjects(acc, curr));
@@ -1 +1 @@
1
- {"version":3,"file":"getTranslation.cjs","names":[],"sources":["../../../src/interpreter/getTranslation.ts"],"sourcesContent":["import type { LocalesValues, StrictModeLocaleMap } from '@intlayer/types';\n\n/**\n * Check if a value is a plain object that can be safely processed.\n * Returns false for Promises, React elements, class instances, etc.\n */\nconst isPlainObject = (value: unknown): boolean => {\n if (value === null || typeof value !== 'object') {\n return false;\n }\n\n // Don't process Promises (e.g., Next.js 15+ params)\n if (value instanceof Promise || typeof (value as any).then === 'function') {\n return false;\n }\n\n // Don't process React elements\n if ((value as any).$$typeof !== undefined) {\n return false;\n }\n\n // Only process plain objects and arrays\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null || Array.isArray(value);\n};\n\n/**\n * Recursively merges two objects.\n * Resembles the behavior of `defu` but respects `isPlainObject` to avoid merging React elements.\n * Arrays are replaced, not merged.\n */\nconst deepMergeObjects = (target: any, source: any): any => {\n if (target === undefined) return source;\n if (source === undefined) return target;\n\n if (Array.isArray(target)) return target;\n\n if (isPlainObject(target) && isPlainObject(source)) {\n const result = { ...target };\n for (const key of Object.keys(source)) {\n if (key === '__proto__' || key === 'constructor') continue;\n\n if (Object.hasOwn(target, key)) {\n result[key] = deepMergeObjects(target[key], source[key]);\n } else {\n result[key] = source[key];\n }\n }\n return result;\n }\n\n return target;\n};\n\n/**\n * Recursively removes undefined values from an object.\n * Handles circular references by tracking visited objects.\n */\nconst removeUndefinedValues = <T>(\n object: T,\n visited = new WeakSet<object>()\n): T => {\n if (typeof object !== 'object' || object === null) {\n return object;\n }\n\n // Handle circular references - return original to avoid infinite recursion\n if (visited.has(object)) {\n return object;\n }\n visited.add(object);\n\n // Don't process non-plain objects (Promises, React elements, etc.)\n if (!isPlainObject(object)) {\n return object;\n }\n\n if (Array.isArray(object)) {\n return object.map((item) => removeUndefinedValues(item, visited)) as T;\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(object)) {\n if (value !== undefined) {\n result[key] = removeUndefinedValues(value, visited);\n }\n }\n return result as T;\n};\n\n/**\n *\n * Allow to pick a content based on a locale.\n * If not locale found, it will return the content related to the default locale.\n *\n * Return either the content editor, or the content itself depending on the configuration.\n *\n * Usage:\n *\n * ```ts\n * const content = getTranslation<string>({\n * en: 'Hello',\n * fr: 'Bonjour',\n * }, 'fr');\n * // 'Bonjour'\n * ```\n *\n * Using TypeScript:\n * - this function will require each locale to be defined if defined in the project configuration.\n * - If a locale is missing, it will make each existing locale optional and raise an error if the locale is not found.\n */\nexport const getTranslation = <Content = string>(\n languageContent: StrictModeLocaleMap<Content>,\n locale: LocalesValues,\n fallback?: LocalesValues\n): Content => {\n const results: Content[] = [];\n\n const getContent = (loc: string) =>\n languageContent[loc as keyof typeof languageContent];\n\n // 1. Get Target Content\n const content = getContent(locale);\n if (typeof content === 'string') {\n return content;\n } else if (content !== undefined) {\n results.push(content);\n }\n\n // 2. Get Target Generic Content (e.g. 'en' from 'en-US')\n if (locale.includes('-')) {\n const genericLocale = locale.split('-')[0];\n if (genericLocale in languageContent) {\n const genericContent = getContent(genericLocale);\n\n if (typeof genericContent === 'string') {\n // If we haven't found specific content yet, return generic string\n if (results.length === 0) return genericContent;\n } else if (genericContent !== undefined) {\n results.push(genericContent);\n }\n }\n }\n\n // 3. Get Fallback Content\n if (fallback !== undefined && fallback !== locale) {\n // 3a. Fallback Specific\n if (fallback in languageContent) {\n const fallbackContent = getContent(fallback);\n\n if (typeof fallbackContent === 'string') {\n if (results.length === 0) return fallbackContent;\n } else if (fallbackContent !== undefined) {\n results.push(fallbackContent);\n }\n }\n\n // 3b. Fallback Generic (The missing piece: e.g. 'en' from 'en-GB' fallback)\n if (fallback.includes('-')) {\n const genericFallback = fallback.split('-')[0];\n const genericLocale = locale.split('-')[0];\n\n // Only add if it's different from the target generic (to avoid duplication)\n // and exists in the dictionary\n if (\n genericFallback !== genericLocale &&\n genericFallback in languageContent\n ) {\n const genericFallbackContent = getContent(genericFallback);\n\n if (typeof genericFallbackContent === 'string') {\n if (results.length === 0) return genericFallbackContent;\n } else if (genericFallbackContent !== undefined) {\n results.push(genericFallbackContent);\n }\n }\n }\n }\n\n if (results.length === 0) {\n return undefined as Content;\n }\n\n // Clean undefined values so they don't overwrite fallbacks\n // Order: [Target, Generic, Fallback, FallbackGeneric]\n // defu first argument takes precedence, so Target wins\n const cleanResults = results.map((item) => removeUndefinedValues(item));\n\n // If only one result, return it directly (no merging needed)\n if (cleanResults.length === 1) {\n return cleanResults[0];\n }\n\n // If the first result is an array, return it directly (arrays replace, don't merge)\n // defu would incorrectly convert arrays to objects with numeric keys\n if (Array.isArray(cleanResults[0])) {\n return cleanResults[0];\n }\n\n // Merge objects with custom merge - first argument takes precedence\n // Cast to object[] since by this point we've already returned early for strings, arrays, and single results\n return (cleanResults as object[]).reduce((acc, curr) =>\n deepMergeObjects(acc, curr)\n ) as Content;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"getTranslation.cjs","names":[],"sources":["../../../src/interpreter/getTranslation.ts"],"sourcesContent":["import type { LocalesValues, StrictModeLocaleMap } from '@intlayer/types';\n\n/**\n * Check if a value is a plain object that can be safely processed.\n * Returns false for Promises, React elements, class instances, etc.\n */\nconst isPlainObject = (value: unknown): boolean => {\n if (value === null || typeof value !== 'object') {\n return false;\n }\n\n // Don't process Promises (e.g., Next.js 15+ params)\n if (value instanceof Promise || typeof (value as any).then === 'function') {\n return false;\n }\n\n // Don't process React elements or other framework VNodes\n if (\n (value as any).$$typeof !== undefined ||\n (value as any).__v_isVNode !== undefined ||\n (value as any)._isVNode !== undefined ||\n (value as any).isJSX !== undefined\n ) {\n return false;\n }\n\n // Only process plain objects and arrays\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null || Array.isArray(value);\n};\n\n/**\n * Recursively merges two objects.\n * Resembles the behavior of `defu` but respects `isPlainObject` to avoid merging React elements.\n * Arrays are replaced, not merged.\n */\nconst deepMergeObjects = (target: any, source: any): any => {\n if (target === undefined) return source;\n if (source === undefined) return target;\n\n if (Array.isArray(target)) return target;\n\n if (isPlainObject(target) && isPlainObject(source)) {\n const result = { ...target };\n for (const key of Object.keys(source)) {\n if (key === '__proto__' || key === 'constructor') continue;\n\n if (Object.hasOwn(target, key)) {\n result[key] = deepMergeObjects(target[key], source[key]);\n } else {\n result[key] = source[key];\n }\n }\n return result;\n }\n\n return target;\n};\n\n/**\n * Recursively removes undefined values from an object.\n * Handles circular references by tracking visited objects.\n */\nconst removeUndefinedValues = <T>(\n object: T,\n visited = new WeakSet<object>()\n): T => {\n if (typeof object !== 'object' || object === null) {\n return object;\n }\n\n // Handle circular references - return original to avoid infinite recursion\n if (visited.has(object)) {\n return object;\n }\n visited.add(object);\n\n // Don't process non-plain objects (Promises, React elements, etc.)\n if (!isPlainObject(object)) {\n return object;\n }\n\n if (Array.isArray(object)) {\n return object.map((item) => removeUndefinedValues(item, visited)) as T;\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(object)) {\n if (value !== undefined) {\n result[key] = removeUndefinedValues(value, visited);\n }\n }\n return result as T;\n};\n\n/**\n *\n * Allow to pick a content based on a locale.\n * If not locale found, it will return the content related to the default locale.\n *\n * Return either the content editor, or the content itself depending on the configuration.\n *\n * Usage:\n *\n * ```ts\n * const content = getTranslation<string>({\n * en: 'Hello',\n * fr: 'Bonjour',\n * }, 'fr');\n * // 'Bonjour'\n * ```\n *\n * Using TypeScript:\n * - this function will require each locale to be defined if defined in the project configuration.\n * - If a locale is missing, it will make each existing locale optional and raise an error if the locale is not found.\n */\nexport const getTranslation = <Content = string>(\n languageContent: StrictModeLocaleMap<Content>,\n locale: LocalesValues,\n fallback?: LocalesValues\n): Content => {\n const results: Content[] = [];\n\n const getContent = (loc: string) =>\n languageContent[loc as keyof typeof languageContent];\n\n // Get Target Content\n const content = getContent(locale);\n if (typeof content === 'string') {\n return content;\n } else if (content !== undefined) {\n results.push(content);\n }\n\n // Get Target Generic Content (e.g. 'en' from 'en-US')\n if (locale.includes('-')) {\n const genericLocale = locale.split('-')[0];\n if (genericLocale in languageContent) {\n const genericContent = getContent(genericLocale);\n\n if (typeof genericContent === 'string') {\n // If we haven't found specific content yet, return generic string\n if (results.length === 0) return genericContent;\n } else if (genericContent !== undefined) {\n results.push(genericContent);\n }\n }\n }\n\n // Get Fallback Content\n if (fallback !== undefined && fallback !== locale) {\n // 3a. Fallback Specific\n if (fallback in languageContent) {\n const fallbackContent = getContent(fallback);\n\n if (typeof fallbackContent === 'string') {\n if (results.length === 0) return fallbackContent;\n } else if (fallbackContent !== undefined) {\n results.push(fallbackContent);\n }\n }\n\n // Fallback Generic (The missing piece: e.g. 'en' from 'en-GB' fallback)\n if (fallback.includes('-')) {\n const genericFallback = fallback.split('-')[0];\n const genericLocale = locale.split('-')[0];\n\n // Only add if it's different from the target generic (to avoid duplication)\n // and exists in the dictionary\n if (\n genericFallback !== genericLocale &&\n genericFallback in languageContent\n ) {\n const genericFallbackContent = getContent(genericFallback);\n\n if (typeof genericFallbackContent === 'string') {\n if (results.length === 0) return genericFallbackContent;\n } else if (genericFallbackContent !== undefined) {\n results.push(genericFallbackContent);\n }\n }\n }\n }\n\n if (results.length === 0) {\n return undefined as Content;\n }\n\n // Clean undefined values so they don't overwrite fallbacks\n // Order: [Target, Generic, Fallback, FallbackGeneric]\n // defu first argument takes precedence, so Target wins\n const cleanResults = results\n .filter((item) => typeof item !== 'undefined')\n .map((item) => removeUndefinedValues(item));\n\n // If only one result, return it directly (no merging needed)\n if (cleanResults.length === 1) {\n return cleanResults[0];\n }\n\n // If the first result is an array, return it directly (arrays replace, don't merge)\n // defu would incorrectly convert arrays to objects with numeric keys\n if (Array.isArray(cleanResults[0])) {\n return cleanResults[0];\n }\n\n // Merge objects with custom merge - first argument takes precedence\n // Cast to object[] since by this point we've already returned early for strings, arrays, and single results\n return (cleanResults as object[]).reduce((acc, curr) =>\n deepMergeObjects(acc, curr)\n ) as Content;\n};\n"],"mappings":"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"}
@@ -7,6 +7,7 @@ const require_interpreter_getNesting = require('./getNesting.cjs');
7
7
  const require_interpreter_getTranslation = require('./getTranslation.cjs');
8
8
  const require_interpreter_getContent_plugins = require('./getContent/plugins.cjs');
9
9
  const require_interpreter_getContent_getContent = require('./getContent/getContent.cjs');
10
+ const require_interpreter_getHTML = require('./getHTML.cjs');
10
11
 
11
12
  exports.conditionPlugin = require_interpreter_getContent_plugins.conditionPlugin;
12
13
  exports.deepTransformNode = require_interpreter_getContent_deepTransform.deepTransformNode;
@@ -18,6 +19,7 @@ exports.getCondition = require_interpreter_getCondition.getCondition;
18
19
  exports.getContent = require_interpreter_getContent_getContent.getContent;
19
20
  exports.getDictionary = require_interpreter_getDictionary.getDictionary;
20
21
  exports.getEnumeration = require_interpreter_getEnumeration.getEnumeration;
22
+ exports.getHTML = require_interpreter_getHTML.getHTML;
21
23
  exports.getIntlayer = require_interpreter_getIntlayer.getIntlayer;
22
24
  exports.getNesting = require_interpreter_getNesting.getNesting;
23
25
  exports.getTranslation = require_interpreter_getTranslation.getTranslation;
@@ -1,6 +1,6 @@
1
1
  const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
- const require_localization_localeDetector = require('./localeDetector.cjs');
3
2
  const require_utils_localeStorage = require('../utils/localeStorage.cjs');
3
+ const require_localization_localeDetector = require('./localeDetector.cjs');
4
4
  let _intlayer_types = require("@intlayer/types");
5
5
  let _intlayer_config_built = require("@intlayer/config/built");
6
6
  _intlayer_config_built = require_rolldown_runtime.__toESM(_intlayer_config_built);
@@ -1,22 +1,23 @@
1
1
  const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ const require_utils_localeStorage = require('../utils/localeStorage.cjs');
3
+ const require_localization_localeResolver = require('./localeResolver.cjs');
2
4
  const require_localization_localeDetector = require('./localeDetector.cjs');
3
5
  let _intlayer_config_client = require("@intlayer/config/client");
4
6
  let _intlayer_config_built = require("@intlayer/config/built");
5
7
  _intlayer_config_built = require_rolldown_runtime.__toESM(_intlayer_config_built);
6
- let _intlayer_core = require("@intlayer/core");
7
8
 
8
9
  //#region src/localization/getLocale.ts
9
10
  const getLocale = async (ctx = {}) => {
10
11
  const defaultLocale = _intlayer_config_built.default?.internationalization?.defaultLocale ?? _intlayer_config_client.DefaultValues.Internationalization.DEFAULT_LOCALE;
11
12
  const availableLocales = _intlayer_config_built.default?.internationalization?.locales ?? _intlayer_config_client.DefaultValues.Internationalization.LOCALES;
12
- const storedLocale = (0, _intlayer_core.getLocaleFromStorage)({
13
+ const storedLocale = require_utils_localeStorage.getLocaleFromStorage({
13
14
  getCookie: ctx.getCookie,
14
15
  getHeader: ctx.getHeader
15
16
  });
16
17
  if (storedLocale) return storedLocale;
17
18
  const acceptLanguageHeader = ctx.getHeader?.("accept-language");
18
19
  if (!acceptLanguageHeader) return defaultLocale;
19
- const userFallbackLocale = (0, _intlayer_core.localeResolver)(require_localization_localeDetector.getPreferredLanguages(acceptLanguageHeader, availableLocales), availableLocales, defaultLocale);
20
+ const userFallbackLocale = require_localization_localeResolver.localeResolver(require_localization_localeDetector.getPreferredLanguages(acceptLanguageHeader, availableLocales), availableLocales, defaultLocale);
20
21
  if (userFallbackLocale) return userFallbackLocale;
21
22
  return defaultLocale;
22
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getLocale.cjs","names":["configuration","DefaultValues","getPreferredLanguages"],"sources":["../../../src/localization/getLocale.ts"],"sourcesContent":["import configuration from '@intlayer/config/built';\nimport { DefaultValues } from '@intlayer/config/client';\nimport { getLocaleFromStorage, localeResolver } from '@intlayer/core';\nimport type { Locale } from '@intlayer/types';\nimport { getPreferredLanguages } from './localeDetector';\n\nexport type RequestContext = {\n getHeader?: (name: string) => string | null | undefined;\n getCookie?: (name: string) => string | null | undefined;\n};\n\nexport const getLocale = async (ctx: RequestContext = {}): Promise<Locale> => {\n const defaultLocale =\n configuration?.internationalization?.defaultLocale ??\n DefaultValues.Internationalization.DEFAULT_LOCALE;\n const availableLocales =\n configuration?.internationalization?.locales ??\n DefaultValues.Internationalization.LOCALES;\n\n // Try locale from storage (cookie or header)\n const storedLocale = getLocaleFromStorage({\n getCookie: ctx.getCookie,\n getHeader: ctx.getHeader,\n });\n\n if (storedLocale) {\n return storedLocale;\n }\n\n // Fallback to Accept-Language negotiation\n const acceptLanguageHeader = ctx.getHeader?.('accept-language');\n\n if (!acceptLanguageHeader) {\n return defaultLocale;\n }\n\n const preferredLocaleStrings = getPreferredLanguages(\n acceptLanguageHeader,\n availableLocales\n );\n\n const userFallbackLocale = localeResolver(\n preferredLocaleStrings,\n availableLocales,\n defaultLocale\n );\n\n if (userFallbackLocale) {\n return userFallbackLocale;\n }\n\n // Default locale\n return defaultLocale;\n};\n"],"mappings":";;;;;;;;AAWA,MAAa,YAAY,OAAO,MAAsB,EAAE,KAAsB;CAC5E,MAAM,gBACJA,gCAAe,sBAAsB,iBACrCC,sCAAc,qBAAqB;CACrC,MAAM,mBACJD,gCAAe,sBAAsB,WACrCC,sCAAc,qBAAqB;CAGrC,MAAM,wDAAoC;EACxC,WAAW,IAAI;EACf,WAAW,IAAI;EAChB,CAAC;AAEF,KAAI,aACF,QAAO;CAIT,MAAM,uBAAuB,IAAI,YAAY,kBAAkB;AAE/D,KAAI,CAAC,qBACH,QAAO;CAQT,MAAM,wDALyBC,0DAC7B,sBACA,iBACD,EAIC,kBACA,cACD;AAED,KAAI,mBACF,QAAO;AAIT,QAAO"}
1
+ {"version":3,"file":"getLocale.cjs","names":["configuration","DefaultValues","getLocaleFromStorage","localeResolver","getPreferredLanguages"],"sources":["../../../src/localization/getLocale.ts"],"sourcesContent":["import configuration from '@intlayer/config/built';\nimport { DefaultValues } from '@intlayer/config/client';\nimport type { Locale } from '@intlayer/types';\nimport { getLocaleFromStorage } from '../utils/localeStorage';\nimport { getPreferredLanguages } from './localeDetector';\nimport { localeResolver } from './localeResolver';\n\nexport type RequestContext = {\n getHeader?: (name: string) => string | null | undefined;\n getCookie?: (name: string) => string | null | undefined;\n};\n\nexport const getLocale = async (ctx: RequestContext = {}): Promise<Locale> => {\n const defaultLocale =\n configuration?.internationalization?.defaultLocale ??\n DefaultValues.Internationalization.DEFAULT_LOCALE;\n const availableLocales =\n configuration?.internationalization?.locales ??\n DefaultValues.Internationalization.LOCALES;\n\n // Try locale from storage (cookie or header)\n const storedLocale = getLocaleFromStorage({\n getCookie: ctx.getCookie,\n getHeader: ctx.getHeader,\n });\n\n if (storedLocale) {\n return storedLocale;\n }\n\n // Fallback to Accept-Language negotiation\n const acceptLanguageHeader = ctx.getHeader?.('accept-language');\n\n if (!acceptLanguageHeader) {\n return defaultLocale;\n }\n\n const preferredLocaleStrings = getPreferredLanguages(\n acceptLanguageHeader,\n availableLocales\n );\n\n const userFallbackLocale = localeResolver(\n preferredLocaleStrings,\n availableLocales,\n defaultLocale\n );\n\n if (userFallbackLocale) {\n return userFallbackLocale;\n }\n\n // Default locale\n return defaultLocale;\n};\n"],"mappings":";;;;;;;;;AAYA,MAAa,YAAY,OAAO,MAAsB,EAAE,KAAsB;CAC5E,MAAM,gBACJA,gCAAe,sBAAsB,iBACrCC,sCAAc,qBAAqB;CACrC,MAAM,mBACJD,gCAAe,sBAAsB,WACrCC,sCAAc,qBAAqB;CAGrC,MAAM,eAAeC,iDAAqB;EACxC,WAAW,IAAI;EACf,WAAW,IAAI;EAChB,CAAC;AAEF,KAAI,aACF,QAAO;CAIT,MAAM,uBAAuB,IAAI,YAAY,kBAAkB;AAE/D,KAAI,CAAC,qBACH,QAAO;CAQT,MAAM,qBAAqBC,mDALIC,0DAC7B,sBACA,iBACD,EAIC,kBACA,cACD;AAED,KAAI,mBACF,QAAO;AAIT,QAAO"}