@palantir/pack.document-schema.type-gen 0.32.0 → 0.34.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 (131) hide show
  1. package/README.md +7 -0
  2. package/build/esm/commands/ir/__tests__/irDeployFirstParty.test.js +1 -1
  3. package/build/esm/commands/ir/__tests__/irDeployFirstParty.test.js.map +1 -1
  4. package/build/esm/commands/ir/__tests__/irUpdateSchemaHandler.test.js +96 -0
  5. package/build/esm/commands/ir/__tests__/irUpdateSchemaHandler.test.js.map +1 -0
  6. package/build/esm/commands/ir/__tests__/resolveIrInput.test.js +80 -0
  7. package/build/esm/commands/ir/__tests__/resolveIrInput.test.js.map +1 -1
  8. package/build/esm/commands/ir/irDeployHandler.js +6 -1
  9. package/build/esm/commands/ir/irDeployHandler.js.map +1 -1
  10. package/build/esm/commands/ir/irGenAssetHandler.js +6 -1
  11. package/build/esm/commands/ir/irGenAssetHandler.js.map +1 -1
  12. package/build/esm/commands/ir/irGenTypesHandler.js +7 -3
  13. package/build/esm/commands/ir/irGenTypesHandler.js.map +1 -1
  14. package/build/esm/commands/ir/irUpdateSchemaHandler.js +19 -12
  15. package/build/esm/commands/ir/irUpdateSchemaHandler.js.map +1 -1
  16. package/build/esm/commands/ir/resolveIrInput.js +6 -5
  17. package/build/esm/commands/ir/resolveIrInput.js.map +1 -1
  18. package/build/esm/commands/schema/registerSchemaCommands.js +1 -1
  19. package/build/esm/commands/schema/registerSchemaCommands.js.map +1 -1
  20. package/build/esm/commands/schema/schemaIrHandler.js +15 -8
  21. package/build/esm/commands/schema/schemaIrHandler.js.map +1 -1
  22. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.js.map +1 -1
  23. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/unionDef.js.map +1 -1
  24. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js +1 -1
  25. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js.map +1 -1
  26. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js +1 -1
  27. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js.map +1 -1
  28. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js +1 -1
  29. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js.map +1 -1
  30. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js +1 -1
  31. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js.map +1 -1
  32. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js +1 -1
  33. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js.map +1 -1
  34. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js +1 -1
  35. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js.map +1 -1
  36. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js +1 -1
  37. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js.map +1 -1
  38. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js +1 -1
  39. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js.map +1 -1
  40. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js +1 -1
  41. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js.map +1 -1
  42. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js +1 -1
  43. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js.map +1 -1
  44. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js +1 -1
  45. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js.map +1 -1
  46. package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js +71 -0
  47. package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js.map +1 -1
  48. package/build/esm/utils/ir/convertIrToWireSchema.js +10 -7
  49. package/build/esm/utils/ir/convertIrToWireSchema.js.map +1 -1
  50. package/build/esm/utils/schema/__tests__/__snapshots__/generateDocumentTypeFromSchema/with-name-and-description.js +1 -1
  51. package/build/esm/utils/schema/__tests__/__snapshots__/generateDocumentTypeFromSchema/with-name-and-description.js.map +1 -1
  52. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/single-version.js.map +1 -1
  53. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/three-version-chain.js.map +1 -1
  54. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/two-version.js.map +1 -1
  55. package/build/esm/utils/schema/__tests__/assertSdkNamesUnique.test.js +178 -0
  56. package/build/esm/utils/schema/__tests__/assertSdkNamesUnique.test.js.map +1 -0
  57. package/build/esm/utils/schema/__tests__/generateInternalFromSchema.test.js +71 -1
  58. package/build/esm/utils/schema/__tests__/generateInternalFromSchema.test.js.map +1 -1
  59. package/build/esm/utils/schema/__tests__/resolveSchemaChain.test.js +122 -3
  60. package/build/esm/utils/schema/__tests__/resolveSchemaChain.test.js.map +1 -1
  61. package/build/esm/utils/schema/assertSdkNamesUnique.js +151 -0
  62. package/build/esm/utils/schema/assertSdkNamesUnique.js.map +1 -0
  63. package/build/esm/utils/schema/generateIndexFromSchema.js +3 -5
  64. package/build/esm/utils/schema/generateIndexFromSchema.js.map +1 -1
  65. package/build/esm/utils/schema/generateInternalFromSchema.js +42 -19
  66. package/build/esm/utils/schema/generateInternalFromSchema.js.map +1 -1
  67. package/build/esm/utils/schema/generateModelMetadataFromSchema.js +9 -11
  68. package/build/esm/utils/schema/generateModelMetadataFromSchema.js.map +1 -1
  69. package/build/esm/utils/schema/generateScopeFromSchema.js +6 -9
  70. package/build/esm/utils/schema/generateScopeFromSchema.js.map +1 -1
  71. package/build/esm/utils/schema/generateVersionedTypesFromSchema.js +8 -9
  72. package/build/esm/utils/schema/generateVersionedTypesFromSchema.js.map +1 -1
  73. package/build/esm/utils/schema/generateVersionedZodFromSchema.js +13 -16
  74. package/build/esm/utils/schema/generateVersionedZodFromSchema.js.map +1 -1
  75. package/build/esm/utils/schema/resolveSchemaChain.js +137 -21
  76. package/build/esm/utils/schema/resolveSchemaChain.js.map +1 -1
  77. package/build/esm/utils/schema/runtimeSchema.js +47 -0
  78. package/build/esm/utils/schema/runtimeSchema.js.map +1 -1
  79. package/build/esm/utils/schema/writeAllSdkFiles.js +2 -0
  80. package/build/esm/utils/schema/writeAllSdkFiles.js.map +1 -1
  81. package/build/esm/utils/steps/__tests__/__snapshots__/types/arrayFields.js.map +1 -1
  82. package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js +1 -1
  83. package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js.map +1 -1
  84. package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js +1 -1
  85. package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js.map +1 -1
  86. package/build/esm/utils/steps/__tests__/__snapshots__/types/refTypes.js.map +1 -1
  87. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleRecord.js.map +1 -1
  88. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js +1 -1
  89. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js.map +1 -1
  90. package/build/esm/utils/steps/convertStepsToIr.js +30 -2
  91. package/build/esm/utils/steps/convertStepsToIr.js.map +1 -1
  92. package/build/types/commands/ir/__tests__/irUpdateSchemaHandler.test.d.ts +2 -0
  93. package/build/types/commands/ir/__tests__/irUpdateSchemaHandler.test.d.ts.map +1 -0
  94. package/build/types/commands/ir/irDeployHandler.d.ts +1 -1
  95. package/build/types/commands/ir/irDeployHandler.d.ts.map +1 -1
  96. package/build/types/commands/ir/irGenAssetHandler.d.ts +1 -1
  97. package/build/types/commands/ir/irGenAssetHandler.d.ts.map +1 -1
  98. package/build/types/commands/ir/irGenTypesHandler.d.ts.map +1 -1
  99. package/build/types/commands/ir/irUpdateSchemaHandler.d.ts.map +1 -1
  100. package/build/types/commands/ir/resolveIrInput.d.ts +1 -0
  101. package/build/types/commands/ir/resolveIrInput.d.ts.map +1 -1
  102. package/build/types/commands/schema/schemaIrHandler.d.ts +3 -3
  103. package/build/types/commands/schema/schemaIrHandler.d.ts.map +1 -1
  104. package/build/types/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.d.ts +1 -0
  105. package/build/types/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.d.ts.map +1 -1
  106. package/build/types/lib/pack-docschema-api/pack-docschema-ir/unionDef.d.ts +3 -0
  107. package/build/types/lib/pack-docschema-api/pack-docschema-ir/unionDef.d.ts.map +1 -1
  108. package/build/types/utils/ir/convertIrToWireSchema.d.ts +2 -2
  109. package/build/types/utils/ir/convertIrToWireSchema.d.ts.map +1 -1
  110. package/build/types/utils/schema/__tests__/assertSdkNamesUnique.test.d.ts +2 -0
  111. package/build/types/utils/schema/__tests__/assertSdkNamesUnique.test.d.ts.map +1 -0
  112. package/build/types/utils/schema/assertSdkNamesUnique.d.ts +9 -0
  113. package/build/types/utils/schema/assertSdkNamesUnique.d.ts.map +1 -0
  114. package/build/types/utils/schema/generateIndexFromSchema.d.ts.map +1 -1
  115. package/build/types/utils/schema/generateInternalFromSchema.d.ts.map +1 -1
  116. package/build/types/utils/schema/generateModelMetadataFromSchema.d.ts.map +1 -1
  117. package/build/types/utils/schema/generateScopeFromSchema.d.ts.map +1 -1
  118. package/build/types/utils/schema/generateVersionedTypesFromSchema.d.ts.map +1 -1
  119. package/build/types/utils/schema/generateVersionedZodFromSchema.d.ts.map +1 -1
  120. package/build/types/utils/schema/resolveSchemaChain.d.ts +24 -1
  121. package/build/types/utils/schema/resolveSchemaChain.d.ts.map +1 -1
  122. package/build/types/utils/schema/runtimeSchema.d.ts +19 -0
  123. package/build/types/utils/schema/runtimeSchema.d.ts.map +1 -1
  124. package/build/types/utils/schema/writeAllSdkFiles.d.ts.map +1 -1
  125. package/build/types/utils/steps/convertStepsToIr.d.ts +4 -0
  126. package/build/types/utils/steps/convertStepsToIr.d.ts.map +1 -1
  127. package/package.json +19 -5
  128. package/build/esm/utils/unknownVariantSuffix.js +0 -22
  129. package/build/esm/utils/unknownVariantSuffix.js.map +0 -1
  130. package/build/types/utils/unknownVariantSuffix.d.ts +0 -3
  131. package/build/types/utils/unknownVariantSuffix.d.ts.map +0 -1
@@ -14,10 +14,12 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
+ import * as P from "@palantir/pack.schema";
18
+ import { defineRecord, defineSchema, defineSchemaUpdate, nextSchema } from "@palantir/pack.schema";
17
19
  import path from "path";
18
20
  import { describe, expect, it } from "vitest";
19
21
  import { generateInternalFromChain } from "../generateInternalFromSchema.js";
20
- import { resolveSchemaChain } from "../resolveSchemaChain.js";
22
+ import { collapseChainToMajors, resolveSchemaChain } from "../resolveSchemaChain.js";
21
23
  import { nestedOptionalsSchema, nestedUnionSchema, optionalToRequiredFieldSchema, singleVersionSchema, twoVersionDerivedFieldsSchema, twoVersionFieldRemovalSchema, twoVersionRequiredAdditiveSchema } from "./fixtures.js";
22
24
  import { formatInternalTypesSnapshot } from "./snapshotUtils.js";
23
25
  describe("generateInternalFromChain", () => {
@@ -55,4 +57,72 @@ describe("generateInternalFromChain", () => {
55
57
  await expect(await formatInternalTypesSnapshot(result)).toMatchFileSnapshot(path.join(snapshotDir, "two-version-optional-fields.snap"));
56
58
  });
57
59
  });
