@homepages/template-kit 0.2.0 → 0.4.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.
Files changed (165) hide show
  1. package/CHANGELOG.md +222 -0
  2. package/README.md +96 -17
  3. package/dist/asset-modules.d.ts +81 -0
  4. package/dist/base.css +9 -0
  5. package/dist/cli/check/config.js +41 -0
  6. package/dist/cli/check/css.js +131 -0
  7. package/dist/cli/check/diagnostics.js +32 -0
  8. package/dist/cli/check/index.js +87 -0
  9. package/dist/cli/check/loader.js +146 -0
  10. package/dist/cli/check/paths.js +15 -0
  11. package/dist/cli/check/relativize.js +18 -0
  12. package/dist/cli/check/render-invariants.js +24 -0
  13. package/dist/cli/check/resolve-tool.js +38 -0
  14. package/dist/cli/check/section-assets.js +58 -0
  15. package/dist/cli/check/stages/deps.js +337 -0
  16. package/dist/cli/check/stages/lint.js +46 -0
  17. package/dist/cli/check/stages/render.js +101 -0
  18. package/dist/cli/check/stages/size.js +274 -0
  19. package/dist/cli/check/stages/tree.js +206 -0
  20. package/dist/cli/check/stages/typecheck.js +46 -0
  21. package/dist/cli/check/stages/validate/catalog-exhaustiveness.js +18 -0
  22. package/dist/cli/check/stages/validate/facts.js +18 -0
  23. package/dist/cli/check/stages/validate/formatter-contract.js +14 -0
  24. package/dist/cli/check/stages/validate/group-contract.js +21 -0
  25. package/dist/cli/check/stages/validate/index.js +66 -0
  26. package/dist/cli/check/stages/validate/list-scalar-contract.js +22 -0
  27. package/dist/cli/check/stages/validate/nav-contract.js +93 -0
  28. package/dist/cli/check/stages/validate/nested-slot-contract.js +12 -0
  29. package/dist/cli/check/stages/validate/object-list-contract.js +31 -0
  30. package/dist/cli/check/stages/validate/orchestrator.js +241 -0
  31. package/dist/cli/check/stages/validate/produced-by-contract.js +18 -0
  32. package/dist/cli/check/stages/validate/row-contract.js +31 -0
  33. package/dist/cli/check/stages/validate/select-contract.js +13 -0
  34. package/dist/cli/check/stages/validate/source-contract.js +21 -0
  35. package/dist/cli/check/stages/validate/variant-contract.js +15 -0
  36. package/dist/cli/check/workspace.js +86 -0
  37. package/dist/cli/dev/build-css.js +91 -0
  38. package/dist/cli/dev/catalog.js +35 -0
  39. package/dist/cli/dev/compose-template.js +38 -0
  40. package/dist/cli/dev/content-override.js +58 -0
  41. package/dist/cli/dev/discover.js +35 -0
  42. package/dist/cli/dev/fill-state.js +75 -0
  43. package/dist/cli/dev/index.js +32 -0
  44. package/dist/cli/dev/inspect.js +38 -0
  45. package/dist/cli/dev/island-bootstrap.js +38 -0
  46. package/dist/cli/dev/island-map.js +35 -0
  47. package/dist/cli/dev/island-transform.js +31 -0
  48. package/dist/cli/dev/manifest-instances.js +31 -0
  49. package/dist/cli/dev/render-section.js +24 -0
  50. package/dist/cli/dev/screenshot-target.js +24 -0
  51. package/dist/cli/dev/section-page.js +54 -0
  52. package/dist/cli/dev/server.js +480 -0
  53. package/dist/cli/dev/slot-schema.js +12 -0
  54. package/dist/cli/dev/structure-summary.js +118 -0
  55. package/dist/cli/dev/tailwind.js +32 -0
  56. package/dist/cli/dev/vite-server.js +33 -0
  57. package/dist/cli/dev/workspace.js +63 -0
  58. package/dist/cli/link/index.js +74 -0
  59. package/dist/cli/link/overlay.js +59 -0
  60. package/dist/cli/link/watch.js +25 -0
  61. package/dist/cli/new/emit.js +48 -0
  62. package/dist/cli/new/index.js +69 -0
  63. package/dist/cli/new/scaffold/section/_Renderer.tsx +20 -0
  64. package/dist/cli/new/scaffold/section/_fill-spec.ts +18 -0
  65. package/dist/cli/new/scaffold/section/_fixtures.ts +13 -0
  66. package/dist/cli/new/scaffold/section/_schema.ts +24 -0
  67. package/dist/cli/new/scaffold/template/_manifest.json +9 -0
  68. package/dist/cli/new/scaffold/template/sections/hero/ExpandableText.tsx +45 -0
  69. package/dist/cli/new/scaffold/template/sections/hero/Renderer.tsx +40 -0
  70. package/dist/cli/new/scaffold/template/sections/hero/components/Feature.tsx +14 -0
  71. package/dist/cli/new/scaffold/template/sections/hero/fill-spec.ts +29 -0
  72. package/dist/cli/new/scaffold/template/sections/hero/fixtures.ts +41 -0
  73. package/dist/cli/new/scaffold/template/sections/hero/schema.ts +60 -0
  74. package/dist/cli/new/scaffold/template/theme.css +24 -0
  75. package/dist/cli/new/scaffold/template/theme.ts +27 -0
  76. package/dist/cli/new/scaffold-assets.js +20 -0
  77. package/dist/cli/pack/collect.js +44 -0
  78. package/dist/cli/pack/guards.js +57 -0
  79. package/dist/cli/pack/index.js +66 -0
  80. package/dist/cli/pack/manifest.js +15 -0
  81. package/dist/cli/pack/zip.js +86 -0
  82. package/dist/cli/theme/generate.js +43 -0
  83. package/dist/cli/theme/index.js +33 -0
  84. package/dist/cli/theme/load-theme.js +69 -0
  85. package/dist/cli.js +100 -16
  86. package/dist/contracts/fill-treatments.js +47 -0
  87. package/dist/design-system/theme.d.ts +30 -300
  88. package/dist/design-system/theme.js +112 -90
  89. package/dist/dev-client/assets/index-DfEfrp6P.css +1 -0
  90. package/dist/dev-client/assets/index-bpMP0b0W.js +50 -0
  91. package/dist/dev-client/index.html +13 -0
  92. package/dist/eslint/is-client-file.d.ts +4 -0
  93. package/dist/eslint/rules/no-hex.js +78 -6
  94. package/dist/eslint.js +1 -1
  95. package/dist/index.d.ts +3 -2
  96. package/dist/index.js +2 -2
  97. package/dist/islands/detect.d.ts +16 -0
  98. package/dist/islands/detect.js +22 -0
  99. package/dist/islands/discover.d.ts +5 -0
  100. package/dist/islands/discover.js +19 -0
  101. package/dist/islands/esbuild-plugin.d.ts +13 -0
  102. package/dist/islands/esbuild-plugin.js +39 -0
  103. package/dist/islands/wrap.d.ts +11 -0
  104. package/dist/islands/wrap.js +48 -0
  105. package/dist/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +77 -0
  106. package/dist/node_modules/magic-string/dist/magic-string.es.js +939 -0
  107. package/dist/package.js +1 -1
  108. package/dist/primitives/Image.js +1 -1
  109. package/dist/schema/fill-spec.d.ts +80 -590
  110. package/dist/schema/fixture-schema.d.ts +5 -81
  111. package/dist/schema/manifest.d.ts +39 -475
  112. package/dist/schema/resolve-section-ref.js +10 -0
  113. package/dist/schema/rows.js +10 -0
  114. package/dist/schema/section-nav.js +9 -0
  115. package/dist/schema/section-schema.d.ts +51 -437
  116. package/dist/schema/slot-types.d.ts +12 -16
  117. package/dist/ssr.d.ts +31 -0
  118. package/dist/ssr.js +46 -0
  119. package/dist/styles.css +31 -88
  120. package/docs/INDEX.md +12 -3
  121. package/docs/assets.md +128 -0
  122. package/docs/check.md +124 -0
  123. package/docs/dev.md +187 -0
  124. package/docs/eslint.md +18 -8
  125. package/docs/islands.md +5 -2
  126. package/docs/llms.txt +59 -9
  127. package/docs/new.md +27 -0
  128. package/docs/overview.md +57 -0
  129. package/docs/pack.md +46 -0
  130. package/docs/primitives.md +10 -6
  131. package/docs/quickstart.md +102 -0
  132. package/docs/recipes/INDEX.md +27 -0
  133. package/docs/recipes/bind-property-fact.md +58 -0
  134. package/docs/recipes/collection-slot.md +100 -0
  135. package/docs/recipes/fill-spec-decision.md +66 -0
  136. package/docs/recipes/fixture-states.md +68 -0
  137. package/docs/recipes/image-slot-crop.md +98 -0
  138. package/docs/recipes/interactive-island.md +100 -0
  139. package/docs/recipes/organize-section-folder.md +72 -0
  140. package/docs/recipes/prepare-submission.md +55 -0
  141. package/docs/recipes/second-template.md +49 -0
  142. package/docs/recipes/select-slot.md +59 -0
  143. package/docs/recipes/static-asset.md +103 -0
  144. package/docs/recipes/third-party-package.md +90 -0
  145. package/docs/rules/INDEX.md +14 -5
  146. package/docs/rules/bundle-binary-asset.md +83 -0
  147. package/docs/rules/bundle-incomplete.md +2 -2
  148. package/docs/rules/css-reason.md +3 -3
  149. package/docs/rules/fixtures-invalid.md +96 -0
  150. package/docs/rules/license-denied.md +11 -3
  151. package/docs/rules/manifest-invalid.md +99 -0
  152. package/docs/rules/no-bare-css-import.md +8 -8
  153. package/docs/rules/no-css-import-from-render-path.md +7 -8
  154. package/docs/rules/no-hex.md +76 -10
  155. package/docs/rules/no-templates.md +87 -0
  156. package/docs/rules/parse-error.md +76 -0
  157. package/docs/rules/schema-invalid.md +96 -0
  158. package/docs/rules/size-assets.md +88 -0
  159. package/docs/rules/size-island-bundle.md +123 -0
  160. package/docs/rules/size-section-css.md +19 -14
  161. package/docs/schema-system.md +28 -28
  162. package/docs/theme-and-css.md +157 -92
  163. package/docs/vocabulary.md +98 -0
  164. package/package.json +14 -11
  165. package/tsconfig.json +1 -1
