@palantir/pack.document-schema.type-gen 0.7.0 → 0.9.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 (195) 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 +19 -13
  10. package/build/esm/commands/ir/irGenAssetHandler.js.map +1 -1
  11. package/build/esm/commands/schema/registerSchemaCommands.js +2 -0
  12. package/build/esm/commands/schema/registerSchemaCommands.js.map +1 -1
  13. package/build/esm/commands/schema/schemaGenTypesHandler.js +147 -0
  14. package/build/esm/commands/schema/schemaGenTypesHandler.js.map +1 -0
  15. package/build/esm/commands/steps/stepsGenIrHandler.js +6 -1
  16. package/build/esm/commands/steps/stepsGenIrHandler.js.map +1 -1
  17. package/build/esm/commands/types.js +2 -0
  18. package/build/esm/commands/types.js.map +1 -0
  19. package/build/esm/index.js +6 -0
  20. package/build/esm/index.js.map +1 -1
  21. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldDef.js.map +1 -1
  22. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueDatetime.js.map +1 -1
  23. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueMediaRef.js.map +1 -1
  24. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueText.js.map +1 -1
  25. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/recordDef.js.map +1 -1
  26. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.js.map +1 -1
  27. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/unionDef.js.map +1 -1
  28. package/build/esm/utils/generatedFileHeader.js +1 -0
  29. package/build/esm/utils/generatedFileHeader.js.map +1 -1
  30. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js +1 -1
  31. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js.map +1 -1
  32. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js +1 -1
  33. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js.map +1 -1
  34. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js +1 -1
  35. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js.map +1 -1
  36. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js +1 -1
  37. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js.map +1 -1
  38. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js +1 -1
  39. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js.map +1 -1
  40. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js +1 -1
  41. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js.map +1 -1
  42. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js +1 -1
  43. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js.map +1 -1
  44. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js +1 -1
  45. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js.map +1 -1
  46. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js +1 -1
  47. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js.map +1 -1
  48. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js +1 -1
  49. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js.map +1 -1
  50. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js +1 -1
  51. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js.map +1 -1
  52. package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js +323 -0
  53. package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js.map +1 -0
  54. package/build/esm/utils/ir/__tests__/generateModelsFromIr.test.js +43 -61
  55. package/build/esm/utils/ir/__tests__/generateModelsFromIr.test.js.map +1 -1
  56. package/build/esm/utils/ir/__tests__/generateZodSchemasFromIr.test.js +73 -103
  57. package/build/esm/utils/ir/__tests__/generateZodSchemasFromIr.test.js.map +1 -1
  58. package/build/esm/utils/ir/convertIrToWireSchema.js +201 -0
  59. package/build/esm/utils/ir/convertIrToWireSchema.js.map +1 -0
  60. package/build/esm/utils/ir/generateModelsFromIr.js +2 -2
  61. package/build/esm/utils/ir/generateModelsFromIr.js.map +1 -1
  62. package/build/esm/utils/ir/generateZodSchemasFromIr.js +2 -2
  63. package/build/esm/utils/ir/generateZodSchemasFromIr.js.map +1 -1
  64. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/single-version.js +2 -0
  65. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/single-version.js.map +1 -0
  66. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/three-version-chain.js +2 -0
  67. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/three-version-chain.js.map +1 -0
  68. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/two-version.js +2 -0
  69. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/two-version.js.map +1 -0
  70. package/build/esm/utils/schema/__tests__/fixtures.js +207 -0
  71. package/build/esm/utils/schema/__tests__/fixtures.js.map +1 -0
  72. package/build/esm/utils/schema/__tests__/generateInternalFromSchema.test.js +41 -0
  73. package/build/esm/utils/schema/__tests__/generateInternalFromSchema.test.js.map +1 -0
  74. package/build/esm/utils/schema/__tests__/generateModelMetadataFromSchema.test.js +41 -0
  75. package/build/esm/utils/schema/__tests__/generateModelMetadataFromSchema.test.js.map +1 -0
  76. package/build/esm/utils/schema/__tests__/generateScopeFromSchema.test.js +37 -0
  77. package/build/esm/utils/schema/__tests__/generateScopeFromSchema.test.js.map +1 -0
  78. package/build/esm/utils/schema/__tests__/generateVersionedTypesFromSchema.test.js +55 -0
  79. package/build/esm/utils/schema/__tests__/generateVersionedTypesFromSchema.test.js.map +1 -0
  80. package/build/esm/utils/schema/__tests__/generateVersionedZodFromSchema.test.js +55 -0
  81. package/build/esm/utils/schema/__tests__/generateVersionedZodFromSchema.test.js.map +1 -0
  82. package/build/esm/utils/schema/__tests__/generateVersionsFromSchema.test.js +37 -0
  83. package/build/esm/utils/schema/__tests__/generateVersionsFromSchema.test.js.map +1 -0
  84. package/build/esm/utils/schema/__tests__/snapshotUtils.js +106 -0
  85. package/build/esm/utils/schema/__tests__/snapshotUtils.js.map +1 -0
  86. package/build/esm/utils/schema/generateIndexFromSchema.js +72 -0
  87. package/build/esm/utils/schema/generateIndexFromSchema.js.map +1 -0
  88. package/build/esm/utils/schema/generateInternalFromSchema.js +380 -0
  89. package/build/esm/utils/schema/generateInternalFromSchema.js.map +1 -0
  90. package/build/esm/utils/schema/generateModelMetadataFromSchema.js +195 -0
  91. package/build/esm/utils/schema/generateModelMetadataFromSchema.js.map +1 -0
  92. package/build/esm/utils/schema/generateScopeFromSchema.js +155 -0
  93. package/build/esm/utils/schema/generateScopeFromSchema.js.map +1 -0
  94. package/build/esm/utils/schema/generateTypesFromSchema.js +16 -30
  95. package/build/esm/utils/schema/generateTypesFromSchema.js.map +1 -1
  96. package/build/esm/utils/schema/generateVersionedTypesFromSchema.js +281 -0
  97. package/build/esm/utils/schema/generateVersionedTypesFromSchema.js.map +1 -0
  98. package/build/esm/utils/schema/generateVersionedZodFromSchema.js +189 -0
  99. package/build/esm/utils/schema/generateVersionedZodFromSchema.js.map +1 -0
  100. package/build/esm/utils/schema/generateVersionsFromSchema.js +50 -0
  101. package/build/esm/utils/schema/generateVersionsFromSchema.js.map +1 -0
  102. package/build/esm/utils/schema/resolveSchemaChain.js +54 -0
  103. package/build/esm/utils/schema/resolveSchemaChain.js.map +1 -0
  104. package/build/esm/utils/schema/runtimeSchema.js +96 -0
  105. package/build/esm/utils/schema/runtimeSchema.js.map +1 -0
  106. package/build/esm/utils/steps/__tests__/__snapshots__/types/arrayFields.js.map +1 -1
  107. package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js +1 -1
  108. package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js.map +1 -1
  109. package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js +1 -1
  110. package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js.map +1 -1
  111. package/build/esm/utils/steps/__tests__/__snapshots__/types/refTypes.js.map +1 -1
  112. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleRecord.js.map +1 -1
  113. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js +1 -1
  114. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js.map +1 -1
  115. package/build/esm/utils/steps/__tests__/convertStepsToIr.test.js +81 -8
  116. package/build/esm/utils/steps/__tests__/convertStepsToIr.test.js.map +1 -1
  117. package/build/esm/utils/steps/convertStepsToIr.js +8 -13
  118. package/build/esm/utils/steps/convertStepsToIr.js.map +1 -1
  119. package/build/esm/utils/steps/parseMigrationSteps.js +4 -2
  120. package/build/esm/utils/steps/parseMigrationSteps.js.map +1 -1
  121. package/build/types/cli.d.ts.map +1 -1
  122. package/build/types/commands/asset/assetDeployHandler.d.ts +10 -0
  123. package/build/types/commands/asset/assetDeployHandler.d.ts.map +1 -0
  124. package/build/types/commands/asset/registerAssetCommands.d.ts +3 -0
  125. package/build/types/commands/asset/registerAssetCommands.d.ts.map +1 -0
  126. package/build/types/commands/ir/irDeployHandler.d.ts +1 -1
  127. package/build/types/commands/ir/irDeployHandler.d.ts.map +1 -1
  128. package/build/types/commands/ir/irGenAssetHandler.d.ts +1 -1
  129. package/build/types/commands/ir/irGenAssetHandler.d.ts.map +1 -1
  130. package/build/types/commands/schema/registerSchemaCommands.d.ts.map +1 -1
  131. package/build/types/commands/schema/schemaGenTypesHandler.d.ts +8 -0
  132. package/build/types/commands/schema/schemaGenTypesHandler.d.ts.map +1 -0
  133. package/build/types/commands/steps/stepsGenIrHandler.d.ts.map +1 -1
  134. package/build/types/commands/types.d.ts +12 -0
  135. package/build/types/commands/types.d.ts.map +1 -0
  136. package/build/types/index.d.ts +6 -0
  137. package/build/types/index.d.ts.map +1 -1
  138. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldDef.d.ts +2 -2
  139. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldDef.d.ts.map +1 -1
  140. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueDatetime.d.ts +1 -0
  141. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueDatetime.d.ts.map +1 -1
  142. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueMediaRef.d.ts +1 -0
  143. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueMediaRef.d.ts.map +1 -1
  144. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueText.d.ts +3 -0
  145. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueText.d.ts.map +1 -1
  146. package/build/types/lib/pack-docschema-api/pack-docschema-ir/recordDef.d.ts +0 -2
  147. package/build/types/lib/pack-docschema-api/pack-docschema-ir/recordDef.d.ts.map +1 -1
  148. package/build/types/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.d.ts +2 -2
  149. package/build/types/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.d.ts.map +1 -1
  150. package/build/types/lib/pack-docschema-api/pack-docschema-ir/unionDef.d.ts +1 -1
  151. package/build/types/lib/pack-docschema-api/pack-docschema-ir/unionDef.d.ts.map +1 -1
  152. package/build/types/utils/generatedFileHeader.d.ts +1 -0
  153. package/build/types/utils/generatedFileHeader.d.ts.map +1 -1
  154. package/build/types/utils/ir/__tests__/convertIrToWireSchema.test.d.ts +2 -0
  155. package/build/types/utils/ir/__tests__/convertIrToWireSchema.test.d.ts.map +1 -0
  156. package/build/types/utils/ir/convertIrToWireSchema.d.ts +17 -0
  157. package/build/types/utils/ir/convertIrToWireSchema.d.ts.map +1 -0
  158. package/build/types/utils/schema/__tests__/fixtures.d.ts +14 -0
  159. package/build/types/utils/schema/__tests__/fixtures.d.ts.map +1 -0
  160. package/build/types/utils/schema/__tests__/generateInternalFromSchema.test.d.ts +2 -0
  161. package/build/types/utils/schema/__tests__/generateInternalFromSchema.test.d.ts.map +1 -0
  162. package/build/types/utils/schema/__tests__/generateModelMetadataFromSchema.test.d.ts +2 -0
  163. package/build/types/utils/schema/__tests__/generateModelMetadataFromSchema.test.d.ts.map +1 -0
  164. package/build/types/utils/schema/__tests__/generateScopeFromSchema.test.d.ts +2 -0
  165. package/build/types/utils/schema/__tests__/generateScopeFromSchema.test.d.ts.map +1 -0
  166. package/build/types/utils/schema/__tests__/generateVersionedTypesFromSchema.test.d.ts +2 -0
  167. package/build/types/utils/schema/__tests__/generateVersionedTypesFromSchema.test.d.ts.map +1 -0
  168. package/build/types/utils/schema/__tests__/generateVersionedZodFromSchema.test.d.ts +2 -0
  169. package/build/types/utils/schema/__tests__/generateVersionedZodFromSchema.test.d.ts.map +1 -0
  170. package/build/types/utils/schema/__tests__/generateVersionsFromSchema.test.d.ts +2 -0
  171. package/build/types/utils/schema/__tests__/generateVersionsFromSchema.test.d.ts.map +1 -0
  172. package/build/types/utils/schema/__tests__/snapshotUtils.d.ts +47 -0
  173. package/build/types/utils/schema/__tests__/snapshotUtils.d.ts.map +1 -0
  174. package/build/types/utils/schema/generateIndexFromSchema.d.ts +14 -0
  175. package/build/types/utils/schema/generateIndexFromSchema.d.ts.map +1 -0
  176. package/build/types/utils/schema/generateInternalFromSchema.d.ts +18 -0
  177. package/build/types/utils/schema/generateInternalFromSchema.d.ts.map +1 -0
  178. package/build/types/utils/schema/generateModelMetadataFromSchema.d.ts +15 -0
  179. package/build/types/utils/schema/generateModelMetadataFromSchema.d.ts.map +1 -0
  180. package/build/types/utils/schema/generateScopeFromSchema.d.ts +13 -0
  181. package/build/types/utils/schema/generateScopeFromSchema.d.ts.map +1 -0
  182. package/build/types/utils/schema/generateTypesFromSchema.d.ts.map +1 -1
  183. package/build/types/utils/schema/generateVersionedTypesFromSchema.d.ts +18 -0
  184. package/build/types/utils/schema/generateVersionedTypesFromSchema.d.ts.map +1 -0
  185. package/build/types/utils/schema/generateVersionedZodFromSchema.d.ts +16 -0
  186. package/build/types/utils/schema/generateVersionedZodFromSchema.d.ts.map +1 -0
  187. package/build/types/utils/schema/generateVersionsFromSchema.d.ts +13 -0
  188. package/build/types/utils/schema/generateVersionsFromSchema.d.ts.map +1 -0
  189. package/build/types/utils/schema/resolveSchemaChain.d.ts +18 -0
  190. package/build/types/utils/schema/resolveSchemaChain.d.ts.map +1 -0
  191. package/build/types/utils/schema/runtimeSchema.d.ts +59 -0
  192. package/build/types/utils/schema/runtimeSchema.d.ts.map +1 -0
  193. package/build/types/utils/steps/convertStepsToIr.d.ts.map +1 -1
  194. package/build/types/utils/steps/parseMigrationSteps.d.ts.map +1 -1
  195. package/package.json +4 -4