60
+ describe("generateInternalFromChain minor versions", () => {
61
+ const v1 = defineSchema({
62
+ Shape: defineRecord("Shape", {
63
+ docs: "A shape",
64
+ fields: {
65
+ color: P.String
66
+ }
67
+ })
68
+ });
69
+ const v1_1 = nextSchema(v1, {
70
+ bump: "minor"
71
+ }).addSchemaUpdate(defineSchemaUpdate("addFields", schema => ({
72
+ Shape: schema.Shape.addField("label", P.String).addField("note", P.Optional(P.String)).build()
73
+ }))).build();
74
+ function resolveForSdk() {
75
+ const {
76
+ chain,
77
+ latestVersion,
78
+ minVersion
79
+ } = resolveSchemaChain(v1_1);
80
+ return {
81
+ chain: collapseChainToMajors(chain),
82
+ latestVersion,
83
+ minVersion,
84
+ stepChain: chain
85
+ };
86
+ }
87
+ it("emits a minor-version upgrade step and keyed upgrade functions", () => {
88
+ const result = generateInternalFromChain(resolveForSdk());
89
+ expect(result.upgrades).toContain("addedInMinorVersion: 1");
90
+ expect(result.internalUpgradeFns).toContain("v1_1: {");
91
+ expect(result.internalUpgradeFns).toContain("label: () => Shape__v1[\"label\"]");
92
+ expect(result.internalUpgradeFns).not.toContain("note:");
93
+ // Fields added in 1.1 are missing from 1.0 records, so the raw internal type keeps them optional.
94
+ expect(result.internalTypes).toContain("readonly label?: string;");
95
+ });
96
+ });
97
+ describe("generateInternalFromChain union variants", () => {
98
+ it("records the version of a variant added after the union", () => {
99
+ const Circle = defineRecord("Circle", {
100
+ docs: "",
101
+ fields: {
102
+ radius: P.Double
103
+ }
104
+ });
105
+ const Square = defineRecord("Square", {
106
+ docs: "",
107
+ fields: {
108
+ side: P.Double
109
+ }
110
+ });
111
+ const v1 = defineSchema({
112
+ Circle,
113
+ Square,
114
+ Shape: P.defineUnion("Shape", {
115
+ docs: "",
116
+ variants: {
117
+ circle: Circle
118
+ }
119
+ })
120
+ });
121
+ const v2 = nextSchema(v1).addSchemaUpdate(defineSchemaUpdate("addSquare", schema => ({
122
+ Shape: schema.Shape.addVariant("square", Square).build()
123
+ }))).build();
124
+ const result = generateInternalFromChain(resolveSchemaChain(v2));
125
+ expect(result.upgrades).toContain("variantAddedInVersions: {\n \"square\": 2,\n },");
126
+ });
127
+ });
58
128
  //# sourceMappingURL=generateInternalFromSchema.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateInternalFromSchema.test.js","names":["path","describe","expect","it","generateInternalFromChain","resolveSchemaChain","nestedOptionalsSchema","nestedUnionSchema","optionalToRequiredFieldSchema","singleVersionSchema","twoVersionDerivedFieldsSchema","twoVersionFieldRemovalSchema","twoVersionRequiredAdditiveSchema","formatInternalTypesSnapshot","snapshotDir","join","__dirname","result","toMatchFileSnapshot","internalUpgradeFns","toContain"],"sources":["generateInternalFromSchema.test.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 path from \"path\";\nimport { describe, expect, it } from \"vitest\";\nimport { generateInternalFromChain } from \"../generateInternalFromSchema.js\";\nimport { resolveSchemaChain } from \"../resolveSchemaChain.js\";\nimport {\n nestedOptionalsSchema,\n nestedUnionSchema,\n optionalToRequiredFieldSchema,\n singleVersionSchema,\n twoVersionDerivedFieldsSchema,\n twoVersionFieldRemovalSchema,\n twoVersionRequiredAdditiveSchema,\n} from \"./fixtures.js\";\nimport { formatInternalTypesSnapshot } from \"./snapshotUtils.js\";\n\ndescribe(\"generateInternalFromChain\", () => {\n const snapshotDir = path.join(__dirname, \"__snapshots__\", \"generateInternalFromSchema\");\n\n it(\"single-version schema\", async () => {\n const result = generateInternalFromChain(resolveSchemaChain(singleVersionSchema));\n await expect(await formatInternalTypesSnapshot(result)).toMatchFileSnapshot(\n path.join(snapshotDir, \"single-version.snap\"),\n );\n });\n\n it(\"nested optionals inside arrays\", async () => {\n const result = generateInternalFromChain(resolveSchemaChain(nestedOptionalsSchema));\n await expect(await formatInternalTypesSnapshot(result)).toMatchFileSnapshot(\n path.join(snapshotDir, \"nested-optionals.snap\"),\n );\n });\n\n it(\"two-version field removal\", async () => {\n const result = generateInternalFromChain(resolveSchemaChain(twoVersionFieldRemovalSchema));\n await expect(await formatInternalTypesSnapshot(result)).toMatchFileSnapshot(\n path.join(snapshotDir, \"two-version-field-removal.snap\"),\n );\n });\n\n it(\"two-version derived fields\", async () => {\n const result = generateInternalFromChain(resolveSchemaChain(twoVersionDerivedFieldsSchema));\n await expect(await formatInternalTypesSnapshot(result)).toMatchFileSnapshot(\n path.join(snapshotDir, \"two-version-derived-fields.snap\"),\n );\n });\n\n it(\"two-version required additive field emits a zero-arg upgrade fn signature\", async () => {\n const result = generateInternalFromChain(\n resolveSchemaChain(twoVersionRequiredAdditiveSchema),\n );\n expect(result.internalUpgradeFns).toContain(\"opacity: () => ShapeBox__v2[\\\"opacity\\\"]\");\n await expect(await formatInternalTypesSnapshot(result)).toMatchFileSnapshot(\n path.join(snapshotDir, \"two-version-required-additive.snap\"),\n );\n });\n\n it(\"nested union schema generates upgrade registries for all variant targets\", async () => {\n const result = generateInternalFromChain(resolveSchemaChain(nestedUnionSchema));\n await expect(await formatInternalTypesSnapshot(result)).toMatchFileSnapshot(\n path.join(snapshotDir, \"nested-union.snap\"),\n );\n });\n\n it(\"field optional in v1 and required in v2 stays optional in internal schema\", async () => {\n const result = generateInternalFromChain(resolveSchemaChain(optionalToRequiredFieldSchema));\n // \"label\" is Optional(String) in v1 but String in v2.\n // The internal Zod schema must keep it optional because v1 documents\n // may legitimately omit the field.\n await expect(await formatInternalTypesSnapshot(result)).toMatchFileSnapshot(\n path.join(snapshotDir, \"two-version-optional-fields.snap\"),\n );\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateInternalFromSchema.test.js","names":["P","defineRecord","defineSchema","defineSchemaUpdate","nextSchema","path","describe","expect","it","generateInternalFromChain","collapseChainToMajors","resolveSchemaChain","nestedOptionalsSchema","nestedUnionSchema","optionalToRequiredFieldSchema","singleVersionSchema","twoVersionDerivedFieldsSchema","twoVersionFieldRemovalSchema","twoVersionRequiredAdditiveSchema","formatInternalTypesSnapshot","snapshotDir","join","__dirname","result","toMatchFileSnapshot","internalUpgradeFns","toContain","v1","Shape","docs","fields","color","String","v1_1","bump","addSchemaUpdate","schema","addField","Optional","build","resolveForSdk","chain","latestVersion","minVersion","stepChain","upgrades","not","internalTypes","Circle","radius","Double","Square","side","defineUnion","variants","circle","v2","addVariant"],"sources":["generateInternalFromSchema.test.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 * as P from \"@palantir/pack.schema\";\nimport { defineRecord, defineSchema, defineSchemaUpdate, nextSchema } from \"@palantir/pack.schema\";\nimport path from \"path\";\nimport { describe, expect, it } from \"vitest\";\nimport { generateInternalFromChain } from \"../generateInternalFromSchema.js\";\nimport { collapseChainToMajors, resolveSchemaChain } from \"../resolveSchemaChain.js\";\nimport {\n nestedOptionalsSchema,\n nestedUnionSchema,\n optionalToRequiredFieldSchema,\n singleVersionSchema,\n twoVersionDerivedFieldsSchema,\n twoVersionFieldRemovalSchema,\n twoVersionRequiredAdditiveSchema,\n} from \"./fixtures.js\";\nimport { formatInternalTypesSnapshot } from \"./snapshotUtils.js\";\n\ndescribe(\"generateInternalFromChain\", () => {\n const snapshotDir = path.join(__dirname, \"__snapshots__\", \"generateInternalFromSchema\");\n\n it(\"single-version schema\", async () => {\n const result = generateInternalFromChain(resolveSchemaChain(singleVersionSchema));\n await expect(await formatInternalTypesSnapshot(result)).toMatchFileSnapshot(\n path.join(snapshotDir, \"single-version.snap\"),\n );\n });\n\n it(\"nested optionals inside arrays\", async () => {\n const result = generateInternalFromChain(resolveSchemaChain(nestedOptionalsSchema));\n await expect(await formatInternalTypesSnapshot(result)).toMatchFileSnapshot(\n path.join(snapshotDir, \"nested-optionals.snap\"),\n );\n });\n\n it(\"two-version field removal\", async () => {\n const result = generateInternalFromChain(resolveSchemaChain(twoVersionFieldRemovalSchema));\n await expect(await formatInternalTypesSnapshot(result)).toMatchFileSnapshot(\n path.join(snapshotDir, \"two-version-field-removal.snap\"),\n );\n });\n\n it(\"two-version derived fields\", async () => {\n const result = generateInternalFromChain(resolveSchemaChain(twoVersionDerivedFieldsSchema));\n await expect(await formatInternalTypesSnapshot(result)).toMatchFileSnapshot(\n path.join(snapshotDir, \"two-version-derived-fields.snap\"),\n );\n });\n\n it(\"two-version required additive field emits a zero-arg upgrade fn signature\", async () => {\n const result = generateInternalFromChain(\n resolveSchemaChain(twoVersionRequiredAdditiveSchema),\n );\n expect(result.internalUpgradeFns).toContain(\"opacity: () => ShapeBox__v2[\\\"opacity\\\"]\");\n await expect(await formatInternalTypesSnapshot(result)).toMatchFileSnapshot(\n path.join(snapshotDir, \"two-version-required-additive.snap\"),\n );\n });\n\n it(\"nested union schema generates upgrade registries for all variant targets\", async () => {\n const result = generateInternalFromChain(resolveSchemaChain(nestedUnionSchema));\n await expect(await formatInternalTypesSnapshot(result)).toMatchFileSnapshot(\n path.join(snapshotDir, \"nested-union.snap\"),\n );\n });\n\n it(\"field optional in v1 and required in v2 stays optional in internal schema\", async () => {\n const result = generateInternalFromChain(resolveSchemaChain(optionalToRequiredFieldSchema));\n // \"label\" is Optional(String) in v1 but String in v2.\n // The internal Zod schema must keep it optional because v1 documents\n // may legitimately omit the field.\n await expect(await formatInternalTypesSnapshot(result)).toMatchFileSnapshot(\n path.join(snapshotDir, \"two-version-optional-fields.snap\"),\n );\n });\n});\n\ndescribe(\"generateInternalFromChain minor versions\", () => {\n const v1 = defineSchema({\n Shape: defineRecord(\"Shape\", { docs: \"A shape\", fields: { color: P.String } }),\n });\n const v1_1 = nextSchema(v1, { bump: \"minor\" })\n .addSchemaUpdate(\n defineSchemaUpdate(\"addFields\", (schema: P.SchemaBuilder<typeof v1.models>) => ({\n Shape: schema.Shape\n .addField(\"label\", P.String)\n .addField(\"note\", P.Optional(P.String))\n .build(),\n })),\n )\n .build();\n\n function resolveForSdk() {\n const { chain, latestVersion, minVersion } = resolveSchemaChain(v1_1);\n return { chain: collapseChainToMajors(chain), latestVersion, minVersion, stepChain: chain };\n }\n\n it(\"emits a minor-version upgrade step and keyed upgrade functions\", () => {\n const result = generateInternalFromChain(resolveForSdk());\n\n expect(result.upgrades).toContain(\"addedInMinorVersion: 1\");\n expect(result.internalUpgradeFns).toContain(\"v1_1: {\");\n expect(result.internalUpgradeFns).toContain(\"label: () => Shape__v1[\\\"label\\\"]\");\n expect(result.internalUpgradeFns).not.toContain(\"note:\");\n // Fields added in 1.1 are missing from 1.0 records, so the raw internal type keeps them optional.\n expect(result.internalTypes).toContain(\"readonly label?: string;\");\n });\n});\n\ndescribe(\"generateInternalFromChain union variants\", () => {\n it(\"records the version of a variant added after the union\", () => {\n const Circle = defineRecord(\"Circle\", { docs: \"\", fields: { radius: P.Double } });\n const Square = defineRecord(\"Square\", { docs: \"\", fields: { side: P.Double } });\n const v1 = defineSchema({\n Circle,\n Square,\n Shape: P.defineUnion(\"Shape\", { docs: \"\", variants: { circle: Circle } }),\n });\n const v2 = nextSchema(v1)\n .addSchemaUpdate(defineSchemaUpdate(\"addSquare\", schema => ({\n Shape: schema.Shape.addVariant(\"square\", Square).build(),\n })))\n .build();\n\n const result = generateInternalFromChain(resolveSchemaChain(v2));\n\n expect(result.upgrades).toContain(\"variantAddedInVersions: {\\n \\\"square\\\": 2,\\n },\");\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -17,7 +17,7 @@