@@ -0,0 +1,9 @@
1
+ //#region src/schema/section-nav.ts
2
+ function resolveAnchorMap(sections) {
3
+ const out = {};
4
+ for (const s of sections) out[s.key] = `#${s.anchor}`;
5
+ return out;
6
+ }
7
+
8
+ //#endregion
9
+ export { resolveAnchorMap };
@@ -7,149 +7,55 @@ import { OptionValue, SectionProps, SlotValue } from "./section-props.js";
7
7
  import { derived, direct } from "./source.js";
8
8
  import { z } from "zod";
9
9
  //#region src/schema/section-schema.d.ts
10
- declare const OptionDef: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
10
+ declare const OptionDef: z.ZodDiscriminatedUnion<[z.ZodObject<{
11
11
  user_editable: z.ZodDefault<z.ZodBoolean>;
12
12
  template_overridable: z.ZodDefault<z.ZodBoolean>;
13
13
  planner_settable: z.ZodDefault<z.ZodBoolean>;
14
- affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
15
- affects_slots: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
14
+ affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString>>;
15
+ affects_slots: z.ZodDefault<z.ZodArray<z.ZodString>>;
16
16
  type: z.ZodLiteral<"enum">;
17
- values: z.ZodArray<z.ZodString, "many">;
17
+ values: z.ZodArray<z.ZodString>;
18
18
  default: z.ZodString;
19
- }, "strict", z.ZodTypeAny, {
20
- type: "enum";
21
- values: string[];
22
- default: string;
23
- user_editable: boolean;
24
- template_overridable: boolean;
25
- planner_settable: boolean;
26
- affects_decisions: string[];
27
- affects_slots: string[];
28
- }, {
29
- type: "enum";
30
- values: string[];
31
- default: string;
32
- user_editable?: boolean | undefined;
33
- template_overridable?: boolean | undefined;
34
- planner_settable?: boolean | undefined;
35
- affects_decisions?: string[] | undefined;
36
- affects_slots?: string[] | undefined;
37
- }>, z.ZodObject<{
19
+ }, z.core.$strict>, z.ZodObject<{
38
20
  user_editable: z.ZodDefault<z.ZodBoolean>;
39
21
  template_overridable: z.ZodDefault<z.ZodBoolean>;
40
22
  planner_settable: z.ZodDefault<z.ZodBoolean>;
41
- affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
42
- affects_slots: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
23
+ affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString>>;
24
+ affects_slots: z.ZodDefault<z.ZodArray<z.ZodString>>;
43
25
  type: z.ZodLiteral<"bool">;
44
26
  default: z.ZodBoolean;
45
- }, "strict", z.ZodTypeAny, {
46
- type: "bool";
47
- default: boolean;
48
- user_editable: boolean;
49
- template_overridable: boolean;
50
- planner_settable: boolean;
51
- affects_decisions: string[];
52
- affects_slots: string[];
53
- }, {
54
- type: "bool";
55
- default: boolean;
56
- user_editable?: boolean | undefined;
57
- template_overridable?: boolean | undefined;
58
- planner_settable?: boolean | undefined;
59
- affects_decisions?: string[] | undefined;
60
- affects_slots?: string[] | undefined;
61
- }>, z.ZodObject<{
27
+ }, z.core.$strict>, z.ZodObject<{
62
28
  user_editable: z.ZodDefault<z.ZodBoolean>;
63
29
  template_overridable: z.ZodDefault<z.ZodBoolean>;
64
30
  planner_settable: z.ZodDefault<z.ZodBoolean>;
65
- affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
66
- affects_slots: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
31
+ affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString>>;
32
+ affects_slots: z.ZodDefault<z.ZodArray<z.ZodString>>;
67
33
  type: z.ZodLiteral<"int">;
68
34
  default: z.ZodNumber;
69
35
  min: z.ZodOptional<z.ZodNumber>;
70
36
  max: z.ZodOptional<z.ZodNumber>;
71
- }, "strict", z.ZodTypeAny, {
72
- type: "int";
73
- default: number;
74
- user_editable: boolean;
75
- template_overridable: boolean;
76
- planner_settable: boolean;
77
- affects_decisions: string[];
78
- affects_slots: string[];
79
- min?: number | undefined;
80
- max?: number | undefined;
81
- }, {
82
- type: "int";
83
- default: number;
84
- user_editable?: boolean | undefined;
85
- template_overridable?: boolean | undefined;
86
- planner_settable?: boolean | undefined;
87
- affects_decisions?: string[] | undefined;
88
- affects_slots?: string[] | undefined;
89
- min?: number | undefined;
90
- max?: number | undefined;
91
- }>, z.ZodObject<{
37
+ }, z.core.$strict>, z.ZodObject<{
92
38
  user_editable: z.ZodDefault<z.ZodBoolean>;
93
39
  template_overridable: z.ZodDefault<z.ZodBoolean>;
94
40
  planner_settable: z.ZodDefault<z.ZodBoolean>;
95
- affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
96
- affects_slots: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
41
+ affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString>>;
42
+ affects_slots: z.ZodDefault<z.ZodArray<z.ZodString>>;
97
43
  type: z.ZodLiteral<"string">;
98
44
  default: z.ZodString;
99
- }, "strict", z.ZodTypeAny, {
100
- type: "string";
101
- default: string;
102
- user_editable: boolean;
103
- template_overridable: boolean;
104
- planner_settable: boolean;
105
- affects_decisions: string[];
106
- affects_slots: string[];
107
- }, {
108
- type: "string";
109
- default: string;
110
- user_editable?: boolean | undefined;
111
- template_overridable?: boolean | undefined;
112
- planner_settable?: boolean | undefined;
113
- affects_decisions?: string[] | undefined;
114
- affects_slots?: string[] | undefined;
115
- }>, z.ZodObject<{
45
+ }, z.core.$strict>, z.ZodObject<{
116
46
  user_editable: z.ZodDefault<z.ZodBoolean>;
117
47
  template_overridable: z.ZodDefault<z.ZodBoolean>;
118
48
  planner_settable: z.ZodDefault<z.ZodBoolean>;
119
- affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
120
- affects_slots: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
49
+ affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString>>;
50
+ affects_slots: z.ZodDefault<z.ZodArray<z.ZodString>>;
121
51
  type: z.ZodLiteral<"json">;
122
52
  default: z.ZodUnknown;
123
- }, "strict", z.ZodTypeAny, {
124
- type: "json";
125
- user_editable: boolean;
126
- template_overridable: boolean;
127
- planner_settable: boolean;
128
- affects_decisions: string[];
129
- affects_slots: string[];
130
- default?: unknown;
131
- }, {
132
- type: "json";
133
- default?: unknown;
134
- user_editable?: boolean | undefined;
135
- template_overridable?: boolean | undefined;
136
- planner_settable?: boolean | undefined;
137
- affects_decisions?: string[] | undefined;
138
- affects_slots?: string[] | undefined;
139
- }>]>;
53
+ }, z.core.$strict>], "type">;
140
54
  declare const SlotGroupDef: z.ZodObject<{
141
55
  id: z.ZodString;
142
56
  label: z.ZodString;
143
- members: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodTuple<[z.ZodString, z.ZodString], null>]>, "many">;
144
- }, "strict", z.ZodTypeAny, {
145
- label: string;
146
- id: string;
147
- members: (string | [string, string])[];
148
- }, {
149
- label: string;
150
- id: string;
151
- members: (string | [string, string])[];
152
- }>;
57
+ members: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodTuple<[z.ZodString, z.ZodString], null>]>>;
58
+ }, z.core.$strict>;
153
59
  type SlotGroupDefShape = z.input<typeof SlotGroupDef>;