@@ -0,0 +1,54 @@
1
+ /*
2
+ * Copyright 2026 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ function collectVersionedSchemaChain(input) {
18
+ const chain = [];
19
+ let current = input;
20
+ while (current.type === "versioned") {
21
+ chain.unshift({
22
+ version: current.version,
23
+ schema: current.models,
24
+ migrations: current.migrations
25
+ });
26
+ current = current.previous;
27
+ }
28
+ chain.unshift({
29
+ version: current.version,
30
+ schema: current.models
31
+ });
32
+ return chain;
33
+ }
34
+
35
+ /**
36
+ * Collect the version chain and resolve min/latest versions.
37
+ * Throws on empty chain or invalid minSupportedVersion.
38
+ */
39
+ export function resolveSchemaChain(schema, minSupportedVersion) {
40
+ const chain = collectVersionedSchemaChain(schema);
41
+ if (chain.length === 0) {
42
+ throw new Error("Schema version chain is empty");
43
+ }
44
+ const latestVersion = chain[chain.length - 1].version;
45
+ if (minSupportedVersion != null && !chain.some(c => c.version === minSupportedVersion)) {
46
+ throw new Error(`minSupportedVersion ${minSupportedVersion} is not in the schema chain ` + `(available versions: ${chain.map(c => c.version).join(", ")})`);
47
+ }
48
+ return {
49
+ chain,
50
+ latestVersion,
51
+ minVersion: minSupportedVersion ?? latestVersion
52
+ };
53
+ }
54
+ //# sourceMappingURL=resolveSchemaChain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveSchemaChain.js","names":["collectVersionedSchemaChain","input","chain","current","type","unshift","version","schema","models","migrations","previous","resolveSchemaChain","minSupportedVersion","length","Error","latestVersion","some","c","map","join","minVersion"],"sources":["resolveSchemaChain.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { SchemaDefinition, VersionMigrations } from \"@palantir/pack.schema\";\nimport type { RuntimeSchema } from \"./runtimeSchema.js\";\n\nexport interface VersionedSchemaEntry {\n version: number;\n schema: RuntimeSchema;\n migrations?: VersionMigrations;\n}\n\nexport interface ResolvedSchemaChain {\n chain: VersionedSchemaEntry[];\n latestVersion: number;\n minVersion: number;\n}\n\nfunction collectVersionedSchemaChain(input: SchemaDefinition): VersionedSchemaEntry[] {\n const chain: VersionedSchemaEntry[] = [];\n let current: SchemaDefinition = input;\n\n while (current.type === \"versioned\") {\n chain.unshift({\n version: current.version,\n schema: current.models as RuntimeSchema,\n migrations: current.migrations,\n });\n current = current.previous;\n }\n chain.unshift({ version: current.version, schema: current.models as RuntimeSchema });\n\n return chain;\n}\n\n/**\n * Collect the version chain and resolve min/latest versions.\n * Throws on empty chain or invalid minSupportedVersion.\n */\nexport function resolveSchemaChain(\n schema: SchemaDefinition,\n minSupportedVersion?: number,\n): ResolvedSchemaChain {\n const chain = collectVersionedSchemaChain(schema);\n\n if (chain.length === 0) {\n throw new Error(\"Schema version chain is empty\");\n }\n\n const latestVersion = chain[chain.length - 1]!.version;\n\n if (minSupportedVersion != null && !chain.some(c => c.version === minSupportedVersion)) {\n throw new Error(\n `minSupportedVersion ${minSupportedVersion} is not in the schema chain `\n + `(available versions: ${chain.map(c => c.version).join(\", \")})`,\n );\n }\n\n const minVersion = minSupportedVersion ?? latestVersion;\n\n return { chain, latestVersion, minVersion };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAiBA,SAASA,2BAA2BA,CAACC,KAAuB,EAA0B;EACpF,MAAMC,KAA6B,GAAG,EAAE;EACxC,IAAIC,OAAyB,GAAGF,KAAK;EAErC,OAAOE,OAAO,CAACC,IAAI,KAAK,WAAW,EAAE;IACnCF,KAAK,CAACG,OAAO,CAAC;MACZC,OAAO,EAAEH,OAAO,CAACG,OAAO;MACxBC,MAAM,EAAEJ,OAAO,CAACK,MAAuB;MACvCC,UAAU,EAAEN,OAAO,CAACM;IACtB,CAAC,CAAC;IACFN,OAAO,GAAGA,OAAO,CAACO,QAAQ;EAC5B;EACAR,KAAK,CAACG,OAAO,CAAC;IAAEC,OAAO,EAAEH,OAAO,CAACG,OAAO;IAAEC,MAAM,EAAEJ,OAAO,CAACK;EAAwB,CAAC,CAAC;EAEpF,OAAON,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASS,kBAAkBA,CAChCJ,MAAwB,EACxBK,mBAA4B,EACP;EACrB,MAAMV,KAAK,GAAGF,2BAA2B,CAACO,MAAM,CAAC;EAEjD,IAAIL,KAAK,CAACW,MAAM,KAAK,CAAC,EAAE;IACtB,MAAM,IAAIC,KAAK,CAAC,+BAA+B,CAAC;EAClD;EAEA,MAAMC,aAAa,GAAGb,KAAK,CAACA,KAAK,CAACW,MAAM,GAAG,CAAC,CAAC,CAAEP,OAAO;EAEtD,IAAIM,mBAAmB,IAAI,IAAI,IAAI,CAACV,KAAK,CAACc,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACX,OAAO,KAAKM,mBAAmB,CAAC,EAAE;IACtF,MAAM,IAAIE,KAAK,CACb,uBAAuBF,mBAAmB,8BAA8B,GACpE,wBAAwBV,KAAK,CAACgB,GAAG,CAACD,CAAC,IAAIA,CAAC,CAACX,OAAO,CAAC,CAACa,IAAI,CAAC,IAAI,CAAC,GAClE,CAAC;EACH;EAIA,OAAO;IAAEjB,KAAK;IAAEa,aAAa;IAAEK,UAAU,EAFtBR,mBAAmB,IAAIG;EAEA,CAAC;AAC7C","ignoreList":[]}
@@ -0,0 +1,96 @@
1
+ /*
2
+ * Copyright 2026 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { TypeKind as SchemaTypeKind } from "@palantir/pack.schema";
18
+ export const TypeKind = {
19
+ ...SchemaTypeKind,
20
+ ANY: "any"
21
+ };
22
+ export const SchemaDefKind = {
23
+ RECORD: "record",
24
+ UNION: "union"
25
+ };
26
+
27
+ // Runtime types mirroring the schema structure
28
+
29
+ export function isRecordSchema(item) {
30
+ return item.type === SchemaDefKind.RECORD && "fields" in item;
31
+ }
32
+ export function isUnionSchema(item) {
33
+ return item.type === SchemaDefKind.UNION && "variants" in item;
34
+ }
35
+ export function findRecordExportName(recordName, schema) {
36
+ for (const [exportName, item] of Object.entries(schema)) {
37
+ if (isRecordSchema(item) && item.name === recordName) {
38
+ return exportName;
39
+ }
40
+ }
41
+ return null;
42
+ }
43
+
44
+ /** Versioned read type name: `RecordName_vN` */
45
+ export function versionedTypeName(exportName, version) {
46
+ return `${exportName}_v${version}`;
47
+ }
48
+
49
+ /** Versioned write type name: `RecordNameUpdate_vN` */
50
+ export function versionedWriteTypeName(exportName, version) {
51
+ return `${exportName}Update_v${version}`;
52
+ }
53
+
54
+ /** Versioned Zod schema name: `RecordNameSchema_vN` */
55
+ export function versionedSchemaName(exportName, version) {
56
+ return `${exportName}Schema_v${version}`;
57
+ }
58
+
59
+ /** Model constant name: `RecordNameModel` */
60
+ export function modelName(exportName) {
61
+ return `${exportName}Model`;
62
+ }
63
+
64
+ /** Unversioned Zod schema name: `RecordNameSchema` */
65
+ export function schemaName(exportName) {
66
+ return `${exportName}Schema`;
67
+ }
68
+
69
+ /** Per-version types file path: `./types_vN.js` */
70
+ export function typesFilePath(version) {
71
+ return `./types_v${version}.js`;
72
+ }
73
+
74
+ /** Per-version write types file path: `./writeTypes_vN.js` */
75
+ export function writeTypesFilePath(version) {
76
+ return `./writeTypes_v${version}.js`;
77
+ }
78
+
79
+ /** Types re-export file path: `./types.js` */
80
+ export const TYPES_REEXPORT_PATH = "./types.js";
81
+
82
+ /** Schema re-export file path: `./schema.js` */
83
+ export const SCHEMA_REEXPORT_PATH = "./schema.js";
84
+
85
+ /** Models file path: `./models.js` */
86
+ export const MODELS_PATH = "./models.js";
87
+
88
+ /** Internal upgrades file path: `./_internal/upgrades.js` */
89
+ export const INTERNAL_UPGRADES_PATH = "./_internal/upgrades.js";
90
+
91
+ /** Versions file path: `./versions.js` */
92
+ export const VERSIONS_PATH = "./versions.js";
93
+
94
+ /** Versioned doc ref file path: `./versionedDocRef.js` */
95
+ export const VERSIONED_DOC_REF_PATH = "./versionedDocRef.js";
96
+ //# sourceMappingURL=runtimeSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimeSchema.js","names":["TypeKind","SchemaTypeKind","ANY","SchemaDefKind","RECORD","UNION","isRecordSchema","item","type","isUnionSchema","findRecordExportName","recordName","schema","exportName","Object","entries","name","versionedTypeName","version","versionedWriteTypeName","versionedSchemaName","modelName","schemaName","typesFilePath","writeTypesFilePath","TYPES_REEXPORT_PATH","SCHEMA_REEXPORT_PATH","MODELS_PATH","INTERNAL_UPGRADES_PATH","VERSIONS_PATH","VERSIONED_DOC_REF_PATH"],"sources":["runtimeSchema.ts"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TypeKind as SchemaTypeKind } from \"@palantir/pack.schema\";\n\nexport const TypeKind: typeof SchemaTypeKind & { readonly ANY: \"any\" } = {\n ...SchemaTypeKind,\n ANY: \"any\",\n};\n\nexport const SchemaDefKind = {\n RECORD: \"record\",\n UNION: \"union\",\n} as const;\n\n// Runtime types mirroring the schema structure\nexport interface SchemaField {\n readonly type: string;\n readonly items?: SchemaField;\n readonly item?: SchemaField;\n readonly refType?: \"record\" | \"union\";\n readonly name?: string;\n}\n\nexport interface RuntimeSchemaRecord {\n readonly type: typeof SchemaDefKind.RECORD;\n readonly name: string;\n readonly docs?: string;\n readonly fields: Readonly<Record<string, SchemaField>>;\n}\n\nexport interface RuntimeSchemaUnion {\n readonly type: typeof SchemaDefKind.UNION;\n readonly name?: string;\n readonly variants: Readonly<Record<string, SchemaField>>;\n readonly discriminant: string;\n}\n\nexport type RuntimeSchemaItem = RuntimeSchemaRecord | RuntimeSchemaUnion;\nexport type RuntimeSchema = Record<string, RuntimeSchemaItem>;\n\nexport function isRecordSchema(item: RuntimeSchemaItem): item is RuntimeSchemaRecord {\n return item.type === SchemaDefKind.RECORD && \"fields\" in item;\n}\n\nexport function isUnionSchema(item: RuntimeSchemaItem): item is RuntimeSchemaUnion {\n return item.type === SchemaDefKind.UNION && \"variants\" in item;\n}\n\nexport function findRecordExportName(recordName: string, schema: RuntimeSchema): string | null {\n for (const [exportName, item] of Object.entries(schema)) {\n if (isRecordSchema(item) && item.name === recordName) {\n return exportName;\n }\n }\n return null;\n}\n\n/** Versioned read type name: `RecordName_vN` */\nexport function versionedTypeName(exportName: string, version: number): string {\n return `${exportName}_v${version}`;\n}\n\n/** Versioned write type name: `RecordNameUpdate_vN` */\nexport function versionedWriteTypeName(exportName: string, version: number): string {\n return `${exportName}Update_v${version}`;\n}\n\n/** Versioned Zod schema name: `RecordNameSchema_vN` */\nexport function versionedSchemaName(exportName: string, version: number): string {\n return `${exportName}Schema_v${version}`;\n}\n\n/** Model constant name: `RecordNameModel` */\nexport function modelName(exportName: string): string {\n return `${exportName}Model`;\n}\n\n/** Unversioned Zod schema name: `RecordNameSchema` */\nexport function schemaName(exportName: string): string {\n return `${exportName}Schema`;\n}\n\n/** Per-version types file path: `./types_vN.js` */\nexport function typesFilePath(version: number): string {\n return `./types_v${version}.js`;\n}\n\n/** Per-version write types file path: `./writeTypes_vN.js` */\nexport function writeTypesFilePath(version: number): string {\n return `./writeTypes_v${version}.js`;\n}\n\n/** Types re-export file path: `./types.js` */\nexport const TYPES_REEXPORT_PATH = \"./types.js\";\n\n/** Schema re-export file path: `./schema.js` */\nexport const SCHEMA_REEXPORT_PATH = \"./schema.js\";\n\n/** Models file path: `./models.js` */\nexport const MODELS_PATH = \"./models.js\";\n\n/** Internal upgrades file path: `./_internal/upgrades.js` */\nexport const INTERNAL_UPGRADES_PATH = \"./_internal/upgrades.js\";\n\n/** Versions file path: `./versions.js` */\nexport const VERSIONS_PATH = \"./versions.js\";\n\n/** Versioned doc ref file path: `./versionedDocRef.js` */\nexport const VERSIONED_DOC_REF_PATH = \"./versionedDocRef.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,IAAIC,cAAc,QAAQ,uBAAuB;AAElE,OAAO,MAAMD,QAAyD,GAAG;EACvE,GAAGC,cAAc;EACjBC,GAAG,EAAE;AACP,CAAC;AAED,OAAO,MAAMC,aAAa,GAAG;EAC3BC,MAAM,EAAE,QAAQ;EAChBC,KAAK,EAAE;AACT,CAAU;;AAEV;;AA0BA,OAAO,SAASC,cAAcA,CAACC,IAAuB,EAA+B;EACnF,OAAOA,IAAI,CAACC,IAAI,KAAKL,aAAa,CAACC,MAAM,IAAI,QAAQ,IAAIG,IAAI;AAC/D;AAEA,OAAO,SAASE,aAAaA,CAACF,IAAuB,EAA8B;EACjF,OAAOA,IAAI,CAACC,IAAI,KAAKL,aAAa,CAACE,KAAK,IAAI,UAAU,IAAIE,IAAI;AAChE;AAEA,OAAO,SAASG,oBAAoBA,CAACC,UAAkB,EAAEC,MAAqB,EAAiB;EAC7F,KAAK,MAAM,CAACC,UAAU,EAAEN,IAAI,CAAC,IAAIO,MAAM,CAACC,OAAO,CAACH,MAAM,CAAC,EAAE;IACvD,IAAIN,cAAc,CAACC,IAAI,CAAC,IAAIA,IAAI,CAACS,IAAI,KAAKL,UAAU,EAAE;MACpD,OAAOE,UAAU;IACnB;EACF;EACA,OAAO,IAAI;AACb;;AAEA;AACA,OAAO,SAASI,iBAAiBA,CAACJ,UAAkB,EAAEK,OAAe,EAAU;EAC7E,OAAO,GAAGL,UAAU,KAAKK,OAAO,EAAE;AACpC;;AAEA;AACA,OAAO,SAASC,sBAAsBA,CAACN,UAAkB,EAAEK,OAAe,EAAU;EAClF,OAAO,GAAGL,UAAU,WAAWK,OAAO,EAAE;AAC1C;;AAEA;AACA,OAAO,SAASE,mBAAmBA,CAACP,UAAkB,EAAEK,OAAe,EAAU;EAC/E,OAAO,GAAGL,UAAU,WAAWK,OAAO,EAAE;AAC1C;;AAEA;AACA,OAAO,SAASG,SAASA,CAACR,UAAkB,EAAU;EACpD,OAAO,GAAGA,UAAU,OAAO;AAC7B;;AAEA;AACA,OAAO,SAASS,UAAUA,CAACT,UAAkB,EAAU;EACrD,OAAO,GAAGA,UAAU,QAAQ;AAC9B;;AAEA;AACA,OAAO,SAASU,aAAaA,CAACL,OAAe,EAAU;EACrD,OAAO,YAAYA,OAAO,KAAK;AACjC;;AAEA;AACA,OAAO,SAASM,kBAAkBA,CAACN,OAAe,EAAU;EAC1D,OAAO,iBAAiBA,OAAO,KAAK;AACtC;;AAEA;AACA,OAAO,MAAMO,mBAAmB,GAAG,YAAY;;AAE/C;AACA,OAAO,MAAMC,oBAAoB,GAAG,aAAa;;AAEjD;AACA,OAAO,MAAMC,WAAW,GAAG,aAAa;;AAExC;AACA,OAAO,MAAMC,sBAAsB,GAAG,yBAAyB;;AAE/D;AACA,OAAO,MAAMC,aAAa,GAAG,eAAe;;AAE5C;AACA,OAAO,MAAMC,sBAAsB,GAAG,sBAAsB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"arrayFields.js","names":[],"sources":["arrayFields.ts"],"sourcesContent":["/* Generated by @palantir/pack.document-schema.type-gen@0.7.0 */\n\n\nexport interface Container {\n readonly items: readonly string[];\n readonly numbers: readonly number[];\n}\n\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"arrayFields.js","names":[],"sources":["arrayFields.ts"],"sourcesContent":["/* Generated by @palantir/pack.document-schema.type-gen@0.9.0 */\n\n\nexport interface Container {\n readonly items: readonly string[];\n readonly numbers: readonly number[];\n}\n\n"],"mappings":"","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- /* Generated by @palantir/pack.document-schema.type-gen@0.7.0 */
1
+ /* Generated by @palantir/pack.document-schema.type-gen@0.9.0 */
2
2
 
