payload-live-preview 1.0.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 (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +389 -0
  3. package/dist/adapters/astro/RichText.astro +55 -0
  4. package/dist/adapters/astro/index.cjs +370 -0
  5. package/dist/adapters/astro/index.cjs.map +1 -0
  6. package/dist/adapters/astro/index.d.cts +105 -0
  7. package/dist/adapters/astro/index.d.ts +105 -0
  8. package/dist/adapters/astro/index.js +364 -0
  9. package/dist/adapters/astro/index.js.map +1 -0
  10. package/dist/adapters/astro/middleware-entry.cjs +303 -0
  11. package/dist/adapters/astro/middleware-entry.cjs.map +1 -0
  12. package/dist/adapters/astro/middleware-entry.d.cts +15 -0
  13. package/dist/adapters/astro/middleware-entry.d.ts +15 -0
  14. package/dist/adapters/astro/middleware-entry.js +297 -0
  15. package/dist/adapters/astro/middleware-entry.js.map +1 -0
  16. package/dist/adapters/nextjs/index.cjs +309 -0
  17. package/dist/adapters/nextjs/index.cjs.map +1 -0
  18. package/dist/adapters/nextjs/index.d.cts +75 -0
  19. package/dist/adapters/nextjs/index.d.ts +75 -0
  20. package/dist/adapters/nextjs/index.js +306 -0
  21. package/dist/adapters/nextjs/index.js.map +1 -0
  22. package/dist/adapters/nuxt/index.cjs +299 -0
  23. package/dist/adapters/nuxt/index.cjs.map +1 -0
  24. package/dist/adapters/nuxt/index.d.cts +126 -0
  25. package/dist/adapters/nuxt/index.d.ts +126 -0
  26. package/dist/adapters/nuxt/index.js +294 -0
  27. package/dist/adapters/nuxt/index.js.map +1 -0
  28. package/dist/adapters/sveltekit/index.cjs +275 -0
  29. package/dist/adapters/sveltekit/index.cjs.map +1 -0
  30. package/dist/adapters/sveltekit/index.d.cts +80 -0
  31. package/dist/adapters/sveltekit/index.d.ts +80 -0
  32. package/dist/adapters/sveltekit/index.js +273 -0
  33. package/dist/adapters/sveltekit/index.js.map +1 -0
  34. package/dist/bind-BSgxoQhN.d.cts +1137 -0
  35. package/dist/bind-BSgxoQhN.d.ts +1137 -0
  36. package/dist/codegen-astro.cjs +612 -0
  37. package/dist/codegen-astro.cjs.map +1 -0
  38. package/dist/codegen-astro.d.cts +54 -0
  39. package/dist/codegen-astro.d.ts +54 -0
  40. package/dist/codegen-astro.js +610 -0
  41. package/dist/codegen-astro.js.map +1 -0
  42. package/dist/codegen-cli.cjs +669 -0
  43. package/dist/codegen-cli.cjs.map +1 -0
  44. package/dist/codegen-cli.d.cts +19 -0
  45. package/dist/codegen-cli.d.ts +19 -0
  46. package/dist/codegen-cli.js +667 -0
  47. package/dist/codegen-cli.js.map +1 -0
  48. package/dist/codegen.cjs +551 -0
  49. package/dist/codegen.cjs.map +1 -0
  50. package/dist/codegen.d.cts +162 -0
  51. package/dist/codegen.d.ts +162 -0
  52. package/dist/codegen.js +547 -0
  53. package/dist/codegen.js.map +1 -0
  54. package/dist/core.cjs +3684 -0
  55. package/dist/core.cjs.map +1 -0
  56. package/dist/core.d.cts +24 -0
  57. package/dist/core.d.ts +24 -0
  58. package/dist/core.js +3657 -0
  59. package/dist/core.js.map +1 -0
  60. package/dist/index.cjs +4083 -0
  61. package/dist/index.cjs.map +1 -0
  62. package/dist/index.d.cts +472 -0
  63. package/dist/index.d.ts +472 -0
  64. package/dist/index.js +4040 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/middleware-BwIlf0jW.d.cts +168 -0
  67. package/dist/middleware-BwIlf0jW.d.ts +168 -0
  68. package/dist/payload.cjs +31 -0
  69. package/dist/payload.cjs.map +1 -0
  70. package/dist/payload.d.cts +87 -0
  71. package/dist/payload.d.ts +87 -0
  72. package/dist/payload.js +29 -0
  73. package/dist/payload.js.map +1 -0
  74. package/dist/preview-request-DAvxm18T.d.cts +68 -0
  75. package/dist/preview-request-DAvxm18T.d.ts +68 -0
  76. package/package.json +186 -0
@@ -0,0 +1,551 @@
1
+ 'use strict';
2
+
3
+ var promises = require('fs/promises');
4
+ var path = require('path');
5
+ var tsMorph = require('ts-morph');
6
+
7
+ // src/codegen/index.ts
8
+ var SCALAR_TYPE_MAP = {
9
+ text: "string",
10
+ textarea: "string",
11
+ email: "string",
12
+ richText: "unknown",
13
+ number: "number",
14
+ checkbox: "boolean",
15
+ date: "string",
16
+ code: "string",
17
+ point: "unknown",
18
+ ui: "unknown",
19
+ radio: "string"
20
+ };
21
+ function extractField(literal) {
22
+ const type = readStringProperty(literal, "type");
23
+ if (type === void 0) return void 0;
24
+ const STRUCTURAL_TYPES = /* @__PURE__ */ new Set(["tabs", "row", "collapsible"]);
25
+ const name = readStringProperty(literal, "name");
26
+ if (name === void 0 && !STRUCTURAL_TYPES.has(type)) return void 0;
27
+ const required = readBooleanProperty(literal, "required") ?? false;
28
+ const localized = readBooleanProperty(literal, "localized") ?? false;
29
+ const base = { name: name ?? "__structural", required, localized };
30
+ switch (type) {
31
+ case "array":
32
+ return {
33
+ ...base,
34
+ kind: "array",
35
+ fields: extractNestedFields(literal)
36
+ };
37
+ case "blocks":
38
+ return {
39
+ ...base,
40
+ kind: "blocks",
41
+ blocks: extractBlocks(literal)
42
+ };
43
+ case "group":
44
+ return {
45
+ ...base,
46
+ kind: "group",
47
+ fields: extractNestedFields(literal)
48
+ };
49
+ case "tabs":
50
+ case "row":
51
+ case "collapsible": {
52
+ const flattened = extractNestedFieldsFromStructural(literal);
53
+ return {
54
+ ...base,
55
+ kind: "group",
56
+ fields: flattened
57
+ };
58
+ }
59
+ case "relationship":
60
+ return {
61
+ ...base,
62
+ kind: "relationship",
63
+ target: readRelationTarget(literal),
64
+ hasMany: readBooleanProperty(literal, "hasMany") ?? false
65
+ };
66
+ case "upload":
67
+ return {
68
+ ...base,
69
+ kind: "upload",
70
+ target: readRelationTargetSingle(literal) ?? "media"
71
+ };
72
+ case "json":
73
+ return { ...base, kind: "json" };
74
+ case "select":
75
+ return {
76
+ ...base,
77
+ kind: "select",
78
+ options: readSelectOptions(literal),
79
+ hasMany: readBooleanProperty(literal, "hasMany") ?? false
80
+ };
81
+ default: {
82
+ const typeRef = SCALAR_TYPE_MAP[type] ?? "unknown";
83
+ return { ...base, kind: "scalar", typeRef };
84
+ }
85
+ }
86
+ }
87
+ function extractNestedFields(literal) {
88
+ const fieldsLiteral = readArrayProperty(literal, "fields");
89
+ if (!fieldsLiteral) return [];
90
+ const out = [];
91
+ for (const element of fieldsLiteral.getElements()) {
92
+ if (!tsMorph.Node.isObjectLiteralExpression(element)) continue;
93
+ const f = extractField(element);
94
+ if (!f) continue;
95
+ if (f.kind === "group" && f.name === "__structural") {
96
+ out.push(...f.fields);
97
+ } else {
98
+ out.push(f);
99
+ }
100
+ }
101
+ return out;
102
+ }
103
+ function extractNestedFieldsFromStructural(literal) {
104
+ const tabsLiteral = readArrayProperty(literal, "tabs");
105
+ if (tabsLiteral) {
106
+ const out = [];
107
+ for (const tabElement of tabsLiteral.getElements()) {
108
+ if (!tsMorph.Node.isObjectLiteralExpression(tabElement)) continue;
109
+ const tabName = readStringProperty(tabElement, "name");
110
+ const tabFields = extractNestedFields(tabElement);
111
+ if (tabName !== void 0) {
112
+ out.push({
113
+ kind: "group",
114
+ name: tabName,
115
+ required: false,
116
+ localized: false,
117
+ fields: tabFields
118
+ });
119
+ } else {
120
+ out.push(...tabFields);
121
+ }
122
+ }
123
+ return out;
124
+ }
125
+ return extractNestedFields(literal);
126
+ }
127
+ function extractBlocks(literal) {
128
+ const blocksLiteral = readArrayProperty(literal, "blocks");
129
+ if (!blocksLiteral) return [];
130
+ const out = [];
131
+ for (const element of blocksLiteral.getElements()) {
132
+ if (!tsMorph.Node.isObjectLiteralExpression(element)) continue;
133
+ const slug = readStringProperty(element, "slug");
134
+ if (slug === void 0) continue;
135
+ out.push({
136
+ slug,
137
+ typeName: toPascalCase(slug),
138
+ fields: extractNestedFields(element)
139
+ });
140
+ }
141
+ return out;
142
+ }
143
+ function readRelationTarget(literal) {
144
+ const property = literal.getProperty("relationTo");
145
+ if (!property || !tsMorph.Node.isPropertyAssignment(property)) return "unknown";
146
+ const initialiser = property.getInitializer();
147
+ if (initialiser && tsMorph.Node.isStringLiteral(initialiser)) return initialiser.getLiteralValue();
148
+ if (initialiser && tsMorph.Node.isArrayLiteralExpression(initialiser)) {
149
+ return initialiser.getElements().filter(tsMorph.Node.isStringLiteral).map((el) => el.getLiteralValue());
150
+ }
151
+ return "unknown";
152
+ }
153
+ function readRelationTargetSingle(literal) {
154
+ const target = readRelationTarget(literal);
155
+ if (typeof target === "string") return target;
156
+ return target[0];
157
+ }
158
+ function readSelectOptions(literal) {
159
+ const optionsLiteral = readArrayProperty(literal, "options");
160
+ if (!optionsLiteral) return [];
161
+ const out = [];
162
+ for (const element of optionsLiteral.getElements()) {
163
+ if (tsMorph.Node.isStringLiteral(element)) {
164
+ out.push(element.getLiteralValue());
165
+ } else if (tsMorph.Node.isObjectLiteralExpression(element)) {
166
+ const value = readStringProperty(element, "value");
167
+ if (value !== void 0) out.push(value);
168
+ }
169
+ }
170
+ return out;
171
+ }
172
+ function readStringProperty(literal, name) {
173
+ const property = literal.getProperty(name);
174
+ if (!property || !isPropertyAssignment(property)) return void 0;
175
+ const initialiser = property.getInitializer();
176
+ if (initialiser && tsMorph.Node.isStringLiteral(initialiser)) return initialiser.getLiteralValue();
177
+ if (initialiser && tsMorph.Node.isNoSubstitutionTemplateLiteral(initialiser)) {
178
+ return initialiser.getLiteralValue();
179
+ }
180
+ return void 0;
181
+ }
182
+ function readBooleanProperty(literal, name) {
183
+ const property = literal.getProperty(name);
184
+ if (!property || !isPropertyAssignment(property)) return void 0;
185
+ const initialiser = property.getInitializer();
186
+ if (!initialiser) return void 0;
187
+ if (initialiser.getKind() === tsMorph.SyntaxKind.TrueKeyword) return true;
188
+ if (initialiser.getKind() === tsMorph.SyntaxKind.FalseKeyword) return false;
189
+ return void 0;
190
+ }
191
+ function readArrayProperty(literal, name) {
192
+ const property = literal.getProperty(name);
193
+ if (!property || !isPropertyAssignment(property)) return void 0;
194
+ const initialiser = property.getInitializer();
195
+ if (initialiser && tsMorph.Node.isArrayLiteralExpression(initialiser)) return initialiser;
196
+ return void 0;
197
+ }
198
+ function isPropertyAssignment(node) {
199
+ return tsMorph.Node.isPropertyAssignment(node);
200
+ }
201
+ function toPascalCase(slug) {
202
+ return slug.split(/[-_\s]+/).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("");
203
+ }
204
+
205
+ // src/codegen/parser/extract-schema.ts
206
+ function extractSchema(options) {
207
+ const project = options.project ?? new tsMorph.Project(
208
+ options.tsConfigFilePath !== void 0 ? { tsConfigFilePath: options.tsConfigFilePath } : { skipAddingFilesFromTsConfig: true }
209
+ );
210
+ const sourceFile = project.addSourceFileAtPathIfExists(options.configPath);
211
+ if (!sourceFile) {
212
+ return {
213
+ globals: [],
214
+ collections: [],
215
+ diagnostics: [`Could not open ${options.configPath}`]
216
+ };
217
+ }
218
+ project.resolveSourceFileDependencies();
219
+ const diagnostics = [];
220
+ const configLiteral = findConfigLiteral(sourceFile, diagnostics);
221
+ if (!configLiteral) {
222
+ return {
223
+ globals: [],
224
+ collections: [],
225
+ diagnostics: [
226
+ ...diagnostics,
227
+ "Could not locate a buildConfig({...}) call or `export default {...}` in the config file."
228
+ ]
229
+ };
230
+ }
231
+ const globals = extractSlugList(configLiteral, "globals", diagnostics);
232
+ const collections = extractSlugList(configLiteral, "collections", diagnostics);
233
+ return { globals, collections, diagnostics };
234
+ }
235
+ function findConfigLiteral(sourceFile, diagnostics) {
236
+ const defaultExport = sourceFile.getExportSymbols().find((sym) => sym.getName() === "default");
237
+ if (!defaultExport) {
238
+ diagnostics.push("payload.config.ts has no default export.");
239
+ return void 0;
240
+ }
241
+ const declarations = defaultExport.getDeclarations();
242
+ for (const decl of declarations) {
243
+ const candidate = unwrapToObjectLiteral(decl);
244
+ if (candidate) return candidate;
245
+ }
246
+ for (const call of sourceFile.getDescendantsOfKind(tsMorph.SyntaxKind.CallExpression)) {
247
+ const expr = call.getExpression();
248
+ if (tsMorph.Node.isIdentifier(expr) && expr.getText() === "buildConfig") {
249
+ const arg = call.getArguments()[0];
250
+ if (arg && tsMorph.Node.isObjectLiteralExpression(arg)) return arg;
251
+ }
252
+ }
253
+ return void 0;
254
+ }
255
+ function unwrapToObjectLiteral(node) {
256
+ if (tsMorph.Node.isExportAssignment(node)) {
257
+ return unwrapExpression(node.getExpression());
258
+ }
259
+ if (tsMorph.Node.isVariableDeclaration(node)) {
260
+ const initialiser = node.getInitializer();
261
+ if (initialiser) return unwrapExpression(initialiser);
262
+ }
263
+ return void 0;
264
+ }
265
+ function unwrapExpression(node) {
266
+ if (!node) return void 0;
267
+ if (tsMorph.Node.isObjectLiteralExpression(node)) return node;
268
+ if (tsMorph.Node.isCallExpression(node)) {
269
+ const arg = node.getArguments()[0];
270
+ if (arg && tsMorph.Node.isObjectLiteralExpression(arg)) return arg;
271
+ }
272
+ if (tsMorph.Node.isAsExpression(node)) {
273
+ return unwrapExpression(node.getExpression());
274
+ }
275
+ if (tsMorph.Node.isSatisfiesExpression(node)) {
276
+ return unwrapExpression(node.getExpression());
277
+ }
278
+ if (tsMorph.Node.isIdentifier(node)) {
279
+ return resolveIdentifierToObjectLiteral(node);
280
+ }
281
+ return void 0;
282
+ }
283
+ function resolveIdentifierToObjectLiteral(identifier) {
284
+ for (const decl of identifier.getDefinitionNodes()) {
285
+ const result = unwrapToObjectLiteral(decl);
286
+ if (result) return result;
287
+ }
288
+ return void 0;
289
+ }
290
+ function extractSlugList(configLiteral, key, diagnostics) {
291
+ const property = configLiteral.getProperty(key);
292
+ if (!property) return [];
293
+ if (!tsMorph.Node.isPropertyAssignment(property)) return [];
294
+ const initialiser = property.getInitializer();
295
+ if (!initialiser) return [];
296
+ const array = resolveToArrayLiteral(initialiser);
297
+ if (!array) return [];
298
+ return extractEntries(array, diagnostics);
299
+ }
300
+ function extractEntries(array, diagnostics) {
301
+ const out = [];
302
+ for (const element of array.getElements()) {
303
+ if (tsMorph.Node.isSpreadElement(element)) {
304
+ const expandedArray = resolveToArrayLiteral(element.getExpression());
305
+ if (!expandedArray) {
306
+ diagnostics.push(
307
+ `Could not resolve spread "${element.getText().slice(0, 80)}" to an array literal.`
308
+ );
309
+ continue;
310
+ }
311
+ out.push(...extractEntries(expandedArray, diagnostics));
312
+ continue;
313
+ }
314
+ const literal = resolveToObjectLiteral(element);
315
+ if (!literal) {
316
+ diagnostics.push(
317
+ `Could not resolve config entry "${element.getText().slice(0, 80)}" to an object literal.`
318
+ );
319
+ continue;
320
+ }
321
+ const slug = readStringProperty2(literal, "slug");
322
+ if (slug === void 0) {
323
+ diagnostics.push(`Skipping a config entry \u2014 no string \`slug\` field found.`);
324
+ continue;
325
+ }
326
+ out.push({
327
+ slug,
328
+ typeName: toPascalCase(slug),
329
+ fields: extractFieldList(literal)
330
+ });
331
+ }
332
+ return out;
333
+ }
334
+ function extractFieldList(configEntry) {
335
+ const fieldsProperty = configEntry.getProperty("fields");
336
+ if (!fieldsProperty || !tsMorph.Node.isPropertyAssignment(fieldsProperty)) return [];
337
+ const initialiser = fieldsProperty.getInitializer();
338
+ if (!initialiser || !tsMorph.Node.isArrayLiteralExpression(initialiser)) return [];
339
+ const out = [];
340
+ for (const element of initialiser.getElements()) {
341
+ if (tsMorph.Node.isSpreadElement(element)) {
342
+ const expanded = resolveToArrayLiteral(element.getExpression());
343
+ if (!expanded) continue;
344
+ for (const inner of expanded.getElements()) {
345
+ const literal2 = resolveToObjectLiteral(inner);
346
+ if (!literal2) continue;
347
+ const field2 = extractField(literal2);
348
+ if (!field2) continue;
349
+ if (field2.kind === "group" && field2.name === "__structural") {
350
+ out.push(...field2.fields);
351
+ } else {
352
+ out.push(field2);
353
+ }
354
+ }
355
+ continue;
356
+ }
357
+ const literal = resolveToObjectLiteral(element);
358
+ if (!literal) continue;
359
+ const field = extractField(literal);
360
+ if (!field) continue;
361
+ if (field.kind === "group" && field.name === "__structural") {
362
+ out.push(...field.fields);
363
+ } else {
364
+ out.push(field);
365
+ }
366
+ }
367
+ return out;
368
+ }
369
+ function resolveToObjectLiteral(node) {
370
+ if (tsMorph.Node.isObjectLiteralExpression(node)) return node;
371
+ if (tsMorph.Node.isIdentifier(node)) return resolveIdentifierToObjectLiteral(node);
372
+ if (tsMorph.Node.isAsExpression(node)) return resolveToObjectLiteral(node.getExpression());
373
+ if (tsMorph.Node.isSatisfiesExpression(node)) return resolveToObjectLiteral(node.getExpression());
374
+ if (tsMorph.Node.isCallExpression(node)) {
375
+ const arg = node.getArguments()[0];
376
+ if (arg) return resolveToObjectLiteral(arg);
377
+ }
378
+ return void 0;
379
+ }
380
+ function resolveToArrayLiteral(node) {
381
+ if (tsMorph.Node.isArrayLiteralExpression(node)) return node;
382
+ if (tsMorph.Node.isAsExpression(node)) return resolveToArrayLiteral(node.getExpression());
383
+ if (tsMorph.Node.isSatisfiesExpression(node)) return resolveToArrayLiteral(node.getExpression());
384
+ if (tsMorph.Node.isIdentifier(node)) {
385
+ for (const decl of node.getDefinitionNodes()) {
386
+ if (tsMorph.Node.isVariableDeclaration(decl)) {
387
+ const initialiser = decl.getInitializer();
388
+ if (initialiser) {
389
+ const resolved = resolveToArrayLiteral(initialiser);
390
+ if (resolved) return resolved;
391
+ }
392
+ }
393
+ }
394
+ }
395
+ return void 0;
396
+ }
397
+ function readStringProperty2(literal, name) {
398
+ const property = literal.getProperty(name);
399
+ if (!property || !tsMorph.Node.isPropertyAssignment(property)) return void 0;
400
+ const initialiser = property.getInitializer();
401
+ if (initialiser && tsMorph.Node.isStringLiteral(initialiser)) return initialiser.getLiteralValue();
402
+ return void 0;
403
+ }
404
+
405
+ // src/codegen/emit/emit-types.ts
406
+ var DEFAULT_HEADER = "// Auto-generated by payload-live-preview/codegen.\n// Do not edit by hand \u2014 run `pll-codegen` to regenerate.\n/* eslint-disable */";
407
+ function emitTypes(schema, options = {}) {
408
+ const lines = [];
409
+ lines.push(options.header ?? DEFAULT_HEADER);
410
+ lines.push("");
411
+ lines.push('import type { PayloadMedia, PayloadRelationship } from "payload-live-preview";');
412
+ lines.push("");
413
+ const seenAuxNames = /* @__PURE__ */ new Set();
414
+ for (const slug of [...schema.globals, ...schema.collections]) {
415
+ emitSlug(slug, lines, seenAuxNames, options);
416
+ lines.push("");
417
+ }
418
+ if (schema.globals.length > 0) {
419
+ lines.push("export type PayloadGlobals = {");
420
+ for (const g of schema.globals) {
421
+ lines.push(` '${g.slug}': ${g.typeName};`);
422
+ }
423
+ lines.push("};");
424
+ lines.push("");
425
+ }
426
+ if (schema.collections.length > 0) {
427
+ lines.push("export type PayloadCollections = {");
428
+ for (const c of schema.collections) {
429
+ lines.push(` '${c.slug}': ${c.typeName};`);
430
+ }
431
+ lines.push("};");
432
+ lines.push("");
433
+ }
434
+ const slugAliases = [];
435
+ if (schema.globals.length > 0) slugAliases.push("keyof PayloadGlobals");
436
+ if (schema.collections.length > 0) slugAliases.push("keyof PayloadCollections");
437
+ if (slugAliases.length > 0) {
438
+ lines.push(`export type PayloadSlug = ${slugAliases.join(" | ")};`);
439
+ lines.push("");
440
+ }
441
+ return lines.join("\n").replace(/\n{3,}/g, "\n\n");
442
+ }
443
+ function emitSlug(slug, lines, seenAuxNames, options) {
444
+ emitAuxiliaries(slug.typeName, slug.fields, lines, seenAuxNames, options);
445
+ lines.push(`export interface ${slug.typeName} {`);
446
+ for (const field of slug.fields) {
447
+ emitFieldMember(field, slug.typeName, lines, options);
448
+ }
449
+ lines.push("}");
450
+ }
451
+ function emitAuxiliaries(prefix, fields, lines, seenAuxNames, options) {
452
+ for (const field of fields) {
453
+ const auxName = nestedTypeName(prefix, field.name);
454
+ if (field.kind === "array" || field.kind === "group") {
455
+ if (seenAuxNames.has(auxName)) continue;
456
+ seenAuxNames.add(auxName);
457
+ emitAuxiliaries(auxName, field.fields, lines, seenAuxNames, options);
458
+ lines.push(`export interface ${auxName} {`);
459
+ for (const inner of field.fields) {
460
+ emitFieldMember(inner, auxName, lines, options);
461
+ }
462
+ lines.push("}");
463
+ lines.push("");
464
+ } else if (field.kind === "blocks") {
465
+ for (const block of field.blocks) {
466
+ const blockTypeName = nestedTypeName(auxName, block.typeName);
467
+ if (seenAuxNames.has(blockTypeName)) continue;
468
+ seenAuxNames.add(blockTypeName);
469
+ emitAuxiliaries(blockTypeName, block.fields, lines, seenAuxNames, options);
470
+ emitBlockInterface(blockTypeName, block, lines, options);
471
+ }
472
+ }
473
+ }
474
+ }
475
+ function emitBlockInterface(typeName, block, lines, options) {
476
+ lines.push(`export interface ${typeName} {`);
477
+ lines.push(` blockType: '${block.slug}';`);
478
+ for (const field of block.fields) {
479
+ emitFieldMember(field, typeName, lines, options);
480
+ }
481
+ lines.push("}");
482
+ lines.push("");
483
+ }
484
+ function emitFieldMember(field, parent, lines, options) {
485
+ if (options.markLocalizedAsDeprecated && field.localized) {
486
+ lines.push(` /** @localized */`);
487
+ }
488
+ const optional = field.required ? "" : "?";
489
+ lines.push(` ${field.name}${optional}: ${renderFieldType(field, parent)};`);
490
+ }
491
+ function renderFieldType(field, parent) {
492
+ switch (field.kind) {
493
+ case "scalar":
494
+ return field.typeRef;
495
+ case "array":
496
+ return `${nestedTypeName(parent, field.name)}[]`;
497
+ case "blocks": {
498
+ if (field.blocks.length === 0) return "unknown[]";
499
+ const variants = field.blocks.map((b) => nestedTypeName(nestedTypeName(parent, field.name), b.typeName)).join(" | ");
500
+ return `(${variants})[]`;
501
+ }
502
+ case "group":
503
+ return nestedTypeName(parent, field.name);
504
+ case "relationship": {
505
+ const targetExpr = Array.isArray(field.target) ? field.target.map((t) => `'${t}'`).join(" | ") : `'${field.target}'`;
506
+ const base = `PayloadRelationship<${targetExpr}>`;
507
+ return field.hasMany ? `${base}[]` : base;
508
+ }
509
+ case "upload":
510
+ return "PayloadMedia";
511
+ case "json":
512
+ return "unknown";
513
+ case "select": {
514
+ if (field.options.length === 0) return field.hasMany ? "string[]" : "string";
515
+ const literal = field.options.map((o) => `'${o}'`).join(" | ");
516
+ return field.hasMany ? `(${literal})[]` : literal;
517
+ }
518
+ }
519
+ }
520
+ function nestedTypeName(parent, child) {
521
+ return `${parent}${toPascalCase(child)}`;
522
+ }
523
+
524
+ // src/codegen/index.ts
525
+ async function generateTypes(options) {
526
+ const cwd = options.cwd ?? process.cwd();
527
+ const configPath = path.isAbsolute(options.configPath) ? options.configPath : path.resolve(cwd, options.configPath);
528
+ const schema = extractSchema({
529
+ configPath,
530
+ ...options.project !== void 0 ? { project: options.project } : {},
531
+ ...options.tsConfigFilePath !== void 0 ? { tsConfigFilePath: options.tsConfigFilePath } : {}
532
+ });
533
+ const code = emitTypes(schema, options);
534
+ const result = options.outFile ? {
535
+ code,
536
+ diagnostics: schema.diagnostics,
537
+ schema,
538
+ outFile: path.isAbsolute(options.outFile) ? options.outFile : path.resolve(cwd, options.outFile)
539
+ } : { code, diagnostics: schema.diagnostics, schema };
540
+ if (result.outFile) {
541
+ await promises.mkdir(path.dirname(result.outFile), { recursive: true });
542
+ await promises.writeFile(result.outFile, code, "utf8");
543
+ }
544
+ return result;
545
+ }
546
+
547
+ exports.emitTypes = emitTypes;
548
+ exports.extractSchema = extractSchema;
549
+ exports.generateTypes = generateTypes;
550
+ //# sourceMappingURL=codegen.cjs.map
551
+ //# sourceMappingURL=codegen.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/codegen/parser/extract-field.ts","../src/codegen/parser/extract-schema.ts","../src/codegen/emit/emit-types.ts","../src/codegen/index.ts"],"names":["Node","SyntaxKind","Project","readStringProperty","literal","field","isAbsolute","resolve","mkdir","dirname","writeFile"],"mappings":"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","file":"codegen.cjs","sourcesContent":["/**\n * Field-level extraction from ts-morph object literals.\n *\n * Payload field definitions are TypeScript object literals like:\n *\n * ```ts\n * { name: 'heroTitle', type: 'text', required: true }\n * ```\n *\n * `extractField()` reads one such literal and produces a normalised\n * `ExtractedField`. It is intentionally tolerant — unknown field types\n * collapse to `unknown`, deeply-conditional fields surface as a\n * diagnostic rather than crashing the parser.\n *\n * @module @codegen/parser/extract-field\n */\n\nimport {\n Node,\n SyntaxKind,\n type ArrayLiteralExpression,\n type ObjectLiteralExpression,\n type PropertyAssignment,\n} from 'ts-morph';\nimport type { ExtractedBlock, ExtractedField, ExtractedScalarField } from './types';\n\nconst SCALAR_TYPE_MAP: Readonly<Record<string, ExtractedScalarField['typeRef']>> = {\n text: 'string',\n textarea: 'string',\n email: 'string',\n richText: 'unknown',\n number: 'number',\n checkbox: 'boolean',\n date: 'string',\n code: 'string',\n point: 'unknown',\n ui: 'unknown',\n radio: 'string',\n};\n\nexport function extractField(literal: ObjectLiteralExpression): ExtractedField | undefined {\n const type = readStringProperty(literal, 'type');\n if (type === undefined) return undefined;\n\n // Most fields carry a `name`. Structural containers (`tabs`,\n // `row`, `collapsible`) do not — they flatten into their parent.\n const STRUCTURAL_TYPES = new Set(['tabs', 'row', 'collapsible']);\n const name = readStringProperty(literal, 'name');\n if (name === undefined && !STRUCTURAL_TYPES.has(type)) return undefined;\n\n const required = readBooleanProperty(literal, 'required') ?? false;\n const localized = readBooleanProperty(literal, 'localized') ?? false;\n const base = { name: name ?? '__structural', required, localized };\n\n switch (type) {\n case 'array':\n return {\n ...base,\n kind: 'array',\n fields: extractNestedFields(literal),\n };\n case 'blocks':\n return {\n ...base,\n kind: 'blocks',\n blocks: extractBlocks(literal),\n };\n case 'group':\n return {\n ...base,\n kind: 'group',\n fields: extractNestedFields(literal),\n };\n case 'tabs':\n case 'row':\n case 'collapsible': {\n // Structural containers — flatten their inner fields up so they\n // appear at the parent's level (Payload does the same at runtime).\n const flattened = extractNestedFieldsFromStructural(literal);\n return {\n ...base,\n kind: 'group',\n fields: flattened,\n };\n }\n case 'relationship':\n return {\n ...base,\n kind: 'relationship',\n target: readRelationTarget(literal),\n hasMany: readBooleanProperty(literal, 'hasMany') ?? false,\n };\n case 'upload':\n return {\n ...base,\n kind: 'upload',\n target: readRelationTargetSingle(literal) ?? 'media',\n };\n case 'json':\n return { ...base, kind: 'json' };\n case 'select':\n return {\n ...base,\n kind: 'select',\n options: readSelectOptions(literal),\n hasMany: readBooleanProperty(literal, 'hasMany') ?? false,\n };\n default: {\n const typeRef = SCALAR_TYPE_MAP[type] ?? 'unknown';\n return { ...base, kind: 'scalar', typeRef };\n }\n }\n}\n\nfunction extractNestedFields(literal: ObjectLiteralExpression): readonly ExtractedField[] {\n const fieldsLiteral = readArrayProperty(literal, 'fields');\n if (!fieldsLiteral) return [];\n const out: ExtractedField[] = [];\n for (const element of fieldsLiteral.getElements()) {\n if (!Node.isObjectLiteralExpression(element)) continue;\n const f = extractField(element);\n if (!f) continue;\n // Structural containers carry the magic `__structural` sentinel\n // name — splat their child fields into the parent instead of\n // surfacing them as a nameless property.\n if (f.kind === 'group' && f.name === '__structural') {\n out.push(...f.fields);\n } else {\n out.push(f);\n }\n }\n return out;\n}\n\nfunction extractNestedFieldsFromStructural(\n literal: ObjectLiteralExpression,\n): readonly ExtractedField[] {\n // `tabs` is the awkward one — its inner shape is `tabs: [{ name, fields }, …]`\n // and each tab can either flatten via `name` or expose itself as a group.\n const tabsLiteral = readArrayProperty(literal, 'tabs');\n if (tabsLiteral) {\n const out: ExtractedField[] = [];\n for (const tabElement of tabsLiteral.getElements()) {\n if (!Node.isObjectLiteralExpression(tabElement)) continue;\n const tabName = readStringProperty(tabElement, 'name');\n const tabFields = extractNestedFields(tabElement);\n if (tabName !== undefined) {\n out.push({\n kind: 'group',\n name: tabName,\n required: false,\n localized: false,\n fields: tabFields,\n });\n } else {\n // Named-less tab — flatten its fields into the parent's surface.\n out.push(...tabFields);\n }\n }\n return out;\n }\n // `row` / `collapsible` — fields array sits directly on the literal.\n return extractNestedFields(literal);\n}\n\nfunction extractBlocks(literal: ObjectLiteralExpression): readonly ExtractedBlock[] {\n const blocksLiteral = readArrayProperty(literal, 'blocks');\n if (!blocksLiteral) return [];\n const out: ExtractedBlock[] = [];\n for (const element of blocksLiteral.getElements()) {\n if (!Node.isObjectLiteralExpression(element)) continue;\n const slug = readStringProperty(element, 'slug');\n if (slug === undefined) continue;\n out.push({\n slug,\n typeName: toPascalCase(slug),\n fields: extractNestedFields(element),\n });\n }\n return out;\n}\n\nfunction readRelationTarget(literal: ObjectLiteralExpression): string | readonly string[] {\n const property = literal.getProperty('relationTo');\n if (!property || !Node.isPropertyAssignment(property)) return 'unknown';\n const initialiser = property.getInitializer();\n if (initialiser && Node.isStringLiteral(initialiser)) return initialiser.getLiteralValue();\n if (initialiser && Node.isArrayLiteralExpression(initialiser)) {\n return initialiser\n .getElements()\n .filter(Node.isStringLiteral)\n .map((el) => el.getLiteralValue());\n }\n return 'unknown';\n}\n\nfunction readRelationTargetSingle(literal: ObjectLiteralExpression): string | undefined {\n const target = readRelationTarget(literal);\n if (typeof target === 'string') return target;\n return target[0];\n}\n\nfunction readSelectOptions(literal: ObjectLiteralExpression): readonly string[] {\n const optionsLiteral = readArrayProperty(literal, 'options');\n if (!optionsLiteral) return [];\n const out: string[] = [];\n for (const element of optionsLiteral.getElements()) {\n if (Node.isStringLiteral(element)) {\n out.push(element.getLiteralValue());\n } else if (Node.isObjectLiteralExpression(element)) {\n const value = readStringProperty(element, 'value');\n if (value !== undefined) out.push(value);\n }\n }\n return out;\n}\n\nfunction readStringProperty(literal: ObjectLiteralExpression, name: string): string | undefined {\n const property = literal.getProperty(name);\n if (!property || !isPropertyAssignment(property)) return undefined;\n const initialiser = property.getInitializer();\n if (initialiser && Node.isStringLiteral(initialiser)) return initialiser.getLiteralValue();\n if (initialiser && Node.isNoSubstitutionTemplateLiteral(initialiser)) {\n return initialiser.getLiteralValue();\n }\n return undefined;\n}\n\nfunction readBooleanProperty(literal: ObjectLiteralExpression, name: string): boolean | undefined {\n const property = literal.getProperty(name);\n if (!property || !isPropertyAssignment(property)) return undefined;\n const initialiser = property.getInitializer();\n if (!initialiser) return undefined;\n if (initialiser.getKind() === SyntaxKind.TrueKeyword) return true;\n if (initialiser.getKind() === SyntaxKind.FalseKeyword) return false;\n return undefined;\n}\n\nfunction readArrayProperty(\n literal: ObjectLiteralExpression,\n name: string,\n): ArrayLiteralExpression | undefined {\n const property = literal.getProperty(name);\n if (!property || !isPropertyAssignment(property)) return undefined;\n const initialiser = property.getInitializer();\n if (initialiser && Node.isArrayLiteralExpression(initialiser)) return initialiser;\n return undefined;\n}\n\nfunction isPropertyAssignment(node: Node): node is PropertyAssignment {\n return Node.isPropertyAssignment(node);\n}\n\nfunction toPascalCase(slug: string): string {\n return slug\n .split(/[-_\\s]+/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n}\n\nexport { toPascalCase };\n","/**\n * Schema-level extraction: open `payload.config.ts`, find every\n * collection and global definition, walk into them.\n *\n * The extractor is deliberately lenient. Payload configurations are\n * full TypeScript programs — a strict parser would have to model\n * conditional types, factory functions, plugin closures. Instead we\n * recognise the *common* shapes (object literal, identifier\n * referencing an imported literal, default export from a sibling\n * file) and emit a diagnostic for anything we can't unwrap.\n *\n * @module @codegen/parser/extract-schema\n */\n\nimport {\n Node,\n Project,\n SyntaxKind,\n type ArrayLiteralExpression,\n type Identifier,\n type ObjectLiteralExpression,\n type SourceFile,\n} from 'ts-morph';\nimport type { ExtractedField, ExtractedSchema, ExtractedSlug } from './types';\nimport { extractField, toPascalCase } from './extract-field';\n\nexport interface ExtractSchemaOptions {\n /** Absolute or relative path to `payload.config.ts`. */\n readonly configPath: string;\n /** When provided, used instead of constructing a fresh ts-morph project. */\n readonly project?: Project;\n /**\n * Optional path to a `tsconfig.json`. When set, ts-morph loads the\n * project's module-resolution configuration so cross-file imports\n * (Homepage from './globals') can be followed.\n */\n readonly tsConfigFilePath?: string;\n}\n\nexport function extractSchema(options: ExtractSchemaOptions): ExtractedSchema {\n const project =\n options.project ??\n new Project(\n options.tsConfigFilePath !== undefined\n ? { tsConfigFilePath: options.tsConfigFilePath }\n : { skipAddingFilesFromTsConfig: true },\n );\n const sourceFile = project.addSourceFileAtPathIfExists(options.configPath);\n if (!sourceFile) {\n return {\n globals: [],\n collections: [],\n diagnostics: [`Could not open ${options.configPath}`],\n };\n }\n // Pull in every transitively-imported file so cross-file identifier\n // resolution (e.g., `import { Homepage } from './globals'`) can\n // reach the underlying object literal.\n project.resolveSourceFileDependencies();\n const diagnostics: string[] = [];\n\n const configLiteral = findConfigLiteral(sourceFile, diagnostics);\n if (!configLiteral) {\n return {\n globals: [],\n collections: [],\n diagnostics: [\n ...diagnostics,\n 'Could not locate a buildConfig({...}) call or `export default {...}` in the config file.',\n ],\n };\n }\n\n const globals = extractSlugList(configLiteral, 'globals', diagnostics);\n const collections = extractSlugList(configLiteral, 'collections', diagnostics);\n\n return { globals, collections, diagnostics };\n}\n\nfunction findConfigLiteral(\n sourceFile: SourceFile,\n diagnostics: string[],\n): ObjectLiteralExpression | undefined {\n const defaultExport = sourceFile.getExportSymbols().find((sym) => sym.getName() === 'default');\n if (!defaultExport) {\n diagnostics.push('payload.config.ts has no default export.');\n return undefined;\n }\n const declarations = defaultExport.getDeclarations();\n for (const decl of declarations) {\n const candidate = unwrapToObjectLiteral(decl);\n if (candidate) return candidate;\n }\n // Fallback: scan the source file for the first `buildConfig({...})` call.\n for (const call of sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)) {\n const expr = call.getExpression();\n if (Node.isIdentifier(expr) && expr.getText() === 'buildConfig') {\n const arg = call.getArguments()[0];\n if (arg && Node.isObjectLiteralExpression(arg)) return arg;\n }\n }\n return undefined;\n}\n\nfunction unwrapToObjectLiteral(node: Node): ObjectLiteralExpression | undefined {\n if (Node.isExportAssignment(node)) {\n return unwrapExpression(node.getExpression());\n }\n if (Node.isVariableDeclaration(node)) {\n const initialiser = node.getInitializer();\n if (initialiser) return unwrapExpression(initialiser);\n }\n return undefined;\n}\n\nfunction unwrapExpression(node: Node | undefined): ObjectLiteralExpression | undefined {\n if (!node) return undefined;\n if (Node.isObjectLiteralExpression(node)) return node;\n if (Node.isCallExpression(node)) {\n // `buildConfig({...})` or `defineConfig({...})` — first arg.\n const arg = node.getArguments()[0];\n if (arg && Node.isObjectLiteralExpression(arg)) return arg;\n }\n if (Node.isAsExpression(node)) {\n return unwrapExpression(node.getExpression());\n }\n if (Node.isSatisfiesExpression(node)) {\n return unwrapExpression(node.getExpression());\n }\n if (Node.isIdentifier(node)) {\n return resolveIdentifierToObjectLiteral(node);\n }\n return undefined;\n}\n\nfunction resolveIdentifierToObjectLiteral(\n identifier: Identifier,\n): ObjectLiteralExpression | undefined {\n for (const decl of identifier.getDefinitionNodes()) {\n const result = unwrapToObjectLiteral(decl);\n if (result) return result;\n }\n return undefined;\n}\n\nfunction extractSlugList(\n configLiteral: ObjectLiteralExpression,\n key: 'globals' | 'collections',\n diagnostics: string[],\n): readonly ExtractedSlug[] {\n const property = configLiteral.getProperty(key);\n if (!property) return [];\n if (!Node.isPropertyAssignment(property)) return [];\n const initialiser = property.getInitializer();\n if (!initialiser) return [];\n const array = resolveToArrayLiteral(initialiser);\n if (!array) return [];\n return extractEntries(array, diagnostics);\n}\n\nfunction extractEntries(\n array: ArrayLiteralExpression,\n diagnostics: string[],\n): readonly ExtractedSlug[] {\n const out: ExtractedSlug[] = [];\n for (const element of array.getElements()) {\n // Handle `...someArray` spreads — common pattern in real Payload\n // configs that split globals/collections into named buckets.\n if (Node.isSpreadElement(element)) {\n const expandedArray = resolveToArrayLiteral(element.getExpression());\n if (!expandedArray) {\n diagnostics.push(\n `Could not resolve spread \"${element.getText().slice(0, 80)}\" to an array literal.`,\n );\n continue;\n }\n out.push(...extractEntries(expandedArray, diagnostics));\n continue;\n }\n const literal = resolveToObjectLiteral(element);\n if (!literal) {\n diagnostics.push(\n `Could not resolve config entry \"${element.getText().slice(0, 80)}\" to an object literal.`,\n );\n continue;\n }\n const slug = readStringProperty(literal, 'slug');\n if (slug === undefined) {\n diagnostics.push(`Skipping a config entry — no string \\`slug\\` field found.`);\n continue;\n }\n out.push({\n slug,\n typeName: toPascalCase(slug),\n fields: extractFieldList(literal),\n });\n }\n return out;\n}\n\nfunction extractFieldList(configEntry: ObjectLiteralExpression): readonly ExtractedField[] {\n const fieldsProperty = configEntry.getProperty('fields');\n if (!fieldsProperty || !Node.isPropertyAssignment(fieldsProperty)) return [];\n const initialiser = fieldsProperty.getInitializer();\n if (!initialiser || !Node.isArrayLiteralExpression(initialiser)) return [];\n const out: ExtractedField[] = [];\n for (const element of initialiser.getElements()) {\n // Allow spread elements for users who split fields into reusable\n // arrays (e.g., `...commonSeoFields`).\n if (Node.isSpreadElement(element)) {\n const expanded = resolveToArrayLiteral(element.getExpression());\n if (!expanded) continue;\n for (const inner of expanded.getElements()) {\n const literal = resolveToObjectLiteral(inner);\n if (!literal) continue;\n const field = extractField(literal);\n if (!field) continue;\n if (field.kind === 'group' && field.name === '__structural') {\n out.push(...field.fields);\n } else {\n out.push(field);\n }\n }\n continue;\n }\n const literal = resolveToObjectLiteral(element);\n if (!literal) continue;\n const field = extractField(literal);\n if (!field) continue;\n if (field.kind === 'group' && field.name === '__structural') {\n out.push(...field.fields);\n } else {\n out.push(field);\n }\n }\n return out;\n}\n\nfunction resolveToObjectLiteral(node: Node): ObjectLiteralExpression | undefined {\n if (Node.isObjectLiteralExpression(node)) return node;\n if (Node.isIdentifier(node)) return resolveIdentifierToObjectLiteral(node);\n if (Node.isAsExpression(node)) return resolveToObjectLiteral(node.getExpression());\n if (Node.isSatisfiesExpression(node)) return resolveToObjectLiteral(node.getExpression());\n if (Node.isCallExpression(node)) {\n const arg = node.getArguments()[0];\n if (arg) return resolveToObjectLiteral(arg);\n }\n return undefined;\n}\n\nfunction resolveToArrayLiteral(node: Node): ArrayLiteralExpression | undefined {\n if (Node.isArrayLiteralExpression(node)) return node;\n if (Node.isAsExpression(node)) return resolveToArrayLiteral(node.getExpression());\n if (Node.isSatisfiesExpression(node)) return resolveToArrayLiteral(node.getExpression());\n if (Node.isIdentifier(node)) {\n for (const decl of node.getDefinitionNodes()) {\n if (Node.isVariableDeclaration(decl)) {\n const initialiser = decl.getInitializer();\n if (initialiser) {\n const resolved = resolveToArrayLiteral(initialiser);\n if (resolved) return resolved;\n }\n }\n }\n }\n return undefined;\n}\n\nfunction readStringProperty(literal: ObjectLiteralExpression, name: string): string | undefined {\n const property = literal.getProperty(name);\n if (!property || !Node.isPropertyAssignment(property)) return undefined;\n const initialiser = property.getInitializer();\n if (initialiser && Node.isStringLiteral(initialiser)) return initialiser.getLiteralValue();\n return undefined;\n}\n","/**\n * Render `ExtractedSchema` to a TypeScript source string.\n *\n * The output is one self-contained `.ts` file that ships:\n *\n * - one `interface` per global and per collection,\n * - nested `interface` declarations for `group`/`array`/`blocks`,\n * - discriminated unions for `blocks` fields (one variant per slug),\n * - `PayloadCollections` / `PayloadGlobals` maps for slug-keyed\n * access (`PayloadCollections['posts']`), and\n * - a `PayloadSlug` alias.\n *\n * Nothing in the runtime depends on this output — consumers import\n * what they need by name.\n *\n * @module @codegen/emit/emit-types\n */\n\nimport type {\n ExtractedBlock,\n ExtractedField,\n ExtractedSchema,\n ExtractedSlug,\n} from '../parser/types';\nimport { toPascalCase } from '../parser/extract-field';\n\nexport interface EmitOptions {\n /** When true, includes a `@deprecated` JSDoc on localized fields. */\n readonly markLocalizedAsDeprecated?: boolean;\n /** Header text injected at the top of the output. Defaults sensibly. */\n readonly header?: string;\n}\n\nconst DEFAULT_HEADER =\n '// Auto-generated by payload-live-preview/codegen.\\n' +\n '// Do not edit by hand — run `pll-codegen` to regenerate.\\n' +\n '/* eslint-disable */';\n\nexport function emitTypes(schema: ExtractedSchema, options: EmitOptions = {}): string {\n const lines: string[] = [];\n lines.push(options.header ?? DEFAULT_HEADER);\n lines.push('');\n lines.push('import type { PayloadMedia, PayloadRelationship } from \"payload-live-preview\";');\n lines.push('');\n\n // Emit slug interfaces (globals + collections), each potentially\n // accompanied by nested interface declarations.\n const seenAuxNames = new Set<string>();\n for (const slug of [...schema.globals, ...schema.collections]) {\n emitSlug(slug, lines, seenAuxNames, options);\n lines.push('');\n }\n\n // Slug → type maps.\n if (schema.globals.length > 0) {\n lines.push('export type PayloadGlobals = {');\n for (const g of schema.globals) {\n lines.push(` '${g.slug}': ${g.typeName};`);\n }\n lines.push('};');\n lines.push('');\n }\n if (schema.collections.length > 0) {\n lines.push('export type PayloadCollections = {');\n for (const c of schema.collections) {\n lines.push(` '${c.slug}': ${c.typeName};`);\n }\n lines.push('};');\n lines.push('');\n }\n const slugAliases: string[] = [];\n if (schema.globals.length > 0) slugAliases.push('keyof PayloadGlobals');\n if (schema.collections.length > 0) slugAliases.push('keyof PayloadCollections');\n if (slugAliases.length > 0) {\n lines.push(`export type PayloadSlug = ${slugAliases.join(' | ')};`);\n lines.push('');\n }\n\n return lines.join('\\n').replace(/\\n{3,}/g, '\\n\\n');\n}\n\nfunction emitSlug(\n slug: ExtractedSlug,\n lines: string[],\n seenAuxNames: Set<string>,\n options: EmitOptions,\n): void {\n emitAuxiliaries(slug.typeName, slug.fields, lines, seenAuxNames, options);\n lines.push(`export interface ${slug.typeName} {`);\n for (const field of slug.fields) {\n emitFieldMember(field, slug.typeName, lines, options);\n }\n lines.push('}');\n}\n\nfunction emitAuxiliaries(\n prefix: string,\n fields: readonly ExtractedField[],\n lines: string[],\n seenAuxNames: Set<string>,\n options: EmitOptions,\n): void {\n for (const field of fields) {\n const auxName = nestedTypeName(prefix, field.name);\n if (field.kind === 'array' || field.kind === 'group') {\n if (seenAuxNames.has(auxName)) continue;\n seenAuxNames.add(auxName);\n emitAuxiliaries(auxName, field.fields, lines, seenAuxNames, options);\n lines.push(`export interface ${auxName} {`);\n for (const inner of field.fields) {\n emitFieldMember(inner, auxName, lines, options);\n }\n lines.push('}');\n lines.push('');\n } else if (field.kind === 'blocks') {\n for (const block of field.blocks) {\n const blockTypeName = nestedTypeName(auxName, block.typeName);\n if (seenAuxNames.has(blockTypeName)) continue;\n seenAuxNames.add(blockTypeName);\n emitAuxiliaries(blockTypeName, block.fields, lines, seenAuxNames, options);\n emitBlockInterface(blockTypeName, block, lines, options);\n }\n }\n }\n}\n\nfunction emitBlockInterface(\n typeName: string,\n block: ExtractedBlock,\n lines: string[],\n options: EmitOptions,\n): void {\n lines.push(`export interface ${typeName} {`);\n lines.push(` blockType: '${block.slug}';`);\n for (const field of block.fields) {\n emitFieldMember(field, typeName, lines, options);\n }\n lines.push('}');\n lines.push('');\n}\n\nfunction emitFieldMember(\n field: ExtractedField,\n parent: string,\n lines: string[],\n options: EmitOptions,\n): void {\n if (options.markLocalizedAsDeprecated && field.localized) {\n lines.push(` /** @localized */`);\n }\n const optional = field.required ? '' : '?';\n lines.push(` ${field.name}${optional}: ${renderFieldType(field, parent)};`);\n}\n\nfunction renderFieldType(field: ExtractedField, parent: string): string {\n switch (field.kind) {\n case 'scalar':\n return field.typeRef;\n case 'array':\n return `${nestedTypeName(parent, field.name)}[]`;\n case 'blocks': {\n if (field.blocks.length === 0) return 'unknown[]';\n const variants = field.blocks\n .map((b) => nestedTypeName(nestedTypeName(parent, field.name), b.typeName))\n .join(' | ');\n return `(${variants})[]`;\n }\n case 'group':\n return nestedTypeName(parent, field.name);\n case 'relationship': {\n const targetExpr: string = Array.isArray(field.target)\n ? field.target.map((t) => `'${t}'`).join(' | ')\n : `'${field.target as string}'`;\n const base = `PayloadRelationship<${targetExpr}>`;\n return field.hasMany ? `${base}[]` : base;\n }\n case 'upload':\n return 'PayloadMedia';\n case 'json':\n return 'unknown';\n case 'select': {\n if (field.options.length === 0) return field.hasMany ? 'string[]' : 'string';\n const literal = field.options.map((o) => `'${o}'`).join(' | ');\n return field.hasMany ? `(${literal})[]` : literal;\n }\n }\n}\n\nfunction nestedTypeName(parent: string, child: string): string {\n return `${parent}${toPascalCase(child)}`;\n}\n","/**\n * Programmatic codegen API.\n *\n * ```ts\n * import { generateTypes } from 'payload-live-preview/codegen';\n * const { code, diagnostics } = await generateTypes({\n * configPath: 'backend/src/payload.config.ts',\n * outFile: 'frontend/src/payload-types.ts',\n * });\n * ```\n *\n * @module @codegen\n */\n\nimport { mkdir, writeFile } from 'node:fs/promises';\nimport { dirname, isAbsolute, resolve } from 'node:path';\nimport { extractSchema, type ExtractSchemaOptions } from './parser/extract-schema';\nimport { emitTypes, type EmitOptions } from './emit/emit-types';\nimport type { ExtractedSchema } from './parser/types';\n\nexport interface GenerateTypesOptions\n extends Pick<ExtractSchemaOptions, 'configPath' | 'project' | 'tsConfigFilePath'>, EmitOptions {\n /**\n * If set, the generated code is written to this absolute or\n * cwd-relative path. The function still returns the rendered string\n * in `code` so callers can verify before writing.\n */\n readonly outFile?: string;\n /** Working directory used to resolve relative paths. Defaults to `process.cwd()`. */\n readonly cwd?: string;\n}\n\nexport interface GenerateTypesResult {\n readonly code: string;\n readonly diagnostics: readonly string[];\n readonly schema: ExtractedSchema;\n readonly outFile?: string;\n}\n\nexport async function generateTypes(options: GenerateTypesOptions): Promise<GenerateTypesResult> {\n const cwd = options.cwd ?? process.cwd();\n const configPath = isAbsolute(options.configPath)\n ? options.configPath\n : resolve(cwd, options.configPath);\n const schema = extractSchema({\n configPath,\n ...(options.project !== undefined ? { project: options.project } : {}),\n ...(options.tsConfigFilePath !== undefined\n ? { tsConfigFilePath: options.tsConfigFilePath }\n : {}),\n });\n const code = emitTypes(schema, options);\n\n const result: GenerateTypesResult = options.outFile\n ? {\n code,\n diagnostics: schema.diagnostics,\n schema,\n outFile: isAbsolute(options.outFile) ? options.outFile : resolve(cwd, options.outFile),\n }\n : { code, diagnostics: schema.diagnostics, schema };\n\n if (result.outFile) {\n await mkdir(dirname(result.outFile), { recursive: true });\n await writeFile(result.outFile, code, 'utf8');\n }\n\n return result;\n}\n\nexport { extractSchema } from './parser/extract-schema';\nexport { emitTypes } from './emit/emit-types';\nexport type { ExtractedSchema, ExtractedSlug, ExtractedField } from './parser/types';\n"]}