@palantir/pack.document-schema.type-gen 0.0.1 → 0.0.3

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 (137) hide show
  1. package/bin/cli-node.js +6 -0
  2. package/build/esm/commands/ir/irDeployHandler.js.map +1 -1
  3. package/build/esm/commands/ir/irGenModelsHandler.js.map +1 -1
  4. package/build/esm/commands/ir/irGenZodHandler.js.map +1 -1
  5. package/build/esm/lib/pack-docschema-api/pack-docschema-api/documentTypeRid.js +2 -0
  6. package/build/esm/lib/pack-docschema-api/pack-docschema-api/documentTypeRid.js.map +1 -0
  7. package/build/esm/lib/pack-docschema-api/pack-docschema-api/fieldKey.js +2 -0
  8. package/build/esm/lib/pack-docschema-api/pack-docschema-api/fieldKey.js.map +1 -0
  9. package/build/esm/lib/pack-docschema-api/pack-docschema-api/index.js +24 -0
  10. package/build/esm/lib/pack-docschema-api/pack-docschema-api/index.js.map +1 -0
  11. package/build/esm/lib/pack-docschema-api/pack-docschema-api/interfaceTypeRid.js +2 -0
  12. package/build/esm/lib/pack-docschema-api/pack-docschema-api/interfaceTypeRid.js.map +1 -0
  13. package/build/esm/lib/pack-docschema-api/pack-docschema-api/modelTypeKey.js +2 -0
  14. package/build/esm/lib/pack-docschema-api/pack-docschema-api/modelTypeKey.js.map +1 -0
  15. package/build/esm/lib/pack-docschema-api/pack-docschema-api/objectTypeRid.js +2 -0
  16. package/build/esm/lib/pack-docschema-api/pack-docschema-api/objectTypeRid.js.map +1 -0
  17. package/build/esm/lib/pack-docschema-api/pack-docschema-api/schemaVersion.js +2 -0
  18. package/build/esm/lib/pack-docschema-api/pack-docschema-api/schemaVersion.js.map +1 -0
  19. package/build/esm/lib/pack-docschema-api/pack-docschema-api/unionVariantKey.js +2 -0
  20. package/build/esm/lib/pack-docschema-api/pack-docschema-api/unionVariantKey.js.map +1 -0
  21. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldDef.js +2 -0
  22. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldDef.js.map +1 -0
  23. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldTypeCollection.js +2 -0
  24. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldTypeCollection.js.map +1 -0
  25. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldTypeMap.js +2 -0
  26. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldTypeMap.js.map +1 -0
  27. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldTypeUnion.js +79 -0
  28. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldTypeUnion.js.map +1 -0
  29. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueDatetime.js +2 -0
  30. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueDatetime.js.map +1 -0
  31. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueDocumentRef.js +2 -0
  32. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueDocumentRef.js.map +1 -0
  33. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueDouble.js +2 -0
  34. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueDouble.js.map +1 -0
  35. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueInteger.js +2 -0
  36. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueInteger.js.map +1 -0
  37. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueMediaRef.js +2 -0
  38. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueMediaRef.js.map +1 -0
  39. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueModelRef.js +2 -0
  40. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueModelRef.js.map +1 -0
  41. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueObjectRef.js +2 -0
  42. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueObjectRef.js.map +1 -0
  43. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueString.js +2 -0
  44. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueString.js.map +1 -0
  45. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueText.js +2 -0
  46. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueText.js.map +1 -0
  47. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueUnion.js +177 -0
  48. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueUnion.js.map +1 -0
  49. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueUnmanagedJson.js +2 -0
  50. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueUnmanagedJson.js.map +1 -0
  51. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueUserRef.js +2 -0
  52. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueUserRef.js.map +1 -0
  53. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/index.js +38 -0
  54. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/index.js.map +1 -0
  55. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/modelDef.js +51 -0
  56. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/modelDef.js.map +1 -0
  57. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/realTimeDocumentSchema.js +2 -0
  58. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/realTimeDocumentSchema.js.map +1 -0
  59. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/recordDef.js +2 -0
  60. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/recordDef.js.map +1 -0
  61. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.js +2 -0
  62. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.js.map +1 -0
  63. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/unionDef.js +2 -0
  64. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/unionDef.js.map +1 -0
  65. package/build/esm/utils/ir/__tests__/generateZodSchemasFromIr.test.js.map +1 -1
  66. package/build/esm/utils/ir/generateModelsFromIr.js.map +1 -1
  67. package/build/esm/utils/ir/generateZodSchemasFromIr.js.map +1 -1
  68. package/build/esm/utils/steps/__tests__/convertStepsToIr.test.js.map +1 -1
  69. package/build/esm/utils/steps/convertStepsToIr.js +1 -1
  70. package/build/esm/utils/steps/convertStepsToIr.js.map +1 -1
  71. package/build/types/lib/pack-docschema-api/pack-docschema-api/documentTypeRid.d.ts +5 -0
  72. package/build/types/lib/pack-docschema-api/pack-docschema-api/documentTypeRid.d.ts.map +1 -0
  73. package/build/types/lib/pack-docschema-api/pack-docschema-api/fieldKey.d.ts +5 -0
  74. package/build/types/lib/pack-docschema-api/pack-docschema-api/fieldKey.d.ts.map +1 -0
  75. package/build/types/lib/pack-docschema-api/pack-docschema-api/index.d.ts +8 -0
  76. package/build/types/lib/pack-docschema-api/pack-docschema-api/index.d.ts.map +1 -0
  77. package/build/types/lib/pack-docschema-api/pack-docschema-api/interfaceTypeRid.d.ts +5 -0
  78. package/build/types/lib/pack-docschema-api/pack-docschema-api/interfaceTypeRid.d.ts.map +1 -0
  79. package/build/types/lib/pack-docschema-api/pack-docschema-api/modelTypeKey.d.ts +5 -0
  80. package/build/types/lib/pack-docschema-api/pack-docschema-api/modelTypeKey.d.ts.map +1 -0
  81. package/build/types/lib/pack-docschema-api/pack-docschema-api/objectTypeRid.d.ts +5 -0
  82. package/build/types/lib/pack-docschema-api/pack-docschema-api/objectTypeRid.d.ts.map +1 -0
  83. package/build/types/lib/pack-docschema-api/pack-docschema-api/schemaVersion.d.ts +5 -0
  84. package/build/types/lib/pack-docschema-api/pack-docschema-api/schemaVersion.d.ts.map +1 -0
  85. package/build/types/lib/pack-docschema-api/pack-docschema-api/unionVariantKey.d.ts +5 -0
  86. package/build/types/lib/pack-docschema-api/pack-docschema-api/unionVariantKey.d.ts.map +1 -0
  87. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldDef.d.ts +12 -0
  88. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldDef.d.ts.map +1 -0
  89. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldTypeCollection.d.ts +6 -0
  90. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldTypeCollection.d.ts.map +1 -0
  91. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldTypeMap.d.ts +7 -0
  92. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldTypeMap.d.ts.map +1 -0
  93. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldTypeUnion.d.ts +49 -0
  94. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldTypeUnion.d.ts.map +1 -0
  95. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueDatetime.d.ts +3 -0
  96. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueDatetime.d.ts.map +1 -0
  97. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueDocumentRef.d.ts +5 -0
  98. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueDocumentRef.d.ts.map +1 -0
  99. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueDouble.d.ts +6 -0
  100. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueDouble.d.ts.map +1 -0
  101. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueInteger.d.ts +6 -0
  102. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueInteger.d.ts.map +1 -0
  103. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueMediaRef.d.ts +3 -0
  104. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueMediaRef.d.ts.map +1 -0
  105. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueModelRef.d.ts +5 -0
  106. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueModelRef.d.ts.map +1 -0
  107. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueObjectRef.d.ts +7 -0
  108. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueObjectRef.d.ts.map +1 -0
  109. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueString.d.ts +6 -0
  110. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueString.d.ts.map +1 -0
  111. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueText.d.ts +3 -0
  112. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueText.d.ts.map +1 -0
  113. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueUnion.d.ts +120 -0
  114. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueUnion.d.ts.map +1 -0
  115. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueUnmanagedJson.d.ts +3 -0
  116. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueUnmanagedJson.d.ts.map +1 -0
  117. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueUserRef.d.ts +3 -0
  118. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueUserRef.d.ts.map +1 -0
  119. package/build/types/lib/pack-docschema-api/pack-docschema-ir/index.d.ts +22 -0
  120. package/build/types/lib/pack-docschema-api/pack-docschema-ir/index.d.ts.map +1 -0
  121. package/build/types/lib/pack-docschema-api/pack-docschema-ir/modelDef.d.ts +30 -0
  122. package/build/types/lib/pack-docschema-api/pack-docschema-ir/modelDef.d.ts.map +1 -0
  123. package/build/types/lib/pack-docschema-api/pack-docschema-ir/realTimeDocumentSchema.d.ts +14 -0
  124. package/build/types/lib/pack-docschema-api/pack-docschema-ir/realTimeDocumentSchema.d.ts.map +1 -0
  125. package/build/types/lib/pack-docschema-api/pack-docschema-ir/recordDef.d.ts +11 -0
  126. package/build/types/lib/pack-docschema-api/pack-docschema-ir/recordDef.d.ts.map +1 -0
  127. package/build/types/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.d.ts +7 -0
  128. package/build/types/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.d.ts.map +1 -0
  129. package/build/types/lib/pack-docschema-api/pack-docschema-ir/unionDef.d.ts +15 -0
  130. package/build/types/lib/pack-docschema-api/pack-docschema-ir/unionDef.d.ts.map +1 -0
  131. package/build/types/utils/ir/generateModelsFromIr.d.ts +1 -1
  132. package/build/types/utils/ir/generateModelsFromIr.d.ts.map +1 -1
  133. package/build/types/utils/ir/generateZodSchemasFromIr.d.ts +1 -1
  134. package/build/types/utils/ir/generateZodSchemasFromIr.d.ts.map +1 -1
  135. package/build/types/utils/steps/convertStepsToIr.d.ts +2 -2
  136. package/build/types/utils/steps/convertStepsToIr.d.ts.map +1 -1
  137. package/package.json +4 -4
