@carlonicora/nextjs-jsonapi 1.1.1 → 1.3.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 (230) hide show
  1. package/dist/{BlockNoteEditor-6NVBI7XL.js → BlockNoteEditor-CNXQ3WL3.js} +7 -7
  2. package/dist/{BlockNoteEditor-6NVBI7XL.js.map → BlockNoteEditor-CNXQ3WL3.js.map} +1 -1
  3. package/dist/{BlockNoteEditor-4VOBTXWC.mjs → BlockNoteEditor-DC33K4IF.mjs} +3 -3
  4. package/dist/{chunk-KPRHIJO6.js → chunk-KDFDGXCX.js} +53 -53
  5. package/dist/{chunk-KPRHIJO6.js.map → chunk-KDFDGXCX.js.map} +1 -1
  6. package/dist/{chunk-FYRFMABS.js → chunk-L6LH7WA4.js} +21 -2
  7. package/dist/chunk-L6LH7WA4.js.map +1 -0
  8. package/dist/{chunk-MA2L2PL2.mjs → chunk-MHVXFWZY.mjs} +20 -1
  9. package/dist/chunk-MHVXFWZY.mjs.map +1 -0
  10. package/dist/{chunk-HP4Q5ZVG.mjs → chunk-Y4XI3AZR.mjs} +3 -3
  11. package/dist/client/index.js +3 -3
  12. package/dist/client/index.mjs +2 -2
  13. package/dist/components/index.js +3 -3
  14. package/dist/components/index.mjs +2 -2
  15. package/dist/contexts/index.js +3 -3
  16. package/dist/contexts/index.mjs +2 -2
  17. package/dist/features/index.d.mts +3 -1
  18. package/dist/features/index.d.ts +3 -1
  19. package/dist/features/index.js +4 -2
  20. package/dist/features/index.js.map +1 -1
  21. package/dist/features/index.mjs +3 -1
  22. package/dist/hooks/index.js +3 -3
  23. package/dist/hooks/index.mjs +2 -2
  24. package/dist/scripts/generate-web-module/generator.d.ts +15 -0
  25. package/dist/scripts/generate-web-module/generator.d.ts.map +1 -0
  26. package/dist/scripts/generate-web-module/generator.js +320 -0
  27. package/dist/scripts/generate-web-module/generator.js.map +1 -0
  28. package/dist/scripts/generate-web-module/index.d.ts +16 -0
  29. package/dist/scripts/generate-web-module/index.d.ts.map +1 -0
  30. package/dist/scripts/generate-web-module/index.js +80 -0
  31. package/dist/scripts/generate-web-module/index.js.map +1 -0
  32. package/dist/scripts/generate-web-module/templates/components/container.template.d.ts +14 -0
  33. package/dist/scripts/generate-web-module/templates/components/container.template.d.ts.map +1 -0
  34. package/dist/scripts/generate-web-module/templates/components/container.template.js +124 -0
  35. package/dist/scripts/generate-web-module/templates/components/container.template.js.map +1 -0
  36. package/dist/scripts/generate-web-module/templates/components/content.template.d.ts +15 -0
  37. package/dist/scripts/generate-web-module/templates/components/content.template.d.ts.map +1 -0
  38. package/dist/scripts/generate-web-module/templates/components/content.template.js +39 -0
  39. package/dist/scripts/generate-web-module/templates/components/content.template.js.map +1 -0
  40. package/dist/scripts/generate-web-module/templates/components/deleter.template.d.ts +14 -0
  41. package/dist/scripts/generate-web-module/templates/components/deleter.template.d.ts.map +1 -0
  42. package/dist/scripts/generate-web-module/templates/components/deleter.template.js +51 -0
  43. package/dist/scripts/generate-web-module/templates/components/deleter.template.js.map +1 -0
  44. package/dist/scripts/generate-web-module/templates/components/details.template.d.ts +14 -0
  45. package/dist/scripts/generate-web-module/templates/components/details.template.d.ts.map +1 -0
  46. package/dist/scripts/generate-web-module/templates/components/details.template.js +109 -0
  47. package/dist/scripts/generate-web-module/templates/components/details.template.js.map +1 -0
  48. package/dist/scripts/generate-web-module/templates/components/editor.template.d.ts +14 -0
  49. package/dist/scripts/generate-web-module/templates/components/editor.template.d.ts.map +1 -0
  50. package/dist/scripts/generate-web-module/templates/components/editor.template.js +459 -0
  51. package/dist/scripts/generate-web-module/templates/components/editor.template.js.map +1 -0
  52. package/dist/scripts/generate-web-module/templates/components/index.d.ts +15 -0
  53. package/dist/scripts/generate-web-module/templates/components/index.d.ts.map +1 -0
  54. package/dist/scripts/generate-web-module/templates/components/index.js +29 -0
  55. package/dist/scripts/generate-web-module/templates/components/index.js.map +1 -0
  56. package/dist/scripts/generate-web-module/templates/components/list-container.template.d.ts +14 -0
  57. package/dist/scripts/generate-web-module/templates/components/list-container.template.d.ts.map +1 -0
  58. package/dist/scripts/generate-web-module/templates/components/list-container.template.js +30 -0
  59. package/dist/scripts/generate-web-module/templates/components/list-container.template.js.map +1 -0
  60. package/dist/scripts/generate-web-module/templates/components/list.template.d.ts +14 -0
  61. package/dist/scripts/generate-web-module/templates/components/list.template.d.ts.map +1 -0
  62. package/dist/scripts/generate-web-module/templates/components/list.template.js +84 -0
  63. package/dist/scripts/generate-web-module/templates/components/list.template.js.map +1 -0
  64. package/dist/scripts/generate-web-module/templates/components/multi-selector.template.d.ts +14 -0
  65. package/dist/scripts/generate-web-module/templates/components/multi-selector.template.d.ts.map +1 -0
  66. package/dist/scripts/generate-web-module/templates/components/multi-selector.template.js +184 -0
  67. package/dist/scripts/generate-web-module/templates/components/multi-selector.template.js.map +1 -0
  68. package/dist/scripts/generate-web-module/templates/components/selector.template.d.ts +14 -0
  69. package/dist/scripts/generate-web-module/templates/components/selector.template.d.ts.map +1 -0
  70. package/dist/scripts/generate-web-module/templates/components/selector.template.js +199 -0
  71. package/dist/scripts/generate-web-module/templates/components/selector.template.js.map +1 -0
  72. package/dist/scripts/generate-web-module/templates/context.template.d.ts +14 -0
  73. package/dist/scripts/generate-web-module/templates/context.template.d.ts.map +1 -0
  74. package/dist/scripts/generate-web-module/templates/context.template.js +121 -0
  75. package/dist/scripts/generate-web-module/templates/context.template.js.map +1 -0
  76. package/dist/scripts/generate-web-module/templates/data/fields.template.d.ts +14 -0
  77. package/dist/scripts/generate-web-module/templates/data/fields.template.d.ts.map +1 -0
  78. package/dist/scripts/generate-web-module/templates/data/fields.template.js +55 -0
  79. package/dist/scripts/generate-web-module/templates/data/fields.template.js.map +1 -0
  80. package/dist/scripts/generate-web-module/templates/data/index.d.ts +10 -0
  81. package/dist/scripts/generate-web-module/templates/data/index.d.ts.map +1 -0
  82. package/dist/scripts/generate-web-module/templates/data/index.js +26 -0
  83. package/dist/scripts/generate-web-module/templates/data/index.js.map +1 -0
  84. package/dist/scripts/generate-web-module/templates/data/interface.template.d.ts +14 -0
  85. package/dist/scripts/generate-web-module/templates/data/interface.template.d.ts.map +1 -0
  86. package/dist/scripts/generate-web-module/templates/data/interface.template.js +116 -0
  87. package/dist/scripts/generate-web-module/templates/data/interface.template.js.map +1 -0
  88. package/dist/scripts/generate-web-module/templates/data/model.template.d.ts +14 -0
  89. package/dist/scripts/generate-web-module/templates/data/model.template.d.ts.map +1 -0
  90. package/dist/scripts/generate-web-module/templates/data/model.template.js +274 -0
  91. package/dist/scripts/generate-web-module/templates/data/model.template.js.map +1 -0
  92. package/dist/scripts/generate-web-module/templates/data/service.template.d.ts +14 -0
  93. package/dist/scripts/generate-web-module/templates/data/service.template.d.ts.map +1 -0
  94. package/dist/scripts/generate-web-module/templates/data/service.template.js +168 -0
  95. package/dist/scripts/generate-web-module/templates/data/service.template.js.map +1 -0
  96. package/dist/scripts/generate-web-module/templates/index.d.ts +12 -0
  97. package/dist/scripts/generate-web-module/templates/index.d.ts.map +1 -0
  98. package/dist/scripts/generate-web-module/templates/index.js +37 -0
  99. package/dist/scripts/generate-web-module/templates/index.js.map +1 -0
  100. package/dist/scripts/generate-web-module/templates/module.template.d.ts +14 -0
  101. package/dist/scripts/generate-web-module/templates/module.template.d.ts.map +1 -0
  102. package/dist/scripts/generate-web-module/templates/module.template.js +64 -0
  103. package/dist/scripts/generate-web-module/templates/module.template.js.map +1 -0
  104. package/dist/scripts/generate-web-module/templates/pages/detail-page.template.d.ts +14 -0
  105. package/dist/scripts/generate-web-module/templates/pages/detail-page.template.d.ts.map +1 -0
  106. package/dist/scripts/generate-web-module/templates/pages/detail-page.template.js +65 -0
  107. package/dist/scripts/generate-web-module/templates/pages/detail-page.template.js.map +1 -0
  108. package/dist/scripts/generate-web-module/templates/pages/index.d.ts +8 -0
  109. package/dist/scripts/generate-web-module/templates/pages/index.d.ts.map +1 -0
  110. package/dist/scripts/generate-web-module/templates/pages/index.js +13 -0
  111. package/dist/scripts/generate-web-module/templates/pages/index.js.map +1 -0
  112. package/dist/scripts/generate-web-module/templates/pages/list-page.template.d.ts +14 -0
  113. package/dist/scripts/generate-web-module/templates/pages/list-page.template.d.ts.map +1 -0
  114. package/dist/scripts/generate-web-module/templates/pages/list-page.template.js +37 -0
  115. package/dist/scripts/generate-web-module/templates/pages/list-page.template.js.map +1 -0
  116. package/dist/scripts/generate-web-module/templates/table-hook.template.d.ts +14 -0
  117. package/dist/scripts/generate-web-module/templates/table-hook.template.d.ts.map +1 -0
  118. package/dist/scripts/generate-web-module/templates/table-hook.template.js +174 -0
  119. package/dist/scripts/generate-web-module/templates/table-hook.template.js.map +1 -0
  120. package/dist/scripts/generate-web-module/transformers/field-mapper.d.ts +55 -0
  121. package/dist/scripts/generate-web-module/transformers/field-mapper.d.ts.map +1 -0
  122. package/dist/scripts/generate-web-module/transformers/field-mapper.js +179 -0
  123. package/dist/scripts/generate-web-module/transformers/field-mapper.js.map +1 -0
  124. package/dist/scripts/generate-web-module/transformers/i18n-generator.d.ts +78 -0
  125. package/dist/scripts/generate-web-module/transformers/i18n-generator.d.ts.map +1 -0
  126. package/dist/scripts/generate-web-module/transformers/i18n-generator.js +182 -0
  127. package/dist/scripts/generate-web-module/transformers/i18n-generator.js.map +1 -0
  128. package/dist/scripts/generate-web-module/transformers/import-resolver.d.ts +106 -0
  129. package/dist/scripts/generate-web-module/transformers/import-resolver.d.ts.map +1 -0
  130. package/dist/scripts/generate-web-module/transformers/import-resolver.js +193 -0
  131. package/dist/scripts/generate-web-module/transformers/import-resolver.js.map +1 -0
  132. package/dist/scripts/generate-web-module/transformers/index.d.ts +12 -0
  133. package/dist/scripts/generate-web-module/transformers/index.d.ts.map +1 -0
  134. package/dist/scripts/generate-web-module/transformers/index.js +28 -0
  135. package/dist/scripts/generate-web-module/transformers/index.js.map +1 -0
  136. package/dist/scripts/generate-web-module/transformers/name-transformer.d.ts +60 -0
  137. package/dist/scripts/generate-web-module/transformers/name-transformer.d.ts.map +1 -0
  138. package/dist/scripts/generate-web-module/transformers/name-transformer.js +115 -0
  139. package/dist/scripts/generate-web-module/transformers/name-transformer.js.map +1 -0
  140. package/dist/scripts/generate-web-module/transformers/parent-detector.d.ts +57 -0
  141. package/dist/scripts/generate-web-module/transformers/parent-detector.d.ts.map +1 -0
  142. package/dist/scripts/generate-web-module/transformers/parent-detector.js +88 -0
  143. package/dist/scripts/generate-web-module/transformers/parent-detector.js.map +1 -0
  144. package/dist/scripts/generate-web-module/transformers/relationship-resolver.d.ts +68 -0
  145. package/dist/scripts/generate-web-module/transformers/relationship-resolver.d.ts.map +1 -0
  146. package/dist/scripts/generate-web-module/transformers/relationship-resolver.js +219 -0
  147. package/dist/scripts/generate-web-module/transformers/relationship-resolver.js.map +1 -0
  148. package/dist/scripts/generate-web-module/types/field-mapping.types.d.ts +68 -0
  149. package/dist/scripts/generate-web-module/types/field-mapping.types.d.ts.map +1 -0
  150. package/dist/scripts/generate-web-module/types/field-mapping.types.js +129 -0
  151. package/dist/scripts/generate-web-module/types/field-mapping.types.js.map +1 -0
  152. package/dist/scripts/generate-web-module/types/index.d.ts +9 -0
  153. package/dist/scripts/generate-web-module/types/index.d.ts.map +1 -0
  154. package/dist/scripts/generate-web-module/types/index.js +25 -0
  155. package/dist/scripts/generate-web-module/types/index.js.map +1 -0
  156. package/dist/scripts/generate-web-module/types/json-schema.interface.d.ts +40 -0
  157. package/dist/scripts/generate-web-module/types/json-schema.interface.d.ts.map +1 -0
  158. package/dist/scripts/generate-web-module/types/json-schema.interface.js +10 -0
  159. package/dist/scripts/generate-web-module/types/json-schema.interface.js.map +1 -0
  160. package/dist/scripts/generate-web-module/types/template-data.interface.d.ts +128 -0
  161. package/dist/scripts/generate-web-module/types/template-data.interface.d.ts.map +1 -0
  162. package/dist/scripts/generate-web-module/types/template-data.interface.js +9 -0
  163. package/dist/scripts/generate-web-module/types/template-data.interface.js.map +1 -0
  164. package/dist/scripts/generate-web-module/utils/bootstrapper-updater.d.ts +29 -0
  165. package/dist/scripts/generate-web-module/utils/bootstrapper-updater.d.ts.map +1 -0
  166. package/dist/scripts/generate-web-module/utils/bootstrapper-updater.js +153 -0
  167. package/dist/scripts/generate-web-module/utils/bootstrapper-updater.js.map +1 -0
  168. package/dist/scripts/generate-web-module/utils/file-writer.d.ts +38 -0
  169. package/dist/scripts/generate-web-module/utils/file-writer.d.ts.map +1 -0
  170. package/dist/scripts/generate-web-module/utils/file-writer.js +126 -0
  171. package/dist/scripts/generate-web-module/utils/file-writer.js.map +1 -0
  172. package/dist/scripts/generate-web-module/utils/i18n-updater.d.ts +28 -0
  173. package/dist/scripts/generate-web-module/utils/i18n-updater.d.ts.map +1 -0
  174. package/dist/scripts/generate-web-module/utils/i18n-updater.js +122 -0
  175. package/dist/scripts/generate-web-module/utils/i18n-updater.js.map +1 -0
  176. package/dist/scripts/generate-web-module/utils/index.d.ts +9 -0
  177. package/dist/scripts/generate-web-module/utils/index.d.ts.map +1 -0
  178. package/dist/scripts/generate-web-module/utils/index.js +20 -0
  179. package/dist/scripts/generate-web-module/utils/index.js.map +1 -0
  180. package/dist/scripts/generate-web-module/validators/json-schema-validator.d.ts +46 -0
  181. package/dist/scripts/generate-web-module/validators/json-schema-validator.d.ts.map +1 -0
  182. package/dist/scripts/generate-web-module/validators/json-schema-validator.js +265 -0
  183. package/dist/scripts/generate-web-module/validators/json-schema-validator.js.map +1 -0
  184. package/package.json +27 -21
  185. package/scripts/generate-web-module/generator.ts +363 -0
  186. package/scripts/generate-web-module/index.ts +49 -0
  187. package/scripts/generate-web-module/templates/components/container.template.ts +129 -0
  188. package/scripts/generate-web-module/templates/components/content.template.ts +40 -0
  189. package/scripts/generate-web-module/templates/components/deleter.template.ts +51 -0
  190. package/scripts/generate-web-module/templates/components/details.template.ts +115 -0
  191. package/scripts/generate-web-module/templates/components/editor.template.ts +495 -0
  192. package/scripts/generate-web-module/templates/components/index.ts +18 -0
  193. package/scripts/generate-web-module/templates/components/list-container.template.ts +30 -0
  194. package/scripts/generate-web-module/templates/components/list.template.ts +91 -0
  195. package/scripts/generate-web-module/templates/components/multi-selector.template.ts +184 -0
  196. package/scripts/generate-web-module/templates/components/selector.template.ts +199 -0
  197. package/scripts/generate-web-module/templates/context.template.ts +121 -0
  198. package/scripts/generate-web-module/templates/data/fields.template.ts +64 -0
  199. package/scripts/generate-web-module/templates/data/index.ts +10 -0
  200. package/scripts/generate-web-module/templates/data/interface.template.ts +136 -0
  201. package/scripts/generate-web-module/templates/data/model.template.ts +327 -0
  202. package/scripts/generate-web-module/templates/data/service.template.ts +185 -0
  203. package/scripts/generate-web-module/templates/index.ts +34 -0
  204. package/scripts/generate-web-module/templates/module.template.ts +69 -0
  205. package/scripts/generate-web-module/templates/pages/detail-page.template.ts +65 -0
  206. package/scripts/generate-web-module/templates/pages/index.ts +8 -0
  207. package/scripts/generate-web-module/templates/pages/list-page.template.ts +37 -0
  208. package/scripts/generate-web-module/templates/table-hook.template.ts +182 -0
  209. package/scripts/generate-web-module/transformers/field-mapper.ts +201 -0
  210. package/scripts/generate-web-module/transformers/i18n-generator.ts +199 -0
  211. package/scripts/generate-web-module/transformers/import-resolver.ts +250 -0
  212. package/scripts/generate-web-module/transformers/index.ts +12 -0
  213. package/scripts/generate-web-module/transformers/name-transformer.ts +115 -0
  214. package/scripts/generate-web-module/transformers/parent-detector.ts +87 -0
  215. package/scripts/generate-web-module/transformers/relationship-resolver.ts +221 -0
  216. package/scripts/generate-web-module/tsconfig.json +24 -0
  217. package/scripts/generate-web-module/types/field-mapping.types.ts +141 -0
  218. package/scripts/generate-web-module/types/index.ts +9 -0
  219. package/scripts/generate-web-module/types/json-schema.interface.ts +42 -0
  220. package/scripts/generate-web-module/types/template-data.interface.ts +164 -0
  221. package/scripts/generate-web-module/utils/bootstrapper-updater.ts +145 -0
  222. package/scripts/generate-web-module/utils/file-writer.ts +115 -0
  223. package/scripts/generate-web-module/utils/i18n-updater.ts +108 -0
  224. package/scripts/generate-web-module/utils/index.ts +9 -0
  225. package/scripts/generate-web-module/validators/json-schema-validator.ts +306 -0
  226. package/src/features/user/index.ts +1 -1
  227. package/dist/chunk-FYRFMABS.js.map +0 -1
  228. package/dist/chunk-MA2L2PL2.mjs.map +0 -1
  229. /package/dist/{BlockNoteEditor-4VOBTXWC.mjs.map → BlockNoteEditor-DC33K4IF.mjs.map} +0 -0
  230. /package/dist/{chunk-HP4Q5ZVG.mjs.map → chunk-Y4XI3AZR.mjs.map} +0 -0
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ /**
3
+ * Table Hook Template
4
+ *
5
+ * Generates use{Module}TableStructure.tsx for table column definitions.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.generateTableHookTemplate = generateTableHookTemplate;
9
+ /**
10
+ * Generate the table structure hook file content
11
+ *
12
+ * @param data - Frontend template data
13
+ * @returns Generated file content
14
+ */
15
+ function generateTableHookTemplate(data) {
16
+ const { names, fields, extendsContent, tableFieldNames } = data;
17
+ const fieldColumnEntries = generateFieldColumnEntries(data);
18
+ const hasAuthors = extendsContent;
19
+ const hasRelevance = fields.some((f) => f.name === "relevance");
20
+ return `"use client";
21
+
22
+ import { ${names.pascalCase}Fields } from "@/features/${data.targetDir}/${names.kebabCase}/data/${names.pascalCase}Fields";
23
+ import { ${names.pascalCase}Interface } from "@/features/${data.targetDir}/${names.kebabCase}/data/${names.pascalCase}Interface";
24
+ import { cellDate, cellId${hasAuthors ? ", ContributorsList" : ""} } from "@carlonicora/nextjs-jsonapi/components";
25
+ import { Modules } from "@carlonicora/nextjs-jsonapi/core";${extendsContent ? `
26
+ import { ContentInterface } from "@carlonicora/nextjs-jsonapi/features";` : ""}
27
+ import {
28
+ registerTableGenerator,
29
+ TableContent,
30
+ usePageUrlGenerator,
31
+ UseTableStructureHook,
32
+ } from "@carlonicora/nextjs-jsonapi/hooks";
33
+ import { Link, Tooltip, TooltipContent, TooltipTrigger } from "@carlonicora/nextjs-jsonapi/shadcnui";
34
+ import { ColumnDef } from "@tanstack/react-table";
35
+ import { useTranslations } from "next-intl";
36
+ import { useMemo } from "react";
37
+
38
+ export const use${names.pascalCase}TableStructure: UseTableStructureHook<${names.pascalCase}Interface, ${names.pascalCase}Fields> = (params) => {
39
+ const t = useTranslations();
40
+ const generateUrl = usePageUrlGenerator();
41
+
42
+ const tableData = useMemo(() => {
43
+ return params.data.map((${names.camelCase}: ${names.pascalCase}Interface) => {
44
+ const entry: TableContent<${names.pascalCase}Interface> = {
45
+ jsonApiData: ${names.camelCase},
46
+ };
47
+ entry[${names.pascalCase}Fields.${names.camelCase}Id] = ${names.camelCase}.id;
48
+ params.fields.forEach((field) => {
49
+ entry[field] = ${names.camelCase}[field as keyof ${names.pascalCase}Interface];
50
+ });
51
+ return entry;
52
+ });
53
+ }, [params.data, params.fields]);
54
+
55
+ const fieldColumnMap: Partial<Record<${names.pascalCase}Fields, () => any>> = {
56
+ [${names.pascalCase}Fields.${names.camelCase}Id]: () =>
57
+ cellId({
58
+ name: "${names.camelCase}Id",
59
+ checkedIds: params.checkedIds,
60
+ toggleId: params.toggleId,
61
+ }),
62
+ ${fieldColumnEntries}
63
+ [${names.pascalCase}Fields.createdAt]: () =>
64
+ cellDate({
65
+ name: "createdAt",
66
+ title: t(\`generic.date.create\`),
67
+ }),
68
+ [${names.pascalCase}Fields.updatedAt]: () =>
69
+ cellDate({
70
+ name: "updatedAt",
71
+ title: t(\`generic.date.update\`),
72
+ }),
73
+ };
74
+
75
+ const columns = useMemo(() => {
76
+ return params.fields.map((field) => fieldColumnMap[field]?.()).filter((col) => col !== undefined) as ColumnDef<
77
+ TableContent<${names.pascalCase}Interface>
78
+ >[];
79
+ }, [params.fields, fieldColumnMap, t, generateUrl]);
80
+
81
+ return useMemo(() => ({ data: tableData, columns: columns }), [tableData, columns]);
82
+ };
83
+
84
+ registerTableGenerator(Modules.${names.pascalCase}, use${names.pascalCase}TableStructure);
85
+ `;
86
+ }
87
+ /**
88
+ * Generate field column map entries
89
+ */
90
+ function generateFieldColumnEntries(data) {
91
+ const { names, fields, extendsContent } = data;
92
+ const entries = [];
93
+ // Name field (with link and tooltip for tldr if Content-extending)
94
+ if (fields.some((f) => f.name === "name") || extendsContent) {
95
+ entries.push(` [${names.pascalCase}Fields.name]: () => ({
96
+ id: "name",
97
+ accessorKey: "name",
98
+ header: t(\`features.${names.camelCase}.fields.name.label\`),
99
+ cell: ({ row }: { row: TableContent<${names.pascalCase}Interface> }) => {
100
+ const ${names.camelCase}: ${names.pascalCase}Interface = row.original.jsonApiData;
101
+ return (
102
+ <Tooltip>
103
+ <TooltipTrigger>
104
+ <Link href={generateUrl({ page: Modules.${names.pascalCase}, id: ${names.camelCase}.id })}>{${names.camelCase}.name}</Link>
105
+ </TooltipTrigger>${extendsContent ? `
106
+ <TooltipContent>{${names.camelCase}.tldr}</TooltipContent>` : `
107
+ <TooltipContent>{${names.camelCase}.name}</TooltipContent>`}
108
+ </Tooltip>
109
+ );
110
+ },
111
+ enableSorting: false,
112
+ enableHiding: false,
113
+ }),`);
114
+ }
115
+ // Authors field for Content-extending modules
116
+ if (extendsContent) {
117
+ entries.push(` [${names.pascalCase}Fields.authors]: () => ({
118
+ id: "authors",
119
+ accessorKey: "authors",
120
+ header: t(\`generic.relationships.author.label\`),
121
+ cell: ({ row }: { row: TableContent<ContentInterface> }) => {
122
+ const content: ContentInterface = row.original.jsonApiData;
123
+ return <ContributorsList content={content} />;
124
+ },
125
+ enableSorting: false,
126
+ enableHiding: false,
127
+ }),`);
128
+ }
129
+ // Other displayable fields (excluding id, name, tldr, abstract, content, dates)
130
+ const displayableFields = fields.filter((f) => !["id", "name", "tldr", "abstract", "content", "createdAt", "updatedAt"].includes(f.name));
131
+ displayableFields.forEach((field) => {
132
+ if (field.type === "string") {
133
+ entries.push(` [${names.pascalCase}Fields.${field.name}]: () => ({
134
+ id: "${field.name}",
135
+ accessorKey: "${field.name}",
136
+ header: t(\`features.${names.camelCase}.fields.${field.name}.label\`),
137
+ cell: ({ row }: { row: TableContent<${names.pascalCase}Interface> }) => {
138
+ const ${names.camelCase}: ${names.pascalCase}Interface = row.original.jsonApiData;
139
+ return <span>{${names.camelCase}.${field.name}}</span>;
140
+ },
141
+ enableSorting: false,
142
+ enableHiding: false,
143
+ }),`);
144
+ }
145
+ else if (field.type === "boolean") {
146
+ entries.push(` [${names.pascalCase}Fields.${field.name}]: () => ({
147
+ id: "${field.name}",
148
+ accessorKey: "${field.name}",
149
+ header: t(\`features.${names.camelCase}.fields.${field.name}.label\`),
150
+ cell: ({ row }: { row: TableContent<${names.pascalCase}Interface> }) => {
151
+ const ${names.camelCase}: ${names.pascalCase}Interface = row.original.jsonApiData;
152
+ return <span>{${names.camelCase}.${field.name} ? t(\`generic.yes\`) : t(\`generic.no\`)}</span>;
153
+ },
154
+ enableSorting: false,
155
+ enableHiding: false,
156
+ }),`);
157
+ }
158
+ else if (field.type === "number") {
159
+ entries.push(` [${names.pascalCase}Fields.${field.name}]: () => ({
160
+ id: "${field.name}",
161
+ accessorKey: "${field.name}",
162
+ header: t(\`features.${names.camelCase}.fields.${field.name}.label\`),
163
+ cell: ({ row }: { row: TableContent<${names.pascalCase}Interface> }) => {
164
+ const ${names.camelCase}: ${names.pascalCase}Interface = row.original.jsonApiData;
165
+ return <span>{${names.camelCase}.${field.name}?.toString()}</span>;
166
+ },
167
+ enableSorting: false,
168
+ enableHiding: false,
169
+ }),`);
170
+ }
171
+ });
172
+ return entries.join("\n");
173
+ }
174
+ //# sourceMappingURL=table-hook.template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-hook.template.js","sourceRoot":"","sources":["../../../../scripts/generate-web-module/templates/table-hook.template.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAWH,8DAyEC;AA/ED;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,IAA0B;IAClE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAEhE,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,cAAc,CAAC;IAClC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAEhE,OAAO;;WAEE,KAAK,CAAC,UAAU,6BAA6B,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,SAAS,KAAK,CAAC,UAAU;WACvG,KAAK,CAAC,UAAU,gCAAgC,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,SAAS,KAAK,CAAC,UAAU;2BAC1F,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE;6DACJ,cAAc,CAAC,CAAC,CAAC;yEACL,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;kBAY5D,KAAK,CAAC,UAAU,yCAAyC,KAAK,CAAC,UAAU,cAAc,KAAK,CAAC,UAAU;;;;;8BAK3F,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,UAAU;kCAChC,KAAK,CAAC,UAAU;uBAC3B,KAAK,CAAC,SAAS;;cAExB,KAAK,CAAC,UAAU,UAAU,KAAK,CAAC,SAAS,SAAS,KAAK,CAAC,SAAS;;yBAEtD,KAAK,CAAC,SAAS,mBAAmB,KAAK,CAAC,UAAU;;;;;;yCAMlC,KAAK,CAAC,UAAU;OAClD,KAAK,CAAC,UAAU,UAAU,KAAK,CAAC,SAAS;;iBAE/B,KAAK,CAAC,SAAS;;;;EAI9B,kBAAkB;OACb,KAAK,CAAC,UAAU;;;;;OAKhB,KAAK,CAAC,UAAU;;;;;;;;;qBASF,KAAK,CAAC,UAAU;;;;;;;iCAOJ,KAAK,CAAC,UAAU,QAAQ,KAAK,CAAC,UAAU;CACxE,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CAAC,IAA0B;IAC5D,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAC/C,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,mEAAmE;IACnE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,UAAU;;;6BAGZ,KAAK,CAAC,SAAS;4CACA,KAAK,CAAC,UAAU;gBAC5C,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,UAAU;;;;wDAII,KAAK,CAAC,UAAU,SAAS,KAAK,CAAC,SAAS,YAAY,KAAK,CAAC,SAAS;+BAC5F,cAAc,CAAC,CAAC,CAAC;+BACjB,KAAK,CAAC,SAAS,yBAAyB,CAAC,CAAC,CAAC;+BAC3C,KAAK,CAAC,SAAS,yBAAyB;;;;;;QAM/D,CAAC,CAAC;IACR,CAAC;IAED,8CAA8C;IAC9C,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,UAAU;;;;;;;;;;QAUjC,CAAC,CAAC;IACR,CAAC;IAED,gFAAgF;IAChF,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CACjG,CAAC;IAEF,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAClC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,UAAU,UAAU,KAAK,CAAC,IAAI;aAClD,KAAK,CAAC,IAAI;sBACD,KAAK,CAAC,IAAI;6BACH,KAAK,CAAC,SAAS,WAAW,KAAK,CAAC,IAAI;4CACrB,KAAK,CAAC,UAAU;gBAC5C,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,UAAU;wBAC5B,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI;;;;QAI7C,CAAC,CAAC;QACN,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,UAAU,UAAU,KAAK,CAAC,IAAI;aAClD,KAAK,CAAC,IAAI;sBACD,KAAK,CAAC,IAAI;6BACH,KAAK,CAAC,SAAS,WAAW,KAAK,CAAC,IAAI;4CACrB,KAAK,CAAC,UAAU;gBAC5C,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,UAAU;wBAC5B,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI;;;;QAI7C,CAAC,CAAC;QACN,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,UAAU,UAAU,KAAK,CAAC,IAAI;aAClD,KAAK,CAAC,IAAI;sBACD,KAAK,CAAC,IAAI;6BACH,KAAK,CAAC,SAAS,WAAW,KAAK,CAAC,IAAI;4CACrB,KAAK,CAAC,UAAU;gBAC5C,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,UAAU;wBAC5B,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI;;;;QAI7C,CAAC,CAAC;QACN,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Field Mapper
3
+ *
4
+ * Maps JSON schema fields to their TypeScript, Zod, and form component equivalents.
5
+ */
6
+ import { JsonFieldDefinition } from "../types/json-schema.interface";
7
+ import { FrontendField } from "../types/template-data.interface";
8
+ /**
9
+ * Map a JSON field definition to a frontend field
10
+ *
11
+ * @param field - JSON field definition
12
+ * @param moduleName - Module name for i18n error messages
13
+ * @returns Frontend field representation
14
+ */
15
+ export declare function mapField(field: JsonFieldDefinition, moduleName: string): FrontendField;
16
+ /**
17
+ * Map all fields from JSON schema
18
+ *
19
+ * @param fields - Array of JSON field definitions
20
+ * @param moduleName - Module name for i18n error messages
21
+ * @returns Array of frontend field representations
22
+ */
23
+ export declare function mapFields(fields: JsonFieldDefinition[], moduleName: string): FrontendField[];
24
+ /**
25
+ * Build complete Zod schema string for a field
26
+ *
27
+ * @param field - JSON field definition
28
+ * @param moduleName - Module name (lowercase) for i18n keys
29
+ * @returns Zod schema code string
30
+ */
31
+ export declare function buildZodSchema(field: JsonFieldDefinition, moduleName: string): string;
32
+ /**
33
+ * Get the form JSX for a field
34
+ *
35
+ * @param field - Frontend field
36
+ * @param moduleName - Module name for i18n keys
37
+ * @returns JSX code for the form field
38
+ */
39
+ export declare function getFormFieldJsx(field: FrontendField, moduleName: string): string;
40
+ /**
41
+ * Filter out inherited fields that shouldn't be generated
42
+ *
43
+ * @param fields - Array of frontend fields
44
+ * @param inheritedFields - Array of field names inherited from parent
45
+ * @returns Filtered array of fields
46
+ */
47
+ export declare function filterInheritedFields(fields: FrontendField[], inheritedFields: string[]): FrontendField[];
48
+ /**
49
+ * Get fields that should be included in the editor form
50
+ *
51
+ * @param fields - Array of frontend fields
52
+ * @returns Fields suitable for form editing
53
+ */
54
+ export declare function getEditorFields(fields: FrontendField[]): FrontendField[];
55
+ //# sourceMappingURL=field-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-mapper.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/transformers/field-mapper.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAqB,MAAM,kCAAkC,CAAC;AASpF;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,CAatF;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,mBAAmB,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,EAAE,CAE5F;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CA8CrF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CA+DhF;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EAAE,EACvB,eAAe,EAAE,MAAM,EAAE,GACxB,aAAa,EAAE,CAEjB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAIxE"}
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ /**
3
+ * Field Mapper
4
+ *
5
+ * Maps JSON schema fields to their TypeScript, Zod, and form component equivalents.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.mapField = mapField;
9
+ exports.mapFields = mapFields;
10
+ exports.buildZodSchema = buildZodSchema;
11
+ exports.getFormFieldJsx = getFormFieldJsx;
12
+ exports.filterInheritedFields = filterInheritedFields;
13
+ exports.getEditorFields = getEditorFields;
14
+ const field_mapping_types_1 = require("../types/field-mapping.types");
15
+ /**
16
+ * Map a JSON field definition to a frontend field
17
+ *
18
+ * @param field - JSON field definition
19
+ * @param moduleName - Module name for i18n error messages
20
+ * @returns Frontend field representation
21
+ */
22
+ function mapField(field, moduleName) {
23
+ const formComponent = (0, field_mapping_types_1.getFormComponent)(field.name, field.type);
24
+ const isContent = (0, field_mapping_types_1.isContentField)(field.name);
25
+ return {
26
+ name: field.name,
27
+ type: field.type,
28
+ tsType: (0, field_mapping_types_1.getTsType)(field.type),
29
+ zodSchema: buildZodSchema(field, moduleName),
30
+ formComponent,
31
+ nullable: field.nullable,
32
+ isContentField: isContent,
33
+ };
34
+ }
35
+ /**
36
+ * Map all fields from JSON schema
37
+ *
38
+ * @param fields - Array of JSON field definitions
39
+ * @param moduleName - Module name for i18n error messages
40
+ * @returns Array of frontend field representations
41
+ */
42
+ function mapFields(fields, moduleName) {
43
+ return fields.map((field) => mapField(field, moduleName));
44
+ }
45
+ /**
46
+ * Build complete Zod schema string for a field
47
+ *
48
+ * @param field - JSON field definition
49
+ * @param moduleName - Module name (lowercase) for i18n keys
50
+ * @returns Zod schema code string
51
+ */
52
+ function buildZodSchema(field, moduleName) {
53
+ // Content fields always use z.any()
54
+ if ((0, field_mapping_types_1.isContentField)(field.name)) {
55
+ return "z.any()";
56
+ }
57
+ const base = (0, field_mapping_types_1.getZodBase)(field.type);
58
+ // String fields with validation
59
+ if (field.type === "string") {
60
+ if (field.nullable) {
61
+ return `${base}.optional()`;
62
+ }
63
+ // Required string with error message
64
+ return `${base}.min(1, { message: t(\`features.${moduleName.toLowerCase()}.fields.${field.name}.error\`) })`;
65
+ }
66
+ // Number fields
67
+ if (field.type === "number") {
68
+ if (field.nullable) {
69
+ return `${base}.optional()`;
70
+ }
71
+ return base;
72
+ }
73
+ // Boolean fields
74
+ if (field.type === "boolean") {
75
+ if (field.nullable) {
76
+ return `${base}.optional()`;
77
+ }
78
+ return base;
79
+ }
80
+ // Date fields
81
+ if (field.type === "date") {
82
+ if (field.nullable) {
83
+ return `z.coerce.date().optional()`;
84
+ }
85
+ return `z.coerce.date()`;
86
+ }
87
+ // Default case
88
+ if (field.nullable) {
89
+ return `${base}.optional()`;
90
+ }
91
+ return base;
92
+ }
93
+ /**
94
+ * Get the form JSX for a field
95
+ *
96
+ * @param field - Frontend field
97
+ * @param moduleName - Module name for i18n keys
98
+ * @returns JSX code for the form field
99
+ */
100
+ function getFormFieldJsx(field, moduleName) {
101
+ const lowerModuleName = moduleName.toLowerCase();
102
+ const isRequired = !field.nullable;
103
+ switch (field.formComponent) {
104
+ case "BlockNoteEditor":
105
+ return `<FormContainerGeneric form={form} id="${field.name}" name={t(\`features.${lowerModuleName}.fields.${field.name}.label\`)}>
106
+ <BlockNoteEditorContainer
107
+ id={form.getValues("id")}
108
+ type="${lowerModuleName}"
109
+ initialContent={form.getValues("${field.name}")}
110
+ onChange={(content, isEmpty, hasUnresolvedDiff) => {
111
+ form.setValue("${field.name}", content);
112
+ }}
113
+ placeholder={t(\`features.${lowerModuleName}.fields.${field.name}.placeholder\`)}
114
+ bordered
115
+ />
116
+ </FormContainerGeneric>`;
117
+ case "FormTextarea":
118
+ return `<FormTextarea
119
+ form={form}
120
+ id="${field.name}"
121
+ name={t(\`features.${lowerModuleName}.fields.${field.name}.label\`)}
122
+ placeholder={t(\`features.${lowerModuleName}.fields.${field.name}.placeholder\`)}
123
+ ${isRequired ? "isRequired" : ""}
124
+ />`;
125
+ case "Checkbox":
126
+ return `<FormCheckbox
127
+ form={form}
128
+ id="${field.name}"
129
+ name={t(\`features.${lowerModuleName}.fields.${field.name}.label\`)}
130
+ />`;
131
+ case "DatePicker":
132
+ return `<FormDatePicker
133
+ form={form}
134
+ id="${field.name}"
135
+ name={t(\`features.${lowerModuleName}.fields.${field.name}.label\`)}
136
+ ${isRequired ? "isRequired" : ""}
137
+ />`;
138
+ case "FormInputNumber":
139
+ return `<FormInput
140
+ form={form}
141
+ id="${field.name}"
142
+ name={t(\`features.${lowerModuleName}.fields.${field.name}.label\`)}
143
+ placeholder={t(\`features.${lowerModuleName}.fields.${field.name}.placeholder\`)}
144
+ type="number"
145
+ ${isRequired ? "isRequired" : ""}
146
+ />`;
147
+ case "FormInput":
148
+ default:
149
+ return `<FormInput
150
+ form={form}
151
+ id="${field.name}"
152
+ name={t(\`features.${lowerModuleName}.fields.${field.name}.label\`)}
153
+ placeholder={t(\`features.${lowerModuleName}.fields.${field.name}.placeholder\`)}
154
+ ${isRequired ? "isRequired" : ""}
155
+ />`;
156
+ }
157
+ }
158
+ /**
159
+ * Filter out inherited fields that shouldn't be generated
160
+ *
161
+ * @param fields - Array of frontend fields
162
+ * @param inheritedFields - Array of field names inherited from parent
163
+ * @returns Filtered array of fields
164
+ */
165
+ function filterInheritedFields(fields, inheritedFields) {
166
+ return fields.filter((f) => !inheritedFields.includes(f.name));
167
+ }
168
+ /**
169
+ * Get fields that should be included in the editor form
170
+ *
171
+ * @param fields - Array of frontend fields
172
+ * @returns Fields suitable for form editing
173
+ */
174
+ function getEditorFields(fields) {
175
+ // Exclude auto-generated fields like createdAt, updatedAt
176
+ const excludeFields = ["createdAt", "updatedAt", "id"];
177
+ return fields.filter((f) => !excludeFields.includes(f.name));
178
+ }
179
+ //# sourceMappingURL=field-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-mapper.js","sourceRoot":"","sources":["../../../../scripts/generate-web-module/transformers/field-mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * i18n Generator
3
+ *
4
+ * Generates internationalization keys and messages for a module.
5
+ */
6
+ import { FrontendField, FrontendRelationship, I18nKeySet, NameTransforms } from "../types/template-data.interface";
7
+ /**
8
+ * Generate complete i18n key set for a module
9
+ *
10
+ * @param names - Name transforms
11
+ * @param fields - Array of frontend fields
12
+ * @param relationships - Array of frontend relationships
13
+ * @returns i18n key set
14
+ */
15
+ export declare function generateI18nKeys(names: NameTransforms, fields: FrontendField[], relationships: FrontendRelationship[]): I18nKeySet;
16
+ /**
17
+ * Build the i18n message object to merge into en.json
18
+ *
19
+ * @param i18nKeys - i18n key set
20
+ * @returns Object structure for en.json
21
+ */
22
+ export declare function buildI18nMessages(i18nKeys: I18nKeySet): Record<string, any>;
23
+ /**
24
+ * Get the translation key path for a field label
25
+ *
26
+ * @param moduleName - Module name (lowercase)
27
+ * @param fieldName - Field name
28
+ * @returns Translation key path
29
+ */
30
+ export declare function getFieldLabelKey(moduleName: string, fieldName: string): string;
31
+ /**
32
+ * Get the translation key path for a field placeholder
33
+ *
34
+ * @param moduleName - Module name (lowercase)
35
+ * @param fieldName - Field name
36
+ * @returns Translation key path
37
+ */
38
+ export declare function getFieldPlaceholderKey(moduleName: string, fieldName: string): string;
39
+ /**
40
+ * Get the translation key path for a field error
41
+ *
42
+ * @param moduleName - Module name (lowercase)
43
+ * @param fieldName - Field name
44
+ * @returns Translation key path
45
+ */
46
+ export declare function getFieldErrorKey(moduleName: string, fieldName: string): string;
47
+ /**
48
+ * Get the translation key path for type pluralization
49
+ *
50
+ * @param pluralKebab - Plural kebab-case name
51
+ * @returns Translation key path
52
+ */
53
+ export declare function getTypeKey(pluralKebab: string): string;
54
+ /**
55
+ * Generate translation call for use in templates
56
+ *
57
+ * @param keyPath - Full translation key path
58
+ * @param params - Optional parameters for ICU messages
59
+ * @returns Translation function call as string
60
+ */
61
+ export declare function generateTranslationCall(keyPath: string, params?: Record<string, any>): string;
62
+ /**
63
+ * Merge i18n messages into existing messages object
64
+ * This performs a deep merge, preserving existing keys
65
+ *
66
+ * @param existing - Existing messages object
67
+ * @param newMessages - New messages to merge
68
+ * @returns Merged messages object
69
+ */
70
+ export declare function mergeI18nMessages(existing: Record<string, any>, newMessages: Record<string, any>): Record<string, any>;
71
+ /**
72
+ * Sort object keys alphabetically (for consistent output)
73
+ *
74
+ * @param obj - Object to sort
75
+ * @returns New object with sorted keys
76
+ */
77
+ export declare function sortObjectKeys(obj: Record<string, any>): Record<string, any>;
78
+ //# sourceMappingURL=i18n-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n-generator.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/transformers/i18n-generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAGnH;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,aAAa,EAAE,EACvB,aAAa,EAAE,oBAAoB,EAAE,GACpC,UAAU,CAwCZ;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAY3E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,MAAM,CAMR;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAsBrB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAa5E"}