@palantir/pack.document-schema.type-gen 0.9.0 → 0.10.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 (148) hide show
  1. package/build/esm/commands/asset/__tests__/buildPrefixRewriteFetch.test.js +85 -0
  2. package/build/esm/commands/asset/__tests__/buildPrefixRewriteFetch.test.js.map +1 -0
  3. package/build/esm/commands/asset/assetDeployHandler.js +36 -1
  4. package/build/esm/commands/asset/assetDeployHandler.js.map +1 -1
  5. package/build/esm/commands/asset/registerAssetCommands.js +1 -1
  6. package/build/esm/commands/asset/registerAssetCommands.js.map +1 -1
  7. package/build/esm/commands/ir/irGenTypesHandler.js +49 -0
  8. package/build/esm/commands/ir/irGenTypesHandler.js.map +1 -0
  9. package/build/esm/commands/ir/registerIrCommands.js +2 -0
  10. package/build/esm/commands/ir/registerIrCommands.js.map +1 -1
  11. package/build/esm/commands/schema/registerSchemaCommands.js +2 -2
  12. package/build/esm/commands/schema/registerSchemaCommands.js.map +1 -1
  13. package/build/esm/commands/schema/schemaIrHandler.js +56 -0
  14. package/build/esm/commands/schema/schemaIrHandler.js.map +1 -0
  15. package/build/esm/index.js +0 -6
  16. package/build/esm/index.js.map +1 -1
  17. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js +1 -1
  18. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js.map +1 -1
  19. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js +1 -1
  20. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js.map +1 -1
  21. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js +1 -1
  22. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js.map +1 -1
  23. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js +1 -1
  24. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js.map +1 -1
  25. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js +1 -1
  26. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js.map +1 -1
  27. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js +1 -1
  28. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js.map +1 -1
  29. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js +1 -1
  30. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js.map +1 -1
  31. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js +1 -1
  32. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js.map +1 -1
  33. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js +1 -1
  34. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js.map +1 -1
  35. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js +1 -1
  36. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js.map +1 -1
  37. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js +1 -1
  38. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js.map +1 -1
  39. package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js +23 -0
  40. package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js.map +1 -1
  41. package/build/esm/utils/ir/irFieldHelpers.js +383 -0
  42. package/build/esm/utils/ir/irFieldHelpers.js.map +1 -0
  43. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/single-version.js.map +1 -1
  44. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/three-version-chain.js.map +1 -1
  45. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/two-version.js.map +1 -1
  46. package/build/esm/utils/schema/__tests__/convertSchemaToSteps.test.js +13 -0
  47. package/build/esm/utils/schema/__tests__/convertSchemaToSteps.test.js.map +1 -1
  48. package/build/esm/utils/schema/__tests__/fixtures.js +76 -5
  49. package/build/esm/utils/schema/__tests__/fixtures.js.map +1 -1
  50. package/build/esm/utils/schema/__tests__/generateInternalFromSchema.test.js +19 -7
  51. package/build/esm/utils/schema/__tests__/generateInternalFromSchema.test.js.map +1 -1
  52. package/build/esm/utils/schema/__tests__/generateModelMetadataFromSchema.test.js +7 -6
  53. package/build/esm/utils/schema/__tests__/generateModelMetadataFromSchema.test.js.map +1 -1
  54. package/build/esm/utils/schema/__tests__/generateScopeFromSchema.test.js +6 -5
  55. package/build/esm/utils/schema/__tests__/generateScopeFromSchema.test.js.map +1 -1
  56. package/build/esm/utils/schema/__tests__/generateVersionedTypesFromSchema.test.js +19 -10
  57. package/build/esm/utils/schema/__tests__/generateVersionedTypesFromSchema.test.js.map +1 -1
  58. package/build/esm/utils/schema/__tests__/generateVersionedZodFromSchema.test.js +15 -10
  59. package/build/esm/utils/schema/__tests__/generateVersionedZodFromSchema.test.js.map +1 -1
  60. package/build/esm/utils/schema/__tests__/generateVersionsFromSchema.test.js +6 -5
  61. package/build/esm/utils/schema/__tests__/generateVersionsFromSchema.test.js.map +1 -1
  62. package/build/esm/utils/schema/convertSchemaToSteps.js +6 -0
  63. package/build/esm/utils/schema/convertSchemaToSteps.js.map +1 -1
  64. package/build/esm/utils/schema/generateIndexFromSchema.js +15 -13
  65. package/build/esm/utils/schema/generateIndexFromSchema.js.map +1 -1
  66. package/build/esm/utils/schema/generateInternalFromSchema.js +68 -184
  67. package/build/esm/utils/schema/generateInternalFromSchema.js.map +1 -1
  68. package/build/esm/utils/schema/generateModelMetadataFromSchema.js +46 -69
  69. package/build/esm/utils/schema/generateModelMetadataFromSchema.js.map +1 -1
  70. package/build/esm/utils/schema/generateScopeFromSchema.js +29 -33
  71. package/build/esm/utils/schema/generateScopeFromSchema.js.map +1 -1
  72. package/build/esm/utils/schema/generateTypesFromSchema.js +9 -1
  73. package/build/esm/utils/schema/generateTypesFromSchema.js.map +1 -1
  74. package/build/esm/utils/schema/generateVersionedTypesFromSchema.js +61 -155
  75. package/build/esm/utils/schema/generateVersionedTypesFromSchema.js.map +1 -1
  76. package/build/esm/utils/schema/generateVersionedZodFromSchema.js +58 -94
  77. package/build/esm/utils/schema/generateVersionedZodFromSchema.js.map +1 -1
  78. package/build/esm/utils/schema/generateVersionsFromSchema.js +7 -5
  79. package/build/esm/utils/schema/generateVersionsFromSchema.js.map +1 -1
  80. package/build/esm/utils/schema/loadSchemaModule.js +53 -0
  81. package/build/esm/utils/schema/loadSchemaModule.js.map +1 -0
  82. package/build/esm/utils/schema/resolveSchemaChain.js +59 -9
  83. package/build/esm/utils/schema/resolveSchemaChain.js.map +1 -1
  84. package/build/esm/utils/schema/runtimeSchema.js +0 -27
  85. package/build/esm/utils/schema/runtimeSchema.js.map +1 -1
  86. package/build/esm/utils/schema/writeAllSdkFiles.js +111 -0
  87. package/build/esm/utils/schema/writeAllSdkFiles.js.map +1 -0
  88. package/build/esm/utils/steps/__tests__/__snapshots__/types/arrayFields.js.map +1 -1
  89. package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js +1 -1
  90. package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js.map +1 -1
  91. package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js +1 -1
  92. package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js.map +1 -1
  93. package/build/esm/utils/steps/__tests__/__snapshots__/types/refTypes.js.map +1 -1
  94. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleRecord.js.map +1 -1
  95. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js +1 -1
  96. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js.map +1 -1
  97. package/build/esm/utils/steps/__tests__/convertStepsToIr.test.js +93 -1
  98. package/build/esm/utils/steps/__tests__/convertStepsToIr.test.js.map +1 -1
  99. package/build/esm/utils/steps/convertStepsToIr.js +43 -35
  100. package/build/esm/utils/steps/convertStepsToIr.js.map +1 -1
  101. package/build/types/commands/asset/__tests__/buildPrefixRewriteFetch.test.d.ts +2 -0
  102. package/build/types/commands/asset/__tests__/buildPrefixRewriteFetch.test.d.ts.map +1 -0
  103. package/build/types/commands/asset/assetDeployHandler.d.ts +15 -0
  104. package/build/types/commands/asset/assetDeployHandler.d.ts.map +1 -1
  105. package/build/types/commands/asset/registerAssetCommands.d.ts.map +1 -1
  106. package/build/types/commands/ir/irGenTypesHandler.d.ts +8 -0
  107. package/build/types/commands/ir/irGenTypesHandler.d.ts.map +1 -0
  108. package/build/types/commands/ir/registerIrCommands.d.ts.map +1 -1
  109. package/build/types/commands/schema/registerSchemaCommands.d.ts.map +1 -1
  110. package/build/types/commands/schema/schemaIrHandler.d.ts +19 -0
  111. package/build/types/commands/schema/schemaIrHandler.d.ts.map +1 -0
  112. package/build/types/index.d.ts +1 -6
  113. package/build/types/index.d.ts.map +1 -1
  114. package/build/types/utils/ir/irFieldHelpers.d.ts +36 -0
  115. package/build/types/utils/ir/irFieldHelpers.d.ts.map +1 -0
  116. package/build/types/utils/schema/__tests__/fixtures.d.ts +10 -1
  117. package/build/types/utils/schema/__tests__/fixtures.d.ts.map +1 -1
  118. package/build/types/utils/schema/convertSchemaToSteps.d.ts.map +1 -1
  119. package/build/types/utils/schema/generateIndexFromSchema.d.ts +2 -2
  120. package/build/types/utils/schema/generateIndexFromSchema.d.ts.map +1 -1
  121. package/build/types/utils/schema/generateInternalFromSchema.d.ts +3 -6
  122. package/build/types/utils/schema/generateInternalFromSchema.d.ts.map +1 -1
  123. package/build/types/utils/schema/generateModelMetadataFromSchema.d.ts +3 -8
  124. package/build/types/utils/schema/generateModelMetadataFromSchema.d.ts.map +1 -1
  125. package/build/types/utils/schema/generateScopeFromSchema.d.ts +2 -2
  126. package/build/types/utils/schema/generateScopeFromSchema.d.ts.map +1 -1
  127. package/build/types/utils/schema/generateTypesFromSchema.d.ts.map +1 -1
  128. package/build/types/utils/schema/generateVersionedTypesFromSchema.d.ts +4 -7
  129. package/build/types/utils/schema/generateVersionedTypesFromSchema.d.ts.map +1 -1
  130. package/build/types/utils/schema/generateVersionedZodFromSchema.d.ts +3 -7
  131. package/build/types/utils/schema/generateVersionedZodFromSchema.d.ts.map +1 -1
  132. package/build/types/utils/schema/generateVersionsFromSchema.d.ts +3 -3
  133. package/build/types/utils/schema/generateVersionsFromSchema.d.ts.map +1 -1
  134. package/build/types/utils/schema/loadSchemaModule.d.ts +14 -0
  135. package/build/types/utils/schema/loadSchemaModule.d.ts.map +1 -0
  136. package/build/types/utils/schema/resolveSchemaChain.d.ts +29 -8
  137. package/build/types/utils/schema/resolveSchemaChain.d.ts.map +1 -1
  138. package/build/types/utils/schema/runtimeSchema.d.ts +0 -32
  139. package/build/types/utils/schema/runtimeSchema.d.ts.map +1 -1
  140. package/build/types/utils/schema/writeAllSdkFiles.d.ts +8 -0
  141. package/build/types/utils/schema/writeAllSdkFiles.d.ts.map +1 -0
  142. package/build/types/utils/steps/convertStepsToIr.d.ts +3 -3
  143. package/build/types/utils/steps/convertStepsToIr.d.ts.map +1 -1
  144. package/package.json +3 -3
  145. package/build/esm/commands/schema/schemaGenTypesHandler.js +0 -147
  146. package/build/esm/commands/schema/schemaGenTypesHandler.js.map +0 -1
  147. package/build/types/commands/schema/schemaGenTypesHandler.d.ts +0 -8
  148. package/build/types/commands/schema/schemaGenTypesHandler.d.ts.map +0 -1