3
3
  /**
4
4
  * A cat
@@ -1 +1 @@
1
- {"version":3,"file":"customDiscriminant.js","names":["isAnimalCat","value","kind","isAnimalDog"],"sources":["customDiscriminant.ts"],"sourcesContent":["/* Generated by @palantir/pack.document-schema.type-gen@0.7.0 */\n\n\n/**\n * A cat\n */\nexport interface Cat {\n readonly meow: string;\n readonly whiskers: number;\n}\n\n/**\n * A dog\n */\nexport interface Dog {\n readonly bark: string;\n readonly tailWags: number;\n}\n\nexport interface AnimalCat extends Cat {\n readonly kind: \"cat\";\n}\n\nexport interface AnimalDog extends Dog {\n readonly kind: \"dog\";\n}\n\nexport type Animal = AnimalCat | AnimalDog;\n\nexport function isAnimalCat(value: Animal): value is AnimalCat {\n return value.kind === \"cat\";\n}\n\nexport function isAnimalDog(value: Animal): value is AnimalDog {\n return value.kind === \"dog\";\n}\n\n"],"mappings":"AAAA;;AAGA;AACA;AACA;;AAMA;AACA;AACA;;AAgBA,OAAO,SAASA,WAAWA,CAACC,KAAa,EAAsB;EAC7D,OAAOA,KAAK,CAACC,IAAI,KAAK,KAAK;AAC7B;AAEA,OAAO,SAASC,WAAWA,CAACF,KAAa,EAAsB;EAC7D,OAAOA,KAAK,CAACC,IAAI,KAAK,KAAK;AAC7B","ignoreList":[]}
1
+ {"version":3,"file":"customDiscriminant.js","names":["isAnimalCat","value","kind","isAnimalDog"],"sources":["customDiscriminant.ts"],"sourcesContent":["/* Generated by @palantir/pack.document-schema.type-gen@0.9.0 */\n\n\n/**\n * A cat\n */\nexport interface Cat {\n readonly meow: string;\n readonly whiskers: number;\n}\n\n/**\n * A dog\n */\nexport interface Dog {\n readonly bark: string;\n readonly tailWags: number;\n}\n\nexport interface AnimalCat extends Cat {\n readonly kind: \"cat\";\n}\n\nexport interface AnimalDog extends Dog {\n readonly kind: \"dog\";\n}\n\nexport type Animal = AnimalCat | AnimalDog;\n\nexport function isAnimalCat(value: Animal): value is AnimalCat {\n return value.kind === \"cat\";\n}\n\nexport function isAnimalDog(value: Animal): value is AnimalDog {\n return value.kind === \"dog\";\n}\n\n"],"mappings":"AAAA;;AAGA;AACA;AACA;;AAMA;AACA;AACA;;AAgBA,OAAO,SAASA,WAAWA,CAACC,KAAa,EAAsB;EAC7D,OAAOA,KAAK,CAACC,IAAI,KAAK,KAAK;AAC7B;AAEA,OAAO,SAASC,WAAWA,CAACF,KAAa,EAAsB;EAC7D,OAAOA,KAAK,CAACC,IAAI,KAAK,KAAK;AAC7B","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- /* Generated by @palantir/pack.document-schema.type-gen@0.7.0 */
1
+ /* Generated by @palantir/pack.document-schema.type-gen@0.9.0 */
2
2
 
3
3
  /**
4
4
  * Represents an edge in a graph
@@ -1 +1 @@
1
- {"version":3,"file":"generateTypeScriptInterfaces.js","names":["isNodeObject","value","type","isNodeTextBox"],"sources":["generateTypeScriptInterfaces.ts"],"sourcesContent":["/* Generated by @palantir/pack.document-schema.type-gen@0.7.0 */\n\n\n/**\n * Represents an edge in a graph\n */\nexport interface Edge {\n readonly source: ObjectNode;\n readonly target: ObjectNode;\n}\n\nexport interface ObjectNode {\n readonly x: number;\n readonly y: number;\n readonly label?: string;\n readonly color?: string;\n}\n\n/**\n * Represents a text box in a graph\n */\nexport interface TextBox {\n readonly x: number;\n readonly y: number;\n readonly text: string;\n}\n\nexport interface NodeObject extends ObjectNode {\n readonly type: \"object\";\n}\n\nexport interface NodeTextBox extends TextBox {\n readonly type: \"text-box\";\n}\n\nexport type Node = NodeObject | NodeTextBox;\n\nexport function isNodeObject(value: Node): value is NodeObject {\n return value.type === \"object\";\n}\n\nexport function isNodeTextBox(value: Node): value is NodeTextBox {\n return value.type === \"text-box\";\n}\n\n"],"mappings":"AAAA;;AAGA;AACA;AACA;;AAaA;AACA;AACA;;AAiBA,OAAO,SAASA,YAAYA,CAACC,KAAW,EAAuB;EAC7D,OAAOA,KAAK,CAACC,IAAI,KAAK,QAAQ;AAChC;AAEA,OAAO,SAASC,aAAaA,CAACF,KAAW,EAAwB;EAC/D,OAAOA,KAAK,CAACC,IAAI,KAAK,UAAU;AAClC","ignoreList":[]}
1
+ {"version":3,"file":"generateTypeScriptInterfaces.js","names":["isNodeObject","value","type","isNodeTextBox"],"sources":["generateTypeScriptInterfaces.ts"],"sourcesContent":["/* Generated by @palantir/pack.document-schema.type-gen@0.9.0 */\n\n\n/**\n * Represents an edge in a graph\n */\nexport interface Edge {\n readonly source: ObjectNode;\n readonly target: ObjectNode;\n}\n\nexport interface ObjectNode {\n readonly x: number;\n readonly y: number;\n readonly label?: string;\n readonly color?: string;\n}\n\n/**\n * Represents a text box in a graph\n */\nexport interface TextBox {\n readonly x: number;\n readonly y: number;\n readonly text: string;\n}\n\nexport interface NodeObject extends ObjectNode {\n readonly type: \"object\";\n}\n\nexport interface NodeTextBox extends TextBox {\n readonly type: \"text-box\";\n}\n\nexport type Node = NodeObject | NodeTextBox;\n\nexport function isNodeObject(value: Node): value is NodeObject {\n return value.type === \"object\";\n}\n\nexport function isNodeTextBox(value: Node): value is NodeTextBox {\n return value.type === \"text-box\";\n}\n\n"],"mappings":"AAAA;;AAGA;AACA;AACA;;AAaA;AACA;AACA;;AAiBA,OAAO,SAASA,YAAYA,CAACC,KAAW,EAAuB;EAC7D,OAAOA,KAAK,CAACC,IAAI,KAAK,QAAQ;AAChC;AAEA,OAAO,SAASC,aAAaA,CAACF,KAAW,EAAwB;EAC/D,OAAOA,KAAK,CAACC,IAAI,KAAK,UAAU;AAClC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"refTypes.js","names":[],"sources":["refTypes.ts"],"sourcesContent":["/* Generated by @palantir/pack.document-schema.type-gen@0.7.0 */\n\nimport type { DocumentRef, MediaRef, ObjectRef, UserRef } from \"@palantir/pack.document-schema.model-types\";\n\n/**\n * A record containing all reference types\n */\nexport interface Document {\n readonly id: string;\n readonly docRef: DocumentRef;\n readonly userRef: UserRef;\n readonly objectRef: ObjectRef;\n readonly mediaRef: MediaRef;\n readonly optionalDocRef?: DocumentRef;\n readonly docRefArray: readonly DocumentRef[];\n readonly userRefArray: readonly UserRef[];\n}\n\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"refTypes.js","names":[],"sources":["refTypes.ts"],"sourcesContent":["/* Generated by @palantir/pack.document-schema.type-gen@0.9.0 */\n\nimport type { DocumentRef, MediaRef, ObjectRef, UserRef } from \"@palantir/pack.document-schema.model-types\";\n\n/**\n * A record containing all reference types\n */\nexport interface Document {\n readonly id: string;\n readonly docRef: DocumentRef;\n readonly userRef: UserRef;\n readonly objectRef: ObjectRef;\n readonly mediaRef: MediaRef;\n readonly optionalDocRef?: DocumentRef;\n readonly docRefArray: readonly DocumentRef[];\n readonly userRefArray: readonly UserRef[];\n}\n\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"simpleRecord.js","names":[],"sources":["simpleRecord.ts"],"sourcesContent":["/* Generated by @palantir/pack.document-schema.type-gen@0.7.0 */\n\n\n/**\n * A person record\n */\nexport interface Person {\n readonly name: string;\n readonly age: number;\n readonly email?: string;\n}\n\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"simpleRecord.js","names":[],"sources":["simpleRecord.ts"],"sourcesContent":["/* Generated by @palantir/pack.document-schema.type-gen@0.9.0 */\n\n\n/**\n * A person record\n */\nexport interface Person {\n readonly name: string;\n readonly age: number;\n readonly email?: string;\n}\n\n"],"mappings":"","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- /* Generated by @palantir/pack.document-schema.type-gen@0.7.0 */
1
+ /* Generated by @palantir/pack.document-schema.type-gen@0.9.0 */
2
2
 
3
3
  /**
4
4
  * A node in the graph
@@ -1 +1 @@
1
- {"version":3,"file":"simpleSteps.js","names":["isNodeObject","value","type","isNodeTextBox"],"sources":["simpleSteps.ts"],"sourcesContent":["/* Generated by @palantir/pack.document-schema.type-gen@0.7.0 */\n\n\n/**\n * A node in the graph\n */\nexport interface ObjectNode {\n readonly x: number;\n readonly y: number;\n readonly object: string;\n readonly label?: string;\n readonly edges: readonly Edge[];\n}\n\n/**\n * A text box in the graph\n */\nexport interface TextBox {\n readonly x: number;\n readonly y: number;\n readonly text: string;\n}\n\n/**\n * An edge in the graph\n */\nexport interface Edge {\n readonly source: ObjectNode;\n readonly target: ObjectNode;\n}\n\nexport interface NodeObject extends ObjectNode {\n readonly type: \"object\";\n}\n\nexport interface NodeTextBox extends TextBox {\n readonly type: \"textBox\";\n}\n\nexport type Node = NodeObject | NodeTextBox;\n\nexport function isNodeObject(value: Node): value is NodeObject {\n return value.type === \"object\";\n}\n\nexport function isNodeTextBox(value: Node): value is NodeTextBox {\n return value.type === \"textBox\";\n}\n\n"],"mappings":"AAAA;;AAGA;AACA;AACA;;AASA;AACA;AACA;;AAOA;AACA;AACA;;AAgBA,OAAO,SAASA,YAAYA,CAACC,KAAW,EAAuB;EAC7D,OAAOA,KAAK,CAACC,IAAI,KAAK,QAAQ;AAChC;AAEA,OAAO,SAASC,aAAaA,CAACF,KAAW,EAAwB;EAC/D,OAAOA,KAAK,CAACC,IAAI,KAAK,SAAS;AACjC","ignoreList":[]}
1
+ {"version":3,"file":"simpleSteps.js","names":["isNodeObject","value","type","isNodeTextBox"],"sources":["simpleSteps.ts"],"sourcesContent":["/* Generated by @palantir/pack.document-schema.type-gen@0.9.0 */\n\n\n/**\n * A node in the graph\n */\nexport interface ObjectNode {\n readonly x: number;\n readonly y: number;\n readonly object: string;\n readonly label?: string;\n readonly edges: readonly Edge[];\n}\n\n/**\n * A text box in the graph\n */\nexport interface TextBox {\n readonly x: number;\n readonly y: number;\n readonly text: string;\n}\n\n/**\n * An edge in the graph\n */\nexport interface Edge {\n readonly source: ObjectNode;\n readonly target: ObjectNode;\n}\n\nexport interface NodeObject extends ObjectNode {\n readonly type: \"object\";\n}\n\nexport interface NodeTextBox extends TextBox {\n readonly type: \"textBox\";\n}\n\nexport type Node = NodeObject | NodeTextBox;\n\nexport function isNodeObject(value: Node): value is NodeObject {\n return value.type === \"object\";\n}\n\nexport function isNodeTextBox(value: Node): value is NodeTextBox {\n return value.type === \"textBox\";\n}\n\n"],"mappings":"AAAA;;AAGA;AACA;AACA;;AASA;AACA;AACA;;AAOA;AACA;AACA;;AAgBA,OAAO,SAASA,YAAYA,CAACC,KAAW,EAAuB;EAC7D,OAAOA,KAAK,CAACC,IAAI,KAAK,QAAQ;AAChC;AAEA,OAAO,SAASC,aAAaA,CAACF,KAAW,EAAwB;EAC/D,OAAOA,KAAK,CAACC,IAAI,KAAK,SAAS;AACjC","ignoreList":[]}
@@ -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":"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","ignoreList":[]}
@@ -75,20 +75,17 @@ 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
  }));
