@palantir/pack.document-schema.type-gen 0.9.0 → 0.10.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/build/esm/commands/asset/__tests__/buildPrefixRewriteFetch.test.js +85 -0
- package/build/esm/commands/asset/__tests__/buildPrefixRewriteFetch.test.js.map +1 -0
- package/build/esm/commands/asset/assetDeployHandler.js +36 -1
- package/build/esm/commands/asset/assetDeployHandler.js.map +1 -1
- package/build/esm/commands/asset/registerAssetCommands.js +1 -1
- package/build/esm/commands/asset/registerAssetCommands.js.map +1 -1
- package/build/esm/commands/ir/irGenTypesHandler.js +49 -0
- package/build/esm/commands/ir/irGenTypesHandler.js.map +1 -0
- package/build/esm/commands/ir/registerIrCommands.js +2 -0
- package/build/esm/commands/ir/registerIrCommands.js.map +1 -1
- package/build/esm/commands/schema/registerSchemaCommands.js +2 -2
- package/build/esm/commands/schema/registerSchemaCommands.js.map +1 -1
- package/build/esm/commands/schema/schemaIrHandler.js +56 -0
- package/build/esm/commands/schema/schemaIrHandler.js.map +1 -0
- package/build/esm/index.js +0 -6
- package/build/esm/index.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 +23 -0
- package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js.map +1 -1
- package/build/esm/utils/ir/irFieldHelpers.js +383 -0
- package/build/esm/utils/ir/irFieldHelpers.js.map +1 -0
- 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__/convertSchemaToSteps.test.js +13 -0
- package/build/esm/utils/schema/__tests__/convertSchemaToSteps.test.js.map +1 -1
- package/build/esm/utils/schema/__tests__/fixtures.js +76 -5
- package/build/esm/utils/schema/__tests__/fixtures.js.map +1 -1
- package/build/esm/utils/schema/__tests__/generateInternalFromSchema.test.js +19 -7
- package/build/esm/utils/schema/__tests__/generateInternalFromSchema.test.js.map +1 -1
- package/build/esm/utils/schema/__tests__/generateModelMetadataFromSchema.test.js +7 -6
- package/build/esm/utils/schema/__tests__/generateModelMetadataFromSchema.test.js.map +1 -1
- package/build/esm/utils/schema/__tests__/generateScopeFromSchema.test.js +6 -5
- package/build/esm/utils/schema/__tests__/generateScopeFromSchema.test.js.map +1 -1
- package/build/esm/utils/schema/__tests__/generateVersionedTypesFromSchema.test.js +19 -10
- package/build/esm/utils/schema/__tests__/generateVersionedTypesFromSchema.test.js.map +1 -1
- package/build/esm/utils/schema/__tests__/generateVersionedZodFromSchema.test.js +15 -10
- package/build/esm/utils/schema/__tests__/generateVersionedZodFromSchema.test.js.map +1 -1
- package/build/esm/utils/schema/__tests__/generateVersionsFromSchema.test.js +6 -5
- package/build/esm/utils/schema/__tests__/generateVersionsFromSchema.test.js.map +1 -1
- package/build/esm/utils/schema/convertSchemaToSteps.js +6 -0
- package/build/esm/utils/schema/convertSchemaToSteps.js.map +1 -1
- package/build/esm/utils/schema/generateIndexFromSchema.js +15 -13
- package/build/esm/utils/schema/generateIndexFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateInternalFromSchema.js +68 -184
- package/build/esm/utils/schema/generateInternalFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateModelMetadataFromSchema.js +46 -69
- package/build/esm/utils/schema/generateModelMetadataFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateScopeFromSchema.js +29 -33
- package/build/esm/utils/schema/generateScopeFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateTypesFromSchema.js +9 -1
- package/build/esm/utils/schema/generateTypesFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateVersionedTypesFromSchema.js +61 -155
- package/build/esm/utils/schema/generateVersionedTypesFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateVersionedZodFromSchema.js +58 -94
- package/build/esm/utils/schema/generateVersionedZodFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateVersionsFromSchema.js +7 -5
- package/build/esm/utils/schema/generateVersionsFromSchema.js.map +1 -1
- package/build/esm/utils/schema/loadSchemaModule.js +53 -0
- package/build/esm/utils/schema/loadSchemaModule.js.map +1 -0
- package/build/esm/utils/schema/resolveSchemaChain.js +59 -9
- package/build/esm/utils/schema/resolveSchemaChain.js.map +1 -1
- package/build/esm/utils/schema/runtimeSchema.js +0 -27
- package/build/esm/utils/schema/runtimeSchema.js.map +1 -1
- package/build/esm/utils/schema/writeAllSdkFiles.js +111 -0
- package/build/esm/utils/schema/writeAllSdkFiles.js.map +1 -0
- 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/__tests__/convertStepsToIr.test.js +93 -1
- package/build/esm/utils/steps/__tests__/convertStepsToIr.test.js.map +1 -1
- package/build/esm/utils/steps/convertStepsToIr.js +43 -35
- package/build/esm/utils/steps/convertStepsToIr.js.map +1 -1
- package/build/types/commands/asset/__tests__/buildPrefixRewriteFetch.test.d.ts +2 -0
- package/build/types/commands/asset/__tests__/buildPrefixRewriteFetch.test.d.ts.map +1 -0
- package/build/types/commands/asset/assetDeployHandler.d.ts +15 -0
- package/build/types/commands/asset/assetDeployHandler.d.ts.map +1 -1
- package/build/types/commands/asset/registerAssetCommands.d.ts.map +1 -1
- package/build/types/commands/ir/irGenTypesHandler.d.ts +8 -0
- package/build/types/commands/ir/irGenTypesHandler.d.ts.map +1 -0
- package/build/types/commands/ir/registerIrCommands.d.ts.map +1 -1
- package/build/types/commands/schema/registerSchemaCommands.d.ts.map +1 -1
- package/build/types/commands/schema/schemaIrHandler.d.ts +19 -0
- package/build/types/commands/schema/schemaIrHandler.d.ts.map +1 -0
- package/build/types/index.d.ts +1 -6
- package/build/types/index.d.ts.map +1 -1
- package/build/types/utils/ir/irFieldHelpers.d.ts +36 -0
- package/build/types/utils/ir/irFieldHelpers.d.ts.map +1 -0
- package/build/types/utils/schema/__tests__/fixtures.d.ts +10 -1
- package/build/types/utils/schema/__tests__/fixtures.d.ts.map +1 -1
- package/build/types/utils/schema/convertSchemaToSteps.d.ts.map +1 -1
- package/build/types/utils/schema/generateIndexFromSchema.d.ts +2 -2
- package/build/types/utils/schema/generateIndexFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateInternalFromSchema.d.ts +3 -6
- package/build/types/utils/schema/generateInternalFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateModelMetadataFromSchema.d.ts +3 -8
- package/build/types/utils/schema/generateModelMetadataFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateScopeFromSchema.d.ts +2 -2
- package/build/types/utils/schema/generateScopeFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateTypesFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateVersionedTypesFromSchema.d.ts +4 -7
- package/build/types/utils/schema/generateVersionedTypesFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateVersionedZodFromSchema.d.ts +3 -7
- package/build/types/utils/schema/generateVersionedZodFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateVersionsFromSchema.d.ts +3 -3
- package/build/types/utils/schema/generateVersionsFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/loadSchemaModule.d.ts +14 -0
- package/build/types/utils/schema/loadSchemaModule.d.ts.map +1 -0
- package/build/types/utils/schema/resolveSchemaChain.d.ts +29 -8
- package/build/types/utils/schema/resolveSchemaChain.d.ts.map +1 -1
- package/build/types/utils/schema/runtimeSchema.d.ts +0 -32
- package/build/types/utils/schema/runtimeSchema.d.ts.map +1 -1
- package/build/types/utils/schema/writeAllSdkFiles.d.ts +8 -0
- package/build/types/utils/schema/writeAllSdkFiles.d.ts.map +1 -0
- package/build/types/utils/steps/convertStepsToIr.d.ts +3 -3
- package/build/types/utils/steps/convertStepsToIr.d.ts.map +1 -1
- package/package.json +3 -3
- package/build/esm/commands/schema/schemaGenTypesHandler.js +0 -147
- package/build/esm/commands/schema/schemaGenTypesHandler.js.map +0 -1
- package/build/types/commands/schema/schemaGenTypesHandler.d.ts +0 -8
- package/build/types/commands/schema/schemaGenTypesHandler.d.ts.map +0 -1
|
@@ -14,8 +14,10 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
+
import { defineRecord, defineUnion } from "@palantir/pack.schema";
|
|
18
|
+
import * as P from "@palantir/pack.schema";
|
|
17
19
|
import { describe, expect, it } from "vitest";
|
|
18
|
-
import { convertStepsToIr } from "../convertStepsToIr.js";
|
|
20
|
+
import { convertSchemaToIr, convertStepsToIr } from "../convertStepsToIr.js";
|
|
19
21
|
import { parseMigrationSteps } from "../parseMigrationSteps.js";
|
|
20
22
|
describe("convertStepsToIr", () => {
|
|
21
23
|
it("should convert simple record types to IR format", () => {
|
|
@@ -358,4 +360,94 @@ describe("parseMigrationSteps generic type validation", () => {
|
|
|
358
360
|
expect(() => parseMigrationSteps(stepsWithField(fieldType))).not.toThrow();
|
|
359
361
|
});
|
|
360
362
|
});
|
|
363
|
+
describe("convertSchemaToIr alias handling", () => {
|
|
364
|
+
it("preserves key = exportKey and name = declaredName for aliased records", () => {
|
|
365
|
+
const ir = convertSchemaToIr({
|
|
366
|
+
FooAlias: defineRecord("Foo", {
|
|
367
|
+
docs: "A foo",
|
|
368
|
+
fields: {
|
|
369
|
+
x: P.String
|
|
370
|
+
}
|
|
371
|
+
})
|
|
372
|
+
});
|
|
373
|
+
const model = ir.models["FooAlias"];
|
|
374
|
+
expect(model).toBeDefined();
|
|
375
|
+
expect(model.type).toBe("record");
|
|
376
|
+
if (model.type === "record") {
|
|
377
|
+
expect(model.record.key).toBe("FooAlias");
|
|
378
|
+
expect(model.record.name).toBe("Foo");
|
|
379
|
+
}
|
|
380
|
+
});
|
|
381
|
+
it("preserves key = exportKey and name = declaredName for aliased unions", () => {
|
|
382
|
+
const Circle = defineRecord("Circle", {
|
|
383
|
+
docs: "c",
|
|
384
|
+
fields: {
|
|
385
|
+
r: P.Double
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
const ir = convertSchemaToIr({
|
|
389
|
+
Circle,
|
|
390
|
+
ShapeAlias: defineUnion("Shape", {
|
|
391
|
+
docs: "A shape",
|
|
392
|
+
variants: {
|
|
393
|
+
circle: Circle
|
|
394
|
+
}
|
|
395
|
+
})
|
|
396
|
+
});
|
|
397
|
+
const model = ir.models["ShapeAlias"];
|
|
398
|
+
expect(model).toBeDefined();
|
|
399
|
+
expect(model.type).toBe("union");
|
|
400
|
+
if (model.type === "union") {
|
|
401
|
+
expect(model.union.key).toBe("ShapeAlias");
|
|
402
|
+
expect(model.union.name).toBe("Shape");
|
|
403
|
+
}
|
|
404
|
+
});
|
|
405
|
+
it("resolves field refs and union variants to export keys", () => {
|
|
406
|
+
const Inner = defineRecord("InnerModel", {
|
|
407
|
+
docs: "i",
|
|
408
|
+
fields: {
|
|
409
|
+
v: P.String
|
|
410
|
+
}
|
|
411
|
+
});
|
|
412
|
+
const ir = convertSchemaToIr({
|
|
413
|
+
InnerAlias: Inner,
|
|
414
|
+
Outer: defineRecord("Outer", {
|
|
415
|
+
docs: "o",
|
|
416
|
+
fields: {
|
|
417
|
+
nested: Inner
|
|
418
|
+
}
|
|
419
|
+
})
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
// The field ref should resolve to the export key "InnerAlias"
|
|
423
|
+
const outerModel = ir.models["Outer"];
|
|
424
|
+
expect(outerModel.type).toBe("record");
|
|
425
|
+
if (outerModel.type === "record") {
|
|
426
|
+
const nestedField = outerModel.record.fields.find(f => f.key === "nested");
|
|
427
|
+
expect(nestedField.fieldType.type).toBe("value");
|
|
428
|
+
if (nestedField.fieldType.type === "value") {
|
|
429
|
+
expect(nestedField.fieldType.value.type).toBe("modelRef");
|
|
430
|
+
if (nestedField.fieldType.value.type === "modelRef") {
|
|
431
|
+
expect(nestedField.fieldType.value.modelRef.modelTypes).toEqual(["InnerAlias"]);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
});
|
|
436
|
+
it("throws on duplicate declared model names", () => {
|
|
437
|
+
expect(() => convertSchemaToIr({
|
|
438
|
+
AliasA: defineRecord("Foo", {
|
|
439
|
+
docs: "a",
|
|
440
|
+
fields: {
|
|
441
|
+
x: P.String
|
|
442
|
+
}
|
|
443
|
+
}),
|
|
444
|
+
AliasB: defineRecord("Foo", {
|
|
445
|
+
docs: "b",
|
|
446
|
+
fields: {
|
|
447
|
+
y: P.String
|
|
448
|
+
}
|
|
449
|
+
})
|
|
450
|
+
})).toThrow(/Duplicate declared model name "Foo"/);
|
|
451
|
+
});
|
|
452
|
+
});
|
|
361
453
|
//# sourceMappingURL=convertStepsToIr.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertStepsToIr.test.js","names":["describe","expect","it","convertStepsToIr","parseMigrationSteps","schema","Person","docs","fields","name","age","email","toBe","description","version","primaryModelKeys","toEqual","Object","keys","models","toHaveLength","personModel","toBeDefined","type","Error","personRecord","record","key","nameField","find","f","isOptional","toBeUndefined","fieldType","value","string","ageField","double","emailField","Container","tags","numbers","containerModel","containerRecord","tagsField","array","allowNullValue","numbersField","Address","street","city","address","addressField","modelRef","modelTypes","position","x","y","ObjectNode","extends","label","objectNodeModel","objectNode","xField","yField","labelField","TextBox","text","Node","variants","object","textBox","Graph","nodes","graphModel","graphRecord","nodesField","Tag","labels","labelsField","stepsWithField","Foo","bar","each","toThrow","not"],"sources":["convertStepsToIr.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 { describe, expect, it } from \"vitest\";\nimport type { IFieldTypeUnion } from \"../../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { convertStepsToIr } from \"../convertStepsToIr.js\";\nimport type { MigrationStep } from \"../parseMigrationSteps.js\";\nimport { parseMigrationSteps } from \"../parseMigrationSteps.js\";\n\ndescribe(\"convertStepsToIr\", () => {\n it(\"should convert simple record types to IR format\", () => {\n const steps: MigrationStep[] = [\n {\n \"add-records\": {\n Person: {\n docs: \"A person record\",\n fields: {\n name: \"string\",\n age: \"double\",\n email: \"optional<string>\",\n },\n },\n },\n },\n ];\n\n const schema = convertStepsToIr(steps);\n\n expect(schema.name).toBe(\"Generated Schema\");\n expect(schema.description).toBe(\"Schema generated from migration steps\");\n expect(schema.version).toBe(1);\n expect(schema.primaryModelKeys).toEqual([\"Person\"]);\n expect(Object.keys(schema.models)).toHaveLength(1);\n\n const personModel = schema.models[\"Person\"];\n expect(personModel).toBeDefined();\n expect(personModel?.type).toBe(\"record\");\n if (personModel?.type !== \"record\") throw new Error(\"Expected record type\");\n const personRecord = personModel.record;\n\n expect(personRecord.key).toBe(\"Person\");\n expect(personRecord.name).toBe(\"Person\");\n expect(personRecord.description).toBe(\"A person record\");\n expect(personRecord.fields).toHaveLength(3);\n\n // Check name field\n const nameField = personRecord.fields.find(f => f.key === \"name\");\n expect(nameField).toBeDefined();\n expect(nameField?.isOptional).toBeUndefined();\n expect(nameField?.fieldType).toEqual({\n type: \"value\",\n value: {\n type: \"string\",\n string: {},\n },\n });\n\n // Check age field\n const ageField = personRecord.fields.find(f => f.key === \"age\");\n expect(ageField).toBeDefined();\n expect(ageField?.fieldType).toEqual({\n type: \"value\",\n value: {\n type: \"double\",\n double: {},\n },\n });\n\n // Check optional email field\n const emailField = personRecord.fields.find(f => f.key === \"email\");\n expect(emailField).toBeDefined();\n expect(emailField?.isOptional).toBe(true);\n expect(emailField?.fieldType).toEqual({\n type: \"value\",\n value: {\n type: \"string\",\n string: {},\n },\n });\n });\n\n it(\"should convert array and list types to IR format\", () => {\n const steps: MigrationStep[] = [\n {\n \"add-records\": {\n Container: {\n docs: \"A container with collections\",\n fields: {\n tags: \"array<string>\",\n numbers: \"list<double>\",\n },\n },\n },\n },\n ];\n\n const schema = convertStepsToIr(steps);\n const containerModel = schema.models[\"Container\"];\n expect(containerModel).toBeDefined();\n expect(containerModel?.type).toBe(\"record\");\n if (containerModel?.type !== \"record\") throw new Error(\"Expected record type\");\n const containerRecord = containerModel.record;\n\n // Check tags array field\n const tagsField = containerRecord.fields.find(f => f.key === \"tags\");\n expect(tagsField?.fieldType).toEqual({\n type: \"array\",\n array: {\n allowNullValue: false,\n value: {\n type: \"string\",\n string: {},\n },\n },\n });\n\n // Check numbers list field (treated as array)\n const numbersField = containerRecord.fields.find(f => f.key === \"numbers\");\n expect(numbersField?.fieldType).toEqual({\n type: \"array\",\n array: {\n allowNullValue: false,\n value: {\n type: \"double\",\n double: {},\n },\n },\n });\n });\n\n it(\"should convert record references to IR format\", () => {\n const steps: MigrationStep[] = [\n {\n \"add-records\": {\n Address: {\n fields: {\n street: \"string\",\n city: \"string\",\n },\n },\n Person: {\n fields: {\n name: \"string\",\n address: \"Address\",\n },\n },\n },\n },\n ];\n\n const schema = convertStepsToIr(steps);\n const personModel = schema.models[\"Person\"];\n expect(personModel).toBeDefined();\n expect(personModel?.type).toBe(\"record\");\n if (personModel?.type !== \"record\") throw new Error(\"Expected record type\");\n const personRecord = personModel.record;\n\n const addressField = personRecord.fields.find(f => f.key === \"address\");\n expect(addressField?.fieldType).toEqual(\n {\n type: \"value\",\n value: {\n type: \"modelRef\",\n modelRef: {\n modelTypes: [\"Address\"],\n },\n },\n } satisfies IFieldTypeUnion,\n );\n });\n\n it(\"should handle local fragments and extends\", () => {\n const steps: MigrationStep[] = [\n {\n \"local-fragment\": {\n position: {\n x: \"double\",\n y: \"double\",\n },\n },\n },\n {\n \"add-records\": {\n ObjectNode: {\n docs: \"A node with position\",\n extends: [\"position\"],\n fields: {\n label: \"string\",\n },\n },\n },\n },\n ];\n\n const schema = convertStepsToIr(steps);\n const objectNodeModel = schema.models[\"ObjectNode\"];\n expect(objectNodeModel).toBeDefined();\n expect(objectNodeModel?.type).toBe(\"record\");\n if (objectNodeModel?.type !== \"record\") throw new Error(\"Expected record type\");\n const objectNode = objectNodeModel.record;\n\n expect(objectNode.fields).toHaveLength(3);\n\n // Check inherited fields from fragment\n const xField = objectNode.fields.find(f => f.key === \"x\");\n expect(xField).toBeDefined();\n expect(xField?.fieldType).toEqual({\n type: \"value\",\n value: {\n type: \"double\",\n double: {},\n },\n });\n\n const yField = objectNode.fields.find(f => f.key === \"y\");\n expect(yField).toBeDefined();\n\n // Check own field\n const labelField = objectNode.fields.find(f => f.key === \"label\");\n expect(labelField).toBeDefined();\n });\n\n it(\"should convert unions to IR format\", () => {\n const steps: MigrationStep[] = [\n {\n \"add-records\": {\n ObjectNode: {\n fields: {\n label: \"string\",\n },\n },\n TextBox: {\n fields: {\n text: \"string\",\n },\n },\n },\n },\n {\n \"add-union\": {\n Node: {\n variants: {\n object: \"ObjectNode\",\n textBox: \"TextBox\",\n },\n },\n },\n },\n {\n \"add-records\": {\n Graph: {\n fields: {\n nodes: \"array<Node>\",\n },\n },\n },\n },\n ];\n\n const schema = convertStepsToIr(steps);\n const graphModel = schema.models[\"Graph\"];\n if (graphModel?.type !== \"record\") throw new Error(\"Expected record type\");\n const graphRecord = graphModel.record;\n\n const nodesField = graphRecord.fields.find(f => f.key === \"nodes\");\n expect(nodesField?.fieldType).toEqual({\n type: \"array\",\n array: {\n allowNullValue: false,\n value: {\n type: \"modelRef\",\n modelRef: {\n modelTypes: [\"Node\"],\n },\n },\n },\n });\n });\n\n it(\"should convert optional array types to IR format\", () => {\n const steps: MigrationStep[] = [\n {\n \"add-records\": {\n Tag: {\n fields: {\n name: \"string\",\n },\n },\n Container: {\n docs: \"A container with optional collections\",\n fields: {\n tags: \"optional<array<Tag>>\",\n labels: \"optional<array<string>>\",\n },\n },\n },\n },\n ];\n\n const schema = convertStepsToIr(steps);\n const containerModel = schema.models[\"Container\"];\n expect(containerModel).toBeDefined();\n expect(containerModel?.type).toBe(\"record\");\n if (containerModel?.type !== \"record\") throw new Error(\"Expected record type\");\n const containerRecord = containerModel.record;\n\n // Check optional array of references\n const tagsField = containerRecord.fields.find(f => f.key === \"tags\");\n expect(tagsField?.isOptional).toBe(true);\n expect(tagsField?.fieldType).toEqual({\n type: \"array\",\n array: {\n allowNullValue: false,\n value: {\n type: \"modelRef\",\n modelRef: {\n modelTypes: [\"Tag\"],\n },\n },\n },\n });\n\n // Check optional array of primitives\n const labelsField = containerRecord.fields.find(f => f.key === \"labels\");\n expect(labelsField?.isOptional).toBe(true);\n expect(labelsField?.fieldType).toEqual({\n type: \"array\",\n array: {\n allowNullValue: false,\n value: {\n type: \"string\",\n string: {},\n },\n },\n });\n });\n\n it(\"should handle modify-records step\", () => {\n const steps: MigrationStep[] = [\n {\n \"add-records\": {\n Person: {\n fields: {\n name: \"string\",\n },\n },\n },\n },\n {\n \"modify-records\": {\n Person: {\n \"add-fields\": {\n age: \"double\",\n email: \"optional<string>\",\n },\n },\n },\n },\n ];\n\n const schema = convertStepsToIr(steps);\n const personModel = schema.models[\"Person\"];\n expect(personModel).toBeDefined();\n expect(personModel?.type).toBe(\"record\");\n if (personModel?.type !== \"record\") throw new Error(\"Expected record type\");\n const personRecord = personModel.record;\n\n expect(personRecord.fields).toHaveLength(3);\n\n // Original field\n expect(personRecord.fields.find(f => f.key === \"name\")).toBeDefined();\n\n // Added fields\n expect(personRecord.fields.find(f => f.key === \"age\")).toBeDefined();\n\n const emailField = personRecord.fields.find(f => f.key === \"email\");\n expect(emailField).toBeDefined();\n expect(emailField?.isOptional).toBe(true);\n });\n});\n\ndescribe(\"parseMigrationSteps generic type validation\", () => {\n function stepsWithField(fieldType: string): unknown {\n return [{ \"add-records\": { Foo: { fields: { bar: fieldType } } } }];\n }\n\n it.each([\n \"optional<optional<string>>\",\n \"array<array<string>>\",\n \"list<list<double>>\",\n \"array<optional<string>>\",\n \"optional<array<array<string>>>\",\n \"optional<foo<string>>\",\n \"foo<string>\",\n ])(\"should reject invalid nested generic type: %s\", fieldType => {\n expect(() => parseMigrationSteps(stepsWithField(fieldType))).toThrow();\n });\n\n it.each([\n \"optional<string>\",\n \"optional<double>\",\n \"optional<MyType>\",\n \"array<string>\",\n \"list<double>\",\n \"set<MyType>\",\n \"map<string>\",\n \"optional<array<string>>\",\n \"optional<list<Tag>>\",\n \"optional<set<double>>\",\n \"optional<map<string>>\",\n ])(\"should accept valid generic type: %s\", fieldType => {\n expect(() => parseMigrationSteps(stepsWithField(fieldType))).not.toThrow();\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"convertStepsToIr.test.js","names":["defineRecord","defineUnion","P","describe","expect","it","convertSchemaToIr","convertStepsToIr","parseMigrationSteps","schema","Person","docs","fields","name","age","email","toBe","description","version","primaryModelKeys","toEqual","Object","keys","models","toHaveLength","personModel","toBeDefined","type","Error","personRecord","record","key","nameField","find","f","isOptional","toBeUndefined","fieldType","value","string","ageField","double","emailField","Container","tags","numbers","containerModel","containerRecord","tagsField","array","allowNullValue","numbersField","Address","street","city","address","addressField","modelRef","modelTypes","position","x","y","ObjectNode","extends","label","objectNodeModel","objectNode","xField","yField","labelField","TextBox","text","Node","variants","object","textBox","Graph","nodes","graphModel","graphRecord","nodesField","Tag","labels","labelsField","stepsWithField","Foo","bar","each","toThrow","not","ir","FooAlias","String","model","Circle","r","Double","ShapeAlias","circle","union","Inner","v","InnerAlias","Outer","nested","outerModel","nestedField","AliasA","AliasB"],"sources":["convertStepsToIr.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 { defineRecord, defineUnion } from \"@palantir/pack.schema\";\nimport * as P from \"@palantir/pack.schema\";\nimport { describe, expect, it } from \"vitest\";\nimport type { IFieldTypeUnion } from \"../../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { convertSchemaToIr, convertStepsToIr } from \"../convertStepsToIr.js\";\nimport type { MigrationStep } from \"../parseMigrationSteps.js\";\nimport { parseMigrationSteps } from \"../parseMigrationSteps.js\";\n\ndescribe(\"convertStepsToIr\", () => {\n it(\"should convert simple record types to IR format\", () => {\n const steps: MigrationStep[] = [\n {\n \"add-records\": {\n Person: {\n docs: \"A person record\",\n fields: {\n name: \"string\",\n age: \"double\",\n email: \"optional<string>\",\n },\n },\n },\n },\n ];\n\n const schema = convertStepsToIr(steps);\n\n expect(schema.name).toBe(\"Generated Schema\");\n expect(schema.description).toBe(\"Schema generated from migration steps\");\n expect(schema.version).toBe(1);\n expect(schema.primaryModelKeys).toEqual([\"Person\"]);\n expect(Object.keys(schema.models)).toHaveLength(1);\n\n const personModel = schema.models[\"Person\"];\n expect(personModel).toBeDefined();\n expect(personModel?.type).toBe(\"record\");\n if (personModel?.type !== \"record\") throw new Error(\"Expected record type\");\n const personRecord = personModel.record;\n\n expect(personRecord.key).toBe(\"Person\");\n expect(personRecord.name).toBe(\"Person\");\n expect(personRecord.description).toBe(\"A person record\");\n expect(personRecord.fields).toHaveLength(3);\n\n // Check name field\n const nameField = personRecord.fields.find(f => f.key === \"name\");\n expect(nameField).toBeDefined();\n expect(nameField?.isOptional).toBeUndefined();\n expect(nameField?.fieldType).toEqual({\n type: \"value\",\n value: {\n type: \"string\",\n string: {},\n },\n });\n\n // Check age field\n const ageField = personRecord.fields.find(f => f.key === \"age\");\n expect(ageField).toBeDefined();\n expect(ageField?.fieldType).toEqual({\n type: \"value\",\n value: {\n type: \"double\",\n double: {},\n },\n });\n\n // Check optional email field\n const emailField = personRecord.fields.find(f => f.key === \"email\");\n expect(emailField).toBeDefined();\n expect(emailField?.isOptional).toBe(true);\n expect(emailField?.fieldType).toEqual({\n type: \"value\",\n value: {\n type: \"string\",\n string: {},\n },\n });\n });\n\n it(\"should convert array and list types to IR format\", () => {\n const steps: MigrationStep[] = [\n {\n \"add-records\": {\n Container: {\n docs: \"A container with collections\",\n fields: {\n tags: \"array<string>\",\n numbers: \"list<double>\",\n },\n },\n },\n },\n ];\n\n const schema = convertStepsToIr(steps);\n const containerModel = schema.models[\"Container\"];\n expect(containerModel).toBeDefined();\n expect(containerModel?.type).toBe(\"record\");\n if (containerModel?.type !== \"record\") throw new Error(\"Expected record type\");\n const containerRecord = containerModel.record;\n\n // Check tags array field\n const tagsField = containerRecord.fields.find(f => f.key === \"tags\");\n expect(tagsField?.fieldType).toEqual({\n type: \"array\",\n array: {\n allowNullValue: false,\n value: {\n type: \"string\",\n string: {},\n },\n },\n });\n\n // Check numbers list field (treated as array)\n const numbersField = containerRecord.fields.find(f => f.key === \"numbers\");\n expect(numbersField?.fieldType).toEqual({\n type: \"array\",\n array: {\n allowNullValue: false,\n value: {\n type: \"double\",\n double: {},\n },\n },\n });\n });\n\n it(\"should convert record references to IR format\", () => {\n const steps: MigrationStep[] = [\n {\n \"add-records\": {\n Address: {\n fields: {\n street: \"string\",\n city: \"string\",\n },\n },\n Person: {\n fields: {\n name: \"string\",\n address: \"Address\",\n },\n },\n },\n },\n ];\n\n const schema = convertStepsToIr(steps);\n const personModel = schema.models[\"Person\"];\n expect(personModel).toBeDefined();\n expect(personModel?.type).toBe(\"record\");\n if (personModel?.type !== \"record\") throw new Error(\"Expected record type\");\n const personRecord = personModel.record;\n\n const addressField = personRecord.fields.find(f => f.key === \"address\");\n expect(addressField?.fieldType).toEqual(\n {\n type: \"value\",\n value: {\n type: \"modelRef\",\n modelRef: {\n modelTypes: [\"Address\"],\n },\n },\n } satisfies IFieldTypeUnion,\n );\n });\n\n it(\"should handle local fragments and extends\", () => {\n const steps: MigrationStep[] = [\n {\n \"local-fragment\": {\n position: {\n x: \"double\",\n y: \"double\",\n },\n },\n },\n {\n \"add-records\": {\n ObjectNode: {\n docs: \"A node with position\",\n extends: [\"position\"],\n fields: {\n label: \"string\",\n },\n },\n },\n },\n ];\n\n const schema = convertStepsToIr(steps);\n const objectNodeModel = schema.models[\"ObjectNode\"];\n expect(objectNodeModel).toBeDefined();\n expect(objectNodeModel?.type).toBe(\"record\");\n if (objectNodeModel?.type !== \"record\") throw new Error(\"Expected record type\");\n const objectNode = objectNodeModel.record;\n\n expect(objectNode.fields).toHaveLength(3);\n\n // Check inherited fields from fragment\n const xField = objectNode.fields.find(f => f.key === \"x\");\n expect(xField).toBeDefined();\n expect(xField?.fieldType).toEqual({\n type: \"value\",\n value: {\n type: \"double\",\n double: {},\n },\n });\n\n const yField = objectNode.fields.find(f => f.key === \"y\");\n expect(yField).toBeDefined();\n\n // Check own field\n const labelField = objectNode.fields.find(f => f.key === \"label\");\n expect(labelField).toBeDefined();\n });\n\n it(\"should convert unions to IR format\", () => {\n const steps: MigrationStep[] = [\n {\n \"add-records\": {\n ObjectNode: {\n fields: {\n label: \"string\",\n },\n },\n TextBox: {\n fields: {\n text: \"string\",\n },\n },\n },\n },\n {\n \"add-union\": {\n Node: {\n variants: {\n object: \"ObjectNode\",\n textBox: \"TextBox\",\n },\n },\n },\n },\n {\n \"add-records\": {\n Graph: {\n fields: {\n nodes: \"array<Node>\",\n },\n },\n },\n },\n ];\n\n const schema = convertStepsToIr(steps);\n const graphModel = schema.models[\"Graph\"];\n if (graphModel?.type !== \"record\") throw new Error(\"Expected record type\");\n const graphRecord = graphModel.record;\n\n const nodesField = graphRecord.fields.find(f => f.key === \"nodes\");\n expect(nodesField?.fieldType).toEqual({\n type: \"array\",\n array: {\n allowNullValue: false,\n value: {\n type: \"modelRef\",\n modelRef: {\n modelTypes: [\"Node\"],\n },\n },\n },\n });\n });\n\n it(\"should convert optional array types to IR format\", () => {\n const steps: MigrationStep[] = [\n {\n \"add-records\": {\n Tag: {\n fields: {\n name: \"string\",\n },\n },\n Container: {\n docs: \"A container with optional collections\",\n fields: {\n tags: \"optional<array<Tag>>\",\n labels: \"optional<array<string>>\",\n },\n },\n },\n },\n ];\n\n const schema = convertStepsToIr(steps);\n const containerModel = schema.models[\"Container\"];\n expect(containerModel).toBeDefined();\n expect(containerModel?.type).toBe(\"record\");\n if (containerModel?.type !== \"record\") throw new Error(\"Expected record type\");\n const containerRecord = containerModel.record;\n\n // Check optional array of references\n const tagsField = containerRecord.fields.find(f => f.key === \"tags\");\n expect(tagsField?.isOptional).toBe(true);\n expect(tagsField?.fieldType).toEqual({\n type: \"array\",\n array: {\n allowNullValue: false,\n value: {\n type: \"modelRef\",\n modelRef: {\n modelTypes: [\"Tag\"],\n },\n },\n },\n });\n\n // Check optional array of primitives\n const labelsField = containerRecord.fields.find(f => f.key === \"labels\");\n expect(labelsField?.isOptional).toBe(true);\n expect(labelsField?.fieldType).toEqual({\n type: \"array\",\n array: {\n allowNullValue: false,\n value: {\n type: \"string\",\n string: {},\n },\n },\n });\n });\n\n it(\"should handle modify-records step\", () => {\n const steps: MigrationStep[] = [\n {\n \"add-records\": {\n Person: {\n fields: {\n name: \"string\",\n },\n },\n },\n },\n {\n \"modify-records\": {\n Person: {\n \"add-fields\": {\n age: \"double\",\n email: \"optional<string>\",\n },\n },\n },\n },\n ];\n\n const schema = convertStepsToIr(steps);\n const personModel = schema.models[\"Person\"];\n expect(personModel).toBeDefined();\n expect(personModel?.type).toBe(\"record\");\n if (personModel?.type !== \"record\") throw new Error(\"Expected record type\");\n const personRecord = personModel.record;\n\n expect(personRecord.fields).toHaveLength(3);\n\n // Original field\n expect(personRecord.fields.find(f => f.key === \"name\")).toBeDefined();\n\n // Added fields\n expect(personRecord.fields.find(f => f.key === \"age\")).toBeDefined();\n\n const emailField = personRecord.fields.find(f => f.key === \"email\");\n expect(emailField).toBeDefined();\n expect(emailField?.isOptional).toBe(true);\n });\n});\n\ndescribe(\"parseMigrationSteps generic type validation\", () => {\n function stepsWithField(fieldType: string): unknown {\n return [{ \"add-records\": { Foo: { fields: { bar: fieldType } } } }];\n }\n\n it.each([\n \"optional<optional<string>>\",\n \"array<array<string>>\",\n \"list<list<double>>\",\n \"array<optional<string>>\",\n \"optional<array<array<string>>>\",\n \"optional<foo<string>>\",\n \"foo<string>\",\n ])(\"should reject invalid nested generic type: %s\", fieldType => {\n expect(() => parseMigrationSteps(stepsWithField(fieldType))).toThrow();\n });\n\n it.each([\n \"optional<string>\",\n \"optional<double>\",\n \"optional<MyType>\",\n \"array<string>\",\n \"list<double>\",\n \"set<MyType>\",\n \"map<string>\",\n \"optional<array<string>>\",\n \"optional<list<Tag>>\",\n \"optional<set<double>>\",\n \"optional<map<string>>\",\n ])(\"should accept valid generic type: %s\", fieldType => {\n expect(() => parseMigrationSteps(stepsWithField(fieldType))).not.toThrow();\n });\n});\n\ndescribe(\"convertSchemaToIr alias handling\", () => {\n it(\"preserves key = exportKey and name = declaredName for aliased records\", () => {\n const ir = convertSchemaToIr({\n FooAlias: defineRecord(\"Foo\", { docs: \"A foo\", fields: { x: P.String } }),\n });\n\n const model = ir.models[\"FooAlias\"];\n expect(model).toBeDefined();\n expect(model!.type).toBe(\"record\");\n if (model!.type === \"record\") {\n expect(model!.record.key).toBe(\"FooAlias\");\n expect(model!.record.name).toBe(\"Foo\");\n }\n });\n\n it(\"preserves key = exportKey and name = declaredName for aliased unions\", () => {\n const Circle = defineRecord(\"Circle\", { docs: \"c\", fields: { r: P.Double } });\n const ir = convertSchemaToIr({\n Circle,\n ShapeAlias: defineUnion(\"Shape\", {\n docs: \"A shape\",\n variants: { circle: Circle },\n }),\n });\n\n const model = ir.models[\"ShapeAlias\"];\n expect(model).toBeDefined();\n expect(model!.type).toBe(\"union\");\n if (model!.type === \"union\") {\n expect(model!.union.key).toBe(\"ShapeAlias\");\n expect(model!.union.name).toBe(\"Shape\");\n }\n });\n\n it(\"resolves field refs and union variants to export keys\", () => {\n const Inner = defineRecord(\"InnerModel\", { docs: \"i\", fields: { v: P.String } });\n const ir = convertSchemaToIr({\n InnerAlias: Inner,\n Outer: defineRecord(\"Outer\", {\n docs: \"o\",\n fields: { nested: Inner },\n }),\n });\n\n // The field ref should resolve to the export key \"InnerAlias\"\n const outerModel = ir.models[\"Outer\"]!;\n expect(outerModel.type).toBe(\"record\");\n if (outerModel.type === \"record\") {\n const nestedField = outerModel.record.fields.find((f: { key: string }) =>\n f.key === \"nested\"\n )!;\n expect(nestedField.fieldType.type).toBe(\"value\");\n if (nestedField.fieldType.type === \"value\") {\n expect(nestedField.fieldType.value.type).toBe(\"modelRef\");\n if (nestedField.fieldType.value.type === \"modelRef\") {\n expect(nestedField.fieldType.value.modelRef.modelTypes).toEqual([\"InnerAlias\"]);\n }\n }\n }\n });\n\n it(\"throws on duplicate declared model names\", () => {\n expect(() =>\n convertSchemaToIr({\n AliasA: defineRecord(\"Foo\", { docs: \"a\", fields: { x: P.String } }),\n AliasB: defineRecord(\"Foo\", { docs: \"b\", fields: { y: P.String } }),\n })\n ).toThrow(/Duplicate declared model name \"Foo\"/);\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -38,11 +38,19 @@ export function convertStepsToIr(steps, metadata) {
|
|
|
38
38
|
* Converts record and union definitions to Palantir IR format
|
|
39
39
|
*/
|
|
40
40
|
export function convertSchemaToIr(inputSchema, metadata) {
|
|
41
|
+
// Build a mapping from declared model name → export key so that union variant
|
|
42
|
+
// refs (which use declared model names) can be remapped to export keys.
|
|
43
|
+
const nameToExportKey = new Map();
|
|
44
|
+
for (const [exportKey, modelDef] of Object.entries(inputSchema)) {
|
|
45
|
+
const existing = nameToExportKey.get(modelDef.name);
|
|
46
|
+
!(existing == null) ? process.env.NODE_ENV !== "production" ? invariant(false, `Duplicate declared model name "${modelDef.name}": exported as both "${existing}" and "${exportKey}"`) : invariant(false) : void 0;
|
|
47
|
+
nameToExportKey.set(modelDef.name, exportKey);
|
|
48
|
+
}
|
|
41
49
|
const primaryModelKeys = [];
|
|
42
50
|
const models = new Map();
|
|
43
|
-
for (const modelDef of Object.
|
|
44
|
-
if (collectModels(modelDef, models)) {
|
|
45
|
-
primaryModelKeys.push(
|
|
51
|
+
for (const [exportKey, modelDef] of Object.entries(inputSchema)) {
|
|
52
|
+
if (collectModels(exportKey, modelDef, nameToExportKey, models)) {
|
|
53
|
+
primaryModelKeys.push(exportKey);
|
|
46
54
|
}
|
|
47
55
|
}
|
|
48
56
|
return {
|
|
@@ -53,45 +61,47 @@ export function convertSchemaToIr(inputSchema, metadata) {
|
|
|
53
61
|
models: Object.fromEntries(models)
|
|
54
62
|
};
|
|
55
63
|
}
|
|
56
|
-
function collectModels(modelDef, outModels) {
|
|
57
|
-
!!outModels.has(
|
|
64
|
+
function collectModels(exportKey, modelDef, nameToExportKey, outModels) {
|
|
65
|
+
!!outModels.has(exportKey) ? process.env.NODE_ENV !== "production" ? invariant(false, `Duplicate model definition: ${exportKey}`) : invariant(false) : void 0;
|
|
58
66
|
switch (modelDef.type) {
|
|
59
67
|
case "record":
|
|
60
68
|
{
|
|
61
|
-
outModels.set(
|
|
69
|
+
outModels.set(exportKey, IModelDef.record(convertRecordDefToIr(modelDef, exportKey, nameToExportKey)));
|
|
62
70
|
return true;
|
|
63
71
|
}
|
|
64
72
|
case "union":
|
|
65
73
|
{
|
|
66
|
-
outModels.set(
|
|
74
|
+
outModels.set(exportKey, IModelDef.union(convertUnionDefToIr(modelDef, exportKey, nameToExportKey)));
|
|
67
75
|
return true;
|
|
68
76
|
}
|
|
69
77
|
default:
|
|
70
78
|
assertNever(modelDef);
|
|
71
79
|
}
|
|
72
80
|
}
|
|
73
|
-
export function convertRecordDefToIr(recordDef) {
|
|
81
|
+
export function convertRecordDefToIr(recordDef, exportKey, nameToExportKey) {
|
|
82
|
+
const key = exportKey ?? recordDef.name;
|
|
74
83
|
const fields = Object.entries(recordDef.fields).map(([fieldKey, fieldType]) => ({
|
|
75
84
|
key: fieldKey,
|
|
76
85
|
name: fieldKey,
|
|
77
86
|
description: undefined,
|
|
78
|
-
fieldType: convertTypeToFieldTypeUnion(fieldType),
|
|
87
|
+
fieldType: convertTypeToFieldTypeUnion(fieldType, nameToExportKey),
|
|
79
88
|
metadata: {
|
|
80
89
|
addedInVersion: 1
|
|
81
90
|
},
|
|
82
91
|
isOptional: fieldType.type === "optional" ? true : undefined
|
|
83
92
|
}));
|
|
84
93
|
return {
|
|
85
|
-
key
|
|
94
|
+
key,
|
|
86
95
|
name: recordDef.name,
|
|
87
96
|
description: recordDef.docs ?? undefined,
|
|
88
97
|
fields
|
|
89
98
|
};
|
|
90
99
|
}
|
|
91
|
-
export function convertUnionDefToIr(unionDef) {
|
|
92
|
-
const
|
|
100
|
+
export function convertUnionDefToIr(unionDef, exportKey, nameToExportKey) {
|
|
101
|
+
const key = exportKey ?? unionDef.name;
|
|
102
|
+
const variantEntries = Object.entries(unionDef.variants).map(([variantName, modelRef]) => [variantName, nameToExportKey?.get(modelRef.name) ?? modelRef.name]);
|
|
93
103
|
return {
|
|
94
|
-
key
|
|
104
|
+
key,
|
|
95
105
|
name: unionDef.name,
|
|
96
106
|
description: unionDef.docs,
|
|
97
107
|
discriminant: unionDef.discriminant,
|
|
@@ -103,23 +113,22 @@ export function convertUnionDefToIr(unionDef) {
|
|
|
103
113
|
}
|
|
104
114
|
|
|
105
115
|
// TODO: rename to convertSchemaTypeToFieldTypeUnion
|
|
106
|
-
export function convertTypeToFieldTypeUnion(schemaType) {
|
|
116
|
+
export function convertTypeToFieldTypeUnion(schemaType, nameToExportKey) {
|
|
107
117
|
switch (schemaType.type) {
|
|
108
118
|
case "array":
|
|
109
119
|
{
|
|
120
|
+
// P.Array.items is typed as TypeBase due to the generic; narrow via type field
|
|
121
|
+
const items = schemaType.items;
|
|
122
|
+
const allowNullValue = items.type === "optional";
|
|
123
|
+
const elementType = allowNullValue ? items.item : items;
|
|
110
124
|
return IFieldTypeUnion.array({
|
|
111
|
-
allowNullValue
|
|
112
|
-
value: convertTypeToFieldValueUnion(
|
|
125
|
+
allowNullValue,
|
|
126
|
+
value: convertTypeToFieldValueUnion(elementType, nameToExportKey)
|
|
113
127
|
});
|
|
114
128
|
}
|
|
115
|
-
// TODO: have map/set types in document-schema-api
|
|
116
|
-
|
|
117
129
|
case "optional":
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
return convertTypeToFieldTypeUnion(schemaType.item);
|
|
122
|
-
}
|
|
130
|
+
// Optional flag is handled at field level; unwrap and recurse on inner type
|
|
131
|
+
return convertTypeToFieldTypeUnion(schemaType.item, nameToExportKey);
|
|
123
132
|
case "boolean":
|
|
124
133
|
case "docRef":
|
|
125
134
|
case "double":
|
|
@@ -129,16 +138,15 @@ export function convertTypeToFieldTypeUnion(schemaType) {
|
|
|
129
138
|
case "string":
|
|
130
139
|
case "unknown":
|
|
131
140
|
case "userRef":
|
|
132
|
-
return IFieldTypeUnion.value(convertTypeToFieldValueUnion(schemaType));
|
|
141
|
+
return IFieldTypeUnion.value(convertTypeToFieldValueUnion(schemaType, nameToExportKey));
|
|
133
142
|
default:
|
|
134
143
|
assertNever(schemaType);
|
|
135
144
|
}
|
|
136
145
|
}
|
|
137
|
-
function convertTypeToFieldValueUnion(schemaType) {
|
|
146
|
+
function convertTypeToFieldValueUnion(schemaType, nameToExportKey) {
|
|
138
147
|
switch (schemaType.type) {
|
|
139
148
|
case "array":
|
|
140
|
-
|
|
141
|
-
process.env.NODE_ENV !== "production" ? invariant(false, `Collection type passed to convertTypeToFieldValueUnion: ${schemaType.type}`) : invariant(false);
|
|
149
|
+
throw new Error("Nested arrays are not supported in the IR. " + "Wrap the inner array in a record instead.");
|
|
142
150
|
case "boolean":
|
|
143
151
|
return IFieldValueUnion.boolean({});
|
|
144
152
|
case "docRef":
|
|
@@ -156,16 +164,16 @@ function convertTypeToFieldValueUnion(schemaType) {
|
|
|
156
164
|
objectTypeRids: []
|
|
157
165
|
});
|
|
158
166
|
case "optional":
|
|
167
|
+
// Nested optional — unwrap and continue
|
|
168
|
+
// TODO: probably warn? maybe throw
|
|
169
|
+
return convertTypeToFieldValueUnion(schemaType.item, nameToExportKey);
|
|
170
|
+
case "ref":
|
|
159
171
|
{
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
172
|
+
const modelKey = nameToExportKey?.get(schemaType.name) ?? schemaType.name;
|
|
173
|
+
return IFieldValueUnion.modelRef({
|
|
174
|
+
modelTypes: [modelKey]
|
|
175
|
+
});
|
|
164
176
|
}
|
|
165
|
-
case "ref":
|
|
166
|
-
return IFieldValueUnion.modelRef({
|
|
167
|
-
modelTypes: [schemaType.name]
|
|
168
|
-
});
|
|
169
177
|
case "string":
|
|
170
178
|
return IFieldValueUnion.string({});
|
|
171
179
|
case "unknown":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertStepsToIr.js","names":["invariant","IFieldTypeUnion","IFieldValueUnion","IModelDef","assertNever","convertStepsToSchema","convertStepsToIr","steps","metadata","recordDefinitions","unionDefinitions","schema","Object","fromEntries","map","def","name","convertSchemaToIr","inputSchema","primaryModelKeys","models","Map","modelDef","values","collectModels","push","description","version","outModels","has","process","env","NODE_ENV","type","set","record","convertRecordDefToIr","union","convertUnionDefToIr","recordDef","fields","entries","fieldKey","fieldType","key","undefined","convertTypeToFieldTypeUnion","addedInVersion","isOptional","docs","unionDef","variantEntries","variants","variantName","modelRef","discriminant","schemaType","array","allowNullValue","value","convertTypeToFieldValueUnion","items","item","boolean","docRef","documentTypeRids","double","mediaRef","object","interfaceTypeRids","objectTypeRids","modelTypes","string","unmanagedJson","userRef"],"sources":["convertStepsToIr.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 * as P from \"@palantir/pack.schema\";\nimport invariant from \"tiny-invariant\";\nimport type {\n IModelTypeKey,\n IUnionVariantKey,\n} from \"../../lib/pack-docschema-api/pack-docschema-api\";\nimport type {\n IFieldDef,\n IRealTimeDocumentSchema,\n IRecordDef,\n IUnionDef,\n} from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport {\n IFieldTypeUnion,\n IFieldValueUnion,\n IModelDef,\n} from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { assertNever } from \"../assertNever.js\";\nimport { convertStepsToSchema } from \"./convertStepsToSchema.js\";\nimport type { MigrationStep } from \"./parseMigrationSteps.js\";\n\nexport interface SchemaMetadata {\n readonly name?: string;\n readonly description?: string;\n readonly version?: number;\n}\n\n/**\n * Converts migration steps to Palantir IR format\n */\nexport function convertStepsToIr(\n steps: readonly MigrationStep[],\n metadata?: SchemaMetadata,\n): IRealTimeDocumentSchema {\n // First convert steps to document-schema-api format\n const { recordDefinitions, unionDefinitions } = convertStepsToSchema(steps as MigrationStep[]);\n\n const schema = {\n ...Object.fromEntries(recordDefinitions.map(def => [def.name, def])),\n ...Object.fromEntries(unionDefinitions.map(def => [def.name, def])),\n };\n\n return convertSchemaToIr(schema, metadata);\n}\n\n/**\n * Converts record and union definitions to Palantir IR format\n */\nexport function convertSchemaToIr(\n inputSchema: P.Schema<P.ReturnedSchema>,\n metadata?: SchemaMetadata,\n): IRealTimeDocumentSchema {\n const primaryModelKeys: IModelTypeKey[] = [];\n const models = new Map<IModelTypeKey, IModelDef>();\n\n for (const modelDef of Object.values(inputSchema)) {\n if (collectModels(modelDef, models)) {\n primaryModelKeys.push(modelDef.name);\n }\n }\n\n return {\n name: metadata?.name ?? \"Generated Schema\",\n description: metadata?.description ?? \"Schema generated from migration steps\",\n version: metadata?.version ?? 1,\n primaryModelKeys,\n models: Object.fromEntries(models),\n };\n}\n\nfunction collectModels(\n modelDef: P.ModelDef,\n outModels: Map<IModelTypeKey, IModelDef>,\n): boolean {\n invariant(\n !outModels.has(modelDef.name),\n `Duplicate model definition: ${modelDef.name}`,\n );\n\n switch (modelDef.type) {\n case \"record\": {\n outModels.set(modelDef.name, IModelDef.record(convertRecordDefToIr(modelDef)));\n return true;\n }\n case \"union\": {\n outModels.set(modelDef.name, IModelDef.union(convertUnionDefToIr(modelDef)));\n return true;\n }\n default:\n assertNever(modelDef);\n }\n}\n\nexport function convertRecordDefToIr(recordDef: P.RecordDef): IRecordDef {\n const fields = Object.entries(recordDef.fields).map(([fieldKey, fieldType]): IFieldDef => ({\n key: fieldKey,\n name: fieldKey,\n description: undefined,\n fieldType: convertTypeToFieldTypeUnion(fieldType),\n metadata: { addedInVersion: 1 },\n isOptional: fieldType.type === \"optional\" ? true : undefined,\n }));\n\n return {\n key: recordDef.name,\n name: recordDef.name,\n description: recordDef.docs ?? undefined,\n fields,\n };\n}\n\nexport function convertUnionDefToIr(unionDef: P.UnionDef): IUnionDef {\n const variantEntries = Object.entries(unionDef.variants).map((\n [variantName, modelRef],\n ) =>\n [\n variantName as IUnionVariantKey,\n modelRef.name as IModelTypeKey,\n ] as const\n );\n\n return {\n key: unionDef.name,\n name: unionDef.name,\n description: unionDef.docs,\n discriminant: unionDef.discriminant,\n variants: Object.fromEntries(variantEntries),\n metadata: { addedInVersion: 1 },\n };\n}\n\n// TODO: rename to convertSchemaTypeToFieldTypeUnion\nexport function convertTypeToFieldTypeUnion(schemaType: P.Type): IFieldTypeUnion {\n switch (schemaType.type) {\n case \"array\": {\n const arrayType = schemaType as P.Array;\n return IFieldTypeUnion.array({\n allowNullValue: false,\n value: convertTypeToFieldValueUnion(arrayType.items as P.Type),\n });\n }\n // TODO: have map/set types in document-schema-api\n\n case \"optional\": {\n // Optional flag is handled at field level, but we need to unwrap the inner type\n const optionalType = schemaType as P.Optional;\n return convertTypeToFieldTypeUnion(optionalType.item as P.Type);\n }\n\n case \"boolean\":\n case \"docRef\":\n case \"double\":\n case \"mediaRef\":\n case \"objectRef\":\n case \"ref\":\n case \"string\":\n case \"unknown\":\n case \"userRef\":\n return IFieldTypeUnion.value(convertTypeToFieldValueUnion(schemaType));\n\n default:\n assertNever(schemaType);\n }\n}\n\nfunction convertTypeToFieldValueUnion(schemaType: P.Type): IFieldValueUnion {\n switch (schemaType.type) {\n case \"array\":\n // TODO: fix the argument types so these aren't possible\n invariant(\n false,\n `Collection type passed to convertTypeToFieldValueUnion: ${schemaType.type}`,\n );\n\n case \"boolean\":\n return IFieldValueUnion.boolean({});\n\n case \"docRef\":\n return IFieldValueUnion.docRef({\n documentTypeRids: [], // FIXME: confirm whether we will use rids in the deployed schema.\n });\n\n case \"double\":\n return IFieldValueUnion.double({});\n\n case \"mediaRef\":\n return IFieldValueUnion.mediaRef({});\n\n case \"objectRef\":\n return IFieldValueUnion.object({\n // FIXME: confirm whether we will use rids in the deployed schema.\n interfaceTypeRids: [],\n objectTypeRids: [],\n });\n\n case \"optional\": {\n // If we get here, it means we have nested optionals - unwrap and continue\n // TODO: probably warn? maybe throw\n const optionalType = schemaType as P.Optional;\n return convertTypeToFieldValueUnion(optionalType.item as P.Type);\n }\n\n case \"ref\":\n return IFieldValueUnion.modelRef({\n modelTypes: [schemaType.name as IModelTypeKey],\n });\n\n case \"string\":\n return IFieldValueUnion.string({});\n\n case \"unknown\":\n return IFieldValueUnion.unmanagedJson({});\n\n case \"userRef\":\n return IFieldValueUnion.userRef({});\n\n default:\n assertNever(schemaType);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"convertStepsToIr.js","names":["invariant","IFieldTypeUnion","IFieldValueUnion","IModelDef","assertNever","convertStepsToSchema","convertStepsToIr","steps","metadata","recordDefinitions","unionDefinitions","schema","Object","fromEntries","map","def","name","convertSchemaToIr","inputSchema","nameToExportKey","Map","exportKey","modelDef","entries","existing","get","process","env","NODE_ENV","set","primaryModelKeys","models","collectModels","push","description","version","outModels","has","type","record","convertRecordDefToIr","union","convertUnionDefToIr","recordDef","key","fields","fieldKey","fieldType","undefined","convertTypeToFieldTypeUnion","addedInVersion","isOptional","docs","unionDef","variantEntries","variants","variantName","modelRef","discriminant","schemaType","items","allowNullValue","elementType","item","array","value","convertTypeToFieldValueUnion","Error","boolean","docRef","documentTypeRids","double","mediaRef","object","interfaceTypeRids","objectTypeRids","modelKey","modelTypes","string","unmanagedJson","userRef"],"sources":["convertStepsToIr.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 * as P from \"@palantir/pack.schema\";\nimport invariant from \"tiny-invariant\";\nimport type {\n IModelTypeKey,\n IUnionVariantKey,\n} from \"../../lib/pack-docschema-api/pack-docschema-api\";\nimport type {\n IFieldDef,\n IRealTimeDocumentSchema,\n IRecordDef,\n IUnionDef,\n} from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport {\n IFieldTypeUnion,\n IFieldValueUnion,\n IModelDef,\n} from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { assertNever } from \"../assertNever.js\";\nimport { convertStepsToSchema } from \"./convertStepsToSchema.js\";\nimport type { MigrationStep } from \"./parseMigrationSteps.js\";\n\nexport interface SchemaMetadata {\n readonly name?: string;\n readonly description?: string;\n readonly version?: number;\n}\n\n/**\n * Converts migration steps to Palantir IR format\n */\nexport function convertStepsToIr(\n steps: readonly MigrationStep[],\n metadata?: SchemaMetadata,\n): IRealTimeDocumentSchema {\n // First convert steps to document-schema-api format\n const { recordDefinitions, unionDefinitions } = convertStepsToSchema(steps as MigrationStep[]);\n\n const schema = {\n ...Object.fromEntries(recordDefinitions.map(def => [def.name, def])),\n ...Object.fromEntries(unionDefinitions.map(def => [def.name, def])),\n };\n\n return convertSchemaToIr(schema, metadata);\n}\n\n/**\n * Converts record and union definitions to Palantir IR format\n */\nexport function convertSchemaToIr(\n inputSchema: P.Schema<P.ReturnedSchema>,\n metadata?: SchemaMetadata,\n): IRealTimeDocumentSchema {\n // Build a mapping from declared model name → export key so that union variant\n // refs (which use declared model names) can be remapped to export keys.\n const nameToExportKey = new Map<string, string>();\n for (const [exportKey, modelDef] of Object.entries(inputSchema)) {\n const existing = nameToExportKey.get(modelDef.name);\n invariant(\n existing == null,\n `Duplicate declared model name \"${modelDef.name}\": exported as both \"${existing}\" and \"${exportKey}\"`,\n );\n nameToExportKey.set(modelDef.name, exportKey);\n }\n\n const primaryModelKeys: IModelTypeKey[] = [];\n const models = new Map<IModelTypeKey, IModelDef>();\n\n for (const [exportKey, modelDef] of Object.entries(inputSchema)) {\n if (collectModels(exportKey, modelDef, nameToExportKey, models)) {\n primaryModelKeys.push(exportKey);\n }\n }\n\n return {\n name: metadata?.name ?? \"Generated Schema\",\n description: metadata?.description ?? \"Schema generated from migration steps\",\n version: metadata?.version ?? 1,\n primaryModelKeys,\n models: Object.fromEntries(models),\n };\n}\n\nfunction collectModels(\n exportKey: string,\n modelDef: P.ModelDef,\n nameToExportKey: Map<string, string>,\n outModels: Map<IModelTypeKey, IModelDef>,\n): boolean {\n invariant(\n !outModels.has(exportKey),\n `Duplicate model definition: ${exportKey}`,\n );\n\n switch (modelDef.type) {\n case \"record\": {\n outModels.set(\n exportKey,\n IModelDef.record(convertRecordDefToIr(modelDef, exportKey, nameToExportKey)),\n );\n return true;\n }\n case \"union\": {\n outModels.set(\n exportKey,\n IModelDef.union(convertUnionDefToIr(modelDef, exportKey, nameToExportKey)),\n );\n return true;\n }\n default:\n assertNever(modelDef);\n }\n}\n\nexport function convertRecordDefToIr(\n recordDef: P.RecordDef,\n exportKey?: string,\n nameToExportKey?: Map<string, string>,\n): IRecordDef {\n const key = exportKey ?? recordDef.name;\n const fields = Object.entries(recordDef.fields).map(([fieldKey, fieldType]): IFieldDef => ({\n key: fieldKey,\n name: fieldKey,\n description: undefined,\n fieldType: convertTypeToFieldTypeUnion(fieldType, nameToExportKey),\n metadata: { addedInVersion: 1 },\n isOptional: fieldType.type === \"optional\" ? true : undefined,\n }));\n\n return {\n key,\n name: recordDef.name,\n description: recordDef.docs ?? undefined,\n fields,\n };\n}\n\nexport function convertUnionDefToIr(\n unionDef: P.UnionDef,\n exportKey?: string,\n nameToExportKey?: Map<string, string>,\n): IUnionDef {\n const key = exportKey ?? unionDef.name;\n const variantEntries = Object.entries(unionDef.variants).map((\n [variantName, modelRef],\n ) =>\n [\n variantName as IUnionVariantKey,\n (nameToExportKey?.get(modelRef.name) ?? modelRef.name) as IModelTypeKey,\n ] as const\n );\n\n return {\n key,\n name: unionDef.name,\n description: unionDef.docs,\n discriminant: unionDef.discriminant,\n variants: Object.fromEntries(variantEntries),\n metadata: { addedInVersion: 1 },\n };\n}\n\n// TODO: rename to convertSchemaTypeToFieldTypeUnion\nexport function convertTypeToFieldTypeUnion(\n schemaType: P.Type,\n nameToExportKey?: Map<string, string>,\n): IFieldTypeUnion {\n switch (schemaType.type) {\n case \"array\": {\n // P.Array.items is typed as TypeBase due to the generic; narrow via type field\n const items = schemaType.items as P.Type;\n const allowNullValue = items.type === \"optional\";\n const elementType: P.Type = allowNullValue ? (items as P.Optional).item as P.Type : items;\n return IFieldTypeUnion.array({\n allowNullValue,\n value: convertTypeToFieldValueUnion(elementType, nameToExportKey),\n });\n }\n\n case \"optional\":\n // Optional flag is handled at field level; unwrap and recurse on inner type\n return convertTypeToFieldTypeUnion(schemaType.item as P.Type, nameToExportKey);\n\n case \"boolean\":\n case \"docRef\":\n case \"double\":\n case \"mediaRef\":\n case \"objectRef\":\n case \"ref\":\n case \"string\":\n case \"unknown\":\n case \"userRef\":\n return IFieldTypeUnion.value(convertTypeToFieldValueUnion(schemaType, nameToExportKey));\n\n default:\n assertNever(schemaType);\n }\n}\n\nfunction convertTypeToFieldValueUnion(\n schemaType: P.Type,\n nameToExportKey?: Map<string, string>,\n): IFieldValueUnion {\n switch (schemaType.type) {\n case \"array\":\n throw new Error(\n \"Nested arrays are not supported in the IR. \"\n + \"Wrap the inner array in a record instead.\",\n );\n\n case \"boolean\":\n return IFieldValueUnion.boolean({});\n\n case \"docRef\":\n return IFieldValueUnion.docRef({\n documentTypeRids: [], // FIXME: confirm whether we will use rids in the deployed schema.\n });\n\n case \"double\":\n return IFieldValueUnion.double({});\n\n case \"mediaRef\":\n return IFieldValueUnion.mediaRef({});\n\n case \"objectRef\":\n return IFieldValueUnion.object({\n // FIXME: confirm whether we will use rids in the deployed schema.\n interfaceTypeRids: [],\n objectTypeRids: [],\n });\n\n case \"optional\":\n // Nested optional — unwrap and continue\n // TODO: probably warn? maybe throw\n return convertTypeToFieldValueUnion(schemaType.item as P.Type, nameToExportKey);\n\n case \"ref\": {\n const modelKey = nameToExportKey?.get(schemaType.name) ?? schemaType.name;\n return IFieldValueUnion.modelRef({ modelTypes: [modelKey as IModelTypeKey] });\n }\n\n case \"string\":\n return IFieldValueUnion.string({});\n\n case \"unknown\":\n return IFieldValueUnion.unmanagedJson({});\n\n case \"userRef\":\n return IFieldValueUnion.userRef({});\n\n default:\n assertNever(schemaType);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildPrefixRewriteFetch.test.d.ts","sourceRoot":"","sources":["../../../../../src/commands/asset/__tests__/buildPrefixRewriteFetch.test.ts"],"names":[],"mappings":""}
|
|
@@ -3,7 +3,22 @@ interface AssetDeployOptions {
|
|
|
3
3
|
readonly baseUrl: string;
|
|
4
4
|
readonly auth: string;
|
|
5
5
|
readonly ontologyRid: string;
|
|
6
|
+
readonly firstPartyPrefix?: string;
|
|
6
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* The set of API prefixes that `--first-party-prefix` is allowed to rewrite to.
|
|
10
|
+
* Only `/api/gotham` is supported today; expand this list as new gateways are added.
|
|
11
|
+
*/
|
|
12
|
+
export declare const ALLOWED_FIRST_PARTY_PREFIXES: readonly ["/api/gotham"];
|
|
13
|
+
/**
|
|
14
|
+
* Builds a fetch wrapper that rewrites the OSDK client's `/api/...` requests
|
|
15
|
+
* to a different prefix (e.g. `/api/gotham`). Used for stacks where the
|
|
16
|
+
* endpoint is served behind a different gateway path instead
|
|
17
|
+
* of the default `/api` route.
|
|
18
|
+
*
|
|
19
|
+
* Throws if `prefix` is not one of {@link ALLOWED_FIRST_PARTY_PREFIXES}.
|
|
20
|
+
*/
|
|
21
|
+
export declare function buildPrefixRewriteFetch(prefix: string): typeof globalThis.fetch;
|
|
7
22
|
/** Useful for manually deploying a document type during development to test schema changes. */
|
|
8
23
|
export declare function assetDeployHandler(options: AssetDeployOptions): Promise<void>;
|
|
9
24
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assetDeployHandler.d.ts","sourceRoot":"","sources":["../../../../src/commands/asset/assetDeployHandler.ts"],"names":[],"mappings":"AAyBA,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"assetDeployHandler.d.ts","sourceRoot":"","sources":["../../../../src/commands/asset/assetDeployHandler.ts"],"names":[],"mappings":"AAyBA,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAID;;;GAGG;AACH,eAAO,MAAM,4BAA4B,0BAA2B,CAAC;AAErE;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,UAAU,CAAC,KAAK,CAoB/E;AAED,+FAA+F;AAC/F,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDnF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerAssetCommands.d.ts","sourceRoot":"","sources":["../../../../src/commands/asset/registerAssetCommands.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"registerAssetCommands.d.ts","sourceRoot":"","sources":["../../../../src/commands/asset/registerAssetCommands.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiB5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"irGenTypesHandler.d.ts","sourceRoot":"","sources":["../../../../src/commands/ir/irGenTypesHandler.ts"],"names":[],"mappings":"AAsBA,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAQD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBjF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerIrCommands.d.ts","sourceRoot":"","sources":["../../../../src/commands/ir/registerIrCommands.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"registerIrCommands.d.ts","sourceRoot":"","sources":["../../../../src/commands/ir/registerIrCommands.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqEzD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerSchemaCommands.d.ts","sourceRoot":"","sources":["../../../../src/commands/schema/registerSchemaCommands.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"registerSchemaCommands.d.ts","sourceRoot":"","sources":["../../../../src/commands/schema/registerSchemaCommands.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkB7D"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
interface SchemaIrOptions {
|
|
2
|
+
input: string;
|
|
3
|
+
output: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Resolve a TypeScript schema module to a versioned IR chain JSON file.
|
|
7
|
+
*
|
|
8
|
+
* The output is a `{ latestVersion, chain }` payload where each entry is
|
|
9
|
+
* `{ version, ir, migrations? }` and `ir` is a single-version
|
|
10
|
+
* `IRealTimeDocumentSchema`. This is the input format for `ir gen-types`.
|
|
11
|
+
*
|
|
12
|
+
* Note: this is distinct from the legacy single-version IR JSON consumed by
|
|
13
|
+
* `ir deploy` / `ir asset` / `ir zod`, which is a bare `IRealTimeDocumentSchema`
|
|
14
|
+
* (no chain, no migrations). Tools that previously read that format should
|
|
15
|
+
* pick the entry matching `latestVersion` from `chain` and use its `ir` field.
|
|
16
|
+
*/
|
|
17
|
+
export declare function schemaIrHandler(options: SchemaIrOptions): Promise<void>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=schemaIrHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemaIrHandler.d.ts","sourceRoot":"","sources":["../../../../src/commands/schema/schemaIrHandler.ts"],"names":[],"mappings":"AAuBA,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB7E"}
|
package/build/types/index.d.ts
CHANGED
|
@@ -4,13 +4,8 @@ export { registerSchemaCommands } from "./commands/schema/registerSchemaCommands
|
|
|
4
4
|
export { registerStepsCommands } from "./commands/steps/registerStepsCommands.js";
|
|
5
5
|
export { generateZodSchemasFromIr } from "./utils/ir/generateZodSchemasFromIr.js";
|
|
6
6
|
export { convertSchemaToSteps, convertStepsToYamlString, } from "./utils/schema/convertSchemaToSteps.js";
|
|
7
|
-
export {
|
|
8
|
-
export { generateModelMetadataFromSchema, type ModelMetadataOutput, } from "./utils/schema/generateModelMetadataFromSchema.js";
|
|
9
|
-
export { generateScopeFromSchema } from "./utils/schema/generateScopeFromSchema.js";
|
|
7
|
+
export { type ModelMetadataOutput } from "./utils/schema/generateModelMetadataFromSchema.js";
|
|
10
8
|
export { generateTypesFromSchema } from "./utils/schema/generateTypesFromSchema.js";
|
|
11
|
-
export { generateVersionedTypesFromSchema } from "./utils/schema/generateVersionedTypesFromSchema.js";
|
|
12
|
-
export { generateVersionedZodFromSchema } from "./utils/schema/generateVersionedZodFromSchema.js";
|
|
13
|
-
export { generateVersionsFromSchema } from "./utils/schema/generateVersionsFromSchema.js";
|
|
14
9
|
export { generateZodFromSchema } from "./utils/schema/generateZodFromSchema.js";
|
|
15
10
|
export { convertRecordDefToIr, convertSchemaToIr, convertStepsToIr, convertTypeToFieldTypeUnion, type SchemaMetadata, } from "./utils/steps/convertStepsToIr.js";
|
|
16
11
|
export { generateZodFromStepsSchema } from "./utils/steps/generateZodFromStepsSchema.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EACL,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EACL,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,2BAA2B,EAC3B,KAAK,cAAc,GACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC"}
|