@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
@@ -37,7 +37,7 @@ describe("generateModelsFromIr", () => {
37
37
  key: "name",
38
38
  name: "Name",
39
39
  description: "Person name",
40
- value: {
40
+ fieldType: {
41
41
  type: "value",
42
42
  value: {
43
43
  type: "string",
@@ -47,14 +47,14 @@ describe("generateModelsFromIr", () => {
47
47
  }
48
48
  }
49
49
  },
50
- meta: {
51
- addedIn: 1
50
+ metadata: {
51
+ addedInVersion: 1
52
52
  }
53
53
  }, {
54
54
  key: "age",
55
55
  name: "Age",
56
56
  description: "Person age",
57
- value: {
57
+ fieldType: {
58
58
  type: "value",
59
59
  value: {
60
60
  type: "integer",
@@ -64,12 +64,12 @@ describe("generateModelsFromIr", () => {
64
64
  }
65
65
  }
66
66
  },
67
- meta: {
68
- addedIn: 1
67
+ metadata: {
68
+ addedInVersion: 1
69
69
  }
70
70
  }],
71
- meta: {
72
- addedIn: 1
71
+ metadata: {
72
+ addedInVersion: 1
73
73
  }
74
74
  }
75
75
  }
@@ -104,7 +104,7 @@ describe("generateModelsFromIr", () => {
104
104
  key: "documentRef",
105
105
  name: "Document Reference",
106
106
  description: "Reference to a document",
107
- value: {
107
+ fieldType: {
108
108
  type: "value",
109
109
  value: {
110
110
  type: "docRef",
@@ -113,40 +113,40 @@ describe("generateModelsFromIr", () => {
113
113
  }
114
114
  }
115
115
  },
116
- meta: {
117
- addedIn: 1
116
+ metadata: {
117
+ addedInVersion: 1
118
118
  }
119
119
  }, {
120
120
  key: "userRef",
121
121
  name: "User Reference",
122
122
  description: "Reference to a user",
123
- value: {
123
+ fieldType: {
124
124
  type: "value",
125
125
  value: {
126
126
  type: "userRef",
127
127
  userRef: {}
128
128
  }
129
129
  },
130
- meta: {
131
- addedIn: 1
130
+ metadata: {
131
+ addedInVersion: 1
132
132
  }
133
133
  }, {
134
134
  key: "timestamp",
135
135
  name: "Timestamp",
136
136
  description: "Event timestamp",
137
- value: {
137
+ fieldType: {
138
138
  type: "value",
139
139
  value: {
140
140
  type: "datetime",
141
141
  datetime: {}
142
142
  }
143
143
  },
144
- meta: {
145
- addedIn: 1
144
+ metadata: {
145
+ addedInVersion: 1
146
146
  }
147
147
  }],
148
- meta: {
149
- addedIn: 1
148
+ metadata: {
149
+ addedInVersion: 1
150
150
  }
151
151
  }
152
152
  }
@@ -183,33 +183,33 @@ describe("generateModelsFromIr", () => {
183
183
  key: "x",
184
184
  name: "X",
185
185
  description: "X coordinate",
186
- value: {
186
+ fieldType: {
187
187
  type: "value",
188
188
  value: {
189
189
  type: "double",
190
190
  double: {}
191
191
  }
192
192
  },
193
- meta: {
194
- addedIn: 1
193
+ metadata: {
194
+ addedInVersion: 1
195
195
  }
196
196
  }, {
197
197
  key: "y",
198
198
  name: "Y",
199
199
  description: "Y coordinate",
200
- value: {
200
+ fieldType: {
201
201
  type: "value",
202
202
  value: {
203
203
  type: "double",
204
204
  double: {}
205
205
  }
206
206
  },
207
- meta: {
208
- addedIn: 1
207
+ metadata: {
208
+ addedInVersion: 1
209
209
  }
210
210
  }],
211
- meta: {
212
- addedIn: 1
211
+ metadata: {
212
+ addedInVersion: 1
213
213
  }
214
214
  }
215
215
  },
@@ -223,33 +223,33 @@ describe("generateModelsFromIr", () => {
223
223
  key: "x",
224
224
  name: "X",
225
225
  description: "X coordinate",
226
- value: {
226
+ fieldType: {
227
227
  type: "value",
228
228
  value: {
229
229
  type: "double",
230
230
  double: {}
231
231
  }
232
232
  },
233
- meta: {
234
- addedIn: 1
233
+ metadata: {
234
+ addedInVersion: 1
235
235
  }
236
236
  }, {
237
237
  key: "text",
238
238
  name: "Text",
239
239
  description: "Text content",
240
- value: {
240
+ fieldType: {
241
241
  type: "value",
242
242
  value: {
243
243
  type: "string",
244
244
  string: {}
245
245
  }
246
246
  },
247
- meta: {
248
- addedIn: 1
247
+ metadata: {
248
+ addedInVersion: 1
249
249
  }
250
250
  }],
251
- meta: {
252
- addedIn: 1
251
+ metadata: {
252
+ addedInVersion: 1
253
253
  }
254
254
  }
255
255
  },
@@ -264,8 +264,8 @@ describe("generateModelsFromIr", () => {
264
264
  object: "ObjectNode",
265
265
  "text-box": "TextBox"
266
266
  },
267
- meta: {
268
- addedIn: 1
267
+ metadata: {
268
+ addedInVersion: 1
269
269
  }
270
270
  }
271
271
  }
@@ -306,19 +306,19 @@ describe("generateModelsFromIr", () => {
306
306
  key: "meow",
307
307
  name: "Meow",
308
308
  description: "Cat sound",
309
- value: {
309
+ fieldType: {
310
310
  type: "value",
311
311
  value: {
312
312
  type: "string",
313
313
  string: {}
314
314
  }
315
315
  },
316
- meta: {
317
- addedIn: 1
316
+ metadata: {
317
+ addedInVersion: 1
318
318
  }
319
319
  }],
320
- meta: {
321
- addedIn: 1
320
+ metadata: {
321
+ addedInVersion: 1
322
322
  }
323
323
  }
324
324
  },
@@ -332,19 +332,19 @@ describe("generateModelsFromIr", () => {
332
332
  key: "bark",
333
333
  name: "Bark",
334
334
  description: "Dog sound",
335
- value: {
335
+ fieldType: {
336
336
  type: "value",
337
337
  value: {
338
338
  type: "string",
339
339
  string: {}
340
340
  }
341
341
  },
342
- meta: {
343
- addedIn: 1
342
+ metadata: {
343
+ addedInVersion: 1
344
344
  }
345
345
  }],
346
- meta: {
347
- addedIn: 1
346
+ metadata: {
347
+ addedInVersion: 1
348
348
  }
349
349
  }
350
350
  },
@@ -359,8 +359,8 @@ describe("generateModelsFromIr", () => {
359
359
  cat: "Cat",
360
360
  dog: "Dog"
361
361
  },
362
- meta: {
363
- addedIn: 1
362
+ metadata: {
363
+ addedInVersion: 1
364
364
  }
365
365
  }
366
366
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generateModelsFromIr.test.js","names":["path","describe","expect","it","generateModelsFromIr","formatWithPrettier","snapshotDir","join","__dirname","result","name","description","version","primaryModelKeys","models","Person","type","record","key","fields","value","string","minLength","maxLength","meta","addedIn","integer","minValue","maxValue","formatted","lines","split","importLines","filter","line","startsWith","length","toBeGreaterThan","forEach","toMatch","toMatchFileSnapshot","Event","docRef","documentTypeRids","userRef","datetime","toContain","ObjectNode","double","TextBox","Node","union","discriminant","variants","object","Cat","Dog","Animal","cat","dog"],"sources":["generateModelsFromIr.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 path from \"path\";\nimport { describe, expect, it } from \"vitest\";\nimport type {\n IFieldDef,\n IModelDef,\n IRealTimeDocumentSchema,\n IRecordDef,\n IUnionDef,\n} from \"../../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { generateModelsFromIr } from \"../generateModelsFromIr.js\";\nimport { formatWithPrettier } from \"./formatWithPrettier.js\";\n\ndescribe(\"generateModelsFromIr\", () => {\n const snapshotDir = path.join(__dirname, \"__snapshots__\", \"generateModelsFromIr\");\n\n it(\"should generate Model constants for simple record types\", async () => {\n const personField1: IFieldDef = {\n key: \"name\",\n name: \"Name\",\n description: \"Person name\",\n value: {\n type: \"value\",\n value: {\n type: \"string\",\n string: { minLength: 2, maxLength: 50 },\n },\n },\n meta: { addedIn: 1 },\n };\n\n const personField2: IFieldDef = {\n key: \"age\",\n name: \"Age\",\n description: \"Person age\",\n value: {\n type: \"value\",\n value: {\n type: \"integer\",\n integer: { minValue: 0, maxValue: 150 },\n },\n },\n meta: { addedIn: 1 },\n };\n\n const personRecord: IRecordDef = {\n key: \"Person\",\n name: \"Person\",\n description: \"A person record\",\n fields: [personField1, personField2],\n meta: { addedIn: 1 },\n };\n\n const schema: IRealTimeDocumentSchema = {\n name: \"Test Schema\",\n description: \"A test schema\",\n version: 1,\n primaryModelKeys: [\"Person\"],\n models: {\n Person: {\n type: \"record\",\n record: personRecord,\n } as IModelDef,\n },\n };\n\n const result = await generateModelsFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n // Verify imports are properly formatted (no weird indentation)\n const lines = formatted.split(\"\\n\");\n const importLines = lines.filter(line => line.startsWith(\"import\"));\n expect(importLines.length).toBeGreaterThan(0);\n // All imports should start at column 0 (no leading whitespace)\n importLines.forEach(line => {\n expect(line).toMatch(/^import/);\n });\n\n await expect(formatted).toMatchFileSnapshot(path.join(snapshotDir, \"simple-record.ts\"));\n });\n\n it(\"should generate Model constants with external ref fields\", async () => {\n const eventField1: IFieldDef = {\n key: \"documentRef\",\n name: \"Document Reference\",\n description: \"Reference to a document\",\n value: {\n type: \"value\",\n value: {\n type: \"docRef\",\n docRef: {\n documentTypeRids: [],\n },\n },\n },\n meta: { addedIn: 1 },\n };\n\n const eventField2: IFieldDef = {\n key: \"userRef\",\n name: \"User Reference\",\n description: \"Reference to a user\",\n value: {\n type: \"value\",\n value: {\n type: \"userRef\",\n userRef: {},\n },\n },\n meta: { addedIn: 1 },\n };\n\n const eventField3: IFieldDef = {\n key: \"timestamp\",\n name: \"Timestamp\",\n description: \"Event timestamp\",\n value: {\n type: \"value\",\n value: {\n type: \"datetime\",\n datetime: {},\n },\n },\n meta: { addedIn: 1 },\n };\n\n const eventRecord: IRecordDef = {\n key: \"Event\",\n name: \"Event\",\n description: \"An event record with external refs\",\n fields: [eventField1, eventField2, eventField3],\n meta: { addedIn: 1 },\n };\n\n const schema: IRealTimeDocumentSchema = {\n name: \"Test Schema\",\n description: \"A test schema with external refs\",\n version: 1,\n primaryModelKeys: [\"Event\"],\n models: {\n Event: {\n type: \"record\",\n record: eventRecord,\n } as IModelDef,\n },\n };\n\n const result = await generateModelsFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n // Verify external ref fields are included in metadata\n expect(formatted).toContain(\"externalRefFieldTypes\");\n expect(formatted).toContain(\"documentRef: 'docRef'\");\n expect(formatted).toContain(\"userRef: 'userRef'\");\n\n await expect(formatted).toMatchFileSnapshot(path.join(snapshotDir, \"external-refs.ts\"));\n });\n\n it(\"should generate Model constants for union types\", async () => {\n // Define the ObjectNode record\n const objectNodeRecord: IRecordDef = {\n key: \"ObjectNode\",\n name: \"ObjectNode\",\n description: \"A node in the graph\",\n fields: [\n {\n key: \"x\",\n name: \"X\",\n description: \"X coordinate\",\n value: {\n type: \"value\",\n value: {\n type: \"double\",\n double: {},\n },\n },\n meta: { addedIn: 1 },\n },\n {\n key: \"y\",\n name: \"Y\",\n description: \"Y coordinate\",\n value: {\n type: \"value\",\n value: {\n type: \"double\",\n double: {},\n },\n },\n meta: { addedIn: 1 },\n },\n ],\n meta: { addedIn: 1 },\n };\n\n // Define the TextBox record\n const textBoxRecord: IRecordDef = {\n key: \"TextBox\",\n name: \"TextBox\",\n description: \"A text box in the graph\",\n fields: [\n {\n key: \"x\",\n name: \"X\",\n description: \"X coordinate\",\n value: {\n type: \"value\",\n value: {\n type: \"double\",\n double: {},\n },\n },\n meta: { addedIn: 1 },\n },\n {\n key: \"text\",\n name: \"Text\",\n description: \"Text content\",\n value: {\n type: \"value\",\n value: {\n type: \"string\",\n string: {},\n },\n },\n meta: { addedIn: 1 },\n },\n ],\n meta: { addedIn: 1 },\n };\n\n // Define the Node union\n const nodeUnion: IUnionDef = {\n key: \"Node\",\n discriminant: \"type\",\n name: \"Node\",\n description: \"A node in the graph\",\n variants: {\n object: \"ObjectNode\",\n \"text-box\": \"TextBox\",\n },\n meta: { addedIn: 1 },\n };\n\n const schema: IRealTimeDocumentSchema = {\n name: \"Test Schema\",\n description: \"A test schema with unions\",\n version: 1,\n primaryModelKeys: [\"ObjectNode\", \"TextBox\", \"Node\"],\n models: {\n ObjectNode: {\n type: \"record\",\n record: objectNodeRecord,\n } as IModelDef,\n TextBox: {\n type: \"record\",\n record: textBoxRecord,\n } as IModelDef,\n Node: {\n type: \"union\",\n union: nodeUnion,\n } as IModelDef,\n },\n };\n\n const result = await generateModelsFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n // Verify all models are generated (primary models + union variants)\n expect(formatted).toContain(\"export const ObjectNodeModel\");\n expect(formatted).toContain(\"export const TextBoxModel\");\n expect(formatted).toContain(\"export const NodeModel\");\n expect(formatted).toContain(\"export const NodeObjectModel\");\n expect(formatted).toContain(\"export const NodeTextBoxModel\");\n\n // Verify DocumentSchema contains all models\n expect(formatted).toContain(\"export const DocumentModel\");\n expect(formatted).toContain(\"ObjectNode: ObjectNodeModel\");\n expect(formatted).toContain(\"TextBox: TextBoxModel\");\n expect(formatted).toContain(\"Node: NodeModel\");\n expect(formatted).toContain(\"NodeObject: NodeObjectModel\");\n expect(formatted).toContain(\"NodeTextBox: NodeTextBoxModel\");\n\n await expect(formatted).toMatchFileSnapshot(path.join(snapshotDir, \"union-types.ts\"));\n });\n\n it(\"should generate Model constants with custom discriminant\", async () => {\n const catRecord: IRecordDef = {\n key: \"Cat\",\n name: \"Cat\",\n description: \"A cat\",\n fields: [\n {\n key: \"meow\",\n name: \"Meow\",\n description: \"Cat sound\",\n value: {\n type: \"value\",\n value: {\n type: \"string\",\n string: {},\n },\n },\n meta: { addedIn: 1 },\n },\n ],\n meta: { addedIn: 1 },\n };\n\n const dogRecord: IRecordDef = {\n key: \"Dog\",\n name: \"Dog\",\n description: \"A dog\",\n fields: [\n {\n key: \"bark\",\n name: \"Bark\",\n description: \"Dog sound\",\n value: {\n type: \"value\",\n value: {\n type: \"string\",\n string: {},\n },\n },\n meta: { addedIn: 1 },\n },\n ],\n meta: { addedIn: 1 },\n };\n\n const animalUnion: IUnionDef = {\n key: \"Animal\",\n discriminant: \"kind\",\n name: \"Animal\",\n description: \"An animal union with custom discriminant\",\n variants: {\n cat: \"Cat\",\n dog: \"Dog\",\n },\n meta: { addedIn: 1 },\n };\n\n const schema: IRealTimeDocumentSchema = {\n name: \"Test Schema\",\n description: \"A test schema with custom discriminant\",\n version: 1,\n primaryModelKeys: [\"Cat\", \"Dog\", \"Animal\"],\n models: {\n Cat: {\n type: \"record\",\n record: catRecord,\n } as IModelDef,\n Dog: {\n type: \"record\",\n record: dogRecord,\n } as IModelDef,\n Animal: {\n type: \"union\",\n union: animalUnion,\n } as IModelDef,\n },\n };\n\n const result = await generateModelsFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n expect(formatted).toContain(\"discriminant: 'kind'\");\n expect(formatted).toContain(\"export const AnimalModel\");\n expect(formatted).toContain(\"export const AnimalCatModel\");\n expect(formatted).toContain(\"export const AnimalDogModel\");\n\n await expect(formatted).toMatchFileSnapshot(\n path.join(snapshotDir, \"custom-discriminant.ts\"),\n );\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateModelsFromIr.test.js","names":["path","describe","expect","it","generateModelsFromIr","formatWithPrettier","snapshotDir","join","__dirname","result","name","description","version","primaryModelKeys","models","Person","type","record","key","fields","fieldType","value","string","minLength","maxLength","metadata","addedInVersion","integer","minValue","maxValue","formatted","lines","split","importLines","filter","line","startsWith","length","toBeGreaterThan","forEach","toMatch","toMatchFileSnapshot","Event","docRef","documentTypeRids","userRef","datetime","toContain","ObjectNode","double","TextBox","Node","union","discriminant","variants","object","Cat","Dog","Animal","cat","dog"],"sources":["generateModelsFromIr.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 path from \"path\";\nimport { describe, expect, it } from \"vitest\";\nimport type {\n IFieldDef,\n IModelDef,\n IRealTimeDocumentSchema,\n IRecordDef,\n IUnionDef,\n} from \"../../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { generateModelsFromIr } from \"../generateModelsFromIr.js\";\nimport { formatWithPrettier } from \"./formatWithPrettier.js\";\n\ndescribe(\"generateModelsFromIr\", () => {\n const snapshotDir = path.join(__dirname, \"__snapshots__\", \"generateModelsFromIr\");\n\n it(\"should generate Model constants for simple record types\", async () => {\n const personField1: IFieldDef = {\n key: \"name\",\n name: \"Name\",\n description: \"Person name\",\n fieldType: {\n type: \"value\",\n value: {\n type: \"string\",\n string: { minLength: 2, maxLength: 50 },\n },\n },\n metadata: { addedInVersion: 1 },\n };\n\n const personField2: IFieldDef = {\n key: \"age\",\n name: \"Age\",\n description: \"Person age\",\n fieldType: {\n type: \"value\",\n value: {\n type: \"integer\",\n integer: { minValue: 0, maxValue: 150 },\n },\n },\n metadata: { addedInVersion: 1 },\n };\n\n const personRecord: IRecordDef = {\n key: \"Person\",\n name: \"Person\",\n description: \"A person record\",\n fields: [personField1, personField2],\n metadata: { addedInVersion: 1 },\n };\n\n const schema: IRealTimeDocumentSchema = {\n name: \"Test Schema\",\n description: \"A test schema\",\n version: 1,\n primaryModelKeys: [\"Person\"],\n models: {\n Person: {\n type: \"record\",\n record: personRecord,\n } as IModelDef,\n },\n };\n\n const result = await generateModelsFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n // Verify imports are properly formatted (no weird indentation)\n const lines = formatted.split(\"\\n\");\n const importLines = lines.filter(line => line.startsWith(\"import\"));\n expect(importLines.length).toBeGreaterThan(0);\n // All imports should start at column 0 (no leading whitespace)\n importLines.forEach(line => {\n expect(line).toMatch(/^import/);\n });\n\n await expect(formatted).toMatchFileSnapshot(path.join(snapshotDir, \"simple-record.ts\"));\n });\n\n it(\"should generate Model constants with external ref fields\", async () => {\n const eventField1: IFieldDef = {\n key: \"documentRef\",\n name: \"Document Reference\",\n description: \"Reference to a document\",\n fieldType: {\n type: \"value\",\n value: {\n type: \"docRef\",\n docRef: {\n documentTypeRids: [],\n },\n },\n },\n metadata: { addedInVersion: 1 },\n };\n\n const eventField2: IFieldDef = {\n key: \"userRef\",\n name: \"User Reference\",\n description: \"Reference to a user\",\n fieldType: {\n type: \"value\",\n value: {\n type: \"userRef\",\n userRef: {},\n },\n },\n metadata: { addedInVersion: 1 },\n };\n\n const eventField3: IFieldDef = {\n key: \"timestamp\",\n name: \"Timestamp\",\n description: \"Event timestamp\",\n fieldType: {\n type: \"value\",\n value: {\n type: \"datetime\",\n datetime: {},\n },\n },\n metadata: { addedInVersion: 1 },\n };\n\n const eventRecord: IRecordDef = {\n key: \"Event\",\n name: \"Event\",\n description: \"An event record with external refs\",\n fields: [eventField1, eventField2, eventField3],\n metadata: { addedInVersion: 1 },\n };\n\n const schema: IRealTimeDocumentSchema = {\n name: \"Test Schema\",\n description: \"A test schema with external refs\",\n version: 1,\n primaryModelKeys: [\"Event\"],\n models: {\n Event: {\n type: \"record\",\n record: eventRecord,\n } as IModelDef,\n },\n };\n\n const result = await generateModelsFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n // Verify external ref fields are included in metadata\n expect(formatted).toContain(\"externalRefFieldTypes\");\n expect(formatted).toContain(\"documentRef: 'docRef'\");\n expect(formatted).toContain(\"userRef: 'userRef'\");\n\n await expect(formatted).toMatchFileSnapshot(path.join(snapshotDir, \"external-refs.ts\"));\n });\n\n it(\"should generate Model constants for union types\", async () => {\n // Define the ObjectNode record\n const objectNodeRecord: IRecordDef = {\n key: \"ObjectNode\",\n name: \"ObjectNode\",\n description: \"A node in the graph\",\n fields: [\n {\n key: \"x\",\n name: \"X\",\n description: \"X coordinate\",\n fieldType: {\n type: \"value\",\n value: {\n type: \"double\",\n double: {},\n },\n },\n metadata: { addedInVersion: 1 },\n },\n {\n key: \"y\",\n name: \"Y\",\n description: \"Y coordinate\",\n fieldType: {\n type: \"value\",\n value: {\n type: \"double\",\n double: {},\n },\n },\n metadata: { addedInVersion: 1 },\n },\n ],\n metadata: { addedInVersion: 1 },\n };\n\n // Define the TextBox record\n const textBoxRecord: IRecordDef = {\n key: \"TextBox\",\n name: \"TextBox\",\n description: \"A text box in the graph\",\n fields: [\n {\n key: \"x\",\n name: \"X\",\n description: \"X coordinate\",\n fieldType: {\n type: \"value\",\n value: {\n type: \"double\",\n double: {},\n },\n },\n metadata: { addedInVersion: 1 },\n },\n {\n key: \"text\",\n name: \"Text\",\n description: \"Text content\",\n fieldType: {\n type: \"value\",\n value: {\n type: \"string\",\n string: {},\n },\n },\n metadata: { addedInVersion: 1 },\n },\n ],\n metadata: { addedInVersion: 1 },\n };\n\n // Define the Node union\n const nodeUnion: IUnionDef = {\n key: \"Node\",\n discriminant: \"type\",\n name: \"Node\",\n description: \"A node in the graph\",\n variants: {\n object: \"ObjectNode\",\n \"text-box\": \"TextBox\",\n },\n metadata: { addedInVersion: 1 },\n };\n\n const schema: IRealTimeDocumentSchema = {\n name: \"Test Schema\",\n description: \"A test schema with unions\",\n version: 1,\n primaryModelKeys: [\"ObjectNode\", \"TextBox\", \"Node\"],\n models: {\n ObjectNode: {\n type: \"record\",\n record: objectNodeRecord,\n } as IModelDef,\n TextBox: {\n type: \"record\",\n record: textBoxRecord,\n } as IModelDef,\n Node: {\n type: \"union\",\n union: nodeUnion,\n } as IModelDef,\n },\n };\n\n const result = await generateModelsFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n // Verify all models are generated (primary models + union variants)\n expect(formatted).toContain(\"export const ObjectNodeModel\");\n expect(formatted).toContain(\"export const TextBoxModel\");\n expect(formatted).toContain(\"export const NodeModel\");\n expect(formatted).toContain(\"export const NodeObjectModel\");\n expect(formatted).toContain(\"export const NodeTextBoxModel\");\n\n // Verify DocumentSchema contains all models\n expect(formatted).toContain(\"export const DocumentModel\");\n expect(formatted).toContain(\"ObjectNode: ObjectNodeModel\");\n expect(formatted).toContain(\"TextBox: TextBoxModel\");\n expect(formatted).toContain(\"Node: NodeModel\");\n expect(formatted).toContain(\"NodeObject: NodeObjectModel\");\n expect(formatted).toContain(\"NodeTextBox: NodeTextBoxModel\");\n\n await expect(formatted).toMatchFileSnapshot(path.join(snapshotDir, \"union-types.ts\"));\n });\n\n it(\"should generate Model constants with custom discriminant\", async () => {\n const catRecord: IRecordDef = {\n key: \"Cat\",\n name: \"Cat\",\n description: \"A cat\",\n fields: [\n {\n key: \"meow\",\n name: \"Meow\",\n description: \"Cat sound\",\n fieldType: {\n type: \"value\",\n value: {\n type: \"string\",\n string: {},\n },\n },\n metadata: { addedInVersion: 1 },\n },\n ],\n metadata: { addedInVersion: 1 },\n };\n\n const dogRecord: IRecordDef = {\n key: \"Dog\",\n name: \"Dog\",\n description: \"A dog\",\n fields: [\n {\n key: \"bark\",\n name: \"Bark\",\n description: \"Dog sound\",\n fieldType: {\n type: \"value\",\n value: {\n type: \"string\",\n string: {},\n },\n },\n metadata: { addedInVersion: 1 },\n },\n ],\n metadata: { addedInVersion: 1 },\n };\n\n const animalUnion: IUnionDef = {\n key: \"Animal\",\n discriminant: \"kind\",\n name: \"Animal\",\n description: \"An animal union with custom discriminant\",\n variants: {\n cat: \"Cat\",\n dog: \"Dog\",\n },\n metadata: { addedInVersion: 1 },\n };\n\n const schema: IRealTimeDocumentSchema = {\n name: \"Test Schema\",\n description: \"A test schema with custom discriminant\",\n version: 1,\n primaryModelKeys: [\"Cat\", \"Dog\", \"Animal\"],\n models: {\n Cat: {\n type: \"record\",\n record: catRecord,\n } as IModelDef,\n Dog: {\n type: \"record\",\n record: dogRecord,\n } as IModelDef,\n Animal: {\n type: \"union\",\n union: animalUnion,\n } as IModelDef,\n },\n };\n\n const result = await generateModelsFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n expect(formatted).toContain(\"discriminant: 'kind'\");\n expect(formatted).toContain(\"export const AnimalModel\");\n expect(formatted).toContain(\"export const AnimalCatModel\");\n expect(formatted).toContain(\"export const AnimalDogModel\");\n\n await expect(formatted).toMatchFileSnapshot(\n path.join(snapshotDir, \"custom-discriminant.ts\"),\n );\n });\n});\n"],"mappings":"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","ignoreList":[]}