@palantir/pack.document-schema.type-gen 0.32.0 → 0.33.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 (122) hide show
  1. package/README.md +7 -0
  2. package/build/esm/commands/ir/__tests__/irUpdateSchemaHandler.test.js +96 -0
  3. package/build/esm/commands/ir/__tests__/irUpdateSchemaHandler.test.js.map +1 -0
  4. package/build/esm/commands/ir/__tests__/resolveIrInput.test.js +80 -0
  5. package/build/esm/commands/ir/__tests__/resolveIrInput.test.js.map +1 -1
  6. package/build/esm/commands/ir/irDeployHandler.js +5 -0
  7. package/build/esm/commands/ir/irDeployHandler.js.map +1 -1
  8. package/build/esm/commands/ir/irGenAssetHandler.js +6 -1
  9. package/build/esm/commands/ir/irGenAssetHandler.js.map +1 -1
  10. package/build/esm/commands/ir/irGenTypesHandler.js +7 -3
  11. package/build/esm/commands/ir/irGenTypesHandler.js.map +1 -1
  12. package/build/esm/commands/ir/irUpdateSchemaHandler.js +18 -11
  13. package/build/esm/commands/ir/irUpdateSchemaHandler.js.map +1 -1
  14. package/build/esm/commands/ir/resolveIrInput.js +6 -5
  15. package/build/esm/commands/ir/resolveIrInput.js.map +1 -1
  16. package/build/esm/commands/schema/registerSchemaCommands.js +1 -1
  17. package/build/esm/commands/schema/registerSchemaCommands.js.map +1 -1
  18. package/build/esm/commands/schema/schemaIrHandler.js +15 -8
  19. package/build/esm/commands/schema/schemaIrHandler.js.map +1 -1
  20. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.js.map +1 -1
  21. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js +1 -1
  22. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js.map +1 -1
  23. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js +1 -1
  24. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js.map +1 -1
  25. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js +1 -1
  26. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js.map +1 -1
  27. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js +1 -1
  28. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js.map +1 -1
  29. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js +1 -1
  30. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js.map +1 -1
  31. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js +1 -1
  32. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js.map +1 -1
  33. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js +1 -1
  34. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js.map +1 -1
  35. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js +1 -1
  36. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js.map +1 -1
  37. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js +1 -1
  38. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js.map +1 -1
  39. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js +1 -1
  40. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js.map +1 -1
  41. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js +1 -1
  42. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js.map +1 -1
  43. package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js +35 -0
  44. package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js.map +1 -1
  45. package/build/esm/utils/ir/convertIrToWireSchema.js +1 -0
  46. package/build/esm/utils/ir/convertIrToWireSchema.js.map +1 -1
  47. package/build/esm/utils/schema/__tests__/__snapshots__/generateDocumentTypeFromSchema/with-name-and-description.js +1 -1
  48. package/build/esm/utils/schema/__tests__/__snapshots__/generateDocumentTypeFromSchema/with-name-and-description.js.map +1 -1
  49. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/single-version.js.map +1 -1
  50. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/three-version-chain.js.map +1 -1
  51. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/two-version.js.map +1 -1
  52. package/build/esm/utils/schema/__tests__/assertSdkNamesUnique.test.js +178 -0
  53. package/build/esm/utils/schema/__tests__/assertSdkNamesUnique.test.js.map +1 -0
  54. package/build/esm/utils/schema/__tests__/generateInternalFromSchema.test.js +40 -1
  55. package/build/esm/utils/schema/__tests__/generateInternalFromSchema.test.js.map +1 -1
  56. package/build/esm/utils/schema/__tests__/resolveSchemaChain.test.js +75 -3
  57. package/build/esm/utils/schema/__tests__/resolveSchemaChain.test.js.map +1 -1
  58. package/build/esm/utils/schema/assertSdkNamesUnique.js +151 -0
  59. package/build/esm/utils/schema/assertSdkNamesUnique.js.map +1 -0
  60. package/build/esm/utils/schema/generateIndexFromSchema.js +3 -5
  61. package/build/esm/utils/schema/generateIndexFromSchema.js.map +1 -1
  62. package/build/esm/utils/schema/generateInternalFromSchema.js +35 -19
  63. package/build/esm/utils/schema/generateInternalFromSchema.js.map +1 -1
  64. package/build/esm/utils/schema/generateModelMetadataFromSchema.js +9 -11
  65. package/build/esm/utils/schema/generateModelMetadataFromSchema.js.map +1 -1
  66. package/build/esm/utils/schema/generateScopeFromSchema.js +6 -9
  67. package/build/esm/utils/schema/generateScopeFromSchema.js.map +1 -1
  68. package/build/esm/utils/schema/generateVersionedTypesFromSchema.js +8 -9
  69. package/build/esm/utils/schema/generateVersionedTypesFromSchema.js.map +1 -1
  70. package/build/esm/utils/schema/generateVersionedZodFromSchema.js +13 -16
  71. package/build/esm/utils/schema/generateVersionedZodFromSchema.js.map +1 -1
  72. package/build/esm/utils/schema/resolveSchemaChain.js +108 -20
  73. package/build/esm/utils/schema/resolveSchemaChain.js.map +1 -1
  74. package/build/esm/utils/schema/runtimeSchema.js +47 -0
  75. package/build/esm/utils/schema/runtimeSchema.js.map +1 -1
  76. package/build/esm/utils/schema/writeAllSdkFiles.js +2 -0
  77. package/build/esm/utils/schema/writeAllSdkFiles.js.map +1 -1
  78. package/build/esm/utils/steps/__tests__/__snapshots__/types/arrayFields.js.map +1 -1
  79. package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js +1 -1
  80. package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js.map +1 -1
  81. package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js +1 -1
  82. package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js.map +1 -1
  83. package/build/esm/utils/steps/__tests__/__snapshots__/types/refTypes.js.map +1 -1
  84. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleRecord.js.map +1 -1
  85. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js +1 -1
  86. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js.map +1 -1
  87. package/build/esm/utils/steps/convertStepsToIr.js +10 -1
  88. package/build/esm/utils/steps/convertStepsToIr.js.map +1 -1
  89. package/build/types/commands/ir/__tests__/irUpdateSchemaHandler.test.d.ts +2 -0
  90. package/build/types/commands/ir/__tests__/irUpdateSchemaHandler.test.d.ts.map +1 -0
  91. package/build/types/commands/ir/irDeployHandler.d.ts.map +1 -1
  92. package/build/types/commands/ir/irGenAssetHandler.d.ts.map +1 -1
  93. package/build/types/commands/ir/irGenTypesHandler.d.ts.map +1 -1
  94. package/build/types/commands/ir/irUpdateSchemaHandler.d.ts.map +1 -1
  95. package/build/types/commands/ir/resolveIrInput.d.ts +1 -0
  96. package/build/types/commands/ir/resolveIrInput.d.ts.map +1 -1
  97. package/build/types/commands/schema/schemaIrHandler.d.ts +3 -3
  98. package/build/types/commands/schema/schemaIrHandler.d.ts.map +1 -1
  99. package/build/types/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.d.ts +1 -0
  100. package/build/types/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.d.ts.map +1 -1
  101. package/build/types/utils/schema/__tests__/assertSdkNamesUnique.test.d.ts +2 -0
  102. package/build/types/utils/schema/__tests__/assertSdkNamesUnique.test.d.ts.map +1 -0
  103. package/build/types/utils/schema/assertSdkNamesUnique.d.ts +9 -0
  104. package/build/types/utils/schema/assertSdkNamesUnique.d.ts.map +1 -0
  105. package/build/types/utils/schema/generateIndexFromSchema.d.ts.map +1 -1
  106. package/build/types/utils/schema/generateInternalFromSchema.d.ts.map +1 -1
  107. package/build/types/utils/schema/generateModelMetadataFromSchema.d.ts.map +1 -1
  108. package/build/types/utils/schema/generateScopeFromSchema.d.ts.map +1 -1
  109. package/build/types/utils/schema/generateVersionedTypesFromSchema.d.ts.map +1 -1
  110. package/build/types/utils/schema/generateVersionedZodFromSchema.d.ts.map +1 -1
  111. package/build/types/utils/schema/resolveSchemaChain.d.ts +24 -1
  112. package/build/types/utils/schema/resolveSchemaChain.d.ts.map +1 -1
  113. package/build/types/utils/schema/runtimeSchema.d.ts +19 -0
  114. package/build/types/utils/schema/runtimeSchema.d.ts.map +1 -1
  115. package/build/types/utils/schema/writeAllSdkFiles.d.ts.map +1 -1
  116. package/build/types/utils/steps/convertStepsToIr.d.ts +2 -0
  117. package/build/types/utils/steps/convertStepsToIr.d.ts.map +1 -1
  118. package/package.json +5 -5
  119. package/build/esm/utils/unknownVariantSuffix.js +0 -22
  120. package/build/esm/utils/unknownVariantSuffix.js.map +0 -1
  121. package/build/types/utils/unknownVariantSuffix.d.ts +0 -3
  122. package/build/types/utils/unknownVariantSuffix.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"generateInternalFromSchema.js","names":["GENERATED_FILE_HEADER","convertFieldTypeToDescriptor","convertFieldTypeToInternalTypeScript","convertFieldTypeToInternalZod","chainNeedsUpgradeFns","sortedEntries","map","Array","from","entries","sort","a","b","localeCompare","getAddedInVersion","fieldInfo","Math","min","presentInVersions","collectRecordModels","chain","allRecordModels","Map","version","ir","modelKey","modelDef","Object","models","type","has","set","allFields","steps","model","get","field","record","fields","existing","key","fieldType","isOptional","Set","alwaysOptional","everOptional","add","i","length","prevEntry","currEntry","currModelDef","prevModelDef","prevFields","f","currFields","addedFields","recordUpgrades","migrations","fieldKey","annotation","derivedFrom","removedFields","push","size","addedInVersion","totalVersions","values","generateInternalTypes","output","fieldName","tsType","optional","generatePerVersionInternalTypes","perModelVersions","list","sortedModels","versions","sortedFields","generateUpgrades","latestIr","hasRecords","hasUnions","some","m","imports","join","typeDescriptor","step","fieldMeta","d","union","discriminant","variantKey","variantModelKey","variants","generateInternalSchemaContent","zodType","generateUpgradeFns","perModel","neededTypes","currentIdx","findIndex","c","priorVersion","currentVersion","sorted","returnType","pickKeys","generateInternalFromChain","resolved","internalTypes","upgrades","internalSchema","internalUpgradeFns"],"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 IFieldDef,\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 {\n chainNeedsUpgradeFns,\n type ResolvedIrChain,\n type VersionedIrEntry,\n} 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 /** _internal/upgradeFns.ts content */\n internalUpgradeFns: 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 *\n * `fields` only contains entries that require lens treatment — derived fields\n * (`derivedFrom.length > 0`) and required additive fields (`derivedFrom.length\n * === 0 && !isOptional`). Optional additive fields are absent because\n * `undefined` is a legal value at the current version and the lens has no\n * work to do.\n */\ninterface UpgradeStep {\n addedInVersion: number;\n fields: Map<string, { derivedFrom: string[]; isOptional: boolean }>;\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\nfunction getAddedInVersion(fieldInfo: AllFieldInfo): number {\n return Math.min(...fieldInfo.presentInVersions);\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 that require lens treatment. Optional\n // additive fields are skipped — `undefined` is a legal v_current value\n // for them, so the lens has nothing to invent.\n const addedFields = new Map<\n string,\n { derivedFrom: string[]; isOptional: boolean }\n >();\n const recordUpgrades = currEntry.migrations?.[modelKey];\n for (const field of currModelDef.record.fields) {\n const fieldKey = field.key;\n if (prevFields.has(fieldKey)) continue;\n const isOptional = field.isOptional === true;\n const annotation = recordUpgrades?.[fieldKey];\n const derivedFrom = annotation != null ? [...annotation.derivedFrom] : [];\n if (derivedFrom.length === 0 && isOptional) continue;\n addedFields.set(fieldKey, { derivedFrom, isOptional });\n }\n\n // Fields absent from this version relative to the previous one (i.e. deprecated fields).\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 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 per-version internal interfaces (e.g. `ShapeBox__v1`, `ShapeBox__v2`).\n *\n * Each interface contains only the fields present in that version, with their\n * actual optionality taken straight from that version's IR. The downstream\n * `DocumentUpgradeFns` generator uses these so each upgrade function's\n * parameter can `Pick` the prior version's fields and its return type can\n * index the current version's field type precisely.\n */\nfunction generatePerVersionInternalTypes(\n chain: VersionedIrEntry[],\n): string {\n // Group by model so each model's versions appear together in ascending order.\n const perModelVersions = new Map<\n string,\n { version: number; fields: readonly IFieldDef[] }[]\n >();\n\n for (const { version, ir } of chain) {\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"record\") continue;\n let list = perModelVersions.get(modelKey);\n if (list == null) {\n list = [];\n perModelVersions.set(modelKey, list);\n }\n list.push({ version, fields: modelDef.record.fields });\n }\n }\n\n let output = \"\";\n const sortedModels = Array.from(perModelVersions.entries()).sort(([a], [b]) =>\n a.localeCompare(b)\n );\n for (const [modelKey, versions] of sortedModels) {\n for (const { version, fields } of versions) {\n output += `/** Internal representation of ${modelKey} at schema version ${version}. */\\n`;\n output += `export interface ${modelKey}__v${version} {\\n`;\n const sortedFields = [...fields].sort((a, b) => a.key.localeCompare(b.key));\n for (const field of sortedFields) {\n const tsType = convertFieldTypeToInternalTypeScript(\n field.fieldType,\n field.isOptional === true,\n );\n const optional = field.isOptional === true ? \"?\" : \"\";\n output += ` readonly ${field.key}${optional}: ${tsType};\\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}, addedInVersion: ${\n getAddedInVersion(fieldInfo)\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 += ` 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 += ` },\\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/upgradeFns.ts content: a typed `DocumentUpgradeFns`\n * interface enumerating every upgrade function the app must supply at boot.\n *\n * For each `(modelName, v${version}, fieldName)` triple in a step's `fields`,\n * emit one property:\n * - Derived (`derivedFrom.length > 0`):\n * `(oldFields: Pick<<Model>__v<prior>, derivedFrom[number]>) => <Model>__v<current>[fieldName]`.\n * - Required additive (`derivedFrom.length === 0`):\n * `() => <Model>__v<current>[fieldName]`.\n *\n * Optional additive fields are filtered out at step-collection time and don't\n * appear here — `undefined` is a legal v<current> value for them, so the app\n * has no obligation to invent one.\n *\n * The interface is consumed by the generated `DocumentModel` factory in\n * `models.ts`, which requires it as a parameter when the schema needs any\n * upgrade functions. Schemas with no required fields added past v1 emit an\n * empty interface (still exported for type-uniformity in downstream code).\n */\nfunction generateUpgradeFns(\n chain: VersionedIrEntry[],\n allRecordModels: Map<string, RecordModelInfo>,\n): string {\n interface UpgradeFnEntry {\n fieldName: string;\n derivedFrom: readonly string[];\n }\n interface StepEntry {\n currentVersion: number;\n priorVersion: number;\n fields: UpgradeFnEntry[];\n }\n\n const perModel = new Map<string, StepEntry[]>();\n const neededTypes = new Set<string>();\n\n for (const [modelKey, model] of sortedEntries(allRecordModels)) {\n for (const step of model.steps) {\n const currentIdx = chain.findIndex(c => c.version === step.addedInVersion);\n if (currentIdx <= 0) continue;\n const priorVersion = chain[currentIdx - 1]!.version;\n\n const fields: UpgradeFnEntry[] = [];\n for (const [fieldName, fieldMeta] of step.fields) {\n fields.push({ fieldName, derivedFrom: [...fieldMeta.derivedFrom] });\n }\n if (fields.length === 0) continue;\n\n let list = perModel.get(modelKey);\n if (list == null) {\n list = [];\n perModel.set(modelKey, list);\n }\n list.push({\n currentVersion: step.addedInVersion,\n priorVersion,\n fields,\n });\n // Prior-version type only needed when at least one field derives from it.\n if (fields.some(f => f.derivedFrom.length > 0)) {\n neededTypes.add(`${modelKey}__v${priorVersion}`);\n }\n neededTypes.add(`${modelKey}__v${step.addedInVersion}`);\n }\n }\n\n let output = GENERATED_FILE_HEADER;\n output += `\\n`;\n\n if (neededTypes.size > 0) {\n const sorted = Array.from(neededTypes).sort();\n output += `import type { ${sorted.join(\", \")} } from \"./types.js\";\\n\\n`;\n }\n\n output += `/**\\n`;\n output += ` * Typed upgrade functions the application must supply at boot. Coverage is\\n`;\n output +=\n ` * exhaustive: missing or extra entries fail type-check at the \\`DocumentModel(...)\\`\\n`;\n output += ` * call site. Derived fields receive their declared source fields; required\\n`;\n output += ` * additive fields receive no arguments. Optional additive fields are absent\\n`;\n output += ` * — \\`undefined\\` is a legal value at the new version, so the runtime lens\\n`;\n output += ` * leaves them alone.\\n`;\n output += ` */\\n`;\n if (perModel.size === 0) {\n output += `// eslint-disable-next-line @typescript-eslint/no-empty-object-type\\n`;\n output += `export interface DocumentUpgradeFns {}\\n`;\n } else {\n output += `export interface DocumentUpgradeFns {\\n`;\n for (\n const [modelKey, steps] of Array.from(perModel.entries()).sort(([a], [b]) =>\n a.localeCompare(b)\n )\n ) {\n output += ` ${modelKey}: {\\n`;\n for (const step of steps) {\n output += ` v${step.currentVersion}: {\\n`;\n for (const f of step.fields) {\n const returnType = `${modelKey}__v${step.currentVersion}[\"${f.fieldName}\"]`;\n if (f.derivedFrom.length === 0) {\n output += ` ${f.fieldName}: () => ${returnType};\\n`;\n } else {\n const pickKeys = f.derivedFrom.map(d => `\"${d}\"`).join(\" | \");\n output +=\n ` ${f.fieldName}: (oldFields: Pick<${modelKey}__v${step.priorVersion}, ${pickKeys}>) => ${returnType};\\n`;\n }\n }\n output += ` };\\n`;\n }\n output += ` };\\n`;\n }\n output += `}\\n`;\n }\n\n return output;\n}\n\n/**\n * Generate _internal/types.ts, _internal/upgrades.ts, _internal/schema.ts and\n * _internal/upgradeFns.ts 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 + (chainNeedsUpgradeFns(chain) ? generatePerVersionInternalTypes(chain) : \"\");\n const upgrades = generateUpgrades(allRecordModels, latestIr);\n const internalSchema = generateInternalSchemaContent(allRecordModels);\n const internalUpgradeFns = generateUpgradeFns(chain, allRecordModels);\n\n return { internalTypes, upgrades, internalSchema, internalUpgradeFns };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateInternalFromSchema.js","names":["GENERATED_FILE_HEADER","convertFieldTypeToDescriptor","convertFieldTypeToInternalTypeScript","convertFieldTypeToInternalZod","chainNeedsUpgradeFns","getEntryMinorVersion","upgradeStepKey","internalSchemaName","internalTypeName","upgradesName","versionedInternalTypeName","sortedEntries","map","Array","from","entries","sort","a","b","localeCompare","getAddedInVersion","fieldInfo","Math","min","presentInVersions","collectRecordModels","chain","allRecordModels","Map","version","ir","modelKey","modelDef","Object","models","type","has","set","allFields","steps","model","get","field","record","fields","existing","key","fieldType","isOptional","Set","presentInEntries","alwaysOptional","everOptional","add","i","length","prevEntry","currEntry","currModelDef","prevModelDef","prevFields","f","currFields","addedFields","recordUpgrades","migrations","fieldKey","annotation","derivedFrom","removedFields","push","size","addedInVersion","addedInMinorVersion","totalEntries","values","generateInternalTypes","output","fieldName","tsType","optional","generatePerVersionInternalTypes","perModelVersions","list","sortedModels","versions","sortedFields","generateUpgrades","latestIr","hasRecords","hasUnions","some","m","imports","join","typeDescriptor","step","fieldMeta","d","union","discriminant","variantKey","variantModelKey","variants","generateInternalSchemaContent","zodType","generateUpgradeFns","perModel","neededTypes","currentIdx","findIndex","c","priorVersion","undefined","stepKey","currentVersion","sorted","currentType","returnType","priorType","pickKeys","generateInternalFromChain","resolved","stepChain","internalTypes","upgrades","internalSchema","internalUpgradeFns"],"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 IFieldDef,\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 {\n chainNeedsUpgradeFns,\n getEntryMinorVersion,\n type ResolvedIrChain,\n upgradeStepKey,\n type VersionedIrEntry,\n} from \"./resolveSchemaChain.js\";\nimport {\n internalSchemaName,\n internalTypeName,\n upgradesName,\n versionedInternalTypeName,\n} 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 /** _internal/upgradeFns.ts content */\n internalUpgradeFns: string;\n}\n\n/** Collected info about all fields for a model across all versions. */\ninterface AllFieldInfo {\n fieldType: IFieldTypeUnion;\n isOptional: boolean;\n /** Major versions where this field exists. */\n presentInVersions: Set<number>;\n /** How many versions have this field, counting 3.0, 3.1 and 3.2 separately. Fewer than all → optional. */\n presentInEntries: 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 *\n * `fields` only contains entries that require lens treatment — derived fields\n * (`derivedFrom.length > 0`) and required additive fields (`derivedFrom.length\n * === 0 && !isOptional`). Optional additive fields are absent because\n * `undefined` is a legal value at the current version and the lens has no\n * work to do.\n */\ninterface UpgradeStep {\n addedInVersion: number;\n addedInMinorVersion: number;\n fields: Map<string, UpgradeStepField>;\n removedFields: string[];\n}\n\ninterface UpgradeStepField {\n derivedFrom: string[];\n isOptional: boolean;\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\nfunction getAddedInVersion(fieldInfo: AllFieldInfo): number {\n return Math.min(...fieldInfo.presentInVersions);\n}\n\n/**\n * Collect all record model info across all versions and compute upgrade steps.\n * Takes the full chain (with minor versions), so a field added in 1.1 gets its\n * own step and counts as missing from 1.0 records.\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 presentInEntries: 1,\n alwaysOptional: field.isOptional === true,\n everOptional: field.isOptional === true,\n });\n } else {\n existing.presentInVersions.add(version);\n existing.presentInEntries += 1;\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 that require lens treatment. Optional\n // additive fields are skipped — `undefined` is a legal v_current value\n // for them, so the lens has nothing to invent.\n const addedFields = new Map<string, UpgradeStepField>();\n const recordUpgrades = currEntry.migrations?.[modelKey];\n for (const field of currModelDef.record.fields) {\n const fieldKey = field.key;\n if (prevFields.has(fieldKey)) continue;\n const isOptional = field.isOptional === true;\n const annotation = recordUpgrades?.[fieldKey];\n const derivedFrom = annotation != null ? [...annotation.derivedFrom] : [];\n if (derivedFrom.length === 0 && isOptional) continue;\n addedFields.set(fieldKey, { derivedFrom, isOptional });\n }\n\n // Fields absent from this version relative to the previous one (i.e. deprecated fields).\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 addedInVersion: currEntry.version,\n addedInMinorVersion: getEntryMinorVersion(currEntry),\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 totalEntries = chain.length;\n for (const model of allRecordModels.values()) {\n for (const [, fieldInfo] of model.allFields) {\n if (fieldInfo.presentInEntries < totalEntries) {\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 ${internalTypeName(modelKey)} {\\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 per-version internal interfaces (e.g. `ShapeBox__v1`, `ShapeBox__v2`).\n *\n * Each interface contains only the fields present in that version, with their\n * actual optionality taken straight from that version's IR. The downstream\n * `DocumentUpgradeFns` generator uses these so each upgrade function's\n * parameter can `Pick` the prior version's fields and its return type can\n * index the current version's field type precisely.\n */\nfunction generatePerVersionInternalTypes(\n chain: VersionedIrEntry[],\n): string {\n // Group by model so each model's versions appear together in ascending order.\n const perModelVersions = new Map<\n string,\n { version: number; fields: readonly IFieldDef[] }[]\n >();\n\n for (const { version, ir } of chain) {\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"record\") continue;\n let list = perModelVersions.get(modelKey);\n if (list == null) {\n list = [];\n perModelVersions.set(modelKey, list);\n }\n list.push({ version, fields: modelDef.record.fields });\n }\n }\n\n let output = \"\";\n const sortedModels = Array.from(perModelVersions.entries()).sort(([a], [b]) =>\n a.localeCompare(b)\n );\n for (const [modelKey, versions] of sortedModels) {\n for (const { version, fields } of versions) {\n output += `/** Internal representation of ${modelKey} at schema version ${version}. */\\n`;\n output += `export interface ${versionedInternalTypeName(modelKey, version)} {\\n`;\n const sortedFields = [...fields].sort((a, b) => a.key.localeCompare(b.key));\n for (const field of sortedFields) {\n const tsType = convertFieldTypeToInternalTypeScript(\n field.fieldType,\n field.isOptional === true,\n );\n const optional = field.isOptional === true ? \"?\" : \"\";\n output += ` readonly ${field.key}${optional}: ${tsType};\\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 ${upgradesName(modelKey)}: 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}, addedInVersion: ${\n getAddedInVersion(fieldInfo)\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 += ` addedInVersion: ${step.addedInVersion},\\n`;\n if (step.addedInMinorVersion > 0) {\n output += ` addedInMinorVersion: ${step.addedInMinorVersion},\\n`;\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 += ` },\\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 ${upgradesName(modelKey)}: 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 ${internalSchemaName(modelKey)} = 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/upgradeFns.ts content: a typed `DocumentUpgradeFns`\n * interface enumerating every upgrade function the app must supply at boot.\n *\n * For each `(modelName, v${version}, fieldName)` triple in a step's `fields`,\n * emit one property:\n * - Derived (`derivedFrom.length > 0`):\n * `(oldFields: Pick<<Model>__v<prior>, derivedFrom[number]>) => <Model>__v<current>[fieldName]`.\n * - Required additive (`derivedFrom.length === 0`):\n * `() => <Model>__v<current>[fieldName]`.\n *\n * Optional additive fields are filtered out at step-collection time and don't\n * appear here — `undefined` is a legal v<current> value for them, so the app\n * has no obligation to invent one.\n *\n * The interface is consumed by the generated `DocumentModel` factory in\n * `models.ts`, which requires it as a parameter when the schema needs any\n * upgrade functions. Schemas with no required fields added past v1 emit an\n * empty interface (still exported for type-uniformity in downstream code).\n */\nfunction generateUpgradeFns(\n chain: VersionedIrEntry[],\n allRecordModels: Map<string, RecordModelInfo>,\n): string {\n interface UpgradeFnEntry {\n fieldName: string;\n derivedFrom: readonly string[];\n }\n interface StepEntry {\n stepKey: string;\n currentVersion: number;\n priorVersion: number | undefined;\n fields: UpgradeFnEntry[];\n }\n\n const perModel = new Map<string, StepEntry[]>();\n const neededTypes = new Set<string>();\n\n for (const [modelKey, model] of sortedEntries(allRecordModels)) {\n for (const step of model.steps) {\n // A derived field's function takes the previous major's type, e.g. `Pick<ShapeBox__v1, \"color\">`\n // for a 2.0 step. Minor versions can't use `derivedFrom`, so minor steps never need it.\n const currentIdx = chain.findIndex(c => c.version === step.addedInVersion);\n const priorVersion = currentIdx > 0 ? chain[currentIdx - 1]!.version : undefined;\n\n const fields: UpgradeFnEntry[] = [];\n for (const [fieldName, fieldMeta] of step.fields) {\n fields.push({ fieldName, derivedFrom: [...fieldMeta.derivedFrom] });\n }\n if (fields.length === 0) continue;\n if (priorVersion == null && fields.some(f => f.derivedFrom.length > 0)) continue;\n\n let list = perModel.get(modelKey);\n if (list == null) {\n list = [];\n perModel.set(modelKey, list);\n }\n list.push({\n stepKey: upgradeStepKey(step.addedInVersion, step.addedInMinorVersion),\n currentVersion: step.addedInVersion,\n priorVersion,\n fields,\n });\n // Prior-version type only needed when at least one field derives from it.\n if (priorVersion != null && fields.some(f => f.derivedFrom.length > 0)) {\n neededTypes.add(versionedInternalTypeName(modelKey, priorVersion));\n }\n neededTypes.add(versionedInternalTypeName(modelKey, step.addedInVersion));\n }\n }\n\n let output = GENERATED_FILE_HEADER;\n output += `\\n`;\n\n if (neededTypes.size > 0) {\n const sorted = Array.from(neededTypes).sort();\n output += `import type { ${sorted.join(\", \")} } from \"./types.js\";\\n\\n`;\n }\n\n output += `/**\\n`;\n output += ` * Typed upgrade functions the application must supply at boot. Coverage is\\n`;\n output +=\n ` * exhaustive: missing or extra entries fail type-check at the \\`DocumentModel(...)\\`\\n`;\n output += ` * call site. Derived fields receive their declared source fields; required\\n`;\n output += ` * additive fields receive no arguments. Optional additive fields are absent\\n`;\n output += ` * — \\`undefined\\` is a legal value at the new version, so the runtime lens\\n`;\n output += ` * leaves them alone. Keys are \\`v2\\` for version 2.0 and \\`v2_1\\` for 2.1.\\n`;\n output += ` */\\n`;\n if (perModel.size === 0) {\n output += `// eslint-disable-next-line @typescript-eslint/no-empty-object-type\\n`;\n output += `export interface DocumentUpgradeFns {}\\n`;\n } else {\n output += `export interface DocumentUpgradeFns {\\n`;\n for (\n const [modelKey, steps] of Array.from(perModel.entries()).sort(([a], [b]) =>\n a.localeCompare(b)\n )\n ) {\n output += ` ${modelKey}: {\\n`;\n for (const step of steps) {\n output += ` ${step.stepKey}: {\\n`;\n const currentType = versionedInternalTypeName(modelKey, step.currentVersion);\n for (const f of step.fields) {\n const returnType = `${currentType}[\"${f.fieldName}\"]`;\n if (f.derivedFrom.length === 0) {\n output += ` ${f.fieldName}: () => ${returnType};\\n`;\n } else {\n // Steps with derived fields always have a prior version (others are skipped above).\n const priorType = versionedInternalTypeName(modelKey, step.priorVersion!);\n const pickKeys = f.derivedFrom.map(d => `\"${d}\"`).join(\" | \");\n output +=\n ` ${f.fieldName}: (oldFields: Pick<${priorType}, ${pickKeys}>) => ${returnType};\\n`;\n }\n }\n output += ` };\\n`;\n }\n output += ` };\\n`;\n }\n output += `}\\n`;\n }\n\n return output;\n}\n\n/**\n * Generate _internal/types.ts, _internal/upgrades.ts, _internal/schema.ts and\n * _internal/upgradeFns.ts from an already-resolved versioned IR chain.\n */\nexport function generateInternalFromChain(\n resolved: ResolvedIrChain,\n): InternalTypesOutput {\n const { chain } = resolved;\n const stepChain = resolved.stepChain ?? chain;\n const latestIr = chain[chain.length - 1]!.ir;\n\n const allRecordModels = collectRecordModels(stepChain);\n\n const internalTypes = generateInternalTypes(allRecordModels)\n + (chainNeedsUpgradeFns(stepChain) ? generatePerVersionInternalTypes(chain) : \"\");\n const upgrades = generateUpgrades(allRecordModels, latestIr);\n const internalSchema = generateInternalSchemaContent(allRecordModels);\n const internalUpgradeFns = generateUpgradeFns(chain, allRecordModels);\n\n return { internalTypes, upgrades, internalSchema, internalUpgradeFns };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -14,11 +14,10 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { formatVariantName } from "@palantir/pack.schema";
