@palantir/pack.document-schema.type-gen 0.6.0 → 0.8.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 (109) hide show
  1. package/build/esm/cli.js +2 -0
  2. package/build/esm/cli.js.map +1 -1
  3. package/build/esm/commands/asset/assetDeployHandler.js +60 -0
  4. package/build/esm/commands/asset/assetDeployHandler.js.map +1 -0
  5. package/build/esm/commands/asset/registerAssetCommands.js +22 -0
  6. package/build/esm/commands/asset/registerAssetCommands.js.map +1 -0
  7. package/build/esm/commands/ir/irDeployHandler.js +5 -4
  8. package/build/esm/commands/ir/irDeployHandler.js.map +1 -1
  9. package/build/esm/commands/ir/irGenAssetHandler.js +83 -0
  10. package/build/esm/commands/ir/irGenAssetHandler.js.map +1 -0
  11. package/build/esm/commands/ir/registerIrCommands.js +2 -0
  12. package/build/esm/commands/ir/registerIrCommands.js.map +1 -1
  13. package/build/esm/commands/steps/stepsGenIrHandler.js +6 -1
  14. package/build/esm/commands/steps/stepsGenIrHandler.js.map +1 -1
  15. package/build/esm/commands/types.js +2 -0
  16. package/build/esm/commands/types.js.map +1 -0
  17. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldDef.js.map +1 -1
  18. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueDatetime.js.map +1 -1
  19. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueMediaRef.js.map +1 -1
  20. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueText.js.map +1 -1
  21. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/recordDef.js.map +1 -1
  22. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.js.map +1 -1
  23. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/unionDef.js.map +1 -1
  24. package/build/esm/utils/generatedFileHeader.js +1 -0
  25. package/build/esm/utils/generatedFileHeader.js.map +1 -1
  26. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js +1 -1
  27. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js.map +1 -1
  28. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js +1 -1
  29. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js.map +1 -1
  30. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js +1 -1
  31. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js.map +1 -1
  32. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js +1 -1
  33. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js.map +1 -1
  34. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js +1 -1
  35. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js.map +1 -1
  36. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js +1 -1
  37. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js.map +1 -1
  38. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js +1 -1
  39. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js.map +1 -1
  40. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js +1 -1
  41. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js.map +1 -1
  42. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js +1 -1
  43. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js.map +1 -1
  44. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js +1 -1
  45. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js.map +1 -1
  46. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js +1 -1
  47. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js.map +1 -1
  48. package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js +335 -0
  49. package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js.map +1 -0
  50. package/build/esm/utils/ir/__tests__/generateModelsFromIr.test.js +49 -49
  51. package/build/esm/utils/ir/__tests__/generateModelsFromIr.test.js.map +1 -1
  52. package/build/esm/utils/ir/__tests__/generateZodSchemasFromIr.test.js +83 -83
  53. package/build/esm/utils/ir/__tests__/generateZodSchemasFromIr.test.js.map +1 -1
  54. package/build/esm/utils/ir/convertIrToWireSchema.js +199 -0
  55. package/build/esm/utils/ir/convertIrToWireSchema.js.map +1 -0
  56. package/build/esm/utils/ir/generateModelsFromIr.js +2 -2
  57. package/build/esm/utils/ir/generateModelsFromIr.js.map +1 -1
  58. package/build/esm/utils/ir/generateZodSchemasFromIr.js +1 -1
  59. package/build/esm/utils/ir/generateZodSchemasFromIr.js.map +1 -1
  60. package/build/esm/utils/steps/__tests__/__snapshots__/types/arrayFields.js.map +1 -1
  61. package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js +1 -1
  62. package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js.map +1 -1
  63. package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js +1 -1
  64. package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js.map +1 -1
  65. package/build/esm/utils/steps/__tests__/__snapshots__/types/refTypes.js.map +1 -1
  66. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleRecord.js.map +1 -1
  67. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js +1 -1
  68. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js.map +1 -1
  69. package/build/esm/utils/steps/__tests__/convertStepsToIr.test.js +81 -8
  70. package/build/esm/utils/steps/__tests__/convertStepsToIr.test.js.map +1 -1
  71. package/build/esm/utils/steps/convertStepsToIr.js +8 -10
  72. package/build/esm/utils/steps/convertStepsToIr.js.map +1 -1
  73. package/build/esm/utils/steps/parseMigrationSteps.js +4 -2
  74. package/build/esm/utils/steps/parseMigrationSteps.js.map +1 -1
  75. package/build/types/cli.d.ts.map +1 -1
  76. package/build/types/commands/asset/assetDeployHandler.d.ts +10 -0
  77. package/build/types/commands/asset/assetDeployHandler.d.ts.map +1 -0
  78. package/build/types/commands/asset/registerAssetCommands.d.ts +3 -0
  79. package/build/types/commands/asset/registerAssetCommands.d.ts.map +1 -0
  80. package/build/types/commands/ir/irDeployHandler.d.ts +1 -1
  81. package/build/types/commands/ir/irDeployHandler.d.ts.map +1 -1
  82. package/build/types/commands/ir/irGenAssetHandler.d.ts +19 -0
  83. package/build/types/commands/ir/irGenAssetHandler.d.ts.map +1 -0
  84. package/build/types/commands/ir/registerIrCommands.d.ts.map +1 -1
  85. package/build/types/commands/steps/stepsGenIrHandler.d.ts.map +1 -1
  86. package/build/types/commands/types.d.ts +12 -0
  87. package/build/types/commands/types.d.ts.map +1 -0
  88. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldDef.d.ts +2 -2
  89. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldDef.d.ts.map +1 -1
  90. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueDatetime.d.ts +1 -0
  91. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueDatetime.d.ts.map +1 -1
  92. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueMediaRef.d.ts +1 -0
  93. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueMediaRef.d.ts.map +1 -1
  94. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueText.d.ts +3 -0
  95. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueText.d.ts.map +1 -1
  96. package/build/types/lib/pack-docschema-api/pack-docschema-ir/recordDef.d.ts +1 -1
  97. package/build/types/lib/pack-docschema-api/pack-docschema-ir/recordDef.d.ts.map +1 -1
  98. package/build/types/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.d.ts +2 -2
  99. package/build/types/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.d.ts.map +1 -1
  100. package/build/types/lib/pack-docschema-api/pack-docschema-ir/unionDef.d.ts +1 -1
  101. package/build/types/lib/pack-docschema-api/pack-docschema-ir/unionDef.d.ts.map +1 -1
  102. package/build/types/utils/generatedFileHeader.d.ts +1 -0
  103. package/build/types/utils/generatedFileHeader.d.ts.map +1 -1
  104. package/build/types/utils/ir/__tests__/convertIrToWireSchema.test.d.ts +2 -0
  105. package/build/types/utils/ir/__tests__/convertIrToWireSchema.test.d.ts.map +1 -0
  106. package/build/types/utils/ir/convertIrToWireSchema.d.ts +17 -0
  107. package/build/types/utils/ir/convertIrToWireSchema.d.ts.map +1 -0
  108. package/build/types/utils/steps/parseMigrationSteps.d.ts.map +1 -1
  109. package/package.json +2 -2
@@ -16,6 +16,7 @@
16
16
 
17
17
  import { describe, expect, it } from "vitest";
18
18
  import { convertStepsToIr } from "../convertStepsToIr.js";