@@ -0,0 +1,38 @@
1
+ /*
2
+ * Copyright 2025 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
+ export * from "./fieldDef.js";
18
+ export * from "./fieldTypeCollection.js";
19
+ export * from "./fieldTypeMap.js";
20
+ export * from "./fieldTypeUnion.js";
21
+ export * from "./fieldValueDatetime.js";
22
+ export * from "./fieldValueDocumentRef.js";
23
+ export * from "./fieldValueDouble.js";
24
+ export * from "./fieldValueInteger.js";
25
+ export * from "./fieldValueMediaRef.js";
26
+ export * from "./fieldValueModelRef.js";
27
+ export * from "./fieldValueObjectRef.js";
28
+ export * from "./fieldValueString.js";
29
+ export * from "./fieldValueText.js";
30
+ export * from "./fieldValueUnion.js";
31
+ export * from "./fieldValueUnmanagedJson.js";
32
+ export * from "./fieldValueUserRef.js";
33
+ export * from "./modelDef.js";
34
+ export * from "./realTimeDocumentSchema.js";
35
+ export * from "./recordDef.js";
36
+ export * from "./schemaMeta.js";
37
+ export * from "./unionDef.js";
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["index.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\nexport * from \"./fieldDef.js\";\nexport * from \"./fieldTypeCollection.js\";\nexport * from \"./fieldTypeMap.js\";\nexport * from \"./fieldTypeUnion.js\";\nexport * from \"./fieldValueDatetime.js\";\nexport * from \"./fieldValueDocumentRef.js\";\nexport * from \"./fieldValueDouble.js\";\nexport * from \"./fieldValueInteger.js\";\nexport * from \"./fieldValueMediaRef.js\";\nexport * from \"./fieldValueModelRef.js\";\nexport * from \"./fieldValueObjectRef.js\";\nexport * from \"./fieldValueString.js\";\nexport * from \"./fieldValueText.js\";\nexport * from \"./fieldValueUnion.js\";\nexport * from \"./fieldValueUnmanagedJson.js\";\nexport * from \"./fieldValueUserRef.js\";\nexport * from \"./modelDef.js\";\nexport * from \"./realTimeDocumentSchema.js\";\nexport * from \"./recordDef.js\";\nexport * from \"./schemaMeta.js\";\nexport * from \"./unionDef.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc,eAAe;AAC7B,cAAc,0BAA0B;AACxC,cAAc,mBAAmB;AACjC,cAAc,qBAAqB;AACnC,cAAc,yBAAyB;AACvC,cAAc,4BAA4B;AAC1C,cAAc,uBAAuB;AACrC,cAAc,wBAAwB;AACtC,cAAc,yBAAyB;AACvC,cAAc,yBAAyB;AACvC,cAAc,0BAA0B;AACxC,cAAc,uBAAuB;AACrC,cAAc,qBAAqB;AACnC,cAAc,sBAAsB;AACpC,cAAc,8BAA8B;AAC5C,cAAc,wBAAwB;AACtC,cAAc,eAAe;AAC7B,cAAc,6BAA6B;AAC3C,cAAc,gBAAgB;AAC9B,cAAc,iBAAiB;AAC/B,cAAc,eAAe","ignoreList":[]}
@@ -0,0 +1,51 @@
1
+ /*
2
+ * Copyright 2025 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 isRecord(obj) {
18
+ return obj.type === "record";
19
+ }
20
+ function record(obj) {
21
+ return {
22
+ record: obj,
23
+ type: "record"
24
+ };
25
+ }
26
+ function isUnion(obj) {
27
+ return obj.type === "union";
28
+ }
29
+ function union(obj) {
30
+ return {
31
+ union: obj,
32
+ type: "union"
33
+ };
34
+ }
35
+ function visit(obj, visitor) {
36
+ if (isRecord(obj)) {
37
+ return visitor.record(obj.record);
38
+ }
39
+ if (isUnion(obj)) {
40
+ return visitor.union(obj.union);
41
+ }
42
+ return visitor.unknown(obj);
43
+ }
44
+ export const IModelDef = {
45
+ isRecord: isRecord,
46
+ record: record,
47
+ isUnion: isUnion,
48
+ union: union,
49
+ visit: visit
50
+ };
51
+ //# sourceMappingURL=modelDef.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelDef.js","names":["isRecord","obj","type","record","isUnion","union","visit","visitor","unknown","IModelDef"],"sources":["modelDef.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { IRecordDef } from \"./recordDef.js\";\nimport type { IUnionDef } from \"./unionDef.js\";\n\nexport interface IModelDef_Record {\n readonly \"record\": IRecordDef;\n readonly \"type\": \"record\";\n}\n\nexport interface IModelDef_Union {\n readonly \"union\": IUnionDef;\n readonly \"type\": \"union\";\n}\n\nexport type IModelDef = IModelDef_Record | IModelDef_Union;\n\nexport interface IModelDefVisitor<T> {\n readonly \"record\": (obj: IRecordDef) => T;\n readonly \"union\": (obj: IUnionDef) => T;\n readonly \"unknown\": (obj: IModelDef) => T;\n}\n\nfunction isRecord(obj: IModelDef): obj is IModelDef_Record {\n return (obj.type === \"record\");\n}\n\nfunction record(obj: IRecordDef): IModelDef_Record {\n return {\n record: obj,\n type: \"record\",\n };\n}\n\nfunction isUnion(obj: IModelDef): obj is IModelDef_Union {\n return (obj.type === \"union\");\n}\n\nfunction union(obj: IUnionDef): IModelDef_Union {\n return {\n union: obj,\n type: \"union\",\n };\n}\n\nfunction visit<T>(obj: IModelDef, visitor: IModelDefVisitor<T>): T {\n if (isRecord(obj)) {\n return visitor.record(obj.record);\n }\n if (isUnion(obj)) {\n return visitor.union(obj.union);\n }\n return visitor.unknown(obj);\n}\n\nexport const IModelDef: {\n isRecord: typeof isRecord;\n record: typeof record;\n isUnion: typeof isUnion;\n union: typeof union;\n visit: typeof visit;\n} = {\n isRecord: isRecord,\n record: record,\n isUnion: isUnion,\n union: union,\n visit: visit,\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAuBA,SAASA,QAAQA,CAACC,GAAc,EAA2B;EACzD,OAAQA,GAAG,CAACC,IAAI,KAAK,QAAQ;AAC/B;AAEA,SAASC,MAAMA,CAACF,GAAe,EAAoB;EACjD,OAAO;IACLE,MAAM,EAAEF,GAAG;IACXC,IAAI,EAAE;EACR,CAAC;AACH;AAEA,SAASE,OAAOA,CAACH,GAAc,EAA0B;EACvD,OAAQA,GAAG,CAACC,IAAI,KAAK,OAAO;AAC9B;AAEA,SAASG,KAAKA,CAACJ,GAAc,EAAmB;EAC9C,OAAO;IACLI,KAAK,EAAEJ,GAAG;IACVC,IAAI,EAAE;EACR,CAAC;AACH;AAEA,SAASI,KAAKA,CAAIL,GAAc,EAAEM,OAA4B,EAAK;EACjE,IAAIP,QAAQ,CAACC,GAAG,CAAC,EAAE;IACjB,OAAOM,OAAO,CAACJ,MAAM,CAACF,GAAG,CAACE,MAAM,CAAC;EACnC;EACA,IAAIC,OAAO,CAACH,GAAG,CAAC,EAAE;IAChB,OAAOM,OAAO,CAACF,KAAK,CAACJ,GAAG,CAACI,KAAK,CAAC;EACjC;EACA,OAAOE,OAAO,CAACC,OAAO,CAACP,GAAG,CAAC;AAC7B;AAEA,OAAO,MAAMQ,SAMZ,GAAG;EACFT,QAAQ,EAAEA,QAAQ;EAClBG,MAAM,EAAEA,MAAM;EACdC,OAAO,EAAEA,OAAO;EAChBC,KAAK,EAAEA,KAAK;EACZC,KAAK,EAAEA;AACT,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=realTimeDocumentSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realTimeDocumentSchema.js","names":[],"sources":["realTimeDocumentSchema.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { IModelTypeKey } from \"../pack-docschema-api/modelTypeKey.js\";\nimport type { ISchemaVersion } from \"../pack-docschema-api/schemaVersion.js\";\nimport type * as IModelDef from \"./modelDef.js\";\nexport interface IRealTimeDocumentSchema {\n readonly \"name\": string;\n readonly \"description\": string;\n readonly \"version\": ISchemaVersion;\n /** The primary models. There may be others described internally as nested/sub-models. */\n readonly \"primaryModelKeys\": ReadonlyArray<IModelTypeKey>;\n readonly \"models\": {\n readonly [key: IModelTypeKey]: IModelDef.IModelDef;\n };\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=recordDef.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordDef.js","names":[],"sources":["recordDef.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { IModelTypeKey } from \"../pack-docschema-api/modelTypeKey.js\";\nimport type { IFieldDef } from \"./fieldDef.js\";\nimport type { ISchemaMeta } from \"./schemaMeta.js\";\nexport interface IRecordDef {\n readonly \"key\": IModelTypeKey;\n readonly \"name\": string;\n readonly \"description\"?: string | null;\n readonly \"fields\": ReadonlyArray<IFieldDef>;\n readonly \"meta\": ISchemaMeta;\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schemaMeta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaMeta.js","names":[],"sources":["schemaMeta.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ISchemaVersion } from \"../pack-docschema-api/schemaVersion.js\";\nexport interface ISchemaMeta {\n readonly \"addedIn\": ISchemaVersion;\n readonly \"deprecated\"?: ISchemaVersion | null;\n readonly \"deprecatedMessage\"?: string | null;\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=unionDef.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unionDef.js","names":[],"sources":["unionDef.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { IFieldKey } from \"../pack-docschema-api/fieldKey.js\";\nimport type { IModelTypeKey } from \"../pack-docschema-api/modelTypeKey.js\";\nimport type { IUnionVariantKey } from \"../pack-docschema-api/unionVariantKey.js\";\nimport type { ISchemaMeta } from \"./schemaMeta.js\";\nexport interface IUnionDef {\n readonly \"key\": IModelTypeKey;\n readonly \"discriminant\": IFieldKey;\n readonly \"name\": string;\n readonly \"description\"?: string | null;\n readonly \"variants\": {\n readonly [key: IUnionVariantKey]: IModelTypeKey;\n };\n readonly \"meta\": ISchemaMeta;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"generateZodSchemasFromIr.test.js","names":["path","describe","expect","it","generateZodSchemasFromIr","formatWithPrettier","snapshotDir","join","__dirname","result","name","description","version","primaryModelKeys","models","Person","type","record","key","fields","value","string","minLength","maxLength","meta","addedIn","integer","minValue","maxValue","isOptional","formatted","toMatchFileSnapshot","Container","array","allowNullValue","map","unmanagedJson","Event","datetime","ObjectNode","double","TextBox","Node","union","discriminant","variants","object","Foo","Bar","FooBar","foo","bar","lines","split","fooSchemaIndex","findIndex","line","includes","barSchemaIndex","fooBarSchemaIndex","toBeGreaterThan","toBeLessThan"],"sources":["generateZodSchemasFromIr.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 type {\n IFieldDef,\n IModelDef,\n IRealTimeDocumentSchema,\n IRecordDef,\n IUnionDef,\n} from \"@palantir/pack-docschema-api/pack-docschema-ir\";\nimport path from \"path\";\nimport { describe, expect, it } from \"vitest\";\nimport { generateZodSchemasFromIr } from \"../generateZodSchemasFromIr.js\";\nimport { formatWithPrettier } from \"./formatWithPrettier.js\";\n\ndescribe(\"generateZodSchemasFromIr\", () => {\n const snapshotDir = path.join(__dirname, \"__snapshots__\", \"generateZodSchemasFromIr\");\n it(\"should generate Zod schemas 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 personField3: IFieldDef = {\n key: \"email\",\n name: \"Email\",\n description: \"Person email\",\n isOptional: true,\n value: {\n type: \"value\",\n value: {\n type: \"string\",\n string: {},\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, personField3],\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 generateZodSchemasFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n await expect(formatted).toMatchFileSnapshot(path.join(snapshotDir, \"simple-records.ts\"));\n });\n\n it(\"should generate Zod schemas for array and map types\", async () => {\n const arrayField: IFieldDef = {\n key: \"tags\",\n name: \"Tags\",\n description: \"List of tags\",\n value: {\n type: \"array\",\n array: {\n allowNullValue: false,\n value: {\n type: \"string\",\n string: {},\n },\n },\n },\n meta: { addedIn: 1 },\n };\n\n const mapField: IFieldDef = {\n key: \"metadata\",\n name: \"Metadata\",\n description: \"Key-value metadata\",\n value: {\n type: \"map\",\n map: {\n allowNullValue: false,\n key: {\n type: \"string\",\n string: {},\n },\n value: {\n type: \"unmanagedJson\",\n unmanagedJson: {},\n },\n },\n },\n meta: { addedIn: 1 },\n };\n\n const containerRecord: IRecordDef = {\n key: \"Container\",\n name: \"Container\",\n description: \"A container record\",\n fields: [arrayField, mapField],\n meta: { addedIn: 1 },\n };\n\n const schema: IRealTimeDocumentSchema = {\n name: \"Test Schema\",\n description: \"A test schema\",\n version: 1,\n primaryModelKeys: [\"Container\"],\n models: {\n Container: {\n type: \"record\",\n record: containerRecord,\n } as IModelDef,\n },\n };\n\n const result = await generateZodSchemasFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n await expect(formatted).toMatchFileSnapshot(path.join(snapshotDir, \"array-and-map-types.ts\"));\n });\n\n it(\"should generate Zod schemas with datetime fields\", async () => {\n const datetimeField: 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\",\n fields: [datetimeField],\n meta: { addedIn: 1 },\n };\n\n const schema: IRealTimeDocumentSchema = {\n name: \"Test Schema\",\n description: \"A test schema\",\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 generateZodSchemasFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n await expect(formatted).toMatchFileSnapshot(path.join(snapshotDir, \"datetime-fields.ts\"));\n });\n\n it(\"should generate Zod schemas 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 key: \"label\",\n name: \"Label\",\n description: \"Node label\",\n isOptional: true,\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 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: \"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 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 generateZodSchemasFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n await expect(formatted).toMatchFileSnapshot(path.join(snapshotDir, \"union-types.ts\"));\n });\n\n it(\"should handle unions defined before their variant records\", async () => {\n // Define records\n const fooRecord: IRecordDef = {\n key: \"Foo\",\n name: \"Foo\",\n description: \"Foo record\",\n fields: [\n {\n key: \"value\",\n name: \"Value\",\n description: \"A value\",\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 barRecord: IRecordDef = {\n key: \"Bar\",\n name: \"Bar\",\n description: \"Bar record\",\n fields: [\n {\n key: \"count\",\n name: \"Count\",\n description: \"A count\",\n value: {\n type: \"value\",\n value: {\n type: \"integer\",\n integer: {},\n },\n },\n meta: { addedIn: 1 },\n },\n ],\n meta: { addedIn: 1 },\n };\n\n // Define union that references the records\n const fooBarUnion: IUnionDef = {\n key: \"FooBar\",\n discriminant: \"type\",\n name: \"FooBar\",\n description: \"FooBar union\",\n variants: {\n foo: \"Foo\",\n bar: \"Bar\",\n },\n meta: { addedIn: 1 },\n };\n\n // Intentionally put union BEFORE its variant records in primaryModelKeys\n const schema: IRealTimeDocumentSchema = {\n name: \"Test Schema\",\n description: \"Test schema with union before records\",\n version: 1,\n primaryModelKeys: [\"FooBar\", \"Foo\", \"Bar\"], // Union comes first!\n models: {\n Foo: {\n type: \"record\",\n record: fooRecord,\n } as IModelDef,\n Bar: {\n type: \"record\",\n record: barRecord,\n } as IModelDef,\n FooBar: {\n type: \"union\",\n union: fooBarUnion,\n } as IModelDef,\n },\n };\n\n const result = await generateZodSchemasFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n // Verify that records come before union in the output\n const lines = formatted.split(\"\\n\");\n const fooSchemaIndex = lines.findIndex(line => line.includes(\"export const FooSchema\"));\n const barSchemaIndex = lines.findIndex(line => line.includes(\"export const BarSchema\"));\n const fooBarSchemaIndex = lines.findIndex(line => line.includes(\"export const FooBarSchema\"));\n\n expect(fooSchemaIndex).toBeGreaterThan(-1);\n expect(barSchemaIndex).toBeGreaterThan(-1);\n expect(fooBarSchemaIndex).toBeGreaterThan(-1);\n\n // Records should come before the union\n expect(fooSchemaIndex).toBeLessThan(fooBarSchemaIndex);\n expect(barSchemaIndex).toBeLessThan(fooBarSchemaIndex);\n\n await expect(formatted).toMatchFileSnapshot(path.join(snapshotDir, \"union-before-records.ts\"));\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateZodSchemasFromIr.test.js","names":["path","describe","expect","it","generateZodSchemasFromIr","formatWithPrettier","snapshotDir","join","__dirname","result","name","description","version","primaryModelKeys","models","Person","type","record","key","fields","value","string","minLength","maxLength","meta","addedIn","integer","minValue","maxValue","isOptional","formatted","toMatchFileSnapshot","Container","array","allowNullValue","map","unmanagedJson","Event","datetime","ObjectNode","double","TextBox","Node","union","discriminant","variants","object","Foo","Bar","FooBar","foo","bar","lines","split","fooSchemaIndex","findIndex","line","includes","barSchemaIndex","fooBarSchemaIndex","toBeGreaterThan","toBeLessThan"],"sources":["generateZodSchemasFromIr.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 { generateZodSchemasFromIr } from \"../generateZodSchemasFromIr.js\";\nimport { formatWithPrettier } from \"./formatWithPrettier.js\";\n\ndescribe(\"generateZodSchemasFromIr\", () => {\n const snapshotDir = path.join(__dirname, \"__snapshots__\", \"generateZodSchemasFromIr\");\n it(\"should generate Zod schemas 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 personField3: IFieldDef = {\n key: \"email\",\n name: \"Email\",\n description: \"Person email\",\n isOptional: true,\n value: {\n type: \"value\",\n value: {\n type: \"string\",\n string: {},\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, personField3],\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 generateZodSchemasFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n await expect(formatted).toMatchFileSnapshot(path.join(snapshotDir, \"simple-records.ts\"));\n });\n\n it(\"should generate Zod schemas for array and map types\", async () => {\n const arrayField: IFieldDef = {\n key: \"tags\",\n name: \"Tags\",\n description: \"List of tags\",\n value: {\n type: \"array\",\n array: {\n allowNullValue: false,\n value: {\n type: \"string\",\n string: {},\n },\n },\n },\n meta: { addedIn: 1 },\n };\n\n const mapField: IFieldDef = {\n key: \"metadata\",\n name: \"Metadata\",\n description: \"Key-value metadata\",\n value: {\n type: \"map\",\n map: {\n allowNullValue: false,\n key: {\n type: \"string\",\n string: {},\n },\n value: {\n type: \"unmanagedJson\",\n unmanagedJson: {},\n },\n },\n },\n meta: { addedIn: 1 },\n };\n\n const containerRecord: IRecordDef = {\n key: \"Container\",\n name: \"Container\",\n description: \"A container record\",\n fields: [arrayField, mapField],\n meta: { addedIn: 1 },\n };\n\n const schema: IRealTimeDocumentSchema = {\n name: \"Test Schema\",\n description: \"A test schema\",\n version: 1,\n primaryModelKeys: [\"Container\"],\n models: {\n Container: {\n type: \"record\",\n record: containerRecord,\n } as IModelDef,\n },\n };\n\n const result = await generateZodSchemasFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n await expect(formatted).toMatchFileSnapshot(path.join(snapshotDir, \"array-and-map-types.ts\"));\n });\n\n it(\"should generate Zod schemas with datetime fields\", async () => {\n const datetimeField: 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\",\n fields: [datetimeField],\n meta: { addedIn: 1 },\n };\n\n const schema: IRealTimeDocumentSchema = {\n name: \"Test Schema\",\n description: \"A test schema\",\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 generateZodSchemasFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n await expect(formatted).toMatchFileSnapshot(path.join(snapshotDir, \"datetime-fields.ts\"));\n });\n\n it(\"should generate Zod schemas 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 key: \"label\",\n name: \"Label\",\n description: \"Node label\",\n isOptional: true,\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 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: \"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 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 generateZodSchemasFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n await expect(formatted).toMatchFileSnapshot(path.join(snapshotDir, \"union-types.ts\"));\n });\n\n it(\"should handle unions defined before their variant records\", async () => {\n // Define records\n const fooRecord: IRecordDef = {\n key: \"Foo\",\n name: \"Foo\",\n description: \"Foo record\",\n fields: [\n {\n key: \"value\",\n name: \"Value\",\n description: \"A value\",\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 barRecord: IRecordDef = {\n key: \"Bar\",\n name: \"Bar\",\n description: \"Bar record\",\n fields: [\n {\n key: \"count\",\n name: \"Count\",\n description: \"A count\",\n value: {\n type: \"value\",\n value: {\n type: \"integer\",\n integer: {},\n },\n },\n meta: { addedIn: 1 },\n },\n ],\n meta: { addedIn: 1 },\n };\n\n // Define union that references the records\n const fooBarUnion: IUnionDef = {\n key: \"FooBar\",\n discriminant: \"type\",\n name: \"FooBar\",\n description: \"FooBar union\",\n variants: {\n foo: \"Foo\",\n bar: \"Bar\",\n },\n meta: { addedIn: 1 },\n };\n\n // Intentionally put union BEFORE its variant records in primaryModelKeys\n const schema: IRealTimeDocumentSchema = {\n name: \"Test Schema\",\n description: \"Test schema with union before records\",\n version: 1,\n primaryModelKeys: [\"FooBar\", \"Foo\", \"Bar\"], // Union comes first!\n models: {\n Foo: {\n type: \"record\",\n record: fooRecord,\n } as IModelDef,\n Bar: {\n type: \"record\",\n record: barRecord,\n } as IModelDef,\n FooBar: {\n type: \"union\",\n union: fooBarUnion,\n } as IModelDef,\n },\n };\n\n const result = await generateZodSchemasFromIr(schema);\n const formatted = await formatWithPrettier(result);\n\n // Verify that records come before union in the output\n const lines = formatted.split(\"\\n\");\n const fooSchemaIndex = lines.findIndex(line => line.includes(\"export const FooSchema\"));\n const barSchemaIndex = lines.findIndex(line => line.includes(\"export const BarSchema\"));\n const fooBarSchemaIndex = lines.findIndex(line => line.includes(\"export const FooBarSchema\"));\n\n expect(fooSchemaIndex).toBeGreaterThan(-1);\n expect(barSchemaIndex).toBeGreaterThan(-1);\n expect(fooBarSchemaIndex).toBeGreaterThan(-1);\n\n // Records should come before the union\n expect(fooSchemaIndex).toBeLessThan(fooBarSchemaIndex);\n expect(barSchemaIndex).toBeLessThan(fooBarSchemaIndex);\n\n await expect(formatted).toMatchFileSnapshot(path.join(snapshotDir, \"union-before-records.ts\"));\n });\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,IAAI,MAAM,MAAM;AACvB,SAASC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAQ7C,SAASC,wBAAwB,QAAQ,gCAAgC;AACzE,SAASC,kBAAkB,QAAQ,yBAAyB;AAE5DJ,QAAQ,CAAC,0BAA0B,EAAE,MAAM;EACzC,MAAMK,WAAW,GAAGN,IAAI,CAACO,IAAI,CAACC,SAAS,EAAE,eAAe,EAAE,0BAA0B,CAAC;EACrFL,EAAE,CAAC,qDAAqD,EAAE,YAAY;IAiEpE,MAAMM,MAAM,GAAG,MAAML,wBAAwB,CAbL;MACtCM,IAAI,EAAE,aAAa;MACnBC,WAAW,EAAE,eAAe;MAC5BC,OAAO,EAAE,CAAC;MACVC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;MAC5BC,MAAM,EAAE;QACNC,MAAM,EAAE;UACNC,IAAI,EAAE,QAAQ;UACdC,MAAM,EAhBqB;YAC/BC,GAAG,EAAE,QAAQ;YACbR,IAAI,EAAE,QAAQ;YACdC,WAAW,EAAE,iBAAiB;YAC9BQ,MAAM,EAAE,CA/CsB;cAC9BD,GAAG,EAAE,MAAM;cACXR,IAAI,EAAE,MAAM;cACZC,WAAW,EAAE,aAAa;cAC1BS,KAAK,EAAE;gBACLJ,IAAI,EAAE,OAAO;gBACbI,KAAK,EAAE;kBACLJ,IAAI,EAAE,QAAQ;kBACdK,MAAM,EAAE;oBAAEC,SAAS,EAAE,CAAC;oBAAEC,SAAS,EAAE;kBAAG;gBACxC;cACF,CAAC;cACDC,IAAI,EAAE;gBAAEC,OAAO,EAAE;cAAE;YACrB,CAAC,EAE+B;cAC9BP,GAAG,EAAE,KAAK;cACVR,IAAI,EAAE,KAAK;cACXC,WAAW,EAAE,YAAY;cACzBS,KAAK,EAAE;gBACLJ,IAAI,EAAE,OAAO;gBACbI,KAAK,EAAE;kBACLJ,IAAI,EAAE,SAAS;kBACfU,OAAO,EAAE;oBAAEC,QAAQ,EAAE,CAAC;oBAAEC,QAAQ,EAAE;kBAAI;gBACxC;cACF,CAAC;cACDJ,IAAI,EAAE;gBAAEC,OAAO,EAAE;cAAE;YACrB,CAAC,EAE+B;cAC9BP,GAAG,EAAE,OAAO;cACZR,IAAI,EAAE,OAAO;cACbC,WAAW,EAAE,cAAc;cAC3BkB,UAAU,EAAE,IAAI;cAChBT,KAAK,EAAE;gBACLJ,IAAI,EAAE,OAAO;gBACbI,KAAK,EAAE;kBACLJ,IAAI,EAAE,QAAQ;kBACdK,MAAM,EAAE,CAAC;gBACX;cACF,CAAC;cACDG,IAAI,EAAE;gBAAEC,OAAO,EAAE;cAAE;YACrB,CAAC,CAMmD;YAClDD,IAAI,EAAE;cAAEC,OAAO,EAAE;YAAE;UACrB;QAWI;MACF;IACF,CAEoD,CAAC;IACrD,MAAMK,SAAS,GAAG,MAAMzB,kBAAkB,CAACI,MAAM,CAAC;IAElD,MAAMP,MAAM,CAAC4B,SAAS,CAAC,CAACC,mBAAmB,CAAC/B,IAAI,CAACO,IAAI,CAACD,WAAW,EAAE,mBAAmB,CAAC,CAAC;EAC1F,CAAC,CAAC;EAEFH,EAAE,CAAC,qDAAqD,EAAE,YAAY;IA4DpE,MAAMM,MAAM,GAAG,MAAML,wBAAwB,CAbL;MACtCM,IAAI,EAAE,aAAa;MACnBC,WAAW,EAAE,eAAe;MAC5BC,OAAO,EAAE,CAAC;MACVC,gBAAgB,EAAE,CAAC,WAAW,CAAC;MAC/BC,MAAM,EAAE;QACNkB,SAAS,EAAE;UACThB,IAAI,EAAE,QAAQ;UACdC,MAAM,EAhBwB;YAClCC,GAAG,EAAE,WAAW;YAChBR,IAAI,EAAE,WAAW;YACjBC,WAAW,EAAE,oBAAoB;YACjCQ,MAAM,EAAE,CA1CoB;cAC5BD,GAAG,EAAE,MAAM;cACXR,IAAI,EAAE,MAAM;cACZC,WAAW,EAAE,cAAc;cAC3BS,KAAK,EAAE;gBACLJ,IAAI,EAAE,OAAO;gBACbiB,KAAK,EAAE;kBACLC,cAAc,EAAE,KAAK;kBACrBd,KAAK,EAAE;oBACLJ,IAAI,EAAE,QAAQ;oBACdK,MAAM,EAAE,CAAC;kBACX;gBACF;cACF,CAAC;cACDG,IAAI,EAAE;gBAAEC,OAAO,EAAE;cAAE;YACrB,CAAC,EAE2B;cAC1BP,GAAG,EAAE,UAAU;cACfR,IAAI,EAAE,UAAU;cAChBC,WAAW,EAAE,oBAAoB;cACjCS,KAAK,EAAE;gBACLJ,IAAI,EAAE,KAAK;gBACXmB,GAAG,EAAE;kBACHD,cAAc,EAAE,KAAK;kBACrBhB,GAAG,EAAE;oBACHF,IAAI,EAAE,QAAQ;oBACdK,MAAM,EAAE,CAAC;kBACX,CAAC;kBACDD,KAAK,EAAE;oBACLJ,IAAI,EAAE,eAAe;oBACrBoB,aAAa,EAAE,CAAC;kBAClB;gBACF;cACF,CAAC;cACDZ,IAAI,EAAE;gBAAEC,OAAO,EAAE;cAAE;YACrB,CAAC,CAM+B;YAC9BD,IAAI,EAAE;cAAEC,OAAO,EAAE;YAAE;UACrB;QAWI;MACF;IACF,CAEoD,CAAC;IACrD,MAAMK,SAAS,GAAG,MAAMzB,kBAAkB,CAACI,MAAM,CAAC;IAElD,MAAMP,MAAM,CAAC4B,SAAS,CAAC,CAACC,mBAAmB,CAAC/B,IAAI,CAACO,IAAI,CAACD,WAAW,EAAE,wBAAwB,CAAC,CAAC;EAC/F,CAAC,CAAC;EAEFH,EAAE,CAAC,kDAAkD,EAAE,YAAY;IAoCjE,MAAMM,MAAM,GAAG,MAAML,wBAAwB,CAbL;MACtCM,IAAI,EAAE,aAAa;MACnBC,WAAW,EAAE,eAAe;MAC5BC,OAAO,EAAE,CAAC;MACVC,gBAAgB,EAAE,CAAC,OAAO,CAAC;MAC3BC,MAAM,EAAE;QACNuB,KAAK,EAAE;UACLrB,IAAI,EAAE,QAAQ;UACdC,MAAM,EAhBoB;YAC9BC,GAAG,EAAE,OAAO;YACZR,IAAI,EAAE,OAAO;YACbC,WAAW,EAAE,iBAAiB;YAC9BQ,MAAM,EAAE,CAlBuB;cAC/BD,GAAG,EAAE,WAAW;cAChBR,IAAI,EAAE,WAAW;cACjBC,WAAW,EAAE,iBAAiB;cAC9BS,KAAK,EAAE;gBACLJ,IAAI,EAAE,OAAO;gBACbI,KAAK,EAAE;kBACLJ,IAAI,EAAE,UAAU;kBAChBsB,QAAQ,EAAE,CAAC;gBACb;cACF,CAAC;cACDd,IAAI,EAAE;gBAAEC,OAAO,EAAE;cAAE;YACrB,CAAC,CAMwB;YACvBD,IAAI,EAAE;cAAEC,OAAO,EAAE;YAAE;UACrB;QAWI;MACF;IACF,CAEoD,CAAC;IACrD,MAAMK,SAAS,GAAG,MAAMzB,kBAAkB,CAACI,MAAM,CAAC;IAElD,MAAMP,MAAM,CAAC4B,SAAS,CAAC,CAACC,mBAAmB,CAAC/B,IAAI,CAACO,IAAI,CAACD,WAAW,EAAE,oBAAoB,CAAC,CAAC;EAC3F,CAAC,CAAC;EAEFH,EAAE,CAAC,6CAA6C,EAAE,YAAY;IAC5D;;IAkDA;;IAiDA;;IAkCA,MAAMM,MAAM,GAAG,MAAML,wBAAwB,CArBL;MACtCM,IAAI,EAAE,aAAa;MACnBC,WAAW,EAAE,2BAA2B;MACxCC,OAAO,EAAE,CAAC;MACVC,gBAAgB,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC;MACnDC,MAAM,EAAE;QACNyB,UAAU,EAAE;UACVvB,IAAI,EAAE,QAAQ;UACdC,MAAM,EAvHyB;YACnCC,GAAG,EAAE,YAAY;YACjBR,IAAI,EAAE,YAAY;YAClBC,WAAW,EAAE,qBAAqB;YAClCQ,MAAM,EAAE,CACN;cACED,GAAG,EAAE,GAAG;cACRR,IAAI,EAAE,GAAG;cACTC,WAAW,EAAE,cAAc;cAC3BS,KAAK,EAAE;gBACLJ,IAAI,EAAE,OAAO;gBACbI,KAAK,EAAE;kBACLJ,IAAI,EAAE,QAAQ;kBACdwB,MAAM,EAAE,CAAC;gBACX;cACF,CAAC;cACDhB,IAAI,EAAE;gBAAEC,OAAO,EAAE;cAAE;YACrB,CAAC,EACD;cACEP,GAAG,EAAE,GAAG;cACRR,IAAI,EAAE,GAAG;cACTC,WAAW,EAAE,cAAc;cAC3BS,KAAK,EAAE;gBACLJ,IAAI,EAAE,OAAO;gBACbI,KAAK,EAAE;kBACLJ,IAAI,EAAE,QAAQ;kBACdwB,MAAM,EAAE,CAAC;gBACX;cACF,CAAC;cACDhB,IAAI,EAAE;gBAAEC,OAAO,EAAE;cAAE;YACrB,CAAC,EACD;cACEP,GAAG,EAAE,OAAO;cACZR,IAAI,EAAE,OAAO;cACbC,WAAW,EAAE,YAAY;cACzBkB,UAAU,EAAE,IAAI;cAChBT,KAAK,EAAE;gBACLJ,IAAI,EAAE,OAAO;gBACbI,KAAK,EAAE;kBACLJ,IAAI,EAAE,QAAQ;kBACdK,MAAM,EAAE,CAAC;gBACX;cACF,CAAC;cACDG,IAAI,EAAE;gBAAEC,OAAO,EAAE;cAAE;YACrB,CAAC,CACF;YACDD,IAAI,EAAE;cAAEC,OAAO,EAAE;YAAE;UACrB;QAyEI,CAAc;QACdgB,OAAO,EAAE;UACPzB,IAAI,EAAE,QAAQ;UACdC,MAAM,EAzEsB;YAChCC,GAAG,EAAE,SAAS;YACdR,IAAI,EAAE,SAAS;YACfC,WAAW,EAAE,yBAAyB;YACtCQ,MAAM,EAAE,CACN;cACED,GAAG,EAAE,GAAG;cACRR,IAAI,EAAE,GAAG;cACTC,WAAW,EAAE,cAAc;cAC3BS,KAAK,EAAE;gBACLJ,IAAI,EAAE,OAAO;gBACbI,KAAK,EAAE;kBACLJ,IAAI,EAAE,QAAQ;kBACdwB,MAAM,EAAE,CAAC;gBACX;cACF,CAAC;cACDhB,IAAI,EAAE;gBAAEC,OAAO,EAAE;cAAE;YACrB,CAAC,EACD;cACEP,GAAG,EAAE,GAAG;cACRR,IAAI,EAAE,GAAG;cACTC,WAAW,EAAE,cAAc;cAC3BS,KAAK,EAAE;gBACLJ,IAAI,EAAE,OAAO;gBACbI,KAAK,EAAE;kBACLJ,IAAI,EAAE,QAAQ;kBACdwB,MAAM,EAAE,CAAC;gBACX;cACF,CAAC;cACDhB,IAAI,EAAE;gBAAEC,OAAO,EAAE;cAAE;YACrB,CAAC,EACD;cACEP,GAAG,EAAE,MAAM;cACXR,IAAI,EAAE,MAAM;cACZC,WAAW,EAAE,cAAc;cAC3BS,KAAK,EAAE;gBACLJ,IAAI,EAAE,OAAO;gBACbI,KAAK,EAAE;kBACLJ,IAAI,EAAE,QAAQ;kBACdK,MAAM,EAAE,CAAC;gBACX;cACF,CAAC;cACDG,IAAI,EAAE;gBAAEC,OAAO,EAAE;cAAE;YACrB,CAAC,CACF;YACDD,IAAI,EAAE;cAAEC,OAAO,EAAE;YAAE;UACrB;QA4BI,CAAc;QACdiB,IAAI,EAAE;UACJ1B,IAAI,EAAE,OAAO;UACb2B,KAAK,EA5BkB;YAC3BzB,GAAG,EAAE,MAAM;YACX0B,YAAY,EAAE,MAAM;YACpBlC,IAAI,EAAE,MAAM;YACZC,WAAW,EAAE,qBAAqB;YAClCkC,QAAQ,EAAE;cACRC,MAAM,EAAE,YAAY;cACpB,UAAU,EAAE;YACd,CAAC;YACDtB,IAAI,EAAE;cAAEC,OAAO,EAAE;YAAE;UACrB;QAmBI;MACF;IACF,CAEoD,CAAC;IACrD,MAAMK,SAAS,GAAG,MAAMzB,kBAAkB,CAACI,MAAM,CAAC;IAElD,MAAMP,MAAM,CAAC4B,SAAS,CAAC,CAACC,mBAAmB,CAAC/B,IAAI,CAACO,IAAI,CAACD,WAAW,EAAE,gBAAgB,CAAC,CAAC;EACvF,CAAC,CAAC;EAEFH,EAAE,CAAC,2DAA2D,EAAE,YAAY;IAC1E;;IA6CA;;IAaA;;IAsBA,MAAMM,MAAM,GAAG,MAAML,wBAAwB,CArBL;MACtCM,IAAI,EAAE,aAAa;MACnBC,WAAW,EAAE,uCAAuC;MACpDC,OAAO,EAAE,CAAC;MACVC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC;MAAE;MAC5CC,MAAM,EAAE;QACNiC,GAAG,EAAE;UACH/B,IAAI,EAAE,QAAQ;UACdC,MAAM,EAlEkB;YAC5BC,GAAG,EAAE,KAAK;YACVR,IAAI,EAAE,KAAK;YACXC,WAAW,EAAE,YAAY;YACzBQ,MAAM,EAAE,CACN;cACED,GAAG,EAAE,OAAO;cACZR,IAAI,EAAE,OAAO;cACbC,WAAW,EAAE,SAAS;cACtBS,KAAK,EAAE;gBACLJ,IAAI,EAAE,OAAO;gBACbI,KAAK,EAAE;kBACLJ,IAAI,EAAE,QAAQ;kBACdK,MAAM,EAAE,CAAC;gBACX;cACF,CAAC;cACDG,IAAI,EAAE;gBAAEC,OAAO,EAAE;cAAE;YACrB,CAAC,CACF;YACDD,IAAI,EAAE;cAAEC,OAAO,EAAE;YAAE;UACrB;QA+CI,CAAc;QACduB,GAAG,EAAE;UACHhC,IAAI,EAAE,QAAQ;UACdC,MAAM,EAhDkB;YAC5BC,GAAG,EAAE,KAAK;YACVR,IAAI,EAAE,KAAK;YACXC,WAAW,EAAE,YAAY;YACzBQ,MAAM,EAAE,CACN;cACED,GAAG,EAAE,OAAO;cACZR,IAAI,EAAE,OAAO;cACbC,WAAW,EAAE,SAAS;cACtBS,KAAK,EAAE;gBACLJ,IAAI,EAAE,OAAO;gBACbI,KAAK,EAAE;kBACLJ,IAAI,EAAE,SAAS;kBACfU,OAAO,EAAE,CAAC;gBACZ;cACF,CAAC;cACDF,IAAI,EAAE;gBAAEC,OAAO,EAAE;cAAE;YACrB,CAAC,CACF;YACDD,IAAI,EAAE;cAAEC,OAAO,EAAE;YAAE;UACrB;QA6BI,CAAc;QACdwB,MAAM,EAAE;UACNjC,IAAI,EAAE,OAAO;UACb2B,KAAK,EA7BoB;YAC7BzB,GAAG,EAAE,QAAQ;YACb0B,YAAY,EAAE,MAAM;YACpBlC,IAAI,EAAE,QAAQ;YACdC,WAAW,EAAE,cAAc;YAC3BkC,QAAQ,EAAE;cACRK,GAAG,EAAE,KAAK;cACVC,GAAG,EAAE;YACP,CAAC;YACD3B,IAAI,EAAE;cAAEC,OAAO,EAAE;YAAE;UACrB;QAoBI;MACF;IACF,CAEoD,CAAC;IACrD,MAAMK,SAAS,GAAG,MAAMzB,kBAAkB,CAACI,MAAM,CAAC;;IAElD;IACA,MAAM2C,KAAK,GAAGtB,SAAS,CAACuB,KAAK,CAAC,IAAI,CAAC;IACnC,MAAMC,cAAc,GAAGF,KAAK,CAACG,SAAS,CAACC,IAAI,IAAIA,IAAI,CAACC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IACvF,MAAMC,cAAc,GAAGN,KAAK,CAACG,SAAS,CAACC,IAAI,IAAIA,IAAI,CAACC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IACvF,MAAME,iBAAiB,GAAGP,KAAK,CAACG,SAAS,CAACC,IAAI,IAAIA,IAAI,CAACC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;IAE7FvD,MAAM,CAACoD,cAAc,CAAC,CAACM,eAAe,CAAC,CAAC,CAAC,CAAC;IAC1C1D,MAAM,CAACwD,cAAc,CAAC,CAACE,eAAe,CAAC,CAAC,CAAC,CAAC;IAC1C1D,MAAM,CAACyD,iBAAiB,CAAC,CAACC,eAAe,CAAC,CAAC,CAAC,CAAC;;IAE7C;IACA1D,MAAM,CAACoD,cAAc,CAAC,CAACO,YAAY,CAACF,iBAAiB,CAAC;IACtDzD,MAAM,CAACwD,cAAc,CAAC,CAACG,YAAY,CAACF,iBAAiB,CAAC;IAEtD,MAAMzD,MAAM,CAAC4B,SAAS,CAAC,CAACC,mBAAmB,CAAC/B,IAAI,CAACO,IAAI,CAACD,WAAW,EAAE,yBAAyB,CAAC,CAAC;EAChG,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"generateModelsFromIr.js","names":["invariant","formatVariantName","ModelGenerator","constructor","schema","options","undefined","generateModels","typeImportPath","schemaImportPath","modelTypesPackage","imports","typeNames","Set","primaryModelKeys","modelKey","model","models","type","variantName","Object","keys","union","variants","formattedVariantName","variantTypeName","key","add","typeImports","Array","from","sort","join","schemaNames","variantSchemaName","schemaImports","modelConstants","generateModelConstants","documentSchema","generateDocumentSchema","Promise","resolve","constants","processedModels","process","env","NODE_ENV","has","modelConstant","generateModelConstant","push","typeName","modelName","schemaName","externalRefFields","extractExternalRefFieldTypes","externalRefFieldTypesCode","length","entries","map","field","record","fields","value","valueType","modelEntries","generateModelsFromIr","generator"],"sources":["generateModelsFromIr.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { IRealTimeDocumentSchema } from \"@palantir/pack-docschema-api/pack-docschema-ir\";\nimport invariant from \"tiny-invariant\";\nimport { formatVariantName } from \"../formatVariantName.js\";\n\nexport interface ModelGeneratorOptions {\n typeImportPath?: string;\n schemaImportPath?: string;\n}\n\nexport class ModelGenerator {\n constructor(\n private readonly schema: IRealTimeDocumentSchema,\n private readonly options: ModelGeneratorOptions | undefined = undefined,\n ) {}\n\n public generateModels(): Promise<string> {\n const typeImportPath = this.options?.typeImportPath ?? \"./types.js\";\n const schemaImportPath = this.options?.schemaImportPath ?? \"./schema.js\";\n const modelTypesPackage = \"@pack/document-schema-model-types\";\n\n // Generate imports\n let imports = `import type { DocumentSchema, Model } from \"${modelTypesPackage}\";\\n\n import { Metadata } from \"${modelTypesPackage}\";\\n`;\n\n // Collect all type names (primary models + union variants)\n const typeNames = new Set(this.schema.primaryModelKeys);\n\n // Add union variant type names\n for (const modelKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelKey];\n if (model?.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantTypeName = `${model.union.key}${formattedVariantName}`;\n typeNames.add(variantTypeName);\n }\n }\n }\n\n const typeImports = Array.from(typeNames).sort().join(\", \");\n imports += `import type { ${typeImports} } from \"${typeImportPath}\";\\n`;\n\n // Collect all schema names (primary models + union variants)\n const schemaNames = new Set<string>();\n for (const modelKey of this.schema.primaryModelKeys) {\n schemaNames.add(`${modelKey}Schema`);\n\n const model = this.schema.models[modelKey];\n if (model?.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantSchemaName = `${model.union.key}${formattedVariantName}Schema`;\n schemaNames.add(variantSchemaName);\n }\n }\n }\n\n const schemaImports = Array.from(schemaNames).sort().join(\", \");\n imports += `import { ${schemaImports} } from \"${schemaImportPath}\";\\n\\n`;\n\n // Generate model constants\n const modelConstants = this.generateModelConstants();\n\n // Generate DocumentSchema\n const documentSchema = this.generateDocumentSchema();\n\n return Promise.resolve(imports + modelConstants + \"\\n\\n\" + documentSchema + \"\\n\");\n }\n\n private generateModelConstants(): string {\n const constants: string[] = [];\n const processedModels = new Set<string>();\n\n // Generate models for primary keys and their union variants\n for (const modelKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelKey];\n invariant(model != null, `Model not found: ${modelKey}`);\n\n // Generate primary model constant\n if (!processedModels.has(modelKey)) {\n const modelConstant = this.generateModelConstant(modelKey, modelKey);\n constants.push(modelConstant);\n processedModels.add(modelKey);\n }\n\n // Generate union variant constants\n if (model.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantTypeName = `${model.union.key}${formattedVariantName}`;\n\n if (!processedModels.has(variantTypeName)) {\n const modelConstant = this.generateModelConstant(variantTypeName, variantTypeName);\n constants.push(modelConstant);\n processedModels.add(variantTypeName);\n }\n }\n }\n }\n\n return constants.join(\"\\n\\n\");\n }\n\n private generateModelConstant(typeName: string, modelName: string): string {\n const schemaName = `${typeName}Schema`;\n const externalRefFields = this.extractExternalRefFieldTypes(modelName);\n\n let externalRefFieldTypesCode = \"\";\n if (externalRefFields.length > 0) {\n const entries = externalRefFields.map(([field, type]) => ` ${field}: \"${type}\",`).join(\n \"\\n\",\n );\n externalRefFieldTypesCode = `\\n externalRefFieldTypes: {\\n${entries}\\n },`;\n }\n\n return `export interface ${modelName}Model extends Model<${typeName}, typeof ${schemaName}> {}\nexport const ${modelName}Model: ${modelName}Model = {\n __type: {} as ${typeName},\n zodSchema: ${schemaName},\n [Metadata]: {${externalRefFieldTypesCode}\n name: \"${modelName}\",\n },\n};`;\n }\n\n private extractExternalRefFieldTypes(modelName: string): Array<[string, string]> {\n const model = this.schema.models[modelName];\n if (model?.type !== \"record\") {\n return [];\n }\n\n const externalRefFields: Array<[string, string]> = [];\n for (const field of model.record.fields) {\n if (field.value.type === \"value\") {\n const valueType = field.value.value.type;\n if (valueType === \"docRef\") {\n externalRefFields.push([field.key, \"docRef\"]);\n } else if (valueType === \"mediaRef\") {\n externalRefFields.push([field.key, \"mediaRef\"]);\n } else if (valueType === \"object\") {\n externalRefFields.push([field.key, \"objectRef\"]);\n } else if (valueType === \"userRef\") {\n externalRefFields.push([field.key, \"userRef\"]);\n }\n }\n }\n\n return externalRefFields;\n }\n\n private generateDocumentSchema(): string {\n const modelEntries: string[] = [];\n const processedModels = new Set<string>();\n\n // Collect all model names that will be generated\n for (const modelKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelKey];\n invariant(model != null, `Model not found: ${modelKey}`);\n\n // Add primary model\n if (!processedModels.has(modelKey)) {\n modelEntries.push(` ${modelKey}: ${modelKey}Model`);\n processedModels.add(modelKey);\n }\n\n // Add union variant models\n if (model.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantTypeName = `${model.union.key}${formattedVariantName}`;\n\n if (!processedModels.has(variantTypeName)) {\n modelEntries.push(` ${variantTypeName}: ${variantTypeName}Model`);\n processedModels.add(variantTypeName);\n }\n }\n }\n }\n\n return `export const DocumentModel = {\n${modelEntries.join(\",\\n\")},\n [Metadata]: {\n version: 1,\n },\n} as const satisfies DocumentSchema;\\n\n export type DocumentModel = typeof DocumentModel;`;\n }\n}\n\nexport async function generateModelsFromIr(\n schema: IRealTimeDocumentSchema,\n options?: ModelGeneratorOptions,\n): Promise<string> {\n const generator = new ModelGenerator(schema, options);\n return generator.generateModels();\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateModelsFromIr.js","names":["invariant","formatVariantName","ModelGenerator","constructor","schema","options","undefined","generateModels","typeImportPath","schemaImportPath","modelTypesPackage","imports","typeNames","Set","primaryModelKeys","modelKey","model","models","type","variantName","Object","keys","union","variants","formattedVariantName","variantTypeName","key","add","typeImports","Array","from","sort","join","schemaNames","variantSchemaName","schemaImports","modelConstants","generateModelConstants","documentSchema","generateDocumentSchema","Promise","resolve","constants","processedModels","process","env","NODE_ENV","has","modelConstant","generateModelConstant","push","typeName","modelName","schemaName","externalRefFields","extractExternalRefFieldTypes","externalRefFieldTypesCode","length","entries","map","field","record","fields","value","valueType","modelEntries","generateModelsFromIr","generator"],"sources":["generateModelsFromIr.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 invariant from \"tiny-invariant\";\nimport type { IRealTimeDocumentSchema } from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { formatVariantName } from \"../formatVariantName.js\";\n\nexport interface ModelGeneratorOptions {\n typeImportPath?: string;\n schemaImportPath?: string;\n}\n\nexport class ModelGenerator {\n constructor(\n private readonly schema: IRealTimeDocumentSchema,\n private readonly options: ModelGeneratorOptions | undefined = undefined,\n ) {}\n\n public generateModels(): Promise<string> {\n const typeImportPath = this.options?.typeImportPath ?? \"./types.js\";\n const schemaImportPath = this.options?.schemaImportPath ?? \"./schema.js\";\n const modelTypesPackage = \"@pack/document-schema-model-types\";\n\n // Generate imports\n let imports = `import type { DocumentSchema, Model } from \"${modelTypesPackage}\";\\n\n import { Metadata } from \"${modelTypesPackage}\";\\n`;\n\n // Collect all type names (primary models + union variants)\n const typeNames = new Set(this.schema.primaryModelKeys);\n\n // Add union variant type names\n for (const modelKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelKey];\n if (model?.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantTypeName = `${model.union.key}${formattedVariantName}`;\n typeNames.add(variantTypeName);\n }\n }\n }\n\n const typeImports = Array.from(typeNames).sort().join(\", \");\n imports += `import type { ${typeImports} } from \"${typeImportPath}\";\\n`;\n\n // Collect all schema names (primary models + union variants)\n const schemaNames = new Set<string>();\n for (const modelKey of this.schema.primaryModelKeys) {\n schemaNames.add(`${modelKey}Schema`);\n\n const model = this.schema.models[modelKey];\n if (model?.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantSchemaName = `${model.union.key}${formattedVariantName}Schema`;\n schemaNames.add(variantSchemaName);\n }\n }\n }\n\n const schemaImports = Array.from(schemaNames).sort().join(\", \");\n imports += `import { ${schemaImports} } from \"${schemaImportPath}\";\\n\\n`;\n\n // Generate model constants\n const modelConstants = this.generateModelConstants();\n\n // Generate DocumentSchema\n const documentSchema = this.generateDocumentSchema();\n\n return Promise.resolve(imports + modelConstants + \"\\n\\n\" + documentSchema + \"\\n\");\n }\n\n private generateModelConstants(): string {\n const constants: string[] = [];\n const processedModels = new Set<string>();\n\n // Generate models for primary keys and their union variants\n for (const modelKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelKey];\n invariant(model != null, `Model not found: ${modelKey}`);\n\n // Generate primary model constant\n if (!processedModels.has(modelKey)) {\n const modelConstant = this.generateModelConstant(modelKey, modelKey);\n constants.push(modelConstant);\n processedModels.add(modelKey);\n }\n\n // Generate union variant constants\n if (model.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantTypeName = `${model.union.key}${formattedVariantName}`;\n\n if (!processedModels.has(variantTypeName)) {\n const modelConstant = this.generateModelConstant(variantTypeName, variantTypeName);\n constants.push(modelConstant);\n processedModels.add(variantTypeName);\n }\n }\n }\n }\n\n return constants.join(\"\\n\\n\");\n }\n\n private generateModelConstant(typeName: string, modelName: string): string {\n const schemaName = `${typeName}Schema`;\n const externalRefFields = this.extractExternalRefFieldTypes(modelName);\n\n let externalRefFieldTypesCode = \"\";\n if (externalRefFields.length > 0) {\n const entries = externalRefFields.map(([field, type]) => ` ${field}: \"${type}\",`).join(\n \"\\n\",\n );\n externalRefFieldTypesCode = `\\n externalRefFieldTypes: {\\n${entries}\\n },`;\n }\n\n return `export interface ${modelName}Model extends Model<${typeName}, typeof ${schemaName}> {}\nexport const ${modelName}Model: ${modelName}Model = {\n __type: {} as ${typeName},\n zodSchema: ${schemaName},\n [Metadata]: {${externalRefFieldTypesCode}\n name: \"${modelName}\",\n },\n};`;\n }\n\n private extractExternalRefFieldTypes(modelName: string): Array<[string, string]> {\n const model = this.schema.models[modelName];\n if (model?.type !== \"record\") {\n return [];\n }\n\n const externalRefFields: Array<[string, string]> = [];\n for (const field of model.record.fields) {\n if (field.value.type === \"value\") {\n const valueType = field.value.value.type;\n if (valueType === \"docRef\") {\n externalRefFields.push([field.key, \"docRef\"]);\n } else if (valueType === \"mediaRef\") {\n externalRefFields.push([field.key, \"mediaRef\"]);\n } else if (valueType === \"object\") {\n externalRefFields.push([field.key, \"objectRef\"]);\n } else if (valueType === \"userRef\") {\n externalRefFields.push([field.key, \"userRef\"]);\n }\n }\n }\n\n return externalRefFields;\n }\n\n private generateDocumentSchema(): string {\n const modelEntries: string[] = [];\n const processedModels = new Set<string>();\n\n // Collect all model names that will be generated\n for (const modelKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelKey];\n invariant(model != null, `Model not found: ${modelKey}`);\n\n // Add primary model\n if (!processedModels.has(modelKey)) {\n modelEntries.push(` ${modelKey}: ${modelKey}Model`);\n processedModels.add(modelKey);\n }\n\n // Add union variant models\n if (model.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantTypeName = `${model.union.key}${formattedVariantName}`;\n\n if (!processedModels.has(variantTypeName)) {\n modelEntries.push(` ${variantTypeName}: ${variantTypeName}Model`);\n processedModels.add(variantTypeName);\n }\n }\n }\n }\n\n return `export const DocumentModel = {\n${modelEntries.join(\",\\n\")},\n [Metadata]: {\n version: 1,\n },\n} as const satisfies DocumentSchema;\\n\n export type DocumentModel = typeof DocumentModel;`;\n }\n}\n\nexport async function generateModelsFromIr(\n schema: IRealTimeDocumentSchema,\n options?: ModelGeneratorOptions,\n): Promise<string> {\n const generator = new ModelGenerator(schema, options);\n return generator.generateModels();\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"generateZodSchemasFromIr.js","names":["consola","invariant","assertNever","formatVariantName","ZodSchemaGenerator","constructor","schema","options","generateSDK","Error","generateTypes","imports","typeImportPath","typeNames","Set","primaryModelKeys","modelKey","model","models","type","variantName","Object","keys","union","variants","formattedVariantName","variantTypeName","key","add","typeImports","Array","from","sort","join","schemasCode","generateZodSchemas","schemaLines","emittedModels","recordSchemas","Map","unionDefinitions","modelTypeKey","process","env","NODE_ENV","schemaCode","generateRecordSchema","record","satisfiesClause","set","push","remainingUnions","madeProgress","size","allDependenciesEmitted","values","every","variantModelKey","has","unionSchemas","generateUnionWithVariants","delete","warn","generateModel","generateUnionSchema","fieldEntryLines","field","fields","fieldSchema","generateFieldSchema","variantSchemaNames","entries","discriminatorField","discriminant","variantSchemas","variantSchemaName","variantModel","variantSchemaCode","recordKey","unionKey","unionSchema","unionSatisfiesClause","fieldValueSchemaStr","generateFieldTypeSchema","value","isOptional","fieldType","arrayElementSchema","generateFieldValueSchema","array","keySchema","map","valueSchema","setElementSchema","fieldValue","doubleSchema","double","minValue","maxValue","intSchema","integer","refVariantsLines","modelType","modelRef","modelTypes","includes","length","stringSchema","string","minLength","maxLength","generateZodSchemasFromIr","generator"],"sources":["generateZodSchemasFromIr.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n IFieldDef,\n IFieldTypeUnion,\n IFieldValueUnion,\n IModelDef,\n IRealTimeDocumentSchema,\n IRecordDef,\n IUnionDef,\n} from \"@palantir/pack-docschema-api/pack-docschema-ir\";\nimport consola from \"consola\";\nimport invariant from \"tiny-invariant\";\nimport { assertNever } from \"../assertNever.js\";\nimport { formatVariantName } from \"../formatVariantName.js\";\n\nexport interface ZodGeneratorOptions {\n namespace?: string;\n includeTypes?: boolean;\n includeCRDT?: boolean;\n typeImportPath?: string;\n}\n\nclass ZodSchemaGenerator {\n constructor(\n private readonly schema: IRealTimeDocumentSchema,\n private readonly options?: ZodGeneratorOptions,\n ) {}\n\n public generateSDK(_options: ZodGeneratorOptions): string {\n throw new Error(\n \"SDK generation not yet implemented - placeholder for future development\",\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n public async generateTypes(): Promise<string> {\n let imports = \"import { z } from 'zod';\\n\";\n\n if (this.options?.typeImportPath) {\n imports = \"import type { ZodType } from \\\"zod\\\";\\n\" + imports;\n\n // Collect all type names from the schema (primary models + union variants)\n const typeNames = new Set(this.schema.primaryModelKeys);\n\n // Add union variant type names\n for (const modelKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelKey];\n if (model?.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantTypeName = `${model.union.key}${formattedVariantName}`;\n typeNames.add(variantTypeName);\n }\n }\n }\n\n const typeImports = Array.from(typeNames).sort().join(\", \");\n imports += `import type { ${typeImports} } from \"${this.options.typeImportPath}\";\\n`;\n }\n\n imports += \"\\n\";\n const schemasCode = this.generateZodSchemas();\n return imports + schemasCode + \"\\n\";\n }\n\n private generateZodSchemas(): string {\n const schemaLines: string[] = [];\n const emittedModels = new Set<string>();\n const recordSchemas = new Map<string, string>();\n const unionDefinitions = new Map<string, IUnionDef>();\n\n // First, categorize all models and generate record schemas\n for (const modelTypeKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelTypeKey];\n invariant(model != null, `Model not found: ${modelTypeKey}`);\n\n switch (model.type) {\n case \"record\": {\n const schemaCode = this.generateRecordSchema(model.record);\n const satisfiesClause = this.options?.typeImportPath\n ? ` satisfies ZodType<${modelTypeKey}>`\n : \"\";\n recordSchemas.set(\n modelTypeKey,\n `export const ${modelTypeKey}Schema = ${schemaCode}${satisfiesClause};`,\n );\n break;\n }\n case \"union\": {\n unionDefinitions.set(modelTypeKey, model.union);\n break;\n }\n }\n }\n\n // Emit all record schemas first\n for (const [modelTypeKey, schemaCode] of recordSchemas) {\n schemaLines.push(schemaCode);\n emittedModels.add(modelTypeKey);\n }\n\n // Now handle unions with proper dependency ordering\n const remainingUnions = new Map(unionDefinitions);\n let madeProgress = true;\n\n while (remainingUnions.size > 0 && madeProgress) {\n madeProgress = false;\n\n for (const [modelTypeKey, union] of remainingUnions) {\n // Check if all dependencies are already emitted\n const allDependenciesEmitted = Object.values(union.variants).every(\n variantModelKey => emittedModels.has(variantModelKey),\n );\n\n if (allDependenciesEmitted) {\n // Generate the union with its variant schemas\n const unionSchemas = this.generateUnionWithVariants(union);\n schemaLines.push(unionSchemas);\n emittedModels.add(modelTypeKey);\n remainingUnions.delete(modelTypeKey);\n madeProgress = true;\n }\n }\n }\n\n // If there are still remaining unions, we have circular dependencies or missing models\n if (remainingUnions.size > 0) {\n consola.warn(\n `Warning: Could not generate schemas for unions due to circular or missing dependencies: ${\n Array.from(remainingUnions.keys()).join(\", \")\n }`,\n );\n // Emit them anyway with a comment\n for (const [modelTypeKey, union] of remainingUnions) {\n schemaLines.push(`// Warning: Union ${modelTypeKey} may have unresolved dependencies`);\n const unionSchemas = this.generateUnionWithVariants(union);\n schemaLines.push(unionSchemas);\n }\n }\n\n return schemaLines.join(\"\\n\\n\");\n }\n\n private generateModel(\n model: IModelDef,\n ): string {\n switch (model.type) {\n case \"record\":\n return this.generateRecordSchema(model.record);\n case \"union\":\n return this.generateUnionSchema(model.union);\n default:\n assertNever(model);\n }\n }\n\n private generateRecordSchema(\n record: IRecordDef,\n ): string {\n const fieldEntryLines: string[] = [];\n for (const field of record.fields) {\n const fieldSchema = this.generateFieldSchema(field);\n fieldEntryLines.push(` ${field.key}: ${fieldSchema}`);\n }\n return `z.object({\\n${fieldEntryLines.join(\",\\n\")}\\n})`;\n }\n\n private generateUnionSchema(\n union: IUnionDef,\n ): string {\n // Just return the discriminated union without variant schemas\n const variantSchemaNames: string[] = [];\n\n for (const [variantName] of Object.entries(union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n variantSchemaNames.push(`${union.key}${formattedVariantName}Schema`);\n }\n\n const discriminatorField = union.discriminant || \"type\";\n return `z.discriminatedUnion(\"${discriminatorField}\", [\\n ${\n variantSchemaNames.join(\",\\n \")\n }\\n])`;\n }\n\n private generateUnionWithVariants(\n union: IUnionDef,\n ): string {\n const variantSchemas: string[] = [];\n const variantSchemaNames: string[] = [];\n\n // Generate variant schemas\n for (const [variantName, variantModelKey] of Object.entries(union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantSchemaName = `${union.key}${formattedVariantName}Schema`;\n variantSchemaNames.push(variantSchemaName);\n\n // Look up the model from the schema\n const variantModel = this.schema.models[variantModelKey];\n invariant(variantModel != null, `Model not found: ${variantModelKey}`);\n\n let variantSchemaCode: string;\n switch (variantModel.type) {\n case \"record\": {\n // For record variants, reference the existing record schema and extend with discriminator\n const recordKey = variantModel.record.key;\n const discriminatorField = ` ${union.discriminant}: z.literal(\"${variantName}\")`;\n\n // Extend the existing record schema with the discriminator field\n // Note: We assume records are defined before unions, so we can directly reference them\n variantSchemaCode = `${recordKey}Schema.extend({\\n${discriminatorField}\\n})`;\n break;\n }\n case \"union\": {\n // For union variants (nested unions), wrap with discriminator and value\n const unionKey = variantModel.union.key;\n variantSchemaCode =\n `z.object({\\n ${union.discriminant}: z.literal(\"${variantName}\"),\\n value: z.lazy(() => ${unionKey}Schema)\\n})`;\n break;\n }\n default:\n assertNever(variantModel);\n }\n\n // Generate satisfies clause for variant schemas if typeImportPath is provided\n const variantTypeName = `${union.key}${formattedVariantName}`;\n const satisfiesClause = this.options?.typeImportPath\n ? ` satisfies ZodType<${variantTypeName}>`\n : \"\";\n variantSchemas.push(\n `export const ${variantSchemaName} = ${variantSchemaCode}${satisfiesClause};`,\n );\n }\n\n // Generate the discriminated union\n const discriminatorField = union.discriminant || \"type\";\n const unionSchema = `z.discriminatedUnion(\"${discriminatorField}\", [\\n ${\n variantSchemaNames.join(\",\\n \")\n }\\n])`;\n\n // Generate satisfies clause for the main union schema if typeImportPath is provided\n const unionSatisfiesClause = this.options?.typeImportPath\n ? ` satisfies ZodType<${union.key}>`\n : \"\";\n\n // Return the variant schemas and the union schema\n return variantSchemas.join(\"\\n\\n\")\n + `\\n\\nexport const ${union.key}Schema = ${unionSchema}${unionSatisfiesClause};`;\n }\n\n private generateFieldSchema(\n field: IFieldDef,\n ): string {\n const fieldValueSchemaStr = this.generateFieldTypeSchema(field.value);\n\n if (field.isOptional) {\n return `${fieldValueSchemaStr}.optional()`;\n }\n\n return fieldValueSchemaStr;\n }\n\n private generateFieldTypeSchema(\n fieldType: IFieldTypeUnion,\n ): string {\n switch (fieldType.type) {\n case \"array\": {\n const arrayElementSchema = this.generateFieldValueSchema(\n fieldType.array.value,\n );\n return `z.array(${arrayElementSchema})`;\n }\n\n case \"map\": {\n const keySchema = this.generateFieldValueSchema(\n fieldType.map.key,\n );\n const valueSchema = this.generateFieldValueSchema(\n fieldType.map.value,\n );\n return `z.record(${keySchema}, ${valueSchema})`;\n }\n case \"set\": {\n const setElementSchema = this.generateFieldValueSchema(\n fieldType.set.value,\n );\n return `z.array(${setElementSchema})`;\n } // Zod doesn't have Set, use array\n\n case \"value\":\n return this.generateFieldValueSchema(fieldType.value);\n\n default:\n assertNever(fieldType);\n }\n }\n\n private generateFieldValueSchema(\n fieldValue: IFieldValueUnion,\n ): string {\n switch (fieldValue.type) {\n case \"datetime\":\n return \"z.string().datetime()\";\n\n case \"double\": {\n let doubleSchema = \"z.number()\";\n if (fieldValue.double.minValue != null) {\n doubleSchema += `.min(${fieldValue.double.minValue})`;\n }\n if (fieldValue.double.maxValue != null) {\n doubleSchema += `.max(${fieldValue.double.maxValue})`;\n }\n return doubleSchema;\n }\n\n case \"integer\": {\n let intSchema = \"z.number().int()\";\n if (fieldValue.integer.minValue != null) {\n intSchema += `.min(${fieldValue.integer.minValue})`;\n }\n if (fieldValue.integer.maxValue != null) {\n intSchema += `.max(${fieldValue.integer.maxValue})`;\n }\n return intSchema;\n }\n\n case \"modelRef\": {\n const refVariantsLines: string[] = [];\n\n for (const modelType of fieldValue.modelRef.modelTypes) {\n const model = this.schema.models[modelType];\n invariant(model != null, `Model not found: ${modelType}`);\n\n // Referent the model directly\n if (this.schema.primaryModelKeys.includes(modelType)) {\n return `z.lazy(() => ${modelType}Schema)`;\n }\n\n // Generate inline model\n // TODO: should not be possible to have recursive nested models but we should guard against it\n return this.generateModel(model);\n }\n\n if (refVariantsLines.length === 0) {\n return \"z.unknown()\";\n }\n\n if (refVariantsLines.length === 1) {\n return refVariantsLines[0]!;\n }\n\n return `z.union([${refVariantsLines.join(\", \")}])`;\n }\n\n case \"string\": {\n let stringSchema = \"z.string()\";\n if (fieldValue.string.minLength != null) {\n stringSchema += `.min(${fieldValue.string.minLength})`;\n }\n if (fieldValue.string.maxLength != null) {\n stringSchema += `.max(${fieldValue.string.maxLength})`;\n }\n return stringSchema;\n }\n\n case \"text\":\n return \"z.unknown()\";\n\n case \"unmanagedJson\":\n return \"z.unknown()\";\n\n case \"docRef\":\n case \"mediaRef\":\n case \"object\":\n case \"userRef\":\n return \"z.string()\"; // Assume these are string IDs\n\n default:\n assertNever(fieldValue);\n }\n }\n}\n\nexport async function generateZodSchemasFromIr(\n schema: IRealTimeDocumentSchema,\n options?: ZodGeneratorOptions,\n): Promise<string> {\n const generator = new ZodSchemaGenerator(schema, options);\n return generator.generateTypes();\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateZodSchemasFromIr.js","names":["consola","invariant","assertNever","formatVariantName","ZodSchemaGenerator","constructor","schema","options","generateSDK","Error","generateTypes","imports","typeImportPath","typeNames","Set","primaryModelKeys","modelKey","model","models","type","variantName","Object","keys","union","variants","formattedVariantName","variantTypeName","key","add","typeImports","Array","from","sort","join","schemasCode","generateZodSchemas","schemaLines","emittedModels","recordSchemas","Map","unionDefinitions","modelTypeKey","process","env","NODE_ENV","schemaCode","generateRecordSchema","record","satisfiesClause","set","push","remainingUnions","madeProgress","size","allDependenciesEmitted","values","every","variantModelKey","has","unionSchemas","generateUnionWithVariants","delete","warn","generateModel","generateUnionSchema","fieldEntryLines","field","fields","fieldSchema","generateFieldSchema","variantSchemaNames","entries","discriminatorField","discriminant","variantSchemas","variantSchemaName","variantModel","variantSchemaCode","recordKey","unionKey","unionSchema","unionSatisfiesClause","fieldValueSchemaStr","generateFieldTypeSchema","value","isOptional","fieldType","arrayElementSchema","generateFieldValueSchema","array","keySchema","map","valueSchema","setElementSchema","fieldValue","doubleSchema","double","minValue","maxValue","intSchema","integer","refVariantsLines","modelType","modelRef","modelTypes","includes","length","stringSchema","string","minLength","maxLength","generateZodSchemasFromIr","generator"],"sources":["generateZodSchemasFromIr.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 consola from \"consola\";\nimport invariant from \"tiny-invariant\";\nimport type {\n IFieldDef,\n IFieldTypeUnion,\n IFieldValueUnion,\n IModelDef,\n IRealTimeDocumentSchema,\n IRecordDef,\n IUnionDef,\n} from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { assertNever } from \"../assertNever.js\";\nimport { formatVariantName } from \"../formatVariantName.js\";\n\nexport interface ZodGeneratorOptions {\n namespace?: string;\n includeTypes?: boolean;\n includeCRDT?: boolean;\n typeImportPath?: string;\n}\n\nclass ZodSchemaGenerator {\n constructor(\n private readonly schema: IRealTimeDocumentSchema,\n private readonly options?: ZodGeneratorOptions,\n ) {}\n\n public generateSDK(_options: ZodGeneratorOptions): string {\n throw new Error(\n \"SDK generation not yet implemented - placeholder for future development\",\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n public async generateTypes(): Promise<string> {\n let imports = \"import { z } from 'zod';\\n\";\n\n if (this.options?.typeImportPath) {\n imports = \"import type { ZodType } from \\\"zod\\\";\\n\" + imports;\n\n // Collect all type names from the schema (primary models + union variants)\n const typeNames = new Set(this.schema.primaryModelKeys);\n\n // Add union variant type names\n for (const modelKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelKey];\n if (model?.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantTypeName = `${model.union.key}${formattedVariantName}`;\n typeNames.add(variantTypeName);\n }\n }\n }\n\n const typeImports = Array.from(typeNames).sort().join(\", \");\n imports += `import type { ${typeImports} } from \"${this.options.typeImportPath}\";\\n`;\n }\n\n imports += \"\\n\";\n const schemasCode = this.generateZodSchemas();\n return imports + schemasCode + \"\\n\";\n }\n\n private generateZodSchemas(): string {\n const schemaLines: string[] = [];\n const emittedModels = new Set<string>();\n const recordSchemas = new Map<string, string>();\n const unionDefinitions = new Map<string, IUnionDef>();\n\n // First, categorize all models and generate record schemas\n for (const modelTypeKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelTypeKey];\n invariant(model != null, `Model not found: ${modelTypeKey}`);\n\n switch (model.type) {\n case \"record\": {\n const schemaCode = this.generateRecordSchema(model.record);\n const satisfiesClause = this.options?.typeImportPath\n ? ` satisfies ZodType<${modelTypeKey}>`\n : \"\";\n recordSchemas.set(\n modelTypeKey,\n `export const ${modelTypeKey}Schema = ${schemaCode}${satisfiesClause};`,\n );\n break;\n }\n case \"union\": {\n unionDefinitions.set(modelTypeKey, model.union);\n break;\n }\n }\n }\n\n // Emit all record schemas first\n for (const [modelTypeKey, schemaCode] of recordSchemas) {\n schemaLines.push(schemaCode);\n emittedModels.add(modelTypeKey);\n }\n\n // Now handle unions with proper dependency ordering\n const remainingUnions = new Map(unionDefinitions);\n let madeProgress = true;\n\n while (remainingUnions.size > 0 && madeProgress) {\n madeProgress = false;\n\n for (const [modelTypeKey, union] of remainingUnions) {\n // Check if all dependencies are already emitted\n const allDependenciesEmitted = Object.values(union.variants).every(\n variantModelKey => emittedModels.has(variantModelKey),\n );\n\n if (allDependenciesEmitted) {\n // Generate the union with its variant schemas\n const unionSchemas = this.generateUnionWithVariants(union);\n schemaLines.push(unionSchemas);\n emittedModels.add(modelTypeKey);\n remainingUnions.delete(modelTypeKey);\n madeProgress = true;\n }\n }\n }\n\n // If there are still remaining unions, we have circular dependencies or missing models\n if (remainingUnions.size > 0) {\n consola.warn(\n `Warning: Could not generate schemas for unions due to circular or missing dependencies: ${\n Array.from(remainingUnions.keys()).join(\", \")\n }`,\n );\n // Emit them anyway with a comment\n for (const [modelTypeKey, union] of remainingUnions) {\n schemaLines.push(`// Warning: Union ${modelTypeKey} may have unresolved dependencies`);\n const unionSchemas = this.generateUnionWithVariants(union);\n schemaLines.push(unionSchemas);\n }\n }\n\n return schemaLines.join(\"\\n\\n\");\n }\n\n private generateModel(\n model: IModelDef,\n ): string {\n switch (model.type) {\n case \"record\":\n return this.generateRecordSchema(model.record);\n case \"union\":\n return this.generateUnionSchema(model.union);\n default:\n assertNever(model);\n }\n }\n\n private generateRecordSchema(\n record: IRecordDef,\n ): string {\n const fieldEntryLines: string[] = [];\n for (const field of record.fields) {\n const fieldSchema = this.generateFieldSchema(field);\n fieldEntryLines.push(` ${field.key}: ${fieldSchema}`);\n }\n return `z.object({\\n${fieldEntryLines.join(\",\\n\")}\\n})`;\n }\n\n private generateUnionSchema(\n union: IUnionDef,\n ): string {\n // Just return the discriminated union without variant schemas\n const variantSchemaNames: string[] = [];\n\n for (const [variantName] of Object.entries(union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n variantSchemaNames.push(`${union.key}${formattedVariantName}Schema`);\n }\n\n const discriminatorField = union.discriminant || \"type\";\n return `z.discriminatedUnion(\"${discriminatorField}\", [\\n ${\n variantSchemaNames.join(\",\\n \")\n }\\n])`;\n }\n\n private generateUnionWithVariants(\n union: IUnionDef,\n ): string {\n const variantSchemas: string[] = [];\n const variantSchemaNames: string[] = [];\n\n // Generate variant schemas\n for (const [variantName, variantModelKey] of Object.entries(union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantSchemaName = `${union.key}${formattedVariantName}Schema`;\n variantSchemaNames.push(variantSchemaName);\n\n // Look up the model from the schema\n const variantModel = this.schema.models[variantModelKey];\n invariant(variantModel != null, `Model not found: ${variantModelKey}`);\n\n let variantSchemaCode: string;\n switch (variantModel.type) {\n case \"record\": {\n // For record variants, reference the existing record schema and extend with discriminator\n const recordKey = variantModel.record.key;\n const discriminatorField = ` ${union.discriminant}: z.literal(\"${variantName}\")`;\n\n // Extend the existing record schema with the discriminator field\n // Note: We assume records are defined before unions, so we can directly reference them\n variantSchemaCode = `${recordKey}Schema.extend({\\n${discriminatorField}\\n})`;\n break;\n }\n case \"union\": {\n // For union variants (nested unions), wrap with discriminator and value\n const unionKey = variantModel.union.key;\n variantSchemaCode =\n `z.object({\\n ${union.discriminant}: z.literal(\"${variantName}\"),\\n value: z.lazy(() => ${unionKey}Schema)\\n})`;\n break;\n }\n default:\n assertNever(variantModel);\n }\n\n // Generate satisfies clause for variant schemas if typeImportPath is provided\n const variantTypeName = `${union.key}${formattedVariantName}`;\n const satisfiesClause = this.options?.typeImportPath\n ? ` satisfies ZodType<${variantTypeName}>`\n : \"\";\n variantSchemas.push(\n `export const ${variantSchemaName} = ${variantSchemaCode}${satisfiesClause};`,\n );\n }\n\n // Generate the discriminated union\n const discriminatorField = union.discriminant || \"type\";\n const unionSchema = `z.discriminatedUnion(\"${discriminatorField}\", [\\n ${\n variantSchemaNames.join(\",\\n \")\n }\\n])`;\n\n // Generate satisfies clause for the main union schema if typeImportPath is provided\n const unionSatisfiesClause = this.options?.typeImportPath\n ? ` satisfies ZodType<${union.key}>`\n : \"\";\n\n // Return the variant schemas and the union schema\n return variantSchemas.join(\"\\n\\n\")\n + `\\n\\nexport const ${union.key}Schema = ${unionSchema}${unionSatisfiesClause};`;\n }\n\n private generateFieldSchema(\n field: IFieldDef,\n ): string {\n const fieldValueSchemaStr = this.generateFieldTypeSchema(field.value);\n\n if (field.isOptional) {\n return `${fieldValueSchemaStr}.optional()`;\n }\n\n return fieldValueSchemaStr;\n }\n\n private generateFieldTypeSchema(\n fieldType: IFieldTypeUnion,\n ): string {\n switch (fieldType.type) {\n case \"array\": {\n const arrayElementSchema = this.generateFieldValueSchema(\n fieldType.array.value,\n );\n return `z.array(${arrayElementSchema})`;\n }\n\n case \"map\": {\n const keySchema = this.generateFieldValueSchema(\n fieldType.map.key,\n );\n const valueSchema = this.generateFieldValueSchema(\n fieldType.map.value,\n );\n return `z.record(${keySchema}, ${valueSchema})`;\n }\n case \"set\": {\n const setElementSchema = this.generateFieldValueSchema(\n fieldType.set.value,\n );\n return `z.array(${setElementSchema})`;\n } // Zod doesn't have Set, use array\n\n case \"value\":\n return this.generateFieldValueSchema(fieldType.value);\n\n default:\n assertNever(fieldType);\n }\n }\n\n private generateFieldValueSchema(\n fieldValue: IFieldValueUnion,\n ): string {\n switch (fieldValue.type) {\n case \"datetime\":\n return \"z.string().datetime()\";\n\n case \"double\": {\n let doubleSchema = \"z.number()\";\n if (fieldValue.double.minValue != null) {\n doubleSchema += `.min(${fieldValue.double.minValue})`;\n }\n if (fieldValue.double.maxValue != null) {\n doubleSchema += `.max(${fieldValue.double.maxValue})`;\n }\n return doubleSchema;\n }\n\n case \"integer\": {\n let intSchema = \"z.number().int()\";\n if (fieldValue.integer.minValue != null) {\n intSchema += `.min(${fieldValue.integer.minValue})`;\n }\n if (fieldValue.integer.maxValue != null) {\n intSchema += `.max(${fieldValue.integer.maxValue})`;\n }\n return intSchema;\n }\n\n case \"modelRef\": {\n const refVariantsLines: string[] = [];\n\n for (const modelType of fieldValue.modelRef.modelTypes) {\n const model = this.schema.models[modelType];\n invariant(model != null, `Model not found: ${modelType}`);\n\n // Referent the model directly\n if (this.schema.primaryModelKeys.includes(modelType)) {\n return `z.lazy(() => ${modelType}Schema)`;\n }\n\n // Generate inline model\n // TODO: should not be possible to have recursive nested models but we should guard against it\n return this.generateModel(model);\n }\n\n if (refVariantsLines.length === 0) {\n return \"z.unknown()\";\n }\n\n if (refVariantsLines.length === 1) {\n return refVariantsLines[0]!;\n }\n\n return `z.union([${refVariantsLines.join(\", \")}])`;\n }\n\n case \"string\": {\n let stringSchema = \"z.string()\";\n if (fieldValue.string.minLength != null) {\n stringSchema += `.min(${fieldValue.string.minLength})`;\n }\n if (fieldValue.string.maxLength != null) {\n stringSchema += `.max(${fieldValue.string.maxLength})`;\n }\n return stringSchema;\n }\n\n case \"text\":\n return \"z.unknown()\";\n\n case \"unmanagedJson\":\n return \"z.unknown()\";\n\n case \"docRef\":\n case \"mediaRef\":\n case \"object\":\n case \"userRef\":\n return \"z.string()\"; // Assume these are string IDs\n\n default:\n assertNever(fieldValue);\n }\n }\n}\n\nexport async function generateZodSchemasFromIr(\n schema: IRealTimeDocumentSchema,\n options?: ZodGeneratorOptions,\n): Promise<string> {\n const generator = new ZodSchemaGenerator(schema, options);\n return generator.generateTypes();\n}\n"],"mappings":"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","ignoreList":[]}
@@ -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","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 type { IFieldTypeUnion } from \"@palantir/pack-docschema-api/pack-docschema-ir\";\nimport { describe, expect, it } from \"vitest\";\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 object: \"ObjectNode\",\n textBox: \"TextBox\",\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","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","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 object: \"ObjectNode\",\n textBox: \"TextBox\",\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":[]}
@@ -14,8 +14,8 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { IFieldTypeUnion, IFieldValueUnion, IModelDef } from "@palantir/pack-docschema-api/pack-docschema-ir";
18
17
  import invariant from "tiny-invariant";
18
+ import { IFieldTypeUnion, IFieldValueUnion, IModelDef } from "../../lib/pack-docschema-api/pack-docschema-ir/index.js";
19
19
  import { assertNever } from "../assertNever.js";
20
20
  import { convertStepsToSchema } from "./convertStepsToSchema.js";
21
21
  /**