@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,409 @@
|
|
|
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
|
+
/**
|
|
10
|
+
* Check if a model has CMS enabled (cms.enabled in extensions)
|
|
11
|
+
* Note: The `pages` property on EntityModel is extracted from extensions.cms
|
|
12
|
+
*/
|
|
13
|
+
export function hasRoutingEnabled(model) {
|
|
14
|
+
return model.pages?.enabled === true;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get all routable models (models with cms.enabled = true)
|
|
18
|
+
*/
|
|
19
|
+
export function getRoutableModels(models) {
|
|
20
|
+
return models.filter(hasRoutingEnabled);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Generate React resolveRoute hook
|
|
24
|
+
*/
|
|
25
|
+
export function generateResolveRouteReact(routableModels) {
|
|
26
|
+
const modelKeys = routableModels.map(m => m.key);
|
|
27
|
+
return `/**
|
|
28
|
+
* CMS Route Resolution Hook
|
|
29
|
+
*
|
|
30
|
+
* Resolves any routable entity by URL path with template, zones, and layouts.
|
|
31
|
+
* Use with @eide/foir-renderer's EntityRenderer component.
|
|
32
|
+
*
|
|
33
|
+
* Handles models: ${modelKeys.join(', ')}
|
|
34
|
+
*
|
|
35
|
+
* @generated by UniformGen - DO NOT EDIT MANUALLY
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
import { useQuery, type QueryHookOptions } from '@apollo/client';
|
|
39
|
+
import { gql } from '@apollo/client';
|
|
40
|
+
import type {
|
|
41
|
+
ResolvedRoute,
|
|
42
|
+
VariantContext,
|
|
43
|
+
ReferenceResolutionOptions,
|
|
44
|
+
} from './types.js';
|
|
45
|
+
|
|
46
|
+
// Re-export types for convenience
|
|
47
|
+
export type {
|
|
48
|
+
ResolvedRoute,
|
|
49
|
+
ResolvedRecord,
|
|
50
|
+
ResolvedVariant,
|
|
51
|
+
ResolvedContent,
|
|
52
|
+
ResolvedField,
|
|
53
|
+
ResolvedTemplateRef,
|
|
54
|
+
ResolutionContext,
|
|
55
|
+
FieldLayout,
|
|
56
|
+
LayoutPosition,
|
|
57
|
+
FieldSource,
|
|
58
|
+
GridConfig,
|
|
59
|
+
Breadcrumb,
|
|
60
|
+
BreadcrumbType,
|
|
61
|
+
VariantContext,
|
|
62
|
+
ReferenceResolutionOptions,
|
|
63
|
+
} from './types.js';
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* GraphQL query for route resolution
|
|
67
|
+
*
|
|
68
|
+
* Fetches full template/zone data for CMS rendering
|
|
69
|
+
*/
|
|
70
|
+
const RESOLVE_ROUTE_QUERY = gql\`
|
|
71
|
+
query ResolveRoute(
|
|
72
|
+
$path: String!
|
|
73
|
+
$locale: String
|
|
74
|
+
$contexts: JSON
|
|
75
|
+
$referenceOptions: ReferenceResolutionOptionsInput
|
|
76
|
+
) {
|
|
77
|
+
resolveRoute(
|
|
78
|
+
path: $path
|
|
79
|
+
locale: $locale
|
|
80
|
+
contexts: $contexts
|
|
81
|
+
referenceOptions: $referenceOptions
|
|
82
|
+
) {
|
|
83
|
+
record {
|
|
84
|
+
id
|
|
85
|
+
modelKey
|
|
86
|
+
naturalKey
|
|
87
|
+
metadata
|
|
88
|
+
}
|
|
89
|
+
variant {
|
|
90
|
+
id
|
|
91
|
+
variantKey
|
|
92
|
+
}
|
|
93
|
+
content {
|
|
94
|
+
template {
|
|
95
|
+
id
|
|
96
|
+
modelKey
|
|
97
|
+
naturalKey
|
|
98
|
+
content
|
|
99
|
+
}
|
|
100
|
+
layoutMode
|
|
101
|
+
fields {
|
|
102
|
+
key
|
|
103
|
+
type
|
|
104
|
+
label
|
|
105
|
+
required
|
|
106
|
+
value
|
|
107
|
+
layout {
|
|
108
|
+
lg { x y w h minW maxW minH maxH }
|
|
109
|
+
md { x y w h minW maxW minH maxH }
|
|
110
|
+
sm { x y w h minW maxW minH maxH }
|
|
111
|
+
xs { x y w h minW maxW minH maxH }
|
|
112
|
+
}
|
|
113
|
+
order
|
|
114
|
+
source
|
|
115
|
+
}
|
|
116
|
+
extraContent {
|
|
117
|
+
key
|
|
118
|
+
type
|
|
119
|
+
label
|
|
120
|
+
required
|
|
121
|
+
value
|
|
122
|
+
layout {
|
|
123
|
+
lg { x y w h minW maxW minH maxH }
|
|
124
|
+
md { x y w h minW maxW minH maxH }
|
|
125
|
+
sm { x y w h minW maxW minH maxH }
|
|
126
|
+
xs { x y w h minW maxW minH maxH }
|
|
127
|
+
}
|
|
128
|
+
order
|
|
129
|
+
source
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
breadcrumbs {
|
|
133
|
+
label
|
|
134
|
+
url
|
|
135
|
+
type
|
|
136
|
+
isCurrent
|
|
137
|
+
}
|
|
138
|
+
gridConfig {
|
|
139
|
+
breakpoints
|
|
140
|
+
cols
|
|
141
|
+
rowHeight
|
|
142
|
+
containerPadding
|
|
143
|
+
margin
|
|
144
|
+
}
|
|
145
|
+
resolvedWith {
|
|
146
|
+
locale
|
|
147
|
+
contexts
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
\`;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Resolve entity content by URL path with full CMS features
|
|
155
|
+
*
|
|
156
|
+
* Returns template, zones, layouts, and breadcrumbs for rendering
|
|
157
|
+
* with @eide/foir-renderer's EntityRenderer component.
|
|
158
|
+
*
|
|
159
|
+
* @param path - URL path (e.g., '/uk/products/winter-jacket')
|
|
160
|
+
* @param context - Variant context (locale, market, device, etc.)
|
|
161
|
+
* @param options - Additional options (reference resolution, query options)
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* const { data, loading } = useResolveRoute('/de/automated-collection', {
|
|
165
|
+
* locale: 'de-DE',
|
|
166
|
+
* contexts: { market: 'eu', device: 'mobile' },
|
|
167
|
+
* });
|
|
168
|
+
*
|
|
169
|
+
* // Use with EntityRenderer
|
|
170
|
+
* if (data) {
|
|
171
|
+
* return <EntityRenderer data={data} registry={registry} />;
|
|
172
|
+
* }
|
|
173
|
+
*/
|
|
174
|
+
export function useResolveRoute(
|
|
175
|
+
path: string,
|
|
176
|
+
context?: VariantContext,
|
|
177
|
+
options?: {
|
|
178
|
+
referenceOptions?: ReferenceResolutionOptions;
|
|
179
|
+
queryOptions?: Omit<QueryHookOptions, 'variables'>;
|
|
180
|
+
}
|
|
181
|
+
) {
|
|
182
|
+
const { queryOptions, referenceOptions } = options ?? {};
|
|
183
|
+
|
|
184
|
+
const result = useQuery(RESOLVE_ROUTE_QUERY, {
|
|
185
|
+
...queryOptions,
|
|
186
|
+
variables: {
|
|
187
|
+
path,
|
|
188
|
+
locale: context?.locale,
|
|
189
|
+
contexts: context?.contexts,
|
|
190
|
+
referenceOptions,
|
|
191
|
+
},
|
|
192
|
+
skip: !path,
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
return {
|
|
196
|
+
...result,
|
|
197
|
+
data: result.data?.resolveRoute as ResolvedRoute | undefined,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* List of model keys that support route resolution
|
|
203
|
+
*/
|
|
204
|
+
export const ROUTABLE_MODELS = [${modelKeys.map(k => `'${k}'`).join(', ')}] as const;
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Type for routable model keys
|
|
208
|
+
*/
|
|
209
|
+
export type RoutableModelKey = typeof ROUTABLE_MODELS[number];
|
|
210
|
+
`;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Generate Remix/Hydrogen resolveRoute function
|
|
214
|
+
*/
|
|
215
|
+
export function generateResolveRouteRemix(routableModels) {
|
|
216
|
+
const modelKeys = routableModels.map(m => m.key);
|
|
217
|
+
return `/**
|
|
218
|
+
* CMS Route Resolution Function
|
|
219
|
+
*
|
|
220
|
+
* Server-side function for resolving any routable entity by URL path.
|
|
221
|
+
* Use in Remix loaders or Hydrogen server functions.
|
|
222
|
+
*
|
|
223
|
+
* Handles models: ${modelKeys.join(', ')}
|
|
224
|
+
*
|
|
225
|
+
* @generated by UniformGen - DO NOT EDIT MANUALLY
|
|
226
|
+
*/
|
|
227
|
+
|
|
228
|
+
import type {
|
|
229
|
+
ResolvedRoute,
|
|
230
|
+
VariantContext,
|
|
231
|
+
ReferenceResolutionOptions,
|
|
232
|
+
} from './types.js';
|
|
233
|
+
|
|
234
|
+
// Re-export types for convenience
|
|
235
|
+
export type {
|
|
236
|
+
ResolvedRoute,
|
|
237
|
+
ResolvedRecord,
|
|
238
|
+
ResolvedVariant,
|
|
239
|
+
ResolvedContent,
|
|
240
|
+
ResolvedField,
|
|
241
|
+
ResolvedTemplateRef,
|
|
242
|
+
ResolutionContext,
|
|
243
|
+
FieldLayout,
|
|
244
|
+
LayoutPosition,
|
|
245
|
+
FieldSource,
|
|
246
|
+
GridConfig,
|
|
247
|
+
Breadcrumb,
|
|
248
|
+
BreadcrumbType,
|
|
249
|
+
VariantContext,
|
|
250
|
+
ReferenceResolutionOptions,
|
|
251
|
+
} from './types.js';
|
|
252
|
+
|
|
253
|
+
/** GraphQL client interface */
|
|
254
|
+
export interface GraphQLClient {
|
|
255
|
+
request<T>(query: string, variables?: Record<string, unknown>): Promise<T>;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* GraphQL query for route resolution
|
|
260
|
+
*/
|
|
261
|
+
const RESOLVE_ROUTE_QUERY = \`
|
|
262
|
+
query ResolveRoute(
|
|
263
|
+
$path: String!
|
|
264
|
+
$locale: String
|
|
265
|
+
$contexts: JSON
|
|
266
|
+
$referenceOptions: ReferenceResolutionOptionsInput
|
|
267
|
+
) {
|
|
268
|
+
resolveRoute(
|
|
269
|
+
path: $path
|
|
270
|
+
locale: $locale
|
|
271
|
+
contexts: $contexts
|
|
272
|
+
referenceOptions: $referenceOptions
|
|
273
|
+
) {
|
|
274
|
+
record {
|
|
275
|
+
id
|
|
276
|
+
modelKey
|
|
277
|
+
naturalKey
|
|
278
|
+
metadata
|
|
279
|
+
}
|
|
280
|
+
variant {
|
|
281
|
+
id
|
|
282
|
+
variantKey
|
|
283
|
+
}
|
|
284
|
+
content {
|
|
285
|
+
template {
|
|
286
|
+
id
|
|
287
|
+
modelKey
|
|
288
|
+
naturalKey
|
|
289
|
+
content
|
|
290
|
+
}
|
|
291
|
+
layoutMode
|
|
292
|
+
fields {
|
|
293
|
+
key
|
|
294
|
+
type
|
|
295
|
+
label
|
|
296
|
+
required
|
|
297
|
+
value
|
|
298
|
+
layout {
|
|
299
|
+
lg { x y w h minW maxW minH maxH }
|
|
300
|
+
md { x y w h minW maxW minH maxH }
|
|
301
|
+
sm { x y w h minW maxW minH maxH }
|
|
302
|
+
xs { x y w h minW maxW minH maxH }
|
|
303
|
+
}
|
|
304
|
+
order
|
|
305
|
+
source
|
|
306
|
+
}
|
|
307
|
+
extraContent {
|
|
308
|
+
key
|
|
309
|
+
type
|
|
310
|
+
label
|
|
311
|
+
required
|
|
312
|
+
value
|
|
313
|
+
layout {
|
|
314
|
+
lg { x y w h minW maxW minH maxH }
|
|
315
|
+
md { x y w h minW maxW minH maxH }
|
|
316
|
+
sm { x y w h minW maxW minH maxH }
|
|
317
|
+
xs { x y w h minW maxW minH maxH }
|
|
318
|
+
}
|
|
319
|
+
order
|
|
320
|
+
source
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
breadcrumbs {
|
|
324
|
+
label
|
|
325
|
+
url
|
|
326
|
+
type
|
|
327
|
+
isCurrent
|
|
328
|
+
}
|
|
329
|
+
gridConfig {
|
|
330
|
+
breakpoints
|
|
331
|
+
cols
|
|
332
|
+
rowHeight
|
|
333
|
+
containerPadding
|
|
334
|
+
margin
|
|
335
|
+
}
|
|
336
|
+
resolvedWith {
|
|
337
|
+
locale
|
|
338
|
+
contexts
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
\`;
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Resolve entity content by URL path with full CMS features
|
|
346
|
+
*
|
|
347
|
+
* Use in Remix loaders or Hydrogen server functions.
|
|
348
|
+
* Returns template, zones, layouts, and breadcrumbs for rendering.
|
|
349
|
+
*
|
|
350
|
+
* @param client - GraphQL client for making requests
|
|
351
|
+
* @param path - URL path (e.g., '/uk/products/winter-jacket')
|
|
352
|
+
* @param context - Variant context (locale, market, device, etc.)
|
|
353
|
+
* @param options - Additional options (reference resolution)
|
|
354
|
+
*
|
|
355
|
+
* @example
|
|
356
|
+
* // In a Remix loader
|
|
357
|
+
* export async function loader({ request, context }: LoaderFunctionArgs) {
|
|
358
|
+
* const url = new URL(request.url);
|
|
359
|
+
* const route = await resolveRoute(context.graphql, url.pathname, {
|
|
360
|
+
* locale: 'de-DE',
|
|
361
|
+
* contexts: { market: 'eu' },
|
|
362
|
+
* });
|
|
363
|
+
*
|
|
364
|
+
* if (!route) {
|
|
365
|
+
* throw new Response('Not Found', { status: 404 });
|
|
366
|
+
* }
|
|
367
|
+
*
|
|
368
|
+
* return json({ route });
|
|
369
|
+
* }
|
|
370
|
+
*
|
|
371
|
+
* // In Hydrogen
|
|
372
|
+
* export async function loader({ context }: LoaderFunctionArgs) {
|
|
373
|
+
* const route = await resolveRoute(context.storefront.graphql, '/products/jacket', {
|
|
374
|
+
* locale: context.storefront.i18n.language,
|
|
375
|
+
* });
|
|
376
|
+
* return json({ route });
|
|
377
|
+
* }
|
|
378
|
+
*/
|
|
379
|
+
export async function resolveRoute(
|
|
380
|
+
client: GraphQLClient,
|
|
381
|
+
path: string,
|
|
382
|
+
context?: VariantContext,
|
|
383
|
+
options?: {
|
|
384
|
+
referenceOptions?: ReferenceResolutionOptions;
|
|
385
|
+
}
|
|
386
|
+
): Promise<ResolvedRoute | null> {
|
|
387
|
+
const result = await client.request<{ resolveRoute: ResolvedRoute | null }>(
|
|
388
|
+
RESOLVE_ROUTE_QUERY,
|
|
389
|
+
{
|
|
390
|
+
path,
|
|
391
|
+
locale: context?.locale,
|
|
392
|
+
contexts: context?.contexts,
|
|
393
|
+
referenceOptions: options?.referenceOptions,
|
|
394
|
+
}
|
|
395
|
+
);
|
|
396
|
+
return result.resolveRoute;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* List of model keys that support route resolution
|
|
401
|
+
*/
|
|
402
|
+
export const ROUTABLE_MODELS = [${modelKeys.map(k => `'${k}'`).join(', ')}] as const;
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Type for routable model keys
|
|
406
|
+
*/
|
|
407
|
+
export type RoutableModelKey = typeof ROUTABLE_MODELS[number];
|
|
408
|
+
`;
|
|
409
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMS Types Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates TypeScript types for CMS route resolution layer:
|
|
5
|
+
* - ResolvedRoute type with template/zone/layout data
|
|
6
|
+
* - ResolvedField and zone types
|
|
7
|
+
* - Grid configuration types
|
|
8
|
+
*
|
|
9
|
+
* @generated by UniformGen
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Generate CMS types file
|
|
13
|
+
*/
|
|
14
|
+
export declare function generateCmsTypes(): string;
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/generators/cms/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CA2HzC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMS Types Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates TypeScript types for CMS route resolution layer:
|
|
5
|
+
* - ResolvedRoute type with template/zone/layout data
|
|
6
|
+
* - ResolvedField and zone types
|
|
7
|
+
* - Grid configuration types
|
|
8
|
+
*
|
|
9
|
+
* @generated by UniformGen
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Generate CMS types file
|
|
13
|
+
*/
|
|
14
|
+
export function generateCmsTypes() {
|
|
15
|
+
return `/**
|
|
16
|
+
* CMS Resolution Types
|
|
17
|
+
*
|
|
18
|
+
* Types for CMS-level route resolution with templates, zones, and layouts.
|
|
19
|
+
*
|
|
20
|
+
* @generated by UniformGen - DO NOT EDIT MANUALLY
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
// Re-export common resolution types
|
|
24
|
+
export type {
|
|
25
|
+
VariantContext,
|
|
26
|
+
ReferenceResolutionOptions,
|
|
27
|
+
Breadcrumb,
|
|
28
|
+
BreadcrumbType,
|
|
29
|
+
} from '../types/field-types.js';
|
|
30
|
+
|
|
31
|
+
/** Resolved record info */
|
|
32
|
+
export interface ResolvedRecord {
|
|
33
|
+
id: string;
|
|
34
|
+
modelKey: string;
|
|
35
|
+
naturalKey: string | null;
|
|
36
|
+
metadata?: Record<string, unknown>;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Resolved variant info */
|
|
40
|
+
export interface ResolvedVariant {
|
|
41
|
+
id: string;
|
|
42
|
+
variantKey: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Resolution context (what was used to resolve) */
|
|
46
|
+
export interface ResolutionContext {
|
|
47
|
+
locale: string;
|
|
48
|
+
contexts: Record<string, string>;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Layout position for a breakpoint */
|
|
52
|
+
export interface LayoutPosition {
|
|
53
|
+
x: number;
|
|
54
|
+
y: number;
|
|
55
|
+
w: number;
|
|
56
|
+
h: number;
|
|
57
|
+
minW?: number;
|
|
58
|
+
maxW?: number;
|
|
59
|
+
minH?: number;
|
|
60
|
+
maxH?: number;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Responsive layout for a field */
|
|
64
|
+
export interface FieldLayout {
|
|
65
|
+
lg?: LayoutPosition;
|
|
66
|
+
md?: LayoutPosition;
|
|
67
|
+
sm?: LayoutPosition;
|
|
68
|
+
xs?: LayoutPosition;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Source of a resolved field value */
|
|
72
|
+
export type FieldSource = 'schema' | 'template' | 'zone' | 'override';
|
|
73
|
+
|
|
74
|
+
/** Resolved field with value and layout */
|
|
75
|
+
export interface ResolvedField {
|
|
76
|
+
key: string;
|
|
77
|
+
type: string;
|
|
78
|
+
label?: string;
|
|
79
|
+
required?: boolean;
|
|
80
|
+
value: unknown;
|
|
81
|
+
layout?: FieldLayout;
|
|
82
|
+
order?: number;
|
|
83
|
+
source?: FieldSource;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** Template reference */
|
|
87
|
+
export interface ResolvedTemplateRef {
|
|
88
|
+
id: string;
|
|
89
|
+
modelKey: string;
|
|
90
|
+
naturalKey: string;
|
|
91
|
+
content?: unknown;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Resolved content with template and zones */
|
|
95
|
+
export interface ResolvedContent {
|
|
96
|
+
template: ResolvedTemplateRef | null;
|
|
97
|
+
layoutMode: 'grid' | 'list';
|
|
98
|
+
fields: ResolvedField[];
|
|
99
|
+
extraContent?: ResolvedField[];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Grid configuration for layout rendering */
|
|
103
|
+
export interface GridConfig {
|
|
104
|
+
breakpoints: Record<string, number>;
|
|
105
|
+
cols: Record<string, number>;
|
|
106
|
+
rowHeight: number;
|
|
107
|
+
containerPadding: [number, number];
|
|
108
|
+
margin: [number, number];
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** Breadcrumb item */
|
|
112
|
+
export interface Breadcrumb {
|
|
113
|
+
label: string;
|
|
114
|
+
url: string;
|
|
115
|
+
type: BreadcrumbType;
|
|
116
|
+
isCurrent: boolean;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** Breadcrumb type */
|
|
120
|
+
export type BreadcrumbType = 'root' | 'category' | 'collection' | 'product' | 'page' | 'current';
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Resolved route response
|
|
124
|
+
*
|
|
125
|
+
* The primary response type for CMS route resolution.
|
|
126
|
+
* Use with @eide/foir-renderer's EntityRenderer component.
|
|
127
|
+
*/
|
|
128
|
+
export interface ResolvedRoute {
|
|
129
|
+
record: ResolvedRecord;
|
|
130
|
+
variant: ResolvedVariant;
|
|
131
|
+
content: ResolvedContent;
|
|
132
|
+
breadcrumbs: Breadcrumb[];
|
|
133
|
+
gridConfig: GridConfig;
|
|
134
|
+
resolvedWith: ResolutionContext;
|
|
135
|
+
}
|
|
136
|
+
`;
|
|
137
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Types Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates typed context helpers for variant resolution.
|
|
5
|
+
* Contexts define the available dimensions for personalizing content.
|
|
6
|
+
*
|
|
7
|
+
* Unlike other generators, contexts are queried at RUNTIME since their
|
|
8
|
+
* values can change dynamically in the database.
|
|
9
|
+
*/
|
|
10
|
+
import type { ContextDefinition } from '../../fetcher/fetch-schemas.js';
|
|
11
|
+
/**
|
|
12
|
+
* Context definition used at generate time (values not included - fetched at runtime)
|
|
13
|
+
*/
|
|
14
|
+
export interface ContextForGeneration {
|
|
15
|
+
definition: ContextDefinition;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Generate the typed contexts file with runtime query support
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateContextsFile(contexts: ContextForGeneration[]): string;
|
|
21
|
+
/**
|
|
22
|
+
* Generate empty contexts file when no contexts are defined
|
|
23
|
+
*/
|
|
24
|
+
export declare function generateEmptyContextsFile(): string;
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/contexts/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,iBAAiB,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAgV7E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAoQlD"}
|