154
60
  declare const SectionMeta: z.ZodObject<{
155
61
  displayName: z.ZodString;
@@ -157,56 +63,14 @@ declare const SectionMeta: z.ZodObject<{
157
63
  groups: z.ZodOptional<z.ZodArray<z.ZodObject<{
158
64
  id: z.ZodString;
159
65
  label: z.ZodString;
160
- members: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodTuple<[z.ZodString, z.ZodString], null>]>, "many">;
161
- }, "strict", z.ZodTypeAny, {
162
- label: string;
163
- id: string;
164
- members: (string | [string, string])[];
165
- }, {
166
- label: string;
167
- id: string;
168
- members: (string | [string, string])[];
169
- }>, "many">>;
66
+ members: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodTuple<[z.ZodString, z.ZodString], null>]>>;
67
+ }, z.core.$strict>>>;
170
68
  variants: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
171
- cases: z.ZodArray<z.ZodString, "many">;
69
+ cases: z.ZodArray<z.ZodString>;
172
70
  default: z.ZodString;
173
- select: z.ZodType<VariantSelectorFn, z.ZodTypeDef, VariantSelectorFn>;
174
- }, "strict", z.ZodTypeAny, {
175
- default: string;
176
- cases: string[];
177
- select: VariantSelectorFn;
178
- }, {
179
- default: string;
180
- cases: string[];
181
- select: VariantSelectorFn;
182
- }>>>;
183
- }, "strict", z.ZodTypeAny, {
184
- displayName: string;
185
- anchor?: string | undefined;
186
- groups?: {
187
- label: string;
188
- id: string;
189
- members: (string | [string, string])[];
190
- }[] | undefined;
191
- variants?: Record<string, {
192
- default: string;
193
- cases: string[];
194
- select: VariantSelectorFn;
195
- }> | undefined;
196
- }, {
197
- displayName: string;
198
- anchor?: string | undefined;
199
- groups?: {
200
- label: string;
201
- id: string;
202
- members: (string | [string, string])[];
203
- }[] | undefined;
204
- variants?: Record<string, {
205
- default: string;
206
- cases: string[];
207
- select: VariantSelectorFn;
208
- }> | undefined;
209
- }>;
71
+ select: z.ZodCustom<VariantSelectorFn, VariantSelectorFn>;
72
+ }, z.core.$strict>>>;
73
+ }, z.core.$strict>;
210
74
  type SectionMetaShape = z.input<typeof SectionMeta>;
