@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
@@ -15,109 +15,7 @@
15
15
  */
16
16
 
17
17
  import { GENERATED_FILE_HEADER } from "../generatedFileHeader.js";
18
- import { resolveSchemaChain } from "./resolveSchemaChain.js";
19
- import { findRecordExportName, isRecordSchema, isUnionSchema, TypeKind } from "./runtimeSchema.js";
20
- /**
21
- * Convert a schema field type to TypeScript string for internal types.
22
- */
23
- function convertTypeToTypeScript(fieldType) {
24
- switch (fieldType.type) {
25
- case TypeKind.ARRAY:
26
- {
27
- if (fieldType.items == null) {
28
- throw new Error("Array field is missing items type");
29
- }
30
- const inner = convertTypeToTypeScript(fieldType.items);
31
- // Wrap compound types (unions, other arrays) in parens before appending []
32
- const needsParens = inner.includes("|") || inner.startsWith("readonly ");
33
- const wrapped = needsParens ? `(${inner})` : inner;
34
- return `readonly ${wrapped}[]`;
35
- }
36
- case TypeKind.BOOLEAN:
37
- return "boolean";
38
- case TypeKind.DOC_REF:
39
- return "string";
40
- case TypeKind.DOUBLE:
41
- return "number";
42
- case TypeKind.MEDIA_REF:
43
- return "string";
44
- case TypeKind.OBJECT_REF:
45
- return "string";
46
- case TypeKind.OPTIONAL:
47
- if (fieldType.item == null) {
48
- throw new Error("Optional field is missing inner type");
49
- }
50
- return `(${convertTypeToTypeScript(fieldType.item)} | undefined)`;
51
- case TypeKind.REF:
52
- return "unknown";
53
- case TypeKind.STRING:
54
- return "string";
55
- case TypeKind.USER_REF:
56
- return "string";
57
- default:
58
- throw new Error(`Unknown schema field type: ${fieldType.type}`);
59
- }
60
- }
61
-
62
- /**
63
- * Convert a schema field type to a FieldTypeDescriptor source string.
64
- */
65
- function convertTypeToFieldTypeDescriptor(fieldType, schema) {
66
- switch (fieldType.type) {
67
- case TypeKind.ARRAY:
68
- if (fieldType.items == null) {
69
- throw new Error("Array field is missing items type");
70
- }
71
- return `{ kind: "array", element: ${convertTypeToFieldTypeDescriptor(fieldType.items, schema)} }`;
72
- case TypeKind.OPTIONAL:
73
- if (fieldType.item == null) {
74
- throw new Error("Optional field is missing inner type");
75
- }
76
- return `{ kind: "optional", inner: ${convertTypeToFieldTypeDescriptor(fieldType.item, schema)} }`;
77
- case TypeKind.REF:
78
- {
79
- if (fieldType.name == null) {
80
- throw new Error("Ref field is missing a name");
81
- }
82
- const exportKey = fieldType.refType === "record" ? findRecordExportName(fieldType.name, schema) ?? fieldType.name : fieldType.name;
83
- return `{ kind: "modelRef", model: "${exportKey}" }`;
84
- }
85
- default:
86
- return `{ kind: "primitive" }`;
87
- }
88
- }
89
-
90
- /**
91
- * Convert a schema field type to a Zod schema string.
92
- */
93
- function convertTypeToZodSchema(fieldType) {
94
- switch (fieldType.type) {
95
- case TypeKind.ARRAY:
96
- if (fieldType.items == null) {
97
- throw new Error("Array field is missing items type");
98
- }
99
- return `z.array(${convertTypeToZodSchema(fieldType.items)})`;
100
- case TypeKind.BOOLEAN:
101
- return "z.boolean()";
102
- case TypeKind.DOC_REF:
103
- case TypeKind.MEDIA_REF:
104
- case TypeKind.OBJECT_REF:
105
- case TypeKind.STRING:
106
- case TypeKind.USER_REF:
107
- return "z.string()";
108
- case TypeKind.DOUBLE:
109
- return "z.number()";
110
- case TypeKind.OPTIONAL:
111
- if (fieldType.item == null) {
112
- throw new Error("Optional field is missing inner type");
113
- }
114
- return `${convertTypeToZodSchema(fieldType.item)}.optional()`;
115
- case TypeKind.REF:
116
- return "z.unknown()";
117
- default:
118
- throw new Error(`Unknown schema field type: ${fieldType.type}`);
119
- }
120
- }
18
+ import { convertFieldTypeToDescriptor, convertFieldTypeToInternalTypeScript, convertFieldTypeToInternalZod } from "../ir/irFieldHelpers.js";
121
19
 
122
20
  /** Collected info about all fields for a model across all versions. */
123
21
 