@@ -16,110 +16,14 @@
16
16
 
17
17
  import { formatVariantName } from "../formatVariantName.js";
18
18
  import { GENERATED_FILE_HEADER } from "../generatedFileHeader.js";
19
- import { resolveSchemaChain } from "./resolveSchemaChain.js";
20
- import { findRecordExportName, isRecordSchema, isUnionSchema, TypeKind, typesFilePath, versionedTypeName, versionedWriteTypeName } from "./runtimeSchema.js";
21
- function detectUsedRefTypes(schema) {
22
- const refTypes = new Set();
23
- function scanField(field) {
24
- switch (field.type) {
25
- case TypeKind.ARRAY:
26
- if (field.items) scanField(field.items);
27
- break;
28
- case TypeKind.DOC_REF:
29
- refTypes.add("DocumentRef");
30
- break;
31
- case TypeKind.MEDIA_REF:
32
- refTypes.add("MediaRef");
33
- break;
34
- case TypeKind.OBJECT_REF:
35
- refTypes.add("ObjectRef");
36
- break;
37
- case TypeKind.OPTIONAL:
38
- if (field.item) scanField(field.item);
39
- break;
40
- case TypeKind.USER_REF:
41
- refTypes.add("UserRef");
42
- break;
43
- }
44
- }
45
- for (const item of Object.values(schema)) {
46
- if (isRecordSchema(item)) {
47
- for (const f of Object.values(item.fields)) {
48
- scanField(f);
49
- }
50
- } else if (isUnionSchema(item)) {
51
- for (const v of Object.values(item.variants)) {
52
- scanField(v);
53
- }
54
- }
55
- }
56
- return refTypes;
57
- }
58
- function collectReferencedTypes(fieldType, schema, version, out) {
59
- switch (fieldType.type) {
60
- case TypeKind.ARRAY:
61
- if (fieldType.items) collectReferencedTypes(fieldType.items, schema, version, out);
62
- break;
63
- case TypeKind.OPTIONAL:
64
- if (fieldType.item) collectReferencedTypes(fieldType.item, schema, version, out);
65
- break;
66
- case TypeKind.REF:
67
- {
68
- const name = fieldType.refType === "record" ? findRecordExportName(fieldType.name, schema) ?? fieldType.name : fieldType.name;
69
- if (name == null) {
70
- throw new Error(`Could not find name for ref: ${fieldType.type}:${fieldType.refType}`);
71
- }
72
- out.add(versionedTypeName(name, version));
73
- break;
74
- }
75
- }
76
- }
77
- function convertTypeToTypeScript(fieldType, schema, version) {
78
- switch (fieldType.type) {
79
- case TypeKind.ANY:
80
- return "any";
81
- case TypeKind.ARRAY:
82
- if (fieldType.items == null) {
83
- throw new Error("Array field is missing items type");
84
- }
85
- return `readonly ${convertTypeToTypeScript(fieldType.items, schema, version)}[]`;
86
- case TypeKind.BOOLEAN:
87
- return "boolean";
88
- case TypeKind.DOC_REF:
89
- return "DocumentRef";
90
- case TypeKind.DOUBLE:
91
- return "number";
92
- case TypeKind.MEDIA_REF:
93
- return "MediaRef";
94
- case TypeKind.OBJECT_REF:
95
- return "ObjectRef";
96
- case TypeKind.OPTIONAL:
97
- if (fieldType.item == null) {
98
- throw new Error("Optional field is missing inner type");
99
- }
100
- return convertTypeToTypeScript(fieldType.item, schema, version);
101
- case TypeKind.REF:
102
- {
103
- const name = fieldType.refType === "record" && schema != null ? findRecordExportName(fieldType.name, schema) ?? fieldType.name : fieldType.name;
104
- if (name == null) {
105
- throw new Error(`Could not find name for ref: ${fieldType.type}:${fieldType.refType}`);
106
- }
107
- return version != null ? versionedTypeName(name, version) : name;
108
- }
109
- case TypeKind.STRING:
110
- return "string";
111
- case TypeKind.USER_REF:
112
- return "UserRef";
113
- default:
114
- throw new Error(`Unknown schema field type: ${fieldType.type}`);
115
- }
116
- }
117
-
19
+ import { collectReferencedTypes, convertFieldTypeToTypeScript, detectUsedRefTypes } from "../ir/irFieldHelpers.js";
20
+ import { resolveMinVersion } from "./resolveSchemaChain.js";
21
+ import { typesFilePath, versionedTypeName, versionedWriteTypeName } from "./runtimeSchema.js";
118
22
  /**
119
23
  * Generate read types for a specific schema version.
120
24
  */