18
17
  import { GENERATED_FILE_HEADER } from "../generatedFileHeader.js";
19
18
  import { findExternalRefType } from "../ir/irFieldHelpers.js";
20
19
  import { chainNeedsUpgradeFns, resolveMinVersion } from "./resolveSchemaChain.js";
21
- import { INTERNAL_UPGRADE_FNS_PATH, INTERNAL_UPGRADES_PATH, modelName, SCHEMA_REEXPORT_PATH, schemaName, TYPES_REEXPORT_PATH } from "./runtimeSchema.js";
20
+ import { INTERNAL_UPGRADE_FNS_PATH, INTERNAL_UPGRADES_PATH, modelName, SCHEMA_REEXPORT_PATH, schemaName, TYPES_REEXPORT_PATH, unionVariantName, upgradesName } from "./runtimeSchema.js";
22
21
  function extractExternalRefFieldTypes(record) {
23
22
  const refs = [];
24
23
  for (const field of record.fields) {
@@ -42,7 +41,8 @@ export function generateModelMetadataFromChain(resolved, minSupportedVersion) {
42
41
  minVersion
43
42
  } = resolveMinVersion(chain, minSupportedVersion);
44
43
  const latestIr = chain[chain.length - 1].ir;
45
- const needsUpgradeFns = chainNeedsUpgradeFns(chain);
44
+ const stepChain = resolved.stepChain ?? chain;
45
+ const needsUpgradeFns = chainNeedsUpgradeFns(stepChain);
46
46
 
47
47
  // --- Generate models.ts ---
48
48
  let output = GENERATED_FILE_HEADER;
@@ -59,7 +59,7 @@ export function generateModelMetadataFromChain(resolved, minSupportedVersion) {
59
59
  } else if (modelDef.type === "union") {
60
60
  unionNames.push(modelKey);
61
61
  for (const variantName of Object.keys(modelDef.union.variants)) {
62
- const variantModelName = `${modelKey}${formatVariantName(variantName)}`;
62
+ const variantModelName = unionVariantName(modelKey, variantName);
63
63
  variantNames.push(variantModelName);
64
64
  unionByVariantName.set(variantModelName, modelKey);
65
65
  }
@@ -85,8 +85,8 @@ export function generateModelMetadataFromChain(resolved, minSupportedVersion) {
85
85
  }
86
86
 
87
87
  // Upgrade imports (only if there are upgrades)
88
- const upgradeNames = [...recordNames, ...unionNames].map(n => `${n}Upgrades`);
89
- const needsUpgradeRegistry = chain.length > 1 || unionNames.length > 0;
88
+ const upgradeNames = [...recordNames, ...unionNames].map(n => upgradesName(n));
89
+ const needsUpgradeRegistry = stepChain.length > 1 || unionNames.length > 0;
90
90
  if (needsUpgradeRegistry && upgradeNames.length > 0) {
91
91
  output += `import { ${upgradeNames.join(", ")} } from "${INTERNAL_UPGRADES_PATH}";\n`;
92
92
  }
@@ -127,8 +127,7 @@ export function generateModelMetadataFromChain(resolved, minSupportedVersion) {
127
127
 
128
128
  // Generate variant models
129
129
  for (const variantName of Object.keys(union.variants)) {
130
- const formattedVariant = formatVariantName(variantName);
131
- const variantTypeName = `${modelKey}${formattedVariant}`;
130
+ const variantTypeName = unionVariantName(modelKey, variantName);
132
131
  const variantMetadata = [];
133
132
  variantMetadata.push(` discriminant: "${union.discriminant}",`);
134
133
  variantMetadata.push(` name: "${variantTypeName}",`);
@@ -150,8 +149,7 @@ export function generateModelMetadataFromChain(resolved, minSupportedVersion) {
150
149
  } else if (modelDef.type === "union") {
151
150
  modelEntries.push(` ${modelKey}: ${modelName(modelKey)}`);
152
151
  for (const variantName of Object.keys(modelDef.union.variants)) {
153
- const formattedVariant = formatVariantName(variantName);
154
- const variantTypeName = `${modelKey}${formattedVariant}`;
152
+ const variantTypeName = unionVariantName(modelKey, variantName);
155
153
  modelEntries.push(` ${variantTypeName}: ${modelName(variantTypeName)}`);
156
154
  }
157
155
  }
@@ -162,7 +160,7 @@ export function generateModelMetadataFromChain(resolved, minSupportedVersion) {
162
160
  const allUpgradeNames = [...recordNames, ...unionNames];
163
161
  if (needsUpgradeRegistry && allUpgradeNames.length > 0) {
164
162
  // A variant model uses its union's registry, which finds the variant by its discriminant.
165
- const upgradeEntries = [...allUpgradeNames.map(n => ` ${n}: ${n}Upgrades,`), ...variantNames.map(n => ` ${n}: ${unionByVariantName.get(n)}Upgrades,`)].join("\n");
163
+ const upgradeEntries = [...allUpgradeNames.map(n => ` ${n}: ${upgradesName(n)},`), ...variantNames.map(n => ` ${n}: ${upgradesName(unionByVariantName.get(n))},`)].join("\n");
166
164
  upgradesBlock = ` upgrades: {\n${upgradeEntries}\n },\n`;
167
165
  } else {
168
166
  upgradesBlock = "";
@@ -1 +1 @@
1
- {"version":3,"file":"generateModelMetadataFromSchema.js","names":["formatVariantName","GENERATED_FILE_HEADER","findExternalRefType","chainNeedsUpgradeFns","resolveMinVersion","INTERNAL_UPGRADE_FNS_PATH","INTERNAL_UPGRADES_PATH","modelName","SCHEMA_REEXPORT_PATH","schemaName","TYPES_REEXPORT_PATH","extractExternalRefFieldTypes","record","refs","field","fields","refType","fieldType","push","key","generateModelMetadataFromChain","resolved","minSupportedVersion","chain","latestVersion","minVersion","latestIr","length","ir","needsUpgradeFns","output","recordNames","unionNames","variantNames","unionByVariantName","Map","modelKey","modelDef","Object","entries","models","type","variantName","keys","union","variants","variantModelName","set","allModelNames","sort","modelTypesImports","join","schemaNames","map","n","upgradeNames","needsUpgradeRegistry","externalRefs","metadataFields","discriminant","formattedVariant","variantTypeName","variantMetadata","modelEntries","upgradesBlock","allUpgradeNames","upgradeEntries","get","metadataBody","modelEntriesBody","e","replace","modelsFile"],"sources":["generateModelMetadataFromSchema.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 { formatVariantName } from \"@palantir/pack.schema\";\nimport type { IRecordDef } from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\nimport { findExternalRefType } from \"../ir/irFieldHelpers.js\";\nimport type { ResolvedIrChain } from \"./resolveSchemaChain.js\";\nimport { chainNeedsUpgradeFns, resolveMinVersion } from \"./resolveSchemaChain.js\";\nimport {\n INTERNAL_UPGRADE_FNS_PATH,\n INTERNAL_UPGRADES_PATH,\n modelName,\n SCHEMA_REEXPORT_PATH,\n schemaName,\n TYPES_REEXPORT_PATH,\n} from \"./runtimeSchema.js\";\n\nexport interface ModelMetadataOutput {\n /** models.ts content -- DocumentModel with version metadata and upgrade references */\n modelsFile: string;\n}\n\nfunction extractExternalRefFieldTypes(\n record: IRecordDef,\n): Array<[string, string]> {\n const refs: Array<[string, string]> = [];\n for (const field of record.fields) {\n const refType = findExternalRefType(field.fieldType);\n if (refType != null) {\n refs.push([field.key, refType]);\n }\n }\n return refs;\n}\n\n/**\n * Generate models.ts from an already-resolved versioned IR chain.\n */\nexport function generateModelMetadataFromChain(\n resolved: ResolvedIrChain,\n minSupportedVersion?: number,\n): ModelMetadataOutput {\n const { chain } = resolved;\n const { latestVersion, minVersion } = resolveMinVersion(chain, minSupportedVersion);\n const latestIr = chain[chain.length - 1]!.ir;\n const needsUpgradeFns = chainNeedsUpgradeFns(chain);\n\n // --- Generate models.ts ---\n let output = GENERATED_FILE_HEADER;\n\n // Collect model names for imports\n const recordNames: string[] = [];\n const unionNames: string[] = [];\n const variantNames: string[] = [];\n // Each variant model's union, e.g. NodeShapeBox -> NodeShape.\n const unionByVariantName = new Map<string, string>();\n\n for (const [modelKey, modelDef] of Object.entries(latestIr.models)) {\n if (modelDef.type === \"record\") {\n recordNames.push(modelKey);\n } else if (modelDef.type === \"union\") {\n unionNames.push(modelKey);\n for (const variantName of Object.keys(modelDef.union.variants)) {\n const variantModelName = `${modelKey}${formatVariantName(variantName)}`;\n variantNames.push(variantModelName);\n unionByVariantName.set(variantModelName, modelKey);\n }\n }\n }\n\n const allModelNames = [...recordNames, ...unionNames, ...variantNames].sort();\n\n // Imports\n const modelTypesImports: string[] = [\"DocumentSchema\"];\n if (recordNames.length > 0) modelTypesImports.push(\"RecordModel\");\n if (unionNames.length > 0) modelTypesImports.push(\"UnionModel\");\n if (needsUpgradeFns) modelTypesImports.push(\"UpgradeFns\");\n\n output += `import type { ${\n modelTypesImports.sort().join(\", \")\n } } from \"@palantir/pack.document-schema.model-types\";\\n`;\n output += `import { Metadata } from \"@palantir/pack.document-schema.model-types\";\\n`;\n\n if (allModelNames.length > 0) {\n output += `import type { ${allModelNames.join(\", \")} } from \"${TYPES_REEXPORT_PATH}\";\\n`;\n }\n\n // Schema imports\n const schemaNames = allModelNames.map(n => schemaName(n));\n if (schemaNames.length > 0) {\n output += `import { ${schemaNames.join(\", \")} } from \"${SCHEMA_REEXPORT_PATH}\";\\n`;\n }\n\n // Upgrade imports (only if there are upgrades)\n const upgradeNames = [...recordNames, ...unionNames].map(n => `${n}Upgrades`);\n const needsUpgradeRegistry = chain.length > 1 || unionNames.length > 0;\n if (needsUpgradeRegistry && upgradeNames.length > 0) {\n output += `import { ${upgradeNames.join(\", \")} } from \"${INTERNAL_UPGRADES_PATH}\";\\n`;\n }\n\n // DocumentUpgradeFns type is needed by the factory's parameter signature.\n if (needsUpgradeFns) {\n output += `import type { DocumentUpgradeFns } from \"${INTERNAL_UPGRADE_FNS_PATH}\";\\n`;\n }\n\n output += \"\\n\";\n\n // Generate model constants\n for (const [modelKey, modelDef] of Object.entries(latestIr.models)) {\n if (modelDef.type === \"record\") {\n const externalRefs = extractExternalRefFieldTypes(modelDef.record);\n const metadataFields: string[] = [];\n\n if (externalRefs.length > 0) {\n const entries = externalRefs.map(([field, type]) => ` ${field}: \"${type}\",`).join(\n \"\\n\",\n );\n metadataFields.push(` externalRefFieldTypes: {\\n${entries}\\n },`);\n }\n metadataFields.push(` name: \"${modelKey}\",`);\n\n output += `export interface ${modelName(modelKey)} extends RecordModel<${modelKey}, typeof ${\n schemaName(modelKey)\n }> {}\\n`;\n output += `export const ${modelName(modelKey)}: ${modelName(modelKey)} = {\\n`;\n output += ` __type: {} as ${modelKey},\\n`;\n output += ` zodSchema: ${schemaName(modelKey)},\\n`;\n output += ` [Metadata]: {\\n${metadataFields.join(\"\\n\")}\\n },\\n`;\n output += `};\\n\\n`;\n } else if (modelDef.type === \"union\") {\n const union = modelDef.union;\n const metadataFields: string[] = [];\n metadataFields.push(` discriminant: \"${union.discriminant}\",`);\n metadataFields.push(` name: \"${modelKey}\",`);\n\n output += `export interface ${modelName(modelKey)} extends UnionModel<${modelKey}, typeof ${\n schemaName(modelKey)\n }> {}\\n`;\n output += `export const ${modelName(modelKey)}: ${modelName(modelKey)} = {\\n`;\n output += ` __type: {} as ${modelKey},\\n`;\n output += ` zodSchema: ${schemaName(modelKey)},\\n`;\n output += ` [Metadata]: {\\n${metadataFields.join(\"\\n\")}\\n },\\n`;\n output += `};\\n\\n`;\n\n // Generate variant models\n for (const variantName of Object.keys(union.variants)) {\n const formattedVariant = formatVariantName(variantName);\n const variantTypeName = `${modelKey}${formattedVariant}`;\n const variantMetadata: string[] = [];\n variantMetadata.push(` discriminant: \"${union.discriminant}\",`);\n variantMetadata.push(` name: \"${variantTypeName}\",`);\n\n output += `export interface ${\n modelName(variantTypeName)\n } extends UnionModel<${variantTypeName}, typeof ${schemaName(variantTypeName)}> {}\\n`;\n output += `export const ${modelName(variantTypeName)}: ${modelName(variantTypeName)} = {\\n`;\n output += ` __type: {} as ${variantTypeName},\\n`;\n output += ` zodSchema: ${schemaName(variantTypeName)},\\n`;\n output += ` [Metadata]: {\\n${variantMetadata.join(\"\\n\")}\\n },\\n`;\n output += `};\\n\\n`;\n }\n }\n }\n\n // Generate DocumentModel\n const modelEntries: string[] = [];\n for (const [modelKey, modelDef] of Object.entries(latestIr.models)) {\n if (modelDef.type === \"record\") {\n modelEntries.push(` ${modelKey}: ${modelName(modelKey)}`);\n } else if (modelDef.type === \"union\") {\n modelEntries.push(` ${modelKey}: ${modelName(modelKey)}`);\n for (const variantName of Object.keys(modelDef.union.variants)) {\n const formattedVariant = formatVariantName(variantName);\n const variantTypeName = `${modelKey}${formattedVariant}`;\n modelEntries.push(` ${variantTypeName}: ${modelName(variantTypeName)}`);\n }\n }\n }\n\n // Build upgrades map (includes both record and union entries)\n let upgradesBlock: string;\n const allUpgradeNames = [...recordNames, ...unionNames];\n if (needsUpgradeRegistry && allUpgradeNames.length > 0) {\n // A variant model uses its union's registry, which finds the variant by its discriminant.\n const upgradeEntries = [\n ...allUpgradeNames.map(n => ` ${n}: ${n}Upgrades,`),\n ...variantNames.map(n => ` ${n}: ${unionByVariantName.get(n)}Upgrades,`),\n ].join(\"\\n\");\n upgradesBlock = ` upgrades: {\\n${upgradeEntries}\\n },\\n`;\n } else {\n upgradesBlock = \"\";\n }\n\n // Common metadata literal: shared between the const and factory forms.\n let metadataBody = ` [Metadata]: {\\n`;\n metadataBody += ` version: ${latestVersion},\\n`;\n if (minVersion !== latestVersion) {\n metadataBody += ` minSupportedVersion: ${minVersion},\\n`;\n }\n metadataBody += upgradesBlock;\n\n const modelEntriesBody = modelEntries.map(e => ` ${e}`).join(\",\\n\");\n\n if (needsUpgradeFns) {\n // Factory form: schema has at least one derived field or required additive\n // field, so the runtime requires the app to supply typed upgrade functions.\n // The factory makes this a compile-time requirement — apps can't get a\n // DocumentSchema value without passing them.\n output += `/**\\n`;\n output += ` * Construct the DocumentModel for this SDK, wiring in the typed forward\\n`;\n output += ` * functions the runtime needs to materialize fields added past v1.\\n`;\n output += ` */\\n`;\n output += `export function DocumentModel(upgradeFns: DocumentUpgradeFns): DocumentSchema {\\n`;\n output += ` return {\\n`;\n output += `${modelEntriesBody},\\n`;\n output += metadataBody;\n output += ` upgradeFns: upgradeFns as unknown as UpgradeFns,\\n`;\n output += ` },\\n`;\n output += ` };\\n`;\n output += `}\\n\\n`;\n output += `export type DocumentModel = ReturnType<typeof DocumentModel>;\\n`;\n } else {\n // Const form: no field added past v1 needs lens treatment, so no upgrade\n // functions are required.\n output += `export const DocumentModel = {\\n`;\n output += `${modelEntriesBody},\\n`;\n // Const form indents one level less than the factory body.\n output += metadataBody.replace(/^ {4}/gm, \" \");\n output += ` },\\n`;\n output += `} as const satisfies DocumentSchema;\\n\\n`;\n output += `export type DocumentModel = typeof DocumentModel;\\n`;\n }\n\n return { modelsFile: output };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateModelMetadataFromSchema.js","names":["GENERATED_FILE_HEADER","findExternalRefType","chainNeedsUpgradeFns","resolveMinVersion","INTERNAL_UPGRADE_FNS_PATH","INTERNAL_UPGRADES_PATH","modelName","SCHEMA_REEXPORT_PATH","schemaName","TYPES_REEXPORT_PATH","unionVariantName","upgradesName","extractExternalRefFieldTypes","record","refs","field","fields","refType","fieldType","push","key","generateModelMetadataFromChain","resolved","minSupportedVersion","chain","latestVersion","minVersion","latestIr","length","ir","stepChain","needsUpgradeFns","output","recordNames","unionNames","variantNames","unionByVariantName","Map","modelKey","modelDef","Object","entries","models","type","variantName","keys","union","variants","variantModelName","set","allModelNames","sort","modelTypesImports","join","schemaNames","map","n","upgradeNames","needsUpgradeRegistry","externalRefs","metadataFields","discriminant","variantTypeName","variantMetadata","modelEntries","upgradesBlock","allUpgradeNames","upgradeEntries","get","metadataBody","modelEntriesBody","e","replace","modelsFile"],"sources":["generateModelMetadataFromSchema.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 { IRecordDef } from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\nimport { findExternalRefType } from \"../ir/irFieldHelpers.js\";\nimport type { ResolvedIrChain } from \"./resolveSchemaChain.js\";\nimport { chainNeedsUpgradeFns, resolveMinVersion } from \"./resolveSchemaChain.js\";\nimport {\n INTERNAL_UPGRADE_FNS_PATH,\n INTERNAL_UPGRADES_PATH,\n modelName,\n SCHEMA_REEXPORT_PATH,\n schemaName,\n TYPES_REEXPORT_PATH,\n unionVariantName,\n upgradesName,\n} from \"./runtimeSchema.js\";\n\nexport interface ModelMetadataOutput {\n /** models.ts content -- DocumentModel with version metadata and upgrade references */\n modelsFile: string;\n}\n\nfunction extractExternalRefFieldTypes(\n record: IRecordDef,\n): Array<[string, string]> {\n const refs: Array<[string, string]> = [];\n for (const field of record.fields) {\n const refType = findExternalRefType(field.fieldType);\n if (refType != null) {\n refs.push([field.key, refType]);\n }\n }\n return refs;\n}\n\n/**\n * Generate models.ts from an already-resolved versioned IR chain.\n */\nexport function generateModelMetadataFromChain(\n resolved: ResolvedIrChain,\n minSupportedVersion?: number,\n): ModelMetadataOutput {\n const { chain } = resolved;\n const { latestVersion, minVersion } = resolveMinVersion(chain, minSupportedVersion);\n const latestIr = chain[chain.length - 1]!.ir;\n const stepChain = resolved.stepChain ?? chain;\n const needsUpgradeFns = chainNeedsUpgradeFns(stepChain);\n\n // --- Generate models.ts ---\n let output = GENERATED_FILE_HEADER;\n\n // Collect model names for imports\n const recordNames: string[] = [];\n const unionNames: string[] = [];\n const variantNames: string[] = [];\n // Each variant model's union, e.g. NodeShapeBox -> NodeShape.\n const unionByVariantName = new Map<string, string>();\n\n for (const [modelKey, modelDef] of Object.entries(latestIr.models)) {\n if (modelDef.type === \"record\") {\n recordNames.push(modelKey);\n } else if (modelDef.type === \"union\") {\n unionNames.push(modelKey);\n for (const variantName of Object.keys(modelDef.union.variants)) {\n const variantModelName = unionVariantName(modelKey, variantName);\n variantNames.push(variantModelName);\n unionByVariantName.set(variantModelName, modelKey);\n }\n }\n }\n\n const allModelNames = [...recordNames, ...unionNames, ...variantNames].sort();\n\n // Imports\n const modelTypesImports: string[] = [\"DocumentSchema\"];\n if (recordNames.length > 0) modelTypesImports.push(\"RecordModel\");\n if (unionNames.length > 0) modelTypesImports.push(\"UnionModel\");\n if (needsUpgradeFns) modelTypesImports.push(\"UpgradeFns\");\n\n output += `import type { ${\n modelTypesImports.sort().join(\", \")\n } } from \"@palantir/pack.document-schema.model-types\";\\n`;\n output += `import { Metadata } from \"@palantir/pack.document-schema.model-types\";\\n`;\n\n if (allModelNames.length > 0) {\n output += `import type { ${allModelNames.join(\", \")} } from \"${TYPES_REEXPORT_PATH}\";\\n`;\n }\n\n // Schema imports\n const schemaNames = allModelNames.map(n => schemaName(n));\n if (schemaNames.length > 0) {\n output += `import { ${schemaNames.join(\", \")} } from \"${SCHEMA_REEXPORT_PATH}\";\\n`;\n }\n\n // Upgrade imports (only if there are upgrades)\n const upgradeNames = [...recordNames, ...unionNames].map(n => upgradesName(n));\n const needsUpgradeRegistry = stepChain.length > 1 || unionNames.length > 0;\n if (needsUpgradeRegistry && upgradeNames.length > 0) {\n output += `import { ${upgradeNames.join(\", \")} } from \"${INTERNAL_UPGRADES_PATH}\";\\n`;\n }\n\n // DocumentUpgradeFns type is needed by the factory's parameter signature.\n if (needsUpgradeFns) {\n output += `import type { DocumentUpgradeFns } from \"${INTERNAL_UPGRADE_FNS_PATH}\";\\n`;\n }\n\n output += \"\\n\";\n\n // Generate model constants\n for (const [modelKey, modelDef] of Object.entries(latestIr.models)) {\n if (modelDef.type === \"record\") {\n const externalRefs = extractExternalRefFieldTypes(modelDef.record);\n const metadataFields: string[] = [];\n\n if (externalRefs.length > 0) {\n const entries = externalRefs.map(([field, type]) => ` ${field}: \"${type}\",`).join(\n \"\\n\",\n );\n metadataFields.push(` externalRefFieldTypes: {\\n${entries}\\n },`);\n }\n metadataFields.push(` name: \"${modelKey}\",`);\n\n output += `export interface ${modelName(modelKey)} extends RecordModel<${modelKey}, typeof ${\n schemaName(modelKey)\n }> {}\\n`;\n output += `export const ${modelName(modelKey)}: ${modelName(modelKey)} = {\\n`;\n output += ` __type: {} as ${modelKey},\\n`;\n output += ` zodSchema: ${schemaName(modelKey)},\\n`;\n output += ` [Metadata]: {\\n${metadataFields.join(\"\\n\")}\\n },\\n`;\n output += `};\\n\\n`;\n } else if (modelDef.type === \"union\") {\n const union = modelDef.union;\n const metadataFields: string[] = [];\n metadataFields.push(` discriminant: \"${union.discriminant}\",`);\n metadataFields.push(` name: \"${modelKey}\",`);\n\n output += `export interface ${modelName(modelKey)} extends UnionModel<${modelKey}, typeof ${\n schemaName(modelKey)\n }> {}\\n`;\n output += `export const ${modelName(modelKey)}: ${modelName(modelKey)} = {\\n`;\n output += ` __type: {} as ${modelKey},\\n`;\n output += ` zodSchema: ${schemaName(modelKey)},\\n`;\n output += ` [Metadata]: {\\n${metadataFields.join(\"\\n\")}\\n },\\n`;\n output += `};\\n\\n`;\n\n // Generate variant models\n for (const variantName of Object.keys(union.variants)) {\n const variantTypeName = unionVariantName(modelKey, variantName);\n const variantMetadata: string[] = [];\n variantMetadata.push(` discriminant: \"${union.discriminant}\",`);\n variantMetadata.push(` name: \"${variantTypeName}\",`);\n\n output += `export interface ${\n modelName(variantTypeName)\n } extends UnionModel<${variantTypeName}, typeof ${schemaName(variantTypeName)}> {}\\n`;\n output += `export const ${modelName(variantTypeName)}: ${modelName(variantTypeName)} = {\\n`;\n output += ` __type: {} as ${variantTypeName},\\n`;\n output += ` zodSchema: ${schemaName(variantTypeName)},\\n`;\n output += ` [Metadata]: {\\n${variantMetadata.join(\"\\n\")}\\n },\\n`;\n output += `};\\n\\n`;\n }\n }\n }\n\n // Generate DocumentModel\n const modelEntries: string[] = [];\n for (const [modelKey, modelDef] of Object.entries(latestIr.models)) {\n if (modelDef.type === \"record\") {\n modelEntries.push(` ${modelKey}: ${modelName(modelKey)}`);\n } else if (modelDef.type === \"union\") {\n modelEntries.push(` ${modelKey}: ${modelName(modelKey)}`);\n for (const variantName of Object.keys(modelDef.union.variants)) {\n const variantTypeName = unionVariantName(modelKey, variantName);\n modelEntries.push(` ${variantTypeName}: ${modelName(variantTypeName)}`);\n }\n }\n }\n\n // Build upgrades map (includes both record and union entries)\n let upgradesBlock: string;\n const allUpgradeNames = [...recordNames, ...unionNames];\n if (needsUpgradeRegistry && allUpgradeNames.length > 0) {\n // A variant model uses its union's registry, which finds the variant by its discriminant.\n const upgradeEntries = [\n ...allUpgradeNames.map(n => ` ${n}: ${upgradesName(n)},`),\n ...variantNames.map(n => ` ${n}: ${upgradesName(unionByVariantName.get(n)!)},`),\n ].join(\"\\n\");\n upgradesBlock = ` upgrades: {\\n${upgradeEntries}\\n },\\n`;\n } else {\n upgradesBlock = \"\";\n }\n\n // Common metadata literal: shared between the const and factory forms.\n let metadataBody = ` [Metadata]: {\\n`;\n metadataBody += ` version: ${latestVersion},\\n`;\n if (minVersion !== latestVersion) {\n metadataBody += ` minSupportedVersion: ${minVersion},\\n`;\n }\n metadataBody += upgradesBlock;\n\n const modelEntriesBody = modelEntries.map(e => ` ${e}`).join(\",\\n\");\n\n if (needsUpgradeFns) {\n // Factory form: schema has at least one derived field or required additive\n // field, so the runtime requires the app to supply typed upgrade functions.\n // The factory makes this a compile-time requirement — apps can't get a\n // DocumentSchema value without passing them.\n output += `/**\\n`;\n output += ` * Construct the DocumentModel for this SDK, wiring in the typed forward\\n`;\n output += ` * functions the runtime needs to materialize fields added past v1.\\n`;\n output += ` */\\n`;\n output += `export function DocumentModel(upgradeFns: DocumentUpgradeFns): DocumentSchema {\\n`;\n output += ` return {\\n`;\n output += `${modelEntriesBody},\\n`;\n output += metadataBody;\n output += ` upgradeFns: upgradeFns as unknown as UpgradeFns,\\n`;\n output += ` },\\n`;\n output += ` };\\n`;\n output += `}\\n\\n`;\n output += `export type DocumentModel = ReturnType<typeof DocumentModel>;\\n`;\n } else {\n // Const form: no field added past v1 needs lens treatment, so no upgrade\n // functions are required.\n output += `export const DocumentModel = {\\n`;\n output += `${modelEntriesBody},\\n`;\n // Const form indents one level less than the factory body.\n output += metadataBody.replace(/^ {4}/gm, \" \");\n output += ` },\\n`;\n output += `} as const satisfies DocumentSchema;\\n\\n`;\n output += `export type DocumentModel = typeof DocumentModel;\\n`;\n }\n\n return { modelsFile: output };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -16,7 +16,7 @@
16
16
 
17
17
  import { GENERATED_FILE_HEADER } from "../generatedFileHeader.js";
18
18
  import { resolveMinVersion } from "./resolveSchemaChain.js";
19
- import { modelName, MODELS_PATH, typesFilePath, versionedTypeName, versionedWriteTypeName, writeTypesFilePath } from "./runtimeSchema.js";
19
+ import { modelName, MODELS_PATH, typesFilePath, versionedDocRefName, versionedTypeName, versionedWriteTypeName, writeTypesFilePath } from "./runtimeSchema.js";
20
20
 
21
21
  /**
22
22
  * Generate versionedDocRef.ts from a versioned schema chain.
@@ -86,7 +86,8 @@ export function generateScopeFromChain(resolved, minSupportedVersion) {
86
86
  version,
87
87
  ir
88
88
  } of supportedVersions) {
89
- output += `export interface VersionedDocRef_v${version} extends DocumentRef<DocumentModel> {\n`;
89
+ const docRefName = versionedDocRefName(version);
90
+ output += `export interface ${docRefName} extends DocumentRef<DocumentModel> {\n`;
90
91
  output += ` readonly version: ${version};\n`;
91
92
 
92
93
  // updateRecord overloads — record models get write types, union models get Partial<read>
@@ -121,12 +122,8 @@ export function generateScopeFromChain(resolved, minSupportedVersion) {
121
122
  }
122
123
 
123
124
  // Union type
124
- if (supportedVersions.length === 1) {
125
- output += `export type VersionedDocRef = VersionedDocRef_v${supportedVersions[0].version};\n`;
126
- } else {
127
- const unionMembers = supportedVersions.map(v => `VersionedDocRef_v${v.version}`).join(" | ");
128
- output += `export type VersionedDocRef = ${unionMembers};\n`;
129
- }
125
+ const unionMembers = supportedVersions.map(v => versionedDocRefName(v.version)).join(" | ");
126
+ output += `export type VersionedDocRef = ${unionMembers};\n`;
130
127
 
131
128
  // asVersioned — identity cast to unlock version-specific write overloads
132
129
  output += `\n/** Narrow a DocumentRef to a version-discriminated type for type-safe writes. */\n`;
@@ -135,7 +132,7 @@ export function generateScopeFromChain(resolved, minSupportedVersion) {
135
132
  output += `}\n`;
136
133
 
137
134
  // matchVersion — exhaustive version handler
138
- const handlerProps = supportedVersions.map(v => ` readonly ${v.version}: (doc: VersionedDocRef_v${v.version}) => R;`).join("\n");
135
+ const handlerProps = supportedVersions.map(v => ` readonly ${v.version}: (doc: ${versionedDocRefName(v.version)}) => R;`).join("\n");
139
136
  output += `\n/**\n`;
140
137
  output += ` * Exhaustive version handler. TypeScript enforces that every supported\n`;
141
138
  output += ` * version has a corresponding handler -- adding a new schema version\n`;
@@ -1 +1 @@
1
- {"version":3,"file":"generateScopeFromSchema.js","names":["GENERATED_FILE_HEADER","resolveMinVersion","modelName","MODELS_PATH","typesFilePath","versionedTypeName","versionedWriteTypeName","writeTypesFilePath","generateScopeFromChain","resolved","minSupportedVersion","chain","minVersion","supportedVersions","filter","v","version","latestIr","length","ir","allModelNames","modelKey","Object","keys","models","push","output","modelImports","map","n","typeImportsFromModels","join","readTypeImports","writeTypeImports","modelDef","entries","type","sort","writeType","readType","unionMembers","handlerProps"],"sources":["generateScopeFromSchema.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 { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\nimport type { ResolvedIrChain } from \"./resolveSchemaChain.js\";\nimport { resolveMinVersion } from \"./resolveSchemaChain.js\";\nimport {\n modelName,\n MODELS_PATH,\n typesFilePath,\n versionedTypeName,\n versionedWriteTypeName,\n writeTypesFilePath,\n} from \"./runtimeSchema.js\";\n\n/**\n * Generate versionedDocRef.ts from a versioned schema chain.\n *\n * Produces:\n * - Per-version VersionedDocRef_vN interfaces extending DocumentRef<DocumentModel>\n * - Union type VersionedDocRef = VersionedDocRef_v1 | VersionedDocRef_v2\n *\n * Every model gets a version-specific overload on every version so that\n * write data is always typed to the exact version, not the latest.\n */\nexport function generateScopeFromChain(\n resolved: ResolvedIrChain,\n minSupportedVersion?: number,\n): string {\n const { chain } = resolved;\n const { minVersion } = resolveMinVersion(chain, minSupportedVersion);\n\n // Filter to supported versions\n const supportedVersions = chain.filter(v => v.version >= minVersion);\n\n // Collect all model names from the latest IR\n const latestIr = chain[chain.length - 1]!.ir;\n const allModelNames: string[] = [];\n for (const modelKey of Object.keys(latestIr.models)) {\n allModelNames.push(modelKey);\n }\n\n // Build output\n let output = GENERATED_FILE_HEADER;\n\n // Import model-types\n output +=\n `import type { DocumentRef, EditDescription, PresencePublishOptions, RecordId, RecordRef } from \"@palantir/pack.document-schema.model-types\";\\n`;\n\n // Import model types from models.ts\n const modelImports = allModelNames.map(n => modelName(n));\n const typeImportsFromModels = [\"DocumentModel\", ...modelImports];\n output += `import type { ${typeImportsFromModels.join(\", \")} } from \"${MODELS_PATH}\";\\n`;\n\n // Import per-version types\n for (const { version, ir } of supportedVersions) {\n const readTypeImports: string[] = [];\n const writeTypeImports: string[] = [];\n\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n readTypeImports.push(versionedTypeName(modelKey, version));\n writeTypeImports.push(versionedWriteTypeName(modelKey, version));\n } else if (modelDef.type === \"union\") {\n readTypeImports.push(versionedTypeName(modelKey, version));\n }\n }\n\n if (readTypeImports.length > 0) {\n output += `import type { ${readTypeImports.sort().join(\", \")} } from \"${\n typesFilePath(version)\n }\";\\n`;\n }\n if (writeTypeImports.length > 0) {\n output += `import type { ${writeTypeImports.sort().join(\", \")} } from \"${\n writeTypesFilePath(version)\n }\";\\n`;\n }\n }\n\n output += \"\\n\";\n\n // Generate per-version VersionedDocRef interfaces extending DocumentRef.\n for (const { version, ir } of supportedVersions) {\n output += `export interface VersionedDocRef_v${version} extends DocumentRef<DocumentModel> {\\n`;\n output += ` readonly version: ${version};\\n`;\n\n // updateRecord overloads — record models get write types, union models get Partial<read>\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n const writeType = versionedWriteTypeName(modelKey, version);\n output += ` updateRecord(ref: RecordRef<typeof ${\n modelName(modelKey)\n }>, data: ${writeType}): Promise<void>;\\n`;\n } else if (modelDef.type === \"union\") {\n const readType = versionedTypeName(modelKey, version);\n output += ` updateRecord(ref: RecordRef<typeof ${\n modelName(modelKey)\n }>, data: Partial<${readType}>): Promise<void>;\\n`;\n }\n }\n\n // setRecord overloads\n for (const [modelKey] of Object.entries(ir.models)) {\n const readType = versionedTypeName(modelKey, version);\n output += ` setRecord(model: typeof ${\n modelName(modelKey)\n }, id: RecordId, data: ${readType}): Promise<void>;\\n`;\n }\n\n // custom presence overloads\n for (const [modelKey] of Object.entries(ir.models)) {\n const readType = versionedTypeName(modelKey, version);\n output += ` updateCustomPresence(model: typeof ${\n modelName(modelKey)\n }, data: ${readType}, options?: PresencePublishOptions): void;\\n`;\n }\n\n // custom activity description overloads\n for (const [modelKey] of Object.entries(ir.models)) {\n const readType = versionedTypeName(modelKey, version);\n output += ` describeEdit(model: typeof ${\n modelName(modelKey)\n }, data: ${readType}): EditDescription<typeof ${modelName(modelKey)}>;\\n`;\n }\n\n output += `}\\n\\n`;\n }\n\n // Union type\n if (supportedVersions.length === 1) {\n output += `export type VersionedDocRef = VersionedDocRef_v${supportedVersions[0]!.version};\\n`;\n } else {\n const unionMembers = supportedVersions.map(v => `VersionedDocRef_v${v.version}`).join(\" | \");\n output += `export type VersionedDocRef = ${unionMembers};\\n`;\n }\n\n // asVersioned — identity cast to unlock version-specific write overloads\n output += `\\n/** Narrow a DocumentRef to a version-discriminated type for type-safe writes. */\\n`;\n output += `export function asVersioned(docRef: DocumentRef<DocumentModel>): VersionedDocRef {\\n`;\n output += ` return docRef as VersionedDocRef;\\n`;\n output += `}\\n`;\n\n // matchVersion — exhaustive version handler\n const handlerProps = supportedVersions.map(\n v => ` readonly ${v.version}: (doc: VersionedDocRef_v${v.version}) => R;`,\n ).join(\"\\n\");\n\n output += `\\n/**\\n`;\n output += ` * Exhaustive version handler. TypeScript enforces that every supported\\n`;\n output += ` * version has a corresponding handler -- adding a new schema version\\n`;\n output += ` * produces a compile error at every call site until handled.\\n`;\n output += ` */\\n`;\n output += `export function matchVersion<R>(\\n`;\n output += ` doc: VersionedDocRef,\\n`;\n output += ` handlers: {\\n`;\n output += handlerProps + \"\\n\";\n output += ` },\\n`;\n output += `): R {\\n`;\n output += ` switch (doc.version) {\\n`;\n for (const { version } of supportedVersions) {\n output += ` case ${version}:\\n`;\n output += ` return handlers[${version}](doc);\\n`;\n }\n output += ` default:\\n`;\n output += ` throw new Error(\\`Unexpected document version: \\${(doc as any).version}\\`);\\n`;\n output += ` }\\n`;\n output += `}\\n`;\n\n return output;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateScopeFromSchema.js","names":["GENERATED_FILE_HEADER","resolveMinVersion","modelName","MODELS_PATH","typesFilePath","versionedDocRefName","versionedTypeName","versionedWriteTypeName","writeTypesFilePath","generateScopeFromChain","resolved","minSupportedVersion","chain","minVersion","supportedVersions","filter","v","version","latestIr","length","ir","allModelNames","modelKey","Object","keys","models","push","output","modelImports","map","n","typeImportsFromModels","join","readTypeImports","writeTypeImports","modelDef","entries","type","sort","docRefName","writeType","readType","unionMembers","handlerProps"],"sources":["generateScopeFromSchema.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 { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\nimport type { ResolvedIrChain } from \"./resolveSchemaChain.js\";\nimport { resolveMinVersion } from \"./resolveSchemaChain.js\";\nimport {\n modelName,\n MODELS_PATH,\n typesFilePath,\n versionedDocRefName,\n versionedTypeName,\n versionedWriteTypeName,\n writeTypesFilePath,\n} from \"./runtimeSchema.js\";\n\n/**\n * Generate versionedDocRef.ts from a versioned schema chain.\n *\n * Produces:\n * - Per-version VersionedDocRef_vN interfaces extending DocumentRef<DocumentModel>\n * - Union type VersionedDocRef = VersionedDocRef_v1 | VersionedDocRef_v2\n *\n * Every model gets a version-specific overload on every version so that\n * write data is always typed to the exact version, not the latest.\n */\nexport function generateScopeFromChain(\n resolved: ResolvedIrChain,\n minSupportedVersion?: number,\n): string {\n const { chain } = resolved;\n const { minVersion } = resolveMinVersion(chain, minSupportedVersion);\n\n // Filter to supported versions\n const supportedVersions = chain.filter(v => v.version >= minVersion);\n\n // Collect all model names from the latest IR\n const latestIr = chain[chain.length - 1]!.ir;\n const allModelNames: string[] = [];\n for (const modelKey of Object.keys(latestIr.models)) {\n allModelNames.push(modelKey);\n }\n\n // Build output\n let output = GENERATED_FILE_HEADER;\n\n // Import model-types\n output +=\n `import type { DocumentRef, EditDescription, PresencePublishOptions, RecordId, RecordRef } from \"@palantir/pack.document-schema.model-types\";\\n`;\n\n // Import model types from models.ts\n const modelImports = allModelNames.map(n => modelName(n));\n const typeImportsFromModels = [\"DocumentModel\", ...modelImports];\n output += `import type { ${typeImportsFromModels.join(\", \")} } from \"${MODELS_PATH}\";\\n`;\n\n // Import per-version types\n for (const { version, ir } of supportedVersions) {\n const readTypeImports: string[] = [];\n const writeTypeImports: string[] = [];\n\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n readTypeImports.push(versionedTypeName(modelKey, version));\n writeTypeImports.push(versionedWriteTypeName(modelKey, version));\n } else if (modelDef.type === \"union\") {\n readTypeImports.push(versionedTypeName(modelKey, version));\n }\n }\n\n if (readTypeImports.length > 0) {\n output += `import type { ${readTypeImports.sort().join(\", \")} } from \"${\n typesFilePath(version)\n }\";\\n`;\n }\n if (writeTypeImports.length > 0) {\n output += `import type { ${writeTypeImports.sort().join(\", \")} } from \"${\n writeTypesFilePath(version)\n }\";\\n`;\n }\n }\n\n output += \"\\n\";\n\n // Generate per-version VersionedDocRef interfaces extending DocumentRef.\n for (const { version, ir } of supportedVersions) {\n const docRefName = versionedDocRefName(version);\n output += `export interface ${docRefName} extends DocumentRef<DocumentModel> {\\n`;\n output += ` readonly version: ${version};\\n`;\n\n // updateRecord overloads — record models get write types, union models get Partial<read>\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n const writeType = versionedWriteTypeName(modelKey, version);\n output += ` updateRecord(ref: RecordRef<typeof ${\n modelName(modelKey)\n }>, data: ${writeType}): Promise<void>;\\n`;\n } else if (modelDef.type === \"union\") {\n const readType = versionedTypeName(modelKey, version);\n output += ` updateRecord(ref: RecordRef<typeof ${\n modelName(modelKey)\n }>, data: Partial<${readType}>): Promise<void>;\\n`;\n }\n }\n\n // setRecord overloads\n for (const [modelKey] of Object.entries(ir.models)) {\n const readType = versionedTypeName(modelKey, version);\n output += ` setRecord(model: typeof ${\n modelName(modelKey)\n }, id: RecordId, data: ${readType}): Promise<void>;\\n`;\n }\n\n // custom presence overloads\n for (const [modelKey] of Object.entries(ir.models)) {\n const readType = versionedTypeName(modelKey, version);\n output += ` updateCustomPresence(model: typeof ${\n modelName(modelKey)\n }, data: ${readType}, options?: PresencePublishOptions): void;\\n`;\n }\n\n // custom activity description overloads\n for (const [modelKey] of Object.entries(ir.models)) {\n const readType = versionedTypeName(modelKey, version);\n output += ` describeEdit(model: typeof ${\n modelName(modelKey)\n }, data: ${readType}): EditDescription<typeof ${modelName(modelKey)}>;\\n`;\n }\n\n output += `}\\n\\n`;\n }\n\n // Union type\n const unionMembers = supportedVersions.map(v => versionedDocRefName(v.version)).join(\" | \");\n output += `export type VersionedDocRef = ${unionMembers};\\n`;\n\n // asVersioned — identity cast to unlock version-specific write overloads\n output += `\\n/** Narrow a DocumentRef to a version-discriminated type for type-safe writes. */\\n`;\n output += `export function asVersioned(docRef: DocumentRef<DocumentModel>): VersionedDocRef {\\n`;\n output += ` return docRef as VersionedDocRef;\\n`;\n output += `}\\n`;\n\n // matchVersion — exhaustive version handler\n const handlerProps = supportedVersions.map(\n v => ` readonly ${v.version}: (doc: ${versionedDocRefName(v.version)}) => R;`,\n ).join(\"\\n\");\n\n output += `\\n/**\\n`;\n output += ` * Exhaustive version handler. TypeScript enforces that every supported\\n`;\n output += ` * version has a corresponding handler -- adding a new schema version\\n`;\n output += ` * produces a compile error at every call site until handled.\\n`;\n output += ` */\\n`;\n output += `export function matchVersion<R>(\\n`;\n output += ` doc: VersionedDocRef,\\n`;\n output += ` handlers: {\\n`;\n output += handlerProps + \"\\n\";\n output += ` },\\n`;\n output += `): R {\\n`;\n output += ` switch (doc.version) {\\n`;\n for (const { version } of supportedVersions) {\n output += ` case ${version}:\\n`;\n output += ` return handlers[${version}](doc);\\n`;\n }\n output += ` default:\\n`;\n output += ` throw new Error(\\`Unexpected document version: \\${(doc as any).version}\\`);\\n`;\n output += ` }\\n`;\n output += `}\\n`;\n\n return output;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -15,12 +15,10 @@
15
15
  */
16
16
 
17
17
  import { UNKNOWN_UNION_VARIANT } from "@palantir/pack.document-schema.model-types";
18
- import { formatVariantName } from "@palantir/pack.schema";
19
18
  import { GENERATED_FILE_HEADER } from "../generatedFileHeader.js";
20
19
  import { collectReferencedTypes, convertFieldTypeToTypeScript, detectUsedRefTypes } from "../ir/irFieldHelpers.js";
21
- import { UNKNOWN_VARIANT_SUFFIX } from "../unknownVariantSuffix.js";
22
20
  import { resolveMinVersion } from "./resolveSchemaChain.js";
23
- import { knownTypeName, narrowKnownFunctionName, typesFilePath, versionedTypeName, versionedWriteTypeName } from "./runtimeSchema.js";
21
+ import { knownTypeName, narrowKnownFunctionName, typeGuardName, typesFilePath, unionVariantName, versionedTypeName, versionedWriteTypeName } from "./runtimeSchema.js";
24
22
  /**
25
23
  * Generate read types for a specific schema version.
26
24
  */
@@ -61,7 +59,7 @@ function generateReadTypesForVersion(version, ir) {
61
59
  const discriminantField = union.discriminant;
62
60
  const variantInterfaces = [];
63
61
  for (const [variantName, variantModelKey] of Object.entries(union.variants)) {
64
- const interfaceName = `${typeName}${formatVariantName(variantName)}`;
62
+ const interfaceName = unionVariantName(typeName, variantName);
65
63
  variantInterfaces.push({
66
64
  name: interfaceName,
67
65
  discriminatorValue: variantName
@@ -84,7 +82,7 @@ function generateReadTypesForVersion(version, ir) {
84
82
  }
85
83
  }
86
84
  const knownVariantNames = variantInterfaces.map(v => v.name);
87
- const unknownName = `${typeName}${UNKNOWN_VARIANT_SUFFIX}`;
85
+ const unknownName = unionVariantName(typeName, UNKNOWN_UNION_VARIANT);
88
86
  output += `export type ${unknownName} = UnknownUnionVariant<"${discriminantField}">;\n\n`;
89
87
  variantInterfaces.push({
90
88
  name: unknownName,
@@ -102,7 +100,8 @@ function generateReadTypesForVersion(version, ir) {
102
100
  output += ` return value == null || value.${discriminantField} === "${UNKNOWN_UNION_VARIANT}" ? undefined : value;\n`;
103
101
  output += "}\n\n";
104
102
  for (const variant of variantInterfaces) {
105
- output += `export function is${variant.name}(value: ${typeName}): value is ${variant.name} {\n`;
103
+ const guardName = typeGuardName(variant.name);
104
+ output += `export function ${guardName}(value: ${typeName}): value is ${variant.name} {\n`;
106
105
  output += ` return value.${discriminantField} === "${variant.discriminatorValue}";\n`;
107
106
  output += "}\n\n";
108
107
  }
@@ -169,9 +168,9 @@ function generateTypesReExport({
169
168
  reExports.push(`export type { ${knownTypeName(versioned)} as ${knownTypeName(modelKey)} } from "${typesFilePath(version)}";`, `export { ${narrowKnownFunctionName(versioned)} as ${narrowKnownFunctionName(modelKey)} } from "${typesFilePath(version)}";`);
170
169
  // Also re-export union variant types, including the Unknown case
171
170
  for (const variantName of [...Object.keys(modelDef.union.variants), UNKNOWN_UNION_VARIANT]) {
172
- const formattedVariant = formatVariantName(variantName);
173
- const versionedVariant = `${versionedTypeName(modelKey, version)}${formattedVariant}`;
174
- reExports.push(`export type { ${versionedVariant} as ${`${modelKey}${formattedVariant}`} } from "${typesFilePath(version)}";`);
171
+ const versionedVariant = unionVariantName(versioned, variantName);
172
+ const unversionedVariant = unionVariantName(modelKey, variantName);
173
+ reExports.push(`export type { ${versionedVariant} as ${unversionedVariant} } from "${typesFilePath(version)}";`);
175
174
  }
176
175
  }
177
176
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generateVersionedTypesFromSchema.js","names":["UNKNOWN_UNION_VARIANT","formatVariantName","GENERATED_FILE_HEADER","collectReferencedTypes","convertFieldTypeToTypeScript","detectUsedRefTypes","UNKNOWN_VARIANT_SUFFIX","resolveMinVersion","knownTypeName","narrowKnownFunctionName","typesFilePath","versionedTypeName","versionedWriteTypeName","generateReadTypesForVersion","version","ir","usedRefTypes","Object","values","models","some","model","type","add","output","size","refTypesList","Array","from","sort","join","modelKey","modelDef","entries","record","typeName","description","field","fields","tsType","fieldType","optional","isOptional","key","union","discriminantField","discriminant","variantInterfaces","variantName","variantModelKey","variants","interfaceName","push","name","discriminatorValue","variantModel","recordTypeName","knownVariantNames","map","v","unknownName","knownName","length","variant","generateWriteTypesForVersion","referencedLocalTypes","Set","localTypesList","generateTypesReExport","reExports","versioned","keys","formattedVariant","versionedVariant","generateVersionedTypesFromChain","resolved","minSupportedVersion","chain","minVersion","readTypes","Map","writeTypes","set","typesReExport"],"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 { UNKNOWN_UNION_VARIANT } from \"@palantir/pack.document-schema.model-types\";\nimport { formatVariantName } from \"@palantir/pack.schema\";\nimport type { IRealTimeDocumentSchema } from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\nimport {\n collectReferencedTypes,\n convertFieldTypeToTypeScript,\n detectUsedRefTypes,\n} from \"../ir/irFieldHelpers.js\";\nimport { UNKNOWN_VARIANT_SUFFIX } from \"../unknownVariantSuffix.js\";\nimport type { ResolvedIrChain, VersionedIrEntry } from \"./resolveSchemaChain.js\";\nimport { resolveMinVersion } from \"./resolveSchemaChain.js\";\nimport {\n knownTypeName,\n narrowKnownFunctionName,\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\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 if (Object.values(ir.models).some(model => model.type === \"union\")) {\n usedRefTypes.add(\"UnknownUnionVariant\");\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 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 const knownVariantNames = variantInterfaces.map(v => v.name);\n const unknownName = `${typeName}${UNKNOWN_VARIANT_SUFFIX}`;\n output += `export type ${unknownName} = UnknownUnionVariant<\"${discriminantField}\">;\\n\\n`;\n variantInterfaces.push({ name: unknownName, discriminatorValue: UNKNOWN_UNION_VARIANT });\n\n output += `export type ${typeName} = ${variantInterfaces.map(v => v.name).join(\" | \")};\\n\\n`;\n\n // The variants this SDK knows, and a helper to narrow to them before reading variant fields.\n const knownName = knownTypeName(typeName);\n output += `export type ${knownName} = ${\n knownVariantNames.length > 0 ? knownVariantNames.join(\" | \") : \"never\"\n };\\n\\n`;\n output += \"/** Return the value if this SDK knows its variant, otherwise undefined. */\\n\";\n output += `export function ${narrowKnownFunctionName(typeName)}(\\n`;\n output += ` value: ${typeName} | undefined,\\n`;\n output += `): ${knownName} | undefined {\\n`;\n output +=\n ` return value == null || value.${discriminantField} === \"${UNKNOWN_UNION_VARIANT}\" ? undefined : value;\\n`;\n output += \"}\\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 reExports.push(\n `export type { ${knownTypeName(versioned)} as ${knownTypeName(modelKey)} } from \"${\n typesFilePath(version)\n }\";`,\n `export { ${narrowKnownFunctionName(versioned)} as ${\n narrowKnownFunctionName(modelKey)\n } } from \"${typesFilePath(version)}\";`,\n );\n // Also re-export union variant types, including the Unknown case\n for (const variantName of [...Object.keys(modelDef.union.variants), UNKNOWN_UNION_VARIANT]) {\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":[]}
1
+ {"version":3,"file":"generateVersionedTypesFromSchema.js","names":["UNKNOWN_UNION_VARIANT","GENERATED_FILE_HEADER","collectReferencedTypes","convertFieldTypeToTypeScript","detectUsedRefTypes","resolveMinVersion","knownTypeName","narrowKnownFunctionName","typeGuardName","typesFilePath","unionVariantName","versionedTypeName","versionedWriteTypeName","generateReadTypesForVersion","version","ir","usedRefTypes","Object","values","models","some","model","type","add","output","size","refTypesList","Array","from","sort","join","modelKey","modelDef","entries","record","typeName","description","field","fields","tsType","fieldType","optional","isOptional","key","union","discriminantField","discriminant","variantInterfaces","variantName","variantModelKey","variants","interfaceName","push","name","discriminatorValue","variantModel","recordTypeName","knownVariantNames","map","v","unknownName","knownName","length","variant","guardName","generateWriteTypesForVersion","referencedLocalTypes","Set","localTypesList","generateTypesReExport","reExports","versioned","keys","versionedVariant","unversionedVariant","generateVersionedTypesFromChain","resolved","minSupportedVersion","chain","minVersion","readTypes","Map","writeTypes","set","typesReExport"],"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 { UNKNOWN_UNION_VARIANT } from \"@palantir/pack.document-schema.model-types\";\nimport type { IRealTimeDocumentSchema } from \"../../lib/pack-docschema-api/pack-docschema-ir/index.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 {\n knownTypeName,\n narrowKnownFunctionName,\n typeGuardName,\n typesFilePath,\n unionVariantName,\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\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 if (Object.values(ir.models).some(model => model.type === \"union\")) {\n usedRefTypes.add(\"UnknownUnionVariant\");\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 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 = unionVariantName(typeName, 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 const knownVariantNames = variantInterfaces.map(v => v.name);\n const unknownName = unionVariantName(typeName, UNKNOWN_UNION_VARIANT);\n output += `export type ${unknownName} = UnknownUnionVariant<\"${discriminantField}\">;\\n\\n`;\n variantInterfaces.push({ name: unknownName, discriminatorValue: UNKNOWN_UNION_VARIANT });\n\n output += `export type ${typeName} = ${variantInterfaces.map(v => v.name).join(\" | \")};\\n\\n`;\n\n // The variants this SDK knows, and a helper to narrow to them before reading variant fields.\n const knownName = knownTypeName(typeName);\n output += `export type ${knownName} = ${\n knownVariantNames.length > 0 ? knownVariantNames.join(\" | \") : \"never\"\n };\\n\\n`;\n output += \"/** Return the value if this SDK knows its variant, otherwise undefined. */\\n\";\n output += `export function ${narrowKnownFunctionName(typeName)}(\\n`;\n output += ` value: ${typeName} | undefined,\\n`;\n output += `): ${knownName} | undefined {\\n`;\n output +=\n ` return value == null || value.${discriminantField} === \"${UNKNOWN_UNION_VARIANT}\" ? undefined : value;\\n`;\n output += \"}\\n\\n\";\n\n for (const variant of variantInterfaces) {\n const guardName = typeGuardName(variant.name);\n output += `export function ${guardName}(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 reExports.push(\n `export type { ${knownTypeName(versioned)} as ${knownTypeName(modelKey)} } from \"${\n typesFilePath(version)\n }\";`,\n `export { ${narrowKnownFunctionName(versioned)} as ${\n narrowKnownFunctionName(modelKey)\n } } from \"${typesFilePath(version)}\";`,\n );\n // Also re-export union variant types, including the Unknown case\n for (const variantName of [...Object.keys(modelDef.union.variants), UNKNOWN_UNION_VARIANT]) {\n const versionedVariant = unionVariantName(versioned, variantName);\n const unversionedVariant = unionVariantName(modelKey, variantName);\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":[]}