@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.
Files changed (148) hide show
  1. package/build/esm/commands/asset/__tests__/buildPrefixRewriteFetch.test.js +85 -0
  2. package/build/esm/commands/asset/__tests__/buildPrefixRewriteFetch.test.js.map +1 -0
  3. package/build/esm/commands/asset/assetDeployHandler.js +36 -1
  4. package/build/esm/commands/asset/assetDeployHandler.js.map +1 -1
  5. package/build/esm/commands/asset/registerAssetCommands.js +1 -1
  6. package/build/esm/commands/asset/registerAssetCommands.js.map +1 -1
  7. package/build/esm/commands/ir/irGenTypesHandler.js +49 -0
  8. package/build/esm/commands/ir/irGenTypesHandler.js.map +1 -0
  9. package/build/esm/commands/ir/registerIrCommands.js +2 -0
  10. package/build/esm/commands/ir/registerIrCommands.js.map +1 -1
  11. package/build/esm/commands/schema/registerSchemaCommands.js +2 -2
  12. package/build/esm/commands/schema/registerSchemaCommands.js.map +1 -1
  13. package/build/esm/commands/schema/schemaIrHandler.js +56 -0
  14. package/build/esm/commands/schema/schemaIrHandler.js.map +1 -0
  15. package/build/esm/index.js +0 -6
  16. package/build/esm/index.js.map +1 -1
  17. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js +1 -1
  18. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js.map +1 -1
  19. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js +1 -1
  20. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js.map +1 -1
  21. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js +1 -1
  22. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js.map +1 -1
  23. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js +1 -1
  24. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js.map +1 -1
  25. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js +1 -1
  26. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js.map +1 -1
  27. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js +1 -1
  28. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js.map +1 -1
  29. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js +1 -1
  30. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js.map +1 -1
  31. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js +1 -1
  32. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js.map +1 -1
  33. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js +1 -1
  34. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js.map +1 -1
  35. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js +1 -1
  36. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js.map +1 -1
  37. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js +1 -1
  38. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js.map +1 -1
  39. package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js +23 -0
  40. package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js.map +1 -1
  41. package/build/esm/utils/ir/irFieldHelpers.js +383 -0
  42. package/build/esm/utils/ir/irFieldHelpers.js.map +1 -0
  43. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/single-version.js.map +1 -1
  44. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/three-version-chain.js.map +1 -1
  45. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/two-version.js.map +1 -1
  46. package/build/esm/utils/schema/__tests__/convertSchemaToSteps.test.js +13 -0
  47. package/build/esm/utils/schema/__tests__/convertSchemaToSteps.test.js.map +1 -1
  48. package/build/esm/utils/schema/__tests__/fixtures.js +76 -5
  49. package/build/esm/utils/schema/__tests__/fixtures.js.map +1 -1
  50. package/build/esm/utils/schema/__tests__/generateInternalFromSchema.test.js +19 -7
  51. package/build/esm/utils/schema/__tests__/generateInternalFromSchema.test.js.map +1 -1
  52. package/build/esm/utils/schema/__tests__/generateModelMetadataFromSchema.test.js +7 -6
  53. package/build/esm/utils/schema/__tests__/generateModelMetadataFromSchema.test.js.map +1 -1
  54. package/build/esm/utils/schema/__tests__/generateScopeFromSchema.test.js +6 -5
  55. package/build/esm/utils/schema/__tests__/generateScopeFromSchema.test.js.map +1 -1
  56. package/build/esm/utils/schema/__tests__/generateVersionedTypesFromSchema.test.js +19 -10
  57. package/build/esm/utils/schema/__tests__/generateVersionedTypesFromSchema.test.js.map +1 -1
  58. package/build/esm/utils/schema/__tests__/generateVersionedZodFromSchema.test.js +15 -10
  59. package/build/esm/utils/schema/__tests__/generateVersionedZodFromSchema.test.js.map +1 -1
  60. package/build/esm/utils/schema/__tests__/generateVersionsFromSchema.test.js +6 -5
  61. package/build/esm/utils/schema/__tests__/generateVersionsFromSchema.test.js.map +1 -1
  62. package/build/esm/utils/schema/convertSchemaToSteps.js +6 -0
  63. package/build/esm/utils/schema/convertSchemaToSteps.js.map +1 -1
  64. package/build/esm/utils/schema/generateIndexFromSchema.js +15 -13
  65. package/build/esm/utils/schema/generateIndexFromSchema.js.map +1 -1
  66. package/build/esm/utils/schema/generateInternalFromSchema.js +68 -184
  67. package/build/esm/utils/schema/generateInternalFromSchema.js.map +1 -1
  68. package/build/esm/utils/schema/generateModelMetadataFromSchema.js +46 -69
  69. package/build/esm/utils/schema/generateModelMetadataFromSchema.js.map +1 -1
  70. package/build/esm/utils/schema/generateScopeFromSchema.js +29 -33
  71. package/build/esm/utils/schema/generateScopeFromSchema.js.map +1 -1
  72. package/build/esm/utils/schema/generateTypesFromSchema.js +9 -1
  73. package/build/esm/utils/schema/generateTypesFromSchema.js.map +1 -1
  74. package/build/esm/utils/schema/generateVersionedTypesFromSchema.js +61 -155
  75. package/build/esm/utils/schema/generateVersionedTypesFromSchema.js.map +1 -1
  76. package/build/esm/utils/schema/generateVersionedZodFromSchema.js +58 -94
  77. package/build/esm/utils/schema/generateVersionedZodFromSchema.js.map +1 -1
  78. package/build/esm/utils/schema/generateVersionsFromSchema.js +7 -5
  79. package/build/esm/utils/schema/generateVersionsFromSchema.js.map +1 -1
  80. package/build/esm/utils/schema/loadSchemaModule.js +53 -0
  81. package/build/esm/utils/schema/loadSchemaModule.js.map +1 -0
  82. package/build/esm/utils/schema/resolveSchemaChain.js +59 -9
  83. package/build/esm/utils/schema/resolveSchemaChain.js.map +1 -1
  84. package/build/esm/utils/schema/runtimeSchema.js +0 -27
  85. package/build/esm/utils/schema/runtimeSchema.js.map +1 -1
  86. package/build/esm/utils/schema/writeAllSdkFiles.js +111 -0
  87. package/build/esm/utils/schema/writeAllSdkFiles.js.map +1 -0
  88. package/build/esm/utils/steps/__tests__/__snapshots__/types/arrayFields.js.map +1 -1
  89. package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js +1 -1
  90. package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js.map +1 -1
  91. package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js +1 -1
  92. package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js.map +1 -1
  93. package/build/esm/utils/steps/__tests__/__snapshots__/types/refTypes.js.map +1 -1
  94. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleRecord.js.map +1 -1
  95. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js +1 -1
  96. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js.map +1 -1
  97. package/build/esm/utils/steps/__tests__/convertStepsToIr.test.js +93 -1
  98. package/build/esm/utils/steps/__tests__/convertStepsToIr.test.js.map +1 -1
  99. package/build/esm/utils/steps/convertStepsToIr.js +43 -35
  100. package/build/esm/utils/steps/convertStepsToIr.js.map +1 -1
  101. package/build/types/commands/asset/__tests__/buildPrefixRewriteFetch.test.d.ts +2 -0
  102. package/build/types/commands/asset/__tests__/buildPrefixRewriteFetch.test.d.ts.map +1 -0
  103. package/build/types/commands/asset/assetDeployHandler.d.ts +15 -0
  104. package/build/types/commands/asset/assetDeployHandler.d.ts.map +1 -1
  105. package/build/types/commands/asset/registerAssetCommands.d.ts.map +1 -1
  106. package/build/types/commands/ir/irGenTypesHandler.d.ts +8 -0
  107. package/build/types/commands/ir/irGenTypesHandler.d.ts.map +1 -0
  108. package/build/types/commands/ir/registerIrCommands.d.ts.map +1 -1
  109. package/build/types/commands/schema/registerSchemaCommands.d.ts.map +1 -1
  110. package/build/types/commands/schema/schemaIrHandler.d.ts +19 -0
  111. package/build/types/commands/schema/schemaIrHandler.d.ts.map +1 -0
  112. package/build/types/index.d.ts +1 -6
  113. package/build/types/index.d.ts.map +1 -1
  114. package/build/types/utils/ir/irFieldHelpers.d.ts +36 -0
  115. package/build/types/utils/ir/irFieldHelpers.d.ts.map +1 -0
  116. package/build/types/utils/schema/__tests__/fixtures.d.ts +10 -1
  117. package/build/types/utils/schema/__tests__/fixtures.d.ts.map +1 -1
  118. package/build/types/utils/schema/convertSchemaToSteps.d.ts.map +1 -1
  119. package/build/types/utils/schema/generateIndexFromSchema.d.ts +2 -2
  120. package/build/types/utils/schema/generateIndexFromSchema.d.ts.map +1 -1
  121. package/build/types/utils/schema/generateInternalFromSchema.d.ts +3 -6
  122. package/build/types/utils/schema/generateInternalFromSchema.d.ts.map +1 -1
  123. package/build/types/utils/schema/generateModelMetadataFromSchema.d.ts +3 -8
  124. package/build/types/utils/schema/generateModelMetadataFromSchema.d.ts.map +1 -1
  125. package/build/types/utils/schema/generateScopeFromSchema.d.ts +2 -2
  126. package/build/types/utils/schema/generateScopeFromSchema.d.ts.map +1 -1
  127. package/build/types/utils/schema/generateTypesFromSchema.d.ts.map +1 -1
  128. package/build/types/utils/schema/generateVersionedTypesFromSchema.d.ts +4 -7
  129. package/build/types/utils/schema/generateVersionedTypesFromSchema.d.ts.map +1 -1
  130. package/build/types/utils/schema/generateVersionedZodFromSchema.d.ts +3 -7
  131. package/build/types/utils/schema/generateVersionedZodFromSchema.d.ts.map +1 -1
  132. package/build/types/utils/schema/generateVersionsFromSchema.d.ts +3 -3
  133. package/build/types/utils/schema/generateVersionsFromSchema.d.ts.map +1 -1
  134. package/build/types/utils/schema/loadSchemaModule.d.ts +14 -0
  135. package/build/types/utils/schema/loadSchemaModule.d.ts.map +1 -0
  136. package/build/types/utils/schema/resolveSchemaChain.d.ts +29 -8
  137. package/build/types/utils/schema/resolveSchemaChain.d.ts.map +1 -1
  138. package/build/types/utils/schema/runtimeSchema.d.ts +0 -32
  139. package/build/types/utils/schema/runtimeSchema.d.ts.map +1 -1
  140. package/build/types/utils/schema/writeAllSdkFiles.d.ts +8 -0
  141. package/build/types/utils/schema/writeAllSdkFiles.d.ts.map +1 -0
  142. package/build/types/utils/steps/convertStepsToIr.d.ts +3 -3
  143. package/build/types/utils/steps/convertStepsToIr.d.ts.map +1 -1
  144. package/package.json +3 -3
  145. package/build/esm/commands/schema/schemaGenTypesHandler.js +0 -147
  146. package/build/esm/commands/schema/schemaGenTypesHandler.js.map +0 -1
  147. package/build/types/commands/schema/schemaGenTypesHandler.d.ts +0 -8
  148. 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.values(inputSchema)) {
44
- if (collectModels(modelDef, models)) {
45
- primaryModelKeys.push(modelDef.name);
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(modelDef.name) ? process.env.NODE_ENV !== "production" ? invariant(false, `Duplicate model definition: ${modelDef.name}`) : invariant(false) : void 0;
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(modelDef.name, IModelDef.record(convertRecordDefToIr(modelDef)));
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(modelDef.name, IModelDef.union(convertUnionDefToIr(modelDef)));
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: recordDef.name,
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 variantEntries = Object.entries(unionDef.variants).map(([variantName, modelRef]) => [variantName, modelRef.name]);
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: unionDef.name,
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: false,
112
- value: convertTypeToFieldValueUnion(schemaType.items)
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
- // Optional flag is handled at field level, but we need to unwrap the inner type
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
- // TODO: fix the argument types so these aren't possible
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
- // If we get here, it means we have nested optionals - unwrap and continue
161
- // TODO: probably warn? maybe throw
162
-
163
- return convertTypeToFieldValueUnion(schemaType.item);
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=buildPrefixRewriteFetch.test.d.ts.map
@@ -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;CAC9B;AAED,+FAA+F;AAC/F,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCnF"}
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,CAa5D"}
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,8 @@
1
+ interface IrGenTypesOptions {
2
+ schema: string;
3
+ output: string;
4
+ minVersion?: string;
5
+ }
6
+ export declare function irGenTypesHandler(options: IrGenTypesOptions): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=irGenTypesHandler.d.ts.map
@@ -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;AAMzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2DzD"}
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,CAmB7D"}
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"}
@@ -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 { generateInternalFromSchema } from "./utils/schema/generateInternalFromSchema.js";
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,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EACL,+BAA+B,EAC/B,KAAK,mBAAmB,GACzB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,gCAAgC,EAAE,MAAM,oDAAoD,CAAC;AACtG,OAAO,EAAE,8BAA8B,EAAE,MAAM,kDAAkD,CAAC;AAClG,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,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"}
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"}