@estokad/schema 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.
@@ -0,0 +1,268 @@
1
+ // IR -> TypeScript source code.
2
+ //
3
+ // Used by the Studio's schema explorer (M1.5) and by `estokad pull` (later)
4
+ // to give engineers a source-of-truth file they can drop into a customer
5
+ // repo. The generated output deliberately matches what defineType() /
6
+ // defineEmbedded() consumers write by hand:
7
+ //
8
+ // - Embedded types are emitted as defineEmbedded() and exported.
9
+ // - Top-level types are emitted as defineType() and exported.
10
+ // - Fields preserve the IR's order; field-type-specific options are only
11
+ // emitted when set (no default-value noise).
12
+ // - Comments aren't preserved (the IR doesn't carry them); customers who
13
+ // want comments treat code as source-of-truth and disable Studio
14
+ // writeback (per docs/schema-system.md § 7).
15
+ //
16
+ // The output is a single string. The caller decides how to split it across
17
+ // files (the CLI splits one type per file in `estokad pull`).
18
+ const COMMON_OPTION_KEYS = ['required', 'default', 'hint', 'localized', 'readOnly'];
19
+ /** Emit a `@estokad/sdk` declaration-merge augmentation that maps each
20
+ * content-type name to a generated TypeScript interface. Customers
21
+ * import this once and `client.pressRelease.get(...)` becomes fully
22
+ * typed without hand-writing the ContentTypes block. (M2.2d) */
23
+ export function generateContentTypesAugmentation(ir) {
24
+ const topLevel = ir.filter((t) => !t.isEmbedded).sort((a, b) => a.name.localeCompare(b.name));
25
+ if (topLevel.length === 0) {
26
+ return '// No content types defined yet — run `estokad pull` first.\n';
27
+ }
28
+ const out = [];
29
+ out.push('// Generated by `estokad codegen`. Do not edit by hand.');
30
+ out.push('// Re-run after schema changes; commit the result.');
31
+ out.push('');
32
+ for (const t of [...ir].sort((a, b) => {
33
+ if (a.isEmbedded !== b.isEmbedded)
34
+ return a.isEmbedded ? -1 : 1;
35
+ return a.name.localeCompare(b.name);
36
+ })) {
37
+ out.push(emitInterface(t, ir));
38
+ out.push('');
39
+ }
40
+ out.push("declare module '@estokad/sdk' {");
41
+ out.push(' interface ContentTypes {');
42
+ for (const t of topLevel) {
43
+ out.push(` readonly ${t.name}: ${pascal(t.name)}`);
44
+ }
45
+ out.push(' }');
46
+ out.push('}');
47
+ out.push('');
48
+ return out.join('\n');
49
+ }
50
+ function emitInterface(type, all) {
51
+ const lines = [];
52
+ if (type.description)
53
+ lines.push(`/** ${type.description.replace(/\*\//g, '*\\/')} */`);
54
+ lines.push(`export interface ${pascal(type.name)} {`);
55
+ for (const f of type.fields) {
56
+ const optional = f.required ? '' : '?';
57
+ const tsType = fieldToTsType(f, all);
58
+ lines.push(` readonly ${f.name}${optional}: ${tsType}`);
59
+ }
60
+ lines.push('}');
61
+ return lines.join('\n');
62
+ }
63
+ function fieldToTsType(field, all) {
64
+ switch (field.type) {
65
+ case 'text':
66
+ case 'markdown':
67
+ case 'slug':
68
+ return 'string';
69
+ case 'number':
70
+ return 'number';
71
+ case 'boolean':
72
+ return 'boolean';
73
+ case 'datetime':
74
+ case 'date':
75
+ return 'string';
76
+ case 'enum':
77
+ return field.options.map((o) => JSON.stringify(o)).join(' | ') || 'string';
78
+ case 'reference':
79
+ case 'asset':
80
+ return 'string';
81
+ case 'referenceList':
82
+ case 'assetList':
83
+ return 'ReadonlyArray<string>';
84
+ case 'geoPoint':
85
+ return '{ readonly lat: number; readonly lng: number }';
86
+ case 'embedded': {
87
+ const target = all.find((t) => t.name === field.of && t.isEmbedded);
88
+ return target ? pascal(target.name) : 'unknown';
89
+ }
90
+ case 'richText':
91
+ // Tiptap doc shape; the @estokad/next renderer types it concretely.
92
+ return '{ readonly type: string; readonly content?: ReadonlyArray<unknown> }';
93
+ case 'json':
94
+ return 'unknown';
95
+ }
96
+ }
97
+ function pascal(s) {
98
+ if (!s)
99
+ return s;
100
+ return s[0].toUpperCase() + s.slice(1);
101
+ }
102
+ export function generateTypeScript(ir) {
103
+ if (ir.length === 0)
104
+ return '// No content types defined yet.\n';
105
+ const embeddedNames = new Set(ir.filter((t) => t.isEmbedded).map((t) => t.name));
106
+ const usesEmbedded = ir.some((t) => t.fields.some((f) => f.type === 'embedded'));
107
+ // Sort: embedded first (so they're declared before the types that reference
108
+ // them), then top-level types, alphabetical within each bucket.
109
+ const sorted = [...ir].sort((a, b) => {
110
+ if (a.isEmbedded !== b.isEmbedded)
111
+ return a.isEmbedded ? -1 : 1;
112
+ return a.name.localeCompare(b.name);
113
+ });
114
+ const imports = [];
115
+ imports.push('import { defineType' + (usesEmbedded ? ', defineEmbedded' : '') + " } from '@estokad/schema'");
116
+ const blocks = sorted.map((type) => emitType(type, embeddedNames));
117
+ return imports.join('\n') + '\n\n' + blocks.join('\n\n') + '\n';
118
+ }
119
+ function emitType(type, embeddedNames) {
120
+ const fn = type.isEmbedded ? 'defineEmbedded' : 'defineType';
121
+ const opts = [];
122
+ opts.push(`name: ${quote(type.name)}`);
123
+ opts.push(`title: ${quote(type.title)}`);
124
+ if (type.description)
125
+ opts.push(`description: ${quote(type.description)}`);
126
+ if (!type.isEmbedded && type.icon)
127
+ opts.push(`icon: ${quote(type.icon)}`);
128
+ if (!type.isEmbedded && type.isSingleton)
129
+ opts.push(`isSingleton: true`);
130
+ if (!type.isEmbedded && type.displayField)
131
+ opts.push(`displayField: ${quote(type.displayField)}`);
132
+ if (!type.isEmbedded && type.previewUrl)
133
+ opts.push(`previewUrl: ${quote(type.previewUrl)}`);
134
+ opts.push(`fields: [\n${type.fields.map((f) => ' ' + emitField(f, embeddedNames)).join(',\n')},\n ]`);
135
+ return `export const ${type.name} = ${fn}({\n ${opts.join(',\n ')},\n})`;
136
+ }
137
+ function emitField(field, embeddedNames) {
138
+ const parts = [];
139
+ parts.push(`name: ${quote(field.name)}`);
140
+ parts.push(`type: ${quote(field.type)}`);
141
+ // Type-specific options first, then common.
142
+ for (const part of typeSpecificParts(field, embeddedNames)) {
143
+ parts.push(part);
144
+ }
145
+ for (const key of COMMON_OPTION_KEYS) {
146
+ const value = field[key];
147
+ if (value === undefined)
148
+ continue;
149
+ if (key === 'default') {
150
+ parts.push(`default: ${stringify(value)}`);
151
+ }
152
+ else if (typeof value === 'boolean' && value) {
153
+ parts.push(`${key}: true`);
154
+ }
155
+ else if (typeof value === 'string') {
156
+ parts.push(`${key}: ${quote(value)}`);
157
+ }
158
+ }
159
+ return `{ ${parts.join(', ')} }`;
160
+ }
161
+ function typeSpecificParts(field, embeddedNames) {
162
+ const parts = [];
163
+ switch (field.type) {
164
+ case 'text':
165
+ if (field.max != null)
166
+ parts.push(`max: ${field.max}`);
167
+ if (field.min != null)
168
+ parts.push(`min: ${field.min}`);
169
+ if (field.multiline)
170
+ parts.push(`multiline: true`);
171
+ if (field.pattern)
172
+ parts.push(`pattern: ${stringify(field.pattern)}`);
173
+ break;
174
+ case 'richText':
175
+ if (field.features && field.features.length > 0) {
176
+ parts.push(`features: ${stringify(field.features)}`);
177
+ }
178
+ break;
179
+ case 'number':
180
+ if (field.min != null)
181
+ parts.push(`min: ${field.min}`);
182
+ if (field.max != null)
183
+ parts.push(`max: ${field.max}`);
184
+ if (field.integer === false)
185
+ parts.push(`integer: false`);
186
+ break;
187
+ case 'datetime':
188
+ case 'date':
189
+ if (field.min)
190
+ parts.push(`min: ${quote(field.min)}`);
191
+ if (field.max)
192
+ parts.push(`max: ${quote(field.max)}`);
193
+ break;
194
+ case 'slug':
195
+ parts.push(`source: ${quote(field.source)}`);
196
+ if (field.pattern)
197
+ parts.push(`pattern: ${stringify(field.pattern)}`);
198
+ break;
199
+ case 'asset':
200
+ if (field.accept)
201
+ parts.push(`accept: ${stringify(field.accept)}`);
202
+ if (field.maxSize != null)
203
+ parts.push(`maxSize: ${field.maxSize}`);
204
+ break;
205
+ case 'assetList':
206
+ if (field.accept)
207
+ parts.push(`accept: ${stringify(field.accept)}`);
208
+ if (field.maxSize != null)
209
+ parts.push(`maxSize: ${field.maxSize}`);
210
+ if (field.min != null)
211
+ parts.push(`min: ${field.min}`);
212
+ if (field.max != null)
213
+ parts.push(`max: ${field.max}`);
214
+ break;
215
+ case 'reference':
216
+ case 'referenceList':
217
+ parts.push(...emitReferenceParts(field));
218
+ break;
219
+ case 'enum':
220
+ parts.push(`options: ${stringify(field.options)}`);
221
+ break;
222
+ case 'embedded': {
223
+ // The embedded `of` is a name in the IR; we emit a runtime reference to
224
+ // the const we declared above (since we sort embedded types first).
225
+ const ref = field.of;
226
+ if (embeddedNames.has(ref)) {
227
+ parts.push(`of: ${ref}`);
228
+ }
229
+ else {
230
+ // Defensive fallback: if the embedded type isn't in this IR set,
231
+ // emit a placeholder so the generated source still parses.
232
+ parts.push(`of: ${quote(ref)} as never`);
233
+ }
234
+ break;
235
+ }
236
+ case 'boolean':
237
+ case 'geoPoint':
238
+ case 'json':
239
+ case 'markdown':
240
+ break;
241
+ }
242
+ return parts;
243
+ }
244
+ function emitReferenceParts(field) {
245
+ // Polymorphic referenceList (M1.4b) carries `to` as an array of
246
+ // target type names. Emit it as a TS literal array; defineType()
247
+ // accepts both shapes so the round-trip survives.
248
+ const toLiteral = field.type === 'referenceList' && Array.isArray(field.to)
249
+ ? `[${field.to.map(quote).join(', ')}]`
250
+ : quote(field.to);
251
+ const parts = [`to: ${toLiteral}`];
252
+ if (field.crossSpace)
253
+ parts.push(`crossSpace: true`);
254
+ if (field.type === 'referenceList') {
255
+ if (field.min != null)
256
+ parts.push(`min: ${field.min}`);
257
+ if (field.max != null)
258
+ parts.push(`max: ${field.max}`);
259
+ }
260
+ return parts;
261
+ }
262
+ function quote(s) {
263
+ return JSON.stringify(s);
264
+ }
265
+ function stringify(value) {
266
+ return JSON.stringify(value);
267
+ }
268
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,EAAE;AACF,4EAA4E;AAC5E,yEAAyE;AACzE,sEAAsE;AACtE,4CAA4C;AAC5C,EAAE;AACF,mEAAmE;AACnE,gEAAgE;AAChE,2EAA2E;AAC3E,iDAAiD;AACjD,2EAA2E;AAC3E,qEAAqE;AACrE,iDAAiD;AACjD,EAAE;AACF,2EAA2E;AAC3E,8DAA8D;AAW9D,MAAM,kBAAkB,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,CAAU,CAAA;AAE5F;;;iEAGiE;AACjE,MAAM,UAAU,gCAAgC,CAAC,EAAyB;IACxE,MAAM,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAC7F,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,+DAA+D,CAAA;IACxE,CAAC;IAED,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,GAAG,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAA;IACnE,GAAG,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;IAC9D,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACZ,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;QACpD,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU;YAAE,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/D,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC,CAAC,EAAE,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QAC9B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAA;IAC3C,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;IACtC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACvD,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACf,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACb,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACZ,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACvB,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,GAA0B;IAC7D,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,IAAI,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IACvF,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;QACtC,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QACpC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,GAAG,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAA;IAC1D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,GAA0B;IAC/D,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,QAAQ,CAAA;QACjB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAA;QACjB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAA;QAClB,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,QAAQ,CAAA;QACjB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAA;QAC5E,KAAK,WAAW,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,QAAQ,CAAA;QACjB,KAAK,eAAe,CAAC;QACrB,KAAK,WAAW;YACd,OAAO,uBAAuB,CAAA;QAChC,KAAK,UAAU;YACb,OAAO,gDAAgD,CAAA;QACzD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,CAAA;YACnE,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACjD,CAAC;QACD,KAAK,UAAU;YACb,oEAAoE;YACpE,OAAO,sEAAsE,CAAA;QAC/E,KAAK,MAAM;YACT,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAA;IAChB,OAAO,CAAC,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAyB;IAC1D,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,oCAAoC,CAAA;IAEhE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAChF,MAAM,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAA;IAEhF,4EAA4E;IAC5E,gEAAgE;IAChE,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnC,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU;YAAE,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/D,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,OAAO,CAAC,IAAI,CACV,qBAAqB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,2BAA2B,CAC/F,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAA;IAClE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;AACjE,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,aAA0B;IACxD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAA;IAC5D,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACtC,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACxC,IAAI,IAAI,CAAC,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IAC1E,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACzE,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IACxE,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY;QAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;IACjG,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU;QAAE,IAAI,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IAC3F,IAAI,CAAC,IAAI,CACP,cAAc,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAC/F,CAAA;IAED,OAAO,gBAAgB,IAAI,CAAC,IAAI,MAAM,EAAE,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;AAC5E,CAAC;AAED,SAAS,SAAS,CAAC,KAAc,EAAE,aAA0B;IAC3D,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACxC,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAExC,4CAA4C;IAC5C,KAAK,MAAM,IAAI,IAAI,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACrC,MAAM,KAAK,GAAI,KAA4C,CAAC,GAAG,CAAC,CAAA;QAChE,IAAI,KAAK,KAAK,SAAS;YAAE,SAAQ;QACjC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,YAAY,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC5C,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAA;QAC5B,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;AAClC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc,EAAE,aAA0B;IACnE,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;YACtD,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;YACtD,IAAI,KAAK,CAAC,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;YAClD,IAAI,KAAK,CAAC,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,YAAY,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YACrE,MAAK;QACP,KAAK,UAAU;YACb,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,KAAK,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;YACtD,CAAC;YACD,MAAK;QACP,KAAK,QAAQ;YACX,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;YACtD,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;YACtD,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK;gBAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACzD,MAAK;QACP,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM;YACT,IAAI,KAAK,CAAC,GAAG;gBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACrD,IAAI,KAAK,CAAC,GAAG;gBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACrD,MAAK;QACP,KAAK,MAAM;YACT,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAC5C,IAAI,KAAK,CAAC,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,YAAY,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YACrE,MAAK;QACP,KAAK,OAAO;YACV,IAAI,KAAK,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,WAAW,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAClE,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;YAClE,MAAK;QACP,KAAK,WAAW;YACd,IAAI,KAAK,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,WAAW,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAClE,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;YAClE,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;YACtD,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;YACtD,MAAK;QACP,KAAK,WAAW,CAAC;QACjB,KAAK,eAAe;YAClB,KAAK,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAgD,CAAC,CAAC,CAAA;YACnF,MAAK;QACP,KAAK,MAAM;YACT,KAAK,CAAC,IAAI,CAAC,YAAY,SAAS,CAAE,KAAqB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YACnE,MAAK;QACP,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,wEAAwE;YACxE,oEAAoE;YACpE,MAAM,GAAG,GAAI,KAAyB,CAAC,EAAE,CAAA;YACzC,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;YAC1B,CAAC;iBAAM,CAAC;gBACN,iEAAiE;gBACjE,2DAA2D;gBAC3D,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YAC1C,CAAC;YACD,MAAK;QACP,CAAC;QACD,KAAK,SAAS,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU;YACb,MAAK;IACT,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA8C;IACxE,gEAAgE;IAChE,iEAAiE;IACjE,kDAAkD;IAClD,MAAM,SAAS,GACb,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QACvC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAY,CAAC,CAAA;IAC/B,MAAM,KAAK,GAAa,CAAC,OAAO,SAAS,EAAE,CAAC,CAAA;IAC5C,IAAI,KAAK,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IACpD,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;QACtD,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,KAAK,CAAC,CAAS;IACtB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAC1B,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC"}
@@ -0,0 +1,11 @@
1
+ export { compile, SchemaError } from './compile.js';
2
+ export type { CompileOptions } from './compile.js';
3
+ export { generateContentTypesAugmentation, generateTypeScript } from './generate.js';
4
+ export { MODULE_CROSS_SPACE, MODULE_MULTI_LOCALE, requiredModulesFor } from './modules.js';
5
+ export { makeZod } from './zod.js';
6
+ export type { ZodSchemas } from './zod.js';
7
+ export { defineEmbedded, defineType } from './define.js';
8
+ export type { DefineEmbeddedInput, DefineTypeInput } from './define.js';
9
+ export type { AnyDefinition, AssetField, AssetFieldIR, AssetListField, AssetListFieldIR, BooleanField, BooleanFieldIR, CommonFieldOptions, DateField, DateFieldIR, DateTimeField, DateTimeFieldIR, EmbeddedDefinition, EmbeddedField, EmbeddedFieldIR, EnumField, EnumFieldIR, Field, FieldIR, GeoPointField, GeoPointFieldIR, JsonField, JsonFieldIR, MarkdownField, MarkdownFieldIR, NumberField, NumberFieldIR, ReferenceField, ReferenceFieldIR, ReferenceListField, ReferenceListFieldIR, RichTextFeature, RichTextField, RichTextFieldIR, SchemaState, SlugField, SlugFieldIR, TextField, TextFieldIR, TypeDefinition, TypeIR, TypeStateEntry, } from './types.js';
10
+ export { IR_SCHEMA_URL } from './types.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,gCAAgC,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACpF,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAC1F,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxD,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AACvE,YAAY,EACV,aAAa,EACb,UAAU,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,SAAS,EACT,WAAW,EACX,KAAK,EACL,OAAO,EACP,aAAa,EACb,eAAe,EACf,SAAS,EACT,WAAW,EACX,aAAa,EACb,eAAe,EACf,WAAW,EACX,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,eAAe,EACf,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,WAAW,EACX,cAAc,EACd,MAAM,EACN,cAAc,GACf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export { compile, SchemaError } from './compile.js';
2
+ export { generateContentTypesAugmentation, generateTypeScript } from './generate.js';
3
+ export { MODULE_CROSS_SPACE, MODULE_MULTI_LOCALE, requiredModulesFor } from './modules.js';
4
+ export { makeZod } from './zod.js';
5
+ export { defineEmbedded, defineType } from './define.js';
6
+ export { IR_SCHEMA_URL } from './types.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAEnD,OAAO,EAAE,gCAAgC,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACpF,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAC1F,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAElC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AA8CxD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { TypeIR } from './types.js';
2
+ export declare const MODULE_CROSS_SPACE = "cross_space_orchestration";
3
+ export declare const MODULE_MULTI_LOCALE = "multi_locale";
4
+ export declare function requiredModulesFor(ir: ReadonlyArray<TypeIR>): string[];
5
+ //# sourceMappingURL=modules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,eAAO,MAAM,kBAAkB,8BAA8B,CAAA;AAC7D,eAAO,MAAM,mBAAmB,iBAAiB,CAAA;AAEjD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAgBtE"}
@@ -0,0 +1,34 @@
1
+ // Schema → required-module mapping.
2
+ //
3
+ // Some field-shape choices in the IR imply paid-module dependencies per
4
+ // docs/billing.md § 2:
5
+ // * `crossSpace: true` on reference / referenceList → cross_space_orchestration
6
+ // * `localized: true` on ANY field → multi_locale
7
+ //
8
+ // The multi_locale gate covers both text and FILE locale variants
9
+ // (R4.3 — pricing decision: bundle FILE variants into the existing
10
+ // multi_locale module rather than splitting into a separate SKU).
11
+ // One module, one toggle; consistent with how editors think about
12
+ // localization.
13
+ //
14
+ // The function below is a pure helper. apps/api gates pushes by intersecting
15
+ // the required modules against the workspace's active subscription modules.
16
+ // In dev (no subscription), apps/api treats every module as active.
17
+ export const MODULE_CROSS_SPACE = 'cross_space_orchestration';
18
+ export const MODULE_MULTI_LOCALE = 'multi_locale';
19
+ export function requiredModulesFor(ir) {
20
+ const required = new Set();
21
+ for (const type of ir) {
22
+ for (const field of type.fields) {
23
+ if ((field.type === 'reference' || field.type === 'referenceList') &&
24
+ field.crossSpace === true) {
25
+ required.add(MODULE_CROSS_SPACE);
26
+ }
27
+ if (field.localized === true) {
28
+ required.add(MODULE_MULTI_LOCALE);
29
+ }
30
+ }
31
+ }
32
+ return [...required].sort();
33
+ }
34
+ //# sourceMappingURL=modules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modules.js","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,EAAE;AACF,wEAAwE;AACxE,uBAAuB;AACvB,kFAAkF;AAClF,oDAAoD;AACpD,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,kEAAkE;AAClE,kEAAkE;AAClE,gBAAgB;AAChB,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,oEAAoE;AAIpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,2BAA2B,CAAA;AAC7D,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAc,CAAA;AAEjD,MAAM,UAAU,kBAAkB,CAAC,EAAyB;IAC1D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAClC,KAAK,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;QACtB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,IACE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC;gBAC7D,KAAkC,CAAC,UAAU,KAAK,IAAI,EACvD,CAAC;gBACD,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;YAClC,CAAC;YACD,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC7B,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAA;AAC7B,CAAC"}
@@ -0,0 +1,240 @@
1
+ export interface CommonFieldOptions {
2
+ readonly required?: boolean;
3
+ readonly default?: unknown;
4
+ readonly hint?: string;
5
+ readonly localized?: boolean;
6
+ readonly readOnly?: boolean;
7
+ readonly condition?: (data: Record<string, unknown>) => boolean;
8
+ readonly validate?: (value: unknown, data: Record<string, unknown>) => string | null;
9
+ }
10
+ export interface TextField extends CommonFieldOptions {
11
+ readonly name: string;
12
+ readonly type: 'text';
13
+ readonly max?: number;
14
+ readonly min?: number;
15
+ readonly multiline?: boolean;
16
+ readonly pattern?: RegExp | string;
17
+ }
18
+ export interface RichTextField extends CommonFieldOptions {
19
+ readonly name: string;
20
+ readonly type: 'richText';
21
+ readonly features?: ReadonlyArray<RichTextFeature>;
22
+ }
23
+ export type RichTextFeature = 'bold' | 'italic' | 'underline' | 'strike' | 'heading' | 'link' | 'blockquote' | 'list' | 'orderedList' | 'code' | 'codeBlock' | 'image' | 'horizontalRule';
24
+ export interface NumberField extends CommonFieldOptions {
25
+ readonly name: string;
26
+ readonly type: 'number';
27
+ readonly min?: number;
28
+ readonly max?: number;
29
+ readonly integer?: boolean;
30
+ }
31
+ export interface BooleanField extends CommonFieldOptions {
32
+ readonly name: string;
33
+ readonly type: 'boolean';
34
+ }
35
+ export interface DateTimeField extends CommonFieldOptions {
36
+ readonly name: string;
37
+ readonly type: 'datetime';
38
+ readonly min?: string;
39
+ readonly max?: string;
40
+ }
41
+ export interface DateField extends CommonFieldOptions {
42
+ readonly name: string;
43
+ readonly type: 'date';
44
+ readonly min?: string;
45
+ readonly max?: string;
46
+ }
47
+ export interface SlugField extends CommonFieldOptions {
48
+ readonly name: string;
49
+ readonly type: 'slug';
50
+ readonly source: string;
51
+ readonly pattern?: RegExp | string;
52
+ }
53
+ export interface AssetField extends CommonFieldOptions {
54
+ readonly name: string;
55
+ readonly type: 'asset';
56
+ readonly accept?: ReadonlyArray<string>;
57
+ readonly maxSize?: number;
58
+ }
59
+ export interface AssetListField extends CommonFieldOptions {
60
+ readonly name: string;
61
+ readonly type: 'assetList';
62
+ readonly accept?: ReadonlyArray<string>;
63
+ readonly maxSize?: number;
64
+ readonly max?: number;
65
+ readonly min?: number;
66
+ }
67
+ export interface ReferenceField extends CommonFieldOptions {
68
+ readonly name: string;
69
+ readonly type: 'reference';
70
+ readonly to: string;
71
+ readonly crossSpace?: boolean;
72
+ }
73
+ export interface ReferenceListField extends CommonFieldOptions {
74
+ readonly name: string;
75
+ readonly type: 'referenceList';
76
+ /** Target type name(s). A string targets a single content type; an
77
+ * array allows the list to mix entries of any of the listed types
78
+ * (Storyblok-blocks pattern, M1.4b). The compiler validates every
79
+ * entry against the runtime target's IR. */
80
+ readonly to: string | ReadonlyArray<string>;
81
+ readonly crossSpace?: boolean;
82
+ readonly max?: number;
83
+ readonly min?: number;
84
+ }
85
+ export interface EnumField extends CommonFieldOptions {
86
+ readonly name: string;
87
+ readonly type: 'enum';
88
+ readonly options: ReadonlyArray<string>;
89
+ }
90
+ export interface GeoPointField extends CommonFieldOptions {
91
+ readonly name: string;
92
+ readonly type: 'geoPoint';
93
+ }
94
+ export interface EmbeddedField extends CommonFieldOptions {
95
+ readonly name: string;
96
+ readonly type: 'embedded';
97
+ readonly of: EmbeddedDefinition;
98
+ }
99
+ export interface JsonField extends CommonFieldOptions {
100
+ readonly name: string;
101
+ readonly type: 'json';
102
+ }
103
+ export interface MarkdownField extends CommonFieldOptions {
104
+ readonly name: string;
105
+ readonly type: 'markdown';
106
+ }
107
+ export type Field = TextField | RichTextField | NumberField | BooleanField | DateTimeField | DateField | SlugField | AssetField | AssetListField | ReferenceField | ReferenceListField | EnumField | GeoPointField | EmbeddedField | JsonField | MarkdownField;
108
+ export interface TypeDefinition {
109
+ readonly name: string;
110
+ readonly title: string;
111
+ readonly description?: string;
112
+ readonly icon?: string;
113
+ readonly isSingleton?: boolean;
114
+ readonly displayField?: string;
115
+ readonly previewUrl?: string;
116
+ readonly fields: ReadonlyArray<Field>;
117
+ readonly __kind: 'type';
118
+ }
119
+ export interface EmbeddedDefinition {
120
+ readonly name: string;
121
+ readonly title: string;
122
+ readonly description?: string;
123
+ readonly fields: ReadonlyArray<Field>;
124
+ readonly __kind: 'embedded';
125
+ }
126
+ export type AnyDefinition = TypeDefinition | EmbeddedDefinition;
127
+ export declare const IR_SCHEMA_URL = "https://schemas.estokad.com/content-type/v1.json";
128
+ interface FieldIRBase {
129
+ readonly id: string;
130
+ readonly name: string;
131
+ readonly required?: boolean;
132
+ readonly default?: unknown;
133
+ readonly hint?: string;
134
+ readonly localized?: boolean;
135
+ readonly readOnly?: boolean;
136
+ }
137
+ export interface TextFieldIR extends FieldIRBase {
138
+ readonly type: 'text';
139
+ readonly max?: number;
140
+ readonly min?: number;
141
+ readonly multiline?: boolean;
142
+ readonly pattern?: string;
143
+ }
144
+ export interface RichTextFieldIR extends FieldIRBase {
145
+ readonly type: 'richText';
146
+ readonly features?: ReadonlyArray<RichTextFeature>;
147
+ }
148
+ export interface NumberFieldIR extends FieldIRBase {
149
+ readonly type: 'number';
150
+ readonly min?: number;
151
+ readonly max?: number;
152
+ readonly integer?: boolean;
153
+ }
154
+ export interface BooleanFieldIR extends FieldIRBase {
155
+ readonly type: 'boolean';
156
+ }
157
+ export interface DateTimeFieldIR extends FieldIRBase {
158
+ readonly type: 'datetime';
159
+ readonly min?: string;
160
+ readonly max?: string;
161
+ }
162
+ export interface DateFieldIR extends FieldIRBase {
163
+ readonly type: 'date';
164
+ readonly min?: string;
165
+ readonly max?: string;
166
+ }
167
+ export interface SlugFieldIR extends FieldIRBase {
168
+ readonly type: 'slug';
169
+ readonly source: string;
170
+ readonly pattern?: string;
171
+ }
172
+ export interface AssetFieldIR extends FieldIRBase {
173
+ readonly type: 'asset';
174
+ readonly accept?: ReadonlyArray<string>;
175
+ readonly maxSize?: number;
176
+ }
177
+ export interface AssetListFieldIR extends FieldIRBase {
178
+ readonly type: 'assetList';
179
+ readonly accept?: ReadonlyArray<string>;
180
+ readonly maxSize?: number;
181
+ readonly max?: number;
182
+ readonly min?: number;
183
+ }
184
+ export interface ReferenceFieldIR extends FieldIRBase {
185
+ readonly type: 'reference';
186
+ readonly to: string;
187
+ readonly crossSpace?: boolean;
188
+ }
189
+ export interface ReferenceListFieldIR extends FieldIRBase {
190
+ readonly type: 'referenceList';
191
+ /** Target type name(s). A string targets a single content type; an
192
+ * array allows the list to mix entries of any of the listed types
193
+ * (M1.4b polymorphic blocks). Always normalised to a non-empty
194
+ * array shape at compile() time when authoring still passes a
195
+ * bare string — both shapes round-trip through the IR. */
196
+ readonly to: string | ReadonlyArray<string>;
197
+ readonly crossSpace?: boolean;
198
+ readonly max?: number;
199
+ readonly min?: number;
200
+ }
201
+ export interface EnumFieldIR extends FieldIRBase {
202
+ readonly type: 'enum';
203
+ readonly options: ReadonlyArray<string>;
204
+ }
205
+ export interface GeoPointFieldIR extends FieldIRBase {
206
+ readonly type: 'geoPoint';
207
+ }
208
+ export interface EmbeddedFieldIR extends FieldIRBase {
209
+ readonly type: 'embedded';
210
+ readonly of: string;
211
+ }
212
+ export interface JsonFieldIR extends FieldIRBase {
213
+ readonly type: 'json';
214
+ }
215
+ export interface MarkdownFieldIR extends FieldIRBase {
216
+ readonly type: 'markdown';
217
+ }
218
+ export type FieldIR = TextFieldIR | RichTextFieldIR | NumberFieldIR | BooleanFieldIR | DateTimeFieldIR | DateFieldIR | SlugFieldIR | AssetFieldIR | AssetListFieldIR | ReferenceFieldIR | ReferenceListFieldIR | EnumFieldIR | GeoPointFieldIR | EmbeddedFieldIR | JsonFieldIR | MarkdownFieldIR;
219
+ export interface TypeIR {
220
+ readonly $schema: typeof IR_SCHEMA_URL;
221
+ readonly id: string;
222
+ readonly name: string;
223
+ readonly title: string;
224
+ readonly description?: string;
225
+ readonly icon?: string;
226
+ readonly isSingleton: boolean;
227
+ readonly isEmbedded: boolean;
228
+ readonly displayField?: string;
229
+ readonly previewUrl?: string;
230
+ readonly fields: ReadonlyArray<FieldIR>;
231
+ }
232
+ export interface SchemaState {
233
+ readonly types: Readonly<Record<string, TypeStateEntry>>;
234
+ }
235
+ export interface TypeStateEntry {
236
+ readonly id: string;
237
+ readonly fields: Readonly<Record<string, string>>;
238
+ }
239
+ export {};
240
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,12 @@
1
+ // Public types for @estokad/schema.
2
+ //
3
+ // The user-facing definitions (TypeDefinition, EmbeddedDefinition, the Field
4
+ // union) describe what a developer hands to defineType() / defineEmbedded().
5
+ // The IR types (TypeIR, FieldIR) describe what compile() emits — every type
6
+ // and field gets a stable UUID for rename detection across schema pushes.
7
+ //
8
+ // See docs/schema-system.md § 3 for the field-type taxonomy and § 5 for the
9
+ // IR shape.
10
+ // --- IR (compile() output) ------------------------------------------------
11
+ export const IR_SCHEMA_URL = 'https://schemas.estokad.com/content-type/v1.json';
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,4EAA4E;AAC5E,0EAA0E;AAC1E,EAAE;AACF,4EAA4E;AAC5E,YAAY;AA2LZ,6EAA6E;AAE7E,MAAM,CAAC,MAAM,aAAa,GAAG,kDAAkD,CAAA"}
package/dist/zod.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ import { type ZodType } from 'zod';
2
+ import type { TypeIR } from './types.js';
3
+ export interface ZodSchemas {
4
+ readonly types: Record<string, ZodType>;
5
+ }
6
+ export interface MakeZodOptions {
7
+ /** When true, every field is treated as optional regardless of its
8
+ * `required` flag. Used by the API on draft writes (POST /:type
9
+ * stub-create, PATCH /:type/:id) so editors can save incomplete
10
+ * entries; the publish path still validates the full shape. */
11
+ readonly partial?: boolean;
12
+ }
13
+ export declare function makeZod(ir: ReadonlyArray<TypeIR>, options?: MakeZodOptions): ZodSchemas;
14
+ //# sourceMappingURL=zod.d.ts.map