211
75
  declare const SectionSchema: z.ZodObject<{
212
76
  meta: z.ZodObject<{
@@ -215,311 +79,61 @@ declare const SectionSchema: z.ZodObject<{
215
79
  groups: z.ZodOptional<z.ZodArray<z.ZodObject<{
216
80
  id: z.ZodString;
217
81
  label: z.ZodString;
218
- members: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodTuple<[z.ZodString, z.ZodString], null>]>, "many">;
219
- }, "strict", z.ZodTypeAny, {
220
- label: string;
221
- id: string;
222
- members: (string | [string, string])[];
223
- }, {
224
- label: string;
225
- id: string;
226
- members: (string | [string, string])[];
227
- }>, "many">>;
82
+ members: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodTuple<[z.ZodString, z.ZodString], null>]>>;
83
+ }, z.core.$strict>>>;
228
84
  variants: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
229
- cases: z.ZodArray<z.ZodString, "many">;
85
+ cases: z.ZodArray<z.ZodString>;
230
86
  default: z.ZodString;
231
- select: z.ZodType<VariantSelectorFn, z.ZodTypeDef, VariantSelectorFn>;
232
- }, "strict", z.ZodTypeAny, {
233
- default: string;
234
- cases: string[];
235
- select: VariantSelectorFn;
236
- }, {
237
- default: string;
238
- cases: string[];
239
- select: VariantSelectorFn;
240
- }>>>;
241
- }, "strict", z.ZodTypeAny, {
242
- displayName: string;
243
- anchor?: string | undefined;
244
- groups?: {
245
- label: string;
246
- id: string;
247
- members: (string | [string, string])[];
248
- }[] | undefined;
249
- variants?: Record<string, {
250
- default: string;
251
- cases: string[];
252
- select: VariantSelectorFn;
253
- }> | undefined;
254
- }, {
255
- displayName: string;
256
- anchor?: string | undefined;
257
- groups?: {
258
- label: string;
259
- id: string;
260
- members: (string | [string, string])[];
261
- }[] | undefined;
262
- variants?: Record<string, {
263
- default: string;
264
- cases: string[];
265
- select: VariantSelectorFn;
266
- }> | undefined;
267
- }>;
268
- slots: z.ZodRecord<z.ZodString, z.ZodType<Slot, z.ZodTypeDef, Slot>>;
269
- options: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
87
+ select: z.ZodCustom<VariantSelectorFn, VariantSelectorFn>;
88
+ }, z.core.$strict>>>;
89
+ }, z.core.$strict>;
90
+ slots: z.ZodRecord<z.ZodString, z.ZodType<Slot, unknown, z.core.$ZodTypeInternals<Slot, unknown>>>;
91
+ options: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
270
92
  user_editable: z.ZodDefault<z.ZodBoolean>;