19
+ import { parseMigrationSteps } from "../parseMigrationSteps.js";
19
20
  describe("convertStepsToIr", () => {
20
21
  it("should convert simple record types to IR format", () => {
21
22
  const schema = convertStepsToIr([{
@@ -49,7 +50,7 @@ describe("convertStepsToIr", () => {
49
50
  const nameField = personRecord.fields.find(f => f.key === "name");
50
51
  expect(nameField).toBeDefined();
51
52
  expect(nameField?.isOptional).toBeUndefined();
52
- expect(nameField?.value).toEqual({
53
+ expect(nameField?.fieldType).toEqual({
53
54
  type: "value",
54
55
  value: {
55
56
  type: "string",
@@ -60,7 +61,7 @@ describe("convertStepsToIr", () => {
60
61
  // Check age field
61
62
  const ageField = personRecord.fields.find(f => f.key === "age");
62
63
  expect(ageField).toBeDefined();
63
- expect(ageField?.value).toEqual({
64
+ expect(ageField?.fieldType).toEqual({
64
65
  type: "value",
65
66
  value: {
66
67
  type: "double",
@@ -72,7 +73,7 @@ describe("convertStepsToIr", () => {
72
73
  const emailField = personRecord.fields.find(f => f.key === "email");
73
74
  expect(emailField).toBeDefined();
74
75
  expect(emailField?.isOptional).toBe(true);
75
- expect(emailField?.value).toEqual({
76
+ expect(emailField?.fieldType).toEqual({
76
77
  type: "value",
77
78
  value: {
78
79
  type: "string",
@@ -100,7 +101,7 @@ describe("convertStepsToIr", () => {
100
101
 
101
102
  // Check tags array field
102
103
  const tagsField = containerRecord.fields.find(f => f.key === "tags");
103
- expect(tagsField?.value).toEqual({
104
+ expect(tagsField?.fieldType).toEqual({
104
105
  type: "array",
105
106
  array: {
106
107
  allowNullValue: false,
@@ -113,7 +114,7 @@ describe("convertStepsToIr", () => {
113
114
 
114
115
  // Check numbers list field (treated as array)
115
116
  const numbersField = containerRecord.fields.find(f => f.key === "numbers");
116
- expect(numbersField?.value).toEqual({
117
+ expect(numbersField?.fieldType).toEqual({
117
118
  type: "array",
118
119
  array: {
119
120
  allowNullValue: false,
@@ -147,7 +148,7 @@ describe("convertStepsToIr", () => {
147
148
  if (personModel?.type !== "record") throw new Error("Expected record type");
148
149
  const personRecord = personModel.record;
149
150
  const addressField = personRecord.fields.find(f => f.key === "address");
150
- expect(addressField?.value).toEqual({
151
+ expect(addressField?.fieldType).toEqual({
151
152
  type: "value",
152
153
  value: {
153
154
  type: "modelRef",
@@ -186,7 +187,7 @@ describe("convertStepsToIr", () => {
186
187
  // Check inherited fields from fragment
187
188
  const xField = objectNode.fields.find(f => f.key === "x");
188
189
  expect(xField).toBeDefined();
189
- expect(xField?.value).toEqual({
190
+ expect(xField?.fieldType).toEqual({
190
191
  type: "value",
191
192
  value: {
192
193
  type: "double",
@@ -236,7 +237,7 @@ describe("convertStepsToIr", () => {
236
237
  if (graphModel?.type !== "record") throw new Error("Expected record type");
237
238
  const graphRecord = graphModel.record;
238
239
  const nodesField = graphRecord.fields.find(f => f.key === "nodes");
239
- expect(nodesField?.value).toEqual({
240
+ expect(nodesField?.fieldType).toEqual({
240
241
  type: "array",
241
242
  array: {
242
243
  allowNullValue: false,
@@ -249,6 +250,59 @@ describe("convertStepsToIr", () => {
249
250
  }
250
251
  });
251
252
  });
253
+ it("should convert optional array types to IR format", () => {
254
+ const schema = convertStepsToIr([{
255
+ "add-records": {
256
+ Tag: {
257
+ fields: {
258
+ name: "string"
259
+ }
260
+ },
261
+ Container: {
262
+ docs: "A container with optional collections",
263
+ fields: {
264
+ tags: "optional<array<Tag>>",
265
+ labels: "optional<array<string>>"
266
+ }
267
+ }
268
+ }
269
+ }]);
270
+ const containerModel = schema.models["Container"];
271
+ expect(containerModel).toBeDefined();
272
+ expect(containerModel?.type).toBe("record");
273
+ if (containerModel?.type !== "record") throw new Error("Expected record type");
274
+ const containerRecord = containerModel.record;
275
+
276
+ // Check optional array of references
277
+ const tagsField = containerRecord.fields.find(f => f.key === "tags");
278
+ expect(tagsField?.isOptional).toBe(true);
279
+ expect(tagsField?.fieldType).toEqual({
280
+ type: "array",
281
+ array: {
282
+ allowNullValue: false,
283
+ value: {
284
+ type: "modelRef",
285
+ modelRef: {
286
+ modelTypes: ["Tag"]
287
+ }
288
+ }
289
+ }
290
+ });
291
+
292
+ // Check optional array of primitives
293
+ const labelsField = containerRecord.fields.find(f => f.key === "labels");
294
+ expect(labelsField?.isOptional).toBe(true);
295
+ expect(labelsField?.fieldType).toEqual({
296
+ type: "array",
297
+ array: {
298
+ allowNullValue: false,
299
+ value: {
300
+ type: "string",
301
+ string: {}
302
+ }
303
+ }
304
+ });
305
+ });
252
306
  it("should handle modify-records step", () => {
253
307
  const schema = convertStepsToIr([{
254
308
  "add-records": {
@@ -285,4 +339,23 @@ describe("convertStepsToIr", () => {
285
339
  expect(emailField?.isOptional).toBe(true);
286
340
  });
287
341
  });
342
+ describe("parseMigrationSteps generic type validation", () => {
343
+ function stepsWithField(fieldType) {
344
+ return [{
345
+ "add-records": {
346
+ Foo: {
347
+ fields: {
348
+ bar: fieldType
349
+ }
350
+ }
351
+ }
352
+ }];
353
+ }
354
+ it.each(["optional<optional<string>>", "array<array<string>>", "list<list<double>>", "array<optional<string>>", "optional<array<array<string>>>", "optional<foo<string>>", "foo<string>"])("should reject invalid nested generic type: %s", fieldType => {
355
+ expect(() => parseMigrationSteps(stepsWithField(fieldType))).toThrow();
356
+ });
357
+ it.each(["optional<string>", "optional<double>", "optional<MyType>", "array<string>", "list<double>", "set<MyType>", "map<string>", "optional<array<string>>", "optional<list<Tag>>", "optional<set<double>>", "optional<map<string>>"])("should accept valid generic type: %s", fieldType => {
358
+ expect(() => parseMigrationSteps(stepsWithField(fieldType))).not.toThrow();
359
+ });
360
+ });
288
361
  //# sourceMappingURL=convertStepsToIr.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"convertStepsToIr.test.js","names":["describe","expect","it","convertStepsToIr","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","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"],"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\";\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?.value).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?.value).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?.value).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?.value).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?.value).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?.value).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?.value).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?.value).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 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"],"mappings":"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","ignoreList":[]}
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":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAE7C,SAASC,gBAAgB,QAAQ,wBAAwB;AAEzD,SAASC,mBAAmB,QAAQ,2BAA2B;AAE/DJ,QAAQ,CAAC,kBAAkB,EAAE,MAAM;EACjCE,EAAE,CAAC,iDAAiD,EAAE,MAAM;IAgB1D,MAAMG,MAAM,GAAGF,gBAAgB,CAfA,CAC7B;MACE,aAAa,EAAE;QACbG,MAAM,EAAE;UACNC,IAAI,EAAE,iBAAiB;UACvBC,MAAM,EAAE;YACNC,IAAI,EAAE,QAAQ;YACdC,GAAG,EAAE,QAAQ;YACbC,KAAK,EAAE;UACT;QACF;MACF;IACF,CAAC,CAGkC,CAAC;IAEtCV,MAAM,CAACI,MAAM,CAACI,IAAI,CAAC,CAACG,IAAI,CAAC,kBAAkB,CAAC;IAC5CX,MAAM,CAACI,MAAM,CAACQ,WAAW,CAAC,CAACD,IAAI,CAAC,uCAAuC,CAAC;IACxEX,MAAM,CAACI,MAAM,CAACS,OAAO,CAAC,CAACF,IAAI,CAAC,CAAC,CAAC;IAC9BX,MAAM,CAACI,MAAM,CAACU,gBAAgB,CAAC,CAACC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;IACnDf,MAAM,CAACgB,MAAM,CAACC,IAAI,CAACb,MAAM,CAACc,MAAM,CAAC,CAAC,CAACC,YAAY,CAAC,CAAC,CAAC;IAElD,MAAMC,WAAW,GAAGhB,MAAM,CAACc,MAAM,CAAC,QAAQ,CAAC;IAC3ClB,MAAM,CAACoB,WAAW,CAAC,CAACC,WAAW,CAAC,CAAC;IACjCrB,MAAM,CAACoB,WAAW,EAAEE,IAAI,CAAC,CAACX,IAAI,CAAC,QAAQ,CAAC;IACxC,IAAIS,WAAW,EAAEE,IAAI,KAAK,QAAQ,EAAE,MAAM,IAAIC,KAAK,CAAC,sBAAsB,CAAC;IAC3E,MAAMC,YAAY,GAAGJ,WAAW,CAACK,MAAM;IAEvCzB,MAAM,CAACwB,YAAY,CAACE,GAAG,CAAC,CAACf,IAAI,CAAC,QAAQ,CAAC;IACvCX,MAAM,CAACwB,YAAY,CAAChB,IAAI,CAAC,CAACG,IAAI,CAAC,QAAQ,CAAC;IACxCX,MAAM,CAACwB,YAAY,CAACZ,WAAW,CAAC,CAACD,IAAI,CAAC,iBAAiB,CAAC;IACxDX,MAAM,CAACwB,YAAY,CAACjB,MAAM,CAAC,CAACY,YAAY,CAAC,CAAC,CAAC;;IAE3C;IACA,MAAMQ,SAAS,GAAGH,YAAY,CAACjB,MAAM,CAACqB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACH,GAAG,KAAK,MAAM,CAAC;IACjE1B,MAAM,CAAC2B,SAAS,CAAC,CAACN,WAAW,CAAC,CAAC;IAC/BrB,MAAM,CAAC2B,SAAS,EAAEG,UAAU,CAAC,CAACC,aAAa,CAAC,CAAC;IAC7C/B,MAAM,CAAC2B,SAAS,EAAEK,SAAS,CAAC,CAACjB,OAAO,CAAC;MACnCO,IAAI,EAAE,OAAO;MACbW,KAAK,EAAE;QACLX,IAAI,EAAE,QAAQ;QACdY,MAAM,EAAE,CAAC;MACX;IACF,CAAC,CAAC;;IAEF;IACA,MAAMC,QAAQ,GAAGX,YAAY,CAACjB,MAAM,CAACqB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACH,GAAG,KAAK,KAAK,CAAC;IAC/D1B,MAAM,CAACmC,QAAQ,CAAC,CAACd,WAAW,CAAC,CAAC;IAC9BrB,MAAM,CAACmC,QAAQ,EAAEH,SAAS,CAAC,CAACjB,OAAO,CAAC;MAClCO,IAAI,EAAE,OAAO;MACbW,KAAK,EAAE;QACLX,IAAI,EAAE,QAAQ;QACdc,MAAM,EAAE,CAAC;MACX;IACF,CAAC,CAAC;;IAEF;IACA,MAAMC,UAAU,GAAGb,YAAY,CAACjB,MAAM,CAACqB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACH,GAAG,KAAK,OAAO,CAAC;IACnE1B,MAAM,CAACqC,UAAU,CAAC,CAAChB,WAAW,CAAC,CAAC;IAChCrB,MAAM,CAACqC,UAAU,EAAEP,UAAU,CAAC,CAACnB,IAAI,CAAC,IAAI,CAAC;IACzCX,MAAM,CAACqC,UAAU,EAAEL,SAAS,CAAC,CAACjB,OAAO,CAAC;MACpCO,IAAI,EAAE,OAAO;MACbW,KAAK,EAAE;QACLX,IAAI,EAAE,QAAQ;QACdY,MAAM,EAAE,CAAC;MACX;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFjC,EAAE,CAAC,kDAAkD,EAAE,MAAM;IAe3D,MAAMG,MAAM,GAAGF,gBAAgB,CAdA,CAC7B;MACE,aAAa,EAAE;QACboC,SAAS,EAAE;UACThC,IAAI,EAAE,8BAA8B;UACpCC,MAAM,EAAE;YACNgC,IAAI,EAAE,eAAe;YACrBC,OAAO,EAAE;UACX;QACF;MACF;IACF,CAAC,CAGkC,CAAC;IACtC,MAAMC,cAAc,GAAGrC,MAAM,CAACc,MAAM,CAAC,WAAW,CAAC;IACjDlB,MAAM,CAACyC,cAAc,CAAC,CAACpB,WAAW,CAAC,CAAC;IACpCrB,MAAM,CAACyC,cAAc,EAAEnB,IAAI,CAAC,CAACX,IAAI,CAAC,QAAQ,CAAC;IAC3C,IAAI8B,cAAc,EAAEnB,IAAI,KAAK,QAAQ,EAAE,MAAM,IAAIC,KAAK,CAAC,sBAAsB,CAAC;IAC9E,MAAMmB,eAAe,GAAGD,cAAc,CAAChB,MAAM;;IAE7C;IACA,MAAMkB,SAAS,GAAGD,eAAe,CAACnC,MAAM,CAACqB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACH,GAAG,KAAK,MAAM,CAAC;IACpE1B,MAAM,CAAC2C,SAAS,EAAEX,SAAS,CAAC,CAACjB,OAAO,CAAC;MACnCO,IAAI,EAAE,OAAO;MACbsB,KAAK,EAAE;QACLC,cAAc,EAAE,KAAK;QACrBZ,KAAK,EAAE;UACLX,IAAI,EAAE,QAAQ;UACdY,MAAM,EAAE,CAAC;QACX;MACF;IACF,CAAC,CAAC;;IAEF;IACA,MAAMY,YAAY,GAAGJ,eAAe,CAACnC,MAAM,CAACqB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACH,GAAG,KAAK,SAAS,CAAC;IAC1E1B,MAAM,CAAC8C,YAAY,EAAEd,SAAS,CAAC,CAACjB,OAAO,CAAC;MACtCO,IAAI,EAAE,OAAO;MACbsB,KAAK,EAAE;QACLC,cAAc,EAAE,KAAK;QACrBZ,KAAK,EAAE;UACLX,IAAI,EAAE,QAAQ;UACdc,MAAM,EAAE,CAAC;QACX;MACF;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFnC,EAAE,CAAC,+CAA+C,EAAE,MAAM;IAoBxD,MAAMG,MAAM,GAAGF,gBAAgB,CAnBA,CAC7B;MACE,aAAa,EAAE;QACb6C,OAAO,EAAE;UACPxC,MAAM,EAAE;YACNyC,MAAM,EAAE,QAAQ;YAChBC,IAAI,EAAE;UACR;QACF,CAAC;QACD5C,MAAM,EAAE;UACNE,MAAM,EAAE;YACNC,IAAI,EAAE,QAAQ;YACd0C,OAAO,EAAE;UACX;QACF;MACF;IACF,CAAC,CAGkC,CAAC;IACtC,MAAM9B,WAAW,GAAGhB,MAAM,CAACc,MAAM,CAAC,QAAQ,CAAC;IAC3ClB,MAAM,CAACoB,WAAW,CAAC,CAACC,WAAW,CAAC,CAAC;IACjCrB,MAAM,CAACoB,WAAW,EAAEE,IAAI,CAAC,CAACX,IAAI,CAAC,QAAQ,CAAC;IACxC,IAAIS,WAAW,EAAEE,IAAI,KAAK,QAAQ,EAAE,MAAM,IAAIC,KAAK,CAAC,sBAAsB,CAAC;IAC3E,MAAMC,YAAY,GAAGJ,WAAW,CAACK,MAAM;IAEvC,MAAM0B,YAAY,GAAG3B,YAAY,CAACjB,MAAM,CAACqB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACH,GAAG,KAAK,SAAS,CAAC;IACvE1B,MAAM,CAACmD,YAAY,EAAEnB,SAAS,CAAC,CAACjB,OAAO,CACrC;MACEO,IAAI,EAAE,OAAO;MACbW,KAAK,EAAE;QACLX,IAAI,EAAE,UAAU;QAChB8B,QAAQ,EAAE;UACRC,UAAU,EAAE,CAAC,SAAS;QACxB;MACF;IACF,CACF,CAAC;EACH,CAAC,CAAC;EAEFpD,EAAE,CAAC,2CAA2C,EAAE,MAAM;IAuBpD,MAAMG,MAAM,GAAGF,gBAAgB,CAtBA,CAC7B;MACE,gBAAgB,EAAE;QAChBoD,QAAQ,EAAE;UACRC,CAAC,EAAE,QAAQ;UACXC,CAAC,EAAE;QACL;MACF;IACF,CAAC,EACD;MACE,aAAa,EAAE;QACbC,UAAU,EAAE;UACVnD,IAAI,EAAE,sBAAsB;UAC5BoD,OAAO,EAAE,CAAC,UAAU,CAAC;UACrBnD,MAAM,EAAE;YACNoD,KAAK,EAAE;UACT;QACF;MACF;IACF,CAAC,CAGkC,CAAC;IACtC,MAAMC,eAAe,GAAGxD,MAAM,CAACc,MAAM,CAAC,YAAY,CAAC;IACnDlB,MAAM,CAAC4D,eAAe,CAAC,CAACvC,WAAW,CAAC,CAAC;IACrCrB,MAAM,CAAC4D,eAAe,EAAEtC,IAAI,CAAC,CAACX,IAAI,CAAC,QAAQ,CAAC;IAC5C,IAAIiD,eAAe,EAAEtC,IAAI,KAAK,QAAQ,EAAE,MAAM,IAAIC,KAAK,CAAC,sBAAsB,CAAC;IAC/E,MAAMsC,UAAU,GAAGD,eAAe,CAACnC,MAAM;IAEzCzB,MAAM,CAAC6D,UAAU,CAACtD,MAAM,CAAC,CAACY,YAAY,CAAC,CAAC,CAAC;;IAEzC;IACA,MAAM2C,MAAM,GAAGD,UAAU,CAACtD,MAAM,CAACqB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACH,GAAG,KAAK,GAAG,CAAC;IACzD1B,MAAM,CAAC8D,MAAM,CAAC,CAACzC,WAAW,CAAC,CAAC;IAC5BrB,MAAM,CAAC8D,MAAM,EAAE9B,SAAS,CAAC,CAACjB,OAAO,CAAC;MAChCO,IAAI,EAAE,OAAO;MACbW,KAAK,EAAE;QACLX,IAAI,EAAE,QAAQ;QACdc,MAAM,EAAE,CAAC;MACX;IACF,CAAC,CAAC;IAEF,MAAM2B,MAAM,GAAGF,UAAU,CAACtD,MAAM,CAACqB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACH,GAAG,KAAK,GAAG,CAAC;IACzD1B,MAAM,CAAC+D,MAAM,CAAC,CAAC1C,WAAW,CAAC,CAAC;;IAE5B;IACA,MAAM2C,UAAU,GAAGH,UAAU,CAACtD,MAAM,CAACqB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACH,GAAG,KAAK,OAAO,CAAC;IACjE1B,MAAM,CAACgE,UAAU,CAAC,CAAC3C,WAAW,CAAC,CAAC;EAClC,CAAC,CAAC;EAEFpB,EAAE,CAAC,oCAAoC,EAAE,MAAM;IAqC7C,MAAMG,MAAM,GAAGF,gBAAgB,CApCA,CAC7B;MACE,aAAa,EAAE;QACbuD,UAAU,EAAE;UACVlD,MAAM,EAAE;YACNoD,KAAK,EAAE;UACT;QACF,CAAC;QACDM,OAAO,EAAE;UACP1D,MAAM,EAAE;YACN2D,IAAI,EAAE;UACR;QACF;MACF;IACF,CAAC,EACD;MACE,WAAW,EAAE;QACXC,IAAI,EAAE;UACJC,QAAQ,EAAE;YACRC,MAAM,EAAE,YAAY;YACpBC,OAAO,EAAE;UACX;QACF;MACF;IACF,CAAC,EACD;MACE,aAAa,EAAE;QACbC,KAAK,EAAE;UACLhE,MAAM,EAAE;YACNiE,KAAK,EAAE;UACT;QACF;MACF;IACF,CAAC,CAGkC,CAAC;IACtC,MAAMC,UAAU,GAAGrE,MAAM,CAACc,MAAM,CAAC,OAAO,CAAC;IACzC,IAAIuD,UAAU,EAAEnD,IAAI,KAAK,QAAQ,EAAE,MAAM,IAAIC,KAAK,CAAC,sBAAsB,CAAC;IAC1E,MAAMmD,WAAW,GAAGD,UAAU,CAAChD,MAAM;IAErC,MAAMkD,UAAU,GAAGD,WAAW,CAACnE,MAAM,CAACqB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACH,GAAG,KAAK,OAAO,CAAC;IAClE1B,MAAM,CAAC2E,UAAU,EAAE3C,SAAS,CAAC,CAACjB,OAAO,CAAC;MACpCO,IAAI,EAAE,OAAO;MACbsB,KAAK,EAAE;QACLC,cAAc,EAAE,KAAK;QACrBZ,KAAK,EAAE;UACLX,IAAI,EAAE,UAAU;UAChB8B,QAAQ,EAAE;YACRC,UAAU,EAAE,CAAC,MAAM;UACrB;QACF;MACF;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFpD,EAAE,CAAC,kDAAkD,EAAE,MAAM;IAoB3D,MAAMG,MAAM,GAAGF,gBAAgB,CAnBA,CAC7B;MACE,aAAa,EAAE;QACb0E,GAAG,EAAE;UACHrE,MAAM,EAAE;YACNC,IAAI,EAAE;UACR;QACF,CAAC;QACD8B,SAAS,EAAE;UACThC,IAAI,EAAE,uCAAuC;UAC7CC,MAAM,EAAE;YACNgC,IAAI,EAAE,sBAAsB;YAC5BsC,MAAM,EAAE;UACV;QACF;MACF;IACF,CAAC,CAGkC,CAAC;IACtC,MAAMpC,cAAc,GAAGrC,MAAM,CAACc,MAAM,CAAC,WAAW,CAAC;IACjDlB,MAAM,CAACyC,cAAc,CAAC,CAACpB,WAAW,CAAC,CAAC;IACpCrB,MAAM,CAACyC,cAAc,EAAEnB,IAAI,CAAC,CAACX,IAAI,CAAC,QAAQ,CAAC;IAC3C,IAAI8B,cAAc,EAAEnB,IAAI,KAAK,QAAQ,EAAE,MAAM,IAAIC,KAAK,CAAC,sBAAsB,CAAC;IAC9E,MAAMmB,eAAe,GAAGD,cAAc,CAAChB,MAAM;;IAE7C;IACA,MAAMkB,SAAS,GAAGD,eAAe,CAACnC,MAAM,CAACqB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACH,GAAG,KAAK,MAAM,CAAC;IACpE1B,MAAM,CAAC2C,SAAS,EAAEb,UAAU,CAAC,CAACnB,IAAI,CAAC,IAAI,CAAC;IACxCX,MAAM,CAAC2C,SAAS,EAAEX,SAAS,CAAC,CAACjB,OAAO,CAAC;MACnCO,IAAI,EAAE,OAAO;MACbsB,KAAK,EAAE;QACLC,cAAc,EAAE,KAAK;QACrBZ,KAAK,EAAE;UACLX,IAAI,EAAE,UAAU;UAChB8B,QAAQ,EAAE;YACRC,UAAU,EAAE,CAAC,KAAK;UACpB;QACF;MACF;IACF,CAAC,CAAC;;IAEF;IACA,MAAMyB,WAAW,GAAGpC,eAAe,CAACnC,MAAM,CAACqB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACH,GAAG,KAAK,QAAQ,CAAC;IACxE1B,MAAM,CAAC8E,WAAW,EAAEhD,UAAU,CAAC,CAACnB,IAAI,CAAC,IAAI,CAAC;IAC1CX,MAAM,CAAC8E,WAAW,EAAE9C,SAAS,CAAC,CAACjB,OAAO,CAAC;MACrCO,IAAI,EAAE,OAAO;MACbsB,KAAK,EAAE;QACLC,cAAc,EAAE,KAAK;QACrBZ,KAAK,EAAE;UACLX,IAAI,EAAE,QAAQ;UACdY,MAAM,EAAE,CAAC;QACX;MACF;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFjC,EAAE,CAAC,mCAAmC,EAAE,MAAM;IAuB5C,MAAMG,MAAM,GAAGF,gBAAgB,CAtBA,CAC7B;MACE,aAAa,EAAE;QACbG,MAAM,EAAE;UACNE,MAAM,EAAE;YACNC,IAAI,EAAE;UACR;QACF;MACF;IACF,CAAC,EACD;MACE,gBAAgB,EAAE;QAChBH,MAAM,EAAE;UACN,YAAY,EAAE;YACZI,GAAG,EAAE,QAAQ;YACbC,KAAK,EAAE;UACT;QACF;MACF;IACF,CAAC,CAGkC,CAAC;IACtC,MAAMU,WAAW,GAAGhB,MAAM,CAACc,MAAM,CAAC,QAAQ,CAAC;IAC3ClB,MAAM,CAACoB,WAAW,CAAC,CAACC,WAAW,CAAC,CAAC;IACjCrB,MAAM,CAACoB,WAAW,EAAEE,IAAI,CAAC,CAACX,IAAI,CAAC,QAAQ,CAAC;IACxC,IAAIS,WAAW,EAAEE,IAAI,KAAK,QAAQ,EAAE,MAAM,IAAIC,KAAK,CAAC,sBAAsB,CAAC;IAC3E,MAAMC,YAAY,GAAGJ,WAAW,CAACK,MAAM;IAEvCzB,MAAM,CAACwB,YAAY,CAACjB,MAAM,CAAC,CAACY,YAAY,CAAC,CAAC,CAAC;;IAE3C;IACAnB,MAAM,CAACwB,YAAY,CAACjB,MAAM,CAACqB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACH,GAAG,KAAK,MAAM,CAAC,CAAC,CAACL,WAAW,CAAC,CAAC;;IAErE;IACArB,MAAM,CAACwB,YAAY,CAACjB,MAAM,CAACqB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACH,GAAG,KAAK,KAAK,CAAC,CAAC,CAACL,WAAW,CAAC,CAAC;IAEpE,MAAMgB,UAAU,GAAGb,YAAY,CAACjB,MAAM,CAACqB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACH,GAAG,KAAK,OAAO,CAAC;IACnE1B,MAAM,CAACqC,UAAU,CAAC,CAAChB,WAAW,CAAC,CAAC;IAChCrB,MAAM,CAACqC,UAAU,EAAEP,UAAU,CAAC,CAACnB,IAAI,CAAC,IAAI,CAAC;EAC3C,CAAC,CAAC;AACJ,CAAC,CAAC;AAEFZ,QAAQ,CAAC,6CAA6C,EAAE,MAAM;EAC5D,SAASgF,cAAcA,CAAC/C,SAAiB,EAAW;IAClD,OAAO,CAAC;MAAE,aAAa,EAAE;QAAEgD,GAAG,EAAE;UAAEzE,MAAM,EAAE;YAAE0E,GAAG,EAAEjD;UAAU;QAAE;MAAE;IAAE,CAAC,CAAC;EACrE;EAEA/B,EAAE,CAACiF,IAAI,CAAC,CACN,4BAA4B,EAC5B,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,EACzB,gCAAgC,EAChC,uBAAuB,EACvB,aAAa,CACd,CAAC,CAAC,+CAA+C,EAAElD,SAAS,IAAI;IAC/DhC,MAAM,CAAC,MAAMG,mBAAmB,CAAC4E,cAAc,CAAC/C,SAAS,CAAC,CAAC,CAAC,CAACmD,OAAO,CAAC,CAAC;EACxE,CAAC,CAAC;EAEFlF,EAAE,CAACiF,IAAI,CAAC,CACN,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,aAAa,EACb,aAAa,EACb,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,CACxB,CAAC,CAAC,sCAAsC,EAAElD,SAAS,IAAI;IACtDhC,MAAM,CAAC,MAAMG,mBAAmB,CAAC4E,cAAc,CAAC/C,SAAS,CAAC,CAAC,CAAC,CAACoD,GAAG,CAACD,OAAO,CAAC,CAAC;EAC5E,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -75,9 +75,9 @@ export function convertRecordDefToIr(recordDef) {
75
75
  key: fieldKey,
76
76
  name: fieldKey,
77
77
  description: undefined,
78
- value: convertTypeToFieldTypeUnion(fieldType),
79
- meta: {
80
- addedIn: 1
78
+ fieldType: convertTypeToFieldTypeUnion(fieldType),
79
+ metadata: {
80
+ addedInVersion: 1
81
81
  },
82
82
  isOptional: fieldType.type === "optional" ? true : undefined
83
83
  }));
@@ -86,8 +86,8 @@ export function convertRecordDefToIr(recordDef) {
86
86
  name: recordDef.name,
87
87
  description: recordDef.docs || undefined,
88
88
  fields,
89
- meta: {
90
- addedIn: 1
89
+ metadata: {
90
+ addedInVersion: 1
91
91
  }
92
92
  };
93
93
  }
@@ -99,8 +99,8 @@ export function convertUnionDefToIr(unionDef) {
99
99
  description: unionDef.docs,
100
100
  discriminant: unionDef.discriminant,
101
101
  variants: Object.fromEntries(variantEntries),
102
- meta: {
103
- addedIn: 1
102
+ metadata: {
103
+ addedInVersion: 1
104
104
  }
105
105
  };
106
106
  }
@@ -151,9 +151,7 @@ function convertTypeToFieldValueUnion(schemaType) {
151
151
  case "double":
152
152
  return IFieldValueUnion.double({});
153
153
  case "mediaRef":
154
- return IFieldValueUnion.mediaRef({
155
- mediaTypeRids: [] // FIXME: confirm whether we will use rids in the deployed schema.
156
- });
154
+ return IFieldValueUnion.mediaRef({});
157
155
  case "objectRef":
158
156
  return IFieldValueUnion.object({
159
157
  // FIXME: confirm whether we will use rids in the deployed schema.
@@ -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","value","convertTypeToFieldTypeUnion","meta","addedIn","isOptional","docs","unionDef","variantEntries","variants","variantName","modelRef","discriminant","schemaType","array","allowNullValue","convertTypeToFieldValueUnion","items","item","boolean","docRef","documentTypeRids","double","mediaRef","mediaTypeRids","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 value: convertTypeToFieldTypeUnion(fieldType),\n meta: { addedIn: 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 meta: { addedIn: 1 },\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 meta: { addedIn: 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 mediaTypeRids: [], // FIXME: confirm whether we will use rids in the deployed schema.\n });\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","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 metadata: { addedInVersion: 1 },\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":[]}
@@ -26,8 +26,10 @@ import z from "zod";
26
26
  // Define allowed primitive types (matching TypeKind from document-schema-api)
27
27
  const primitiveType = z.enum(["string", "double"]);
28
28
 
29
- // Define generic type patterns like "optional<T>", "list<T>", "array<T>"
30
- const genericTypePattern = z.string().regex(/^(optional|list|array|set|map)<[^<>]+>$/, {
29
+ // Define generic type patterns like "optional<T>", "list<T>", "array<T>", "optional<array<T>>"
30
+ // Flat: (optional|list|array|set|map)<primitive_or_TypeRef>
31
+ // Nested: optional<(list|array|set|map)<primitive_or_TypeRef>>
32
+ const genericTypePattern = z.string().regex(/^(?:(?:list|array|set|map)<[^<>]+>|optional<(?:[^<>]+|(?:list|array|set|map)<[^<>]+>)>)$/, {
31
33
  message: "Invalid generic type pattern"
32
34
  });
33
35
 
@@ -1 +1 @@
1
- {"version":3,"file":"parseMigrationSteps.js","names":["z","primitiveType","enum","genericTypePattern","string","regex","message","typeReference","basicType","union","complexFieldDefinition","object","type","docs","optional","recordFieldDefinition","recordFieldKey","fragmentKey","localFragment","record","addRecords","extends","array","fields","unionDefinition","discriminant","variants","addUnion","modifyRecords","migrationStep","migrationStepsSchema","parseMigrationSteps","unparsed","parsed","parse"],"sources":["parseMigrationSteps.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 z from \"zod\";\n\n// Type definitions for the migration steps\n// Note: These match the YAML syntax, not the P.Type objects\n// Only \"string\" and \"double\" are valid primitives in P.TypeKind\ntype PrimitiveType = \"string\" | \"double\";\n\ninterface ComplexFieldDefinition {\n type: string; // Can be primitive, generic pattern, or type reference\n docs?: string;\n}\n\n// RecordFieldDefinition represents the YAML field values\n// Can be: \"string\", \"double\", \"optional<T>\", \"list<T>\", \"ObjectNode\", or a complex definition\ntype RecordFieldDefinition = string | ComplexFieldDefinition;\n\ninterface RecordDefinition {\n docs?: string;\n extends?: string[];\n fields: Record<string, RecordFieldDefinition>;\n}\n\ninterface UnionDefinition {\n discriminant?: string;\n variants: Record<string, string>;\n}\n\ninterface MigrationStep {\n \"local-fragment\"?: Record<string, Record<string, RecordFieldDefinition>>;\n \"add-records\"?: Record<string, RecordDefinition>;\n \"add-union\"?: Record<string, UnionDefinition>;\n \"modify-records\"?: Record<string, { \"add-fields\": Record<string, RecordFieldDefinition> }>;\n}\n\n// Define allowed primitive types (matching TypeKind from document-schema-api)\nconst primitiveType: z.ZodType<PrimitiveType> = z.enum([\"string\", \"double\"]);\n\n// Define generic type patterns like \"optional<T>\", \"list<T>\", \"array<T>\"\nconst genericTypePattern: z.ZodType<string> = z\n .string()\n .regex(/^(optional|list|array|set|map)<[^<>]+>$/, {\n message: \"Invalid generic type pattern\",\n });\n\n// Reference to other record/union types (capitalized names)\nconst typeReference: z.ZodType<string> = z.string().regex(/^[A-Z][a-zA-Z0-9]*$/, {\n message: \"Type references must be capitalized\",\n});\n\nconst basicType: z.ZodType<string> = z.union([primitiveType, genericTypePattern]);\n\n// Complex field definition object (for future extensibility)\nconst complexFieldDefinition: z.ZodType<ComplexFieldDefinition> = z.object({\n type: basicType,\n docs: z.string().optional(),\n // This can be extended with e.g. constraints like min/max value or length, in the future\n});\n\n// Union of all allowed field definition types - more specific than just z.string()\nconst recordFieldDefinition: z.ZodType<RecordFieldDefinition> = z.union([\n primitiveType,\n genericTypePattern,\n typeReference,\n complexFieldDefinition,\n]);\n\n// Keep as simple strings for now to maintain compatibility with existing code\nconst recordFieldKey = z.string(); // TODO: could be improved w/ regex if we want to control format\nconst fragmentKey = z.string();\n\nconst localFragment: z.ZodType<Record<string, Record<string, RecordFieldDefinition>>> = z\n .record(\n fragmentKey,\n z.record(recordFieldKey, recordFieldDefinition),\n );\nconst addRecords: z.ZodType<Record<string, RecordDefinition>> = z.record(\n z.string().regex(/^[A-Z][a-zA-Z0-9]*$/), // Keys must be capitalized type names\n z.object({\n docs: z.optional(z.string()),\n extends: z.array(z.string()).optional(),\n fields: z.record(recordFieldKey, recordFieldDefinition),\n }),\n);\n\nconst unionDefinition: z.ZodType<UnionDefinition> = z.object({\n discriminant: z.string().optional(),\n variants: z.record(z.string(), z.string().regex(/^[A-Z][a-zA-Z0-9]*$/)),\n});\n\nconst addUnion: z.ZodType<Record<string, UnionDefinition>> = z.record(\n z.string().regex(/^[A-Z][a-zA-Z0-9]*$/), // Union names must be capitalized\n unionDefinition,\n);\n\nconst modifyRecords: z.ZodType<\n Record<string, { \"add-fields\": Record<string, RecordFieldDefinition> }>\n> = z.record(\n z.string().regex(/^[A-Z][a-zA-Z0-9]*$/), // Record names must be capitalized\n z.object({\n \"add-fields\": z.record(recordFieldKey, recordFieldDefinition),\n }),\n);\n\nconst migrationStep: z.ZodType<MigrationStep> = z.object({\n \"local-fragment\": z.optional(localFragment),\n \"add-records\": z.optional(addRecords),\n \"add-union\": z.optional(addUnion),\n \"modify-records\": z.optional(modifyRecords),\n});\n\nconst migrationStepsSchema: z.ZodType<MigrationStep[]> = z.array(migrationStep);\n\nexport type { MigrationStep, RecordFieldDefinition, UnionDefinition };\n\nexport function parseMigrationSteps(unparsed: unknown): MigrationStep[] {\n const parsed = migrationStepsSchema.parse(unparsed);\n return parsed;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"parseMigrationSteps.js","names":["z","primitiveType","enum","genericTypePattern","string","regex","message","typeReference","basicType","union","complexFieldDefinition","object","type","docs","optional","recordFieldDefinition","recordFieldKey","fragmentKey","localFragment","record","addRecords","extends","array","fields","unionDefinition","discriminant","variants","addUnion","modifyRecords","migrationStep","migrationStepsSchema","parseMigrationSteps","unparsed","parsed","parse"],"sources":["parseMigrationSteps.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 z from \"zod\";\n\n// Type definitions for the migration steps\n// Note: These match the YAML syntax, not the P.Type objects\n// Only \"string\" and \"double\" are valid primitives in P.TypeKind\ntype PrimitiveType = \"string\" | \"double\";\n\ninterface ComplexFieldDefinition {\n type: string; // Can be primitive, generic pattern, or type reference\n docs?: string;\n}\n\n// RecordFieldDefinition represents the YAML field values\n// Can be: \"string\", \"double\", \"optional<T>\", \"list<T>\", \"ObjectNode\", or a complex definition\ntype RecordFieldDefinition = string | ComplexFieldDefinition;\n\ninterface RecordDefinition {\n docs?: string;\n extends?: string[];\n fields: Record<string, RecordFieldDefinition>;\n}\n\ninterface UnionDefinition {\n discriminant?: string;\n variants: Record<string, string>;\n}\n\ninterface MigrationStep {\n \"local-fragment\"?: Record<string, Record<string, RecordFieldDefinition>>;\n \"add-records\"?: Record<string, RecordDefinition>;\n \"add-union\"?: Record<string, UnionDefinition>;\n \"modify-records\"?: Record<string, { \"add-fields\": Record<string, RecordFieldDefinition> }>;\n}\n\n// Define allowed primitive types (matching TypeKind from document-schema-api)\nconst primitiveType: z.ZodType<PrimitiveType> = z.enum([\"string\", \"double\"]);\n\n// Define generic type patterns like \"optional<T>\", \"list<T>\", \"array<T>\", \"optional<array<T>>\"\n// Flat: (optional|list|array|set|map)<primitive_or_TypeRef>\n// Nested: optional<(list|array|set|map)<primitive_or_TypeRef>>\nconst genericTypePattern: z.ZodType<string> = z\n .string()\n .regex(\n /^(?:(?:list|array|set|map)<[^<>]+>|optional<(?:[^<>]+|(?:list|array|set|map)<[^<>]+>)>)$/,\n {\n message: \"Invalid generic type pattern\",\n },\n );\n\n// Reference to other record/union types (capitalized names)\nconst typeReference: z.ZodType<string> = z.string().regex(/^[A-Z][a-zA-Z0-9]*$/, {\n message: \"Type references must be capitalized\",\n});\n\nconst basicType: z.ZodType<string> = z.union([primitiveType, genericTypePattern]);\n\n// Complex field definition object (for future extensibility)\nconst complexFieldDefinition: z.ZodType<ComplexFieldDefinition> = z.object({\n type: basicType,\n docs: z.string().optional(),\n // This can be extended with e.g. constraints like min/max value or length, in the future\n});\n\n// Union of all allowed field definition types - more specific than just z.string()\nconst recordFieldDefinition: z.ZodType<RecordFieldDefinition> = z.union([\n primitiveType,\n genericTypePattern,\n typeReference,\n complexFieldDefinition,\n]);\n\n// Keep as simple strings for now to maintain compatibility with existing code\nconst recordFieldKey = z.string(); // TODO: could be improved w/ regex if we want to control format\nconst fragmentKey = z.string();\n\nconst localFragment: z.ZodType<Record<string, Record<string, RecordFieldDefinition>>> = z\n .record(\n fragmentKey,\n z.record(recordFieldKey, recordFieldDefinition),\n );\nconst addRecords: z.ZodType<Record<string, RecordDefinition>> = z.record(\n z.string().regex(/^[A-Z][a-zA-Z0-9]*$/), // Keys must be capitalized type names\n z.object({\n docs: z.optional(z.string()),\n extends: z.array(z.string()).optional(),\n fields: z.record(recordFieldKey, recordFieldDefinition),\n }),\n);\n\nconst unionDefinition: z.ZodType<UnionDefinition> = z.object({\n discriminant: z.string().optional(),\n variants: z.record(z.string(), z.string().regex(/^[A-Z][a-zA-Z0-9]*$/)),\n});\n\nconst addUnion: z.ZodType<Record<string, UnionDefinition>> = z.record(\n z.string().regex(/^[A-Z][a-zA-Z0-9]*$/), // Union names must be capitalized\n unionDefinition,\n);\n\nconst modifyRecords: z.ZodType<\n Record<string, { \"add-fields\": Record<string, RecordFieldDefinition> }>\n> = z.record(\n z.string().regex(/^[A-Z][a-zA-Z0-9]*$/), // Record names must be capitalized\n z.object({\n \"add-fields\": z.record(recordFieldKey, recordFieldDefinition),\n }),\n);\n\nconst migrationStep: z.ZodType<MigrationStep> = z.object({\n \"local-fragment\": z.optional(localFragment),\n \"add-records\": z.optional(addRecords),\n \"add-union\": z.optional(addUnion),\n \"modify-records\": z.optional(modifyRecords),\n});\n\nconst migrationStepsSchema: z.ZodType<MigrationStep[]> = z.array(migrationStep);\n\nexport type { MigrationStep, RecordFieldDefinition, UnionDefinition };\n\nexport function parseMigrationSteps(unparsed: unknown): MigrationStep[] {\n const parsed = migrationStepsSchema.parse(unparsed);\n return parsed;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAqBA,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAaxC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAsBA,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAcxC"}
@@ -0,0 +1,10 @@
1
+ interface AssetDeployOptions {
2
+ readonly input: string;
3
+ readonly baseUrl: string;
4
+ readonly auth: string;
5
+ readonly ontologyRid: string;
6
+ }
7
+ /** Useful for manually deploying a document type during development to test schema changes. */
8
+ export declare function assetDeployHandler(options: AssetDeployOptions): Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=assetDeployHandler.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerAssetCommands(program: Command): void;
3
+ //# sourceMappingURL=registerAssetCommands.d.ts.map
@@ -0,0 +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,4 +1,4 @@
1
- type FileSystemType = "ARTIFACTS" | "COMPASS";
1
+ import type { FileSystemType } from "../types.js";
2
2
  interface DeployOptions {
3
3
  readonly ir: string;
4
4
  readonly baseUrl: string;
@@ -1 +1 @@
1
- {"version":3,"file":"irDeployHandler.d.ts","sourceRoot":"","sources":["../../../../src/commands/ir/irDeployHandler.ts"],"names":[],"mappings":"AAyBA,KAAK,cAAc,GAAG,WAAW,GAAG,SAAS,CAAC;AAE9C,UAAU,aAAa;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;CACzC;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC3E"}
1
+ {"version":3,"file":"irDeployHandler.d.ts","sourceRoot":"","sources":["../../../../src/commands/ir/irDeployHandler.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,UAAU,aAAa;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;CACzC;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC3E"}
@@ -0,0 +1,19 @@
1
+ import type { FileSystemType } from "../types.js";
2
+ interface IrGenAssetOptions {
3
+ readonly ir: string;
4
+ readonly output: string;
5
+ readonly fileSystemType?: FileSystemType;
6
+ }
7
+ /**
8
+ * Generates a document type asset JSON file from an IR schema.
9
+ *
10
+ * This command is intended for internal platform applications where the document
11
+ * type asset must exist on disk so the platform can discover it and register the
12
+ * document type automatically at deploy time. Most users should use `ir deploy`
13
+ * to register document types via the Foundry API instead.
14
+ *
15
+ * If you are unsure whether you need this command, you almost certainly do not.
16
+ */
17
+ export declare function irGenAssetHandler(options: IrGenAssetOptions): void;
18
+ export {};
19
+ //# sourceMappingURL=irGenAssetHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"irGenAssetHandler.d.ts","sourceRoot":"","sources":["../../../../src/commands/ir/irGenAssetHandler.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,aAAa,CAAC;AAErE,UAAU,iBAAiB;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;CAC1C;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAuDlE"}
@@ -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;AAKzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6CzD"}
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 +1 @@
1
- {"version":3,"file":"stepsGenIrHandler.d.ts","sourceRoot":"","sources":["../../../../src/commands/steps/stepsGenIrHandler.ts"],"names":[],"mappings":"AAyBA,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAwDlE"}
1
+ {"version":3,"file":"stepsGenIrHandler.d.ts","sourceRoot":"","sources":["../../../../src/commands/steps/stepsGenIrHandler.ts"],"names":[],"mappings":"AA0BA,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAyDlE"}
@@ -0,0 +1,12 @@
1
+ import type { DocumentTypeSchema } from "@osdk/foundry.pack";
2
+ export type FileSystemType = "ARTIFACTS" | "COMPASS";
3
+ export interface DocumentTypeAsset {
4
+ readonly documentTypeName: string;
5
+ readonly documentStorageType: {
6
+ readonly type: "yjs";
7
+ readonly yjs: DocumentTypeSchema;
8
+ };
9
+ readonly fileSystemType: FileSystemType;
10
+ readonly schemaVersion: number;
11
+ }
12
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/types.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,mBAAmB,EAAE;QAC5B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;QACrB,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC;KAClC,CAAC;IACF,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC"}
@@ -6,7 +6,7 @@ export interface IFieldDef {
6
6
  readonly "name": string;
7
7
  readonly "description"?: string | null;
8
8
  readonly "isOptional"?: boolean | null;
9
- readonly "value": IFieldTypeUnion.IFieldTypeUnion;
10
- readonly "meta": ISchemaMeta;
9
+ readonly "fieldType": IFieldTypeUnion.IFieldTypeUnion;
10
+ readonly "metadata": ISchemaMeta;
11
11
  }
12
12
  //# sourceMappingURL=fieldDef.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fieldDef.d.ts","sourceRoot":"","sources":["../../../../../src/lib/pack-docschema-api/pack-docschema-ir/fieldDef.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,KAAK,eAAe,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,eAAe,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B"}
1
+ {"version":3,"file":"fieldDef.d.ts","sourceRoot":"","sources":["../../../../../src/lib/pack-docschema-api/pack-docschema-ir/fieldDef.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,KAAK,eAAe,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,eAAe,CAAC;IACtD,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;CAClC"}
@@ -1,3 +1,4 @@
1
1
  export interface IFieldValueDatetime {
2
+ readonly "value"?: string;
2
3
  }
3
4
  //# sourceMappingURL=fieldValueDatetime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fieldValueDatetime.d.ts","sourceRoot":"","sources":["../../../../../src/lib/pack-docschema-api/pack-docschema-ir/fieldValueDatetime.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,mBAAmB;CACnC"}
1
+ {"version":3,"file":"fieldValueDatetime.d.ts","sourceRoot":"","sources":["../../../../../src/lib/pack-docschema-api/pack-docschema-ir/fieldValueDatetime.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B"}
@@ -1,3 +1,4 @@
1
1
  export interface IFieldValueMediaRef {
2
+ readonly "value"?: any;
2
3
  }
3
4
  //# sourceMappingURL=fieldValueMediaRef.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fieldValueMediaRef.d.ts","sourceRoot":"","sources":["../../../../../src/lib/pack-docschema-api/pack-docschema-ir/fieldValueMediaRef.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,mBAAmB;CACnC"}
1
+ {"version":3,"file":"fieldValueMediaRef.d.ts","sourceRoot":"","sources":["../../../../../src/lib/pack-docschema-api/pack-docschema-ir/fieldValueMediaRef.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC;CACxB"}
@@ -1,3 +1,6 @@
1
1
  export interface IFieldValueText {
2
+ readonly "defaultValue"?: string | null;
3
+ readonly "minLength"?: number | null;
4
+ readonly "maxLength"?: number | null;
2
5
  }
3
6
  //# sourceMappingURL=fieldValueText.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fieldValueText.d.ts","sourceRoot":"","sources":["../../../../../src/lib/pack-docschema-api/pack-docschema-ir/fieldValueText.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,eAAe;CAC/B"}
1
+ {"version":3,"file":"fieldValueText.d.ts","sourceRoot":"","sources":["../../../../../src/lib/pack-docschema-api/pack-docschema-ir/fieldValueText.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC"}
@@ -6,6 +6,6 @@ export interface IRecordDef {
6
6
  readonly "name": string;
7
7
  readonly "description"?: string | null;
8
8
  readonly "fields": ReadonlyArray<IFieldDef>;
9
- readonly "meta": ISchemaMeta;
9
+ readonly "metadata": ISchemaMeta;
10
10
  }
11
11
  //# sourceMappingURL=recordDef.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recordDef.d.ts","sourceRoot":"","sources":["../../../../../src/lib/pack-docschema-api/pack-docschema-ir/recordDef.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B"}
1
+ {"version":3,"file":"recordDef.d.ts","sourceRoot":"","sources":["../../../../../src/lib/pack-docschema-api/pack-docschema-ir/recordDef.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;CAClC"}