@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,122 @@
|
|
|
1
|
+
import type { FieldSchema, ValidationRule } from '../fetcher/fetch-schemas.js';
|
|
2
|
+
/**
|
|
3
|
+
* Entity model definition for code-first schema management
|
|
4
|
+
*/
|
|
5
|
+
export interface EntityModelDefinition {
|
|
6
|
+
/** Unique key for the model (e.g., 'article', 'hero-banner') */
|
|
7
|
+
key: string;
|
|
8
|
+
/** Display name */
|
|
9
|
+
name: string;
|
|
10
|
+
/** Plural display name (optional) */
|
|
11
|
+
pluralName?: string;
|
|
12
|
+
/** Description of the model */
|
|
13
|
+
description?: string;
|
|
14
|
+
/** Tier: 1=singleton, 2=no variants, 3=with variants */
|
|
15
|
+
tier: 1 | 2 | 3;
|
|
16
|
+
/** Editor mode: 'flat' or 'tree' */
|
|
17
|
+
editorMode?: 'flat' | 'tree';
|
|
18
|
+
/** Model modes */
|
|
19
|
+
modes: {
|
|
20
|
+
/** Can create standalone records (CRUD via API) */
|
|
21
|
+
records: boolean;
|
|
22
|
+
/** Can be used as a field type in other models */
|
|
23
|
+
inline: boolean;
|
|
24
|
+
};
|
|
25
|
+
/** Field definitions */
|
|
26
|
+
fields: FieldDefinitionInput[];
|
|
27
|
+
/** Lifecycle hooks configuration */
|
|
28
|
+
hooks?: {
|
|
29
|
+
onCreate?: HookDefinition[];
|
|
30
|
+
onUpdate?: HookDefinition[];
|
|
31
|
+
onDelete?: HookDefinition[];
|
|
32
|
+
onPublish?: HookDefinition[];
|
|
33
|
+
onUnpublish?: HookDefinition[];
|
|
34
|
+
};
|
|
35
|
+
/** Pages configuration - enables web page generation for records */
|
|
36
|
+
pages?: {
|
|
37
|
+
/** Whether pages are enabled for this entity type */
|
|
38
|
+
enabled?: boolean;
|
|
39
|
+
/** Sitemap configuration */
|
|
40
|
+
sitemap?: {
|
|
41
|
+
changefreq?: string;
|
|
42
|
+
priority?: number;
|
|
43
|
+
};
|
|
44
|
+
/** Default template reference */
|
|
45
|
+
defaultTemplate?: {
|
|
46
|
+
modelKey: string;
|
|
47
|
+
naturalKey: string;
|
|
48
|
+
};
|
|
49
|
+
/** Parent model relationships */
|
|
50
|
+
parentModels?: Array<{
|
|
51
|
+
modelKey: string;
|
|
52
|
+
cascadeDelete?: boolean;
|
|
53
|
+
}>;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Field definition input for schema definition
|
|
58
|
+
*/
|
|
59
|
+
export interface FieldDefinitionInput {
|
|
60
|
+
/** Field key (must be unique within model) */
|
|
61
|
+
key: string;
|
|
62
|
+
/** Field type (text, number, image, etc. or another entity model key) */
|
|
63
|
+
type: string;
|
|
64
|
+
/** Display label */
|
|
65
|
+
label: string;
|
|
66
|
+
/** Whether field is required */
|
|
67
|
+
required?: boolean;
|
|
68
|
+
/** Help text shown to editors */
|
|
69
|
+
helpText?: string;
|
|
70
|
+
/** Placeholder text */
|
|
71
|
+
placeholder?: string;
|
|
72
|
+
/** Default value */
|
|
73
|
+
defaultValue?: any;
|
|
74
|
+
/** Type-specific options */
|
|
75
|
+
options?: Record<string, any>;
|
|
76
|
+
/** Validation rules */
|
|
77
|
+
validation?: ValidationRule[];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Hook definition for lifecycle events
|
|
81
|
+
*/
|
|
82
|
+
export interface HookDefinition {
|
|
83
|
+
type: 'webhook' | 'expression';
|
|
84
|
+
/** For webhook type */
|
|
85
|
+
url?: string;
|
|
86
|
+
method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
87
|
+
headers?: Record<string, string>;
|
|
88
|
+
async?: boolean;
|
|
89
|
+
additionalData?: Record<string, any>;
|
|
90
|
+
/** For expression type */
|
|
91
|
+
description?: string;
|
|
92
|
+
expression?: any;
|
|
93
|
+
hooks?: HookDefinition[];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Define an entity model for code-first schema management
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```typescript
|
|
100
|
+
* // schemas/article.schema.ts
|
|
101
|
+
* import { defineEntityModel } from '@eide/uniformgen';
|
|
102
|
+
*
|
|
103
|
+
* export default defineEntityModel({
|
|
104
|
+
* key: 'article',
|
|
105
|
+
* name: 'Article',
|
|
106
|
+
* pluralName: 'Articles',
|
|
107
|
+
* tier: 3,
|
|
108
|
+
* modes: { records: true, inline: false },
|
|
109
|
+
* fields: [
|
|
110
|
+
* { key: 'title', type: 'text', label: 'Title', required: true },
|
|
111
|
+
* { key: 'slug', type: 'text', label: 'Slug', required: true },
|
|
112
|
+
* { key: 'content', type: 'richtext', label: 'Content' },
|
|
113
|
+
* ],
|
|
114
|
+
* });
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
export declare function defineEntityModel(definition: EntityModelDefinition): EntityModelDefinition;
|
|
118
|
+
/**
|
|
119
|
+
* Convert entity model definition to API field schema format
|
|
120
|
+
*/
|
|
121
|
+
export declare function toFieldSchema(field: FieldDefinitionInput): FieldSchema;
|
|
122
|
+
//# sourceMappingURL=define-entity-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-entity-model.d.ts","sourceRoot":"","sources":["../../src/schema/define-entity-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Define an entity model for code-first schema management
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```typescript
|
|
6
|
+
* // schemas/article.schema.ts
|
|
7
|
+
* import { defineEntityModel } from '@eide/uniformgen';
|
|
8
|
+
*
|
|
9
|
+
* export default defineEntityModel({
|
|
10
|
+
* key: 'article',
|
|
11
|
+
* name: 'Article',
|
|
12
|
+
* pluralName: 'Articles',
|
|
13
|
+
* tier: 3,
|
|
14
|
+
* modes: { records: true, inline: false },
|
|
15
|
+
* fields: [
|
|
16
|
+
* { key: 'title', type: 'text', label: 'Title', required: true },
|
|
17
|
+
* { key: 'slug', type: 'text', label: 'Slug', required: true },
|
|
18
|
+
* { key: 'content', type: 'richtext', label: 'Content' },
|
|
19
|
+
* ],
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function defineEntityModel(definition) {
|
|
24
|
+
// Validate required fields
|
|
25
|
+
if (!definition.key) {
|
|
26
|
+
throw new Error('Entity model key is required');
|
|
27
|
+
}
|
|
28
|
+
if (!definition.name) {
|
|
29
|
+
throw new Error('Entity model name is required');
|
|
30
|
+
}
|
|
31
|
+
if (!definition.fields || definition.fields.length === 0) {
|
|
32
|
+
throw new Error('Entity model must have at least one field');
|
|
33
|
+
}
|
|
34
|
+
if (definition.modes.records === undefined && definition.modes.inline === undefined) {
|
|
35
|
+
throw new Error('Entity model must specify at least one mode (records or inline)');
|
|
36
|
+
}
|
|
37
|
+
// Set defaults
|
|
38
|
+
return {
|
|
39
|
+
...definition,
|
|
40
|
+
editorMode: definition.editorMode ?? 'flat',
|
|
41
|
+
pluralName: definition.pluralName ?? `${definition.name}s`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Convert entity model definition to API field schema format
|
|
46
|
+
*/
|
|
47
|
+
export function toFieldSchema(field) {
|
|
48
|
+
return {
|
|
49
|
+
key: field.key,
|
|
50
|
+
type: field.type,
|
|
51
|
+
label: field.label,
|
|
52
|
+
required: field.required,
|
|
53
|
+
helpText: field.helpText,
|
|
54
|
+
placeholder: field.placeholder,
|
|
55
|
+
defaultValue: field.defaultValue,
|
|
56
|
+
options: field.options,
|
|
57
|
+
validation: field.validation,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { EntityModelDefinition } from './define-entity-model.js';
|
|
2
|
+
/**
|
|
3
|
+
* Load entity model schemas from a directory
|
|
4
|
+
*/
|
|
5
|
+
export declare function loadSchemas(directory: string, pattern?: string): Promise<EntityModelDefinition[]>;
|
|
6
|
+
/**
|
|
7
|
+
* Generate schema file content from an entity model
|
|
8
|
+
*/
|
|
9
|
+
export declare function generateSchemaFile(model: EntityModelDefinition): string;
|
|
10
|
+
//# sourceMappingURL=schema-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-loader.d.ts","sourceRoot":"","sources":["../../src/schema/schema-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtE;;GAEG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,MAAyB,GACjC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CA2ClC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CA4CvE"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import { resolve, basename } from 'path';
|
|
3
|
+
import { pathToFileURL } from 'url';
|
|
4
|
+
import { glob } from 'glob';
|
|
5
|
+
/**
|
|
6
|
+
* Load entity model schemas from a directory
|
|
7
|
+
*/
|
|
8
|
+
export async function loadSchemas(directory, pattern = '**/*.schema.ts') {
|
|
9
|
+
const absoluteDir = resolve(process.cwd(), directory);
|
|
10
|
+
// Check if directory exists
|
|
11
|
+
try {
|
|
12
|
+
await fs.access(absoluteDir);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
throw new Error(`Schema directory not found: ${absoluteDir}`);
|
|
16
|
+
}
|
|
17
|
+
// Find schema files
|
|
18
|
+
const files = await glob(pattern, {
|
|
19
|
+
cwd: absoluteDir,
|
|
20
|
+
absolute: true,
|
|
21
|
+
});
|
|
22
|
+
if (files.length === 0) {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
// Load each schema
|
|
26
|
+
const schemas = [];
|
|
27
|
+
for (const file of files) {
|
|
28
|
+
try {
|
|
29
|
+
const fileUrl = pathToFileURL(file).href;
|
|
30
|
+
const module = await import(fileUrl);
|
|
31
|
+
const schema = module.default || module;
|
|
32
|
+
if (!schema || !schema.key) {
|
|
33
|
+
console.warn(`Warning: ${basename(file)} does not export a valid entity model definition`);
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
schemas.push(schema);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
throw new Error(`Failed to load schema from ${file}: ${error instanceof Error ? error.message : String(error)}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return schemas;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Generate schema file content from an entity model
|
|
46
|
+
*/
|
|
47
|
+
export function generateSchemaFile(model) {
|
|
48
|
+
const fieldDefs = model.fields
|
|
49
|
+
.map((f) => {
|
|
50
|
+
const props = [
|
|
51
|
+
`key: '${f.key}'`,
|
|
52
|
+
`type: '${f.type}'`,
|
|
53
|
+
`label: '${f.label}'`,
|
|
54
|
+
];
|
|
55
|
+
if (f.required)
|
|
56
|
+
props.push('required: true');
|
|
57
|
+
if (f.helpText)
|
|
58
|
+
props.push(`helpText: '${f.helpText}'`);
|
|
59
|
+
if (f.placeholder)
|
|
60
|
+
props.push(`placeholder: '${f.placeholder}'`);
|
|
61
|
+
if (f.defaultValue !== undefined) {
|
|
62
|
+
props.push(`defaultValue: ${JSON.stringify(f.defaultValue)}`);
|
|
63
|
+
}
|
|
64
|
+
if (f.options) {
|
|
65
|
+
props.push(`options: ${JSON.stringify(f.options)}`);
|
|
66
|
+
}
|
|
67
|
+
if (f.validation && f.validation.length > 0) {
|
|
68
|
+
props.push(`validation: ${JSON.stringify(f.validation)}`);
|
|
69
|
+
}
|
|
70
|
+
return ` { ${props.join(', ')} }`;
|
|
71
|
+
})
|
|
72
|
+
.join(',\n');
|
|
73
|
+
return `import { defineEntityModel } from '@eide/uniformgen';
|
|
74
|
+
|
|
75
|
+
export default defineEntityModel({
|
|
76
|
+
key: '${model.key}',
|
|
77
|
+
name: '${model.name}',
|
|
78
|
+
${model.pluralName ? `pluralName: '${model.pluralName}',` : ''}
|
|
79
|
+
${model.description ? `description: '${model.description}',` : ''}
|
|
80
|
+
tier: ${model.tier},
|
|
81
|
+
${model.editorMode ? `editorMode: '${model.editorMode}',` : ''}
|
|
82
|
+
modes: {
|
|
83
|
+
records: ${model.modes.records},
|
|
84
|
+
inline: ${model.modes.inline},
|
|
85
|
+
},
|
|
86
|
+
fields: [
|
|
87
|
+
${fieldDefs}
|
|
88
|
+
],
|
|
89
|
+
});
|
|
90
|
+
`;
|
|
91
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps EIDE field types to TypeScript types
|
|
3
|
+
* Based on the field type mapping table in uniformgen-typesafe-entities.md
|
|
4
|
+
*/
|
|
5
|
+
export interface TypeMapping {
|
|
6
|
+
outputType: string;
|
|
7
|
+
inputType: string;
|
|
8
|
+
needsImport?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Primitive field types that are built-in
|
|
12
|
+
* Based on the current field type registry in packages/platform/src/entities/field-types/registry.ts
|
|
13
|
+
*/
|
|
14
|
+
export declare const PRIMITIVE_FIELD_TYPES: Set<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Check if a field type is a primitive (built-in) type
|
|
17
|
+
*/
|
|
18
|
+
export declare function isPrimitiveFieldType(type: string): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Field type to TypeScript type mapping
|
|
21
|
+
* Based on the current field type registry in packages/platform/src/entities/field-types/registry.ts
|
|
22
|
+
*/
|
|
23
|
+
export declare const FIELD_TYPE_MAPPING: Record<string, TypeMapping>;
|
|
24
|
+
/**
|
|
25
|
+
* Get TypeScript type for a field
|
|
26
|
+
*/
|
|
27
|
+
export declare function getFieldType(field: {
|
|
28
|
+
type: string;
|
|
29
|
+
options?: any;
|
|
30
|
+
}, mode?: 'output' | 'input'): string;
|
|
31
|
+
/**
|
|
32
|
+
* Get all imports needed for a set of fields
|
|
33
|
+
*/
|
|
34
|
+
export declare function getRequiredImports(fields: Array<{
|
|
35
|
+
type: string;
|
|
36
|
+
options?: any;
|
|
37
|
+
}>): Set<string>;
|
|
38
|
+
/**
|
|
39
|
+
* Get all inline schema references from fields
|
|
40
|
+
* Returns the keys of entity models that are used as field types
|
|
41
|
+
*/
|
|
42
|
+
export declare function getInlineSchemaReferences(fields: Array<{
|
|
43
|
+
type: string;
|
|
44
|
+
options?: any;
|
|
45
|
+
}>): Set<string>;
|
|
46
|
+
/**
|
|
47
|
+
* Convert field ID to camelCase
|
|
48
|
+
*/
|
|
49
|
+
export declare function toCamelCase(str: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* Convert field ID to PascalCase
|
|
52
|
+
*/
|
|
53
|
+
export declare function toPascalCase(str: string): string;
|
|
54
|
+
/**
|
|
55
|
+
* Sanitize field name for TypeScript
|
|
56
|
+
* Replaces special characters and spaces with underscores.
|
|
57
|
+
* Prefixes with underscore if name starts with a number.
|
|
58
|
+
*/
|
|
59
|
+
export declare function sanitizeFieldName(name: string): string;
|
|
60
|
+
/**
|
|
61
|
+
* Field schema from the API (for type reference)
|
|
62
|
+
*/
|
|
63
|
+
export interface FieldSchemaForGen {
|
|
64
|
+
key: string;
|
|
65
|
+
type: string;
|
|
66
|
+
label: string;
|
|
67
|
+
required?: boolean;
|
|
68
|
+
helpText?: string;
|
|
69
|
+
placeholder?: string;
|
|
70
|
+
defaultValue?: any;
|
|
71
|
+
options?: any;
|
|
72
|
+
validation?: Array<{
|
|
73
|
+
type: string;
|
|
74
|
+
value: any;
|
|
75
|
+
message?: string;
|
|
76
|
+
}>;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Generate a strongly-typed field definition object string
|
|
80
|
+
* Returns a string that can be used in generated TypeScript code
|
|
81
|
+
*/
|
|
82
|
+
export declare function generateFieldDef(field: FieldSchemaForGen): string;
|
|
83
|
+
//# sourceMappingURL=field-mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-mapping.d.ts","sourceRoot":"","sources":["../../src/utils/field-mapping.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,aA+BhC,CAAC;AAEH;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA2G1D,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,GAAG,CAAA;CAAE,EACtC,IAAI,GAAE,QAAQ,GAAG,OAAkB,GAClC,MAAM,CAgDR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,GAC7C,GAAG,CAAC,MAAM,CAAC,CAmBb;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,GAC7C,GAAG,CAAC,MAAM,CAAC,CAmBb;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUtD;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CA4EjE"}
|