17
17
  import * as P from "@palantir/pack.schema";
18
18
  import { defineRecord, defineSchema, defineSchemaUpdate, nextSchema } from "@palantir/pack.schema";
19
19
  import { describe, expect, it } from "vitest";
20
- import { resolveSchemaChain, stripDeprecatedFieldsForSdk } from "../resolveSchemaChain.js";
20
+ import { collapseChainToMajors, resolveSchemaChain, stripDeprecatedFieldsForSdk } from "../resolveSchemaChain.js";
21
21
 
22
22
  /** Index a record model's fields by key for a given chain entry. */
23
23
  function fieldsByKey(entry, modelKey) {
@@ -57,13 +57,19 @@ describe("resolveSchemaChain provenance", () => {
57
57
  chain,
58
58
  latestVersion,
59
59
  minVersion
60
- } = resolveSchemaChain(v2, 1, {}, 1);
60
+ } = resolveSchemaChain(v2, 1, {}, {
61
+ major: 1,
62
+ minor: 0
63
+ });
61
64
  expect(chain.map(entry => entry.version)).toEqual([1]);
62
65
  expect(latestVersion).toBe(1);
63
66
  expect(minVersion).toBe(1);
64
67
  });
65
68
  it("rejects a maxVersion that is not in the chain", () => {
66
- expect(() => resolveSchemaChain(v2, undefined, {}, 3)).toThrow("maxVersion 3 is not in the schema chain");
69
+ expect(() => resolveSchemaChain(v2, undefined, {}, {
70
+ major: 3,
71
+ minor: 0
72
+ })).toThrow("maxVersion 3 is not in the schema chain");
67
73
  });
68
74
  it("keeps a deprecated field present and stamps deprecatedFromVersion + message", () => {
69
75
  const {
@@ -131,5 +137,118 @@ describe("resolveSchemaChain — union provenance", () => {
131
137
  expect(union.union.metadata.addedInVersion).toBe(1);
132
138
  }
133
139
  });
140
+ it("records the version of a variant added after the union, and only that variant", () => {
141
+ const Circle = defineRecord("Circle", {
142
+ docs: "",
143
+ fields: {
144
+ radius: P.Double
145
+ }
146
+ });
147
+ const Square = defineRecord("Square", {
148
+ docs: "",
149
+ fields: {
150
+ side: P.Double
151
+ }
152
+ });
153
+ const shapes = defineSchema({
154
+ Circle,
155
+ Square,
156
+ Shape: P.defineUnion("Shape", {
157
+ docs: "",
158
+ variants: {
159
+ circle: Circle
160
+ }
161
+ })
162
+ });
163
+ const addSquare = nextSchema(shapes).addSchemaUpdate(defineSchemaUpdate("addSquare", schema => ({
164
+ Shape: schema.Shape.addVariant("square", Square).build()
165
+ }))).build();
166
+ const v3 = nextSchema(addSquare).build();
167
+ const {
168
+ chain
169
+ } = resolveSchemaChain(v3);
170
+ const unions = chain.map(entry => {
171
+ const model = entry.ir.models.Shape;
172
+ if (model.type !== "union") throw new Error("Shape should be a union");
173
+ return model.union;
174
+ });
175
+ expect(unions[0]).not.toHaveProperty("variantMetadata");
176
+ expect(unions[1].variantMetadata).toEqual({
177
+ square: {
178
+ addedInVersion: 2
179
+ }
180
+ });
181
+ expect(unions[2].variantMetadata).toEqual({
182
+ square: {
183
+ addedInVersion: 2
184
+ }
185
+ });
186
+ });
187
+ });
188
+ describe("resolveSchemaChain minor versions", () => {
189
+ const v1 = defineSchema({
190
+ ShapeBox: defineRecord("ShapeBox", {
191
+ docs: "A box",
192
+ fields: {
193
+ color: P.String
194
+ }
195
+ })
196
+ });
197
+ const v2 = nextSchema(v1).addSchemaUpdate(defineSchemaUpdate("addFill", schema => ({
198
+ ShapeBox: schema.ShapeBox.addField("fillColor", P.Optional(P.String), {
199
+ derivedFrom: ["color"]
200
+ }).build()
201
+ }))).build();
202
+ const v2_1 = nextSchema(v2, {
203
+ bump: "minor"
204
+ }).addSchemaUpdate(defineSchemaUpdate("addLabel", schema => ({
205
+ ShapeBox: schema.ShapeBox.addField("label", P.Optional(P.String)).build()
206
+ }))).build();
207
+ it("records the minor version on chain entries and on fields added in a minor version", () => {
208
+ const {
209
+ chain,
210
+ latestVersion
211
+ } = resolveSchemaChain(v2_1);
212
+ expect(chain.map(entry => [entry.version, entry.minorVersion])).toEqual([[1, undefined], [2, undefined], [2, 1]]);
213
+ expect(latestVersion).toBe(2);
214
+ const fields = fieldsByKey(chain[2], "ShapeBox");
215
+ expect(fields.label.metadata).toEqual({
216
+ addedInVersion: 2,
217
+ addedInMinorVersion: 1
218
+ });
219
+ expect(fields.fillColor.metadata).toEqual({
220
+ addedInVersion: 2
221
+ });
222
+ });
223
+ it("caps the chain at a minor version or at a .0 version", () => {
224
+ expect(resolveSchemaChain(v2_1, undefined, {}, {
225
+ major: 2,
226
+ minor: 1
227
+ }).chain).toHaveLength(3);
228
+ expect(resolveSchemaChain(v2_1, undefined, {}, {
229
+ major: 2,
230
+ minor: 0
231
+ }).chain).toHaveLength(2);
232
+ expect(() => resolveSchemaChain(v2_1, undefined, {}, {
233
+ major: 2,
234
+ minor: 2
235
+ })).toThrow("maxVersion 2.2 is not in the schema chain (available versions: 1, 2, 2.1)");
236
+ });
237
+ it("collapseChainToMajors keeps the last minor's IR and the major's migrations", () => {
238
+ const {
239
+ chain
240
+ } = resolveSchemaChain(v2_1);
241
+ const collapsed = collapseChainToMajors(chain);
242
+ expect(collapsed.map(entry => entry.version)).toEqual([1, 2]);
243
+ expect(collapsed[1].minorVersion).toBeUndefined();
244
+ expect(fieldsByKey(collapsed[1], "ShapeBox").label).toBeDefined();
245
+ expect(collapsed[1].migrations).toEqual({
246
+ ShapeBox: {
247
+ fillColor: {
248
+ derivedFrom: ["color"]
249
+ }
250
+ }
251
+ });
252
+ });
134
253
  });