121
- function generateReadTypesForVersion(version, schema) {
122
- const usedRefTypes = detectUsedRefTypes(schema);
25
+ function generateReadTypesForVersion(version, ir) {
26
+ const usedRefTypes = detectUsedRefTypes(ir);
123
27
  let output = GENERATED_FILE_HEADER;
124
28
  if (usedRefTypes.size > 0) {
125
29
  const refTypesList = Array.from(usedRefTypes).sort().join(", ");
@@ -128,42 +32,46 @@ function generateReadTypesForVersion(version, schema) {
128
32
  output += "\n";
129
33
 
130
34
  // Generate record interfaces
131
- for (const [exportName, item] of Object.entries(schema)) {
132
- if (!isRecordSchema(item)) continue;
133
- const typeName = versionedTypeName(exportName, version);
134
- if (item.docs) {
135
- output += `/**\n * ${item.docs}\n */\n`;
35
+ for (const [modelKey, modelDef] of Object.entries(ir.models)) {
36
+ if (modelDef.type !== "record") continue;
37
+ const record = modelDef.record;
38
+ const typeName = versionedTypeName(modelKey, version);
39
+ if (record.description) {
40
+ output += `/**\n * ${record.description}\n */\n`;
136
41
  }
137
42
  output += `export interface ${typeName} {\n`;
138
- for (const [fieldName, fieldType] of Object.entries(item.fields)) {
139
- const tsType = convertTypeToTypeScript(fieldType, schema, version);
140
- const optional = fieldType.type === TypeKind.OPTIONAL ? "?" : "";
141
- output += ` readonly ${fieldName}${optional}: ${tsType};\n`;
43
+ for (const field of record.fields) {
44
+ const tsType = convertFieldTypeToTypeScript(field.fieldType, version);
45
+ const optional = field.isOptional ? "?" : "";
46
+ output += ` readonly ${field.key}${optional}: ${tsType};\n`;
142
47
  }
143
48
  output += "}\n\n";
144
49
  }
145
50
 
146
51
  // Generate union types
147
- const unionEntries = Object.entries(schema).filter(([_, item]) => isUnionSchema(item));
148
- for (const [exportName, item] of unionEntries) {
149
- if (!isUnionSchema(item)) continue;
150
- const typeName = versionedTypeName(exportName, version);
151
- const discriminantField = item.discriminant;
52
+ for (const [modelKey, modelDef] of Object.entries(ir.models)) {
53
+ if (modelDef.type !== "union") continue;
54
+ const union = modelDef.union;
55
+ const typeName = versionedTypeName(modelKey, version);
56
+ const discriminantField = union.discriminant;
152
57
  const variantInterfaces = [];
153
- for (const [variantName, variantType] of Object.entries(item.variants)) {
58
+ for (const [variantName, variantModelKey] of Object.entries(union.variants)) {
154
59
  const interfaceName = `${typeName}${formatVariantName(variantName)}`;
155
60
  variantInterfaces.push({
156
61
  name: interfaceName,
157
62
  discriminatorValue: variantName
158
63
  });
159
- if (variantType.type === TypeKind.REF && variantType.refType === "record") {
160
- const recordExport = findRecordExportName(variantType.name, schema);
161
- const recordTypeName = recordExport ? versionedTypeName(recordExport, version) : variantType.name;
64
+
65
+ // Look up the variant's model to check if it's a record
66
+ const variantModel = ir.models[variantModelKey];
67
+ if (variantModel != null && variantModel.type === "record") {
68
+ const recordTypeName = versionedTypeName(variantModelKey, version);
162
69
  output += `export interface ${interfaceName} extends ${recordTypeName} {\n`;
163
70
  output += ` readonly ${discriminantField}: "${variantName}";\n`;
164
71
  output += "}\n\n";
165
72
  } else {
166
- const tsType = convertTypeToTypeScript(variantType, schema, version);
73
+ // Non-record variant (e.g. another union): emit a value field referencing the type
74
+ const tsType = versionedTypeName(variantModelKey, version);
167
75
  output += `export interface ${interfaceName} {\n`;
168
76
  output += ` readonly ${discriminantField}: "${variantName}";\n`;
169
77
  output += ` readonly value: ${tsType};\n`;
@@ -184,15 +92,15 @@ function generateReadTypesForVersion(version, schema) {
184
92
  * Generate write types for a specific schema version.
185
93
  * All fields are optional in write types.
186
94
  */
187
- function generateWriteTypesForVersion(version, schema) {
188
- const usedRefTypes = detectUsedRefTypes(schema);
95
+ function generateWriteTypesForVersion(version, ir) {
96
+ const usedRefTypes = detectUsedRefTypes(ir);
189
97
 
190
98
  // Collect referenced schema-local types (refs to other records/unions)
191
99
  const referencedLocalTypes = new Set();
192
- for (const item of Object.values(schema)) {
193
- if (!isRecordSchema(item)) continue;
194
- for (const fieldType of Object.values(item.fields)) {
195
- collectReferencedTypes(fieldType, schema, version, referencedLocalTypes);
100
+ for (const modelDef of Object.values(ir.models)) {
101
+ if (modelDef.type !== "record") continue;
102
+ for (const field of modelDef.record.fields) {
103
+ collectReferencedTypes(field.fieldType, version, referencedLocalTypes);
196
104
  }
197
105
  }
198
106
  let output = GENERATED_FILE_HEADER;
@@ -207,14 +115,14 @@ function generateWriteTypesForVersion(version, schema) {
207
115
  output += "\n";
208
116
 
209
117
  // Generate record write types
210
- for (const [exportName, item] of Object.entries(schema)) {
211
- if (!isRecordSchema(item)) continue;
212
- const typeName = versionedWriteTypeName(exportName, version);
118
+ for (const [modelKey, modelDef] of Object.entries(ir.models)) {
119
+ if (modelDef.type !== "record") continue;
120
+ const typeName = versionedWriteTypeName(modelKey, version);
213
121
  output += `export type ${typeName} = {\n`;
214
- for (const [fieldName, fieldType] of Object.entries(item.fields)) {
122
+ for (const field of modelDef.record.fields) {
215
123
  // All fields are optional in write types
216
- const tsType = convertTypeToTypeScript(fieldType, schema, version);
217
- output += ` readonly ${fieldName}?: ${tsType};\n`;
124
+ const tsType = convertFieldTypeToTypeScript(field.fieldType, version);
125
+ output += ` readonly ${field.key}?: ${tsType};\n`;
218
126
  }
219
127
  output += "};\n\n";
220
128
  }
@@ -225,23 +133,23 @@ function generateWriteTypesForVersion(version, schema) {
225
133
  * Generate the types.ts re-export file that maps unversioned names to the latest version.
226
134
  */
227
135
  function generateTypesReExport({
228
- schema,
136
+ ir,
229
137
  version
230
138
  }) {
231
139
  const reExports = [];
232
- for (const [exportName, item] of Object.entries(schema)) {
233
- if (isRecordSchema(item)) {
234
- const versioned = versionedTypeName(exportName, version);
235
- reExports.push(`export type { ${versioned} as ${exportName} } from "${typesFilePath(version)}";`);
236
- } else if (isUnionSchema(item)) {
237
- const versioned = versionedTypeName(exportName, version);
238
- reExports.push(`export type { ${versioned} as ${exportName} } from "${typesFilePath(version)}";`);
140
+ for (const [modelKey, modelDef] of Object.entries(ir.models)) {
141
+ if (modelDef.type === "record") {
142
+ const versioned = versionedTypeName(modelKey, version);
143
+ reExports.push(`export type { ${versioned} as ${modelKey} } from "${typesFilePath(version)}";`);
144
+ } else if (modelDef.type === "union") {
145
+ const versioned = versionedTypeName(modelKey, version);
146
+ reExports.push(`export type { ${versioned} as ${modelKey} } from "${typesFilePath(version)}";`);
239
147
 
240
148
  // Also re-export union variant types
241
- for (const variantName of Object.keys(item.variants)) {
149
+ for (const variantName of Object.keys(modelDef.union.variants)) {
242
150
  const formattedVariant = formatVariantName(variantName);
243
- const versionedVariant = `${versionedTypeName(exportName, version)}${formattedVariant}`;
244
- reExports.push(`export type { ${versionedVariant} as ${`${exportName}${formattedVariant}`} } from "${typesFilePath(version)}";`);
151
+ const versionedVariant = `${versionedTypeName(modelKey, version)}${formattedVariant}`;
152
+ reExports.push(`export type { ${versionedVariant} as ${`${modelKey}${formattedVariant}`} } from "${typesFilePath(version)}";`);
245
153
  }
246
154
  }
247
155
  }
@@ -249,27 +157,25 @@ function generateTypesReExport({
249
157
  }
250
158
 
251
159
  /**
252
- * Generate per-version public types and write types from a schema with version chain.
253
- *
254
- * @param schema - The schema, initial or versioned
255
- * @param minSupportedVersion - Minimum version to generate types for (defaults to latest)
256
- * @returns Object containing generated code for each output file
160
+ * Generate per-version public types and write types from an already-resolved
161
+ * versioned IR chain.
257
162
  */
258
- export function generateVersionedTypesFromSchema(schema, minSupportedVersion) {
163
+ export function generateVersionedTypesFromChain(resolved, minSupportedVersion) {
164
+ const {
165
+ chain
166
+ } = resolved;
259
167
  const {
260
- chain,
261
- latestVersion,
262
168
  minVersion
263
- } = resolveSchemaChain(schema, minSupportedVersion);
169
+ } = resolveMinVersion(chain, minSupportedVersion);
264
170
  const readTypes = new Map();
265
171
  const writeTypes = new Map();
266
172
  for (const {
267
173
  version,
268
- schema: versionSchema
174
+ ir
269
175
  } of chain) {
270
176
  if (version < minVersion) continue;
271
- readTypes.set(version, generateReadTypesForVersion(version, versionSchema));
272
- writeTypes.set(version, generateWriteTypesForVersion(version, versionSchema));
177
+ readTypes.set(version, generateReadTypesForVersion(version, ir));
178
+ writeTypes.set(version, generateWriteTypesForVersion(version, ir));
273
179
  }
274
180
  const typesReExport = generateTypesReExport(chain[chain.length - 1]);
275
181
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"generateVersionedTypesFromSchema.js","names":["formatVariantName","GENERATED_FILE_HEADER","resolveSchemaChain","findRecordExportName","isRecordSchema","isUnionSchema","TypeKind","typesFilePath","versionedTypeName","versionedWriteTypeName","detectUsedRefTypes","schema","refTypes","Set","scanField","field","type","ARRAY","items","DOC_REF","add","MEDIA_REF","OBJECT_REF","OPTIONAL","item","USER_REF","Object","values","f","fields","v","variants","collectReferencedTypes","fieldType","version","out","REF","name","refType","Error","convertTypeToTypeScript","ANY","BOOLEAN","DOUBLE","STRING","generateReadTypesForVersion","usedRefTypes","output","size","refTypesList","Array","from","sort","join","exportName","entries","typeName","docs","fieldName","tsType","optional","unionEntries","filter","_","discriminantField","discriminant","variantInterfaces","variantName","variantType","interfaceName","push","discriminatorValue","recordExport","recordTypeName","map","variant","generateWriteTypesForVersion","referencedLocalTypes","localTypesList","generateTypesReExport","reExports","versioned","keys","formattedVariant","versionedVariant","generateVersionedTypesFromSchema","minSupportedVersion","chain","latestVersion","minVersion","readTypes","Map","writeTypes","versionSchema","set","typesReExport","length"],"sources":["generateVersionedTypesFromSchema.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { SchemaDefinition } from \"@palantir/pack.schema\";\nimport { formatVariantName } from \"../formatVariantName.js\";\nimport { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\nimport type { VersionedSchemaEntry } from \"./resolveSchemaChain.js\";\nimport { resolveSchemaChain } from \"./resolveSchemaChain.js\";\nimport type { RuntimeSchema, SchemaField } from \"./runtimeSchema.js\";\nimport {\n findRecordExportName,\n isRecordSchema,\n isUnionSchema,\n TypeKind,\n typesFilePath,\n versionedTypeName,\n versionedWriteTypeName,\n} from \"./runtimeSchema.js\";\n\nexport interface VersionedTypesOutput {\n /** types_vN.ts files keyed by version number */\n readTypes: Map<number, string>;\n /** writeTypes_vN.ts files keyed by version number */\n writeTypes: Map<number, string>;\n /** types.ts re-export of latest version types under unversioned names */\n typesReExport: string;\n}\n\nfunction detectUsedRefTypes(schema: RuntimeSchema): Set<string> {\n const refTypes = new Set<string>();\n\n function scanField(field: SchemaField): void {\n switch (field.type) {\n case TypeKind.ARRAY:\n if (field.items) scanField(field.items);\n break;\n case TypeKind.DOC_REF:\n refTypes.add(\"DocumentRef\");\n break;\n case TypeKind.MEDIA_REF:\n refTypes.add(\"MediaRef\");\n break;\n case TypeKind.OBJECT_REF:\n refTypes.add(\"ObjectRef\");\n break;\n case TypeKind.OPTIONAL:\n if (field.item) scanField(field.item);\n break;\n case TypeKind.USER_REF:\n refTypes.add(\"UserRef\");\n break;\n }\n }\n\n for (const item of Object.values(schema)) {\n if (isRecordSchema(item)) {\n for (const f of Object.values(item.fields)) {\n scanField(f);\n }\n } else if (isUnionSchema(item)) {\n for (const v of Object.values(item.variants)) {\n scanField(v);\n }\n }\n }\n\n return refTypes;\n}\n\nfunction collectReferencedTypes(\n fieldType: SchemaField,\n schema: RuntimeSchema,\n version: number,\n out: Set<string>,\n): void {\n switch (fieldType.type) {\n case TypeKind.ARRAY:\n if (fieldType.items) collectReferencedTypes(fieldType.items, schema, version, out);\n break;\n case TypeKind.OPTIONAL:\n if (fieldType.item) collectReferencedTypes(fieldType.item, schema, version, out);\n break;\n case TypeKind.REF: {\n const name = fieldType.refType === \"record\"\n ? findRecordExportName(fieldType.name!, schema) ?? fieldType.name\n : fieldType.name;\n if (name == null) {\n throw new Error(`Could not find name for ref: ${fieldType.type}:${fieldType.refType}`);\n }\n out.add(versionedTypeName(name, version));\n break;\n }\n }\n}\n\nfunction convertTypeToTypeScript(\n fieldType: SchemaField,\n schema?: RuntimeSchema,\n version?: number,\n): string {\n switch (fieldType.type) {\n case TypeKind.ANY:\n return \"any\";\n case TypeKind.ARRAY:\n if (fieldType.items == null) {\n throw new Error(\"Array field is missing items type\");\n }\n return `readonly ${convertTypeToTypeScript(fieldType.items, schema, version)}[]`;\n case TypeKind.BOOLEAN:\n return \"boolean\";\n case TypeKind.DOC_REF:\n return \"DocumentRef\";\n case TypeKind.DOUBLE:\n return \"number\";\n case TypeKind.MEDIA_REF:\n return \"MediaRef\";\n case TypeKind.OBJECT_REF:\n return \"ObjectRef\";\n case TypeKind.OPTIONAL:\n if (fieldType.item == null) {\n throw new Error(\"Optional field is missing inner type\");\n }\n return convertTypeToTypeScript(fieldType.item, schema, version);\n case TypeKind.REF: {\n const name = fieldType.refType === \"record\" && schema != null\n ? findRecordExportName(fieldType.name!, schema) ?? fieldType.name\n : fieldType.name;\n if (name == null) {\n throw new Error(`Could not find name for ref: ${fieldType.type}:${fieldType.refType}`);\n }\n return version != null ? versionedTypeName(name, version) : name;\n }\n case TypeKind.STRING:\n return \"string\";\n case TypeKind.USER_REF:\n return \"UserRef\";\n default:\n throw new Error(`Unknown schema field type: ${fieldType.type}`);\n }\n}\n\n/**\n * Generate read types for a specific schema version.\n */\nfunction generateReadTypesForVersion(\n version: number,\n schema: RuntimeSchema,\n): string {\n const usedRefTypes = detectUsedRefTypes(schema);\n\n let output = GENERATED_FILE_HEADER;\n\n if (usedRefTypes.size > 0) {\n const refTypesList = Array.from(usedRefTypes).sort().join(\", \");\n output +=\n `import type { ${refTypesList} } from \"@palantir/pack.document-schema.model-types\";\\n`;\n }\n\n output += \"\\n\";\n\n // Generate record interfaces\n for (const [exportName, item] of Object.entries(schema)) {\n if (!isRecordSchema(item)) continue;\n\n const typeName = versionedTypeName(exportName, version);\n\n if (item.docs) {\n output += `/**\\n * ${item.docs}\\n */\\n`;\n }\n\n output += `export interface ${typeName} {\\n`;\n\n for (const [fieldName, fieldType] of Object.entries(item.fields)) {\n const tsType = convertTypeToTypeScript(fieldType, schema, version);\n const optional = fieldType.type === TypeKind.OPTIONAL ? \"?\" : \"\";\n output += ` readonly ${fieldName}${optional}: ${tsType};\\n`;\n }\n\n output += \"}\\n\\n\";\n }\n\n // Generate union types\n const unionEntries = Object.entries(schema).filter(\n ([_, item]) => isUnionSchema(item),\n );\n\n for (const [exportName, item] of unionEntries) {\n if (!isUnionSchema(item)) continue;\n\n const typeName = versionedTypeName(exportName, version);\n const discriminantField = item.discriminant;\n const variantInterfaces: Array<{ name: string; discriminatorValue: string }> = [];\n\n for (const [variantName, variantType] of Object.entries(item.variants)) {\n const interfaceName = `${typeName}${formatVariantName(variantName)}`;\n variantInterfaces.push({ name: interfaceName, discriminatorValue: variantName });\n\n if (variantType.type === TypeKind.REF && variantType.refType === \"record\") {\n const recordExport = findRecordExportName(variantType.name!, schema);\n const recordTypeName = recordExport\n ? versionedTypeName(recordExport, version)\n : variantType.name!;\n output += `export interface ${interfaceName} extends ${recordTypeName} {\\n`;\n output += ` readonly ${discriminantField}: \"${variantName}\";\\n`;\n output += \"}\\n\\n\";\n } else {\n const tsType = convertTypeToTypeScript(variantType, schema, version);\n output += `export interface ${interfaceName} {\\n`;\n output += ` readonly ${discriminantField}: \"${variantName}\";\\n`;\n output += ` readonly value: ${tsType};\\n`;\n output += \"}\\n\\n\";\n }\n }\n\n output += `export type ${typeName} = ${variantInterfaces.map(v => v.name).join(\" | \")};\\n\\n`;\n\n for (const variant of variantInterfaces) {\n output +=\n `export function is${variant.name}(value: ${typeName}): value is ${variant.name} {\\n`;\n output += ` return value.${discriminantField} === \"${variant.discriminatorValue}\";\\n`;\n output += \"}\\n\\n\";\n }\n }\n\n return output;\n}\n\n/**\n * Generate write types for a specific schema version.\n * All fields are optional in write types.\n */\nfunction generateWriteTypesForVersion(\n version: number,\n schema: RuntimeSchema,\n): string {\n const usedRefTypes = detectUsedRefTypes(schema);\n\n // Collect referenced schema-local types (refs to other records/unions)\n const referencedLocalTypes = new Set<string>();\n for (const item of Object.values(schema)) {\n if (!isRecordSchema(item)) continue;\n for (const fieldType of Object.values(item.fields)) {\n collectReferencedTypes(fieldType, schema, version, referencedLocalTypes);\n }\n }\n\n let output = GENERATED_FILE_HEADER;\n\n if (usedRefTypes.size > 0) {\n const refTypesList = Array.from(usedRefTypes).sort().join(\", \");\n output +=\n `import type { ${refTypesList} } from \"@palantir/pack.document-schema.model-types\";\\n`;\n }\n\n if (referencedLocalTypes.size > 0) {\n const localTypesList = Array.from(referencedLocalTypes).sort().join(\", \");\n output += `import type { ${localTypesList} } from \"${typesFilePath(version)}\";\\n`;\n }\n\n output += \"\\n\";\n\n // Generate record write types\n for (const [exportName, item] of Object.entries(schema)) {\n if (!isRecordSchema(item)) continue;\n\n const typeName = versionedWriteTypeName(exportName, version);\n\n output += `export type ${typeName} = {\\n`;\n\n for (const [fieldName, fieldType] of Object.entries(item.fields)) {\n // All fields are optional in write types\n const tsType = convertTypeToTypeScript(fieldType, schema, version);\n output += ` readonly ${fieldName}?: ${tsType};\\n`;\n }\n\n output += \"};\\n\\n\";\n }\n\n return output;\n}\n\n/**\n * Generate the types.ts re-export file that maps unversioned names to the latest version.\n */\nfunction generateTypesReExport({ schema, version }: VersionedSchemaEntry): string {\n const reExports: string[] = [];\n for (const [exportName, item] of Object.entries(schema)) {\n if (isRecordSchema(item)) {\n const versioned = versionedTypeName(exportName, version);\n reExports.push(\n `export type { ${versioned} as ${exportName} } from \"${typesFilePath(version)}\";`,\n );\n } else if (isUnionSchema(item)) {\n const versioned = versionedTypeName(exportName, version);\n reExports.push(\n `export type { ${versioned} as ${exportName} } from \"${typesFilePath(version)}\";`,\n );\n\n // Also re-export union variant types\n for (const variantName of Object.keys(item.variants)) {\n const formattedVariant = formatVariantName(variantName);\n const versionedVariant = `${versionedTypeName(exportName, version)}${formattedVariant}`;\n const unversionedVariant = `${exportName}${formattedVariant}`;\n reExports.push(\n `export type { ${versionedVariant} as ${unversionedVariant} } from \"${\n typesFilePath(version)\n }\";`,\n );\n }\n }\n }\n\n return GENERATED_FILE_HEADER + reExports.join(\"\\n\") + \"\\n\";\n}\n\n/**\n * Generate per-version public types and write types from a schema with version chain.\n *\n * @param schema - The schema, initial or versioned\n * @param minSupportedVersion - Minimum version to generate types for (defaults to latest)\n * @returns Object containing generated code for each output file\n */\nexport function generateVersionedTypesFromSchema(\n schema: SchemaDefinition,\n minSupportedVersion?: number,\n): VersionedTypesOutput {\n const { chain, latestVersion, minVersion } = resolveSchemaChain(schema, minSupportedVersion);\n\n const readTypes = new Map<number, string>();\n const writeTypes = new Map<number, string>();\n\n for (const { version, schema: versionSchema } of chain) {\n if (version < minVersion) continue;\n\n readTypes.set(version, generateReadTypesForVersion(version, versionSchema));\n writeTypes.set(version, generateWriteTypesForVersion(version, versionSchema));\n }\n\n const typesReExport = generateTypesReExport(chain[chain.length - 1]!);\n\n return { readTypes, writeTypes, typesReExport };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateVersionedTypesFromSchema.js","names":["formatVariantName","GENERATED_FILE_HEADER","collectReferencedTypes","convertFieldTypeToTypeScript","detectUsedRefTypes","resolveMinVersion","typesFilePath","versionedTypeName","versionedWriteTypeName","generateReadTypesForVersion","version","ir","usedRefTypes","output","size","refTypesList","Array","from","sort","join","modelKey","modelDef","Object","entries","models","type","record","typeName","description","field","fields","tsType","fieldType","optional","isOptional","key","union","discriminantField","discriminant","variantInterfaces","variantName","variantModelKey","variants","interfaceName","push","name","discriminatorValue","variantModel","recordTypeName","map","v","variant","generateWriteTypesForVersion","referencedLocalTypes","Set","values","localTypesList","generateTypesReExport","reExports","versioned","keys","formattedVariant","versionedVariant","generateVersionedTypesFromChain","resolved","minSupportedVersion","chain","minVersion","readTypes","Map","writeTypes","set","typesReExport","length"],"sources":["generateVersionedTypesFromSchema.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { IRealTimeDocumentSchema } from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { formatVariantName } from \"../formatVariantName.js\";\nimport { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\nimport {\n collectReferencedTypes,\n convertFieldTypeToTypeScript,\n detectUsedRefTypes,\n} from \"../ir/irFieldHelpers.js\";\nimport type { ResolvedIrChain, VersionedIrEntry } from \"./resolveSchemaChain.js\";\nimport { resolveMinVersion } from \"./resolveSchemaChain.js\";\nimport { typesFilePath, versionedTypeName, versionedWriteTypeName } from \"./runtimeSchema.js\";\n\nexport interface VersionedTypesOutput {\n /** types_vN.ts files keyed by version number */\n readTypes: Map<number, string>;\n /** writeTypes_vN.ts files keyed by version number */\n writeTypes: Map<number, string>;\n /** types.ts re-export of latest version types under unversioned names */\n typesReExport: string;\n}\n\n/**\n * Generate read types for a specific schema version.\n */\nfunction generateReadTypesForVersion(\n version: number,\n ir: IRealTimeDocumentSchema,\n): string {\n const usedRefTypes = detectUsedRefTypes(ir);\n\n let output = GENERATED_FILE_HEADER;\n\n if (usedRefTypes.size > 0) {\n const refTypesList = Array.from(usedRefTypes).sort().join(\", \");\n output +=\n `import type { ${refTypesList} } from \"@palantir/pack.document-schema.model-types\";\\n`;\n }\n\n output += \"\\n\";\n\n // Generate record interfaces\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"record\") continue;\n\n const record = modelDef.record;\n const typeName = versionedTypeName(modelKey, version);\n\n if (record.description) {\n output += `/**\\n * ${record.description}\\n */\\n`;\n }\n\n output += `export interface ${typeName} {\\n`;\n\n for (const field of record.fields) {\n const tsType = convertFieldTypeToTypeScript(field.fieldType, version);\n const optional = field.isOptional ? \"?\" : \"\";\n output += ` readonly ${field.key}${optional}: ${tsType};\\n`;\n }\n\n output += \"}\\n\\n\";\n }\n\n // Generate union types\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"union\") continue;\n\n const union = modelDef.union;\n const typeName = versionedTypeName(modelKey, version);\n const discriminantField = union.discriminant;\n const variantInterfaces: Array<{ name: string; discriminatorValue: string }> = [];\n\n for (const [variantName, variantModelKey] of Object.entries(union.variants)) {\n const interfaceName = `${typeName}${formatVariantName(variantName)}`;\n variantInterfaces.push({ name: interfaceName, discriminatorValue: variantName });\n\n // Look up the variant's model to check if it's a record\n const variantModel = ir.models[variantModelKey];\n if (variantModel != null && variantModel.type === \"record\") {\n const recordTypeName = versionedTypeName(variantModelKey, version);\n output += `export interface ${interfaceName} extends ${recordTypeName} {\\n`;\n output += ` readonly ${discriminantField}: \"${variantName}\";\\n`;\n output += \"}\\n\\n\";\n } else {\n // Non-record variant (e.g. another union): emit a value field referencing the type\n const tsType = versionedTypeName(variantModelKey, version);\n output += `export interface ${interfaceName} {\\n`;\n output += ` readonly ${discriminantField}: \"${variantName}\";\\n`;\n output += ` readonly value: ${tsType};\\n`;\n output += \"}\\n\\n\";\n }\n }\n\n output += `export type ${typeName} = ${variantInterfaces.map(v => v.name).join(\" | \")};\\n\\n`;\n\n for (const variant of variantInterfaces) {\n output +=\n `export function is${variant.name}(value: ${typeName}): value is ${variant.name} {\\n`;\n output += ` return value.${discriminantField} === \"${variant.discriminatorValue}\";\\n`;\n output += \"}\\n\\n\";\n }\n }\n\n return output;\n}\n\n/**\n * Generate write types for a specific schema version.\n * All fields are optional in write types.\n */\nfunction generateWriteTypesForVersion(\n version: number,\n ir: IRealTimeDocumentSchema,\n): string {\n const usedRefTypes = detectUsedRefTypes(ir);\n\n // Collect referenced schema-local types (refs to other records/unions)\n const referencedLocalTypes = new Set<string>();\n for (const modelDef of Object.values(ir.models)) {\n if (modelDef.type !== \"record\") continue;\n for (const field of modelDef.record.fields) {\n collectReferencedTypes(field.fieldType, version, referencedLocalTypes);\n }\n }\n\n let output = GENERATED_FILE_HEADER;\n\n if (usedRefTypes.size > 0) {\n const refTypesList = Array.from(usedRefTypes).sort().join(\", \");\n output +=\n `import type { ${refTypesList} } from \"@palantir/pack.document-schema.model-types\";\\n`;\n }\n\n if (referencedLocalTypes.size > 0) {\n const localTypesList = Array.from(referencedLocalTypes).sort().join(\", \");\n output += `import type { ${localTypesList} } from \"${typesFilePath(version)}\";\\n`;\n }\n\n output += \"\\n\";\n\n // Generate record write types\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"record\") continue;\n\n const typeName = versionedWriteTypeName(modelKey, version);\n\n output += `export type ${typeName} = {\\n`;\n\n for (const field of modelDef.record.fields) {\n // All fields are optional in write types\n const tsType = convertFieldTypeToTypeScript(field.fieldType, version);\n output += ` readonly ${field.key}?: ${tsType};\\n`;\n }\n\n output += \"};\\n\\n\";\n }\n\n return output;\n}\n\n/**\n * Generate the types.ts re-export file that maps unversioned names to the latest version.\n */\nfunction generateTypesReExport({ ir, version }: VersionedIrEntry): string {\n const reExports: string[] = [];\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n const versioned = versionedTypeName(modelKey, version);\n reExports.push(\n `export type { ${versioned} as ${modelKey} } from \"${typesFilePath(version)}\";`,\n );\n } else if (modelDef.type === \"union\") {\n const versioned = versionedTypeName(modelKey, version);\n reExports.push(\n `export type { ${versioned} as ${modelKey} } from \"${typesFilePath(version)}\";`,\n );\n\n // Also re-export union variant types\n for (const variantName of Object.keys(modelDef.union.variants)) {\n const formattedVariant = formatVariantName(variantName);\n const versionedVariant = `${versionedTypeName(modelKey, version)}${formattedVariant}`;\n const unversionedVariant = `${modelKey}${formattedVariant}`;\n reExports.push(\n `export type { ${versionedVariant} as ${unversionedVariant} } from \"${\n typesFilePath(version)\n }\";`,\n );\n }\n }\n }\n\n return GENERATED_FILE_HEADER + reExports.join(\"\\n\") + \"\\n\";\n}\n\n/**\n * Generate per-version public types and write types from an already-resolved\n * versioned IR chain.\n */\nexport function generateVersionedTypesFromChain(\n resolved: ResolvedIrChain,\n minSupportedVersion?: number,\n): VersionedTypesOutput {\n const { chain } = resolved;\n const { minVersion } = resolveMinVersion(chain, minSupportedVersion);\n\n const readTypes = new Map<number, string>();\n const writeTypes = new Map<number, string>();\n\n for (const { version, ir } of chain) {\n if (version < minVersion) continue;\n\n readTypes.set(version, generateReadTypesForVersion(version, ir));\n writeTypes.set(version, generateWriteTypesForVersion(version, ir));\n }\n\n const typesReExport = generateTypesReExport(chain[chain.length - 1]!);\n\n return { readTypes, writeTypes, typesReExport };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -16,67 +16,25 @@
16
16
 
17
17
  import { formatVariantName } from "../formatVariantName.js";
18
18
  import { GENERATED_FILE_HEADER } from "../generatedFileHeader.js";
19
- import { resolveSchemaChain } from "./resolveSchemaChain.js";
20
- import { findRecordExportName, isRecordSchema, isUnionSchema, schemaName, TypeKind, typesFilePath, versionedSchemaName, versionedTypeName } from "./runtimeSchema.js";
21
- function convertFieldTypeToZodSchema(fieldType, schema, version) {
22
- switch (fieldType.type) {
23
- case TypeKind.ANY:
24
- return "z.unknown()";
25
- case TypeKind.ARRAY:
26
- if (fieldType.items == null) {
27
- throw new Error("Array field is missing items type");
28
- }
29
- return `z.array(${convertFieldTypeToZodSchema(fieldType.items, schema, version)})`;
30
- case TypeKind.BOOLEAN:
31
- return "z.boolean()";
32
- case TypeKind.DOC_REF:
33
- return "z.string()";
34
- case TypeKind.DOUBLE:
35
- return "z.number()";
36
- case TypeKind.MEDIA_REF:
37
- return "z.string()";
38
- case TypeKind.OBJECT_REF:
39
- return "z.string()";
40
- case TypeKind.OPTIONAL:
41
- if (fieldType.item == null) {
42
- throw new Error("Optional field is missing inner type");
43
- }
44
- return `${convertFieldTypeToZodSchema(fieldType.item, schema, version)}.optional()`;
45
- case TypeKind.REF:
46
- {
47
- if (fieldType.name == null) {
48
- throw new Error("Ref field is missing a name");
49
- }
50
- const exportName = fieldType.refType === "record" && schema ? findRecordExportName(fieldType.name, schema) ?? fieldType.name : fieldType.name;
51
- const refSchemaName = version != null ? versionedSchemaName(exportName, version) : `${exportName}Schema`;
52
- const refTypeName = version != null ? versionedTypeName(exportName, version) : exportName;
53
- return `z.lazy((): ZodType<${refTypeName}> => ${refSchemaName})`;
54
- }
55
- case TypeKind.STRING:
56
- return "z.string()";
57
- case TypeKind.USER_REF:
58
- return "z.string()";
59
- default:
60
- throw new Error(`Unknown schema field type: ${fieldType.type}`);
61
- }
62
- }
63
-
19
+ import { convertFieldTypeToZodSchema } from "../ir/irFieldHelpers.js";
20
+ import { resolveMinVersion } from "./resolveSchemaChain.js";
21
+ import { typesFilePath, versionedSchemaName, versionedTypeName } from "./runtimeSchema.js";
64
22
  /**
65
23
  * Generate Zod schemas for a specific schema version.
66
24
  * Uses `.passthrough()` to preserve unknown fields.
67
25
  */
68
- function generateZodSchemasForVersion(version, schema) {
26
+ function generateZodSchemasForVersion(version, ir) {
69
27
  let output = GENERATED_FILE_HEADER;
70
28
 
71
29
  // Collect type names for import
72
30
  const typeNames = [];
73
- for (const [exportName, item] of Object.entries(schema)) {
74
- if (isRecordSchema(item)) {
75
- typeNames.push(versionedTypeName(exportName, version));
76
- } else if (isUnionSchema(item)) {
77
- typeNames.push(versionedTypeName(exportName, version));
78
- for (const variantName of Object.keys(item.variants)) {
79
- typeNames.push(`${versionedTypeName(exportName, version)}${formatVariantName(variantName)}`);
31
+ for (const [modelKey, modelDef] of Object.entries(ir.models)) {
32
+ if (modelDef.type === "record") {
33
+ typeNames.push(versionedTypeName(modelKey, version));
34
+ } else if (modelDef.type === "union") {
35
+ typeNames.push(versionedTypeName(modelKey, version));
36
+ for (const variantName of Object.keys(modelDef.union.variants)) {
37
+ typeNames.push(`${versionedTypeName(modelKey, version)}${formatVariantName(variantName)}`);
80
38
  }
81
39
  }
82
40
  }
@@ -88,44 +46,52 @@ function generateZodSchemasForVersion(version, schema) {
88
46
  output += "\n";
89
47
 
90
48
  // Generate record schemas first (unions may depend on them)
91
- for (const [exportName, item] of Object.entries(schema)) {
92
- if (!isRecordSchema(item)) continue;
93
- const zodSchemaName = versionedSchemaName(exportName, version);
94
- const typeName = versionedTypeName(exportName, version);
49
+ for (const [modelKey, modelDef] of Object.entries(ir.models)) {
50
+ if (modelDef.type !== "record") continue;
51
+ const zodSchemaName = versionedSchemaName(modelKey, version);
52
+ const typeName = versionedTypeName(modelKey, version);
95
53
  const fieldLines = [];
96
- for (const [fieldName, fieldType] of Object.entries(item.fields)) {
97
- const zodType = convertFieldTypeToZodSchema(fieldType, schema, version);
98
- fieldLines.push(` ${fieldName}: ${zodType}`);
54
+ for (const field of modelDef.record.fields) {
55
+ let zodType = convertFieldTypeToZodSchema(field.fieldType, version);
56
+ if (field.isOptional) {
57
+ zodType = `${zodType}.optional()`;
58
+ }
59
+ fieldLines.push(` ${field.key}: ${zodType}`);
99
60
  }
100
61
  output += `export const ${zodSchemaName} = z.object({\n${fieldLines.join(",\n")}\n}).passthrough() satisfies ZodType<${typeName}>;\n\n`;
101
62
  }
102
63
 
103
64
  // Generate union schemas
104
- for (const [exportName, item] of Object.entries(schema)) {
105
- if (!isUnionSchema(item)) continue;
106
- const discriminantField = item.discriminant;
65
+ for (const [modelKey, modelDef] of Object.entries(ir.models)) {
66
+ if (modelDef.type !== "union") continue;
67
+ const union = modelDef.union;
68
+ const discriminantField = union.discriminant;
107
69
  const variantSchemaNames = [];
108
- for (const [variantName, variantType] of Object.entries(item.variants)) {
70
+ for (const [variantName, variantModelKey] of Object.entries(union.variants)) {
109
71
  const formattedVariant = formatVariantName(variantName);
110
- const variantZodSchemaName = `${versionedSchemaName(exportName, version)}${formattedVariant}`;
111
- const variantTypeName = `${versionedTypeName(exportName, version)}${formattedVariant}`;
72
+ const variantZodSchemaName = `${versionedSchemaName(modelKey, version)}${formattedVariant}`;
73
+ const variantTypeName = `${versionedTypeName(modelKey, version)}${formattedVariant}`;
112
74
  variantSchemaNames.push(variantZodSchemaName);
113
- if (variantType.type === TypeKind.REF && variantType.refType === "record") {
114
- const recordExport = findRecordExportName(variantType.name, schema);
115
- const recordZodSchemaName = recordExport ? versionedSchemaName(recordExport, version) : `${variantType.name}Schema`;
75
+
76
+ // Look up the variant's model to check if it's a record
77
+ const variantModel = ir.models[variantModelKey];
78
+ if (variantModel != null && variantModel.type === "record") {
79
+ const recordZodSchemaName = versionedSchemaName(variantModelKey, version);
116
80
  output += `export const ${variantZodSchemaName} = ${recordZodSchemaName}.extend({\n`;
117
81
  output += ` ${discriminantField}: z.literal("${variantName}")\n`;
118
82
  output += `}) satisfies ZodType<${variantTypeName}>;\n\n`;
119
83
  } else {
120
- const zodType = convertFieldTypeToZodSchema(variantType, schema, version);
84
+ // Non-record variant (e.g. another union): emit a value field referencing the schema
85
+ const refZodSchemaName = versionedSchemaName(variantModelKey, version);
86
+ const refTypeName = versionedTypeName(variantModelKey, version);
121
87
  output += `export const ${variantZodSchemaName} = z.object({\n`;
122
88
  output += ` ${discriminantField}: z.literal("${variantName}"),\n`;
123
- output += ` value: ${zodType}\n`;
89
+ output += ` value: z.lazy((): ZodType<${refTypeName}> => ${refZodSchemaName})\n`;
124
90
  output += `}) satisfies ZodType<${variantTypeName}>;\n\n`;
125
91
  }
126
92
  }
127
- const unionZodSchemaName = versionedSchemaName(exportName, version);
128
- const typeName = versionedTypeName(exportName, version);
93
+ const unionZodSchemaName = versionedSchemaName(modelKey, version);
94
+ const typeName = versionedTypeName(modelKey, version);
129
95
  output += `export const ${unionZodSchemaName} = z.discriminatedUnion("${discriminantField}", [\n ${variantSchemaNames.join(",\n ")}\n]) satisfies ZodType<${typeName}>;\n\n`;
130
96
  }
131
97
  return output;
@@ -135,24 +101,24 @@ function generateZodSchemasForVersion(version, schema) {
135
101
  * Generate the schema.ts re-export file mapping unversioned names to latest version.
136
102
  */
137
103
  function generateSchemaReExport({
138
- schema,
104
+ ir,
139
105
  version
140
106
  }) {
141
107
  let output = GENERATED_FILE_HEADER;
142
108
  const reExports = [];
143
- for (const [exportName, item] of Object.entries(schema)) {
144
- if (isRecordSchema(item)) {
145
- const versioned = versionedSchemaName(exportName, version);
146
- reExports.push(`export { ${versioned} as ${schemaName(exportName)} } from "./schema_v${version}.js";`);
147
- } else if (isUnionSchema(item)) {
148
- const versioned = versionedSchemaName(exportName, version);
149
- reExports.push(`export { ${versioned} as ${schemaName(exportName)} } from "./schema_v${version}.js";`);
109
+ for (const [modelKey, modelDef] of Object.entries(ir.models)) {
110
+ if (modelDef.type === "record") {
111
+ const versioned = versionedSchemaName(modelKey, version);
112
+ reExports.push(`export { ${versioned} as ${modelKey}Schema } from "./schema_v${version}.js";`);
113
+ } else if (modelDef.type === "union") {
114
+ const versioned = versionedSchemaName(modelKey, version);
115
+ reExports.push(`export { ${versioned} as ${modelKey}Schema } from "./schema_v${version}.js";`);
150
116
 
151
117
  // Also re-export union variant schemas
152
- for (const variantName of Object.keys(item.variants)) {
118
+ for (const variantName of Object.keys(modelDef.union.variants)) {
153
119
  const formattedVariant = formatVariantName(variantName);
154
- const versionedVariant = `${versionedSchemaName(exportName, version)}${formattedVariant}`;
155
- reExports.push(`export { ${versionedVariant} as ${`${exportName}${formattedVariant}Schema`} } from "./schema_v${version}.js";`);
120
+ const versionedVariant = `${versionedSchemaName(modelKey, version)}${formattedVariant}`;
121
+ reExports.push(`export { ${versionedVariant} as ${`${modelKey}${formattedVariant}Schema`} } from "./schema_v${version}.js";`);
156
122
  }
157
123
  }
158
124
  }
@@ -161,24 +127,22 @@ function generateSchemaReExport({
161
127
  }
162
128
 
163
129
  /**
164
- * Generate per-version Zod schemas from a schema definition with version chain.
165
- *
166
- * @param schema - The schema definition (initial or versioned)
167
- * @param minSupportedVersion - Minimum version to generate schemas for (defaults to latest)
168
- * @returns Object containing generated Zod schema code for each output file
130
+ * Generate per-version Zod schemas from an already-resolved versioned IR chain.
169
131
  */
170
- export function generateVersionedZodFromSchema(schema, minSupportedVersion) {
132
+ export function generateVersionedZodFromChain(resolved, minSupportedVersion) {
133
+ const {
134
+ chain
135
+ } = resolved;
171
136
  const {
172
- chain,
173
137
  minVersion
174
- } = resolveSchemaChain(schema, minSupportedVersion);
138
+ } = resolveMinVersion(chain, minSupportedVersion);
175
139
  const zodSchemas = new Map();
176
140
  for (const {
177
141
  version,
178
- schema: versionSchema
142
+ ir
179
143
  } of chain) {
180
144
  if (version < minVersion) continue;
181
- zodSchemas.set(version, generateZodSchemasForVersion(version, versionSchema));
145
+ zodSchemas.set(version, generateZodSchemasForVersion(version, ir));
182
146
  }
183
147
  const schemaReExport = generateSchemaReExport(chain[chain.length - 1]);
184
148
  return {