@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.
- package/README.md +7 -0
- package/build/esm/commands/ir/__tests__/irDeployFirstParty.test.js +1 -1
- package/build/esm/commands/ir/__tests__/irDeployFirstParty.test.js.map +1 -1
- package/build/esm/commands/ir/__tests__/irUpdateSchemaHandler.test.js +96 -0
- package/build/esm/commands/ir/__tests__/irUpdateSchemaHandler.test.js.map +1 -0
- package/build/esm/commands/ir/__tests__/resolveIrInput.test.js +80 -0
- package/build/esm/commands/ir/__tests__/resolveIrInput.test.js.map +1 -1
- package/build/esm/commands/ir/irDeployHandler.js +6 -1
- package/build/esm/commands/ir/irDeployHandler.js.map +1 -1
- package/build/esm/commands/ir/irGenAssetHandler.js +6 -1
- package/build/esm/commands/ir/irGenAssetHandler.js.map +1 -1
- package/build/esm/commands/ir/irGenTypesHandler.js +7 -3
- package/build/esm/commands/ir/irGenTypesHandler.js.map +1 -1
- package/build/esm/commands/ir/irUpdateSchemaHandler.js +19 -12
- package/build/esm/commands/ir/irUpdateSchemaHandler.js.map +1 -1
- package/build/esm/commands/ir/resolveIrInput.js +6 -5
- package/build/esm/commands/ir/resolveIrInput.js.map +1 -1
- package/build/esm/commands/schema/registerSchemaCommands.js +1 -1
- package/build/esm/commands/schema/registerSchemaCommands.js.map +1 -1
- package/build/esm/commands/schema/schemaIrHandler.js +15 -8
- package/build/esm/commands/schema/schemaIrHandler.js.map +1 -1
- package/build/esm/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.js.map +1 -1
- package/build/esm/lib/pack-docschema-api/pack-docschema-ir/unionDef.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js.map +1 -1
- package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js +71 -0
- package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js.map +1 -1
- package/build/esm/utils/ir/convertIrToWireSchema.js +10 -7
- package/build/esm/utils/ir/convertIrToWireSchema.js.map +1 -1
- package/build/esm/utils/schema/__tests__/__snapshots__/generateDocumentTypeFromSchema/with-name-and-description.js +1 -1
- package/build/esm/utils/schema/__tests__/__snapshots__/generateDocumentTypeFromSchema/with-name-and-description.js.map +1 -1
- package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/single-version.js.map +1 -1
- package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/three-version-chain.js.map +1 -1
- package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/two-version.js.map +1 -1
- package/build/esm/utils/schema/__tests__/assertSdkNamesUnique.test.js +178 -0
- package/build/esm/utils/schema/__tests__/assertSdkNamesUnique.test.js.map +1 -0
- package/build/esm/utils/schema/__tests__/generateInternalFromSchema.test.js +71 -1
- package/build/esm/utils/schema/__tests__/generateInternalFromSchema.test.js.map +1 -1
- package/build/esm/utils/schema/__tests__/resolveSchemaChain.test.js +122 -3
- package/build/esm/utils/schema/__tests__/resolveSchemaChain.test.js.map +1 -1
- package/build/esm/utils/schema/assertSdkNamesUnique.js +151 -0
- package/build/esm/utils/schema/assertSdkNamesUnique.js.map +1 -0
- package/build/esm/utils/schema/generateIndexFromSchema.js +3 -5
- package/build/esm/utils/schema/generateIndexFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateInternalFromSchema.js +42 -19
- package/build/esm/utils/schema/generateInternalFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateModelMetadataFromSchema.js +9 -11
- package/build/esm/utils/schema/generateModelMetadataFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateScopeFromSchema.js +6 -9
- package/build/esm/utils/schema/generateScopeFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateVersionedTypesFromSchema.js +8 -9
- package/build/esm/utils/schema/generateVersionedTypesFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateVersionedZodFromSchema.js +13 -16
- package/build/esm/utils/schema/generateVersionedZodFromSchema.js.map +1 -1
- package/build/esm/utils/schema/resolveSchemaChain.js +137 -21
- package/build/esm/utils/schema/resolveSchemaChain.js.map +1 -1
- package/build/esm/utils/schema/runtimeSchema.js +47 -0
- package/build/esm/utils/schema/runtimeSchema.js.map +1 -1
- package/build/esm/utils/schema/writeAllSdkFiles.js +2 -0
- package/build/esm/utils/schema/writeAllSdkFiles.js.map +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/arrayFields.js.map +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js.map +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js.map +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/refTypes.js.map +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleRecord.js.map +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js.map +1 -1
- package/build/esm/utils/steps/convertStepsToIr.js +30 -2
- package/build/esm/utils/steps/convertStepsToIr.js.map +1 -1
- package/build/types/commands/ir/__tests__/irUpdateSchemaHandler.test.d.ts +2 -0
- package/build/types/commands/ir/__tests__/irUpdateSchemaHandler.test.d.ts.map +1 -0
- package/build/types/commands/ir/irDeployHandler.d.ts +1 -1
- package/build/types/commands/ir/irDeployHandler.d.ts.map +1 -1
- package/build/types/commands/ir/irGenAssetHandler.d.ts +1 -1
- package/build/types/commands/ir/irGenAssetHandler.d.ts.map +1 -1
- package/build/types/commands/ir/irGenTypesHandler.d.ts.map +1 -1
- package/build/types/commands/ir/irUpdateSchemaHandler.d.ts.map +1 -1
- package/build/types/commands/ir/resolveIrInput.d.ts +1 -0
- package/build/types/commands/ir/resolveIrInput.d.ts.map +1 -1
- package/build/types/commands/schema/schemaIrHandler.d.ts +3 -3
- package/build/types/commands/schema/schemaIrHandler.d.ts.map +1 -1
- package/build/types/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.d.ts +1 -0
- package/build/types/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.d.ts.map +1 -1
- package/build/types/lib/pack-docschema-api/pack-docschema-ir/unionDef.d.ts +3 -0
- package/build/types/lib/pack-docschema-api/pack-docschema-ir/unionDef.d.ts.map +1 -1
- package/build/types/utils/ir/convertIrToWireSchema.d.ts +2 -2
- package/build/types/utils/ir/convertIrToWireSchema.d.ts.map +1 -1
- package/build/types/utils/schema/__tests__/assertSdkNamesUnique.test.d.ts +2 -0
- package/build/types/utils/schema/__tests__/assertSdkNamesUnique.test.d.ts.map +1 -0
- package/build/types/utils/schema/assertSdkNamesUnique.d.ts +9 -0
- package/build/types/utils/schema/assertSdkNamesUnique.d.ts.map +1 -0
- package/build/types/utils/schema/generateIndexFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateInternalFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateModelMetadataFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateScopeFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateVersionedTypesFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateVersionedZodFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/resolveSchemaChain.d.ts +24 -1
- package/build/types/utils/schema/resolveSchemaChain.d.ts.map +1 -1
- package/build/types/utils/schema/runtimeSchema.d.ts +19 -0
- package/build/types/utils/schema/runtimeSchema.d.ts.map +1 -1
- package/build/types/utils/schema/writeAllSdkFiles.d.ts.map +1 -1
- package/build/types/utils/steps/convertStepsToIr.d.ts +4 -0
- package/build/types/utils/steps/convertStepsToIr.d.ts.map +1 -1
- package/package.json +19 -5
- package/build/esm/utils/unknownVariantSuffix.js +0 -22
- package/build/esm/utils/unknownVariantSuffix.js.map +0 -1
- package/build/types/utils/unknownVariantSuffix.d.ts +0 -3
- 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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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":[]}
|
package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/two-version.js.map
CHANGED
|
@@ -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.
|
|
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":[]}
|