135
254
  //# sourceMappingURL=resolveSchemaChain.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveSchemaChain.test.js","names":["P","defineRecord","defineSchema","defineSchemaUpdate","nextSchema","describe","expect","it","resolveSchemaChain","stripDeprecatedFieldsForSdk","fieldsByKey","entry","modelKey","model","ir","models","type","Error","Object","fromEntries","record","fields","map","f","key","v1","ShapeBox","docs","left","Double","color","Optional","String","colorSplit","schema","addField","derivedFrom","deprecateField","build","v2","addSchemaUpdate","chain","v2Fields","find","c","version","metadata","addedInVersion","toBe","fillColor","strokeColor","latestVersion","minVersion","toEqual","undefined","toThrow","toBeDefined","deprecatedFromVersion","deprecatedMessage","v1Fields","toBeUndefined","stripped","Box","a","NodeShape","defineUnion","variants","box","z","addB","union"],"sources":["resolveSchemaChain.test.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 * as P from \"@palantir/pack.schema\";\nimport { defineRecord, defineSchema, defineSchemaUpdate, nextSchema } from \"@palantir/pack.schema\";\nimport { describe, expect, it } from \"vitest\";\nimport type {\n IFieldDef,\n IModelDef,\n} from \"../../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport {\n resolveSchemaChain,\n stripDeprecatedFieldsForSdk,\n type VersionedIrEntry,\n} from \"../resolveSchemaChain.js\";\n\n/** Index a record model's fields by key for a given chain entry. */\nfunction fieldsByKey(entry: VersionedIrEntry, modelKey: string): Record<string, IFieldDef> {\n const model: IModelDef = entry.ir.models[modelKey]!;\n if (model.type !== \"record\") throw new Error(`${modelKey} is not a record`);\n return Object.fromEntries(model.record.fields.map(f => [f.key, f]));\n}\n\ndescribe(\"resolveSchemaChain provenance\", () => {\n const v1 = defineSchema({\n ShapeBox: defineRecord(\"ShapeBox\", {\n docs: \"A box\",\n fields: { left: P.Double, color: P.Optional(P.String) },\n }),\n });\n\n const colorSplit = defineSchemaUpdate(\n \"colorSplit\",\n (schema: P.SchemaBuilder<typeof v1.models>) => ({\n ShapeBox: schema.ShapeBox\n .addField(\"fillColor\", P.Optional(P.String), { derivedFrom: [\"color\"] })\n .addField(\"strokeColor\", P.Optional(P.String), { derivedFrom: [\"color\"] })\n .deprecateField(\"color\", \"use fillColor/strokeColor\")\n .build(),\n }),\n );\n\n const v2 = nextSchema(v1).addSchemaUpdate(colorSplit).build();\n\n it(\"derives addedInVersion from first appearance in the chain\", () => {\n const { chain } = resolveSchemaChain(v2);\n const v2Fields = fieldsByKey(chain.find(c => c.version === 2)!, \"ShapeBox\");\n\n expect(v2Fields.left!.metadata.addedInVersion).toBe(1);\n expect(v2Fields.fillColor!.metadata.addedInVersion).toBe(2);\n expect(v2Fields.strokeColor!.metadata.addedInVersion).toBe(2);\n });\n\n it(\"caps the chain at maxVersion\", () => {\n const { chain, latestVersion, minVersion } = resolveSchemaChain(v2, 1, {}, 1);\n\n expect(chain.map(entry => entry.version)).toEqual([1]);\n expect(latestVersion).toBe(1);\n expect(minVersion).toBe(1);\n });\n\n it(\"rejects a maxVersion that is not in the chain\", () => {\n expect(() => resolveSchemaChain(v2, undefined, {}, 3)).toThrow(\n \"maxVersion 3 is not in the schema chain\",\n );\n });\n\n it(\"keeps a deprecated field present and stamps deprecatedFromVersion + message\", () => {\n const { chain } = resolveSchemaChain(v2);\n const v2Fields = fieldsByKey(chain.find(c => c.version === 2)!, \"ShapeBox\");\n\n expect(v2Fields.color).toBeDefined();\n expect(v2Fields.color!.metadata.addedInVersion).toBe(1);\n expect(v2Fields.color!.metadata.deprecatedFromVersion).toBe(2);\n expect(v2Fields.color!.metadata.deprecatedMessage).toBe(\"use fillColor/strokeColor\");\n });\n\n it(\"does not mark the field deprecated in versions before the deprecation\", () => {\n const { chain } = resolveSchemaChain(v2);\n const v1Fields = fieldsByKey(chain.find(c => c.version === 1)!, \"ShapeBox\");\n\n expect(v1Fields.color).toBeDefined();\n expect(v1Fields.color!.metadata.deprecatedFromVersion ?? undefined).toBeUndefined();\n expect(v1Fields.fillColor).toBeUndefined();\n });\n\n it(\"stripDeprecatedFieldsForSdk drops deprecated fields from v>=deprecation only\", () => {\n const { chain } = resolveSchemaChain(v2);\n const stripped = stripDeprecatedFieldsForSdk(chain);\n\n const v1Fields = fieldsByKey(stripped.find(c => c.version === 1)!, \"ShapeBox\");\n expect(v1Fields.color).toBeDefined();\n\n const v2Fields = fieldsByKey(stripped.find(c => c.version === 2)!, \"ShapeBox\");\n expect(v2Fields.color).toBeUndefined();\n expect(v2Fields.fillColor).toBeDefined();\n\n expect(fieldsByKey(chain.find(c => c.version === 2)!, \"ShapeBox\").color).toBeDefined();\n });\n});\n\ndescribe(\"resolveSchemaChain — union provenance\", () => {\n const v1 = defineSchema({\n Box: defineRecord(\"Box\", { docs: \"\", fields: { a: P.Double } }),\n NodeShape: P.defineUnion(\"NodeShape\", {\n docs: \"shape\",\n variants: { box: defineRecord(\"Inner\", { docs: \"\", fields: { z: P.Double } }) },\n }),\n });\n const addB = defineSchemaUpdate(\n \"addB\",\n (schema: P.SchemaBuilder<typeof v1.models>) => ({\n Box: schema.Box.addField(\"b\", P.Optional(P.String)).build(),\n }),\n );\n const v2 = nextSchema(v1).addSchemaUpdate(addB).build();\n\n it(\"a v1-defined union stays addedInVersion 1 in every version\", () => {\n const { chain } = resolveSchemaChain(v2);\n for (const version of [1, 2]) {\n const union = chain.find(c => c.version === version)!.ir.models.NodeShape!;\n if (union.type !== \"union\") throw new Error(\"NodeShape should be a union\");\n expect(union.union.metadata.addedInVersion).toBe(1);\n }\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"resolveSchemaChain.test.js","names":["P","defineRecord","defineSchema","defineSchemaUpdate","nextSchema","describe","expect","it","collapseChainToMajors","resolveSchemaChain","stripDeprecatedFieldsForSdk","fieldsByKey","entry","modelKey","model","ir","models","type","Error","Object","fromEntries","record","fields","map","f","key","v1","ShapeBox","docs","left","Double","color","Optional","String","colorSplit","schema","addField","derivedFrom","deprecateField","build","v2","addSchemaUpdate","chain","v2Fields","find","c","version","metadata","addedInVersion","toBe","fillColor","strokeColor","latestVersion","minVersion","major","minor","toEqual","undefined","toThrow","toBeDefined","deprecatedFromVersion","deprecatedMessage","v1Fields","toBeUndefined","stripped","Box","a","NodeShape","defineUnion","variants","box","z","addB","union","Circle","radius","Square","side","shapes","Shape","circle","addSquare","addVariant","v3","unions","not","toHaveProperty","variantMetadata","square","v2_1","bump","minorVersion","label","addedInMinorVersion","toHaveLength","collapsed","migrations"],"sources":["resolveSchemaChain.test.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 * as P from \"@palantir/pack.schema\";\nimport { defineRecord, defineSchema, defineSchemaUpdate, nextSchema } from \"@palantir/pack.schema\";\nimport { describe, expect, it } from \"vitest\";\nimport type {\n IFieldDef,\n IModelDef,\n} from \"../../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport {\n collapseChainToMajors,\n resolveSchemaChain,\n stripDeprecatedFieldsForSdk,\n type VersionedIrEntry,\n} from \"../resolveSchemaChain.js\";\n\n/** Index a record model's fields by key for a given chain entry. */\nfunction fieldsByKey(entry: VersionedIrEntry, modelKey: string): Record<string, IFieldDef> {\n const model: IModelDef = entry.ir.models[modelKey]!;\n if (model.type !== \"record\") throw new Error(`${modelKey} is not a record`);\n return Object.fromEntries(model.record.fields.map(f => [f.key, f]));\n}\n\ndescribe(\"resolveSchemaChain provenance\", () => {\n const v1 = defineSchema({\n ShapeBox: defineRecord(\"ShapeBox\", {\n docs: \"A box\",\n fields: { left: P.Double, color: P.Optional(P.String) },\n }),\n });\n\n const colorSplit = defineSchemaUpdate(\n \"colorSplit\",\n (schema: P.SchemaBuilder<typeof v1.models>) => ({\n ShapeBox: schema.ShapeBox\n .addField(\"fillColor\", P.Optional(P.String), { derivedFrom: [\"color\"] })\n .addField(\"strokeColor\", P.Optional(P.String), { derivedFrom: [\"color\"] })\n .deprecateField(\"color\", \"use fillColor/strokeColor\")\n .build(),\n }),\n );\n\n const v2 = nextSchema(v1).addSchemaUpdate(colorSplit).build();\n\n it(\"derives addedInVersion from first appearance in the chain\", () => {\n const { chain } = resolveSchemaChain(v2);\n const v2Fields = fieldsByKey(chain.find(c => c.version === 2)!, \"ShapeBox\");\n\n expect(v2Fields.left!.metadata.addedInVersion).toBe(1);\n expect(v2Fields.fillColor!.metadata.addedInVersion).toBe(2);\n expect(v2Fields.strokeColor!.metadata.addedInVersion).toBe(2);\n });\n\n it(\"caps the chain at maxVersion\", () => {\n const { chain, latestVersion, minVersion } = resolveSchemaChain(v2, 1, {}, {\n major: 1,\n minor: 0,\n });\n\n expect(chain.map(entry => entry.version)).toEqual([1]);\n expect(latestVersion).toBe(1);\n expect(minVersion).toBe(1);\n });\n\n it(\"rejects a maxVersion that is not in the chain\", () => {\n expect(() => resolveSchemaChain(v2, undefined, {}, { major: 3, minor: 0 })).toThrow(\n \"maxVersion 3 is not in the schema chain\",\n );\n });\n\n it(\"keeps a deprecated field present and stamps deprecatedFromVersion + message\", () => {\n const { chain } = resolveSchemaChain(v2);\n const v2Fields = fieldsByKey(chain.find(c => c.version === 2)!, \"ShapeBox\");\n\n expect(v2Fields.color).toBeDefined();\n expect(v2Fields.color!.metadata.addedInVersion).toBe(1);\n expect(v2Fields.color!.metadata.deprecatedFromVersion).toBe(2);\n expect(v2Fields.color!.metadata.deprecatedMessage).toBe(\"use fillColor/strokeColor\");\n });\n\n it(\"does not mark the field deprecated in versions before the deprecation\", () => {\n const { chain } = resolveSchemaChain(v2);\n const v1Fields = fieldsByKey(chain.find(c => c.version === 1)!, \"ShapeBox\");\n\n expect(v1Fields.color).toBeDefined();\n expect(v1Fields.color!.metadata.deprecatedFromVersion ?? undefined).toBeUndefined();\n expect(v1Fields.fillColor).toBeUndefined();\n });\n\n it(\"stripDeprecatedFieldsForSdk drops deprecated fields from v>=deprecation only\", () => {\n const { chain } = resolveSchemaChain(v2);\n const stripped = stripDeprecatedFieldsForSdk(chain);\n\n const v1Fields = fieldsByKey(stripped.find(c => c.version === 1)!, \"ShapeBox\");\n expect(v1Fields.color).toBeDefined();\n\n const v2Fields = fieldsByKey(stripped.find(c => c.version === 2)!, \"ShapeBox\");\n expect(v2Fields.color).toBeUndefined();\n expect(v2Fields.fillColor).toBeDefined();\n\n expect(fieldsByKey(chain.find(c => c.version === 2)!, \"ShapeBox\").color).toBeDefined();\n });\n});\n\ndescribe(\"resolveSchemaChain — union provenance\", () => {\n const v1 = defineSchema({\n Box: defineRecord(\"Box\", { docs: \"\", fields: { a: P.Double } }),\n NodeShape: P.defineUnion(\"NodeShape\", {\n docs: \"shape\",\n variants: { box: defineRecord(\"Inner\", { docs: \"\", fields: { z: P.Double } }) },\n }),\n });\n const addB = defineSchemaUpdate(\n \"addB\",\n (schema: P.SchemaBuilder<typeof v1.models>) => ({\n Box: schema.Box.addField(\"b\", P.Optional(P.String)).build(),\n }),\n );\n const v2 = nextSchema(v1).addSchemaUpdate(addB).build();\n\n it(\"a v1-defined union stays addedInVersion 1 in every version\", () => {\n const { chain } = resolveSchemaChain(v2);\n for (const version of [1, 2]) {\n const union = chain.find(c => c.version === version)!.ir.models.NodeShape!;\n if (union.type !== \"union\") throw new Error(\"NodeShape should be a union\");\n expect(union.union.metadata.addedInVersion).toBe(1);\n }\n });\n\n it(\"records the version of a variant added after the union, and only that variant\", () => {\n const Circle = defineRecord(\"Circle\", { docs: \"\", fields: { radius: P.Double } });\n const Square = defineRecord(\"Square\", { docs: \"\", fields: { side: P.Double } });\n const shapes = defineSchema({\n Circle,\n Square,\n Shape: P.defineUnion(\"Shape\", { docs: \"\", variants: { circle: Circle } }),\n });\n const addSquare = nextSchema(shapes)\n .addSchemaUpdate(defineSchemaUpdate(\"addSquare\", schema => ({\n Shape: schema.Shape.addVariant(\"square\", Square).build(),\n })))\n .build();\n const v3 = nextSchema(addSquare).build();\n\n const { chain } = resolveSchemaChain(v3);\n const unions = chain.map(entry => {\n const model = entry.ir.models.Shape!;\n if (model.type !== \"union\") throw new Error(\"Shape should be a union\");\n return model.union;\n });\n\n expect(unions[0]).not.toHaveProperty(\"variantMetadata\");\n expect(unions[1]!.variantMetadata).toEqual({ square: { addedInVersion: 2 } });\n expect(unions[2]!.variantMetadata).toEqual({ square: { addedInVersion: 2 } });\n });\n});\n\ndescribe(\"resolveSchemaChain minor versions\", () => {\n const v1 = defineSchema({\n ShapeBox: defineRecord(\"ShapeBox\", { docs: \"A box\", fields: { color: P.String } }),\n });\n const v2 = nextSchema(v1)\n .addSchemaUpdate(defineSchemaUpdate(\"addFill\", (schema: P.SchemaBuilder<typeof v1.models>) => ({\n ShapeBox: schema.ShapeBox\n .addField(\"fillColor\", P.Optional(P.String), { derivedFrom: [\"color\"] })\n .build(),\n })))\n .build();\n const v2_1 = nextSchema(v2, { bump: \"minor\" })\n .addSchemaUpdate(\n defineSchemaUpdate(\"addLabel\", (schema: P.SchemaBuilder<typeof v2.models>) => ({\n ShapeBox: schema.ShapeBox.addField(\"label\", P.Optional(P.String)).build(),\n })),\n )\n .build();\n\n it(\"records the minor version on chain entries and on fields added in a minor version\", () => {\n const { chain, latestVersion } = resolveSchemaChain(v2_1);\n\n expect(chain.map(entry => [entry.version, entry.minorVersion])).toEqual([\n [1, undefined],\n [2, undefined],\n [2, 1],\n ]);\n expect(latestVersion).toBe(2);\n\n const fields = fieldsByKey(chain[2]!, \"ShapeBox\");\n expect(fields.label!.metadata).toEqual({ addedInVersion: 2, addedInMinorVersion: 1 });\n expect(fields.fillColor!.metadata).toEqual({ addedInVersion: 2 });\n });\n\n it(\"caps the chain at a minor version or at a .0 version\", () => {\n expect(resolveSchemaChain(v2_1, undefined, {}, { major: 2, minor: 1 }).chain).toHaveLength(3);\n expect(resolveSchemaChain(v2_1, undefined, {}, { major: 2, minor: 0 }).chain).toHaveLength(2);\n expect(() => resolveSchemaChain(v2_1, undefined, {}, { major: 2, minor: 2 })).toThrow(\n \"maxVersion 2.2 is not in the schema chain (available versions: 1, 2, 2.1)\",\n );\n });\n\n it(\"collapseChainToMajors keeps the last minor's IR and the major's migrations\", () => {\n const { chain } = resolveSchemaChain(v2_1);\n const collapsed = collapseChainToMajors(chain);\n\n expect(collapsed.map(entry => entry.version)).toEqual([1, 2]);\n expect(collapsed[1]!.minorVersion).toBeUndefined();\n expect(fieldsByKey(collapsed[1]!, \"ShapeBox\").label).toBeDefined();\n expect(collapsed[1]!.migrations).toEqual({\n ShapeBox: { fillColor: { derivedFrom: [\"color\"] } },\n });\n });\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,CAAC,MAAM,uBAAuB;AAC1C,SAASC,YAAY,EAAEC,YAAY,EAAEC,kBAAkB,EAAEC,UAAU,QAAQ,uBAAuB;AAClG,SAASC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAK7C,SACEC,qBAAqB,EACrBC,kBAAkB,EAClBC,2BAA2B,QAEtB,0BAA0B;;AAEjC;AACA,SAASC,WAAWA,CAACC,KAAuB,EAAEC,QAAgB,EAA6B;EACzF,MAAMC,KAAgB,GAAGF,KAAK,CAACG,EAAE,CAACC,MAAM,CAACH,QAAQ,CAAE;EACnD,IAAIC,KAAK,CAACG,IAAI,KAAK,QAAQ,EAAE,MAAM,IAAIC,KAAK,CAAC,GAAGL,QAAQ,kBAAkB,CAAC;EAC3E,OAAOM,MAAM,CAACC,WAAW,CAACN,KAAK,CAACO,MAAM,CAACC,MAAM,CAACC,GAAG,CAACC,CAAC,IAAI,CAACA,CAAC,CAACC,GAAG,EAAED,CAAC,CAAC,CAAC,CAAC;AACrE;AAEAnB,QAAQ,CAAC,+BAA+B,EAAE,MAAM;EAC9C,MAAMqB,EAAE,GAAGxB,YAAY,CAAC;IACtByB,QAAQ,EAAE1B,YAAY,CAAC,UAAU,EAAE;MACjC2B,IAAI,EAAE,OAAO;MACbN,MAAM,EAAE;QAAEO,IAAI,EAAE7B,CAAC,CAAC8B,MAAM;QAAEC,KAAK,EAAE/B,CAAC,CAACgC,QAAQ,CAAChC,CAAC,CAACiC,MAAM;MAAE;IACxD,CAAC;EACH,CAAC,CAAC;EAEF,MAAMC,UAAU,GAAG/B,kBAAkB,CACnC,YAAY,EACXgC,MAAyC,KAAM;IAC9CR,QAAQ,EAAEQ,MAAM,CAACR,QAAQ,CACtBS,QAAQ,CAAC,WAAW,EAAEpC,CAAC,CAACgC,QAAQ,CAAChC,CAAC,CAACiC,MAAM,CAAC,EAAE;MAAEI,WAAW,EAAE,CAAC,OAAO;IAAE,CAAC,CAAC,CACvED,QAAQ,CAAC,aAAa,EAAEpC,CAAC,CAACgC,QAAQ,CAAChC,CAAC,CAACiC,MAAM,CAAC,EAAE;MAAEI,WAAW,EAAE,CAAC,OAAO;IAAE,CAAC,CAAC,CACzEC,cAAc,CAAC,OAAO,EAAE,2BAA2B,CAAC,CACpDC,KAAK,CAAC;EACX,CAAC,CACH,CAAC;EAED,MAAMC,EAAE,GAAGpC,UAAU,CAACsB,EAAE,CAAC,CAACe,eAAe,CAACP,UAAU,CAAC,CAACK,KAAK,CAAC,CAAC;EAE7DhC,EAAE,CAAC,2DAA2D,EAAE,MAAM;IACpE,MAAM;MAAEmC;IAAM,CAAC,GAAGjC,kBAAkB,CAAC+B,EAAE,CAAC;IACxC,MAAMG,QAAQ,GAAGhC,WAAW,CAAC+B,KAAK,CAACE,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,OAAO,KAAK,CAAC,CAAC,EAAG,UAAU,CAAC;IAE3ExC,MAAM,CAACqC,QAAQ,CAACd,IAAI,CAAEkB,QAAQ,CAACC,cAAc,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC;IACtD3C,MAAM,CAACqC,QAAQ,CAACO,SAAS,CAAEH,QAAQ,CAACC,cAAc,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC;IAC3D3C,MAAM,CAACqC,QAAQ,CAACQ,WAAW,CAAEJ,QAAQ,CAACC,cAAc,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC;EAC/D,CAAC,CAAC;EAEF1C,EAAE,CAAC,8BAA8B,EAAE,MAAM;IACvC,MAAM;MAAEmC,KAAK;MAAEU,aAAa;MAAEC;IAAW,CAAC,GAAG5C,kBAAkB,CAAC+B,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;MACzEc,KAAK,EAAE,CAAC;MACRC,KAAK,EAAE;IACT,CAAC,CAAC;IAEFjD,MAAM,CAACoC,KAAK,CAACnB,GAAG,CAACX,KAAK,IAAIA,KAAK,CAACkC,OAAO,CAAC,CAAC,CAACU,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACtDlD,MAAM,CAAC8C,aAAa,CAAC,CAACH,IAAI,CAAC,CAAC,CAAC;IAC7B3C,MAAM,CAAC+C,UAAU,CAAC,CAACJ,IAAI,CAAC,CAAC,CAAC;EAC5B,CAAC,CAAC;EAEF1C,EAAE,CAAC,+CAA+C,EAAE,MAAM;IACxDD,MAAM,CAAC,MAAMG,kBAAkB,CAAC+B,EAAE,EAAEiB,SAAS,EAAE,CAAC,CAAC,EAAE;MAAEH,KAAK,EAAE,CAAC;MAAEC,KAAK,EAAE;IAAE,CAAC,CAAC,CAAC,CAACG,OAAO,CACjF,yCACF,CAAC;EACH,CAAC,CAAC;EAEFnD,EAAE,CAAC,6EAA6E,EAAE,MAAM;IACtF,MAAM;MAAEmC;IAAM,CAAC,GAAGjC,kBAAkB,CAAC+B,EAAE,CAAC;IACxC,MAAMG,QAAQ,GAAGhC,WAAW,CAAC+B,KAAK,CAACE,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,OAAO,KAAK,CAAC,CAAC,EAAG,UAAU,CAAC;IAE3ExC,MAAM,CAACqC,QAAQ,CAACZ,KAAK,CAAC,CAAC4B,WAAW,CAAC,CAAC;IACpCrD,MAAM,CAACqC,QAAQ,CAACZ,KAAK,CAAEgB,QAAQ,CAACC,cAAc,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC;IACvD3C,MAAM,CAACqC,QAAQ,CAACZ,KAAK,CAAEgB,QAAQ,CAACa,qBAAqB,CAAC,CAACX,IAAI,CAAC,CAAC,CAAC;IAC9D3C,MAAM,CAACqC,QAAQ,CAACZ,KAAK,CAAEgB,QAAQ,CAACc,iBAAiB,CAAC,CAACZ,IAAI,CAAC,2BAA2B,CAAC;EACtF,CAAC,CAAC;EAEF1C,EAAE,CAAC,uEAAuE,EAAE,MAAM;IAChF,MAAM;MAAEmC;IAAM,CAAC,GAAGjC,kBAAkB,CAAC+B,EAAE,CAAC;IACxC,MAAMsB,QAAQ,GAAGnD,WAAW,CAAC+B,KAAK,CAACE,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,OAAO,KAAK,CAAC,CAAC,EAAG,UAAU,CAAC;IAE3ExC,MAAM,CAACwD,QAAQ,CAAC/B,KAAK,CAAC,CAAC4B,WAAW,CAAC,CAAC;IACpCrD,MAAM,CAACwD,QAAQ,CAAC/B,KAAK,CAAEgB,QAAQ,CAACa,qBAAqB,IAAIH,SAAS,CAAC,CAACM,aAAa,CAAC,CAAC;IACnFzD,MAAM,CAACwD,QAAQ,CAACZ,SAAS,CAAC,CAACa,aAAa,CAAC,CAAC;EAC5C,CAAC,CAAC;EAEFxD,EAAE,CAAC,8EAA8E,EAAE,MAAM;IACvF,MAAM;MAAEmC;IAAM,CAAC,GAAGjC,kBAAkB,CAAC+B,EAAE,CAAC;IACxC,MAAMwB,QAAQ,GAAGtD,2BAA2B,CAACgC,KAAK,CAAC;IAEnD,MAAMoB,QAAQ,GAAGnD,WAAW,CAACqD,QAAQ,CAACpB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,OAAO,KAAK,CAAC,CAAC,EAAG,UAAU,CAAC;IAC9ExC,MAAM,CAACwD,QAAQ,CAAC/B,KAAK,CAAC,CAAC4B,WAAW,CAAC,CAAC;IAEpC,MAAMhB,QAAQ,GAAGhC,WAAW,CAACqD,QAAQ,CAACpB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,OAAO,KAAK,CAAC,CAAC,EAAG,UAAU,CAAC;IAC9ExC,MAAM,CAACqC,QAAQ,CAACZ,KAAK,CAAC,CAACgC,aAAa,CAAC,CAAC;IACtCzD,MAAM,CAACqC,QAAQ,CAACO,SAAS,CAAC,CAACS,WAAW,CAAC,CAAC;IAExCrD,MAAM,CAACK,WAAW,CAAC+B,KAAK,CAACE,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,OAAO,KAAK,CAAC,CAAC,EAAG,UAAU,CAAC,CAACf,KAAK,CAAC,CAAC4B,WAAW,CAAC,CAAC;EACxF,CAAC,CAAC;AACJ,CAAC,CAAC;AAEFtD,QAAQ,CAAC,uCAAuC,EAAE,MAAM;EACtD,MAAMqB,EAAE,GAAGxB,YAAY,CAAC;IACtB+D,GAAG,EAAEhE,YAAY,CAAC,KAAK,EAAE;MAAE2B,IAAI,EAAE,EAAE;MAAEN,MAAM,EAAE;QAAE4C,CAAC,EAAElE,CAAC,CAAC8B;MAAO;IAAE,CAAC,CAAC;IAC/DqC,SAAS,EAAEnE,CAAC,CAACoE,WAAW,CAAC,WAAW,EAAE;MACpCxC,IAAI,EAAE,OAAO;MACbyC,QAAQ,EAAE;QAAEC,GAAG,EAAErE,YAAY,CAAC,OAAO,EAAE;UAAE2B,IAAI,EAAE,EAAE;UAAEN,MAAM,EAAE;YAAEiD,CAAC,EAAEvE,CAAC,CAAC8B;UAAO;QAAE,CAAC;MAAE;IAChF,CAAC;EACH,CAAC,CAAC;EACF,MAAM0C,IAAI,GAAGrE,kBAAkB,CAC7B,MAAM,EACLgC,MAAyC,KAAM;IAC9C8B,GAAG,EAAE9B,MAAM,CAAC8B,GAAG,CAAC7B,QAAQ,CAAC,GAAG,EAAEpC,CAAC,CAACgC,QAAQ,CAAChC,CAAC,CAACiC,MAAM,CAAC,CAAC,CAACM,KAAK,CAAC;EAC5D,CAAC,CACH,CAAC;EACD,MAAMC,EAAE,GAAGpC,UAAU,CAACsB,EAAE,CAAC,CAACe,eAAe,CAAC+B,IAAI,CAAC,CAACjC,KAAK,CAAC,CAAC;EAEvDhC,EAAE,CAAC,4DAA4D,EAAE,MAAM;IACrE,MAAM;MAAEmC;IAAM,CAAC,GAAGjC,kBAAkB,CAAC+B,EAAE,CAAC;IACxC,KAAK,MAAMM,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;MAC5B,MAAM2B,KAAK,GAAG/B,KAAK,CAACE,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,OAAO,KAAKA,OAAO,CAAC,CAAE/B,EAAE,CAACC,MAAM,CAACmD,SAAU;MAC1E,IAAIM,KAAK,CAACxD,IAAI,KAAK,OAAO,EAAE,MAAM,IAAIC,KAAK,CAAC,6BAA6B,CAAC;MAC1EZ,MAAM,CAACmE,KAAK,CAACA,KAAK,CAAC1B,QAAQ,CAACC,cAAc,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC;IACrD;EACF,CAAC,CAAC;EAEF1C,EAAE,CAAC,+EAA+E,EAAE,MAAM;IACxF,MAAMmE,MAAM,GAAGzE,YAAY,CAAC,QAAQ,EAAE;MAAE2B,IAAI,EAAE,EAAE;MAAEN,MAAM,EAAE;QAAEqD,MAAM,EAAE3E,CAAC,CAAC8B;MAAO;IAAE,CAAC,CAAC;IACjF,MAAM8C,MAAM,GAAG3E,YAAY,CAAC,QAAQ,EAAE;MAAE2B,IAAI,EAAE,EAAE;MAAEN,MAAM,EAAE;QAAEuD,IAAI,EAAE7E,CAAC,CAAC8B;MAAO;IAAE,CAAC,CAAC;IAC/E,MAAMgD,MAAM,GAAG5E,YAAY,CAAC;MAC1BwE,MAAM;MACNE,MAAM;MACNG,KAAK,EAAE/E,CAAC,CAACoE,WAAW,CAAC,OAAO,EAAE;QAAExC,IAAI,EAAE,EAAE;QAAEyC,QAAQ,EAAE;UAAEW,MAAM,EAAEN;QAAO;MAAE,CAAC;IAC1E,CAAC,CAAC;IACF,MAAMO,SAAS,GAAG7E,UAAU,CAAC0E,MAAM,CAAC,CACjCrC,eAAe,CAACtC,kBAAkB,CAAC,WAAW,EAAEgC,MAAM,KAAK;MAC1D4C,KAAK,EAAE5C,MAAM,CAAC4C,KAAK,CAACG,UAAU,CAAC,QAAQ,EAAEN,MAAM,CAAC,CAACrC,KAAK,CAAC;IACzD,CAAC,CAAC,CAAC,CAAC,CACHA,KAAK,CAAC,CAAC;IACV,MAAM4C,EAAE,GAAG/E,UAAU,CAAC6E,SAAS,CAAC,CAAC1C,KAAK,CAAC,CAAC;IAExC,MAAM;MAAEG;IAAM,CAAC,GAAGjC,kBAAkB,CAAC0E,EAAE,CAAC;IACxC,MAAMC,MAAM,GAAG1C,KAAK,CAACnB,GAAG,CAACX,KAAK,IAAI;MAChC,MAAME,KAAK,GAAGF,KAAK,CAACG,EAAE,CAACC,MAAM,CAAC+D,KAAM;MACpC,IAAIjE,KAAK,CAACG,IAAI,KAAK,OAAO,EAAE,MAAM,IAAIC,KAAK,CAAC,yBAAyB,CAAC;MACtE,OAAOJ,KAAK,CAAC2D,KAAK;IACpB,CAAC,CAAC;IAEFnE,MAAM,CAAC8E,MAAM,CAAC,CAAC,CAAC,CAAC,CAACC,GAAG,CAACC,cAAc,CAAC,iBAAiB,CAAC;IACvDhF,MAAM,CAAC8E,MAAM,CAAC,CAAC,CAAC,CAAEG,eAAe,CAAC,CAAC/B,OAAO,CAAC;MAAEgC,MAAM,EAAE;QAAExC,cAAc,EAAE;MAAE;IAAE,CAAC,CAAC;IAC7E1C,MAAM,CAAC8E,MAAM,CAAC,CAAC,CAAC,CAAEG,eAAe,CAAC,CAAC/B,OAAO,CAAC;MAAEgC,MAAM,EAAE;QAAExC,cAAc,EAAE;MAAE;IAAE,CAAC,CAAC;EAC/E,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF3C,QAAQ,CAAC,mCAAmC,EAAE,MAAM;EAClD,MAAMqB,EAAE,GAAGxB,YAAY,CAAC;IACtByB,QAAQ,EAAE1B,YAAY,CAAC,UAAU,EAAE;MAAE2B,IAAI,EAAE,OAAO;MAAEN,MAAM,EAAE;QAAES,KAAK,EAAE/B,CAAC,CAACiC;MAAO;IAAE,CAAC;EACnF,CAAC,CAAC;EACF,MAAMO,EAAE,GAAGpC,UAAU,CAACsB,EAAE,CAAC,CACtBe,eAAe,CAACtC,kBAAkB,CAAC,SAAS,EAAGgC,MAAyC,KAAM;IAC7FR,QAAQ,EAAEQ,MAAM,CAACR,QAAQ,CACtBS,QAAQ,CAAC,WAAW,EAAEpC,CAAC,CAACgC,QAAQ,CAAChC,CAAC,CAACiC,MAAM,CAAC,EAAE;MAAEI,WAAW,EAAE,CAAC,OAAO;IAAE,CAAC,CAAC,CACvEE,KAAK,CAAC;EACX,CAAC,CAAC,CAAC,CAAC,CACHA,KAAK,CAAC,CAAC;EACV,MAAMkD,IAAI,GAAGrF,UAAU,CAACoC,EAAE,EAAE;IAAEkD,IAAI,EAAE;EAAQ,CAAC,CAAC,CAC3CjD,eAAe,CACdtC,kBAAkB,CAAC,UAAU,EAAGgC,MAAyC,KAAM;IAC7ER,QAAQ,EAAEQ,MAAM,CAACR,QAAQ,CAACS,QAAQ,CAAC,OAAO,EAAEpC,CAAC,CAACgC,QAAQ,CAAChC,CAAC,CAACiC,MAAM,CAAC,CAAC,CAACM,KAAK,CAAC;EAC1E,CAAC,CAAC,CACJ,CAAC,CACAA,KAAK,CAAC,CAAC;EAEVhC,EAAE,CAAC,mFAAmF,EAAE,MAAM;IAC5F,MAAM;MAAEmC,KAAK;MAAEU;IAAc,CAAC,GAAG3C,kBAAkB,CAACgF,IAAI,CAAC;IAEzDnF,MAAM,CAACoC,KAAK,CAACnB,GAAG,CAACX,KAAK,IAAI,CAACA,KAAK,CAACkC,OAAO,EAAElC,KAAK,CAAC+E,YAAY,CAAC,CAAC,CAAC,CAACnC,OAAO,CAAC,CACtE,CAAC,CAAC,EAAEC,SAAS,CAAC,EACd,CAAC,CAAC,EAAEA,SAAS,CAAC,EACd,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;IACFnD,MAAM,CAAC8C,aAAa,CAAC,CAACH,IAAI,CAAC,CAAC,CAAC;IAE7B,MAAM3B,MAAM,GAAGX,WAAW,CAAC+B,KAAK,CAAC,CAAC,CAAC,EAAG,UAAU,CAAC;IACjDpC,MAAM,CAACgB,MAAM,CAACsE,KAAK,CAAE7C,QAAQ,CAAC,CAACS,OAAO,CAAC;MAAER,cAAc,EAAE,CAAC;MAAE6C,mBAAmB,EAAE;IAAE,CAAC,CAAC;IACrFvF,MAAM,CAACgB,MAAM,CAAC4B,SAAS,CAAEH,QAAQ,CAAC,CAACS,OAAO,CAAC;MAAER,cAAc,EAAE;IAAE,CAAC,CAAC;EACnE,CAAC,CAAC;EAEFzC,EAAE,CAAC,sDAAsD,EAAE,MAAM;IAC/DD,MAAM,CAACG,kBAAkB,CAACgF,IAAI,EAAEhC,SAAS,EAAE,CAAC,CAAC,EAAE;MAAEH,KAAK,EAAE,CAAC;MAAEC,KAAK,EAAE;IAAE,CAAC,CAAC,CAACb,KAAK,CAAC,CAACoD,YAAY,CAAC,CAAC,CAAC;IAC7FxF,MAAM,CAACG,kBAAkB,CAACgF,IAAI,EAAEhC,SAAS,EAAE,CAAC,CAAC,EAAE;MAAEH,KAAK,EAAE,CAAC;MAAEC,KAAK,EAAE;IAAE,CAAC,CAAC,CAACb,KAAK,CAAC,CAACoD,YAAY,CAAC,CAAC,CAAC;IAC7FxF,MAAM,CAAC,MAAMG,kBAAkB,CAACgF,IAAI,EAAEhC,SAAS,EAAE,CAAC,CAAC,EAAE;MAAEH,KAAK,EAAE,CAAC;MAAEC,KAAK,EAAE;IAAE,CAAC,CAAC,CAAC,CAACG,OAAO,CACnF,2EACF,CAAC;EACH,CAAC,CAAC;EAEFnD,EAAE,CAAC,4EAA4E,EAAE,MAAM;IACrF,MAAM;MAAEmC;IAAM,CAAC,GAAGjC,kBAAkB,CAACgF,IAAI,CAAC;IAC1C,MAAMM,SAAS,GAAGvF,qBAAqB,CAACkC,KAAK,CAAC;IAE9CpC,MAAM,CAACyF,SAAS,CAACxE,GAAG,CAACX,KAAK,IAAIA,KAAK,CAACkC,OAAO,CAAC,CAAC,CAACU,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7DlD,MAAM,CAACyF,SAAS,CAAC,CAAC,CAAC,CAAEJ,YAAY,CAAC,CAAC5B,aAAa,CAAC,CAAC;IAClDzD,MAAM,CAACK,WAAW,CAACoF,SAAS,CAAC,CAAC,CAAC,EAAG,UAAU,CAAC,CAACH,KAAK,CAAC,CAACjC,WAAW,CAAC,CAAC;IAClErD,MAAM,CAACyF,SAAS,CAAC,CAAC,CAAC,CAAEC,UAAU,CAAC,CAACxC,OAAO,CAAC;MACvC7B,QAAQ,EAAE;QAAEuB,SAAS,EAAE;UAAEb,WAAW,EAAE,CAAC,OAAO;QAAE;MAAE;IACpD,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,151 @@