271
93
  template_overridable: z.ZodDefault<z.ZodBoolean>;
272
94
  planner_settable: z.ZodDefault<z.ZodBoolean>;
273
- affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
274
- affects_slots: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
95
+ affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString>>;
96
+ affects_slots: z.ZodDefault<z.ZodArray<z.ZodString>>;
275
97
  type: z.ZodLiteral<"enum">;
276
- values: z.ZodArray<z.ZodString, "many">;
98
+ values: z.ZodArray<z.ZodString>;
277
99
  default: z.ZodString;
278
- }, "strict", z.ZodTypeAny, {
279
- type: "enum";
280
- values: string[];
281
- default: string;
282
- user_editable: boolean;
283
- template_overridable: boolean;
284
- planner_settable: boolean;
285
- affects_decisions: string[];
286
- affects_slots: string[];
287
- }, {
288
- type: "enum";
289
- values: string[];
290
- default: string;
291
- user_editable?: boolean | undefined;
292
- template_overridable?: boolean | undefined;
293
- planner_settable?: boolean | undefined;
294
- affects_decisions?: string[] | undefined;
295
- affects_slots?: string[] | undefined;
296
- }>, z.ZodObject<{
100
+ }, z.core.$strict>, z.ZodObject<{
297
101
  user_editable: z.ZodDefault<z.ZodBoolean>;
298
102
  template_overridable: z.ZodDefault<z.ZodBoolean>;
299
103
  planner_settable: z.ZodDefault<z.ZodBoolean>;
300
- affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
301
- affects_slots: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
104
+ affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString>>;
105
+ affects_slots: z.ZodDefault<z.ZodArray<z.ZodString>>;
302
106
  type: z.ZodLiteral<"bool">;
303
107
  default: z.ZodBoolean;
304
- }, "strict", z.ZodTypeAny, {
305
- type: "bool";
306
- default: boolean;
307
- user_editable: boolean;
308
- template_overridable: boolean;
309
- planner_settable: boolean;
310
- affects_decisions: string[];
311
- affects_slots: string[];
312
- }, {
313
- type: "bool";
314
- default: boolean;
315
- user_editable?: boolean | undefined;
316
- template_overridable?: boolean | undefined;
317
- planner_settable?: boolean | undefined;
318
- affects_decisions?: string[] | undefined;
319
- affects_slots?: string[] | undefined;
320
- }>, z.ZodObject<{
108
+ }, z.core.$strict>, z.ZodObject<{
321
109
  user_editable: z.ZodDefault<z.ZodBoolean>;
322
110
  template_overridable: z.ZodDefault<z.ZodBoolean>;
323
111
  planner_settable: z.ZodDefault<z.ZodBoolean>;
324
- affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
325
- affects_slots: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
112
+ affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString>>;
113
+ affects_slots: z.ZodDefault<z.ZodArray<z.ZodString>>;
326
114
  type: z.ZodLiteral<"int">;
327
115
  default: z.ZodNumber;
328
116
  min: z.ZodOptional<z.ZodNumber>;
329
117
  max: z.ZodOptional<z.ZodNumber>;
330
- }, "strict", z.ZodTypeAny, {
331
- type: "int";
332
- default: number;
333
- user_editable: boolean;
334
- template_overridable: boolean;
335
- planner_settable: boolean;
336
- affects_decisions: string[];
337
- affects_slots: string[];
338
- min?: number | undefined;
339
- max?: number | undefined;
340
- }, {
341
- type: "int";
342
- default: number;
343
- user_editable?: boolean | undefined;
344
- template_overridable?: boolean | undefined;
345
- planner_settable?: boolean | undefined;
346
- affects_decisions?: string[] | undefined;
347
- affects_slots?: string[] | undefined;
348
- min?: number | undefined;
349
- max?: number | undefined;
350
- }>, z.ZodObject<{
118
+ }, z.core.$strict>, z.ZodObject<{
351
119
  user_editable: z.ZodDefault<z.ZodBoolean>;
352
120
  template_overridable: z.ZodDefault<z.ZodBoolean>;
353
121
  planner_settable: z.ZodDefault<z.ZodBoolean>;
354
- affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
355
- affects_slots: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
122
+ affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString>>;
123
+ affects_slots: z.ZodDefault<z.ZodArray<z.ZodString>>;
356
124
  type: z.ZodLiteral<"string">;
357
125
  default: z.ZodString;
358
- }, "strict", z.ZodTypeAny, {
359
- type: "string";
360
- default: string;
361
- user_editable: boolean;
362
- template_overridable: boolean;
363
- planner_settable: boolean;
364
- affects_decisions: string[];
365
- affects_slots: string[];
366
- }, {
367
- type: "string";
368
- default: string;
369
- user_editable?: boolean | undefined;
370
- template_overridable?: boolean | undefined;
371
- planner_settable?: boolean | undefined;
372
- affects_decisions?: string[] | undefined;
373
- affects_slots?: string[] | undefined;
374
- }>, z.ZodObject<{
126
+ }, z.core.$strict>, z.ZodObject<{
375
127
  user_editable: z.ZodDefault<z.ZodBoolean>;
376
128
  template_overridable: z.ZodDefault<z.ZodBoolean>;
377
129
  planner_settable: z.ZodDefault<z.ZodBoolean>;
378
- affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
379
- affects_slots: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
130
+ affects_decisions: z.ZodDefault<z.ZodArray<z.ZodString>>;
131
+ affects_slots: z.ZodDefault<z.ZodArray<z.ZodString>>;
380
132
  type: z.ZodLiteral<"json">;
381
133
  default: z.ZodUnknown;
382
- }, "strict", z.ZodTypeAny, {
383
- type: "json";
384
- user_editable: boolean;
385
- template_overridable: boolean;
386
- planner_settable: boolean;
387
- affects_decisions: string[];
388
- affects_slots: string[];
389
- default?: unknown;
390
- }, {
391
- type: "json";
392
- default?: unknown;
393
- user_editable?: boolean | undefined;
394
- template_overridable?: boolean | undefined;
395
- planner_settable?: boolean | undefined;
396
- affects_decisions?: string[] | undefined;
397
- affects_slots?: string[] | undefined;
398
- }>]>>>;
399
- slot_order: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
400
- }, "strict", z.ZodTypeAny, {
401
- options: Record<string, {
402
- type: "enum";
403
- values: string[];
404
- default: string;
405
- user_editable: boolean;
406
- template_overridable: boolean;
407
- planner_settable: boolean;
408
- affects_decisions: string[];
409
- affects_slots: string[];
410
- } | {
411
- type: "bool";
412
- default: boolean;
413
- user_editable: boolean;
414
- template_overridable: boolean;
415
- planner_settable: boolean;
416
- affects_decisions: string[];
417
- affects_slots: string[];
418
- } | {
419
- type: "int";
420
- default: number;
421
- user_editable: boolean;
422
- template_overridable: boolean;
423
- planner_settable: boolean;
424
- affects_decisions: string[];
425
- affects_slots: string[];
426
- min?: number | undefined;
427
- max?: number | undefined;
428
- } | {
429
- type: "string";
430
- default: string;
431
- user_editable: boolean;
432
- template_overridable: boolean;
433
- planner_settable: boolean;
434
- affects_decisions: string[];
435
- affects_slots: string[];
436
- } | {
437
- type: "json";
438
- user_editable: boolean;
439
- template_overridable: boolean;
440
- planner_settable: boolean;
441
- affects_decisions: string[];
442
- affects_slots: string[];
443
- default?: unknown;
444
- }>;
445
- meta: {
446
- displayName: string;
447
- anchor?: string | undefined;
448
- groups?: {
449
- label: string;
450
- id: string;
451
- members: (string | [string, string])[];
452
- }[] | undefined;
453
- variants?: Record<string, {
454
- default: string;
455
- cases: string[];
456
- select: VariantSelectorFn;
457
- }> | undefined;
458
- };
459
- slots: Record<string, Slot>;
460
- slot_order?: string[] | undefined;
461
- }, {
462
- meta: {
463
- displayName: string;
464
- anchor?: string | undefined;
465
- groups?: {
466
- label: string;
467
- id: string;
468
- members: (string | [string, string])[];
469
- }[] | undefined;
470
- variants?: Record<string, {
471
- default: string;
472
- cases: string[];
473
- select: VariantSelectorFn;
474
- }> | undefined;
475
- };
476
- slots: Record<string, Slot>;
477
- options?: Record<string, {
478
- type: "enum";
479
- values: string[];
480
- default: string;
481
- user_editable?: boolean | undefined;
482
- template_overridable?: boolean | undefined;
483
- planner_settable?: boolean | undefined;
484
- affects_decisions?: string[] | undefined;
485
- affects_slots?: string[] | undefined;
486
- } | {
487
- type: "bool";
488
- default: boolean;
489
- user_editable?: boolean | undefined;
490
- template_overridable?: boolean | undefined;
491
- planner_settable?: boolean | undefined;
492
- affects_decisions?: string[] | undefined;
493
- affects_slots?: string[] | undefined;
494
- } | {
495
- type: "int";
496
- default: number;
497
- user_editable?: boolean | undefined;
498
- template_overridable?: boolean | undefined;
499
- planner_settable?: boolean | undefined;
500
- affects_decisions?: string[] | undefined;
501
- affects_slots?: string[] | undefined;
502
- min?: number | undefined;
503
- max?: number | undefined;
504
- } | {
505
- type: "string";
506
- default: string;
507
- user_editable?: boolean | undefined;
508
- template_overridable?: boolean | undefined;
509
- planner_settable?: boolean | undefined;
510
- affects_decisions?: string[] | undefined;
511
- affects_slots?: string[] | undefined;
512
- } | {
513
- type: "json";
514
- default?: unknown;
515
- user_editable?: boolean | undefined;
516
- template_overridable?: boolean | undefined;
517
- planner_settable?: boolean | undefined;
518
- affects_decisions?: string[] | undefined;
519
- affects_slots?: string[] | undefined;
520
- }> | undefined;
521
- slot_order?: string[] | undefined;
522
- }>;
134
+ }, z.core.$strict>], "type">>>;
135
+ slot_order: z.ZodOptional<z.ZodArray<z.ZodString>>;
136
+ }, z.core.$strict>;
523
137
  type SectionSchemaShape = z.input<typeof SectionSchema>;
