@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,334 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps EIDE field types to TypeScript types
|
|
3
|
+
* Based on the field type mapping table in uniformgen-typesafe-entities.md
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Primitive field types that are built-in
|
|
7
|
+
* Based on the current field type registry in packages/platform/src/entities/field-types/registry.ts
|
|
8
|
+
*/
|
|
9
|
+
export const PRIMITIVE_FIELD_TYPES = new Set([
|
|
10
|
+
// Basic
|
|
11
|
+
'text',
|
|
12
|
+
'richtext',
|
|
13
|
+
'number',
|
|
14
|
+
'boolean',
|
|
15
|
+
// Validated (use text primitive with validation)
|
|
16
|
+
'email',
|
|
17
|
+
'phone',
|
|
18
|
+
'url',
|
|
19
|
+
// DateTime
|
|
20
|
+
'date',
|
|
21
|
+
// Media
|
|
22
|
+
'image',
|
|
23
|
+
'video',
|
|
24
|
+
'file',
|
|
25
|
+
// Financial
|
|
26
|
+
'currency',
|
|
27
|
+
// Choices
|
|
28
|
+
'select',
|
|
29
|
+
'multiselect',
|
|
30
|
+
// Complex
|
|
31
|
+
'json',
|
|
32
|
+
'list',
|
|
33
|
+
'tree',
|
|
34
|
+
// References
|
|
35
|
+
'entity-reference',
|
|
36
|
+
// Navigation
|
|
37
|
+
'link',
|
|
38
|
+
// Styling
|
|
39
|
+
'design-system-style',
|
|
40
|
+
]);
|
|
41
|
+
/**
|
|
42
|
+
* Check if a field type is a primitive (built-in) type
|
|
43
|
+
*/
|
|
44
|
+
export function isPrimitiveFieldType(type) {
|
|
45
|
+
return PRIMITIVE_FIELD_TYPES.has(type);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Field type to TypeScript type mapping
|
|
49
|
+
* Based on the current field type registry in packages/platform/src/entities/field-types/registry.ts
|
|
50
|
+
*/
|
|
51
|
+
export const FIELD_TYPE_MAPPING = {
|
|
52
|
+
// Basic types
|
|
53
|
+
text: {
|
|
54
|
+
outputType: 'string',
|
|
55
|
+
inputType: 'string',
|
|
56
|
+
},
|
|
57
|
+
richtext: {
|
|
58
|
+
outputType: 'RichtextValue',
|
|
59
|
+
inputType: 'RichtextValue',
|
|
60
|
+
needsImport: 'field-types',
|
|
61
|
+
},
|
|
62
|
+
number: {
|
|
63
|
+
outputType: 'number',
|
|
64
|
+
inputType: 'number',
|
|
65
|
+
},
|
|
66
|
+
boolean: {
|
|
67
|
+
outputType: 'boolean',
|
|
68
|
+
inputType: 'boolean',
|
|
69
|
+
},
|
|
70
|
+
// Validated types (use text primitive with validation)
|
|
71
|
+
email: {
|
|
72
|
+
outputType: 'string',
|
|
73
|
+
inputType: 'string',
|
|
74
|
+
},
|
|
75
|
+
phone: {
|
|
76
|
+
outputType: 'string',
|
|
77
|
+
inputType: 'string',
|
|
78
|
+
},
|
|
79
|
+
url: {
|
|
80
|
+
outputType: 'string',
|
|
81
|
+
inputType: 'string',
|
|
82
|
+
},
|
|
83
|
+
// DateTime
|
|
84
|
+
date: {
|
|
85
|
+
outputType: 'Date',
|
|
86
|
+
inputType: 'string', // ISO date string
|
|
87
|
+
},
|
|
88
|
+
// Media types
|
|
89
|
+
image: {
|
|
90
|
+
outputType: 'ImageValue',
|
|
91
|
+
inputType: 'string', // Image ID
|
|
92
|
+
needsImport: 'field-types',
|
|
93
|
+
},
|
|
94
|
+
video: {
|
|
95
|
+
outputType: 'VideoValue',
|
|
96
|
+
inputType: 'string', // Video ID
|
|
97
|
+
needsImport: 'field-types',
|
|
98
|
+
},
|
|
99
|
+
file: {
|
|
100
|
+
outputType: 'FileValue',
|
|
101
|
+
inputType: 'string', // File ID
|
|
102
|
+
needsImport: 'field-types',
|
|
103
|
+
},
|
|
104
|
+
// Financial
|
|
105
|
+
currency: {
|
|
106
|
+
outputType: 'CurrencyValue',
|
|
107
|
+
inputType: 'CurrencyValue',
|
|
108
|
+
needsImport: 'field-types',
|
|
109
|
+
},
|
|
110
|
+
// Choice types
|
|
111
|
+
select: {
|
|
112
|
+
outputType: 'string', // Can be union type if choices provided
|
|
113
|
+
inputType: 'string',
|
|
114
|
+
},
|
|
115
|
+
multiselect: {
|
|
116
|
+
outputType: 'string[]',
|
|
117
|
+
inputType: 'string[]',
|
|
118
|
+
},
|
|
119
|
+
// Complex types
|
|
120
|
+
json: {
|
|
121
|
+
outputType: 'unknown',
|
|
122
|
+
inputType: 'unknown',
|
|
123
|
+
},
|
|
124
|
+
list: {
|
|
125
|
+
outputType: 'unknown[]', // Type depends on itemType
|
|
126
|
+
inputType: 'unknown[]',
|
|
127
|
+
},
|
|
128
|
+
tree: {
|
|
129
|
+
outputType: 'unknown[]', // Hierarchical array
|
|
130
|
+
inputType: 'unknown[]',
|
|
131
|
+
},
|
|
132
|
+
// References
|
|
133
|
+
'entity-reference': {
|
|
134
|
+
outputType: 'ReferenceValue',
|
|
135
|
+
inputType: 'ReferenceValue',
|
|
136
|
+
needsImport: 'field-types',
|
|
137
|
+
},
|
|
138
|
+
// Navigation
|
|
139
|
+
link: {
|
|
140
|
+
outputType: 'LinkValue',
|
|
141
|
+
inputType: 'LinkValue',
|
|
142
|
+
needsImport: 'field-types',
|
|
143
|
+
},
|
|
144
|
+
// Styling
|
|
145
|
+
'design-system-style': {
|
|
146
|
+
outputType: 'Record<string, string>',
|
|
147
|
+
inputType: 'Record<string, string>',
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Get TypeScript type for a field
|
|
152
|
+
*/
|
|
153
|
+
export function getFieldType(field, mode = 'output') {
|
|
154
|
+
const mapping = FIELD_TYPE_MAPPING[field.type];
|
|
155
|
+
// If not a primitive type, it's an inline schema reference
|
|
156
|
+
if (!mapping) {
|
|
157
|
+
if (isPrimitiveFieldType(field.type)) {
|
|
158
|
+
console.warn(`Unknown field type: ${field.type}, defaulting to 'unknown'`);
|
|
159
|
+
return 'unknown';
|
|
160
|
+
}
|
|
161
|
+
// Return PascalCase type name for inline schema reference
|
|
162
|
+
return toPascalCase(field.type);
|
|
163
|
+
}
|
|
164
|
+
let tsType = mode === 'output' ? mapping.outputType : mapping.inputType;
|
|
165
|
+
// Handle select with choices (create union type)
|
|
166
|
+
if (field.type === 'select' && field.options?.options) {
|
|
167
|
+
const options = field.options.options;
|
|
168
|
+
if (options.length > 0) {
|
|
169
|
+
const values = options.map((o) => `'${o.value}'`).join(' | ');
|
|
170
|
+
tsType = values;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Handle multiselect with choices (create union type array)
|
|
174
|
+
if (field.type === 'multiselect' && field.options?.options) {
|
|
175
|
+
const options = field.options.options;
|
|
176
|
+
if (options.length > 0) {
|
|
177
|
+
const values = options.map((o) => `'${o.value}'`).join(' | ');
|
|
178
|
+
tsType = `(${values})[]`;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Handle list with itemType
|
|
182
|
+
if ((field.type === 'list' || field.type === 'tree') && field.options?.itemType) {
|
|
183
|
+
const itemType = field.options.itemType;
|
|
184
|
+
const itemMapping = FIELD_TYPE_MAPPING[itemType];
|
|
185
|
+
if (itemMapping) {
|
|
186
|
+
const itemTsType = mode === 'output' ? itemMapping.outputType : itemMapping.inputType;
|
|
187
|
+
tsType = `${itemTsType}[]`;
|
|
188
|
+
}
|
|
189
|
+
else if (!isPrimitiveFieldType(itemType)) {
|
|
190
|
+
// Inline schema reference
|
|
191
|
+
tsType = `${toPascalCase(itemType)}[]`;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return tsType;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Get all imports needed for a set of fields
|
|
198
|
+
*/
|
|
199
|
+
export function getRequiredImports(fields) {
|
|
200
|
+
const imports = new Set();
|
|
201
|
+
for (const field of fields) {
|
|
202
|
+
const mapping = FIELD_TYPE_MAPPING[field.type];
|
|
203
|
+
if (mapping?.needsImport) {
|
|
204
|
+
imports.add(mapping.needsImport);
|
|
205
|
+
}
|
|
206
|
+
// Check list/tree itemType
|
|
207
|
+
if ((field.type === 'list' || field.type === 'tree') && field.options?.itemType) {
|
|
208
|
+
const itemMapping = FIELD_TYPE_MAPPING[field.options.itemType];
|
|
209
|
+
if (itemMapping?.needsImport) {
|
|
210
|
+
imports.add(itemMapping.needsImport);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return imports;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Get all inline schema references from fields
|
|
218
|
+
* Returns the keys of entity models that are used as field types
|
|
219
|
+
*/
|
|
220
|
+
export function getInlineSchemaReferences(fields) {
|
|
221
|
+
const references = new Set();
|
|
222
|
+
for (const field of fields) {
|
|
223
|
+
// Check if field type is an inline schema reference
|
|
224
|
+
if (!isPrimitiveFieldType(field.type)) {
|
|
225
|
+
references.add(field.type);
|
|
226
|
+
}
|
|
227
|
+
// Check list/tree itemType for inline schema references
|
|
228
|
+
if ((field.type === 'list' || field.type === 'tree') && field.options?.itemType) {
|
|
229
|
+
const itemType = field.options.itemType;
|
|
230
|
+
if (!isPrimitiveFieldType(itemType)) {
|
|
231
|
+
references.add(itemType);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return references;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Convert field ID to camelCase
|
|
239
|
+
*/
|
|
240
|
+
export function toCamelCase(str) {
|
|
241
|
+
return str.replace(/[-_]([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Convert field ID to PascalCase
|
|
245
|
+
*/
|
|
246
|
+
export function toPascalCase(str) {
|
|
247
|
+
const camel = toCamelCase(str);
|
|
248
|
+
return camel.charAt(0).toUpperCase() + camel.slice(1);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Sanitize field name for TypeScript
|
|
252
|
+
* Replaces special characters and spaces with underscores.
|
|
253
|
+
* Prefixes with underscore if name starts with a number.
|
|
254
|
+
*/
|
|
255
|
+
export function sanitizeFieldName(name) {
|
|
256
|
+
// Replace all non-alphanumeric and non-underscore characters with underscores
|
|
257
|
+
let sanitized = name.replace(/[^a-zA-Z0-9_]/g, '_');
|
|
258
|
+
// If starts with a number, prefix with underscore
|
|
259
|
+
if (/^[0-9]/.test(sanitized)) {
|
|
260
|
+
sanitized = '_' + sanitized;
|
|
261
|
+
}
|
|
262
|
+
return sanitized;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Generate a strongly-typed field definition object string
|
|
266
|
+
* Returns a string that can be used in generated TypeScript code
|
|
267
|
+
*/
|
|
268
|
+
export function generateFieldDef(field) {
|
|
269
|
+
const parts = [];
|
|
270
|
+
// Required properties
|
|
271
|
+
parts.push(`key: '${field.key}'`);
|
|
272
|
+
parts.push(`type: '${field.type}'`);
|
|
273
|
+
parts.push(`label: '${field.label.replace(/'/g, "\\'")}'`);
|
|
274
|
+
// Optional properties
|
|
275
|
+
if (field.required) {
|
|
276
|
+
parts.push('required: true');
|
|
277
|
+
}
|
|
278
|
+
if (field.helpText) {
|
|
279
|
+
parts.push(`helpText: '${field.helpText.replace(/'/g, "\\'")}'`);
|
|
280
|
+
}
|
|
281
|
+
// Handle field-type specific options
|
|
282
|
+
if (field.type === 'text' && field.options) {
|
|
283
|
+
if (field.options.maxLength) {
|
|
284
|
+
parts.push(`maxLength: ${field.options.maxLength}`);
|
|
285
|
+
}
|
|
286
|
+
if (field.options.minLength) {
|
|
287
|
+
parts.push(`minLength: ${field.options.minLength}`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
if (field.type === 'number' && field.options) {
|
|
291
|
+
if (field.options.min !== undefined) {
|
|
292
|
+
parts.push(`min: ${field.options.min}`);
|
|
293
|
+
}
|
|
294
|
+
if (field.options.max !== undefined) {
|
|
295
|
+
parts.push(`max: ${field.options.max}`);
|
|
296
|
+
}
|
|
297
|
+
if (field.options.step !== undefined) {
|
|
298
|
+
parts.push(`step: ${field.options.step}`);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
if ((field.type === 'select' || field.type === 'multiselect') && field.options?.options) {
|
|
302
|
+
const options = field.options.options;
|
|
303
|
+
const optionsStr = options
|
|
304
|
+
.map((o) => `{ label: '${o.label.replace(/'/g, "\\'")}', value: '${o.value.replace(/'/g, "\\'")}' }`)
|
|
305
|
+
.join(', ');
|
|
306
|
+
parts.push(`options: [${optionsStr}]`);
|
|
307
|
+
}
|
|
308
|
+
if (field.type === 'entity-reference' && field.options?.referenceTypes) {
|
|
309
|
+
const refTypes = field.options.referenceTypes;
|
|
310
|
+
parts.push(`referenceTypes: [${refTypes.map((t) => `'${t}'`).join(', ')}]`);
|
|
311
|
+
if (field.options.multiple) {
|
|
312
|
+
parts.push('multiple: true');
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
if ((field.type === 'list' || field.type === 'tree') && field.options?.itemType) {
|
|
316
|
+
parts.push(`itemType: '${field.options.itemType}'`);
|
|
317
|
+
if (field.options.minItems !== undefined) {
|
|
318
|
+
parts.push(`minItems: ${field.options.minItems}`);
|
|
319
|
+
}
|
|
320
|
+
if (field.options.maxItems !== undefined) {
|
|
321
|
+
parts.push(`maxItems: ${field.options.maxItems}`);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
if ((field.type === 'image' || field.type === 'video' || field.type === 'file') && field.options) {
|
|
325
|
+
if (field.options.allowedTypes) {
|
|
326
|
+
const types = field.options.allowedTypes;
|
|
327
|
+
parts.push(`allowedTypes: [${types.map((t) => `'${t}'`).join(', ')}]`);
|
|
328
|
+
}
|
|
329
|
+
if (field.options.maxSize) {
|
|
330
|
+
parts.push(`maxSize: ${field.options.maxSize}`);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return `{ ${parts.join(', ')} }`;
|
|
334
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write a file to disk with optional Prettier formatting
|
|
3
|
+
*/
|
|
4
|
+
export declare function writeGeneratedFile(filePath: string, content: string, usePrettier?: boolean): Promise<void>;
|
|
5
|
+
/**
|
|
6
|
+
* Write multiple files in batch
|
|
7
|
+
*/
|
|
8
|
+
export declare function writeFiles(files: Array<{
|
|
9
|
+
path: string;
|
|
10
|
+
content: string;
|
|
11
|
+
}>, usePrettier?: boolean): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=write-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-files.d.ts","sourceRoot":"","sources":["../../src/writer/write-files.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,OAAc,GAC1B,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAC/C,WAAW,GAAE,OAAc,GAC1B,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { mkdir, writeFile } from 'fs/promises';
|
|
2
|
+
import { dirname } from 'path';
|
|
3
|
+
import { format } from 'prettier';
|
|
4
|
+
/**
|
|
5
|
+
* Write a file to disk with optional Prettier formatting
|
|
6
|
+
*/
|
|
7
|
+
export async function writeGeneratedFile(filePath, content, usePrettier = true) {
|
|
8
|
+
// Ensure directory exists
|
|
9
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
10
|
+
// Format with Prettier if enabled
|
|
11
|
+
let formattedContent = content;
|
|
12
|
+
if (usePrettier) {
|
|
13
|
+
try {
|
|
14
|
+
const parser = filePath.endsWith('.graphql') ? 'graphql' : 'typescript';
|
|
15
|
+
formattedContent = await format(content, {
|
|
16
|
+
parser,
|
|
17
|
+
semi: true,
|
|
18
|
+
singleQuote: true,
|
|
19
|
+
trailingComma: 'es5',
|
|
20
|
+
printWidth: 100,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
catch (_error) {
|
|
24
|
+
console.warn(`Warning: Failed to format ${filePath}, writing unformatted`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Write file
|
|
28
|
+
await writeFile(filePath, formattedContent, 'utf-8');
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Write multiple files in batch
|
|
32
|
+
*/
|
|
33
|
+
export async function writeFiles(files, usePrettier = true) {
|
|
34
|
+
await Promise.all(files.map((file) => writeGeneratedFile(file.path, file.content, usePrettier)));
|
|
35
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@eide/uniformgen",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Type-safe code generator for Foir - generates TypeScript types and GraphQL operations from your project schemas",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"bin": {
|
|
10
|
+
"uniformgen": "./dist/cli.js"
|
|
11
|
+
},
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.js",
|
|
15
|
+
"import": "./dist/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"README.md"
|
|
21
|
+
],
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsc",
|
|
24
|
+
"dev": "echo 'UniformGen is a CLI tool. Use ./test-uniformgen.sh to test it locally.'",
|
|
25
|
+
"dev:cli": "tsx src/cli.ts",
|
|
26
|
+
"dev:watch": "tsx watch src/cli.ts",
|
|
27
|
+
"check-types": "tsc --noEmit",
|
|
28
|
+
"test": "vitest run",
|
|
29
|
+
"test:watch": "vitest watch",
|
|
30
|
+
"codegen": "graphql-codegen --config codegen.ts"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"foir",
|
|
34
|
+
"eide",
|
|
35
|
+
"cms",
|
|
36
|
+
"codegen",
|
|
37
|
+
"typescript",
|
|
38
|
+
"graphql",
|
|
39
|
+
"type-safety"
|
|
40
|
+
],
|
|
41
|
+
"author": "EIDE Team",
|
|
42
|
+
"license": "UNLICENSED",
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"chalk": "^5.3.0",
|
|
45
|
+
"commander": "^12.1.0",
|
|
46
|
+
"dotenv": "^16.4.5",
|
|
47
|
+
"glob": "^10.3.10",
|
|
48
|
+
"graphql": "^16.9.0",
|
|
49
|
+
"graphql-request": "^7.1.2",
|
|
50
|
+
"inquirer": "^9.2.12",
|
|
51
|
+
"open": "^10.1.0",
|
|
52
|
+
"ora": "^8.1.1",
|
|
53
|
+
"prettier": "^3.4.2",
|
|
54
|
+
"zod": "^3.24.1"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@foir/config": "workspace:*",
|
|
58
|
+
"@graphql-codegen/cli": "^5.0.7",
|
|
59
|
+
"@graphql-codegen/client-preset": "^4.8.3",
|
|
60
|
+
"@graphql-typed-document-node/core": "^3.2.0",
|
|
61
|
+
"@types/inquirer": "^9.0.7",
|
|
62
|
+
"@types/node": "^22.5.0",
|
|
63
|
+
"tsx": "^4.20.0",
|
|
64
|
+
"typescript": "5.9.2",
|
|
65
|
+
"vitest": "^3.2.4"
|
|
66
|
+
},
|
|
67
|
+
"engines": {
|
|
68
|
+
"node": ">=18.0.0"
|
|
69
|
+
}
|
|
70
|
+
}
|