@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.
- package/dist/{BlockNoteEditor-6NVBI7XL.js → BlockNoteEditor-CNXQ3WL3.js} +7 -7
- package/dist/{BlockNoteEditor-6NVBI7XL.js.map → BlockNoteEditor-CNXQ3WL3.js.map} +1 -1
- package/dist/{BlockNoteEditor-4VOBTXWC.mjs → BlockNoteEditor-DC33K4IF.mjs} +3 -3
- package/dist/{chunk-KPRHIJO6.js → chunk-KDFDGXCX.js} +53 -53
- package/dist/{chunk-KPRHIJO6.js.map → chunk-KDFDGXCX.js.map} +1 -1
- package/dist/{chunk-FYRFMABS.js → chunk-L6LH7WA4.js} +21 -2
- package/dist/chunk-L6LH7WA4.js.map +1 -0
- package/dist/{chunk-MA2L2PL2.mjs → chunk-MHVXFWZY.mjs} +20 -1
- package/dist/chunk-MHVXFWZY.mjs.map +1 -0
- package/dist/{chunk-HP4Q5ZVG.mjs → chunk-Y4XI3AZR.mjs} +3 -3
- package/dist/client/index.js +3 -3
- package/dist/client/index.mjs +2 -2
- package/dist/components/index.js +3 -3
- package/dist/components/index.mjs +2 -2
- package/dist/contexts/index.js +3 -3
- package/dist/contexts/index.mjs +2 -2
- package/dist/features/index.d.mts +3 -1
- package/dist/features/index.d.ts +3 -1
- package/dist/features/index.js +4 -2
- package/dist/features/index.js.map +1 -1
- package/dist/features/index.mjs +3 -1
- package/dist/hooks/index.js +3 -3
- package/dist/hooks/index.mjs +2 -2
- package/dist/scripts/generate-web-module/generator.d.ts +15 -0
- package/dist/scripts/generate-web-module/generator.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/generator.js +320 -0
- package/dist/scripts/generate-web-module/generator.js.map +1 -0
- package/dist/scripts/generate-web-module/index.d.ts +16 -0
- package/dist/scripts/generate-web-module/index.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/index.js +80 -0
- package/dist/scripts/generate-web-module/index.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/container.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/components/container.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/container.template.js +124 -0
- package/dist/scripts/generate-web-module/templates/components/container.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/content.template.d.ts +15 -0
- package/dist/scripts/generate-web-module/templates/components/content.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/content.template.js +39 -0
- package/dist/scripts/generate-web-module/templates/components/content.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/deleter.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/components/deleter.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/deleter.template.js +51 -0
- package/dist/scripts/generate-web-module/templates/components/deleter.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/details.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/components/details.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/details.template.js +109 -0
- package/dist/scripts/generate-web-module/templates/components/details.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/editor.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/components/editor.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/editor.template.js +459 -0
- package/dist/scripts/generate-web-module/templates/components/editor.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/index.d.ts +15 -0
- package/dist/scripts/generate-web-module/templates/components/index.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/index.js +29 -0
- package/dist/scripts/generate-web-module/templates/components/index.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/list-container.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/components/list-container.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/list-container.template.js +30 -0
- package/dist/scripts/generate-web-module/templates/components/list-container.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/list.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/components/list.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/list.template.js +84 -0
- package/dist/scripts/generate-web-module/templates/components/list.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/multi-selector.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/components/multi-selector.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/multi-selector.template.js +184 -0
- package/dist/scripts/generate-web-module/templates/components/multi-selector.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/selector.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/components/selector.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/selector.template.js +199 -0
- package/dist/scripts/generate-web-module/templates/components/selector.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/context.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/context.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/context.template.js +121 -0
- package/dist/scripts/generate-web-module/templates/context.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/fields.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/data/fields.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/fields.template.js +55 -0
- package/dist/scripts/generate-web-module/templates/data/fields.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/index.d.ts +10 -0
- package/dist/scripts/generate-web-module/templates/data/index.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/index.js +26 -0
- package/dist/scripts/generate-web-module/templates/data/index.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/interface.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/data/interface.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/interface.template.js +116 -0
- package/dist/scripts/generate-web-module/templates/data/interface.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/model.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/data/model.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/model.template.js +274 -0
- package/dist/scripts/generate-web-module/templates/data/model.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/service.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/data/service.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/service.template.js +168 -0
- package/dist/scripts/generate-web-module/templates/data/service.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/index.d.ts +12 -0
- package/dist/scripts/generate-web-module/templates/index.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/index.js +37 -0
- package/dist/scripts/generate-web-module/templates/index.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/module.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/module.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/module.template.js +64 -0
- package/dist/scripts/generate-web-module/templates/module.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/pages/detail-page.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/pages/detail-page.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/pages/detail-page.template.js +65 -0
- package/dist/scripts/generate-web-module/templates/pages/detail-page.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/pages/index.d.ts +8 -0
- package/dist/scripts/generate-web-module/templates/pages/index.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/pages/index.js +13 -0
- package/dist/scripts/generate-web-module/templates/pages/index.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/pages/list-page.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/pages/list-page.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/pages/list-page.template.js +37 -0
- package/dist/scripts/generate-web-module/templates/pages/list-page.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/table-hook.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/table-hook.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/table-hook.template.js +174 -0
- package/dist/scripts/generate-web-module/templates/table-hook.template.js.map +1 -0
- package/dist/scripts/generate-web-module/transformers/field-mapper.d.ts +55 -0
- package/dist/scripts/generate-web-module/transformers/field-mapper.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/transformers/field-mapper.js +179 -0
- package/dist/scripts/generate-web-module/transformers/field-mapper.js.map +1 -0
- package/dist/scripts/generate-web-module/transformers/i18n-generator.d.ts +78 -0
- package/dist/scripts/generate-web-module/transformers/i18n-generator.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/transformers/i18n-generator.js +182 -0
- package/dist/scripts/generate-web-module/transformers/i18n-generator.js.map +1 -0
- package/dist/scripts/generate-web-module/transformers/import-resolver.d.ts +106 -0
- package/dist/scripts/generate-web-module/transformers/import-resolver.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/transformers/import-resolver.js +193 -0
- package/dist/scripts/generate-web-module/transformers/import-resolver.js.map +1 -0
- package/dist/scripts/generate-web-module/transformers/index.d.ts +12 -0
- package/dist/scripts/generate-web-module/transformers/index.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/transformers/index.js +28 -0
- package/dist/scripts/generate-web-module/transformers/index.js.map +1 -0
- package/dist/scripts/generate-web-module/transformers/name-transformer.d.ts +60 -0
- package/dist/scripts/generate-web-module/transformers/name-transformer.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/transformers/name-transformer.js +115 -0
- package/dist/scripts/generate-web-module/transformers/name-transformer.js.map +1 -0
- package/dist/scripts/generate-web-module/transformers/parent-detector.d.ts +57 -0
- package/dist/scripts/generate-web-module/transformers/parent-detector.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/transformers/parent-detector.js +88 -0
- package/dist/scripts/generate-web-module/transformers/parent-detector.js.map +1 -0
- package/dist/scripts/generate-web-module/transformers/relationship-resolver.d.ts +68 -0
- package/dist/scripts/generate-web-module/transformers/relationship-resolver.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/transformers/relationship-resolver.js +219 -0
- package/dist/scripts/generate-web-module/transformers/relationship-resolver.js.map +1 -0
- package/dist/scripts/generate-web-module/types/field-mapping.types.d.ts +68 -0
- package/dist/scripts/generate-web-module/types/field-mapping.types.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/types/field-mapping.types.js +129 -0
- package/dist/scripts/generate-web-module/types/field-mapping.types.js.map +1 -0
- package/dist/scripts/generate-web-module/types/index.d.ts +9 -0
- package/dist/scripts/generate-web-module/types/index.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/types/index.js +25 -0
- package/dist/scripts/generate-web-module/types/index.js.map +1 -0
- package/dist/scripts/generate-web-module/types/json-schema.interface.d.ts +40 -0
- package/dist/scripts/generate-web-module/types/json-schema.interface.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/types/json-schema.interface.js +10 -0
- package/dist/scripts/generate-web-module/types/json-schema.interface.js.map +1 -0
- package/dist/scripts/generate-web-module/types/template-data.interface.d.ts +128 -0
- package/dist/scripts/generate-web-module/types/template-data.interface.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/types/template-data.interface.js +9 -0
- package/dist/scripts/generate-web-module/types/template-data.interface.js.map +1 -0
- package/dist/scripts/generate-web-module/utils/bootstrapper-updater.d.ts +29 -0
- package/dist/scripts/generate-web-module/utils/bootstrapper-updater.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/utils/bootstrapper-updater.js +153 -0
- package/dist/scripts/generate-web-module/utils/bootstrapper-updater.js.map +1 -0
- package/dist/scripts/generate-web-module/utils/file-writer.d.ts +38 -0
- package/dist/scripts/generate-web-module/utils/file-writer.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/utils/file-writer.js +126 -0
- package/dist/scripts/generate-web-module/utils/file-writer.js.map +1 -0
- package/dist/scripts/generate-web-module/utils/i18n-updater.d.ts +28 -0
- package/dist/scripts/generate-web-module/utils/i18n-updater.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/utils/i18n-updater.js +122 -0
- package/dist/scripts/generate-web-module/utils/i18n-updater.js.map +1 -0
- package/dist/scripts/generate-web-module/utils/index.d.ts +9 -0
- package/dist/scripts/generate-web-module/utils/index.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/utils/index.js +20 -0
- package/dist/scripts/generate-web-module/utils/index.js.map +1 -0
- package/dist/scripts/generate-web-module/validators/json-schema-validator.d.ts +46 -0
- package/dist/scripts/generate-web-module/validators/json-schema-validator.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/validators/json-schema-validator.js +265 -0
- package/dist/scripts/generate-web-module/validators/json-schema-validator.js.map +1 -0
- package/package.json +27 -21
- package/scripts/generate-web-module/generator.ts +363 -0
- package/scripts/generate-web-module/index.ts +49 -0
- package/scripts/generate-web-module/templates/components/container.template.ts +129 -0
- package/scripts/generate-web-module/templates/components/content.template.ts +40 -0
- package/scripts/generate-web-module/templates/components/deleter.template.ts +51 -0
- package/scripts/generate-web-module/templates/components/details.template.ts +115 -0
- package/scripts/generate-web-module/templates/components/editor.template.ts +495 -0
- package/scripts/generate-web-module/templates/components/index.ts +18 -0
- package/scripts/generate-web-module/templates/components/list-container.template.ts +30 -0
- package/scripts/generate-web-module/templates/components/list.template.ts +91 -0
- package/scripts/generate-web-module/templates/components/multi-selector.template.ts +184 -0
- package/scripts/generate-web-module/templates/components/selector.template.ts +199 -0
- package/scripts/generate-web-module/templates/context.template.ts +121 -0
- package/scripts/generate-web-module/templates/data/fields.template.ts +64 -0
- package/scripts/generate-web-module/templates/data/index.ts +10 -0
- package/scripts/generate-web-module/templates/data/interface.template.ts +136 -0
- package/scripts/generate-web-module/templates/data/model.template.ts +327 -0
- package/scripts/generate-web-module/templates/data/service.template.ts +185 -0
- package/scripts/generate-web-module/templates/index.ts +34 -0
- package/scripts/generate-web-module/templates/module.template.ts +69 -0
- package/scripts/generate-web-module/templates/pages/detail-page.template.ts +65 -0
- package/scripts/generate-web-module/templates/pages/index.ts +8 -0
- package/scripts/generate-web-module/templates/pages/list-page.template.ts +37 -0
- package/scripts/generate-web-module/templates/table-hook.template.ts +182 -0
- package/scripts/generate-web-module/transformers/field-mapper.ts +201 -0
- package/scripts/generate-web-module/transformers/i18n-generator.ts +199 -0
- package/scripts/generate-web-module/transformers/import-resolver.ts +250 -0
- package/scripts/generate-web-module/transformers/index.ts +12 -0
- package/scripts/generate-web-module/transformers/name-transformer.ts +115 -0
- package/scripts/generate-web-module/transformers/parent-detector.ts +87 -0
- package/scripts/generate-web-module/transformers/relationship-resolver.ts +221 -0
- package/scripts/generate-web-module/tsconfig.json +24 -0
- package/scripts/generate-web-module/types/field-mapping.types.ts +141 -0
- package/scripts/generate-web-module/types/index.ts +9 -0
- package/scripts/generate-web-module/types/json-schema.interface.ts +42 -0
- package/scripts/generate-web-module/types/template-data.interface.ts +164 -0
- package/scripts/generate-web-module/utils/bootstrapper-updater.ts +145 -0
- package/scripts/generate-web-module/utils/file-writer.ts +115 -0
- package/scripts/generate-web-module/utils/i18n-updater.ts +108 -0
- package/scripts/generate-web-module/utils/index.ts +9 -0
- package/scripts/generate-web-module/validators/json-schema-validator.ts +306 -0
- package/src/features/user/index.ts +1 -1
- package/dist/chunk-FYRFMABS.js.map +0 -1
- package/dist/chunk-MA2L2PL2.mjs.map +0 -1
- /package/dist/{BlockNoteEditor-4VOBTXWC.mjs.map → BlockNoteEditor-DC33K4IF.mjs.map} +0 -0
- /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":"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"}
|
|
@@ -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"}
|