1
+ /*
2
+ * Copyright 2026 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { UNKNOWN_UNION_VARIANT } from "@palantir/pack.document-schema.model-types";
18
+ import { assertVariantNameAllowed } from "@palantir/pack.schema";
19
+ import { resolveMinVersion, stripDeprecatedFieldsForSdk } from "./resolveSchemaChain.js";
20
+ import { internalSchemaName, internalTypeName, knownTypeName, modelName, narrowKnownFunctionName, RESERVED_SDK_NAMES, schemaName, typeGuardName, unionVariantName, upgradesName, versionedDocRefName, versionedInternalTypeName, versionedSchemaName, versionedTypeName, versionedWriteTypeName } from "./runtimeSchema.js";
21
+
22
+ /**
23
+ * Throw if the generated SDK would use one name for two different things, so a clash fails
24
+ * here with a clear message instead of as a TypeScript error in the generated files. Run it
25
+ * before a schema is deployed: model keys are stored in documents, so renaming a model
26
+ * afterwards breaks existing data. Returns the names it checked, for tests.
27
+ */
28
+ export function assertSdkNamesUnique(irChain, minSupportedVersion) {
29
+ const {
30
+ minVersion
31
+ } = resolveMinVersion(irChain, minSupportedVersion);
32
+ // The SDK leaves out deprecated fields, so check the fields it actually generates.
33
+ const chain = stripDeprecatedFieldsForSdk(irChain);
34
+
35
+ // Generated names end in "_v<version>", so a model key like "Foo_v2" passes today but
36
+ // clashes with record "Foo" once the schema reaches v2, when it can no longer be renamed.
37
+ for (const {
38
+ ir
39
+ } of chain) {
40
+ for (const [modelKey, modelDef] of Object.entries(ir.models)) {
41
+ if (/_v\d/.test(modelKey)) {
42
+ throw new Error(`Model "${modelKey}" can't contain "_v" followed by a number. The generated SDK adds` + ` "_v<version>" to names, so this one could clash in a later schema version.` + " Rename the model.");
43
+ }
44
+
45
+ // JSON input bypasses defineUnion, so enforce its reserved names here too.
46
+ if (modelDef.type === "union") {
47
+ if (modelDef.union.discriminant === "rawValue") {
48
+ throw new Error(`Union "${modelKey}" can't use "rawValue" as its discriminant. The generated Unknown case` + " stores the original value in rawValue; choose another name.");
49
+ }
50
+ for (const variantKey of Object.keys(modelDef.union.variants)) {
51
+ assertVariantNameAllowed(variantKey, modelKey);
52
+ }
53
+ }
54
+ }
55
+ }
56
+
57
+ // Each name the SDK uses, and what uses it, e.g. "KnownShape" -> 'union "Shape" (Known type)'.
58
+ const usedNames = new Map();
59
+ const useName = (name, usedFor) => {
60
+ const alreadyUsedFor = usedNames.get(name);
61
+ // The same thing can be added again, e.g. once per version. Only a different thing clashes.
62
+ if (alreadyUsedFor != null && alreadyUsedFor !== usedFor) {
63
+ throw new Error(`The generated SDK would use the name "${name}" for both ${alreadyUsedFor} and ${usedFor}.` + " Rename a model so the names differ.");
64
+ }
65
+ usedNames.set(name, usedFor);
66
+ };
67
+ for (const name of RESERVED_SDK_NAMES) {
68
+ useName(name, "the SDK itself");
69
+ }
70
+
71
+ // types.ts, schema.ts and models.ts: unversioned names from the latest version.
72
+ const latestIr = chain[chain.length - 1].ir;
73
+ for (const [modelKey, modelDef] of Object.entries(latestIr.models)) {
74
+ const model = `${modelDef.type} "${modelKey}"`; // e.g. 'record "Foo"'
75
+ useName(modelKey, model);
76
+ useName(modelName(modelKey), `${model} (Model)`);
77
+ useName(schemaName(modelKey), `${model} (Zod schema)`);
78
+ if (modelDef.type !== "union") continue;
79
+ useName(knownTypeName(modelKey), `${model} (Known type)`);
80
+ useName(narrowKnownFunctionName(modelKey), `${model} (narrowKnown function)`);
81
+ useName(upgradesName(modelKey), `${model} (upgrades)`);
82
+ for (const variantKey of Object.keys(modelDef.union.variants)) {
83
+ const variant = `variant "${variantKey}" of ${model}`;
84
+ const variantName = unionVariantName(modelKey, variantKey);
85
+ useName(variantName, variant);
86
+ useName(modelName(variantName), `${variant} (Model)`);
87
+ useName(schemaName(variantName), `${variant} (Zod schema)`);
88
+ }
89
+ useName(unionVariantName(modelKey, UNKNOWN_UNION_VARIANT), `variant "${UNKNOWN_UNION_VARIANT}" of ${model}`);
90
+ }
91
+
92
+ // types_vN.ts, writeTypes_vN.ts, schema_vN.ts and versionedDocRef.ts, for each supported version.
93
+ for (const {
94
+ version,
95
+ ir
96
+ } of chain) {
97
+ if (version < minVersion) continue;
98
+ useName(versionedDocRefName(version), "the SDK itself");
99
+ for (const [modelKey, modelDef] of Object.entries(ir.models)) {
100
+ const model = `${modelDef.type} "${modelKey}"`;
101
+ const typeName = versionedTypeName(modelKey, version);
102
+ const zodName = versionedSchemaName(modelKey, version);
103
+ useName(typeName, `${model} (v${version} type)`);
104
+ useName(zodName, `${model} (v${version} Zod schema)`);
105
+ if (modelDef.type === "record") {
106
+ useName(versionedWriteTypeName(modelKey, version), `${model} (v${version} write type)`);
107
+ continue;
108
+ }
109
+ useName(knownTypeName(typeName), `${model} (v${version} Known type)`);
110
+ useName(narrowKnownFunctionName(typeName), `${model} (v${version} narrowKnown function)`);
111
+ const {
112
+ discriminant,
113
+ variants
114
+ } = modelDef.union;
115
+ for (const variantKey of [...Object.keys(variants), UNKNOWN_UNION_VARIANT]) {
116
+ const variant = `variant "${variantKey}" of ${model}`;
117
+ const variantType = unionVariantName(typeName, variantKey);
118
+ useName(variantType, `${variant} (v${version} type)`);
119
+ useName(typeGuardName(variantType), `${variant} (v${version} type guard)`);
120
+ useName(unionVariantName(zodName, variantKey), `${variant} (v${version} Zod schema)`);
121
+ }
122
+
123
+ // A variant's type is its record's fields (or `value` for any other variant) plus the
124
+ // discriminant, so a field named like the discriminant would appear twice.
125
+ for (const [variantKey, targetKey] of Object.entries(variants)) {
126
+ const target = ir.models[targetKey];
127
+ const fields = target?.type === "record" ? target.record.fields.map(field => field.key) : ["value"];
128
+ if (fields.includes(discriminant)) {
129
+ throw new Error(`The generated type "${unionVariantName(typeName, variantKey)}" would have two` + ` properties named "${discriminant}". Rename the discriminant of ${model}.`);
130
+ }
131
+ }
132
+ }
133
+ }
134
+
135
+ // _internal/: every record in any version of the chain.
136
+ for (const {
137
+ version,
138
+ ir
139
+ } of chain) {
140
+ for (const [modelKey, modelDef] of Object.entries(ir.models)) {
141
+ if (modelDef.type !== "record") continue;
142
+ const model = `record "${modelKey}"`;
143
+ useName(internalTypeName(modelKey), `${model} (internal type)`);
144
+ useName(versionedInternalTypeName(modelKey, version), `${model} (v${version} internal type)`);
145
+ useName(internalSchemaName(modelKey), `${model} (internal Zod schema)`);
146
+ useName(upgradesName(modelKey), `${model} (upgrades)`);
147
+ }
148
+ }
149
+ return usedNames;
150
+ }
151
+ //# sourceMappingURL=assertSdkNamesUnique.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertSdkNamesUnique.js","names":["UNKNOWN_UNION_VARIANT","assertVariantNameAllowed","resolveMinVersion","stripDeprecatedFieldsForSdk","internalSchemaName","internalTypeName","knownTypeName","modelName","narrowKnownFunctionName","RESERVED_SDK_NAMES","schemaName","typeGuardName","unionVariantName","upgradesName","versionedDocRefName","versionedInternalTypeName","versionedSchemaName","versionedTypeName","versionedWriteTypeName","assertSdkNamesUnique","irChain","minSupportedVersion","minVersion","chain","ir","modelKey","modelDef","Object","entries","models","test","Error","type","union","discriminant","variantKey","keys","variants","usedNames","Map","useName","name","usedFor","alreadyUsedFor","get","set","latestIr","length","model","variant","variantName","version","typeName","zodName","variantType","targetKey","target","fields","record","map","field","key","includes"],"sources":["assertSdkNamesUnique.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 { assertVariantNameAllowed } from \"@palantir/pack.schema\";\nimport {\n resolveMinVersion,\n stripDeprecatedFieldsForSdk,\n type VersionedIrEntry,\n} from \"./resolveSchemaChain.js\";\nimport {\n internalSchemaName,\n internalTypeName,\n knownTypeName,\n modelName,\n narrowKnownFunctionName,\n RESERVED_SDK_NAMES,\n schemaName,\n typeGuardName,\n unionVariantName,\n upgradesName,\n versionedDocRefName,\n versionedInternalTypeName,\n versionedSchemaName,\n versionedTypeName,\n versionedWriteTypeName,\n} from \"./runtimeSchema.js\";\n\n/**\n * Throw if the generated SDK would use one name for two different things, so a clash fails\n * here with a clear message instead of as a TypeScript error in the generated files. Run it\n * before a schema is deployed: model keys are stored in documents, so renaming a model\n * afterwards breaks existing data. Returns the names it checked, for tests.\n */\nexport function assertSdkNamesUnique(\n irChain: VersionedIrEntry[],\n minSupportedVersion: number | undefined,\n): ReadonlyMap<string, string> {\n const { minVersion } = resolveMinVersion(irChain, minSupportedVersion);\n // The SDK leaves out deprecated fields, so check the fields it actually generates.\n const chain = stripDeprecatedFieldsForSdk(irChain);\n\n // Generated names end in \"_v<version>\", so a model key like \"Foo_v2\" passes today but\n // clashes with record \"Foo\" once the schema reaches v2, when it can no longer be renamed.\n for (const { ir } of chain) {\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (/_v\\d/.test(modelKey)) {\n throw new Error(\n `Model \"${modelKey}\" can't contain \"_v\" followed by a number. The generated SDK adds`\n + ` \"_v<version>\" to names, so this one could clash in a later schema version.`\n + \" Rename the model.\",\n );\n }\n\n // JSON input bypasses defineUnion, so enforce its reserved names here too.\n if (modelDef.type === \"union\") {\n if (modelDef.union.discriminant === \"rawValue\") {\n throw new Error(\n `Union \"${modelKey}\" can't use \"rawValue\" as its discriminant. The generated Unknown case`\n + \" stores the original value in rawValue; choose another name.\",\n );\n }\n for (const variantKey of Object.keys(modelDef.union.variants)) {\n assertVariantNameAllowed(variantKey, modelKey);\n }\n }\n }\n }\n\n // Each name the SDK uses, and what uses it, e.g. \"KnownShape\" -> 'union \"Shape\" (Known type)'.\n const usedNames = new Map<string, string>();\n const useName = (name: string, usedFor: string): void => {\n const alreadyUsedFor = usedNames.get(name);\n // The same thing can be added again, e.g. once per version. Only a different thing clashes.\n if (alreadyUsedFor != null && alreadyUsedFor !== usedFor) {\n throw new Error(\n `The generated SDK would use the name \"${name}\" for both ${alreadyUsedFor} and ${usedFor}.`\n + \" Rename a model so the names differ.\",\n );\n }\n usedNames.set(name, usedFor);\n };\n\n for (const name of RESERVED_SDK_NAMES) {\n useName(name, \"the SDK itself\");\n }\n\n // types.ts, schema.ts and models.ts: unversioned names from the latest version.\n const latestIr = chain[chain.length - 1]!.ir;\n for (const [modelKey, modelDef] of Object.entries(latestIr.models)) {\n const model = `${modelDef.type} \"${modelKey}\"`; // e.g. 'record \"Foo\"'\n useName(modelKey, model);\n useName(modelName(modelKey), `${model} (Model)`);\n useName(schemaName(modelKey), `${model} (Zod schema)`);\n if (modelDef.type !== \"union\") continue;\n\n useName(knownTypeName(modelKey), `${model} (Known type)`);\n useName(narrowKnownFunctionName(modelKey), `${model} (narrowKnown function)`);\n useName(upgradesName(modelKey), `${model} (upgrades)`);\n for (const variantKey of Object.keys(modelDef.union.variants)) {\n const variant = `variant \"${variantKey}\" of ${model}`;\n const variantName = unionVariantName(modelKey, variantKey);\n useName(variantName, variant);\n useName(modelName(variantName), `${variant} (Model)`);\n useName(schemaName(variantName), `${variant} (Zod schema)`);\n }\n useName(\n unionVariantName(modelKey, UNKNOWN_UNION_VARIANT),\n `variant \"${UNKNOWN_UNION_VARIANT}\" of ${model}`,\n );\n }\n\n // types_vN.ts, writeTypes_vN.ts, schema_vN.ts and versionedDocRef.ts, for each supported version.\n for (const { version, ir } of chain) {\n if (version < minVersion) continue;\n\n useName(versionedDocRefName(version), \"the SDK itself\");\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n const model = `${modelDef.type} \"${modelKey}\"`;\n const typeName = versionedTypeName(modelKey, version);\n const zodName = versionedSchemaName(modelKey, version);\n useName(typeName, `${model} (v${version} type)`);\n useName(zodName, `${model} (v${version} Zod schema)`);\n if (modelDef.type === \"record\") {\n useName(versionedWriteTypeName(modelKey, version), `${model} (v${version} write type)`);\n continue;\n }\n\n useName(knownTypeName(typeName), `${model} (v${version} Known type)`);\n useName(narrowKnownFunctionName(typeName), `${model} (v${version} narrowKnown function)`);\n const { discriminant, variants } = modelDef.union;\n for (const variantKey of [...Object.keys(variants), UNKNOWN_UNION_VARIANT]) {\n const variant = `variant \"${variantKey}\" of ${model}`;\n const variantType = unionVariantName(typeName, variantKey);\n useName(variantType, `${variant} (v${version} type)`);\n useName(typeGuardName(variantType), `${variant} (v${version} type guard)`);\n useName(unionVariantName(zodName, variantKey), `${variant} (v${version} Zod schema)`);\n }\n\n // A variant's type is its record's fields (or `value` for any other variant) plus the\n // discriminant, so a field named like the discriminant would appear twice.\n for (const [variantKey, targetKey] of Object.entries(variants)) {\n const target = ir.models[targetKey];\n const fields = target?.type === \"record\"\n ? target.record.fields.map(field => field.key)\n : [\"value\"];\n if (fields.includes(discriminant)) {\n throw new Error(\n `The generated type \"${unionVariantName(typeName, variantKey)}\" would have two`\n + ` properties named \"${discriminant}\". Rename the discriminant of ${model}.`,\n );\n }\n }\n }\n }\n\n // _internal/: every record in any version of the chain.\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 const model = `record \"${modelKey}\"`;\n useName(internalTypeName(modelKey), `${model} (internal type)`);\n useName(versionedInternalTypeName(modelKey, version), `${model} (v${version} internal type)`);\n useName(internalSchemaName(modelKey), `${model} (internal Zod schema)`);\n useName(upgradesName(modelKey), `${model} (upgrades)`);\n }\n }\n\n return usedNames;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -15,10 +15,9 @@
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 { resolveMinVersion } from "./resolveSchemaChain.js";
21
- import { DOCUMENT_TYPE_PATH, INTERNAL_UPGRADE_FNS_PATH, knownTypeName, MODELS_PATH, narrowKnownFunctionName, TYPES_REEXPORT_PATH, typesFilePath, VERSIONED_DOC_REF_PATH, versionedTypeName, VERSIONS_PATH } from "./runtimeSchema.js";
20
+ import { DOCUMENT_TYPE_PATH, INTERNAL_UPGRADE_FNS_PATH, knownTypeName, MODELS_PATH, narrowKnownFunctionName, typeGuardName, TYPES_REEXPORT_PATH, typesFilePath, unionVariantName, VERSIONED_DOC_REF_PATH, versionedTypeName, VERSIONS_PATH } from "./runtimeSchema.js";
22
21
 