84
84
  return {
85
85
  key: recordDef.name,
86
86
  name: recordDef.name,
87
- description: recordDef.docs || undefined,
88
- fields,
89
- meta: {
90
- addedIn: 1
91
- }
87
+ description: recordDef.docs ?? undefined,
88
+ fields
92
89
  };
93
90
  }
94
91
  export function convertUnionDefToIr(unionDef) {
@@ -99,8 +96,8 @@ export function convertUnionDefToIr(unionDef) {
99
96
  description: unionDef.docs,
100
97
  discriminant: unionDef.discriminant,
101
98
  variants: Object.fromEntries(variantEntries),
102
- meta: {
103
- addedIn: 1
99
+ metadata: {
100
+ addedInVersion: 1
104
101
  }
105
102
  };
106
103
  }
@@ -151,9 +148,7 @@ function convertTypeToFieldValueUnion(schemaType) {
151
148
  case "double":
152
149
  return IFieldValueUnion.double({});
153
150
  case "mediaRef":
154
- return IFieldValueUnion.mediaRef({
155
- mediaTypeRids: [] // FIXME: confirm whether we will use rids in the deployed schema.
156
- });
151
+ return IFieldValueUnion.mediaRef({});
157
152
  case "objectRef":
158
153
  return IFieldValueUnion.object({
159
154
  // FIXME: confirm whether we will use rids in the deployed schema.