@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
@@ -18,6 +18,41 @@ import { describe, expect, it } from "vitest";
18
18
  import { IFieldValueUnion } from "../../../lib/pack-docschema-api/pack-docschema-ir/index.js";
19
19
  import { convertIrToWireSchema } from "../convertIrToWireSchema.js";
20
20
  describe("convertIrToWireSchema", () => {
21
+ it("should pass through the minor version a field was added in", () => {
22
+ const record = {
23
+ key: "Shape",
24
+ name: "Shape",
25
+ fields: [{
26
+ key: "label",
27
+ name: "label",
28
+ fieldType: {
29
+ type: "value",
30
+ value: IFieldValueUnion.string({})
31
+ },
32
+ metadata: {
33
+ addedInVersion: 2,
34
+ addedInMinorVersion: 1
35
+ },
36
+ isOptional: true
37
+ }]
38
+ };
39
+ const shape = convertIrToWireSchema({
40
+ name: "Test",
41
+ description: "Test schema",
42
+ version: 2,
43
+ primaryModelKeys: ["Shape"],
44
+ models: {
45
+ Shape: {
46
+ type: "record",
47
+ record
48
+ }
49
+ }
50
+ }).models["Shape"];
51
+ expect(shape.fields[0].metadata).toEqual({
52
+ addedInVersion: 2,
53
+ addedInMinorVersion: 1
54
+ });
55
+ });
21
56
  it("should flatten record model and rename fields correctly", () => {
22
57
  const record = {
23
58
  key: "Person",
@@ -104,6 +139,42 @@ describe("convertIrToWireSchema", () => {
104
139
  square: "Square"
105
140
  });
106
141
  expect("union" in shape).toBe(false); // no conjure nesting
142
+ expect(JSON.parse(JSON.stringify(shape))).not.toHaveProperty("variantMetadata");
143
+ });
144
+ it("should pass through the version each later-added variant was added in", () => {
145
+ const shape = convertIrToWireSchema({
146
+ name: "Test",
147
+ description: "Test",
148
+ version: 2,
149
+ primaryModelKeys: ["Shape"],
150
+ models: {
151
+ Shape: {
152
+ type: "union",
153
+ union: {
154
+ key: "Shape",
155
+ discriminant: "type",
156
+ name: "Shape",
157
+ variants: {
158
+ circle: "Circle",
159
+ square: "Square"
160
+ },
161
+ metadata: {
162
+ addedInVersion: 1
163
+ },
164
+ variantMetadata: {
165
+ square: {
166
+ addedInVersion: 2
167
+ }
168
+ }
169
+ }
170
+ }
171
+ }
172
+ }).models["Shape"];
173
+ expect(shape.variantMetadata).toEqual({
174
+ square: {
175
+ addedInVersion: 2
176
+ }
177
+ });
107
178
  });
108
179
  it("should convert value field type with FieldValueType wrapper", () => {
109
180
  const record = {
@@ -1 +1 @@
1
- {"version":3,"file":"convertIrToWireSchema.test.js","names":["describe","expect","it","IFieldValueUnion","convertIrToWireSchema","record","key","name","description","fields","fieldType","type","value","string","metadata","addedInVersion","wire","version","primaryModelKeys","models","Person","toEqual","toBeDefined","personModel","toBe","person","nameField","Shape","union","discriminant","variants","circle","square","shapeModel","shape","defaultValue","R","recordModel","field","valueType","array","allowNullValue","fn","resourceRef","payload","resourceRids","boolean","datetime","docRef","documentTypeRids","double","minValue","maxValue","integer","mediaRef","modelRef","modelTypes","object","interfaceTypeRids","objectTypeRids","maxLength","text","unmanagedJson","userRef","wireValue","toBeUndefined","val","Object","entries","FooAlias","model"],"sources":["convertIrToWireSchema.test.ts"],"sourcesContent":["/*\n * Copyright 2025 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 { FieldValueType, RecordDef, UnionDef } from \"@osdk/foundry.pack\";\nimport { describe, expect, it } from \"vitest\";\nimport type {\n IModelDef,\n IRealTimeDocumentSchema,\n IRecordDef,\n IUnionDef,\n} from \"../../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { IFieldValueUnion } from \"../../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { convertIrToWireSchema } from \"../convertIrToWireSchema.js\";\n\ndescribe(\"convertIrToWireSchema\", () => {\n it(\"should flatten record model and rename fields correctly\", () => {\n const record: IRecordDef = {\n key: \"Person\",\n name: \"Person\",\n description: \"A person\",\n fields: [\n {\n key: \"name\",\n name: \"Name\",\n fieldType: {\n type: \"value\",\n value: IFieldValueUnion.string({}),\n },\n metadata: { addedInVersion: 1 },\n },\n ],\n };\n\n const ir: IRealTimeDocumentSchema = {\n name: \"Test\",\n description: \"Test schema\",\n version: 1,\n primaryModelKeys: [\"Person\"],\n models: {\n Person: { type: \"record\", record } as IModelDef,\n },\n };\n\n const wire = convertIrToWireSchema(ir);\n\n // Top-level structure\n expect(wire.primaryModelKeys).toEqual([\"Person\"]);\n expect(wire.models).toBeDefined();\n\n // Model is flattened (no .record wrapper)\n const personModel = wire.models[\"Person\"];\n expect(personModel).toBeDefined();\n expect(personModel!.type).toBe(\"record\");\n const person = personModel as { type: \"record\" } & RecordDef;\n expect(person.key).toBe(\"Person\");\n expect(person.name).toBe(\"Person\");\n expect(\"record\" in person).toBe(false); // no conjure nesting\n\n // Field uses wire field names\n const nameField = person.fields[0]!;\n expect(nameField.key).toBe(\"name\");\n expect(nameField.fieldType).toBeDefined();\n expect(nameField.metadata).toEqual({ addedInVersion: 1 });\n });\n\n it(\"should flatten union model\", () => {\n const union: IUnionDef = {\n key: \"Shape\",\n discriminant: \"shapeType\",\n name: \"Shape\",\n variants: { circle: \"Circle\", square: \"Square\" },\n metadata: { addedInVersion: 1 },\n };\n\n const ir: IRealTimeDocumentSchema = {\n name: \"Test\",\n description: \"Test\",\n version: 1,\n primaryModelKeys: [\"Shape\"],\n models: {\n Shape: { type: \"union\", union } as IModelDef,\n },\n };\n\n const wire = convertIrToWireSchema(ir);\n const shapeModel = wire.models[\"Shape\"];\n expect(shapeModel).toBeDefined();\n expect(shapeModel!.type).toBe(\"union\");\n const shape = shapeModel as { type: \"union\" } & UnionDef;\n\n expect(shape.key).toBe(\"Shape\");\n expect(shape.discriminant).toBe(\"shapeType\");\n expect(shape.variants).toEqual({ circle: \"Circle\", square: \"Square\" });\n expect(\"union\" in shape).toBe(false); // no conjure nesting\n });\n\n it(\"should convert value field type with FieldValueType wrapper\", () => {\n const record: IRecordDef = {\n key: \"R\",\n name: \"R\",\n fields: [\n {\n key: \"f\",\n name: \"f\",\n fieldType: {\n type: \"value\",\n value: IFieldValueUnion.string({ defaultValue: \"abc\" }),\n },\n metadata: { addedInVersion: 1 },\n },\n ],\n };\n\n const ir: IRealTimeDocumentSchema = {\n name: \"Test\",\n description: \"Test\",\n version: 1,\n primaryModelKeys: [\"R\"],\n models: { R: { type: \"record\", record } as IModelDef },\n };\n\n const wire = convertIrToWireSchema(ir);\n expect(wire.models[\"R\"]).toBeDefined();\n expect(wire.models[\"R\"]!.type).toBe(\"record\");\n const recordModel = wire.models[\"R\"] as { type: \"record\" } & RecordDef;\n const field = recordModel.fields[0]!;\n\n // Wire format wraps in { valueType: { type: \"string\", defaultValue: \"abc\" } }\n expect(field.fieldType).toEqual({\n type: \"value\",\n valueType: {\n type: \"string\",\n defaultValue: \"abc\",\n },\n });\n });\n\n it(\"should convert array field type with FieldValueType wrapper on elements\", () => {\n const record: IRecordDef = {\n key: \"R\",\n name: \"R\",\n fields: [\n {\n key: \"tags\",\n name: \"Tags\",\n fieldType: {\n type: \"array\",\n array: {\n allowNullValue: false,\n value: IFieldValueUnion.string({}),\n },\n },\n metadata: { addedInVersion: 1 },\n },\n ],\n };\n\n const ir: IRealTimeDocumentSchema = {\n name: \"Test\",\n description: \"Test\",\n version: 1,\n primaryModelKeys: [\"R\"],\n models: { R: { type: \"record\", record } as IModelDef },\n };\n\n const wire = convertIrToWireSchema(ir);\n expect(wire.models[\"R\"]).toBeDefined();\n expect(wire.models[\"R\"]!.type).toBe(\"record\");\n const recordModel = wire.models[\"R\"] as { type: \"record\" } & RecordDef;\n const field = recordModel.fields[0]!;\n\n expect(field.fieldType).toEqual({\n type: \"array\",\n allowNullValue: false,\n value: {\n valueType: {\n type: \"string\",\n },\n },\n });\n });\n\n it(\"should flatten all field value union variants\", () => {\n const variants: Array<{\n fn: (payload: never) => IFieldValueUnion;\n type: string;\n payload: Record<string, unknown>;\n }> = [\n {\n fn: IFieldValueUnion.resourceRef,\n type: \"resourceRef\",\n payload: { resourceRids: [\"rid3\"] },\n },\n { fn: IFieldValueUnion.boolean, type: \"boolean\", payload: {} },\n { fn: IFieldValueUnion.datetime, type: \"datetime\", payload: {} },\n { fn: IFieldValueUnion.docRef, type: \"docRef\", payload: { documentTypeRids: [\"rid1\"] } },\n { fn: IFieldValueUnion.double, type: \"double\", payload: { minValue: 0, maxValue: 100 } },\n { fn: IFieldValueUnion.integer, type: \"integer\", payload: { defaultValue: 42 } },\n { fn: IFieldValueUnion.mediaRef, type: \"mediaRef\", payload: {} },\n { fn: IFieldValueUnion.modelRef, type: \"modelRef\", payload: { modelTypes: [\"Foo\"] } },\n {\n fn: IFieldValueUnion.object,\n type: \"object\",\n payload: { interfaceTypeRids: [], objectTypeRids: [\"rid2\"] },\n },\n { fn: IFieldValueUnion.string, type: \"string\", payload: { maxLength: 255 } },\n { fn: IFieldValueUnion.text, type: \"text\", payload: {} },\n { fn: IFieldValueUnion.unmanagedJson, type: \"unmanagedJson\", payload: {} },\n { fn: IFieldValueUnion.userRef, type: \"userRef\", payload: {} },\n ];\n\n for (const { fn, type, payload } of variants) {\n const record: IRecordDef = {\n key: \"R\",\n name: \"R\",\n fields: [\n {\n key: \"f\",\n name: \"f\",\n fieldType: {\n type: \"value\",\n value: fn(payload as never),\n },\n metadata: { addedInVersion: 1 },\n },\n ],\n };\n\n const ir: IRealTimeDocumentSchema = {\n name: \"Test\",\n description: \"Test\",\n version: 1,\n primaryModelKeys: [\"R\"],\n models: { R: { type: \"record\", record } as IModelDef },\n };\n\n const wire = convertIrToWireSchema(ir);\n expect(wire.models[\"R\"]).toBeDefined();\n expect(wire.models[\"R\"]!.type).toBe(\"record\");\n const recordModel = wire.models[\"R\"] as { type: \"record\" } & RecordDef;\n const fieldType = recordModel.fields[0]!.fieldType;\n expect(fieldType.type).toBe(\"value\");\n const wireValue = (fieldType as { type: \"value\" } & FieldValueType).valueType;\n expect(wireValue.type).toBe(type);\n // no conjure nesting key\n expect((wireValue as unknown as Record<string, unknown>)[type]).toBeUndefined();\n // Payload fields should be at top level\n for (const [key, val] of Object.entries(payload)) {\n expect((wireValue as unknown as Record<string, unknown>)[key]).toEqual(val);\n }\n }\n });\n\n it(\"should preserve declared name (not export key) for aliased models on the wire\", () => {\n const record: IRecordDef = {\n key: \"FooAlias\",\n name: \"Foo\",\n description: \"A foo\",\n fields: [],\n };\n\n const ir: IRealTimeDocumentSchema = {\n name: \"Test\",\n description: \"Test\",\n version: 1,\n primaryModelKeys: [\"FooAlias\"],\n models: {\n FooAlias: { type: \"record\", record } as IModelDef,\n },\n };\n\n const wire = convertIrToWireSchema(ir);\n const model = wire.models[\"FooAlias\"] as { type: \"record\"; name: string; key: string };\n // Wire format uses name for on-the-wire identity — must be declared name, not alias\n expect(model.name).toBe(\"Foo\");\n expect(model.key).toBe(\"FooAlias\");\n });\n\n it(\"should strip name, description, version from output\", () => {\n const ir: IRealTimeDocumentSchema = {\n name: \"My Schema\",\n description: \"My description\",\n version: 5,\n primaryModelKeys: [],\n models: {},\n };\n\n const wire = convertIrToWireSchema(ir);\n\n expect(\"name\" in wire).toBe(false);\n expect(\"description\" in wire).toBe(false);\n expect(\"version\" in wire).toBe(false);\n expect(wire.primaryModelKeys).toEqual([]);\n expect(wire.models).toEqual({});\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"convertIrToWireSchema.test.js","names":["describe","expect","it","IFieldValueUnion","convertIrToWireSchema","record","key","name","fields","fieldType","type","value","string","metadata","addedInVersion","addedInMinorVersion","isOptional","shape","description","version","primaryModelKeys","models","Shape","toEqual","wire","Person","toBeDefined","personModel","toBe","person","nameField","union","discriminant","variants","circle","square","shapeModel","JSON","parse","stringify","not","toHaveProperty","variantMetadata","defaultValue","R","recordModel","field","valueType","array","allowNullValue","fn","resourceRef","payload","resourceRids","boolean","datetime","docRef","documentTypeRids","double","minValue","maxValue","integer","mediaRef","modelRef","modelTypes","object","interfaceTypeRids","objectTypeRids","maxLength","text","unmanagedJson","userRef","wireValue","toBeUndefined","val","Object","entries","FooAlias","model"],"sources":["convertIrToWireSchema.test.ts"],"sourcesContent":["/*\n * Copyright 2025 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 { FieldValueType, RecordDef, UnionDef } from \"@palantir/pack.core/generatedPlatformSdk\";\nimport { describe, expect, it } from \"vitest\";\nimport type {\n IModelDef,\n IRealTimeDocumentSchema,\n IRecordDef,\n IUnionDef,\n} from \"../../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { IFieldValueUnion } from \"../../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { convertIrToWireSchema } from \"../convertIrToWireSchema.js\";\n\ndescribe(\"convertIrToWireSchema\", () => {\n it(\"should pass through the minor version a field was added in\", () => {\n const record: IRecordDef = {\n key: \"Shape\",\n name: \"Shape\",\n fields: [\n {\n key: \"label\",\n name: \"label\",\n fieldType: { type: \"value\", value: IFieldValueUnion.string({}) },\n metadata: { addedInVersion: 2, addedInMinorVersion: 1 },\n isOptional: true,\n },\n ],\n };\n const ir: IRealTimeDocumentSchema = {\n name: \"Test\",\n description: \"Test schema\",\n version: 2,\n primaryModelKeys: [\"Shape\"],\n models: { Shape: { type: \"record\", record } as IModelDef },\n };\n\n const shape = convertIrToWireSchema(ir).models[\"Shape\"] as { type: \"record\" } & RecordDef;\n\n expect(shape.fields[0]!.metadata).toEqual({ addedInVersion: 2, addedInMinorVersion: 1 });\n });\n\n it(\"should flatten record model and rename fields correctly\", () => {\n const record: IRecordDef = {\n key: \"Person\",\n name: \"Person\",\n description: \"A person\",\n fields: [\n {\n key: \"name\",\n name: \"Name\",\n fieldType: {\n type: \"value\",\n value: IFieldValueUnion.string({}),\n },\n metadata: { addedInVersion: 1 },\n },\n ],\n };\n\n const ir: IRealTimeDocumentSchema = {\n name: \"Test\",\n description: \"Test schema\",\n version: 1,\n primaryModelKeys: [\"Person\"],\n models: {\n Person: { type: \"record\", record } as IModelDef,\n },\n };\n\n const wire = convertIrToWireSchema(ir);\n\n // Top-level structure\n expect(wire.primaryModelKeys).toEqual([\"Person\"]);\n expect(wire.models).toBeDefined();\n\n // Model is flattened (no .record wrapper)\n const personModel = wire.models[\"Person\"];\n expect(personModel).toBeDefined();\n expect(personModel!.type).toBe(\"record\");\n const person = personModel as { type: \"record\" } & RecordDef;\n expect(person.key).toBe(\"Person\");\n expect(person.name).toBe(\"Person\");\n expect(\"record\" in person).toBe(false); // no conjure nesting\n\n // Field uses wire field names\n const nameField = person.fields[0]!;\n expect(nameField.key).toBe(\"name\");\n expect(nameField.fieldType).toBeDefined();\n expect(nameField.metadata).toEqual({ addedInVersion: 1 });\n });\n\n it(\"should flatten union model\", () => {\n const union: IUnionDef = {\n key: \"Shape\",\n discriminant: \"shapeType\",\n name: \"Shape\",\n variants: { circle: \"Circle\", square: \"Square\" },\n metadata: { addedInVersion: 1 },\n };\n\n const ir: IRealTimeDocumentSchema = {\n name: \"Test\",\n description: \"Test\",\n version: 1,\n primaryModelKeys: [\"Shape\"],\n models: {\n Shape: { type: \"union\", union } as IModelDef,\n },\n };\n\n const wire = convertIrToWireSchema(ir);\n const shapeModel = wire.models[\"Shape\"];\n expect(shapeModel).toBeDefined();\n expect(shapeModel!.type).toBe(\"union\");\n const shape = shapeModel as { type: \"union\" } & UnionDef;\n\n expect(shape.key).toBe(\"Shape\");\n expect(shape.discriminant).toBe(\"shapeType\");\n expect(shape.variants).toEqual({ circle: \"Circle\", square: \"Square\" });\n expect(\"union\" in shape).toBe(false); // no conjure nesting\n expect(JSON.parse(JSON.stringify(shape))).not.toHaveProperty(\"variantMetadata\");\n });\n\n it(\"should pass through the version each later-added variant was added in\", () => {\n const union: IUnionDef = {\n key: \"Shape\",\n discriminant: \"type\",\n name: \"Shape\",\n variants: { circle: \"Circle\", square: \"Square\" },\n metadata: { addedInVersion: 1 },\n variantMetadata: { square: { addedInVersion: 2 } },\n };\n const ir: IRealTimeDocumentSchema = {\n name: \"Test\",\n description: \"Test\",\n version: 2,\n primaryModelKeys: [\"Shape\"],\n models: { Shape: { type: \"union\", union } as IModelDef },\n };\n\n const shape = convertIrToWireSchema(ir).models[\"Shape\"] as { type: \"union\" } & UnionDef;\n\n expect(shape.variantMetadata).toEqual({ square: { addedInVersion: 2 } });\n });\n\n it(\"should convert value field type with FieldValueType wrapper\", () => {\n const record: IRecordDef = {\n key: \"R\",\n name: \"R\",\n fields: [\n {\n key: \"f\",\n name: \"f\",\n fieldType: {\n type: \"value\",\n value: IFieldValueUnion.string({ defaultValue: \"abc\" }),\n },\n metadata: { addedInVersion: 1 },\n },\n ],\n };\n\n const ir: IRealTimeDocumentSchema = {\n name: \"Test\",\n description: \"Test\",\n version: 1,\n primaryModelKeys: [\"R\"],\n models: { R: { type: \"record\", record } as IModelDef },\n };\n\n const wire = convertIrToWireSchema(ir);\n expect(wire.models[\"R\"]).toBeDefined();\n expect(wire.models[\"R\"]!.type).toBe(\"record\");\n const recordModel = wire.models[\"R\"] as { type: \"record\" } & RecordDef;\n const field = recordModel.fields[0]!;\n\n // Wire format wraps in { valueType: { type: \"string\", defaultValue: \"abc\" } }\n expect(field.fieldType).toEqual({\n type: \"value\",\n valueType: {\n type: \"string\",\n defaultValue: \"abc\",\n },\n });\n });\n\n it(\"should convert array field type with FieldValueType wrapper on elements\", () => {\n const record: IRecordDef = {\n key: \"R\",\n name: \"R\",\n fields: [\n {\n key: \"tags\",\n name: \"Tags\",\n fieldType: {\n type: \"array\",\n array: {\n allowNullValue: false,\n value: IFieldValueUnion.string({}),\n },\n },\n metadata: { addedInVersion: 1 },\n },\n ],\n };\n\n const ir: IRealTimeDocumentSchema = {\n name: \"Test\",\n description: \"Test\",\n version: 1,\n primaryModelKeys: [\"R\"],\n models: { R: { type: \"record\", record } as IModelDef },\n };\n\n const wire = convertIrToWireSchema(ir);\n expect(wire.models[\"R\"]).toBeDefined();\n expect(wire.models[\"R\"]!.type).toBe(\"record\");\n const recordModel = wire.models[\"R\"] as { type: \"record\" } & RecordDef;\n const field = recordModel.fields[0]!;\n\n expect(field.fieldType).toEqual({\n type: \"array\",\n allowNullValue: false,\n value: {\n valueType: {\n type: \"string\",\n },\n },\n });\n });\n\n it(\"should flatten all field value union variants\", () => {\n const variants: Array<{\n fn: (payload: never) => IFieldValueUnion;\n type: string;\n payload: Record<string, unknown>;\n }> = [\n {\n fn: IFieldValueUnion.resourceRef,\n type: \"resourceRef\",\n payload: { resourceRids: [\"rid3\"] },\n },\n { fn: IFieldValueUnion.boolean, type: \"boolean\", payload: {} },\n { fn: IFieldValueUnion.datetime, type: \"datetime\", payload: {} },\n { fn: IFieldValueUnion.docRef, type: \"docRef\", payload: { documentTypeRids: [\"rid1\"] } },\n { fn: IFieldValueUnion.double, type: \"double\", payload: { minValue: 0, maxValue: 100 } },\n { fn: IFieldValueUnion.integer, type: \"integer\", payload: { defaultValue: 42 } },\n { fn: IFieldValueUnion.mediaRef, type: \"mediaRef\", payload: {} },\n { fn: IFieldValueUnion.modelRef, type: \"modelRef\", payload: { modelTypes: [\"Foo\"] } },\n {\n fn: IFieldValueUnion.object,\n type: \"object\",\n payload: { interfaceTypeRids: [], objectTypeRids: [\"rid2\"] },\n },\n { fn: IFieldValueUnion.string, type: \"string\", payload: { maxLength: 255 } },\n { fn: IFieldValueUnion.text, type: \"text\", payload: {} },\n { fn: IFieldValueUnion.unmanagedJson, type: \"unmanagedJson\", payload: {} },\n { fn: IFieldValueUnion.userRef, type: \"userRef\", payload: {} },\n ];\n\n for (const { fn, type, payload } of variants) {\n const record: IRecordDef = {\n key: \"R\",\n name: \"R\",\n fields: [\n {\n key: \"f\",\n name: \"f\",\n fieldType: {\n type: \"value\",\n value: fn(payload as never),\n },\n metadata: { addedInVersion: 1 },\n },\n ],\n };\n\n const ir: IRealTimeDocumentSchema = {\n name: \"Test\",\n description: \"Test\",\n version: 1,\n primaryModelKeys: [\"R\"],\n models: { R: { type: \"record\", record } as IModelDef },\n };\n\n const wire = convertIrToWireSchema(ir);\n expect(wire.models[\"R\"]).toBeDefined();\n expect(wire.models[\"R\"]!.type).toBe(\"record\");\n const recordModel = wire.models[\"R\"] as { type: \"record\" } & RecordDef;\n const fieldType = recordModel.fields[0]!.fieldType;\n expect(fieldType.type).toBe(\"value\");\n const wireValue = (fieldType as { type: \"value\" } & FieldValueType).valueType;\n expect(wireValue.type).toBe(type);\n // no conjure nesting key\n expect((wireValue as unknown as Record<string, unknown>)[type]).toBeUndefined();\n // Payload fields should be at top level\n for (const [key, val] of Object.entries(payload)) {\n expect((wireValue as unknown as Record<string, unknown>)[key]).toEqual(val);\n }\n }\n });\n\n it(\"should preserve declared name (not export key) for aliased models on the wire\", () => {\n const record: IRecordDef = {\n key: \"FooAlias\",\n name: \"Foo\",\n description: \"A foo\",\n fields: [],\n };\n\n const ir: IRealTimeDocumentSchema = {\n name: \"Test\",\n description: \"Test\",\n version: 1,\n primaryModelKeys: [\"FooAlias\"],\n models: {\n FooAlias: { type: \"record\", record } as IModelDef,\n },\n };\n\n const wire = convertIrToWireSchema(ir);\n const model = wire.models[\"FooAlias\"] as { type: \"record\"; name: string; key: string };\n // Wire format uses name for on-the-wire identity — must be declared name, not alias\n expect(model.name).toBe(\"Foo\");\n expect(model.key).toBe(\"FooAlias\");\n });\n\n it(\"should strip name, description, version from output\", () => {\n const ir: IRealTimeDocumentSchema = {\n name: \"My Schema\",\n description: \"My description\",\n version: 5,\n primaryModelKeys: [],\n models: {},\n };\n\n const wire = convertIrToWireSchema(ir);\n\n expect(\"name\" in wire).toBe(false);\n expect(\"description\" in wire).toBe(false);\n expect(\"version\" in wire).toBe(false);\n expect(wire.primaryModelKeys).toEqual([]);\n expect(wire.models).toEqual({});\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -20,7 +20,7 @@
20
20
  * The IR uses conjure-style tagged unions where the payload is nested under a key
21
21
  * matching the discriminant (e.g. `{ type: "record", record: { ... } }`).
22
22
  *
23
- * The Foundry API (DocumentTypeSchema from @osdk/foundry.pack) uses flat discriminated
23
+ * The Foundry API (DocumentTypeSchema from the generated platform SDK) uses flat discriminated
24
24
  * unions where payload fields are spread alongside the type discriminant
25
25
  * (e.g. `{ type: "record", key: "...", name: "...", ... }`).
26
26
  *
@@ -40,9 +40,6 @@ export function convertIrToWireSchema(ir) {
40
40
  function convertModelDef(model) {
41
41
  switch (model.type) {
42
42
  case "record":
43
- // TODO: The @osdk/foundry.pack wire types still declare `metadata` as required on
44
- // RecordDef, but the Pack API schema (api-gateway / backpack) has removed it.
45
- // Cast through unknown until the published types catch up.
46
43
  return {
47
44
  type: "record",
48
45
  key: model.record.key,
@@ -60,7 +57,8 @@ function convertModelDef(model) {
60
57
  variants: {
61
58
  ...model.union.variants
62
59
  },
63
- metadata: convertSchemaMeta(model.union.metadata)
60
+ metadata: convertSchemaMeta(model.union.metadata),
61
+ variantMetadata: convertVariantMetadata(model.union.variantMetadata)
64
62
  };
65
63
  default:
66
64
  {
@@ -114,8 +112,6 @@ function convertFieldValueType(value) {
114
112
  function convertFieldValueUnion(value) {
115
113
  switch (value.type) {
116
114
  case "resourceRef":
117
- // TODO: @osdk/foundry.pack does not yet declare the resourceRef variant. Drop the
118
- // cast once the api-gateway publish and osdk regeneration land.
119
115
  return {
120
116
  type: "resourceRef",
121
117
  resourceRids: [...value.resourceRef.resourceRids]
@@ -192,10 +188,17 @@ function convertFieldValueUnion(value) {
192
188
  function convertSchemaMeta(meta) {
193
189
  return {
194
190
  addedInVersion: meta.addedInVersion,
191
+ addedInMinorVersion: orUndefined(meta.addedInMinorVersion),
195
192
  deprecatedFromVersion: orUndefined(meta.deprecatedFromVersion),
196
193
  deprecatedMessage: orUndefined(meta.deprecatedMessage)
197
194
  };
198
195
  }
196
+ function convertVariantMetadata(variantMetadata) {
197
+ if (variantMetadata == null) {
198
+ return undefined;
199
+ }
200
+ return Object.fromEntries(Object.entries(variantMetadata).map(([variantKey, meta]) => [variantKey, convertSchemaMeta(meta)]));
201
+ }
199
202
  function orUndefined(value) {
200
203
  return value ?? undefined;
201
204
  }
@@ -1 +1 @@
1
- {"version":3,"file":"convertIrToWireSchema.js","names":["convertIrToWireSchema","ir","wireModels","key","model","Object","entries","models","convertModelDef","primaryModelKeys","type","record","name","description","orUndefined","fields","map","convertFieldDef","union","discriminant","variants","metadata","convertSchemaMeta","Error","field","isOptional","fieldType","convertFieldTypeUnion","allowNullValue","array","value","convertFieldValueType","set","valueType","convertFieldValueUnion","resourceRids","resourceRef","defaultValue","boolean","datetime","documentTypeRids","docRef","rejectNaN","double","minValue","maxValue","integer","mediaRef","modelTypes","modelRef","interfaceTypeRids","object","objectTypeRids","string","minLength","maxLength","text","meta","addedInVersion","deprecatedFromVersion","deprecatedMessage","undefined"],"sources":["convertIrToWireSchema.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n DocumentTypeSchema,\n FieldDef,\n FieldTypeUnion,\n FieldValueType,\n FieldValueUnion,\n ModelDef,\n SchemaMetadata,\n} from \"@osdk/foundry.pack\";\nimport type {\n IFieldDef,\n IFieldTypeUnion,\n IFieldValueUnion,\n IModelDef,\n IRealTimeDocumentSchema,\n ISchemaMeta,\n} from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\n\n/**\n * Converts the internal IR schema to the wire format expected by the Foundry API.\n *\n * The IR uses conjure-style tagged unions where the payload is nested under a key\n * matching the discriminant (e.g. `{ type: \"record\", record: { ... } }`).\n *\n * The Foundry API (DocumentTypeSchema from @osdk/foundry.pack) uses flat discriminated\n * unions where payload fields are spread alongside the type discriminant\n * (e.g. `{ type: \"record\", key: \"...\", name: \"...\", ... }`).\n *\n * This function performs that structural conversion. Field names already match between\n * the IR and wire format.\n */\nexport function convertIrToWireSchema(ir: IRealTimeDocumentSchema): DocumentTypeSchema {\n const wireModels: DocumentTypeSchema[\"models\"] = {};\n\n for (const [key, model] of Object.entries(ir.models)) {\n wireModels[key] = convertModelDef(model);\n }\n\n return {\n primaryModelKeys: [...ir.primaryModelKeys],\n models: wireModels,\n };\n}\n\nfunction convertModelDef(model: IModelDef): ModelDef {\n switch (model.type) {\n case \"record\":\n // TODO: The @osdk/foundry.pack wire types still declare `metadata` as required on\n // RecordDef, but the Pack API schema (api-gateway / backpack) has removed it.\n // Cast through unknown until the published types catch up.\n return {\n type: \"record\",\n key: model.record.key,\n name: model.record.name,\n description: orUndefined(model.record.description),\n fields: [...model.record.fields.map(convertFieldDef)],\n } as unknown as ModelDef;\n case \"union\":\n return {\n type: \"union\",\n key: model.union.key,\n discriminant: model.union.discriminant,\n name: model.union.name,\n description: orUndefined(model.union.description),\n variants: { ...model.union.variants },\n metadata: convertSchemaMeta(model.union.metadata),\n };\n default: {\n const _exhaustive: never = model;\n throw new Error(`Unknown model type: ${(_exhaustive as IModelDef).type}`);\n }\n }\n}\n\nfunction convertFieldDef(field: IFieldDef): FieldDef {\n return {\n key: field.key,\n name: field.name,\n description: orUndefined(field.description),\n isOptional: orUndefined(field.isOptional),\n fieldType: convertFieldTypeUnion(field.fieldType),\n metadata: convertSchemaMeta(field.metadata),\n };\n}\n\nfunction convertFieldTypeUnion(fieldType: IFieldTypeUnion): FieldTypeUnion {\n switch (fieldType.type) {\n case \"array\":\n return {\n type: \"array\",\n allowNullValue: fieldType.array.allowNullValue,\n value: convertFieldValueType(fieldType.array.value),\n };\n case \"map\":\n return {\n type: \"map\",\n allowNullValue: fieldType.map.allowNullValue,\n key: convertFieldValueType(fieldType.map.key),\n value: convertFieldValueType(fieldType.map.value),\n };\n case \"set\":\n return {\n type: \"set\",\n allowNullValue: fieldType.set.allowNullValue,\n value: convertFieldValueType(fieldType.set.value),\n };\n case \"value\":\n return {\n type: \"value\",\n valueType: convertFieldValueUnion(fieldType.value),\n };\n }\n}\n\nfunction convertFieldValueType(value: IFieldValueUnion): FieldValueType {\n return {\n valueType: convertFieldValueUnion(value),\n };\n}\n\nfunction convertFieldValueUnion(value: IFieldValueUnion): FieldValueUnion {\n switch (value.type) {\n case \"resourceRef\":\n // TODO: @osdk/foundry.pack does not yet declare the resourceRef variant. Drop the\n // cast once the api-gateway publish and osdk regeneration land.\n return {\n type: \"resourceRef\",\n resourceRids: [...value.resourceRef.resourceRids],\n } as unknown as FieldValueUnion;\n case \"boolean\":\n return { type: \"boolean\", defaultValue: orUndefined(value.boolean.defaultValue) };\n case \"datetime\":\n return { type: \"datetime\", value: value.datetime.value };\n case \"docRef\":\n return { type: \"docRef\", documentTypeRids: [...value.docRef.documentTypeRids] };\n case \"double\":\n return {\n type: \"double\",\n defaultValue: rejectNaN(orUndefined(value.double.defaultValue)),\n minValue: rejectNaN(orUndefined(value.double.minValue)),\n maxValue: rejectNaN(orUndefined(value.double.maxValue)),\n };\n case \"integer\":\n return {\n type: \"integer\",\n defaultValue: orUndefined(value.integer.defaultValue),\n minValue: orUndefined(value.integer.minValue),\n maxValue: orUndefined(value.integer.maxValue),\n };\n case \"mediaRef\":\n return { type: \"mediaRef\", value: value.mediaRef.value };\n case \"modelRef\":\n return { type: \"modelRef\", modelTypes: [...value.modelRef.modelTypes] };\n case \"object\":\n return {\n type: \"object\",\n interfaceTypeRids: [...value.object.interfaceTypeRids],\n objectTypeRids: [...value.object.objectTypeRids],\n };\n case \"string\":\n return {\n type: \"string\",\n defaultValue: orUndefined(value.string.defaultValue),\n minLength: orUndefined(value.string.minLength),\n maxLength: orUndefined(value.string.maxLength),\n };\n case \"text\":\n return {\n type: \"text\",\n defaultValue: orUndefined(value.text.defaultValue),\n minLength: orUndefined(value.text.minLength),\n maxLength: orUndefined(value.text.maxLength),\n };\n case \"unmanagedJson\":\n return { type: \"unmanagedJson\" };\n case \"userRef\":\n return { type: \"userRef\" };\n }\n}\n\nfunction convertSchemaMeta(meta: ISchemaMeta): SchemaMetadata {\n return {\n addedInVersion: meta.addedInVersion,\n deprecatedFromVersion: orUndefined(meta.deprecatedFromVersion),\n deprecatedMessage: orUndefined(meta.deprecatedMessage),\n };\n}\n\nfunction orUndefined<T>(value: T | null | undefined): T | undefined {\n return value ?? undefined;\n}\n\nfunction rejectNaN(value: number | \"NaN\" | undefined): number | undefined {\n if (value === \"NaN\") {\n throw new Error(\"NaN is not a valid double value for wire serialization\");\n }\n return value;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"convertIrToWireSchema.js","names":["convertIrToWireSchema","ir","wireModels","key","model","Object","entries","models","convertModelDef","primaryModelKeys","type","record","name","description","orUndefined","fields","map","convertFieldDef","union","discriminant","variants","metadata","convertSchemaMeta","variantMetadata","convertVariantMetadata","Error","field","isOptional","fieldType","convertFieldTypeUnion","allowNullValue","array","value","convertFieldValueType","set","valueType","convertFieldValueUnion","resourceRids","resourceRef","defaultValue","boolean","datetime","documentTypeRids","docRef","rejectNaN","double","minValue","maxValue","integer","mediaRef","modelTypes","modelRef","interfaceTypeRids","object","objectTypeRids","string","minLength","maxLength","text","meta","addedInVersion","addedInMinorVersion","deprecatedFromVersion","deprecatedMessage","undefined","fromEntries","variantKey"],"sources":["convertIrToWireSchema.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n DocumentTypeSchema,\n FieldDef,\n FieldTypeUnion,\n FieldValueType,\n FieldValueUnion,\n ModelDef,\n SchemaMetadata,\n} from \"@palantir/pack.core/generatedPlatformSdk\";\nimport type {\n IFieldDef,\n IFieldTypeUnion,\n IFieldValueUnion,\n IModelDef,\n IRealTimeDocumentSchema,\n ISchemaMeta,\n IUnionDef,\n} from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\n\n/**\n * Converts the internal IR schema to the wire format expected by the Foundry API.\n *\n * The IR uses conjure-style tagged unions where the payload is nested under a key\n * matching the discriminant (e.g. `{ type: \"record\", record: { ... } }`).\n *\n * The Foundry API (DocumentTypeSchema from the generated platform SDK) uses flat discriminated\n * unions where payload fields are spread alongside the type discriminant\n * (e.g. `{ type: \"record\", key: \"...\", name: \"...\", ... }`).\n *\n * This function performs that structural conversion. Field names already match between\n * the IR and wire format.\n */\nexport function convertIrToWireSchema(ir: IRealTimeDocumentSchema): DocumentTypeSchema {\n const wireModels: DocumentTypeSchema[\"models\"] = {};\n\n for (const [key, model] of Object.entries(ir.models)) {\n wireModels[key] = convertModelDef(model);\n }\n\n return {\n primaryModelKeys: [...ir.primaryModelKeys],\n models: wireModels,\n };\n}\n\nfunction convertModelDef(model: IModelDef): ModelDef {\n switch (model.type) {\n case \"record\":\n return {\n type: \"record\",\n key: model.record.key,\n name: model.record.name,\n description: orUndefined(model.record.description),\n fields: [...model.record.fields.map(convertFieldDef)],\n };\n case \"union\":\n return {\n type: \"union\",\n key: model.union.key,\n discriminant: model.union.discriminant,\n name: model.union.name,\n description: orUndefined(model.union.description),\n variants: { ...model.union.variants },\n metadata: convertSchemaMeta(model.union.metadata),\n variantMetadata: convertVariantMetadata(model.union.variantMetadata),\n };\n default: {\n const _exhaustive: never = model;\n throw new Error(`Unknown model type: ${(_exhaustive as IModelDef).type}`);\n }\n }\n}\n\nfunction convertFieldDef(field: IFieldDef): FieldDef {\n return {\n key: field.key,\n name: field.name,\n description: orUndefined(field.description),\n isOptional: orUndefined(field.isOptional),\n fieldType: convertFieldTypeUnion(field.fieldType),\n metadata: convertSchemaMeta(field.metadata),\n };\n}\n\nfunction convertFieldTypeUnion(fieldType: IFieldTypeUnion): FieldTypeUnion {\n switch (fieldType.type) {\n case \"array\":\n return {\n type: \"array\",\n allowNullValue: fieldType.array.allowNullValue,\n value: convertFieldValueType(fieldType.array.value),\n };\n case \"map\":\n return {\n type: \"map\",\n allowNullValue: fieldType.map.allowNullValue,\n key: convertFieldValueType(fieldType.map.key),\n value: convertFieldValueType(fieldType.map.value),\n };\n case \"set\":\n return {\n type: \"set\",\n allowNullValue: fieldType.set.allowNullValue,\n value: convertFieldValueType(fieldType.set.value),\n };\n case \"value\":\n return {\n type: \"value\",\n valueType: convertFieldValueUnion(fieldType.value),\n };\n }\n}\n\nfunction convertFieldValueType(value: IFieldValueUnion): FieldValueType {\n return {\n valueType: convertFieldValueUnion(value),\n };\n}\n\nfunction convertFieldValueUnion(value: IFieldValueUnion): FieldValueUnion {\n switch (value.type) {\n case \"resourceRef\":\n return {\n type: \"resourceRef\",\n resourceRids: [...value.resourceRef.resourceRids],\n };\n case \"boolean\":\n return { type: \"boolean\", defaultValue: orUndefined(value.boolean.defaultValue) };\n case \"datetime\":\n return { type: \"datetime\", value: value.datetime.value };\n case \"docRef\":\n return { type: \"docRef\", documentTypeRids: [...value.docRef.documentTypeRids] };\n case \"double\":\n return {\n type: \"double\",\n defaultValue: rejectNaN(orUndefined(value.double.defaultValue)),\n minValue: rejectNaN(orUndefined(value.double.minValue)),\n maxValue: rejectNaN(orUndefined(value.double.maxValue)),\n };\n case \"integer\":\n return {\n type: \"integer\",\n defaultValue: orUndefined(value.integer.defaultValue),\n minValue: orUndefined(value.integer.minValue),\n maxValue: orUndefined(value.integer.maxValue),\n };\n case \"mediaRef\":\n return { type: \"mediaRef\", value: value.mediaRef.value };\n case \"modelRef\":\n return { type: \"modelRef\", modelTypes: [...value.modelRef.modelTypes] };\n case \"object\":\n return {\n type: \"object\",\n interfaceTypeRids: [...value.object.interfaceTypeRids],\n objectTypeRids: [...value.object.objectTypeRids],\n };\n case \"string\":\n return {\n type: \"string\",\n defaultValue: orUndefined(value.string.defaultValue),\n minLength: orUndefined(value.string.minLength),\n maxLength: orUndefined(value.string.maxLength),\n };\n case \"text\":\n return {\n type: \"text\",\n defaultValue: orUndefined(value.text.defaultValue),\n minLength: orUndefined(value.text.minLength),\n maxLength: orUndefined(value.text.maxLength),\n };\n case \"unmanagedJson\":\n return { type: \"unmanagedJson\" };\n case \"userRef\":\n return { type: \"userRef\" };\n }\n}\n\nfunction convertSchemaMeta(meta: ISchemaMeta): SchemaMetadata {\n return {\n addedInVersion: meta.addedInVersion,\n addedInMinorVersion: orUndefined(meta.addedInMinorVersion),\n deprecatedFromVersion: orUndefined(meta.deprecatedFromVersion),\n deprecatedMessage: orUndefined(meta.deprecatedMessage),\n };\n}\n\nfunction convertVariantMetadata(\n variantMetadata: IUnionDef[\"variantMetadata\"],\n): Record<string, SchemaMetadata> | undefined {\n if (variantMetadata == null) {\n return undefined;\n }\n return Object.fromEntries(\n Object.entries(variantMetadata).map((\n [variantKey, meta],\n ) => [variantKey, convertSchemaMeta(meta)]),\n );\n}\n\nfunction orUndefined<T>(value: T | null | undefined): T | undefined {\n return value ?? undefined;\n}\n\nfunction rejectNaN(value: number | \"NaN\" | undefined): number | undefined {\n if (value === \"NaN\") {\n throw new Error(\"NaN is not a valid double value for wire serialization\");\n }\n return value;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -2,7 +2,7 @@
2
2
  // documentType.ts
3
3
  // ============================================================
4
4
 
5
- /* Generated by @palantir/pack.document-schema.type-gen@0.32.0 */
5
+ /* Generated by @palantir/pack.document-schema.type-gen@0.34.0 */
6
6
 
7
7
  export const DOCUMENT_TYPE_NAME = 'Canvas Document Type';
8
8
  export const DOCUMENT_TYPE_DESCRIPTION = 'Document type description for demo canvas';
@@ -1 +1 @@
1
- {"version":3,"file":"with-name-and-description.js","names":["DOCUMENT_TYPE_NAME","DOCUMENT_TYPE_DESCRIPTION"],"sources":["with-name-and-description.ts"],"sourcesContent":["// ============================================================\n// documentType.ts\n// ============================================================\n\n/* Generated by @palantir/pack.document-schema.type-gen@0.32.0 */\n\nexport const DOCUMENT_TYPE_NAME = 'Canvas Document Type';\nexport const DOCUMENT_TYPE_DESCRIPTION =\n 'Document type description for demo canvas';\n"],"mappings":"AAAA;AACA;AACA;;AAEA;;AAEA,OAAO,MAAMA,kBAAkB,GAAG,sBAAsB;AACxD,OAAO,MAAMC,yBAAyB,GACpC,2CAA2C","ignoreList":[]}
1
+ {"version":3,"file":"with-name-and-description.js","names":["DOCUMENT_TYPE_NAME","DOCUMENT_TYPE_DESCRIPTION"],"sources":["with-name-and-description.ts"],"sourcesContent":["// ============================================================\n// documentType.ts\n// ============================================================\n\n/* Generated by @palantir/pack.document-schema.type-gen@0.34.0 */\n\nexport const DOCUMENT_TYPE_NAME = 'Canvas Document Type';\nexport const DOCUMENT_TYPE_DESCRIPTION =\n 'Document type description for demo canvas';\n"],"mappings":"AAAA;AACA;AACA;;AAEA;;AAEA,OAAO,MAAMA,kBAAkB,GAAG,sBAAsB;AACxD,OAAO,MAAMC,yBAAyB,GACpC,2CAA2C","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"single-version.js","names":[],"sources":["single-version.ts"],"sourcesContent":["// ============================================================\n// versions.ts\n// ============================================================\n\n/* Generated by @palantir/pack.document-schema.type-gen@0.32.0 */\n\nexport type SupportedVersions = 1;\nexport type LatestVersion = 1;\nexport type MinSupportedVersion = 1;\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"single-version.js","names":[],"sources":["single-version.ts"],"sourcesContent":["// ============================================================\n// versions.ts\n// ============================================================\n\n/* Generated by @palantir/pack.document-schema.type-gen@0.34.0 */\n\nexport type SupportedVersions = 1;\nexport type LatestVersion = 1;\nexport type MinSupportedVersion = 1;\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"three-version-chain.js","names":[],"sources":["three-version-chain.ts"],"sourcesContent":["// ============================================================\n// versions.ts\n// ============================================================\n\n/* Generated by @palantir/pack.document-schema.type-gen@0.32.0 */\n\nexport type SupportedVersions = 1 | 2 | 3;\nexport type LatestVersion = 3;\nexport type MinSupportedVersion = 1;\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"three-version-chain.js","names":[],"sources":["three-version-chain.ts"],"sourcesContent":["// ============================================================\n// versions.ts\n// ============================================================\n\n/* Generated by @palantir/pack.document-schema.type-gen@0.34.0 */\n\nexport type SupportedVersions = 1 | 2 | 3;\nexport type LatestVersion = 3;\nexport type MinSupportedVersion = 1;\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"two-version.js","names":[],"sources":["two-version.ts"],"sourcesContent":["// ============================================================\n// versions.ts\n// ============================================================\n\n/* Generated by @palantir/pack.document-schema.type-gen@0.32.0 */\n\nexport type SupportedVersions = 1 | 2;\nexport type LatestVersion = 2;\nexport type MinSupportedVersion = 1;\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"two-version.js","names":[],"sources":["two-version.ts"],"sourcesContent":["// ============================================================\n// versions.ts\n// ============================================================\n\n/* Generated by @palantir/pack.document-schema.type-gen@0.34.0 */\n\nexport type SupportedVersions = 1 | 2;\nexport type LatestVersion = 2;\nexport type MinSupportedVersion = 1;\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,178 @@
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 { defineRecord, defineSchema, defineSchemaUpdate, defineUnion, nextSchema } from "@palantir/pack.schema";
18
+ import * as P from "@palantir/pack.schema";
19
+ import { mkdtemp, readdir, readFile, rm } from "fs/promises";
20
+ import os from "os";
21
+ import path from "path";
22
+ import { describe, expect, it } from "vitest";
23
+ import { assertSdkNamesUnique } from "../assertSdkNamesUnique.js";
24
+ import { resolveSchemaChain } from "../resolveSchemaChain.js";
25
+ import { writeAllSdkFiles } from "../writeAllSdkFiles.js";
26
+ import * as fixtures from "./fixtures.js";
27
+ const record = name => defineRecord(name, {
28
+ docs: name,
29
+ fields: {
30
+ x: P.Double
31
+ }
32
+ });
33
+ const union = (name, variants) => defineUnion(name, {
34
+ discriminant: "kind",
35
+ docs: name,
36
+ variants
37
+ });
38
+ function check(models) {
39
+ assertSdkNamesUnique(resolveSchemaChain(defineSchema(models)).chain, undefined);
40
+ }
41
+
42
+ /**
43
+ * Library names that can't clash with a model (see `RESERVED_SDK_NAMES`), so the check doesn't
44
+ * list them. A new import fails the test below until it's added here or there.
45
+ */
46
+ const NON_CLASHING_IMPORTS = new Set(["DocumentId", "DocumentRef", "EditDescription", "MediaId", "ObjectId", "PresencePublishOptions", "RecordId", "RecordRef", "ResourceRid", "UnionUpgradeRegistry", "UnknownUnionVariant", "UpgradeRegistry", "UserId", "ZodType", "z"]);
47
+
48
+ /** Top-level names a generated file declares, re-exports, or imports. */
49
+ function namesInFile(content) {
50
+ const names = [];
51
+ for (const [, name] of content.matchAll(/^export (?:interface|type|const|function) (\w+)/gm)) {
52
+ names.push(name);
53
+ }
54
+ for (const [, list] of content.matchAll(/^(?:import|export)(?: type)? \{([^}]*)\} from /gm)) {
55
+ for (const entry of list.split(",")) {
56
+ // `type Foo_v1 as Foo` binds `Foo`.
57
+ const name = entry.trim().replace(/^type /, "").split(" as ").pop().trim();
58
+ if (name !== "") names.push(name);
59
+ }
60
+ }
61
+ return names;
62
+ }
63
+ describe("assertSdkNamesUnique", () => {
64
+ const Bar = record("Bar");
65
+ const Baz = record("Baz");
66
+ it.each(Object.entries(fixtures))("lists every name the SDK generated from %s uses", async (_fixtureName, schema) => {
67
+ const resolved = resolveSchemaChain(schema);
68
+ // Support every version, so the SDK has files for all of them.
69
+ const minSupportedVersion = resolved.chain[0].version;
70
+ const listed = assertSdkNamesUnique(resolved.chain, minSupportedVersion);
71
+ const outputDir = await mkdtemp(path.join(os.tmpdir(), "sdk-names-"));
72
+ try {
73
+ await writeAllSdkFiles(resolved, outputDir, minSupportedVersion);
74
+ const files = (await readdir(outputDir, {
75
+ recursive: true
76
+ })).filter(file => file.endsWith(".ts"));
77
+ const generated = new Set();
78
+ for (const file of files) {
79
+ const content = await readFile(path.join(outputDir, file), "utf8");
80
+ for (const name of namesInFile(content)) generated.add(name);
81
+ }
82
+
83
+ // A name missing here means a generator creates a name the check doesn't know about.
84
+ expect([...generated].filter(name => !listed.has(name) && !NON_CLASHING_IMPORTS.has(name))).toEqual([]);
85
+ } finally {
86
+ await rm(outputDir, {
87
+ recursive: true
88
+ });
89
+ }
90
+ });
91
+ it("says which two models produce the same name", () => {
92
+ expect(() => check({
93
+ Bar,
94
+ KnownFoo: record("KnownFoo"),
95
+ Foo: union("Foo", {
96
+ bar: Bar
97
+ })
98
+ })).toThrow(`The generated SDK would use the name "KnownFoo" for both record "KnownFoo" and` + ` union "Foo" (Known type). Rename a model so the names differ.`);
99
+ });
100
+ it("rejects two variant keys that format to the same name", () => {
101
+ expect(() => check({
102
+ Bar,
103
+ Baz,
104
+ Foo: union("Foo", {
105
+ "my-box": Bar,
106
+ myBox: Baz
107
+ })
108
+ })).toThrow(`The generated SDK would use the name "FooMyBox" for both`);
109
+ });
110
+ it("rejects a model named like a name the SDK reserves", () => {
111
+ expect(() => check({
112
+ Metadata: record("Metadata")
113
+ })).toThrow(`The generated SDK would use the name "Metadata" for both the SDK itself and record "Metadata"`);
114
+ });
115
+ it("rejects a model key that could clash in a later version", () => {
116
+ // At v2 this would clash with record Foo's v2 type, Foo_v2.
117
+ expect(() => check({
118
+ Foo: record("Foo"),
119
+ Foo_v2: record("Foo_v2")
120
+ })).toThrow(`Model "Foo_v2" can't contain "_v" followed by a number.`);
121
+ });
122
+ it("ignores deprecated fields, which the SDK leaves out", () => {
123
+ const Box = defineRecord("Box", {
124
+ docs: "Box",
125
+ fields: {
126
+ kind: P.Double,
127
+ x: P.Double
128
+ }
129
+ });
130
+ const v1 = defineSchema({
131
+ Box
132
+ });
133
+ // v2 deprecates `kind`, so it no longer collides with the new union's discriminant.
134
+ const addShape = defineSchemaUpdate("addShape", schema => {
135
+ const box = schema.Box.deprecateField("kind", "Use Shape instead.").build();
136
+ return {
137
+ Box: box,
138
+ Shape: union("Shape", {
139
+ box
140
+ })
141
+ };
142
+ });
143
+ const v2 = nextSchema(v1).addSchemaUpdate(addShape).build();
144
+ expect(() => assertSdkNamesUnique(resolveSchemaChain(v2).chain, 1)).not.toThrow();
145
+ });
146
+ it("rejects a variant record with a field named like the discriminant", () => {
147
+ const Box = defineRecord("Box", {
148
+ docs: "Box",
149
+ fields: {
150
+ kind: P.Double
151
+ }
152
+ });
153
+ expect(() => check({
154
+ Box,
155
+ Shape: union("Shape", {
156
+ box: Box
157
+ })
158
+ })).toThrow(`The generated type "Shape_v1Box" would have two properties named "kind".` + ` Rename the discriminant of union "Shape".`);
159
+ });
160
+ it("rejects the discriminant \"value\" when a variant is another union", () => {
161
+ const Inner = union("Inner", {
162
+ bar: Bar
163
+ });
164
+ const Outer = defineUnion("Outer", {
165
+ discriminant: "value",
166
+ docs: "Outer",
167
+ variants: {
168
+ inner: Inner
169
+ }
170
+ });
171
+ expect(() => check({
172
+ Bar,
173
+ Inner,
174
+ Outer
175
+ })).toThrow(`The generated type "Outer_v1Inner" would have two properties named "value".` + ` Rename the discriminant of union "Outer".`);
176
+ });
177
+ });
178
+ //# sourceMappingURL=assertSdkNamesUnique.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertSdkNamesUnique.test.js","names":["defineRecord","defineSchema","defineSchemaUpdate","defineUnion","nextSchema","P","mkdtemp","readdir","readFile","rm","os","path","describe","expect","it","assertSdkNamesUnique","resolveSchemaChain","writeAllSdkFiles","fixtures","record","name","docs","fields","x","Double","union","variants","discriminant","check","models","chain","undefined","NON_CLASHING_IMPORTS","Set","namesInFile","content","names","matchAll","push","list","entry","split","trim","replace","pop","Bar","Baz","each","Object","entries","_fixtureName","schema","resolved","minSupportedVersion","version","listed","outputDir","join","tmpdir","files","recursive","filter","file","endsWith","generated","add","has","toEqual","KnownFoo","Foo","bar","toThrow","myBox","Metadata","Foo_v2","Box","kind","v1","addShape","box","deprecateField","build","Shape","v2","addSchemaUpdate","not","Inner","Outer","inner"],"sources":["assertSdkNamesUnique.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 type { ModelDef } from \"@palantir/pack.schema\";\nimport {\n defineRecord,\n defineSchema,\n defineSchemaUpdate,\n defineUnion,\n nextSchema,\n} from \"@palantir/pack.schema\";\nimport * as P from \"@palantir/pack.schema\";\nimport { mkdtemp, readdir, readFile, rm } from \"fs/promises\";\nimport os from \"os\";\nimport path from \"path\";\nimport { describe, expect, it } from \"vitest\";\nimport { assertSdkNamesUnique } from \"../assertSdkNamesUnique.js\";\nimport { resolveSchemaChain } from \"../resolveSchemaChain.js\";\nimport { writeAllSdkFiles } from \"../writeAllSdkFiles.js\";\nimport * as fixtures from \"./fixtures.js\";\n\nconst record = (name: string) => defineRecord(name, { docs: name, fields: { x: P.Double } });\nconst union = (name: string, variants: Record<string, ModelDef>) =>\n defineUnion(name, { discriminant: \"kind\", docs: name, variants });\n\nfunction check(models: Record<string, ModelDef>): void {\n assertSdkNamesUnique(resolveSchemaChain(defineSchema(models)).chain, undefined);\n}\n\n/**\n * Library names that can't clash with a model (see `RESERVED_SDK_NAMES`), so the check doesn't\n * list them. A new import fails the test below until it's added here or there.\n */\nconst NON_CLASHING_IMPORTS = new Set([\n \"DocumentId\",\n \"DocumentRef\",\n \"EditDescription\",\n \"MediaId\",\n \"ObjectId\",\n \"PresencePublishOptions\",\n \"RecordId\",\n \"RecordRef\",\n \"ResourceRid\",\n \"UnionUpgradeRegistry\",\n \"UnknownUnionVariant\",\n \"UpgradeRegistry\",\n \"UserId\",\n \"ZodType\",\n \"z\",\n]);\n\n/** Top-level names a generated file declares, re-exports, or imports. */\nfunction namesInFile(content: string): string[] {\n const names: string[] = [];\n for (const [, name] of content.matchAll(/^export (?:interface|type|const|function) (\\w+)/gm)) {\n names.push(name!);\n }\n for (const [, list] of content.matchAll(/^(?:import|export)(?: type)? \\{([^}]*)\\} from /gm)) {\n for (const entry of list!.split(\",\")) {\n // `type Foo_v1 as Foo` binds `Foo`.\n const name = entry.trim().replace(/^type /, \"\").split(\" as \").pop()!.trim();\n if (name !== \"\") names.push(name);\n }\n }\n return names;\n}\n\ndescribe(\"assertSdkNamesUnique\", () => {\n const Bar = record(\"Bar\");\n const Baz = record(\"Baz\");\n\n it.each(Object.entries(fixtures))(\n \"lists every name the SDK generated from %s uses\",\n async (_fixtureName, schema) => {\n const resolved = resolveSchemaChain(schema);\n // Support every version, so the SDK has files for all of them.\n const minSupportedVersion = resolved.chain[0]!.version;\n const listed = assertSdkNamesUnique(resolved.chain, minSupportedVersion);\n\n const outputDir = await mkdtemp(path.join(os.tmpdir(), \"sdk-names-\"));\n try {\n await writeAllSdkFiles(resolved, outputDir, minSupportedVersion);\n const files = (await readdir(outputDir, { recursive: true })).filter(file =>\n file.endsWith(\".ts\")\n );\n const generated = new Set<string>();\n for (const file of files) {\n const content = await readFile(path.join(outputDir, file), \"utf8\");\n for (const name of namesInFile(content)) generated.add(name);\n }\n\n // A name missing here means a generator creates a name the check doesn't know about.\n expect(\n [...generated].filter(name => !listed.has(name) && !NON_CLASHING_IMPORTS.has(name)),\n ).toEqual([]);\n } finally {\n await rm(outputDir, { recursive: true });\n }\n },\n );\n\n it(\"says which two models produce the same name\", () => {\n expect(() => check({ Bar, KnownFoo: record(\"KnownFoo\"), Foo: union(\"Foo\", { bar: Bar }) }))\n .toThrow(\n `The generated SDK would use the name \"KnownFoo\" for both record \"KnownFoo\" and`\n + ` union \"Foo\" (Known type). Rename a model so the names differ.`,\n );\n });\n\n it(\"rejects two variant keys that format to the same name\", () => {\n expect(() => check({ Bar, Baz, Foo: union(\"Foo\", { \"my-box\": Bar, myBox: Baz }) })).toThrow(\n `The generated SDK would use the name \"FooMyBox\" for both`,\n );\n });\n\n it(\"rejects a model named like a name the SDK reserves\", () => {\n expect(() => check({ Metadata: record(\"Metadata\") })).toThrow(\n `The generated SDK would use the name \"Metadata\" for both the SDK itself and record \"Metadata\"`,\n );\n });\n\n it(\"rejects a model key that could clash in a later version\", () => {\n // At v2 this would clash with record Foo's v2 type, Foo_v2.\n expect(() => check({ Foo: record(\"Foo\"), Foo_v2: record(\"Foo_v2\") })).toThrow(\n `Model \"Foo_v2\" can't contain \"_v\" followed by a number.`,\n );\n });\n\n it(\"ignores deprecated fields, which the SDK leaves out\", () => {\n const Box = defineRecord(\"Box\", { docs: \"Box\", fields: { kind: P.Double, x: P.Double } });\n const v1 = defineSchema({ Box });\n // v2 deprecates `kind`, so it no longer collides with the new union's discriminant.\n const addShape = defineSchemaUpdate(\n \"addShape\",\n (schema: P.SchemaBuilder<typeof v1.models>) => {\n const box = schema.Box.deprecateField(\"kind\", \"Use Shape instead.\").build();\n return { Box: box, Shape: union(\"Shape\", { box }) };\n },\n );\n const v2 = nextSchema(v1).addSchemaUpdate(addShape).build();\n\n expect(() => assertSdkNamesUnique(resolveSchemaChain(v2).chain, 1)).not.toThrow();\n });\n\n it(\"rejects a variant record with a field named like the discriminant\", () => {\n const Box = defineRecord(\"Box\", { docs: \"Box\", fields: { kind: P.Double } });\n\n expect(() => check({ Box, Shape: union(\"Shape\", { box: Box }) })).toThrow(\n `The generated type \"Shape_v1Box\" would have two properties named \"kind\".`\n + ` Rename the discriminant of union \"Shape\".`,\n );\n });\n\n it(\"rejects the discriminant \\\"value\\\" when a variant is another union\", () => {\n const Inner = union(\"Inner\", { bar: Bar });\n const Outer = defineUnion(\"Outer\", {\n discriminant: \"value\",\n docs: \"Outer\",\n variants: { inner: Inner },\n });\n\n expect(() => check({ Bar, Inner, Outer })).toThrow(\n `The generated type \"Outer_v1Inner\" would have two properties named \"value\".`\n + ` Rename the discriminant of union \"Outer\".`,\n );\n });\n});\n"],"mappings":"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","ignoreList":[]}