@eide/uniformgen 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +356 -0
- package/dist/auth/credentials.d.ts +58 -0
- package/dist/auth/credentials.d.ts.map +1 -0
- package/dist/auth/credentials.js +107 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +563 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +113 -0
- package/dist/commands/login.d.ts +9 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +158 -0
- package/dist/commands/logout.d.ts +5 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +13 -0
- package/dist/commands/push.d.ts +13 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +328 -0
- package/dist/commands/scaffold.d.ts +19 -0
- package/dist/commands/scaffold.d.ts.map +1 -0
- package/dist/commands/scaffold.js +366 -0
- package/dist/commands/seed.d.ts +20 -0
- package/dist/commands/seed.d.ts.map +1 -0
- package/dist/commands/seed.js +380 -0
- package/dist/commands/select-project.d.ts +10 -0
- package/dist/commands/select-project.d.ts.map +1 -0
- package/dist/commands/select-project.js +277 -0
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +51 -0
- package/dist/commands/sync.d.ts +13 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +318 -0
- package/dist/commands/whoami.d.ts +5 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +31 -0
- package/dist/config/load-config.d.ts +6 -0
- package/dist/config/load-config.d.ts.map +1 -0
- package/dist/config/load-config.js +103 -0
- package/dist/config/settings.d.ts +20 -0
- package/dist/config/settings.d.ts.map +1 -0
- package/dist/config/settings.js +64 -0
- package/dist/config/types.d.ts +152 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +94 -0
- package/dist/fetcher/fetch-schemas.d.ts +140 -0
- package/dist/fetcher/fetch-schemas.d.ts.map +1 -0
- package/dist/fetcher/fetch-schemas.js +223 -0
- package/dist/fetcher/fetch-workflows.d.ts +53 -0
- package/dist/fetcher/fetch-workflows.d.ts.map +1 -0
- package/dist/fetcher/fetch-workflows.js +164 -0
- package/dist/generated/hooks/customer-detail.d.ts +74 -0
- package/dist/generated/hooks/customer-detail.d.ts.map +1 -0
- package/dist/generated/hooks/customer-detail.js +113 -0
- package/dist/generated/hooks/design-system.d.ts +74 -0
- package/dist/generated/hooks/design-system.d.ts.map +1 -0
- package/dist/generated/hooks/design-system.js +109 -0
- package/dist/generated/hooks/index.d.ts +16 -0
- package/dist/generated/hooks/index.d.ts.map +1 -0
- package/dist/generated/hooks/index.js +14 -0
- package/dist/generated/hooks/shopify-collection.d.ts +74 -0
- package/dist/generated/hooks/shopify-collection.d.ts.map +1 -0
- package/dist/generated/hooks/shopify-collection.js +113 -0
- package/dist/generated/hooks/shopify-market.d.ts +74 -0
- package/dist/generated/hooks/shopify-market.d.ts.map +1 -0
- package/dist/generated/hooks/shopify-market.js +109 -0
- package/dist/generated/hooks/shopify-product.d.ts +74 -0
- package/dist/generated/hooks/shopify-product.d.ts.map +1 -0
- package/dist/generated/hooks/shopify-product.js +113 -0
- package/dist/generated/hooks/shopify-variant.d.ts +74 -0
- package/dist/generated/hooks/shopify-variant.d.ts.map +1 -0
- package/dist/generated/hooks/shopify-variant.js +113 -0
- package/dist/generated/hooks/template.d.ts +74 -0
- package/dist/generated/hooks/template.d.ts.map +1 -0
- package/dist/generated/hooks/template.js +107 -0
- package/dist/generated/types/config.d.ts +88 -0
- package/dist/generated/types/config.d.ts.map +1 -0
- package/dist/generated/types/config.js +14 -0
- package/dist/generated/types/data-models/index.d.ts +7 -0
- package/dist/generated/types/data-models/index.d.ts.map +1 -0
- package/dist/generated/types/data-models/index.js +6 -0
- package/dist/generated/types/data-models/test.d.ts +29 -0
- package/dist/generated/types/data-models/test.d.ts.map +1 -0
- package/dist/generated/types/data-models/test.js +1 -0
- package/dist/generated/types/data-models/watch.d.ts +26 -0
- package/dist/generated/types/data-models/watch.d.ts.map +1 -0
- package/dist/generated/types/data-models/watch.js +1 -0
- package/dist/generated/types/field-types.d.ts +255 -0
- package/dist/generated/types/field-types.d.ts.map +1 -0
- package/dist/generated/types/field-types.js +35 -0
- package/dist/generated/types/hooks.d.ts +106 -0
- package/dist/generated/types/hooks.d.ts.map +1 -0
- package/dist/generated/types/hooks.js +9 -0
- package/dist/generated/types/index.d.ts +10 -0
- package/dist/generated/types/index.d.ts.map +1 -0
- package/dist/generated/types/index.js +9 -0
- package/dist/generated/types/models/button-variant.d.ts +16 -0
- package/dist/generated/types/models/button-variant.d.ts.map +1 -0
- package/dist/generated/types/models/button-variant.js +1 -0
- package/dist/generated/types/models/color-palette.d.ts +27 -0
- package/dist/generated/types/models/color-palette.d.ts.map +1 -0
- package/dist/generated/types/models/color-palette.js +1 -0
- package/dist/generated/types/models/color-with-scale.d.ts +15 -0
- package/dist/generated/types/models/color-with-scale.d.ts.map +1 -0
- package/dist/generated/types/models/color-with-scale.js +1 -0
- package/dist/generated/types/models/context.d.ts +53 -0
- package/dist/generated/types/models/context.d.ts.map +1 -0
- package/dist/generated/types/models/context.js +51 -0
- package/dist/generated/types/models/customer-detail.d.ts +32 -0
- package/dist/generated/types/models/customer-detail.d.ts.map +1 -0
- package/dist/generated/types/models/customer-detail.js +26 -0
- package/dist/generated/types/models/design-system-badges.d.ts +16 -0
- package/dist/generated/types/models/design-system-badges.d.ts.map +1 -0
- package/dist/generated/types/models/design-system-badges.js +1 -0
- package/dist/generated/types/models/design-system-buttons.d.ts +17 -0
- package/dist/generated/types/models/design-system-buttons.d.ts.map +1 -0
- package/dist/generated/types/models/design-system-buttons.js +1 -0
- package/dist/generated/types/models/design-system-cards.d.ts +16 -0
- package/dist/generated/types/models/design-system-cards.d.ts.map +1 -0
- package/dist/generated/types/models/design-system-cards.js +1 -0
- package/dist/generated/types/models/design-system-colors.d.ts +12 -0
- package/dist/generated/types/models/design-system-colors.d.ts.map +1 -0
- package/dist/generated/types/models/design-system-colors.js +1 -0
- package/dist/generated/types/models/design-system-dark-mode.d.ts +13 -0
- package/dist/generated/types/models/design-system-dark-mode.d.ts.map +1 -0
- package/dist/generated/types/models/design-system-dark-mode.js +1 -0
- package/dist/generated/types/models/design-system-focus-ring.d.ts +14 -0
- package/dist/generated/types/models/design-system-focus-ring.d.ts.map +1 -0
- package/dist/generated/types/models/design-system-focus-ring.js +1 -0
- package/dist/generated/types/models/design-system-grid.d.ts +18 -0
- package/dist/generated/types/models/design-system-grid.d.ts.map +1 -0
- package/dist/generated/types/models/design-system-grid.js +1 -0
- package/dist/generated/types/models/design-system-inputs.d.ts +26 -0
- package/dist/generated/types/models/design-system-inputs.d.ts.map +1 -0
- package/dist/generated/types/models/design-system-inputs.js +1 -0
- package/dist/generated/types/models/design-system-links.d.ts +16 -0
- package/dist/generated/types/models/design-system-links.d.ts.map +1 -0
- package/dist/generated/types/models/design-system-links.js +1 -0
- package/dist/generated/types/models/design-system-shadows.d.ts +20 -0
- package/dist/generated/types/models/design-system-shadows.d.ts.map +1 -0
- package/dist/generated/types/models/design-system-shadows.js +1 -0
- package/dist/generated/types/models/design-system-spacing.d.ts +13 -0
- package/dist/generated/types/models/design-system-spacing.d.ts.map +1 -0
- package/dist/generated/types/models/design-system-spacing.js +1 -0
- package/dist/generated/types/models/design-system-transitions.d.ts +15 -0
- package/dist/generated/types/models/design-system-transitions.d.ts.map +1 -0
- package/dist/generated/types/models/design-system-transitions.js +1 -0
- package/dist/generated/types/models/design-system-typography.d.ts +21 -0
- package/dist/generated/types/models/design-system-typography.d.ts.map +1 -0
- package/dist/generated/types/models/design-system-typography.js +1 -0
- package/dist/generated/types/models/design-system.d.ts +138 -0
- package/dist/generated/types/models/design-system.d.ts.map +1 -0
- package/dist/generated/types/models/design-system.js +64 -0
- package/dist/generated/types/models/experiment.d.ts +57 -0
- package/dist/generated/types/models/experiment.d.ts.map +1 -0
- package/dist/generated/types/models/experiment.js +55 -0
- package/dist/generated/types/models/font-file.d.ts +16 -0
- package/dist/generated/types/models/font-file.d.ts.map +1 -0
- package/dist/generated/types/models/font-file.js +1 -0
- package/dist/generated/types/models/index.d.ts +38 -0
- package/dist/generated/types/models/index.d.ts.map +1 -0
- package/dist/generated/types/models/index.js +12 -0
- package/dist/generated/types/models/integration.d.ts +32 -0
- package/dist/generated/types/models/integration.d.ts.map +1 -0
- package/dist/generated/types/models/integration.js +26 -0
- package/dist/generated/types/models/route-tree.d.ts +43 -0
- package/dist/generated/types/models/route-tree.d.ts.map +1 -0
- package/dist/generated/types/models/route-tree.js +39 -0
- package/dist/generated/types/models/segment.d.ts +57 -0
- package/dist/generated/types/models/segment.d.ts.map +1 -0
- package/dist/generated/types/models/segment.js +55 -0
- package/dist/generated/types/models/shopify-collection.d.ts +32 -0
- package/dist/generated/types/models/shopify-collection.d.ts.map +1 -0
- package/dist/generated/types/models/shopify-collection.js +26 -0
- package/dist/generated/types/models/shopify-market.d.ts +32 -0
- package/dist/generated/types/models/shopify-market.d.ts.map +1 -0
- package/dist/generated/types/models/shopify-market.js +26 -0
- package/dist/generated/types/models/shopify-product.d.ts +32 -0
- package/dist/generated/types/models/shopify-product.d.ts.map +1 -0
- package/dist/generated/types/models/shopify-product.js +26 -0
- package/dist/generated/types/models/shopify-variant.d.ts +32 -0
- package/dist/generated/types/models/shopify-variant.d.ts.map +1 -0
- package/dist/generated/types/models/shopify-variant.js +26 -0
- package/dist/generated/types/models/template.d.ts +53 -0
- package/dist/generated/types/models/template.d.ts.map +1 -0
- package/dist/generated/types/models/template.js +40 -0
- package/dist/generated/types/models/typography-variant.d.ts +15 -0
- package/dist/generated/types/models/typography-variant.d.ts.map +1 -0
- package/dist/generated/types/models/typography-variant.js +1 -0
- package/dist/generated/types/scalars.d.ts +56 -0
- package/dist/generated/types/scalars.d.ts.map +1 -0
- package/dist/generated/types/scalars.js +6 -0
- package/dist/generators/admin/index.d.ts +32 -0
- package/dist/generators/admin/index.d.ts.map +1 -0
- package/dist/generators/admin/index.js +219 -0
- package/dist/generators/admin/mutations.d.ts +23 -0
- package/dist/generators/admin/mutations.d.ts.map +1 -0
- package/dist/generators/admin/mutations.js +424 -0
- package/dist/generators/admin/queries.d.ts +20 -0
- package/dist/generators/admin/queries.d.ts.map +1 -0
- package/dist/generators/admin/queries.js +476 -0
- package/dist/generators/admin/types.d.ts +28 -0
- package/dist/generators/admin/types.d.ts.map +1 -0
- package/dist/generators/admin/types.js +254 -0
- package/dist/generators/cms/index.d.ts +29 -0
- package/dist/generators/cms/index.d.ts.map +1 -0
- package/dist/generators/cms/index.js +126 -0
- package/dist/generators/cms/route.d.ts +27 -0
- package/dist/generators/cms/route.d.ts.map +1 -0
- package/dist/generators/cms/route.js +409 -0
- package/dist/generators/cms/types.d.ts +15 -0
- package/dist/generators/cms/types.d.ts.map +1 -0
- package/dist/generators/cms/types.js +137 -0
- package/dist/generators/contexts/index.d.ts +25 -0
- package/dist/generators/contexts/index.d.ts.map +1 -0
- package/dist/generators/contexts/index.js +591 -0
- package/dist/generators/documents/data-models.d.ts +6 -0
- package/dist/generators/documents/data-models.d.ts.map +1 -0
- package/dist/generators/documents/data-models.js +61 -0
- package/dist/generators/documents/entity-models.d.ts +7 -0
- package/dist/generators/documents/entity-models.d.ts.map +1 -0
- package/dist/generators/documents/entity-models.js +87 -0
- package/dist/generators/documents/workflows.d.ts +11 -0
- package/dist/generators/documents/workflows.d.ts.map +1 -0
- package/dist/generators/documents/workflows.js +101 -0
- package/dist/generators/filters/index.d.ts +16 -0
- package/dist/generators/filters/index.d.ts.map +1 -0
- package/dist/generators/filters/index.js +384 -0
- package/dist/generators/hooks/agnostic.d.ts +16 -0
- package/dist/generators/hooks/agnostic.d.ts.map +1 -0
- package/dist/generators/hooks/agnostic.js +248 -0
- package/dist/generators/hooks/index.d.ts +9 -0
- package/dist/generators/hooks/index.d.ts.map +1 -0
- package/dist/generators/hooks/index.js +8 -0
- package/dist/generators/hooks/react.d.ts +16 -0
- package/dist/generators/hooks/react.d.ts.map +1 -0
- package/dist/generators/hooks/react.js +394 -0
- package/dist/generators/hooks/remix.d.ts +16 -0
- package/dist/generators/hooks/remix.d.ts.map +1 -0
- package/dist/generators/hooks/remix.js +349 -0
- package/dist/generators/hooks/workflows.d.ts +23 -0
- package/dist/generators/hooks/workflows.d.ts.map +1 -0
- package/dist/generators/hooks/workflows.js +312 -0
- package/dist/generators/resolve/index.d.ts +13 -0
- package/dist/generators/resolve/index.d.ts.map +1 -0
- package/dist/generators/resolve/index.js +13 -0
- package/dist/generators/resolve/platform.d.ts +29 -0
- package/dist/generators/resolve/platform.d.ts.map +1 -0
- package/dist/generators/resolve/platform.js +479 -0
- package/dist/generators/types/config.d.ts +7 -0
- package/dist/generators/types/config.d.ts.map +1 -0
- package/dist/generators/types/config.js +113 -0
- package/dist/generators/types/data-models.d.ts +10 -0
- package/dist/generators/types/data-models.d.ts.map +1 -0
- package/dist/generators/types/data-models.js +100 -0
- package/dist/generators/types/entity-models.d.ts +13 -0
- package/dist/generators/types/entity-models.d.ts.map +1 -0
- package/dist/generators/types/entity-models.js +241 -0
- package/dist/generators/types/field-types.d.ts +9 -0
- package/dist/generators/types/field-types.d.ts.map +1 -0
- package/dist/generators/types/field-types.js +651 -0
- package/dist/generators/types/hooks.d.ts +7 -0
- package/dist/generators/types/hooks.d.ts.map +1 -0
- package/dist/generators/types/hooks.js +132 -0
- package/dist/generators/types/scalars.d.ts +6 -0
- package/dist/generators/types/scalars.d.ts.map +1 -0
- package/dist/generators/types/scalars.js +68 -0
- package/dist/generators/types/user-details.d.ts +6 -0
- package/dist/generators/types/user-details.d.ts.map +1 -0
- package/dist/generators/types/user-details.js +60 -0
- package/dist/generators/types/workflows.d.ts +15 -0
- package/dist/generators/types/workflows.d.ts.map +1 -0
- package/dist/generators/types/workflows.js +163 -0
- package/dist/graphql/generated/gql.d.ts +47 -0
- package/dist/graphql/generated/gql.d.ts.map +1 -0
- package/dist/graphql/generated/gql.js +10 -0
- package/dist/graphql/generated/graphql.d.ts +8455 -0
- package/dist/graphql/generated/graphql.d.ts.map +1 -0
- package/dist/graphql/generated/graphql.js +573 -0
- package/dist/graphql/generated/index.d.ts +2 -0
- package/dist/graphql/generated/index.d.ts.map +1 -0
- package/dist/graphql/generated/index.js +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/schema/define-entity-model.d.ts +122 -0
- package/dist/schema/define-entity-model.d.ts.map +1 -0
- package/dist/schema/define-entity-model.js +59 -0
- package/dist/schema/schema-loader.d.ts +10 -0
- package/dist/schema/schema-loader.d.ts.map +1 -0
- package/dist/schema/schema-loader.js +91 -0
- package/dist/utils/field-mapping.d.ts +83 -0
- package/dist/utils/field-mapping.d.ts.map +1 -0
- package/dist/utils/field-mapping.js +334 -0
- package/dist/writer/write-files.d.ts +12 -0
- package/dist/writer/write-files.d.ts.map +1 -0
- package/dist/writer/write-files.js +35 -0
- package/package.json +70 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin Types Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates TypeScript types for administration layer:
|
|
5
|
+
* - Record types with variants
|
|
6
|
+
* - Version types for history
|
|
7
|
+
* - Filter and input types
|
|
8
|
+
*
|
|
9
|
+
* @generated by UniformGen
|
|
10
|
+
*/
|
|
11
|
+
import { toPascalCase, sanitizeFieldName } from '../../utils/field-mapping.js';
|
|
12
|
+
/**
|
|
13
|
+
* Map metadata field type to TypeScript type
|
|
14
|
+
*/
|
|
15
|
+
function getMetadataValueType(fieldType) {
|
|
16
|
+
switch (fieldType) {
|
|
17
|
+
case 'string':
|
|
18
|
+
return 'string';
|
|
19
|
+
case 'number':
|
|
20
|
+
return 'number';
|
|
21
|
+
case 'boolean':
|
|
22
|
+
return 'boolean';
|
|
23
|
+
case 'date':
|
|
24
|
+
return 'string'; // ISO date string
|
|
25
|
+
case 'array':
|
|
26
|
+
return 'unknown[]';
|
|
27
|
+
case 'object':
|
|
28
|
+
return 'Record<string, unknown>';
|
|
29
|
+
default:
|
|
30
|
+
return 'unknown';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Build a nested TypeScript interface from dot-notation paths
|
|
35
|
+
*/
|
|
36
|
+
function buildNestedMetadataType(fields, depth = 0) {
|
|
37
|
+
const groups = new Map();
|
|
38
|
+
const directFields = [];
|
|
39
|
+
for (const field of fields) {
|
|
40
|
+
const parts = field.key.split('.');
|
|
41
|
+
if (parts.length === 1) {
|
|
42
|
+
directFields.push(field);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const firstPart = parts[0];
|
|
46
|
+
const remaining = { ...field, key: parts.slice(1).join('.') };
|
|
47
|
+
if (!groups.has(firstPart)) {
|
|
48
|
+
groups.set(firstPart, []);
|
|
49
|
+
}
|
|
50
|
+
groups.get(firstPart).push(remaining);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const indent = ' '.repeat(depth + 1);
|
|
54
|
+
const lines = [];
|
|
55
|
+
for (const field of directFields) {
|
|
56
|
+
const valueType = getMetadataValueType(field.type);
|
|
57
|
+
const fieldName = sanitizeFieldName(field.key);
|
|
58
|
+
const optional = field.required ? '' : '?';
|
|
59
|
+
lines.push(`${indent}${fieldName}${optional}: ${valueType};`);
|
|
60
|
+
}
|
|
61
|
+
for (const [groupName, groupFields] of groups) {
|
|
62
|
+
const nestedType = buildNestedMetadataType(groupFields, depth + 1);
|
|
63
|
+
if (nestedType !== '{}') {
|
|
64
|
+
const fieldName = sanitizeFieldName(groupName);
|
|
65
|
+
lines.push(`${indent}${fieldName}?: ${nestedType}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (lines.length === 0) {
|
|
69
|
+
return '{}';
|
|
70
|
+
}
|
|
71
|
+
const closeIndent = ' '.repeat(depth);
|
|
72
|
+
return `{\n${lines.join('\n')}\n${closeIndent}}`;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Generate metadata type for a model
|
|
76
|
+
*/
|
|
77
|
+
export function generateMetadataType(model) {
|
|
78
|
+
const metadataFields = model.metadataSchema?.fields;
|
|
79
|
+
if (!metadataFields || metadataFields.length === 0) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
return buildNestedMetadataType(metadataFields, 0);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Check if model is inline-only (no records mode)
|
|
86
|
+
*/
|
|
87
|
+
export function isInlineOnlyModel(model) {
|
|
88
|
+
return model.modes.inline && !model.modes.records;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Generate admin types for a model
|
|
92
|
+
*/
|
|
93
|
+
export function generateAdminTypes(model, _allModels) {
|
|
94
|
+
// Skip inline-only models - they don't have standalone records
|
|
95
|
+
if (isInlineOnlyModel(model)) {
|
|
96
|
+
return '';
|
|
97
|
+
}
|
|
98
|
+
const typeName = toPascalCase(model.key);
|
|
99
|
+
const dataTypeName = `${typeName}Data`;
|
|
100
|
+
const metadataType = generateMetadataType(model);
|
|
101
|
+
const metadataTypeName = `${typeName}Metadata`;
|
|
102
|
+
const lines = [];
|
|
103
|
+
// File header
|
|
104
|
+
lines.push(`/**`);
|
|
105
|
+
lines.push(` * ${model.name} - Admin Types`);
|
|
106
|
+
lines.push(` *`);
|
|
107
|
+
lines.push(` * Types for administration layer (CRUD operations, versioning).`);
|
|
108
|
+
lines.push(` *`);
|
|
109
|
+
lines.push(` * @generated by UniformGen - DO NOT EDIT MANUALLY`);
|
|
110
|
+
lines.push(` */`);
|
|
111
|
+
lines.push('');
|
|
112
|
+
// Imports
|
|
113
|
+
lines.push(`import type { ${dataTypeName} } from '../../types/models/${model.key}.js';`);
|
|
114
|
+
lines.push('');
|
|
115
|
+
// Generate metadata type if model has metadataSchema
|
|
116
|
+
if (metadataType) {
|
|
117
|
+
lines.push(`/** Typed metadata for ${model.name} */`);
|
|
118
|
+
lines.push(`export interface ${metadataTypeName} ${metadataType}`);
|
|
119
|
+
lines.push('');
|
|
120
|
+
}
|
|
121
|
+
// Version type
|
|
122
|
+
lines.push(`/** ${model.name} version (point-in-time snapshot) */`);
|
|
123
|
+
lines.push(`export interface ${typeName}Version {`);
|
|
124
|
+
lines.push(` id: string;`);
|
|
125
|
+
lines.push(` variantId: string;`);
|
|
126
|
+
lines.push(` versionNumber: number;`);
|
|
127
|
+
lines.push(` content: ${dataTypeName};`);
|
|
128
|
+
lines.push(` isPublished: boolean;`);
|
|
129
|
+
lines.push(` createdAt: string;`);
|
|
130
|
+
lines.push(` createdBy?: string;`);
|
|
131
|
+
lines.push(`}`);
|
|
132
|
+
lines.push('');
|
|
133
|
+
// Variant type
|
|
134
|
+
lines.push(`/** ${model.name} variant (market/device/locale specific) */`);
|
|
135
|
+
lines.push(`export interface ${typeName}Variant {`);
|
|
136
|
+
lines.push(` id: string;`);
|
|
137
|
+
lines.push(` variantKey: string;`);
|
|
138
|
+
lines.push(` catalogKey: string | null;`);
|
|
139
|
+
lines.push(` currentVersion?: ${typeName}Version;`);
|
|
140
|
+
lines.push(` publishedVersion?: ${typeName}Version;`);
|
|
141
|
+
lines.push(` versionCount: number;`);
|
|
142
|
+
lines.push(`}`);
|
|
143
|
+
lines.push('');
|
|
144
|
+
// Record type (for list views)
|
|
145
|
+
lines.push(`/** ${model.name} record (list view) */`);
|
|
146
|
+
lines.push(`export interface ${typeName}Record {`);
|
|
147
|
+
lines.push(` id: string;`);
|
|
148
|
+
lines.push(` modelKey: '${model.key}';`);
|
|
149
|
+
lines.push(` naturalKey?: string;`);
|
|
150
|
+
lines.push(` data: ${dataTypeName};`);
|
|
151
|
+
if (metadataType) {
|
|
152
|
+
lines.push(` metadata?: ${metadataTypeName};`);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
lines.push(` metadata?: Record<string, unknown>;`);
|
|
156
|
+
}
|
|
157
|
+
lines.push(` versionNumber: number;`);
|
|
158
|
+
lines.push(` publishedVersionNumber?: number;`);
|
|
159
|
+
lines.push(` status: 'DRAFT' | 'PUBLISHED' | 'ARCHIVED';`);
|
|
160
|
+
lines.push(` createdAt: string;`);
|
|
161
|
+
lines.push(` updatedAt: string;`);
|
|
162
|
+
lines.push(`}`);
|
|
163
|
+
lines.push('');
|
|
164
|
+
// Record with variants type (for detail views)
|
|
165
|
+
lines.push(`/** ${model.name} record with variants (detail view) */`);
|
|
166
|
+
lines.push(`export interface ${typeName}RecordWithVariants extends ${typeName}Record {`);
|
|
167
|
+
lines.push(` variants: ${typeName}Variant[];`);
|
|
168
|
+
lines.push(`}`);
|
|
169
|
+
lines.push('');
|
|
170
|
+
// Filter input type
|
|
171
|
+
lines.push(`/** Filter input for ${model.name} queries */`);
|
|
172
|
+
lines.push(`export interface ${typeName}FilterInput {`);
|
|
173
|
+
lines.push(` search?: string;`);
|
|
174
|
+
lines.push(` status?: 'DRAFT' | 'PUBLISHED' | 'ARCHIVED';`);
|
|
175
|
+
lines.push(` naturalKey?: string;`);
|
|
176
|
+
lines.push(` createdAfter?: string;`);
|
|
177
|
+
lines.push(` createdBefore?: string;`);
|
|
178
|
+
lines.push(` updatedAfter?: string;`);
|
|
179
|
+
lines.push(` updatedBefore?: string;`);
|
|
180
|
+
lines.push(`}`);
|
|
181
|
+
lines.push('');
|
|
182
|
+
// Create input type
|
|
183
|
+
lines.push(`/** Input for creating a ${model.name} record */`);
|
|
184
|
+
lines.push(`export interface Create${typeName}Input {`);
|
|
185
|
+
lines.push(` naturalKey?: string;`);
|
|
186
|
+
lines.push(` data: ${dataTypeName};`);
|
|
187
|
+
if (metadataType) {
|
|
188
|
+
lines.push(` metadata?: ${metadataTypeName};`);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
lines.push(` metadata?: Record<string, unknown>;`);
|
|
192
|
+
}
|
|
193
|
+
lines.push(`}`);
|
|
194
|
+
lines.push('');
|
|
195
|
+
// Update input type
|
|
196
|
+
lines.push(`/** Input for updating a ${model.name} record */`);
|
|
197
|
+
lines.push(`export interface Update${typeName}Input {`);
|
|
198
|
+
lines.push(` naturalKey?: string;`);
|
|
199
|
+
if (metadataType) {
|
|
200
|
+
lines.push(` metadata?: Partial<${metadataTypeName}>;`);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
lines.push(` metadata?: Record<string, unknown>;`);
|
|
204
|
+
}
|
|
205
|
+
lines.push(`}`);
|
|
206
|
+
lines.push('');
|
|
207
|
+
// Save content input type
|
|
208
|
+
lines.push(`/** Input for saving ${model.name} content (creates new version) */`);
|
|
209
|
+
lines.push(`export interface Save${typeName}ContentInput {`);
|
|
210
|
+
lines.push(` variantId: string;`);
|
|
211
|
+
lines.push(` content: ${dataTypeName};`);
|
|
212
|
+
lines.push(`}`);
|
|
213
|
+
lines.push('');
|
|
214
|
+
// Save content result type
|
|
215
|
+
lines.push(`/** Result of saving ${model.name} content */`);
|
|
216
|
+
lines.push(`export interface Save${typeName}ContentResult {`);
|
|
217
|
+
lines.push(` variantId: string;`);
|
|
218
|
+
lines.push(` versionId: string;`);
|
|
219
|
+
lines.push(` versionNumber: number;`);
|
|
220
|
+
lines.push(`}`);
|
|
221
|
+
return lines.join('\n') + '\n';
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Generate index file for admin types
|
|
225
|
+
*/
|
|
226
|
+
export function generateAdminTypesIndex(models) {
|
|
227
|
+
const recordModels = models.filter((m) => m.modes.records);
|
|
228
|
+
let indexCode = `/**
|
|
229
|
+
* Admin Types
|
|
230
|
+
*
|
|
231
|
+
* Types for administration layer (CRUD operations, versioning).
|
|
232
|
+
*
|
|
233
|
+
* @generated by UniformGen - DO NOT EDIT MANUALLY
|
|
234
|
+
*/\n\n`;
|
|
235
|
+
for (const model of recordModels) {
|
|
236
|
+
const typeName = toPascalCase(model.key);
|
|
237
|
+
const hasMetadata = model.metadataSchema?.fields && model.metadataSchema.fields.length > 0;
|
|
238
|
+
indexCode += `export type {\n`;
|
|
239
|
+
indexCode += ` ${typeName}Record,\n`;
|
|
240
|
+
indexCode += ` ${typeName}RecordWithVariants,\n`;
|
|
241
|
+
indexCode += ` ${typeName}Variant,\n`;
|
|
242
|
+
indexCode += ` ${typeName}Version,\n`;
|
|
243
|
+
indexCode += ` ${typeName}FilterInput,\n`;
|
|
244
|
+
indexCode += ` Create${typeName}Input,\n`;
|
|
245
|
+
indexCode += ` Update${typeName}Input,\n`;
|
|
246
|
+
indexCode += ` Save${typeName}ContentInput,\n`;
|
|
247
|
+
indexCode += ` Save${typeName}ContentResult,\n`;
|
|
248
|
+
if (hasMetadata) {
|
|
249
|
+
indexCode += ` ${typeName}Metadata,\n`;
|
|
250
|
+
}
|
|
251
|
+
indexCode += `} from './${model.key}.js';\n`;
|
|
252
|
+
}
|
|
253
|
+
return indexCode;
|
|
254
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMS Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates typed hooks/functions for CMS route resolution layer:
|
|
5
|
+
* - resolveRoute for URL-based entity resolution
|
|
6
|
+
* - Template, zone, and layout resolution
|
|
7
|
+
* - Breadcrumbs and grid configuration
|
|
8
|
+
*
|
|
9
|
+
* Only generates when there are models with cms.enabled = true.
|
|
10
|
+
*
|
|
11
|
+
* @generated by UniformGen
|
|
12
|
+
*/
|
|
13
|
+
import type { EntityModel } from '../../fetcher/fetch-schemas.js';
|
|
14
|
+
export { generateCmsTypes } from './types.js';
|
|
15
|
+
export { hasRoutingEnabled, getRoutableModels, generateResolveRouteReact, generateResolveRouteRemix, } from './route.js';
|
|
16
|
+
/**
|
|
17
|
+
* Check if CMS generation is needed
|
|
18
|
+
* Returns true if any model has cms.enabled = true
|
|
19
|
+
*/
|
|
20
|
+
export declare function shouldGenerateCms(models: EntityModel[]): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Generate CMS index file for React
|
|
23
|
+
*/
|
|
24
|
+
export declare function generateCmsIndexReact(models: EntityModel[]): string;
|
|
25
|
+
/**
|
|
26
|
+
* Generate CMS index file for Remix/Hydrogen
|
|
27
|
+
*/
|
|
28
|
+
export declare function generateCmsIndexRemix(models: EntityModel[]): string;
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/cms/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAEhE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAkDnE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAmDnE"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMS Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates typed hooks/functions for CMS route resolution layer:
|
|
5
|
+
* - resolveRoute for URL-based entity resolution
|
|
6
|
+
* - Template, zone, and layout resolution
|
|
7
|
+
* - Breadcrumbs and grid configuration
|
|
8
|
+
*
|
|
9
|
+
* Only generates when there are models with cms.enabled = true.
|
|
10
|
+
*
|
|
11
|
+
* @generated by UniformGen
|
|
12
|
+
*/
|
|
13
|
+
export { generateCmsTypes } from './types.js';
|
|
14
|
+
export { hasRoutingEnabled, getRoutableModels, generateResolveRouteReact, generateResolveRouteRemix, } from './route.js';
|
|
15
|
+
/**
|
|
16
|
+
* Check if CMS generation is needed
|
|
17
|
+
* Returns true if any model has cms.enabled = true
|
|
18
|
+
*/
|
|
19
|
+
export function shouldGenerateCms(models) {
|
|
20
|
+
return models.some(m => m.pages?.enabled === true);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Generate CMS index file for React
|
|
24
|
+
*/
|
|
25
|
+
export function generateCmsIndexReact(models) {
|
|
26
|
+
const routableModels = models.filter(m => m.pages?.enabled === true);
|
|
27
|
+
if (routableModels.length === 0) {
|
|
28
|
+
return `/**
|
|
29
|
+
* CMS Resolution
|
|
30
|
+
*
|
|
31
|
+
* No routable models found. CMS resolution is not available.
|
|
32
|
+
*
|
|
33
|
+
* @generated by UniformGen - DO NOT EDIT MANUALLY
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
export {};
|
|
37
|
+
`;
|
|
38
|
+
}
|
|
39
|
+
return `/**
|
|
40
|
+
* CMS Resolution
|
|
41
|
+
*
|
|
42
|
+
* React hooks for CMS route resolution with templates, zones, and layouts.
|
|
43
|
+
*
|
|
44
|
+
* @generated by UniformGen - DO NOT EDIT MANUALLY
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
// Route resolution hook
|
|
48
|
+
export {
|
|
49
|
+
useResolveRoute,
|
|
50
|
+
ROUTABLE_MODELS,
|
|
51
|
+
type RoutableModelKey,
|
|
52
|
+
} from './route.js';
|
|
53
|
+
|
|
54
|
+
// Types
|
|
55
|
+
export type {
|
|
56
|
+
ResolvedRoute,
|
|
57
|
+
ResolvedRecord,
|
|
58
|
+
ResolvedVariant,
|
|
59
|
+
ResolvedContent,
|
|
60
|
+
ResolvedField,
|
|
61
|
+
ResolvedTemplateRef,
|
|
62
|
+
ResolutionContext,
|
|
63
|
+
FieldLayout,
|
|
64
|
+
LayoutPosition,
|
|
65
|
+
FieldSource,
|
|
66
|
+
GridConfig,
|
|
67
|
+
Breadcrumb,
|
|
68
|
+
BreadcrumbType,
|
|
69
|
+
VariantContext,
|
|
70
|
+
ReferenceResolutionOptions,
|
|
71
|
+
} from './types.js';
|
|
72
|
+
`;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Generate CMS index file for Remix/Hydrogen
|
|
76
|
+
*/
|
|
77
|
+
export function generateCmsIndexRemix(models) {
|
|
78
|
+
const routableModels = models.filter(m => m.pages?.enabled === true);
|
|
79
|
+
if (routableModels.length === 0) {
|
|
80
|
+
return `/**
|
|
81
|
+
* CMS Resolution
|
|
82
|
+
*
|
|
83
|
+
* No routable models found. CMS resolution is not available.
|
|
84
|
+
*
|
|
85
|
+
* @generated by UniformGen - DO NOT EDIT MANUALLY
|
|
86
|
+
*/
|
|
87
|
+
|
|
88
|
+
export {};
|
|
89
|
+
`;
|
|
90
|
+
}
|
|
91
|
+
return `/**
|
|
92
|
+
* CMS Resolution
|
|
93
|
+
*
|
|
94
|
+
* Server-side functions for CMS route resolution with templates, zones, and layouts.
|
|
95
|
+
*
|
|
96
|
+
* @generated by UniformGen - DO NOT EDIT MANUALLY
|
|
97
|
+
*/
|
|
98
|
+
|
|
99
|
+
// Route resolution function
|
|
100
|
+
export {
|
|
101
|
+
resolveRoute,
|
|
102
|
+
ROUTABLE_MODELS,
|
|
103
|
+
type RoutableModelKey,
|
|
104
|
+
type GraphQLClient,
|
|
105
|
+
} from './route.js';
|
|
106
|
+
|
|
107
|
+
// Types
|
|
108
|
+
export type {
|
|
109
|
+
ResolvedRoute,
|
|
110
|
+
ResolvedRecord,
|
|
111
|
+
ResolvedVariant,
|
|
112
|
+
ResolvedContent,
|
|
113
|
+
ResolvedField,
|
|
114
|
+
ResolvedTemplateRef,
|
|
115
|
+
ResolutionContext,
|
|
116
|
+
FieldLayout,
|
|
117
|
+
LayoutPosition,
|
|
118
|
+
FieldSource,
|
|
119
|
+
GridConfig,
|
|
120
|
+
Breadcrumb,
|
|
121
|
+
BreadcrumbType,
|
|
122
|
+
VariantContext,
|
|
123
|
+
ReferenceResolutionOptions,
|
|
124
|
+
} from './types.js';
|
|
125
|
+
`;
|
|
126
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMS Route Resolution Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates the resolveRoute hook/function for CMS frontends.
|
|
5
|
+
* Only generated when there are models with cms.enabled = true.
|
|
6
|
+
*
|
|
7
|
+
* @generated by UniformGen
|
|
8
|
+
*/
|
|
9
|
+
import type { EntityModel } from '../../fetcher/fetch-schemas.js';
|
|
10
|
+
/**
|
|
11
|
+
* Check if a model has CMS enabled (cms.enabled in extensions)
|
|
12
|
+
* Note: The `pages` property on EntityModel is extracted from extensions.cms
|
|
13
|
+
*/
|
|
14
|
+
export declare function hasRoutingEnabled(model: EntityModel): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Get all routable models (models with cms.enabled = true)
|
|
17
|
+
*/
|
|
18
|
+
export declare function getRoutableModels(models: EntityModel[]): EntityModel[];
|
|
19
|
+
/**
|
|
20
|
+
* Generate React resolveRoute hook
|
|
21
|
+
*/
|
|
22
|
+
export declare function generateResolveRouteReact(routableModels: EntityModel[]): string;
|
|
23
|
+
/**
|
|
24
|
+
* Generate Remix/Hydrogen resolveRoute function
|
|
25
|
+
*/
|
|
26
|
+
export declare function generateResolveRouteRemix(routableModels: EntityModel[]): string;
|
|
27
|
+
//# sourceMappingURL=route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/generators/cms/route.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAElE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAEtE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,WAAW,EAAE,GAAG,MAAM,CA2L/E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,WAAW,EAAE,GAAG,MAAM,CAmM/E"}
|