524
138
  type SectionSchemaResolved = Omit<z.infer<typeof SectionSchema>, "meta"> & {
525
139
  anchor: string;
@@ -9,27 +9,23 @@ declare const SLOT_TYPE_DESCRIPTORS: Record<SlotType, SlotTypeDescriptor>;
9
9
  declare const SlotDef: z.ZodType<Slot>;
10
10
  declare function slotDefTypes(): SlotType[];
11
11
  declare const ContentSlot: z.ZodObject<{
12
- type: z.ZodEnum<["text", "number", "select", "image", "image_collection", "list", "object_list", "poi_list", "url"]>;
12
+ type: z.ZodEnum<{
13
+ number: "number";
14
+ select: "select";
15
+ text: "text";
16
+ image: "image";
17
+ image_collection: "image_collection";
18
+ list: "list";
19
+ object_list: "object_list";
20
+ poi_list: "poi_list";
21
+ url: "url";
22
+ }>;
13
23
  editable_by_user: z.ZodDefault<z.ZodBoolean>;
14
24
  required: z.ZodDefault<z.ZodBoolean>;
15
25
  produced_by: z.ZodOptional<z.ZodString>;
16
26
  min: z.ZodOptional<z.ZodNumber>;
17
27
  max: z.ZodOptional<z.ZodNumber>;
18
- }, "strict", z.ZodTypeAny, {
19
- type: "number" | "select" | "text" | "image" | "image_collection" | "list" | "object_list" | "poi_list" | "url";
20
- required: boolean;
21
- editable_by_user: boolean;
22
- min?: number | undefined;
23
- max?: number | undefined;
24
- produced_by?: string | undefined;
25
- }, {
26
- type: "number" | "select" | "text" | "image" | "image_collection" | "list" | "object_list" | "poi_list" | "url";
27
- min?: number | undefined;
28
- max?: number | undefined;
29
- required?: boolean | undefined;
30
- editable_by_user?: boolean | undefined;
31
- produced_by?: string | undefined;
32
- }>;
28
+ }, z.core.$strict>;
33
29
  type SlotBase = {
34
30
  required?: boolean;
35
31
  editable_by_user?: boolean;
package/dist/ssr.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ import { ResolvedFixture } from "./schema/fixture-schema.js";
2
+ import "./schema/index.js";
3
+ import { hasClientDirective } from "./eslint/is-client-file.js";
4
+ import { isClientComponentFile, islandKey } from "./islands/detect.js";
5
+ import { wrapClientModuleSource } from "./islands/wrap.js";
6
+ import { findSectionIslands } from "./islands/discover.js";
7
+ import { islandTransformEsbuildPlugin } from "./islands/esbuild-plugin.js";
8
+ import { ComponentType } from "react";
9
+ //#region src/ssr/index.d.ts
10
+ type LoadedSection = {
11
+ Renderer: ComponentType<Record<string, unknown>>;
12
+ snapshotFixtures: ResolvedFixture[];
13
+ invariantFixtures: ResolvedFixture[];
14
+ schemaSlots: Record<string, {
15
+ type: string;
16
+ editable_by_user?: boolean;
17
+ required?: boolean;
18
+ }>;
19
+ };
20
+ type SectionModuleLoader = (dir: string, file: string) => Promise<unknown>;
21
+ declare const nativeSectionLoader: SectionModuleLoader;
22
+ /**
23
+ * Load a bundle's Renderer plus its resolved snapshot and invariant fixture
24
+ * sets from the bundle directory `dir`. `load` resolves each of the four
25
+ * contract files; it defaults to native dynamic import.
26
+ */
27
+ declare function loadSectionBundle(dir: string, load?: SectionModuleLoader): Promise<LoadedSection>;
28
+ /** Render a resolved fixture's props to static markup — the byte-for-byte page render. */
29
+ declare function renderSectionHtml(renderer: ComponentType<Record<string, unknown>>, props: Record<string, unknown>): string;
30
+ //#endregion
31
+ export { LoadedSection, SectionModuleLoader, findSectionIslands, hasClientDirective, isClientComponentFile, islandKey, islandTransformEsbuildPlugin, loadSectionBundle, nativeSectionLoader, renderSectionHtml, wrapClientModuleSource };