@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
@@ -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 { convertFieldTypeToZodSchema } from "../ir/irFieldHelpers.js";
21
- import { UNKNOWN_VARIANT_SUFFIX } from "../unknownVariantSuffix.js";
22
20
  import { resolveMinVersion } from "./resolveSchemaChain.js";
23
- import { typesFilePath, versionedSchemaName, versionedTypeName } from "./runtimeSchema.js";
21
+ import { schemaName, typesFilePath, unionVariantName, versionedSchemaName, versionedTypeName } from "./runtimeSchema.js";
24
22
  /**
25
23
  * Generate Zod schemas for a specific schema version.
26
24
  * Uses `.passthrough()` to preserve unknown fields.
@@ -36,7 +34,7 @@ function generateZodSchemasForVersion(version, ir) {
36
34
  } else if (modelDef.type === "union") {
37
35
  typeNames.push(versionedTypeName(modelKey, version));
38
36
  for (const variantName of [...Object.keys(modelDef.union.variants), UNKNOWN_UNION_VARIANT]) {
39
- typeNames.push(`${versionedTypeName(modelKey, version)}${formatVariantName(variantName)}`);
37
+ typeNames.push(unionVariantName(versionedTypeName(modelKey, version), variantName));
40
38
  }
41
39
  }
42
40
  }
@@ -68,11 +66,12 @@ function generateZodSchemasForVersion(version, ir) {
68
66
  if (modelDef.type !== "union") continue;
69
67
  const union = modelDef.union;
70
68
  const discriminantField = union.discriminant;
69
+ const unionZodSchemaName = versionedSchemaName(modelKey, version);
70
+ const typeName = versionedTypeName(modelKey, version);
71
71
  const variantSchemaNames = [];
72
72
  for (const [variantName, variantModelKey] of Object.entries(union.variants)) {
73
- const formattedVariant = formatVariantName(variantName);
74
- const variantZodSchemaName = `${versionedSchemaName(modelKey, version)}${formattedVariant}`;
75
- const variantTypeName = `${versionedTypeName(modelKey, version)}${formattedVariant}`;
73
+ const variantZodSchemaName = unionVariantName(unionZodSchemaName, variantName);
74
+ const variantTypeName = unionVariantName(typeName, variantName);
76
75
  variantSchemaNames.push(variantZodSchemaName);
77
76
 
78
77
  // Look up the variant's model to check if it's a record
@@ -92,15 +91,13 @@ function generateZodSchemasForVersion(version, ir) {
92
91
  output += `}) satisfies ZodType<${variantTypeName}>;\n\n`;
93
92
  }
94
93
  }
95
- const unknownSchemaName = `${versionedSchemaName(modelKey, version)}${UNKNOWN_VARIANT_SUFFIX}`;
96
- const unknownTypeName = `${versionedTypeName(modelKey, version)}${UNKNOWN_VARIANT_SUFFIX}`;
94
+ const unknownSchemaName = unionVariantName(unionZodSchemaName, UNKNOWN_UNION_VARIANT);
95
+ const unknownTypeName = unionVariantName(typeName, UNKNOWN_UNION_VARIANT);
97
96
  output += `export const ${unknownSchemaName} = z.object({\n`;
98
97
  output += ` ${discriminantField}: z.literal("${UNKNOWN_UNION_VARIANT}"),\n`;
99
98
  output += ` rawValue: z.unknown()\n`;
100
99
  output += `}) satisfies ZodType<${unknownTypeName}>;\n\n`;
101
100
  variantSchemaNames.push(unknownSchemaName);
102
- const unionZodSchemaName = versionedSchemaName(modelKey, version);
103
- const typeName = versionedTypeName(modelKey, version);
104
101
  output += `export const ${unionZodSchemaName} = z.discriminatedUnion("${discriminantField}", [\n ${variantSchemaNames.join(",\n ")}\n]) satisfies ZodType<${typeName}>;\n\n`;
105
102
  }
106
103
  return output;
@@ -118,16 +115,16 @@ function generateSchemaReExport({
118
115
  for (const [modelKey, modelDef] of Object.entries(ir.models)) {
119
116
  if (modelDef.type === "record") {
120
117
  const versioned = versionedSchemaName(modelKey, version);
121
- reExports.push(`export { ${versioned} as ${modelKey}Schema } from "./schema_v${version}.js";`);
118
+ reExports.push(`export { ${versioned} as ${schemaName(modelKey)} } from "./schema_v${version}.js";`);
122
119
  } else if (modelDef.type === "union") {
123
120
  const versioned = versionedSchemaName(modelKey, version);
124
- reExports.push(`export { ${versioned} as ${modelKey}Schema } from "./schema_v${version}.js";`);
121
+ reExports.push(`export { ${versioned} as ${schemaName(modelKey)} } from "./schema_v${version}.js";`);
125
122
 
126
123
  // Also re-export union variant schemas
127
124
  for (const variantName of Object.keys(modelDef.union.variants)) {
128
- const formattedVariant = formatVariantName(variantName);
129
- const versionedVariant = `${versionedSchemaName(modelKey, version)}${formattedVariant}`;
130
- reExports.push(`export { ${versionedVariant} as ${`${modelKey}${formattedVariant}Schema`} } from "./schema_v${version}.js";`);
125
+ const versionedVariant = unionVariantName(versioned, variantName);
126
+ const unversionedVariant = schemaName(unionVariantName(modelKey, variantName));
127
+ reExports.push(`export { ${versionedVariant} as ${unversionedVariant} } from "./schema_v${version}.js";`);
131
128
  }
132
129
  }
133
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generateVersionedZodFromSchema.js","names":["UNKNOWN_UNION_VARIANT","formatVariantName","GENERATED_FILE_HEADER","convertFieldTypeToZodSchema","UNKNOWN_VARIANT_SUFFIX","resolveMinVersion","typesFilePath","versionedSchemaName","versionedTypeName","generateZodSchemasForVersion","version","ir","output","typeNames","modelKey","modelDef","Object","entries","models","type","push","variantName","keys","union","variants","length","sort","join","zodSchemaName","typeName","fieldLines","field","record","fields","zodType","fieldType","isOptional","key","discriminantField","discriminant","variantSchemaNames","variantModelKey","formattedVariant","variantZodSchemaName","variantTypeName","variantModel","recordZodSchemaName","refZodSchemaName","refTypeName","unknownSchemaName","unknownTypeName","unionZodSchemaName","generateSchemaReExport","reExports","versioned","versionedVariant","generateVersionedZodFromChain","resolved","minSupportedVersion","chain","minVersion","zodSchemas","Map","set","schemaReExport"],"sources":["generateVersionedZodFromSchema.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 { convertFieldTypeToZodSchema } from \"../ir/irFieldHelpers.js\";\nimport { UNKNOWN_VARIANT_SUFFIX } from \"../unknownVariantSuffix.js\";\nimport type { ResolvedIrChain, VersionedIrEntry } from \"./resolveSchemaChain.js\";\nimport { resolveMinVersion } from \"./resolveSchemaChain.js\";\nimport { typesFilePath, versionedSchemaName, versionedTypeName } from \"./runtimeSchema.js\";\n\nexport interface VersionedZodOutput {\n /** schema_vN.ts files keyed by version number */\n zodSchemas: Map<number, string>;\n /** schema.ts re-export of latest version schemas under unversioned names */\n schemaReExport: string;\n}\n\n/**\n * Generate Zod schemas for a specific schema version.\n * Uses `.passthrough()` to preserve unknown fields.\n */\nfunction generateZodSchemasForVersion(\n version: number,\n ir: IRealTimeDocumentSchema,\n): string {\n let output = GENERATED_FILE_HEADER;\n\n // Collect type names for import\n const typeNames: string[] = [];\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n typeNames.push(versionedTypeName(modelKey, version));\n } else if (modelDef.type === \"union\") {\n typeNames.push(versionedTypeName(modelKey, version));\n for (const variantName of [...Object.keys(modelDef.union.variants), UNKNOWN_UNION_VARIANT]) {\n typeNames.push(\n `${versionedTypeName(modelKey, version)}${formatVariantName(variantName)}`,\n );\n }\n }\n }\n\n output += \"import type { ZodType } from \\\"zod\\\";\\n\";\n output += \"import { z } from \\\"zod\\\";\\n\";\n\n if (typeNames.length > 0) {\n output += `import type { ${typeNames.sort().join(\", \")} } from \"${typesFilePath(version)}\";\\n`;\n }\n\n output += \"\\n\";\n\n // Generate record schemas first (unions may depend on them)\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"record\") continue;\n\n const zodSchemaName = versionedSchemaName(modelKey, version);\n const typeName = versionedTypeName(modelKey, version);\n const fieldLines: string[] = [];\n\n for (const field of modelDef.record.fields) {\n let zodType = convertFieldTypeToZodSchema(field.fieldType, version);\n if (field.isOptional) {\n zodType = `${zodType}.optional()`;\n }\n fieldLines.push(` ${field.key}: ${zodType}`);\n }\n\n output += `export const ${zodSchemaName} = z.object({\\n${\n fieldLines.join(\",\\n\")\n }\\n}).passthrough() satisfies ZodType<${typeName}>;\\n\\n`;\n }\n\n // Generate union schemas\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"union\") continue;\n\n const union = modelDef.union;\n const discriminantField = union.discriminant;\n const variantSchemaNames: string[] = [];\n\n for (const [variantName, variantModelKey] of Object.entries(union.variants)) {\n const formattedVariant = formatVariantName(variantName);\n const variantZodSchemaName = `${versionedSchemaName(modelKey, version)}${formattedVariant}`;\n const variantTypeName = `${versionedTypeName(modelKey, version)}${formattedVariant}`;\n variantSchemaNames.push(variantZodSchemaName);\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 recordZodSchemaName = versionedSchemaName(variantModelKey, version);\n output += `export const ${variantZodSchemaName} = ${recordZodSchemaName}.extend({\\n`;\n output += ` ${discriminantField}: z.literal(\"${variantName}\")\\n`;\n output += `}) satisfies ZodType<${variantTypeName}>;\\n\\n`;\n } else {\n // Non-record variant (e.g. another union): emit a value field referencing the schema\n const refZodSchemaName = versionedSchemaName(variantModelKey, version);\n const refTypeName = versionedTypeName(variantModelKey, version);\n output += `export const ${variantZodSchemaName} = z.object({\\n`;\n output += ` ${discriminantField}: z.literal(\"${variantName}\"),\\n`;\n output += ` value: z.lazy((): ZodType<${refTypeName}> => ${refZodSchemaName})\\n`;\n output += `}) satisfies ZodType<${variantTypeName}>;\\n\\n`;\n }\n }\n\n const unknownSchemaName = `${versionedSchemaName(modelKey, version)}${UNKNOWN_VARIANT_SUFFIX}`;\n const unknownTypeName = `${versionedTypeName(modelKey, version)}${UNKNOWN_VARIANT_SUFFIX}`;\n output += `export const ${unknownSchemaName} = z.object({\\n`;\n output += ` ${discriminantField}: z.literal(\"${UNKNOWN_UNION_VARIANT}\"),\\n`;\n output += ` rawValue: z.unknown()\\n`;\n output += `}) satisfies ZodType<${unknownTypeName}>;\\n\\n`;\n variantSchemaNames.push(unknownSchemaName);\n\n const unionZodSchemaName = versionedSchemaName(modelKey, version);\n const typeName = versionedTypeName(modelKey, version);\n output +=\n `export const ${unionZodSchemaName} = z.discriminatedUnion(\"${discriminantField}\", [\\n ${\n variantSchemaNames.join(\",\\n \")\n }\\n]) satisfies ZodType<${typeName}>;\\n\\n`;\n }\n\n return output;\n}\n\n/**\n * Generate the schema.ts re-export file mapping unversioned names to latest version.\n */\nfunction generateSchemaReExport(\n { ir, version }: VersionedIrEntry,\n): string {\n let output = GENERATED_FILE_HEADER;\n\n const reExports: string[] = [];\n\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n const versioned = versionedSchemaName(modelKey, version);\n reExports.push(\n `export { ${versioned} as ${modelKey}Schema } from \"./schema_v${version}.js\";`,\n );\n } else if (modelDef.type === \"union\") {\n const versioned = versionedSchemaName(modelKey, version);\n reExports.push(\n `export { ${versioned} as ${modelKey}Schema } from \"./schema_v${version}.js\";`,\n );\n\n // Also re-export union variant schemas\n for (const variantName of Object.keys(modelDef.union.variants)) {\n const formattedVariant = formatVariantName(variantName);\n const versionedVariant = `${versionedSchemaName(modelKey, version)}${formattedVariant}`;\n const unversionedVariant = `${modelKey}${formattedVariant}Schema`;\n reExports.push(\n `export { ${versionedVariant} as ${unversionedVariant} } from \"./schema_v${version}.js\";`,\n );\n }\n }\n }\n\n output += reExports.join(\"\\n\") + \"\\n\";\n\n return output;\n}\n\n/**\n * Generate per-version Zod schemas from an already-resolved versioned IR chain.\n */\nexport function generateVersionedZodFromChain(\n resolved: ResolvedIrChain,\n minSupportedVersion?: number,\n): VersionedZodOutput {\n const { chain } = resolved;\n const { minVersion } = resolveMinVersion(chain, minSupportedVersion);\n\n const zodSchemas = new Map<number, string>();\n\n for (const { version, ir } of chain) {\n if (version < minVersion) continue;\n\n zodSchemas.set(version, generateZodSchemasForVersion(version, ir));\n }\n\n const schemaReExport = generateSchemaReExport(chain[chain.length - 1]!);\n\n return { zodSchemas, schemaReExport };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateVersionedZodFromSchema.js","names":["UNKNOWN_UNION_VARIANT","GENERATED_FILE_HEADER","convertFieldTypeToZodSchema","resolveMinVersion","schemaName","typesFilePath","unionVariantName","versionedSchemaName","versionedTypeName","generateZodSchemasForVersion","version","ir","output","typeNames","modelKey","modelDef","Object","entries","models","type","push","variantName","keys","union","variants","length","sort","join","zodSchemaName","typeName","fieldLines","field","record","fields","zodType","fieldType","isOptional","key","discriminantField","discriminant","unionZodSchemaName","variantSchemaNames","variantModelKey","variantZodSchemaName","variantTypeName","variantModel","recordZodSchemaName","refZodSchemaName","refTypeName","unknownSchemaName","unknownTypeName","generateSchemaReExport","reExports","versioned","versionedVariant","unversionedVariant","generateVersionedZodFromChain","resolved","minSupportedVersion","chain","minVersion","zodSchemas","Map","set","schemaReExport"],"sources":["generateVersionedZodFromSchema.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 { convertFieldTypeToZodSchema } from \"../ir/irFieldHelpers.js\";\nimport type { ResolvedIrChain, VersionedIrEntry } from \"./resolveSchemaChain.js\";\nimport { resolveMinVersion } from \"./resolveSchemaChain.js\";\nimport {\n schemaName,\n typesFilePath,\n unionVariantName,\n versionedSchemaName,\n versionedTypeName,\n} from \"./runtimeSchema.js\";\n\nexport interface VersionedZodOutput {\n /** schema_vN.ts files keyed by version number */\n zodSchemas: Map<number, string>;\n /** schema.ts re-export of latest version schemas under unversioned names */\n schemaReExport: string;\n}\n\n/**\n * Generate Zod schemas for a specific schema version.\n * Uses `.passthrough()` to preserve unknown fields.\n */\nfunction generateZodSchemasForVersion(\n version: number,\n ir: IRealTimeDocumentSchema,\n): string {\n let output = GENERATED_FILE_HEADER;\n\n // Collect type names for import\n const typeNames: string[] = [];\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n typeNames.push(versionedTypeName(modelKey, version));\n } else if (modelDef.type === \"union\") {\n typeNames.push(versionedTypeName(modelKey, version));\n for (const variantName of [...Object.keys(modelDef.union.variants), UNKNOWN_UNION_VARIANT]) {\n typeNames.push(unionVariantName(versionedTypeName(modelKey, version), variantName));\n }\n }\n }\n\n output += \"import type { ZodType } from \\\"zod\\\";\\n\";\n output += \"import { z } from \\\"zod\\\";\\n\";\n\n if (typeNames.length > 0) {\n output += `import type { ${typeNames.sort().join(\", \")} } from \"${typesFilePath(version)}\";\\n`;\n }\n\n output += \"\\n\";\n\n // Generate record schemas first (unions may depend on them)\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"record\") continue;\n\n const zodSchemaName = versionedSchemaName(modelKey, version);\n const typeName = versionedTypeName(modelKey, version);\n const fieldLines: string[] = [];\n\n for (const field of modelDef.record.fields) {\n let zodType = convertFieldTypeToZodSchema(field.fieldType, version);\n if (field.isOptional) {\n zodType = `${zodType}.optional()`;\n }\n fieldLines.push(` ${field.key}: ${zodType}`);\n }\n\n output += `export const ${zodSchemaName} = z.object({\\n${\n fieldLines.join(\",\\n\")\n }\\n}).passthrough() satisfies ZodType<${typeName}>;\\n\\n`;\n }\n\n // Generate union schemas\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"union\") continue;\n\n const union = modelDef.union;\n const discriminantField = union.discriminant;\n const unionZodSchemaName = versionedSchemaName(modelKey, version);\n const typeName = versionedTypeName(modelKey, version);\n const variantSchemaNames: string[] = [];\n\n for (const [variantName, variantModelKey] of Object.entries(union.variants)) {\n const variantZodSchemaName = unionVariantName(unionZodSchemaName, variantName);\n const variantTypeName = unionVariantName(typeName, variantName);\n variantSchemaNames.push(variantZodSchemaName);\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 recordZodSchemaName = versionedSchemaName(variantModelKey, version);\n output += `export const ${variantZodSchemaName} = ${recordZodSchemaName}.extend({\\n`;\n output += ` ${discriminantField}: z.literal(\"${variantName}\")\\n`;\n output += `}) satisfies ZodType<${variantTypeName}>;\\n\\n`;\n } else {\n // Non-record variant (e.g. another union): emit a value field referencing the schema\n const refZodSchemaName = versionedSchemaName(variantModelKey, version);\n const refTypeName = versionedTypeName(variantModelKey, version);\n output += `export const ${variantZodSchemaName} = z.object({\\n`;\n output += ` ${discriminantField}: z.literal(\"${variantName}\"),\\n`;\n output += ` value: z.lazy((): ZodType<${refTypeName}> => ${refZodSchemaName})\\n`;\n output += `}) satisfies ZodType<${variantTypeName}>;\\n\\n`;\n }\n }\n\n const unknownSchemaName = unionVariantName(unionZodSchemaName, UNKNOWN_UNION_VARIANT);\n const unknownTypeName = unionVariantName(typeName, UNKNOWN_UNION_VARIANT);\n output += `export const ${unknownSchemaName} = z.object({\\n`;\n output += ` ${discriminantField}: z.literal(\"${UNKNOWN_UNION_VARIANT}\"),\\n`;\n output += ` rawValue: z.unknown()\\n`;\n output += `}) satisfies ZodType<${unknownTypeName}>;\\n\\n`;\n variantSchemaNames.push(unknownSchemaName);\n\n output +=\n `export const ${unionZodSchemaName} = z.discriminatedUnion(\"${discriminantField}\", [\\n ${\n variantSchemaNames.join(\",\\n \")\n }\\n]) satisfies ZodType<${typeName}>;\\n\\n`;\n }\n\n return output;\n}\n\n/**\n * Generate the schema.ts re-export file mapping unversioned names to latest version.\n */\nfunction generateSchemaReExport(\n { ir, version }: VersionedIrEntry,\n): string {\n let output = GENERATED_FILE_HEADER;\n\n const reExports: string[] = [];\n\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n const versioned = versionedSchemaName(modelKey, version);\n reExports.push(\n `export { ${versioned} as ${schemaName(modelKey)} } from \"./schema_v${version}.js\";`,\n );\n } else if (modelDef.type === \"union\") {\n const versioned = versionedSchemaName(modelKey, version);\n reExports.push(\n `export { ${versioned} as ${schemaName(modelKey)} } from \"./schema_v${version}.js\";`,\n );\n\n // Also re-export union variant schemas\n for (const variantName of Object.keys(modelDef.union.variants)) {\n const versionedVariant = unionVariantName(versioned, variantName);\n const unversionedVariant = schemaName(unionVariantName(modelKey, variantName));\n reExports.push(\n `export { ${versionedVariant} as ${unversionedVariant} } from \"./schema_v${version}.js\";`,\n );\n }\n }\n }\n\n output += reExports.join(\"\\n\") + \"\\n\";\n\n return output;\n}\n\n/**\n * Generate per-version Zod schemas from an already-resolved versioned IR chain.\n */\nexport function generateVersionedZodFromChain(\n resolved: ResolvedIrChain,\n minSupportedVersion?: number,\n): VersionedZodOutput {\n const { chain } = resolved;\n const { minVersion } = resolveMinVersion(chain, minSupportedVersion);\n\n const zodSchemas = new Map<number, string>();\n\n for (const { version, ir } of chain) {\n if (version < minVersion) continue;\n\n zodSchemas.set(version, generateZodSchemasForVersion(version, ir));\n }\n\n const schemaReExport = generateSchemaReExport(chain[chain.length - 1]!);\n\n return { zodSchemas, schemaReExport };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -21,20 +21,38 @@ import { convertSchemaToIr } from "../steps/convertStepsToIr.js";
21
21
 
22
22
  /** Serialized migrations keyed by `[recordModelName][fieldName]`. */
23
23
 
24
+ export function getEntryMinorVersion(entry) {
25
+ return entry.minorVersion ?? 0;
26
+ }
27
+ export function formatSchemaVersion(major, minor) {
28
+ return minor > 0 ? `${major}.${minor}` : `${major}`;
29
+ }
30
+ function formatEntryVersion(entry) {
31
+ return formatSchemaVersion(entry.version, getEntryMinorVersion(entry));
32
+ }
33
+ function getSchemaMinorVersion(schema) {
34
+ return schema.type === "versioned" ? schema.minorVersion ?? 0 : 0;
35
+ }
24
36
  function collectVersionedIrChain(input, identity) {
25
37
  const schemas = collectSchemaDefinitions(input);
26
38
  const provenances = deriveProvenance(schemas);
27
- return schemas.map((schema, index) => ({
28
- version: schema.version,
29
- ir: convertSchemaToIr(schema.models, {
39
+ return schemas.map((schema, index) => {
40
+ const minorVersion = getSchemaMinorVersion(schema);
41
+ return {
30
42
  version: schema.version,
31
- name: identity.name,
32
- description: identity.description
33
- }, provenances[index]),
34
- ...(schema.type === "versioned" ? {
35
- migrations: serializeMigrations(schema.migrations)
36
- } : {})
37
- }));
43
+ ...(minorVersion > 0 ? {
44
+ minorVersion
45
+ } : {}),
46
+ ir: convertSchemaToIr(schema.models, {
47
+ version: schema.version,
48
+ name: identity.name,
49
+ description: identity.description
50
+ }, provenances[index]),
51
+ ...(schema.type === "versioned" ? {
52
+ migrations: serializeMigrations(schema.migrations)
53
+ } : {})
54
+ };
55
+ });
38
56
  }
39
57
  function collectSchemaDefinitions(input) {
40
58
  const schemas = [];
@@ -49,20 +67,30 @@ function collectSchemaDefinitions(input) {
49
67
 
50
68
  /**
51
69
  * Build field/model provenance by walking the version chain from oldest to
52
- * newest. The first version where a model key or record field appears is the
53
- * version stamped into IR metadata.
70
+ * newest. The first version (major and minor) where a model key or record field
71
+ * appears is the version stamped into IR metadata.
54
72
  */
55
73
  function deriveProvenance(schemas) {
56
74
  const firstModelVersions = new Map();
57
75
  const firstFieldVersions = new Map();
58
76
  return schemas.map(schema => {
77
+ const currentVersion = {
78
+ major: schema.version,
79
+ minor: getSchemaMinorVersion(schema)
80
+ };
59
81
  const modelVersions = {};
82
+ const modelMinorVersions = {};
60
83
  const fieldVersions = {};
84
+ const fieldMinorVersions = {};
61
85
  for (const [modelKey, modelDef] of Object.entries(schema.models)) {
62
86
  if (!firstModelVersions.has(modelKey)) {
63
- firstModelVersions.set(modelKey, schema.version);
87
+ firstModelVersions.set(modelKey, currentVersion);
88
+ }
89
+ const modelVersion = firstModelVersions.get(modelKey);
90
+ modelVersions[modelKey] = modelVersion.major;
91
+ if (modelVersion.minor > 0) {
92
+ modelMinorVersions[modelKey] = modelVersion.minor;
64
93
  }
65
- modelVersions[modelKey] = firstModelVersions.get(modelKey);
66
94
  if (modelDef.type !== "record") continue;
67
95
  let fieldVersionsForModel = firstFieldVersions.get(modelKey);
68
96
  if (fieldVersionsForModel == null) {
@@ -70,19 +98,29 @@ function deriveProvenance(schemas) {
70
98
  firstFieldVersions.set(modelKey, fieldVersionsForModel);
71
99
  }
72
100
  const fields = {};
101
+ const minorFields = {};
73
102
  for (const fieldKey of Object.keys(modelDef.fields)) {
74
103
  if (!fieldVersionsForModel.has(fieldKey)) {
75
- fieldVersionsForModel.set(fieldKey, schema.version);
104
+ fieldVersionsForModel.set(fieldKey, currentVersion);
105
+ }
106
+ const fieldVersion = fieldVersionsForModel.get(fieldKey);
107
+ fields[fieldKey] = fieldVersion.major;
108
+ if (fieldVersion.minor > 0) {
109
+ minorFields[fieldKey] = fieldVersion.minor;
76
110
  }
77
- fields[fieldKey] = fieldVersionsForModel.get(fieldKey);
78
111
  }
79
112
  if (Object.keys(fields).length > 0) {
80
113
  fieldVersions[modelKey] = fields;
81
114
  }
115
+ if (Object.keys(minorFields).length > 0) {
116
+ fieldMinorVersions[modelKey] = minorFields;
117
+ }
82
118
  }
83
119
  return {
84
120
  fieldVersions,
85
121
  modelVersions,
122
+ fieldMinorVersions,
123
+ modelMinorVersions,
86
124
  deprecations: "deprecations" in schema ? schema.deprecations : undefined
87
125
  };
88
126
  });
@@ -114,7 +152,7 @@ export function resolveMinVersion(chain, minSupportedVersion) {
114
152
  }
115
153
  const latestVersion = chain[chain.length - 1].version;
116
154
  if (minSupportedVersion != null && !chain.some(c => c.version === minSupportedVersion)) {
117
- throw new Error(`minSupportedVersion ${minSupportedVersion} is not in the schema chain ` + `(available versions: ${chain.map(c => c.version).join(", ")})`);
155
+ throw new Error(`minSupportedVersion ${minSupportedVersion} is not in the schema chain ` + `(available versions: ${chain.map(formatEntryVersion).join(", ")})`);
118
156
  }
119
157
  return {
120
158
  latestVersion,
@@ -125,10 +163,13 @@ function capVersionedIrChain(chain, maxVersion) {
125
163
  if (maxVersion == null) {
126
164
  return chain;
127
165
  }
128
- if (!chain.some(c => c.version === maxVersion)) {
129
- throw new Error(`maxVersion ${maxVersion} is not in the schema chain ` + `(available versions: ${chain.map(c => c.version).join(", ")})`);
166
+ const maxIndex = chain.findIndex(c => c.version === maxVersion.major && getEntryMinorVersion(c) === maxVersion.minor);
167
+ if (maxIndex === -1) {
168
+ throw new Error(`maxVersion ${formatSchemaVersion(maxVersion.major, maxVersion.minor)} is not in the schema chain ` + `(available versions: ${chain.map(formatEntryVersion).join(", ")})`);
130
169
  }
131
- return chain.filter(c => c.version <= maxVersion);
170
+
171
+ // The chain is in version order, so everything up to the match is at or below it.
172
+ return chain.slice(0, maxIndex + 1);
132
173
  }
133
174
 
134
175
  /**
@@ -190,6 +231,47 @@ export function stripDeprecatedFieldsForSdk(chain) {
190
231
  });
191
232
  }
192
233
 
234
+ /**
235
+ * Merge each major's minor versions into one entry, for generating SDK types.
236
+ *
237
+ * E.g. 3.0, 3.1 and 3.2 become one `3` entry that uses 3.2's IR, so `ShapeBox_v3` has every 3.x
238
+ * field. Migrations from all three are kept, because each lives only on the version that added it.
239
+ */
240
+ export function collapseChainToMajors(chain) {
241
+ const collapsed = [];
242
+ for (const entry of chain) {
243
+ const previous = collapsed[collapsed.length - 1];
244
+ const migrations = previous?.version === entry.version ? mergeMigrations(previous.migrations, entry.migrations) : entry.migrations;
245
+ const collapsedEntry = {
246
+ version: entry.version,
247
+ ir: entry.ir,
248
+ ...(migrations != null ? {
249
+ migrations
250
+ } : {})
251
+ };
252
+ if (previous?.version === entry.version) {
253
+ collapsed[collapsed.length - 1] = collapsedEntry;
254
+ } else {
255
+ collapsed.push(collapsedEntry);
256
+ }
257
+ }
258
+ return collapsed;
259
+ }
260
+ function mergeMigrations(base, override) {
261
+ if (base == null) return override;
262
+ if (override == null) return base;
263
+ const result = {
264
+ ...base
265
+ };
266
+ for (const [modelKey, fields] of Object.entries(override)) {
267
+ result[modelKey] = {
268
+ ...result[modelKey],
269
+ ...fields
270
+ };
271
+ }
272
+ return result;
273
+ }
274
+
193
275
  /**
194
276
  * True if the chain has any field that requires a runtime upgrade function.
195
277
  * Drives whether the generated SDK emits `DocumentModel` as a factory
@@ -202,6 +284,7 @@ export function stripDeprecatedFieldsForSdk(chain) {
202
284
  * app must supply a zero-arg thunk; `undefined` is not a legal value.
203
285
  *
204
286
  * Optional additive fields don't trigger it; the lens leaves them alone.
287
+ * Pass every version (`stepChain`), so a required field added in a minor, like `title` in 3.2, counts.
205
288
  */
206
289
  export function chainNeedsUpgradeFns(chain) {
207
290
  for (let i = 1; i < chain.length; i++) {
@@ -223,4 +306,9 @@ export function chainNeedsUpgradeFns(chain) {
223
306
  }
224
307
  return false;
225
308
  }
309
+
310
+ /** Upgrade function key for a step: `v2` for 2.0, `v2_1` for 2.1. Must match the key `applyReadLens` builds. */
311
+ export function upgradeStepKey(major, minor) {
312
+ return minor > 0 ? `v${major}_${minor}` : `v${major}`;
313
+ }
226
314
  //# sourceMappingURL=resolveSchemaChain.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveSchemaChain.js","names":["IModelDef","IModelDefCtor","convertSchemaToIr","collectVersionedIrChain","input","identity","schemas","collectSchemaDefinitions","provenances","deriveProvenance","map","schema","index","version","ir","models","name","description","type","migrations","serializeMigrations","current","unshift","previous","firstModelVersions","Map","firstFieldVersions","modelVersions","fieldVersions","modelKey","modelDef","Object","entries","has","set","get","fieldVersionsForModel","fields","fieldKey","keys","length","deprecations","undefined","result","fieldEntries","fieldName","migration","derivedFrom","resolveMinVersion","chain","minSupportedVersion","Error","latestVersion","some","c","join","minVersion","capVersionedIrChain","maxVersion","filter","resolveSchemaChain","stripDeprecatedFieldsForSdk","entry","record","field","dep","metadata","deprecatedFromVersion","chainNeedsUpgradeFns","i","prevEntry","currEntry","currModelDef","prevModelDef","prevFields","Set","f","key","recordMigrations","isOptional"],"sources":["resolveSchemaChain.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { SchemaDefinition, VersionMigrations } from \"@palantir/pack.schema\";\nimport type {\n IModelDef,\n IRealTimeDocumentSchema,\n} from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { IModelDef as IModelDefCtor } from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport type { SchemaProvenance } from \"../steps/convertStepsToIr.js\";\nimport { convertSchemaToIr } from \"../steps/convertStepsToIr.js\";\n\n/** JSON-serializable form of a single field migration. */\nexport interface SerializedFieldMigration {\n readonly derivedFrom: readonly string[];\n}\n\n/** Serialized migrations keyed by `[recordModelName][fieldName]`. */\nexport type SerializedVersionMigrations = Record<\n string,\n Record<string, SerializedFieldMigration>\n>;\n\nexport interface VersionedIrEntry {\n version: number;\n ir: IRealTimeDocumentSchema;\n migrations?: SerializedVersionMigrations;\n}\n\nexport interface ResolvedIrChain {\n chain: VersionedIrEntry[];\n latestVersion: number;\n minVersion: number;\n}\n\nexport interface IrChainPayload {\n comment?: string;\n latestVersion: number;\n minSupportedVersion?: number;\n owningApplicationId?: string;\n chain: VersionedIrEntry[];\n}\n\nexport interface SchemaIdentity {\n readonly name?: string;\n readonly description?: string;\n}\n\nfunction collectVersionedIrChain(\n input: SchemaDefinition,\n identity: SchemaIdentity,\n): VersionedIrEntry[] {\n const schemas = collectSchemaDefinitions(input);\n const provenances = deriveProvenance(schemas);\n\n return schemas.map((schema, index): VersionedIrEntry => ({\n version: schema.version,\n ir: convertSchemaToIr(\n schema.models,\n { version: schema.version, name: identity.name, description: identity.description },\n provenances[index]!,\n ),\n ...(schema.type === \"versioned\" ? { migrations: serializeMigrations(schema.migrations) } : {}),\n }));\n}\n\nfunction collectSchemaDefinitions(input: SchemaDefinition): SchemaDefinition[] {\n const schemas: SchemaDefinition[] = [];\n let current: SchemaDefinition = input;\n\n while (current.type === \"versioned\") {\n schemas.unshift(current);\n current = current.previous;\n }\n schemas.unshift(current);\n\n return schemas;\n}\n\n/**\n * Build field/model provenance by walking the version chain from oldest to\n * newest. The first version where a model key or record field appears is the\n * version stamped into IR metadata.\n */\nfunction deriveProvenance(schemas: readonly SchemaDefinition[]): SchemaProvenance[] {\n const firstModelVersions = new Map<string, number>();\n const firstFieldVersions = new Map<string, Map<string, number>>();\n\n return schemas.map(schema => {\n const modelVersions: Record<string, number> = {};\n const fieldVersions: Record<string, Record<string, number>> = {};\n\n for (const [modelKey, modelDef] of Object.entries(schema.models)) {\n if (!firstModelVersions.has(modelKey)) {\n firstModelVersions.set(modelKey, schema.version);\n }\n modelVersions[modelKey] = firstModelVersions.get(modelKey)!;\n\n if (modelDef.type !== \"record\") continue;\n\n let fieldVersionsForModel = firstFieldVersions.get(modelKey);\n if (fieldVersionsForModel == null) {\n fieldVersionsForModel = new Map<string, number>();\n firstFieldVersions.set(modelKey, fieldVersionsForModel);\n }\n\n const fields: Record<string, number> = {};\n for (const fieldKey of Object.keys(modelDef.fields)) {\n if (!fieldVersionsForModel.has(fieldKey)) {\n fieldVersionsForModel.set(fieldKey, schema.version);\n }\n fields[fieldKey] = fieldVersionsForModel.get(fieldKey)!;\n }\n\n if (Object.keys(fields).length > 0) {\n fieldVersions[modelKey] = fields;\n }\n }\n\n return {\n fieldVersions,\n modelVersions,\n deprecations: \"deprecations\" in schema ? schema.deprecations : undefined,\n };\n });\n}\n\n/** Convert schema-builder migrations to their JSON-serializable form. */\nfunction serializeMigrations(\n migrations: VersionMigrations | undefined,\n): SerializedVersionMigrations | undefined {\n if (migrations == null) return undefined;\n const result: SerializedVersionMigrations = {};\n for (const [modelKey, fields] of Object.entries(migrations)) {\n const fieldEntries: Record<string, SerializedFieldMigration> = {};\n for (const [fieldName, migration] of Object.entries(fields)) {\n fieldEntries[fieldName] = {\n derivedFrom: [...migration.derivedFrom],\n };\n }\n result[modelKey] = fieldEntries;\n }\n return result;\n}\n\n/**\n * Validate `minSupportedVersion` against an already-resolved chain and return\n * the effective `minVersion`. Throws on invalid input.\n */\nexport function resolveMinVersion(\n chain: VersionedIrEntry[],\n minSupportedVersion: number | undefined,\n): { latestVersion: number; minVersion: number } {\n if (chain.length === 0) {\n throw new Error(\"Schema version chain is empty\");\n }\n\n const latestVersion = chain[chain.length - 1]!.version;\n\n if (minSupportedVersion != null && !chain.some(c => c.version === minSupportedVersion)) {\n throw new Error(\n `minSupportedVersion ${minSupportedVersion} is not in the schema chain `\n + `(available versions: ${chain.map(c => c.version).join(\", \")})`,\n );\n }\n\n return {\n latestVersion,\n minVersion: minSupportedVersion ?? latestVersion,\n };\n}\n\nfunction capVersionedIrChain(\n chain: VersionedIrEntry[],\n maxVersion: number | undefined,\n): VersionedIrEntry[] {\n if (maxVersion == null) {\n return chain;\n }\n\n if (!chain.some(c => c.version === maxVersion)) {\n throw new Error(\n `maxVersion ${maxVersion} is not in the schema chain `\n + `(available versions: ${chain.map(c => c.version).join(\", \")})`,\n );\n }\n\n return chain.filter(c => c.version <= maxVersion);\n}\n\n/**\n * Collect the version chain and resolve min/latest versions.\n * Each version's models are converted to IR (IRealTimeDocumentSchema).\n * `identity.name` / `identity.description` are embedded into each chain entry's\n * IR; when omitted (e.g. test callers), `convertSchemaToIr` falls back to its\n * defaults.\n * Throws on empty chain or invalid minSupportedVersion.\n */\nexport function resolveSchemaChain(\n schema: SchemaDefinition,\n minSupportedVersion?: number,\n identity: SchemaIdentity = {},\n maxVersion?: number,\n): ResolvedIrChain {\n const chain = capVersionedIrChain(collectVersionedIrChain(schema, identity), maxVersion);\n const { latestVersion, minVersion } = resolveMinVersion(chain, minSupportedVersion);\n return { chain, latestVersion, minVersion };\n}\n\n/**\n * Return a copy of the chain with deprecated fields removed from every version\n * at or after the version in which they were deprecated.\n *\n * The SDK type generators (`writeAllSdkFiles` and friends) must treat a\n * deprecated field exactly as a removed field: it disappears from that version's\n * public read/write types and per-version internal types, and the prev/curr diff\n * records it as a `removedField` (driving the upgrade lens). The field is still\n * collected into the all-versions `__Internal` type from earlier versions, which\n * are left untouched.\n */\nexport function stripDeprecatedFieldsForSdk(chain: VersionedIrEntry[]): VersionedIrEntry[] {\n return chain.map((entry): VersionedIrEntry => {\n const models: Record<string, IModelDef> = {};\n for (const [modelKey, modelDef] of Object.entries(entry.ir.models)) {\n if (modelDef.type === \"record\") {\n const fields = modelDef.record.fields.filter(field => {\n const dep = field.metadata.deprecatedFromVersion;\n return dep == null || entry.version < dep;\n });\n models[modelKey] = IModelDefCtor.record({ ...modelDef.record, fields });\n } else {\n models[modelKey] = modelDef;\n }\n }\n return { ...entry, ir: { ...entry.ir, models } };\n });\n}\n\n/**\n * True if the chain has any field that requires a runtime upgrade function.\n * Drives whether the generated SDK emits `DocumentModel` as a factory\n * (requires the app to supply typed upgrade functions) or as a const.\n *\n * Two cases trigger this:\n * - A field declares `derivedFrom` with one or more source fields — the app\n * must supply a forward function.\n * - A required field is added in a version past v1 (no `derivedFrom`) — the\n * app must supply a zero-arg thunk; `undefined` is not a legal value.\n *\n * Optional additive fields don't trigger it; the lens leaves them alone.\n */\nexport function chainNeedsUpgradeFns(chain: VersionedIrEntry[]): boolean {\n for (let i = 1; i < chain.length; i++) {\n const prevEntry = chain[i - 1]!;\n const currEntry = chain[i]!;\n for (const [modelKey, currModelDef] of Object.entries(currEntry.ir.models)) {\n if (currModelDef.type !== \"record\") continue;\n const prevModelDef = prevEntry.ir.models[modelKey];\n if (prevModelDef == null || prevModelDef.type !== \"record\") continue;\n const prevFields = new Set(prevModelDef.record.fields.map(f => f.key));\n const recordMigrations = currEntry.migrations?.[modelKey];\n for (const field of currModelDef.record.fields) {\n if (prevFields.has(field.key)) continue;\n const derivedFrom = recordMigrations?.[field.key]?.derivedFrom ?? [];\n if (derivedFrom.length > 0) return true;\n if (field.isOptional !== true) return true;\n }\n }\n }\n return false;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"resolveSchemaChain.js","names":["IModelDef","IModelDefCtor","convertSchemaToIr","getEntryMinorVersion","entry","minorVersion","formatSchemaVersion","major","minor","formatEntryVersion","version","getSchemaMinorVersion","schema","type","collectVersionedIrChain","input","identity","schemas","collectSchemaDefinitions","provenances","deriveProvenance","map","index","ir","models","name","description","migrations","serializeMigrations","current","unshift","previous","firstModelVersions","Map","firstFieldVersions","currentVersion","modelVersions","modelMinorVersions","fieldVersions","fieldMinorVersions","modelKey","modelDef","Object","entries","has","set","modelVersion","get","fieldVersionsForModel","fields","minorFields","fieldKey","keys","fieldVersion","length","deprecations","undefined","result","fieldEntries","fieldName","migration","derivedFrom","resolveMinVersion","chain","minSupportedVersion","Error","latestVersion","some","c","join","minVersion","capVersionedIrChain","maxVersion","maxIndex","findIndex","slice","resolveSchemaChain","stripDeprecatedFieldsForSdk","record","filter","field","dep","metadata","deprecatedFromVersion","collapseChainToMajors","collapsed","mergeMigrations","collapsedEntry","push","base","override","chainNeedsUpgradeFns","i","prevEntry","currEntry","currModelDef","prevModelDef","prevFields","Set","f","key","recordMigrations","isOptional","upgradeStepKey"],"sources":["resolveSchemaChain.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { SchemaDefinition, VersionMigrations } from \"@palantir/pack.schema\";\nimport type {\n IModelDef,\n IRealTimeDocumentSchema,\n} from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { IModelDef as IModelDefCtor } from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport type { SchemaProvenance } from \"../steps/convertStepsToIr.js\";\nimport { convertSchemaToIr } from \"../steps/convertStepsToIr.js\";\n\n/** JSON-serializable form of a single field migration. */\nexport interface SerializedFieldMigration {\n readonly derivedFrom: readonly string[];\n}\n\n/** Serialized migrations keyed by `[recordModelName][fieldName]`. */\nexport type SerializedVersionMigrations = Record<\n string,\n Record<string, SerializedFieldMigration>\n>;\n\nexport interface VersionedIrEntry {\n version: number;\n minorVersion?: number;\n ir: IRealTimeDocumentSchema;\n migrations?: SerializedVersionMigrations;\n}\n\nexport interface ResolvedIrChain {\n chain: VersionedIrEntry[];\n latestVersion: number;\n minVersion: number;\n /**\n * Every version, including minors (e.g. 3.0, 3.1, 3.2). `chain` merges these into one entry per\n * major. Upgrade steps compare neighbors here, so `title` added in 3.2 gets a `v3_2` step.\n * If absent, `chain` is used.\n */\n stepChain?: VersionedIrEntry[];\n}\n\nexport interface IrChainPayload {\n comment?: string;\n latestVersion: number;\n minSupportedVersion?: number;\n owningApplicationId?: string;\n chain: VersionedIrEntry[];\n}\n\nexport interface FullSchemaVersion {\n readonly major: number;\n readonly minor: number;\n}\n\nexport function getEntryMinorVersion(entry: VersionedIrEntry): number {\n return entry.minorVersion ?? 0;\n}\n\nexport function formatSchemaVersion(major: number, minor: number): string {\n return minor > 0 ? `${major}.${minor}` : `${major}`;\n}\n\nfunction formatEntryVersion(entry: VersionedIrEntry): string {\n return formatSchemaVersion(entry.version, getEntryMinorVersion(entry));\n}\n\nfunction getSchemaMinorVersion(schema: SchemaDefinition): number {\n return schema.type === \"versioned\" ? schema.minorVersion ?? 0 : 0;\n}\n\nexport interface SchemaIdentity {\n readonly name?: string;\n readonly description?: string;\n}\n\nfunction collectVersionedIrChain(\n input: SchemaDefinition,\n identity: SchemaIdentity,\n): VersionedIrEntry[] {\n const schemas = collectSchemaDefinitions(input);\n const provenances = deriveProvenance(schemas);\n\n return schemas.map((schema, index): VersionedIrEntry => {\n const minorVersion = getSchemaMinorVersion(schema);\n return {\n version: schema.version,\n ...(minorVersion > 0 ? { minorVersion } : {}),\n ir: convertSchemaToIr(\n schema.models,\n { version: schema.version, name: identity.name, description: identity.description },\n provenances[index]!,\n ),\n ...(schema.type === \"versioned\"\n ? { migrations: serializeMigrations(schema.migrations) }\n : {}),\n };\n });\n}\n\nfunction collectSchemaDefinitions(input: SchemaDefinition): SchemaDefinition[] {\n const schemas: SchemaDefinition[] = [];\n let current: SchemaDefinition = input;\n\n while (current.type === \"versioned\") {\n schemas.unshift(current);\n current = current.previous;\n }\n schemas.unshift(current);\n\n return schemas;\n}\n\n/**\n * Build field/model provenance by walking the version chain from oldest to\n * newest. The first version (major and minor) where a model key or record field\n * appears is the version stamped into IR metadata.\n */\nfunction deriveProvenance(schemas: readonly SchemaDefinition[]): SchemaProvenance[] {\n const firstModelVersions = new Map<string, FullSchemaVersion>();\n const firstFieldVersions = new Map<string, Map<string, FullSchemaVersion>>();\n\n return schemas.map(schema => {\n const currentVersion = { major: schema.version, minor: getSchemaMinorVersion(schema) };\n const modelVersions: Record<string, number> = {};\n const modelMinorVersions: Record<string, number> = {};\n const fieldVersions: Record<string, Record<string, number>> = {};\n const fieldMinorVersions: Record<string, Record<string, number>> = {};\n\n for (const [modelKey, modelDef] of Object.entries(schema.models)) {\n if (!firstModelVersions.has(modelKey)) {\n firstModelVersions.set(modelKey, currentVersion);\n }\n const modelVersion = firstModelVersions.get(modelKey)!;\n modelVersions[modelKey] = modelVersion.major;\n if (modelVersion.minor > 0) {\n modelMinorVersions[modelKey] = modelVersion.minor;\n }\n\n if (modelDef.type !== \"record\") continue;\n\n let fieldVersionsForModel = firstFieldVersions.get(modelKey);\n if (fieldVersionsForModel == null) {\n fieldVersionsForModel = new Map<string, FullSchemaVersion>();\n firstFieldVersions.set(modelKey, fieldVersionsForModel);\n }\n\n const fields: Record<string, number> = {};\n const minorFields: Record<string, number> = {};\n for (const fieldKey of Object.keys(modelDef.fields)) {\n if (!fieldVersionsForModel.has(fieldKey)) {\n fieldVersionsForModel.set(fieldKey, currentVersion);\n }\n const fieldVersion = fieldVersionsForModel.get(fieldKey)!;\n fields[fieldKey] = fieldVersion.major;\n if (fieldVersion.minor > 0) {\n minorFields[fieldKey] = fieldVersion.minor;\n }\n }\n\n if (Object.keys(fields).length > 0) {\n fieldVersions[modelKey] = fields;\n }\n if (Object.keys(minorFields).length > 0) {\n fieldMinorVersions[modelKey] = minorFields;\n }\n }\n\n return {\n fieldVersions,\n modelVersions,\n fieldMinorVersions,\n modelMinorVersions,\n deprecations: \"deprecations\" in schema ? schema.deprecations : undefined,\n };\n });\n}\n\n/** Convert schema-builder migrations to their JSON-serializable form. */\nfunction serializeMigrations(\n migrations: VersionMigrations | undefined,\n): SerializedVersionMigrations | undefined {\n if (migrations == null) return undefined;\n const result: SerializedVersionMigrations = {};\n for (const [modelKey, fields] of Object.entries(migrations)) {\n const fieldEntries: Record<string, SerializedFieldMigration> = {};\n for (const [fieldName, migration] of Object.entries(fields)) {\n fieldEntries[fieldName] = {\n derivedFrom: [...migration.derivedFrom],\n };\n }\n result[modelKey] = fieldEntries;\n }\n return result;\n}\n\n/**\n * Validate `minSupportedVersion` against an already-resolved chain and return\n * the effective `minVersion`. Throws on invalid input.\n */\nexport function resolveMinVersion(\n chain: VersionedIrEntry[],\n minSupportedVersion: number | undefined,\n): { latestVersion: number; minVersion: number } {\n if (chain.length === 0) {\n throw new Error(\"Schema version chain is empty\");\n }\n\n const latestVersion = chain[chain.length - 1]!.version;\n\n if (minSupportedVersion != null && !chain.some(c => c.version === minSupportedVersion)) {\n throw new Error(\n `minSupportedVersion ${minSupportedVersion} is not in the schema chain `\n + `(available versions: ${chain.map(formatEntryVersion).join(\", \")})`,\n );\n }\n\n return {\n latestVersion,\n minVersion: minSupportedVersion ?? latestVersion,\n };\n}\n\nfunction capVersionedIrChain(\n chain: VersionedIrEntry[],\n maxVersion: FullSchemaVersion | undefined,\n): VersionedIrEntry[] {\n if (maxVersion == null) {\n return chain;\n }\n\n const maxIndex = chain.findIndex(c =>\n c.version === maxVersion.major && getEntryMinorVersion(c) === maxVersion.minor\n );\n if (maxIndex === -1) {\n throw new Error(\n `maxVersion ${\n formatSchemaVersion(maxVersion.major, maxVersion.minor)\n } is not in the schema chain `\n + `(available versions: ${chain.map(formatEntryVersion).join(\", \")})`,\n );\n }\n\n // The chain is in version order, so everything up to the match is at or below it.\n return chain.slice(0, maxIndex + 1);\n}\n\n/**\n * Collect the version chain and resolve min/latest versions.\n * Each version's models are converted to IR (IRealTimeDocumentSchema).\n * `identity.name` / `identity.description` are embedded into each chain entry's\n * IR; when omitted (e.g. test callers), `convertSchemaToIr` falls back to its\n * defaults.\n * Throws on empty chain or invalid minSupportedVersion.\n */\nexport function resolveSchemaChain(\n schema: SchemaDefinition,\n minSupportedVersion?: number,\n identity: SchemaIdentity = {},\n maxVersion?: FullSchemaVersion,\n): ResolvedIrChain {\n const chain = capVersionedIrChain(collectVersionedIrChain(schema, identity), maxVersion);\n const { latestVersion, minVersion } = resolveMinVersion(chain, minSupportedVersion);\n return { chain, latestVersion, minVersion };\n}\n\n/**\n * Return a copy of the chain with deprecated fields removed from every version\n * at or after the version in which they were deprecated.\n *\n * The SDK type generators (`writeAllSdkFiles` and friends) must treat a\n * deprecated field exactly as a removed field: it disappears from that version's\n * public read/write types and per-version internal types, and the prev/curr diff\n * records it as a `removedField` (driving the upgrade lens). The field is still\n * collected into the all-versions `__Internal` type from earlier versions, which\n * are left untouched.\n */\nexport function stripDeprecatedFieldsForSdk(chain: VersionedIrEntry[]): VersionedIrEntry[] {\n return chain.map((entry): VersionedIrEntry => {\n const models: Record<string, IModelDef> = {};\n for (const [modelKey, modelDef] of Object.entries(entry.ir.models)) {\n if (modelDef.type === \"record\") {\n const fields = modelDef.record.fields.filter(field => {\n const dep = field.metadata.deprecatedFromVersion;\n return dep == null || entry.version < dep;\n });\n models[modelKey] = IModelDefCtor.record({ ...modelDef.record, fields });\n } else {\n models[modelKey] = modelDef;\n }\n }\n return { ...entry, ir: { ...entry.ir, models } };\n });\n}\n\n/**\n * Merge each major's minor versions into one entry, for generating SDK types.\n *\n * E.g. 3.0, 3.1 and 3.2 become one `3` entry that uses 3.2's IR, so `ShapeBox_v3` has every 3.x\n * field. Migrations from all three are kept, because each lives only on the version that added it.\n */\nexport function collapseChainToMajors(chain: VersionedIrEntry[]): VersionedIrEntry[] {\n const collapsed: VersionedIrEntry[] = [];\n for (const entry of chain) {\n const previous = collapsed[collapsed.length - 1];\n const migrations = previous?.version === entry.version\n ? mergeMigrations(previous.migrations, entry.migrations)\n : entry.migrations;\n const collapsedEntry: VersionedIrEntry = {\n version: entry.version,\n ir: entry.ir,\n ...(migrations != null ? { migrations } : {}),\n };\n if (previous?.version === entry.version) {\n collapsed[collapsed.length - 1] = collapsedEntry;\n } else {\n collapsed.push(collapsedEntry);\n }\n }\n return collapsed;\n}\n\nfunction mergeMigrations(\n base: SerializedVersionMigrations | undefined,\n override: SerializedVersionMigrations | undefined,\n): SerializedVersionMigrations | undefined {\n if (base == null) return override;\n if (override == null) return base;\n const result: SerializedVersionMigrations = { ...base };\n for (const [modelKey, fields] of Object.entries(override)) {\n result[modelKey] = { ...result[modelKey], ...fields };\n }\n return result;\n}\n\n/**\n * True if the chain has any field that requires a runtime upgrade function.\n * Drives whether the generated SDK emits `DocumentModel` as a factory\n * (requires the app to supply typed upgrade functions) or as a const.\n *\n * Two cases trigger this:\n * - A field declares `derivedFrom` with one or more source fields — the app\n * must supply a forward function.\n * - A required field is added in a version past v1 (no `derivedFrom`) — the\n * app must supply a zero-arg thunk; `undefined` is not a legal value.\n *\n * Optional additive fields don't trigger it; the lens leaves them alone.\n * Pass every version (`stepChain`), so a required field added in a minor, like `title` in 3.2, counts.\n */\nexport function chainNeedsUpgradeFns(chain: VersionedIrEntry[]): boolean {\n for (let i = 1; i < chain.length; i++) {\n const prevEntry = chain[i - 1]!;\n const currEntry = chain[i]!;\n for (const [modelKey, currModelDef] of Object.entries(currEntry.ir.models)) {\n if (currModelDef.type !== \"record\") continue;\n const prevModelDef = prevEntry.ir.models[modelKey];\n if (prevModelDef == null || prevModelDef.type !== \"record\") continue;\n const prevFields = new Set(prevModelDef.record.fields.map(f => f.key));\n const recordMigrations = currEntry.migrations?.[modelKey];\n for (const field of currModelDef.record.fields) {\n if (prevFields.has(field.key)) continue;\n const derivedFrom = recordMigrations?.[field.key]?.derivedFrom ?? [];\n if (derivedFrom.length > 0) return true;\n if (field.isOptional !== true) return true;\n }\n }\n }\n return false;\n}\n\n/** Upgrade function key for a step: `v2` for 2.0, `v2_1` for 2.1. Must match the key `applyReadLens` builds. */\nexport function upgradeStepKey(major: number, minor: number): string {\n return minor > 0 ? `v${major}_${minor}` : `v${major}`;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -14,6 +14,8 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
+ import { formatVariantName } from "@palantir/pack.schema";
18
+
17
19
  /** Versioned read type name: `RecordName_vN` */
18
20
  export function versionedTypeName(exportName, version) {
19
21
  return `${exportName}_v${version}`;
@@ -49,6 +51,51 @@ export function schemaName(exportName) {
49
51
  return `${exportName}Schema`;
50
52
  }
51
53
 
54
+ /** Union variant name: (`Shape_v1`, `"my-box"`) -> `Shape_v1MyBox`. */
55
+ export function unionVariantName(unionName, variantKey) {
56
+ return `${unionName}${formatVariantName(variantKey)}`;
57
+ }
58
+
59
+ /** Type guard function name: `isShape_v1Circle` */
60
+ export function typeGuardName(typeName) {
61
+ return `is${typeName}`;
62
+ }
63
+
64
+ /** Upgrade registry constant name: `RecordNameUpgrades` */
65
+ export function upgradesName(modelKey) {
66
+ return `${modelKey}Upgrades`;
67
+ }
68
+
69
+ /** All-versions internal type name: `RecordName__Internal` */
70
+ export function internalTypeName(modelKey) {
71
+ return `${modelKey}__Internal`;
72
+ }
73
+
74
+ /** Per-version internal type name: `RecordName__vN` */
75
+ export function versionedInternalTypeName(modelKey, version) {
76
+ return `${modelKey}__v${version}`;
77
+ }
78
+
79
+ /** Internal Zod schema name: `RecordNameInternalSchema` */
80
+ export function internalSchemaName(modelKey) {
81
+ return `${modelKey}InternalSchema`;
82
+ }
83
+
84
+ /** Versioned document ref type name: `VersionedDocRef_vN` */
85
+ export function versionedDocRefName(version) {
86
+ return `VersionedDocRef_v${version}`;
87
+ }
88
+
89
+ /**
90
+ * Names the SDK uses in the same files as model names, so no model may produce one. Other
91
+ * library names only appear next to suffixed names like `Foo_v1`, so they can't clash.
92
+ */
93
+ export const RESERVED_SDK_NAMES = [
94
+ // Fixed SDK exports
95
+ "DOCUMENT_TYPE_DESCRIPTION", "DOCUMENT_TYPE_NAME", "DocumentModel", "DocumentUpgradeFns", "LatestVersion", "MinSupportedVersion", "SupportedVersions", "VersionedDocRef", "asVersioned", "matchVersion",
96
+ // Imported or called by models.ts
97
+ "DocumentSchema", "Metadata", "RecordModel", "ReturnType", "UnionModel", "UpgradeFns"];
98
+
52
99
  /** Per-version types file path: `./types_vN.js` */
53
100
  export function typesFilePath(version) {
54
101
  return `./types_v${version}.js`;
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeSchema.js","names":["versionedTypeName","exportName","version","knownTypeName","unionTypeName","narrowKnownFunctionName","versionedWriteTypeName","versionedSchemaName","modelName","schemaName","typesFilePath","writeTypesFilePath","TYPES_REEXPORT_PATH","SCHEMA_REEXPORT_PATH","MODELS_PATH","INTERNAL_UPGRADES_PATH","INTERNAL_UPGRADE_FNS_PATH","VERSIONS_PATH","VERSIONED_DOC_REF_PATH","DOCUMENT_TYPE_PATH"],"sources":["runtimeSchema.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\n/** Versioned read type name: `RecordName_vN` */\nexport function versionedTypeName(exportName: string, version: number): string {\n return `${exportName}_v${version}`;\n}\n\n/** e.g. `NodeShape_v3` -> `KnownNodeShape_v3`: a union's variants without the Unknown case. */\nexport function knownTypeName(unionTypeName: string): string {\n return `Known${unionTypeName}`;\n}\n\n/** e.g. `NodeShape_v3` -> `narrowKnownNodeShape_v3`. */\nexport function narrowKnownFunctionName(unionTypeName: string): string {\n return `narrowKnown${unionTypeName}`;\n}\n\n/** Versioned write type name: `RecordNameUpdate_vN` */\nexport function versionedWriteTypeName(exportName: string, version: number): string {\n return `${exportName}Update_v${version}`;\n}\n\n/** Versioned Zod schema name: `RecordNameSchema_vN` */\nexport function versionedSchemaName(exportName: string, version: number): string {\n return `${exportName}Schema_v${version}`;\n}\n\n/** Model constant name: `RecordNameModel` */\nexport function modelName(exportName: string): string {\n return `${exportName}Model`;\n}\n\n/** Unversioned Zod schema name: `RecordNameSchema` */\nexport function schemaName(exportName: string): string {\n return `${exportName}Schema`;\n}\n\n/** Per-version types file path: `./types_vN.js` */\nexport function typesFilePath(version: number): string {\n return `./types_v${version}.js`;\n}\n\n/** Per-version write types file path: `./writeTypes_vN.js` */\nexport function writeTypesFilePath(version: number): string {\n return `./writeTypes_v${version}.js`;\n}\n\n/** Types re-export file path: `./types.js` */\nexport const TYPES_REEXPORT_PATH = \"./types.js\";\n\n/** Schema re-export file path: `./schema.js` */\nexport const SCHEMA_REEXPORT_PATH = \"./schema.js\";\n\n/** Models file path: `./models.js` */\nexport const MODELS_PATH = \"./models.js\";\n\n/** Internal upgrades file path: `./_internal/upgrades.js` */\nexport const INTERNAL_UPGRADES_PATH = \"./_internal/upgrades.js\";\n\n/** Internal upgrade-functions file path: `./_internal/upgradeFns.js` */\nexport const INTERNAL_UPGRADE_FNS_PATH = \"./_internal/upgradeFns.js\";\n\n/** Versions file path: `./versions.js` */\nexport const VERSIONS_PATH = \"./versions.js\";\n\n/** Versioned doc ref file path: `./versionedDocRef.js` */\nexport const VERSIONED_DOC_REF_PATH = \"./versionedDocRef.js\";\n\n/** Document type identity constants file path: `./documentType.js` */\nexport const DOCUMENT_TYPE_PATH = \"./documentType.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,SAASA,iBAAiBA,CAACC,UAAkB,EAAEC,OAAe,EAAU;EAC7E,OAAO,GAAGD,UAAU,KAAKC,OAAO,EAAE;AACpC;;AAEA;AACA,OAAO,SAASC,aAAaA,CAACC,aAAqB,EAAU;EAC3D,OAAO,QAAQA,aAAa,EAAE;AAChC;;AAEA;AACA,OAAO,SAASC,uBAAuBA,CAACD,aAAqB,EAAU;EACrE,OAAO,cAAcA,aAAa,EAAE;AACtC;;AAEA;AACA,OAAO,SAASE,sBAAsBA,CAACL,UAAkB,EAAEC,OAAe,EAAU;EAClF,OAAO,GAAGD,UAAU,WAAWC,OAAO,EAAE;AAC1C;;AAEA;AACA,OAAO,SAASK,mBAAmBA,CAACN,UAAkB,EAAEC,OAAe,EAAU;EAC/E,OAAO,GAAGD,UAAU,WAAWC,OAAO,EAAE;AAC1C;;AAEA;AACA,OAAO,SAASM,SAASA,CAACP,UAAkB,EAAU;EACpD,OAAO,GAAGA,UAAU,OAAO;AAC7B;;AAEA;AACA,OAAO,SAASQ,UAAUA,CAACR,UAAkB,EAAU;EACrD,OAAO,GAAGA,UAAU,QAAQ;AAC9B;;AAEA;AACA,OAAO,SAASS,aAAaA,CAACR,OAAe,EAAU;EACrD,OAAO,YAAYA,OAAO,KAAK;AACjC;;AAEA;AACA,OAAO,SAASS,kBAAkBA,CAACT,OAAe,EAAU;EAC1D,OAAO,iBAAiBA,OAAO,KAAK;AACtC;;AAEA;AACA,OAAO,MAAMU,mBAAmB,GAAG,YAAY;;AAE/C;AACA,OAAO,MAAMC,oBAAoB,GAAG,aAAa;;AAEjD;AACA,OAAO,MAAMC,WAAW,GAAG,aAAa;;AAExC;AACA,OAAO,MAAMC,sBAAsB,GAAG,yBAAyB;;AAE/D;AACA,OAAO,MAAMC,yBAAyB,GAAG,2BAA2B;;AAEpE;AACA,OAAO,MAAMC,aAAa,GAAG,eAAe;;AAE5C;AACA,OAAO,MAAMC,sBAAsB,GAAG,sBAAsB;;AAE5D;AACA,OAAO,MAAMC,kBAAkB,GAAG,mBAAmB","ignoreList":[]}
1
+ {"version":3,"file":"runtimeSchema.js","names":["formatVariantName","versionedTypeName","exportName","version","knownTypeName","unionTypeName","narrowKnownFunctionName","versionedWriteTypeName","versionedSchemaName","modelName","schemaName","unionVariantName","unionName","variantKey","typeGuardName","typeName","upgradesName","modelKey","internalTypeName","versionedInternalTypeName","internalSchemaName","versionedDocRefName","RESERVED_SDK_NAMES","typesFilePath","writeTypesFilePath","TYPES_REEXPORT_PATH","SCHEMA_REEXPORT_PATH","MODELS_PATH","INTERNAL_UPGRADES_PATH","INTERNAL_UPGRADE_FNS_PATH","VERSIONS_PATH","VERSIONED_DOC_REF_PATH","DOCUMENT_TYPE_PATH"],"sources":["runtimeSchema.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\";\n\n/** Versioned read type name: `RecordName_vN` */\nexport function versionedTypeName(exportName: string, version: number): string {\n return `${exportName}_v${version}`;\n}\n\n/** e.g. `NodeShape_v3` -> `KnownNodeShape_v3`: a union's variants without the Unknown case. */\nexport function knownTypeName(unionTypeName: string): string {\n return `Known${unionTypeName}`;\n}\n\n/** e.g. `NodeShape_v3` -> `narrowKnownNodeShape_v3`. */\nexport function narrowKnownFunctionName(unionTypeName: string): string {\n return `narrowKnown${unionTypeName}`;\n}\n\n/** Versioned write type name: `RecordNameUpdate_vN` */\nexport function versionedWriteTypeName(exportName: string, version: number): string {\n return `${exportName}Update_v${version}`;\n}\n\n/** Versioned Zod schema name: `RecordNameSchema_vN` */\nexport function versionedSchemaName(exportName: string, version: number): string {\n return `${exportName}Schema_v${version}`;\n}\n\n/** Model constant name: `RecordNameModel` */\nexport function modelName(exportName: string): string {\n return `${exportName}Model`;\n}\n\n/** Unversioned Zod schema name: `RecordNameSchema` */\nexport function schemaName(exportName: string): string {\n return `${exportName}Schema`;\n}\n\n/** Union variant name: (`Shape_v1`, `\"my-box\"`) -> `Shape_v1MyBox`. */\nexport function unionVariantName(unionName: string, variantKey: string): string {\n return `${unionName}${formatVariantName(variantKey)}`;\n}\n\n/** Type guard function name: `isShape_v1Circle` */\nexport function typeGuardName(typeName: string): string {\n return `is${typeName}`;\n}\n\n/** Upgrade registry constant name: `RecordNameUpgrades` */\nexport function upgradesName(modelKey: string): string {\n return `${modelKey}Upgrades`;\n}\n\n/** All-versions internal type name: `RecordName__Internal` */\nexport function internalTypeName(modelKey: string): string {\n return `${modelKey}__Internal`;\n}\n\n/** Per-version internal type name: `RecordName__vN` */\nexport function versionedInternalTypeName(modelKey: string, version: number): string {\n return `${modelKey}__v${version}`;\n}\n\n/** Internal Zod schema name: `RecordNameInternalSchema` */\nexport function internalSchemaName(modelKey: string): string {\n return `${modelKey}InternalSchema`;\n}\n\n/** Versioned document ref type name: `VersionedDocRef_vN` */\nexport function versionedDocRefName(version: number): string {\n return `VersionedDocRef_v${version}`;\n}\n\n/**\n * Names the SDK uses in the same files as model names, so no model may produce one. Other\n * library names only appear next to suffixed names like `Foo_v1`, so they can't clash.\n */\nexport const RESERVED_SDK_NAMES: readonly string[] = [\n // Fixed SDK exports\n \"DOCUMENT_TYPE_DESCRIPTION\",\n \"DOCUMENT_TYPE_NAME\",\n \"DocumentModel\",\n \"DocumentUpgradeFns\",\n \"LatestVersion\",\n \"MinSupportedVersion\",\n \"SupportedVersions\",\n \"VersionedDocRef\",\n \"asVersioned\",\n \"matchVersion\",\n // Imported or called by models.ts\n \"DocumentSchema\",\n \"Metadata\",\n \"RecordModel\",\n \"ReturnType\",\n \"UnionModel\",\n \"UpgradeFns\",\n];\n\n/** Per-version types file path: `./types_vN.js` */\nexport function typesFilePath(version: number): string {\n return `./types_v${version}.js`;\n}\n\n/** Per-version write types file path: `./writeTypes_vN.js` */\nexport function writeTypesFilePath(version: number): string {\n return `./writeTypes_v${version}.js`;\n}\n\n/** Types re-export file path: `./types.js` */\nexport const TYPES_REEXPORT_PATH = \"./types.js\";\n\n/** Schema re-export file path: `./schema.js` */\nexport const SCHEMA_REEXPORT_PATH = \"./schema.js\";\n\n/** Models file path: `./models.js` */\nexport const MODELS_PATH = \"./models.js\";\n\n/** Internal upgrades file path: `./_internal/upgrades.js` */\nexport const INTERNAL_UPGRADES_PATH = \"./_internal/upgrades.js\";\n\n/** Internal upgrade-functions file path: `./_internal/upgradeFns.js` */\nexport const INTERNAL_UPGRADE_FNS_PATH = \"./_internal/upgradeFns.js\";\n\n/** Versions file path: `./versions.js` */\nexport const VERSIONS_PATH = \"./versions.js\";\n\n/** Versioned doc ref file path: `./versionedDocRef.js` */\nexport const VERSIONED_DOC_REF_PATH = \"./versionedDocRef.js\";\n\n/** Document type identity constants file path: `./documentType.js` */\nexport const DOCUMENT_TYPE_PATH = \"./documentType.js\";\n"],"mappings":"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","ignoreList":[]}
@@ -17,6 +17,7 @@
17
17
  import { consola } from "consola";
18
18
  import fs from "fs-extra";
19
19
  import path from "path";
20
+ import { assertSdkNamesUnique } from "./assertSdkNamesUnique.js";
20
21
  import { generateDocumentTypeFromChain } from "./generateDocumentTypeFromSchema.js";
21
22
  import { generateIndexFromChain } from "./generateIndexFromSchema.js";
22
23
  import { generateInternalFromChain } from "./generateInternalFromSchema.js";
@@ -30,6 +31,7 @@ import { generateVersionsFromChain } from "./generateVersionsFromSchema.js";
30
31
  * them to `outputDir`.
31
32
  */
32
33
  export async function writeAllSdkFiles(resolved, outputDir, minSupportedVersion) {
34
+ assertSdkNamesUnique(resolved.chain, minSupportedVersion);
33
35
  await fs.ensureDir(outputDir);
34
36
 
35
37
  // Versioned types