23
22
  /**
24
23
  * Generate the index.ts barrel export from a versioned schema.
@@ -75,10 +74,9 @@ export function generateIndexFromChain(resolved, minSupportedVersion) {
75
74
 
76
75
  // Union variant types and their generated `is<Variant>` guards, including the Unknown case.
77
76
  for (const variantName of [...Object.keys(modelDef.union.variants), UNKNOWN_UNION_VARIANT]) {
78
- const formattedVariant = formatVariantName(variantName);
79
- const variantTypeName = `${versionedTypeName(modelKey, version)}${formattedVariant}`;
77
+ const variantTypeName = unionVariantName(unionTypeName, variantName);
80
78
  typeNames.push(variantTypeName);
81
- guardNames.push(`is${variantTypeName}`);
79
+ guardNames.push(typeGuardName(variantTypeName));
82
80
  }
83
81
  }
84
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generateIndexFromSchema.js","names":["UNKNOWN_UNION_VARIANT","formatVariantName","GENERATED_FILE_HEADER","resolveMinVersion","DOCUMENT_TYPE_PATH","INTERNAL_UPGRADE_FNS_PATH","knownTypeName","MODELS_PATH","narrowKnownFunctionName","TYPES_REEXPORT_PATH","typesFilePath","VERSIONED_DOC_REF_PATH","versionedTypeName","VERSIONS_PATH","generateIndexFromChain","resolved","minSupportedVersion","chain","minVersion","output","version","ir","typeNames","guardNames","modelKey","modelDef","Object","entries","models","type","push","unionTypeName","variantName","keys","union","variants","formattedVariant","variantTypeName","length","sort","join"],"sources":["generateIndexFromSchema.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 { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\nimport type { ResolvedIrChain } from \"./resolveSchemaChain.js\";\nimport { resolveMinVersion } from \"./resolveSchemaChain.js\";\nimport {\n DOCUMENT_TYPE_PATH,\n INTERNAL_UPGRADE_FNS_PATH,\n knownTypeName,\n MODELS_PATH,\n narrowKnownFunctionName,\n TYPES_REEXPORT_PATH,\n typesFilePath,\n VERSIONED_DOC_REF_PATH,\n versionedTypeName,\n VERSIONS_PATH,\n} from \"./runtimeSchema.js\";\n\n/**\n * Generate the index.ts barrel export from a versioned schema.\n *\n * Exports:\n * - `models.js` (star export — model constants and `DocumentModel`; emitted\n * as a factory function when the schema has derived fields, otherwise a const)\n * - `types.js` (star export — latest-version type aliases)\n * - `versions.js` (star export — SupportedVersions, LatestVersion, MinSupportedVersion)\n * - `versionedDocRef.js` (star export — VersionedDocRef types and factory)\n * - `documentType.js` (star export — DOCUMENT_TYPE_NAME and DOCUMENT_TYPE_DESCRIPTION)\n * - `DocumentUpgradeFns` type (the typed shape the factory accepts)\n * - Per supported version: explicit named type exports from `types_vN.js`\n * (not star exports, to avoid polluting autocomplete for read-only consumers)\n * - Per supported version: the union variant type guard *functions* from\n * `types_vN.js` as values (e.g. `isFooBar_v1`), so consumers can narrow a\n * union without re-deriving the discriminant check\n */\nexport function generateIndexFromChain(\n resolved: ResolvedIrChain,\n minSupportedVersion?: number,\n): string {\n const { chain } = resolved;\n const { minVersion } = resolveMinVersion(chain, minSupportedVersion);\n\n let output = GENERATED_FILE_HEADER;\n\n // Star exports for core modules\n output += `export * from \"${MODELS_PATH}\";\\n`;\n output += `export * from \"${TYPES_REEXPORT_PATH}\";\\n`;\n output += `export * from \"${VERSIONS_PATH}\";\\n`;\n output += `export * from \"${VERSIONED_DOC_REF_PATH}\";\\n`;\n output += `export * from \"${DOCUMENT_TYPE_PATH}\";\\n`;\n // The typed upgrade-function table shape. Apps reference this type when\n // constructing the value passed to `DocumentModel(...)`.\n output += `export { type DocumentUpgradeFns } from \"${INTERNAL_UPGRADE_FNS_PATH}\";\\n`;\n\n // Per-version explicit named type exports\n for (const { version, ir } of chain) {\n if (version < minVersion) continue;\n\n const typeNames: string[] = [];\n // Union variant type guard functions (values, not types).\n const guardNames: string[] = [];\n\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 const unionTypeName = versionedTypeName(modelKey, version);\n typeNames.push(unionTypeName, knownTypeName(unionTypeName));\n guardNames.push(narrowKnownFunctionName(unionTypeName));\n\n // Union variant types and their generated `is<Variant>` guards, including the Unknown case.\n for (\n const variantName of [...Object.keys(modelDef.union.variants), UNKNOWN_UNION_VARIANT]\n ) {\n const formattedVariant = formatVariantName(variantName);\n const variantTypeName = `${versionedTypeName(modelKey, version)}${formattedVariant}`;\n typeNames.push(variantTypeName);\n guardNames.push(`is${variantTypeName}`);\n }\n }\n }\n\n if (typeNames.length > 0) {\n output += `export type { ${typeNames.sort().join(\", \")} } from \"${\n typesFilePath(version)\n }\";\\n`;\n }\n\n if (guardNames.length > 0) {\n output += `export { ${guardNames.sort().join(\", \")} } from \"${typesFilePath(version)}\";\\n`;\n }\n }\n\n return output;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateIndexFromSchema.js","names":["UNKNOWN_UNION_VARIANT","GENERATED_FILE_HEADER","resolveMinVersion","DOCUMENT_TYPE_PATH","INTERNAL_UPGRADE_FNS_PATH","knownTypeName","MODELS_PATH","narrowKnownFunctionName","typeGuardName","TYPES_REEXPORT_PATH","typesFilePath","unionVariantName","VERSIONED_DOC_REF_PATH","versionedTypeName","VERSIONS_PATH","generateIndexFromChain","resolved","minSupportedVersion","chain","minVersion","output","version","ir","typeNames","guardNames","modelKey","modelDef","Object","entries","models","type","push","unionTypeName","variantName","keys","union","variants","variantTypeName","length","sort","join"],"sources":["generateIndexFromSchema.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 { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\nimport type { ResolvedIrChain } from \"./resolveSchemaChain.js\";\nimport { resolveMinVersion } from \"./resolveSchemaChain.js\";\nimport {\n DOCUMENT_TYPE_PATH,\n INTERNAL_UPGRADE_FNS_PATH,\n knownTypeName,\n MODELS_PATH,\n narrowKnownFunctionName,\n typeGuardName,\n TYPES_REEXPORT_PATH,\n typesFilePath,\n unionVariantName,\n VERSIONED_DOC_REF_PATH,\n versionedTypeName,\n VERSIONS_PATH,\n} from \"./runtimeSchema.js\";\n\n/**\n * Generate the index.ts barrel export from a versioned schema.\n *\n * Exports:\n * - `models.js` (star export — model constants and `DocumentModel`; emitted\n * as a factory function when the schema has derived fields, otherwise a const)\n * - `types.js` (star export — latest-version type aliases)\n * - `versions.js` (star export — SupportedVersions, LatestVersion, MinSupportedVersion)\n * - `versionedDocRef.js` (star export — VersionedDocRef types and factory)\n * - `documentType.js` (star export — DOCUMENT_TYPE_NAME and DOCUMENT_TYPE_DESCRIPTION)\n * - `DocumentUpgradeFns` type (the typed shape the factory accepts)\n * - Per supported version: explicit named type exports from `types_vN.js`\n * (not star exports, to avoid polluting autocomplete for read-only consumers)\n * - Per supported version: the union variant type guard *functions* from\n * `types_vN.js` as values (e.g. `isFooBar_v1`), so consumers can narrow a\n * union without re-deriving the discriminant check\n */\nexport function generateIndexFromChain(\n resolved: ResolvedIrChain,\n minSupportedVersion?: number,\n): string {\n const { chain } = resolved;\n const { minVersion } = resolveMinVersion(chain, minSupportedVersion);\n\n let output = GENERATED_FILE_HEADER;\n\n // Star exports for core modules\n output += `export * from \"${MODELS_PATH}\";\\n`;\n output += `export * from \"${TYPES_REEXPORT_PATH}\";\\n`;\n output += `export * from \"${VERSIONS_PATH}\";\\n`;\n output += `export * from \"${VERSIONED_DOC_REF_PATH}\";\\n`;\n output += `export * from \"${DOCUMENT_TYPE_PATH}\";\\n`;\n // The typed upgrade-function table shape. Apps reference this type when\n // constructing the value passed to `DocumentModel(...)`.\n output += `export { type DocumentUpgradeFns } from \"${INTERNAL_UPGRADE_FNS_PATH}\";\\n`;\n\n // Per-version explicit named type exports\n for (const { version, ir } of chain) {\n if (version < minVersion) continue;\n\n const typeNames: string[] = [];\n // Union variant type guard functions (values, not types).\n const guardNames: string[] = [];\n\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 const unionTypeName = versionedTypeName(modelKey, version);\n typeNames.push(unionTypeName, knownTypeName(unionTypeName));\n guardNames.push(narrowKnownFunctionName(unionTypeName));\n\n // Union variant types and their generated `is<Variant>` guards, including the Unknown case.\n for (\n const variantName of [...Object.keys(modelDef.union.variants), UNKNOWN_UNION_VARIANT]\n ) {\n const variantTypeName = unionVariantName(unionTypeName, variantName);\n typeNames.push(variantTypeName);\n guardNames.push(typeGuardName(variantTypeName));\n }\n }\n }\n\n if (typeNames.length > 0) {\n output += `export type { ${typeNames.sort().join(\", \")} } from \"${\n typesFilePath(version)\n }\";\\n`;\n }\n\n if (guardNames.length > 0) {\n output += `export { ${guardNames.sort().join(\", \")} } from \"${typesFilePath(version)}\";\\n`;\n }\n }\n\n return output;\n}\n"],"mappings":"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","ignoreList":[]}