@@ -141,30 +39,35 @@ function collectRecordModels(chain) {
141
39
  // Initialize models from all versions
142
40
  for (const {
143
41
  version,
144
- schema
42
+ ir
145
43
  } of chain) {
146
- for (const [exportName, item] of Object.entries(schema)) {
147
- if (!isRecordSchema(item)) continue;
148
- if (!allRecordModels.has(exportName)) {
149
- allRecordModels.set(exportName, {
44
+ for (const [modelKey, modelDef] of Object.entries(ir.models)) {
45
+ if (modelDef.type !== "record") continue;
46
+ if (!allRecordModels.has(modelKey)) {
47
+ allRecordModels.set(modelKey, {
150
48
  allFields: new Map(),
151
49
  steps: []
152
50
  });
153
51
  }
154
- const model = allRecordModels.get(exportName);
155
- for (const [fieldName, fieldType] of Object.entries(item.fields)) {
156
- const existing = model.allFields.get(fieldName);
52
+ const model = allRecordModels.get(modelKey);
53
+ for (const field of modelDef.record.fields) {
54
+ const existing = model.allFields.get(field.key);
157
55
  if (existing == null) {
158
- model.allFields.set(fieldName, {
159
- fieldType,
56
+ model.allFields.set(field.key, {
57
+ fieldType: field.fieldType,
58
+ isOptional: field.isOptional === true,
160
59
  presentInVersions: new Set([version]),
161
- alwaysOptional: fieldType.type === TypeKind.OPTIONAL
60
+ alwaysOptional: field.isOptional === true,
61
+ everOptional: field.isOptional === true
162
62
  });
163
63
  } else {
164
64
  existing.presentInVersions.add(version);
165
- if (fieldType.type !== TypeKind.OPTIONAL) {
65
+ if (field.isOptional !== true) {
166
66
  existing.alwaysOptional = false;
167
67
  }
68
+ if (field.isOptional === true) {
69
+ existing.everOptional = true;
70
+ }
168
71
  }
169
72
  }
170
73
  }
@@ -172,30 +75,30 @@ function collectRecordModels(chain) {
172
75
 
173
76
  // Compute upgrade steps from version diffs
174
77
  for (let i = 1; i < chain.length; i++) {
175
- const prevVersion = chain[i - 1];
176
- const currVersion = chain[i];
177
- for (const [exportName, currItem] of Object.entries(currVersion.schema)) {
178
- if (!isRecordSchema(currItem)) continue;
179
- const prevItem = prevVersion.schema[exportName];
180
- if (prevItem == null || !isRecordSchema(prevItem)) continue;
181
- const model = allRecordModels.get(exportName);
78
+ const prevEntry = chain[i - 1];
79
+ const currEntry = chain[i];
80
+ for (const [modelKey, currModelDef] of Object.entries(currEntry.ir.models)) {
81
+ if (currModelDef.type !== "record") continue;
82
+ const prevModelDef = prevEntry.ir.models[modelKey];
83
+ if (prevModelDef == null || prevModelDef.type !== "record") continue;
84
+ const model = allRecordModels.get(modelKey);
182
85
  if (model == null) continue;
183
- const prevFields = new Set(Object.keys(prevItem.fields));
184
- const currFields = new Set(Object.keys(currItem.fields));
86
+ const prevFields = new Set(prevModelDef.record.fields.map(f => f.key));
87
+ const currFields = new Set(currModelDef.record.fields.map(f => f.key));
185
88
 
186
89
  // Fields added in this version
187
90
  const addedFields = new Map();
188
- const recordUpgrades = currVersion.migrations?.[exportName];
189
- for (const fieldName of currFields) {
190
- if (!prevFields.has(fieldName)) {
191
- const annotation = recordUpgrades?.[fieldName];
91
+ const recordUpgrades = currEntry.migrations?.[modelKey];
92
+ for (const fieldKey of currFields) {
93
+ if (!prevFields.has(fieldKey)) {
94
+ const annotation = recordUpgrades?.[fieldKey];
192
95
  if (annotation != null) {
193
- addedFields.set(fieldName, {
96
+ addedFields.set(fieldKey, {
194
97
  derivedFrom: [...annotation.derivedFrom],
195
- forwardSource: annotation.forward.toString()
98
+ forwardSource: annotation.forwardSource
196
99
  });
197
100
  } else {
198
- addedFields.set(fieldName, {
101
+ addedFields.set(fieldKey, {
199
102
  derivedFrom: [],
200
103
  forwardSource: "() => undefined"
201
104
  });
@@ -205,15 +108,15 @@ function collectRecordModels(chain) {
205
108
 
206
109
  // Fields removed in this version
207
110
  const removedFields = [];
208
- for (const fieldName of prevFields) {
209
- if (!currFields.has(fieldName)) {
210
- removedFields.push(fieldName);
111
+ for (const fieldKey of prevFields) {
112
+ if (!currFields.has(fieldKey)) {
113
+ removedFields.push(fieldKey);
211
114
  }
212
115
  }
213
116
  if (addedFields.size > 0 || removedFields.length > 0) {
214
117
  model.steps.push({
215
- name: `v${currVersion.version}`,
216
- addedInVersion: currVersion.version,
118
+ name: `v${currEntry.version}`,
119
+ addedInVersion: currEntry.version,
217
120
  fields: addedFields,
218
121
  removedFields
219
122
  });
@@ -239,11 +142,11 @@ function collectRecordModels(chain) {
239
142
  function generateInternalTypes(allRecordModels) {
240
143
  let output = GENERATED_FILE_HEADER;
241
144
  output += "\n";
242
- for (const [exportName, model] of sortedEntries(allRecordModels)) {
145
+ for (const [modelKey, model] of sortedEntries(allRecordModels)) {
243
146
  output += `/** Internal representation containing all fields across all schema versions. */\n`;
244
- output += `export interface ${exportName}__Internal {\n`;
147
+ output += `export interface ${modelKey}__Internal {\n`;
245
148
  for (const [fieldName, fieldInfo] of sortedEntries(model.allFields)) {
246
- const tsType = convertTypeToTypeScript(fieldInfo.fieldType);
149
+ const tsType = convertFieldTypeToInternalTypeScript(fieldInfo.fieldType, fieldInfo.isOptional);
247
150
  const optional = fieldInfo.alwaysOptional ? "?" : "";
248
151
  output += ` readonly ${fieldName}${optional}: ${tsType};\n`;
249
152
  }
@@ -255,29 +158,25 @@ function generateInternalTypes(allRecordModels) {
255
158
  /**
256
159
  * Generate _internal/upgrades.ts content.
257
160
  */
258
- function generateUpgrades(allRecordModels, latestSchema) {
161
+ function generateUpgrades(allRecordModels, latestIr) {
259
162
  let output = GENERATED_FILE_HEADER;
260
163
  const hasRecords = allRecordModels.size > 0;
261
- const hasUnions = Object.values(latestSchema).some(isUnionSchema);
164
+ const hasUnions = Object.values(latestIr.models).some(m => m.type === "union");
262
165
  const imports = [];
263
166
  if (hasRecords) imports.push("UpgradeRegistry");
264
167
  if (hasUnions) imports.push("UnionUpgradeRegistry");
265
168
  if (imports.length > 0) {
266
169
  output += `import type { ${imports.join(", ")} } from "@palantir/pack.document-schema.model-types";\n\n`;
267
170
  }
268
- for (const [exportName, model] of sortedEntries(allRecordModels)) {
269
- output += `export const ${exportName}Upgrades: UpgradeRegistry<"${exportName}"> = {\n`;
270
- output += ` modelName: "${exportName}",\n`;
171
+ for (const [modelKey, model] of sortedEntries(allRecordModels)) {
172
+ output += `export const ${modelKey}Upgrades: UpgradeRegistry<"${modelKey}"> = {\n`;
173
+ output += ` modelName: "${modelKey}",\n`;
271
174
 
272
175
  // allFields
273
176
  output += ` allFields: {\n`;
274
177
  for (const [fieldName, fieldInfo] of sortedEntries(model.allFields)) {
275
- const typeDescriptor = convertTypeToFieldTypeDescriptor(fieldInfo.fieldType, latestSchema);
276
- if (fieldInfo.default !== undefined) {
277
- output += ` ${fieldName}: { type: ${typeDescriptor}, default: ${JSON.stringify(fieldInfo.default)} },\n`;
278
- } else {
279
- output += ` ${fieldName}: { type: ${typeDescriptor} },\n`;
280
- }
178
+ const typeDescriptor = convertFieldTypeToDescriptor(fieldInfo.fieldType, fieldInfo.isOptional);
179
+ output += ` ${fieldName}: { type: ${typeDescriptor} },\n`;
281
180
  }
282
181
  output += ` },\n`;
283
182
 
@@ -308,19 +207,15 @@ function generateUpgrades(allRecordModels, latestSchema) {
308
207
  }
309
208
 
310
209
  // Generate UnionUpgradeRegistry entries for union models
311
- for (const [exportName, item] of Object.entries(latestSchema)) {
312
- if (!isUnionSchema(item)) continue;
313
- output += `export const ${exportName}Upgrades: UnionUpgradeRegistry<"${exportName}"> = {\n`;
314
- output += ` modelName: "${exportName}",\n`;
315
- output += ` discriminant: "${item.discriminant}",\n`;
210
+ for (const [modelKey, modelDef] of Object.entries(latestIr.models)) {
211
+ if (modelDef.type !== "union") continue;
212
+ const union = modelDef.union;
213
+ output += `export const ${modelKey}Upgrades: UnionUpgradeRegistry<"${modelKey}"> = {\n`;
214
+ output += ` modelName: "${modelKey}",\n`;
215
+ output += ` discriminant: "${union.discriminant}",\n`;
316
216
  output += ` variants: {\n`;
317
- for (const [variantKey, variantField] of Object.entries(item.variants)) {
318
- if (variantField.type === "ref" && variantField.refType === "record" && variantField.name != null) {
319
- const variantExportName = findRecordExportName(variantField.name, latestSchema);
320
- if (variantExportName != null) {
321
- output += ` "${variantKey}": "${variantExportName}",\n`;
322
- }
323
- }
217
+ for (const [variantKey, variantModelKey] of Object.entries(union.variants)) {
218
+ output += ` "${variantKey}": "${variantModelKey}",\n`;
324
219
  }
325
220
  output += ` },\n`;
326
221
  output += `};\n\n`;
@@ -334,21 +229,13 @@ function generateUpgrades(allRecordModels, latestSchema) {
334
229
  function generateInternalSchemaContent(allRecordModels) {
335
230
  let output = GENERATED_FILE_HEADER;
336
231
  output += `import { z } from "zod";\n\n`;
337
- for (const [exportName, model] of sortedEntries(allRecordModels)) {
338
- output += `export const ${exportName}InternalSchema = z.object({\n`;
232
+ for (const [modelKey, model] of sortedEntries(allRecordModels)) {
233
+ output += `export const ${modelKey}InternalSchema = z.object({\n`;
339
234
  for (const [fieldName, fieldInfo] of sortedEntries(model.allFields)) {
340
- const zodType = convertTypeToZodSchema(fieldInfo.fieldType);
341
- // In internal schema, all fields that might be absent are optional
342
- if (fieldInfo.alwaysOptional) {
343
- // If the type already ends with .optional(), don't double-wrap
344
- if (zodType.endsWith(".optional()")) {
345
- output += ` ${fieldName}: ${zodType},\n`;
346
- } else {
347
- output += ` ${fieldName}: ${zodType}.optional(),\n`;
348
- }
349
- } else {
350
- output += ` ${fieldName}: ${zodType},\n`;
351
- }
235
+ // Use everOptional: a field optional in ANY version must stay optional
236
+ // in the internal schema because older documents may legitimately omit it.
237
+ const zodType = convertFieldTypeToInternalZod(fieldInfo.fieldType, fieldInfo.alwaysOptional || fieldInfo.everOptional);
238
+ output += ` ${fieldName}: ${zodType},\n`;
352
239
  }
353
240
  output += `}).passthrough();\n\n`;
354
241
  }
@@ -357,19 +244,16 @@ function generateInternalSchemaContent(allRecordModels) {
357
244
 
358
245
  /**
359
246
  * Generate _internal/types.ts, _internal/upgrades.ts, and _internal/schema.ts
360
- * from a versioned schema chain.
361
- *
362
- * @param schema - The schema definition (initial or versioned)
363
- * @returns Object containing generated code for each internal file
247
+ * from an already-resolved versioned IR chain.
364
248
  */
365
- export function generateInternalFromSchema(schema) {
249
+ export function generateInternalFromChain(resolved) {
366
250
  const {
367
251
  chain
368
- } = resolveSchemaChain(schema);
369
- const latestSchema = chain[chain.length - 1].schema;
252
+ } = resolved;
253
+ const latestIr = chain[chain.length - 1].ir;
370
254
  const allRecordModels = collectRecordModels(chain);
371
255
  const internalTypes = generateInternalTypes(allRecordModels);
372
- const upgrades = generateUpgrades(allRecordModels, latestSchema);
256
+ const upgrades = generateUpgrades(allRecordModels, latestIr);
373
257
  const internalSchema = generateInternalSchemaContent(allRecordModels);
374
258
  return {
375
259
  internalTypes,
@@ -1 +1 @@
1
- {"version":3,"file":"generateInternalFromSchema.js","names":["GENERATED_FILE_HEADER","resolveSchemaChain","findRecordExportName","isRecordSchema","isUnionSchema","TypeKind","convertTypeToTypeScript","fieldType","type","ARRAY","items","Error","inner","needsParens","includes","startsWith","wrapped","BOOLEAN","DOC_REF","DOUBLE","MEDIA_REF","OBJECT_REF","OPTIONAL","item","REF","STRING","USER_REF","convertTypeToFieldTypeDescriptor","schema","name","exportKey","refType","convertTypeToZodSchema","sortedEntries","map","Array","from","entries","sort","a","b","localeCompare","collectRecordModels","chain","allRecordModels","Map","version","exportName","Object","has","set","allFields","steps","model","get","fieldName","fields","existing","presentInVersions","Set","alwaysOptional","add","i","length","prevVersion","currVersion","currItem","prevItem","prevFields","keys","currFields","addedFields","recordUpgrades","migrations","annotation","derivedFrom","forwardSource","forward","toString","removedFields","push","size","addedInVersion","totalVersions","values","fieldInfo","generateInternalTypes","output","tsType","optional","generateUpgrades","latestSchema","hasRecords","hasUnions","some","imports","join","typeDescriptor","default","undefined","JSON","stringify","step","fieldMeta","d","f","discriminant","variantKey","variantField","variants","variantExportName","generateInternalSchemaContent","zodType","endsWith","generateInternalFromSchema","internalTypes","upgrades","internalSchema"],"sources":["generateInternalFromSchema.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 { 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 { findRecordExportName, isRecordSchema, isUnionSchema, TypeKind } from \"./runtimeSchema.js\";\n\nexport interface InternalTypesOutput {\n /** _internal/types.ts content */\n internalTypes: string;\n /** _internal/upgrades.ts content */\n upgrades: string;\n /** _internal/schema.ts content */\n internalSchema: string;\n}\n\n/**\n * Convert a schema field type to TypeScript string for internal types.\n */\nfunction convertTypeToTypeScript(fieldType: SchemaField): string {\n switch (fieldType.type) {\n case TypeKind.ARRAY: {\n if (fieldType.items == null) {\n throw new Error(\"Array field is missing items type\");\n }\n const inner = convertTypeToTypeScript(fieldType.items);\n // Wrap compound types (unions, other arrays) in parens before appending []\n const needsParens = inner.includes(\"|\") || inner.startsWith(\"readonly \");\n const wrapped = needsParens ? `(${inner})` : inner;\n return `readonly ${wrapped}[]`;\n }\n case TypeKind.BOOLEAN:\n return \"boolean\";\n case TypeKind.DOC_REF:\n return \"string\";\n case TypeKind.DOUBLE:\n return \"number\";\n case TypeKind.MEDIA_REF:\n return \"string\";\n case TypeKind.OBJECT_REF:\n return \"string\";\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)} | undefined)`;\n case TypeKind.REF:\n return \"unknown\";\n case TypeKind.STRING:\n return \"string\";\n case TypeKind.USER_REF:\n return \"string\";\n default:\n throw new Error(`Unknown schema field type: ${fieldType.type}`);\n }\n}\n\n/**\n * Convert a schema field type to a FieldTypeDescriptor source string.\n */\nfunction convertTypeToFieldTypeDescriptor(fieldType: SchemaField, schema: RuntimeSchema): string {\n switch (fieldType.type) {\n case TypeKind.ARRAY:\n if (fieldType.items == null) {\n throw new Error(\"Array field is missing items type\");\n }\n return `{ kind: \"array\", element: ${\n convertTypeToFieldTypeDescriptor(fieldType.items, schema)\n } }`;\n case TypeKind.OPTIONAL:\n if (fieldType.item == null) {\n throw new Error(\"Optional field is missing inner type\");\n }\n return `{ kind: \"optional\", inner: ${\n convertTypeToFieldTypeDescriptor(fieldType.item, schema)\n } }`;\n case TypeKind.REF: {\n if (fieldType.name == null) {\n throw new Error(\"Ref field is missing a name\");\n }\n const exportKey = fieldType.refType === \"record\"\n ? findRecordExportName(fieldType.name, schema) ?? fieldType.name\n : fieldType.name;\n return `{ kind: \"modelRef\", model: \"${exportKey}\" }`;\n }\n default:\n return `{ kind: \"primitive\" }`;\n }\n}\n\n/**\n * Convert a schema field type to a Zod schema string.\n */\nfunction convertTypeToZodSchema(fieldType: SchemaField): string {\n switch (fieldType.type) {\n case TypeKind.ARRAY:\n if (fieldType.items == null) {\n throw new Error(\"Array field is missing items type\");\n }\n return `z.array(${convertTypeToZodSchema(fieldType.items)})`;\n case TypeKind.BOOLEAN:\n return \"z.boolean()\";\n case TypeKind.DOC_REF:\n case TypeKind.MEDIA_REF:\n case TypeKind.OBJECT_REF:\n case TypeKind.STRING:\n case TypeKind.USER_REF:\n return \"z.string()\";\n case TypeKind.DOUBLE:\n return \"z.number()\";\n case TypeKind.OPTIONAL:\n if (fieldType.item == null) {\n throw new Error(\"Optional field is missing inner type\");\n }\n return `${convertTypeToZodSchema(fieldType.item)}.optional()`;\n case TypeKind.REF:\n return \"z.unknown()\";\n default:\n throw new Error(`Unknown schema field type: ${fieldType.type}`);\n }\n}\n\n/** Collected info about all fields for a model across all versions. */\ninterface AllFieldInfo {\n fieldType: SchemaField;\n /** Versions where this field exists. */\n presentInVersions: Set<number>;\n /** Whether field is always optional. */\n alwaysOptional: boolean;\n /** Default value if any. */\n default?: unknown;\n}\n\n/**\n * Represents an upgrade step for a model between version transitions.\n */\ninterface UpgradeStep {\n name: string;\n addedInVersion: number;\n fields: Map<string, { derivedFrom: string[]; forwardSource: string; default?: unknown }>;\n removedFields: string[];\n}\n\ninterface RecordModelInfo {\n allFields: Map<string, AllFieldInfo>;\n steps: UpgradeStep[];\n}\n\n/**\n * Helper to iterate sorted entries of a Map.\n */\nfunction sortedEntries<V>(map: Map<string, V>): [string, V][] {\n return Array.from(map.entries()).sort(([a], [b]) => a.localeCompare(b));\n}\n\n/**\n * Collect all record model info across all versions and compute upgrade steps.\n */\nfunction collectRecordModels(\n chain: VersionedSchemaEntry[],\n): Map<string, RecordModelInfo> {\n const allRecordModels = new Map<string, RecordModelInfo>();\n\n // Initialize models from all versions\n for (const { version, schema } of chain) {\n for (const [exportName, item] of Object.entries(schema)) {\n if (!isRecordSchema(item)) continue;\n\n if (!allRecordModels.has(exportName)) {\n allRecordModels.set(exportName, {\n allFields: new Map(),\n steps: [],\n });\n }\n\n const model = allRecordModels.get(exportName)!;\n\n for (const [fieldName, fieldType] of Object.entries(item.fields)) {\n const existing = model.allFields.get(fieldName);\n if (existing == null) {\n model.allFields.set(fieldName, {\n fieldType,\n presentInVersions: new Set([version]),\n alwaysOptional: fieldType.type === TypeKind.OPTIONAL,\n });\n } else {\n existing.presentInVersions.add(version);\n if (fieldType.type !== TypeKind.OPTIONAL) {\n existing.alwaysOptional = false;\n }\n }\n }\n }\n }\n\n // Compute upgrade steps from version diffs\n for (let i = 1; i < chain.length; i++) {\n const prevVersion = chain[i - 1]!;\n const currVersion = chain[i]!;\n\n for (const [exportName, currItem] of Object.entries(currVersion.schema)) {\n if (!isRecordSchema(currItem)) continue;\n\n const prevItem = prevVersion.schema[exportName];\n if (prevItem == null || !isRecordSchema(prevItem)) continue;\n\n const model = allRecordModels.get(exportName);\n if (model == null) continue;\n\n const prevFields = new Set(Object.keys(prevItem.fields));\n const currFields = new Set(Object.keys(currItem.fields));\n\n // Fields added in this version\n const addedFields = new Map<\n string,\n { derivedFrom: string[]; forwardSource: string; default?: unknown }\n >();\n const recordUpgrades = currVersion.migrations?.[exportName];\n for (const fieldName of currFields) {\n if (!prevFields.has(fieldName)) {\n const annotation = recordUpgrades?.[fieldName];\n if (annotation != null) {\n addedFields.set(fieldName, {\n derivedFrom: [...annotation.derivedFrom],\n forwardSource: annotation.forward.toString(),\n });\n } else {\n addedFields.set(fieldName, {\n derivedFrom: [],\n forwardSource: \"() => undefined\",\n });\n }\n }\n }\n\n // Fields removed in this version\n const removedFields: string[] = [];\n for (const fieldName of prevFields) {\n if (!currFields.has(fieldName)) {\n removedFields.push(fieldName);\n }\n }\n\n if (addedFields.size > 0 || removedFields.length > 0) {\n model.steps.push({\n name: `v${currVersion.version}`,\n addedInVersion: currVersion.version,\n fields: addedFields,\n removedFields,\n });\n }\n }\n }\n\n // Mark fields that are not present in ALL versions as optional in internal type\n const totalVersions = chain.length;\n for (const model of allRecordModels.values()) {\n for (const [, fieldInfo] of model.allFields) {\n if (fieldInfo.presentInVersions.size < totalVersions) {\n fieldInfo.alwaysOptional = true;\n }\n }\n }\n\n return allRecordModels;\n}\n\n/**\n * Generate _internal/types.ts content.\n */\nfunction generateInternalTypes(\n allRecordModels: Map<string, RecordModelInfo>,\n): string {\n let output = GENERATED_FILE_HEADER;\n output += \"\\n\";\n\n for (const [exportName, model] of sortedEntries(allRecordModels)) {\n output += `/** Internal representation containing all fields across all schema versions. */\\n`;\n output += `export interface ${exportName}__Internal {\\n`;\n\n for (const [fieldName, fieldInfo] of sortedEntries(model.allFields)) {\n const tsType = convertTypeToTypeScript(fieldInfo.fieldType);\n const optional = fieldInfo.alwaysOptional ? \"?\" : \"\";\n output += ` readonly ${fieldName}${optional}: ${tsType};\\n`;\n }\n\n output += \"}\\n\\n\";\n }\n\n return output;\n}\n\n/**\n * Generate _internal/upgrades.ts content.\n */\nfunction generateUpgrades(\n allRecordModels: Map<string, RecordModelInfo>,\n latestSchema: RuntimeSchema,\n): string {\n let output = GENERATED_FILE_HEADER;\n\n const hasRecords = allRecordModels.size > 0;\n const hasUnions = Object.values(latestSchema).some(isUnionSchema);\n\n const imports: string[] = [];\n if (hasRecords) imports.push(\"UpgradeRegistry\");\n if (hasUnions) imports.push(\"UnionUpgradeRegistry\");\n\n if (imports.length > 0) {\n output += `import type { ${\n imports.join(\", \")\n } } from \"@palantir/pack.document-schema.model-types\";\\n\\n`;\n }\n\n for (const [exportName, model] of sortedEntries(allRecordModels)) {\n output += `export const ${exportName}Upgrades: UpgradeRegistry<\"${exportName}\"> = {\\n`;\n output += ` modelName: \"${exportName}\",\\n`;\n\n // allFields\n output += ` allFields: {\\n`;\n for (const [fieldName, fieldInfo] of sortedEntries(model.allFields)) {\n const typeDescriptor = convertTypeToFieldTypeDescriptor(fieldInfo.fieldType, latestSchema);\n if (fieldInfo.default !== undefined) {\n output += ` ${fieldName}: { type: ${typeDescriptor}, default: ${\n JSON.stringify(fieldInfo.default)\n } },\\n`;\n } else {\n output += ` ${fieldName}: { type: ${typeDescriptor} },\\n`;\n }\n }\n output += ` },\\n`;\n\n // steps\n output += ` steps: [\\n`;\n for (const step of model.steps) {\n output += ` {\\n`;\n output += ` name: \"${step.name}\",\\n`;\n output += ` addedInVersion: ${step.addedInVersion},\\n`;\n output += ` fields: {\\n`;\n for (const [fieldName, fieldMeta] of step.fields) {\n output += ` ${fieldName}: {\\n`;\n output += ` derivedFrom: [${\n fieldMeta.derivedFrom.map(d => `\"${d}\"`).join(\", \")\n }],\\n`;\n output += ` forward: ${fieldMeta.forwardSource},\\n`;\n if (fieldMeta.default !== undefined) {\n output += ` default: ${JSON.stringify(fieldMeta.default)},\\n`;\n }\n output += ` },\\n`;\n }\n output += ` },\\n`;\n if (step.removedFields.length > 0) {\n output += ` removedFields: [${step.removedFields.map(f => `\"${f}\"`).join(\", \")}],\\n`;\n }\n output += ` },\\n`;\n }\n output += ` ],\\n`;\n\n output += `};\\n\\n`;\n }\n\n // Generate UnionUpgradeRegistry entries for union models\n for (const [exportName, item] of Object.entries(latestSchema)) {\n if (!isUnionSchema(item)) continue;\n\n output += `export const ${exportName}Upgrades: UnionUpgradeRegistry<\"${exportName}\"> = {\\n`;\n output += ` modelName: \"${exportName}\",\\n`;\n output += ` discriminant: \"${item.discriminant}\",\\n`;\n output += ` variants: {\\n`;\n for (const [variantKey, variantField] of Object.entries(item.variants)) {\n if (\n variantField.type === \"ref\" && variantField.refType === \"record\"\n && variantField.name != null\n ) {\n const variantExportName = findRecordExportName(variantField.name, latestSchema);\n if (variantExportName != null) {\n output += ` \"${variantKey}\": \"${variantExportName}\",\\n`;\n }\n }\n }\n output += ` },\\n`;\n output += `};\\n\\n`;\n }\n\n return output;\n}\n\n/**\n * Generate _internal/schema.ts content.\n */\nfunction generateInternalSchemaContent(\n allRecordModels: Map<string, RecordModelInfo>,\n): string {\n let output = GENERATED_FILE_HEADER;\n output += `import { z } from \"zod\";\\n\\n`;\n\n for (const [exportName, model] of sortedEntries(allRecordModels)) {\n output += `export const ${exportName}InternalSchema = z.object({\\n`;\n\n for (const [fieldName, fieldInfo] of sortedEntries(model.allFields)) {\n const zodType = convertTypeToZodSchema(fieldInfo.fieldType);\n // In internal schema, all fields that might be absent are optional\n if (fieldInfo.alwaysOptional) {\n // If the type already ends with .optional(), don't double-wrap\n if (zodType.endsWith(\".optional()\")) {\n output += ` ${fieldName}: ${zodType},\\n`;\n } else {\n output += ` ${fieldName}: ${zodType}.optional(),\\n`;\n }\n } else {\n output += ` ${fieldName}: ${zodType},\\n`;\n }\n }\n\n output += `}).passthrough();\\n\\n`;\n }\n\n return output;\n}\n\n/**\n * Generate _internal/types.ts, _internal/upgrades.ts, and _internal/schema.ts\n * from a versioned schema chain.\n *\n * @param schema - The schema definition (initial or versioned)\n * @returns Object containing generated code for each internal file\n */\nexport function generateInternalFromSchema(\n schema: SchemaDefinition,\n): InternalTypesOutput {\n const { chain } = resolveSchemaChain(schema);\n const latestSchema = chain[chain.length - 1]!.schema;\n\n const allRecordModels = collectRecordModels(chain);\n\n const internalTypes = generateInternalTypes(allRecordModels);\n const upgrades = generateUpgrades(allRecordModels, latestSchema);\n const internalSchema = generateInternalSchemaContent(allRecordModels);\n\n return { internalTypes, upgrades, internalSchema };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateInternalFromSchema.js","names":["GENERATED_FILE_HEADER","convertFieldTypeToDescriptor","convertFieldTypeToInternalTypeScript","convertFieldTypeToInternalZod","sortedEntries","map","Array","from","entries","sort","a","b","localeCompare","collectRecordModels","chain","allRecordModels","Map","version","ir","modelKey","modelDef","Object","models","type","has","set","allFields","steps","model","get","field","record","fields","existing","key","fieldType","isOptional","presentInVersions","Set","alwaysOptional","everOptional","add","i","length","prevEntry","currEntry","currModelDef","prevModelDef","prevFields","f","currFields","addedFields","recordUpgrades","migrations","fieldKey","annotation","derivedFrom","forwardSource","removedFields","push","size","name","addedInVersion","totalVersions","values","fieldInfo","generateInternalTypes","output","fieldName","tsType","optional","generateUpgrades","latestIr","hasRecords","hasUnions","some","m","imports","join","typeDescriptor","step","fieldMeta","d","default","undefined","JSON","stringify","union","discriminant","variantKey","variantModelKey","variants","generateInternalSchemaContent","zodType","generateInternalFromChain","resolved","internalTypes","upgrades","internalSchema"],"sources":["generateInternalFromSchema.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 {\n IFieldTypeUnion,\n IRealTimeDocumentSchema,\n} from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\nimport {\n convertFieldTypeToDescriptor,\n convertFieldTypeToInternalTypeScript,\n convertFieldTypeToInternalZod,\n} from \"../ir/irFieldHelpers.js\";\nimport type { ResolvedIrChain, VersionedIrEntry } from \"./resolveSchemaChain.js\";\n\nexport interface InternalTypesOutput {\n /** _internal/types.ts content */\n internalTypes: string;\n /** _internal/upgrades.ts content */\n upgrades: string;\n /** _internal/schema.ts content */\n internalSchema: string;\n}\n\n/** Collected info about all fields for a model across all versions. */\ninterface AllFieldInfo {\n fieldType: IFieldTypeUnion;\n isOptional: boolean;\n /** Versions where this field exists. */\n presentInVersions: Set<number>;\n /** Whether field is always optional. */\n alwaysOptional: boolean;\n /** Whether field is optional in at least one version. */\n everOptional: boolean;\n}\n\n/**\n * Represents an upgrade step for a model between version transitions.\n */\ninterface UpgradeStep {\n name: string;\n addedInVersion: number;\n fields: Map<string, { derivedFrom: string[]; forwardSource: string; default?: unknown }>;\n removedFields: string[];\n}\n\ninterface RecordModelInfo {\n allFields: Map<string, AllFieldInfo>;\n steps: UpgradeStep[];\n}\n\n/**\n * Helper to iterate sorted entries of a Map.\n */\nfunction sortedEntries<V>(map: Map<string, V>): [string, V][] {\n return Array.from(map.entries()).sort(([a], [b]) => a.localeCompare(b));\n}\n\n/**\n * Collect all record model info across all versions and compute upgrade steps.\n */\nfunction collectRecordModels(\n chain: VersionedIrEntry[],\n): Map<string, RecordModelInfo> {\n const allRecordModels = new Map<string, RecordModelInfo>();\n\n // Initialize models from all versions\n for (const { version, ir } of chain) {\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"record\") continue;\n\n if (!allRecordModels.has(modelKey)) {\n allRecordModels.set(modelKey, {\n allFields: new Map(),\n steps: [],\n });\n }\n\n const model = allRecordModels.get(modelKey)!;\n\n for (const field of modelDef.record.fields) {\n const existing = model.allFields.get(field.key);\n if (existing == null) {\n model.allFields.set(field.key, {\n fieldType: field.fieldType,\n isOptional: field.isOptional === true,\n presentInVersions: new Set([version]),\n alwaysOptional: field.isOptional === true,\n everOptional: field.isOptional === true,\n });\n } else {\n existing.presentInVersions.add(version);\n if (field.isOptional !== true) {\n existing.alwaysOptional = false;\n }\n if (field.isOptional === true) {\n existing.everOptional = true;\n }\n }\n }\n }\n }\n\n // Compute upgrade steps from version diffs\n for (let i = 1; i < chain.length; i++) {\n const prevEntry = chain[i - 1]!;\n const currEntry = chain[i]!;\n\n for (const [modelKey, currModelDef] of Object.entries(currEntry.ir.models)) {\n if (currModelDef.type !== \"record\") continue;\n\n const prevModelDef = prevEntry.ir.models[modelKey];\n if (prevModelDef == null || prevModelDef.type !== \"record\") continue;\n\n const model = allRecordModels.get(modelKey);\n if (model == null) continue;\n\n const prevFields = new Set(prevModelDef.record.fields.map(f => f.key));\n const currFields = new Set(currModelDef.record.fields.map(f => f.key));\n\n // Fields added in this version\n const addedFields = new Map<\n string,\n { derivedFrom: string[]; forwardSource: string; default?: unknown }\n >();\n const recordUpgrades = currEntry.migrations?.[modelKey];\n for (const fieldKey of currFields) {\n if (!prevFields.has(fieldKey)) {\n const annotation = recordUpgrades?.[fieldKey];\n if (annotation != null) {\n addedFields.set(fieldKey, {\n derivedFrom: [...annotation.derivedFrom],\n forwardSource: annotation.forwardSource,\n });\n } else {\n addedFields.set(fieldKey, {\n derivedFrom: [],\n forwardSource: \"() => undefined\",\n });\n }\n }\n }\n\n // Fields removed in this version\n const removedFields: string[] = [];\n for (const fieldKey of prevFields) {\n if (!currFields.has(fieldKey)) {\n removedFields.push(fieldKey);\n }\n }\n\n if (addedFields.size > 0 || removedFields.length > 0) {\n model.steps.push({\n name: `v${currEntry.version}`,\n addedInVersion: currEntry.version,\n fields: addedFields,\n removedFields,\n });\n }\n }\n }\n\n // Mark fields that are not present in ALL versions as optional in internal type\n const totalVersions = chain.length;\n for (const model of allRecordModels.values()) {\n for (const [, fieldInfo] of model.allFields) {\n if (fieldInfo.presentInVersions.size < totalVersions) {\n fieldInfo.alwaysOptional = true;\n }\n }\n }\n\n return allRecordModels;\n}\n\n/**\n * Generate _internal/types.ts content.\n */\nfunction generateInternalTypes(\n allRecordModels: Map<string, RecordModelInfo>,\n): string {\n let output = GENERATED_FILE_HEADER;\n output += \"\\n\";\n\n for (const [modelKey, model] of sortedEntries(allRecordModels)) {\n output += `/** Internal representation containing all fields across all schema versions. */\\n`;\n output += `export interface ${modelKey}__Internal {\\n`;\n\n for (const [fieldName, fieldInfo] of sortedEntries(model.allFields)) {\n const tsType = convertFieldTypeToInternalTypeScript(\n fieldInfo.fieldType,\n fieldInfo.isOptional,\n );\n const optional = fieldInfo.alwaysOptional ? \"?\" : \"\";\n output += ` readonly ${fieldName}${optional}: ${tsType};\\n`;\n }\n\n output += \"}\\n\\n\";\n }\n\n return output;\n}\n\n/**\n * Generate _internal/upgrades.ts content.\n */\nfunction generateUpgrades(\n allRecordModels: Map<string, RecordModelInfo>,\n latestIr: IRealTimeDocumentSchema,\n): string {\n let output = GENERATED_FILE_HEADER;\n\n const hasRecords = allRecordModels.size > 0;\n const hasUnions = Object.values(latestIr.models).some(m => m.type === \"union\");\n\n const imports: string[] = [];\n if (hasRecords) imports.push(\"UpgradeRegistry\");\n if (hasUnions) imports.push(\"UnionUpgradeRegistry\");\n\n if (imports.length > 0) {\n output += `import type { ${\n imports.join(\", \")\n } } from \"@palantir/pack.document-schema.model-types\";\\n\\n`;\n }\n\n for (const [modelKey, model] of sortedEntries(allRecordModels)) {\n output += `export const ${modelKey}Upgrades: UpgradeRegistry<\"${modelKey}\"> = {\\n`;\n output += ` modelName: \"${modelKey}\",\\n`;\n\n // allFields\n output += ` allFields: {\\n`;\n for (const [fieldName, fieldInfo] of sortedEntries(model.allFields)) {\n const typeDescriptor = convertFieldTypeToDescriptor(\n fieldInfo.fieldType,\n fieldInfo.isOptional,\n );\n output += ` ${fieldName}: { type: ${typeDescriptor} },\\n`;\n }\n output += ` },\\n`;\n\n // steps\n output += ` steps: [\\n`;\n for (const step of model.steps) {\n output += ` {\\n`;\n output += ` name: \"${step.name}\",\\n`;\n output += ` addedInVersion: ${step.addedInVersion},\\n`;\n output += ` fields: {\\n`;\n for (const [fieldName, fieldMeta] of step.fields) {\n output += ` ${fieldName}: {\\n`;\n output += ` derivedFrom: [${\n fieldMeta.derivedFrom.map(d => `\"${d}\"`).join(\", \")\n }],\\n`;\n output += ` forward: ${fieldMeta.forwardSource},\\n`;\n if (fieldMeta.default !== undefined) {\n output += ` default: ${JSON.stringify(fieldMeta.default)},\\n`;\n }\n output += ` },\\n`;\n }\n output += ` },\\n`;\n if (step.removedFields.length > 0) {\n output += ` removedFields: [${step.removedFields.map(f => `\"${f}\"`).join(\", \")}],\\n`;\n }\n output += ` },\\n`;\n }\n output += ` ],\\n`;\n\n output += `};\\n\\n`;\n }\n\n // Generate UnionUpgradeRegistry entries for union models\n for (const [modelKey, modelDef] of Object.entries(latestIr.models)) {\n if (modelDef.type !== \"union\") continue;\n\n const union = modelDef.union;\n output += `export const ${modelKey}Upgrades: UnionUpgradeRegistry<\"${modelKey}\"> = {\\n`;\n output += ` modelName: \"${modelKey}\",\\n`;\n output += ` discriminant: \"${union.discriminant}\",\\n`;\n output += ` variants: {\\n`;\n for (const [variantKey, variantModelKey] of Object.entries(union.variants)) {\n output += ` \"${variantKey}\": \"${variantModelKey}\",\\n`;\n }\n output += ` },\\n`;\n output += `};\\n\\n`;\n }\n\n return output;\n}\n\n/**\n * Generate _internal/schema.ts content.\n */\nfunction generateInternalSchemaContent(\n allRecordModels: Map<string, RecordModelInfo>,\n): string {\n let output = GENERATED_FILE_HEADER;\n output += `import { z } from \"zod\";\\n\\n`;\n\n for (const [modelKey, model] of sortedEntries(allRecordModels)) {\n output += `export const ${modelKey}InternalSchema = z.object({\\n`;\n\n for (const [fieldName, fieldInfo] of sortedEntries(model.allFields)) {\n // Use everOptional: a field optional in ANY version must stay optional\n // in the internal schema because older documents may legitimately omit it.\n const zodType = convertFieldTypeToInternalZod(\n fieldInfo.fieldType,\n fieldInfo.alwaysOptional || fieldInfo.everOptional,\n );\n output += ` ${fieldName}: ${zodType},\\n`;\n }\n\n output += `}).passthrough();\\n\\n`;\n }\n\n return output;\n}\n\n/**\n * Generate _internal/types.ts, _internal/upgrades.ts, and _internal/schema.ts\n * from an already-resolved versioned IR chain.\n */\nexport function generateInternalFromChain(\n resolved: ResolvedIrChain,\n): InternalTypesOutput {\n const { chain } = resolved;\n const latestIr = chain[chain.length - 1]!.ir;\n\n const allRecordModels = collectRecordModels(chain);\n\n const internalTypes = generateInternalTypes(allRecordModels);\n const upgrades = generateUpgrades(allRecordModels, latestIr);\n const internalSchema = generateInternalSchemaContent(allRecordModels);\n\n return { internalTypes, upgrades, internalSchema };\n}\n"],"mappings":"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","ignoreList":[]}