@baseplate-dev/project-builder-lib 0.5.3 → 0.6.1

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 (369) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/dist/definition/index.d.ts +0 -1
  3. package/dist/definition/index.d.ts.map +1 -1
  4. package/dist/definition/index.js +0 -1
  5. package/dist/definition/index.js.map +1 -1
  6. package/dist/definition/model/model-field-utils.js +2 -2
  7. package/dist/definition/model/model-field-utils.js.map +1 -1
  8. package/dist/definition/model/model-utils.d.ts.map +1 -1
  9. package/dist/definition/model/model-utils.js +2 -2
  10. package/dist/definition/model/model-utils.js.map +1 -1
  11. package/dist/definition/project-definition-container.d.ts +21 -12
  12. package/dist/definition/project-definition-container.d.ts.map +1 -1
  13. package/dist/definition/project-definition-container.js +42 -23
  14. package/dist/definition/project-definition-container.js.map +1 -1
  15. package/dist/migrations/index.d.ts.map +1 -1
  16. package/dist/migrations/index.js +6 -0
  17. package/dist/migrations/index.js.map +1 -1
  18. package/dist/migrations/migration-024-graphql-object-type-field-auth.d.ts +30 -0
  19. package/dist/migrations/migration-024-graphql-object-type-field-auth.d.ts.map +1 -0
  20. package/dist/migrations/migration-024-graphql-object-type-field-auth.js +54 -0
  21. package/dist/migrations/migration-024-graphql-object-type-field-auth.js.map +1 -0
  22. package/dist/migrations/migration-025-service-method-auth.d.ts +44 -0
  23. package/dist/migrations/migration-025-service-method-auth.d.ts.map +1 -0
  24. package/dist/migrations/migration-025-service-method-auth.js +62 -0
  25. package/dist/migrations/migration-025-service-method-auth.js.map +1 -0
  26. package/dist/migrations/migration-026-query-shared-roles.d.ts +32 -0
  27. package/dist/migrations/migration-026-query-shared-roles.d.ts.map +1 -0
  28. package/dist/migrations/migration-026-query-shared-roles.js +48 -0
  29. package/dist/migrations/migration-026-query-shared-roles.js.map +1 -0
  30. package/dist/parser/apply-definition-fixes.d.ts +13 -0
  31. package/dist/parser/apply-definition-fixes.d.ts.map +1 -0
  32. package/dist/parser/apply-definition-fixes.js +25 -0
  33. package/dist/parser/apply-definition-fixes.js.map +1 -0
  34. package/dist/parser/clean-default-values.d.ts +14 -0
  35. package/dist/parser/clean-default-values.d.ts.map +1 -0
  36. package/dist/parser/clean-default-values.js +24 -0
  37. package/dist/parser/clean-default-values.js.map +1 -0
  38. package/dist/parser/collect-definition-issues.d.ts +36 -0
  39. package/dist/parser/collect-definition-issues.d.ts.map +1 -0
  40. package/dist/parser/collect-definition-issues.js +94 -0
  41. package/dist/parser/collect-definition-issues.js.map +1 -0
  42. package/dist/parser/collect-expression-issues.d.ts +17 -0
  43. package/dist/parser/collect-expression-issues.d.ts.map +1 -0
  44. package/dist/parser/collect-expression-issues.js +33 -0
  45. package/dist/parser/collect-expression-issues.js.map +1 -0
  46. package/dist/parser/definition-issue-checkers/mutation-roles-checker.d.ts +11 -0
  47. package/dist/parser/definition-issue-checkers/mutation-roles-checker.d.ts.map +1 -0
  48. package/dist/parser/definition-issue-checkers/mutation-roles-checker.js +41 -0
  49. package/dist/parser/definition-issue-checkers/mutation-roles-checker.js.map +1 -0
  50. package/dist/parser/definition-issue-checkers/relation-type-mismatch-checker.d.ts +10 -0
  51. package/dist/parser/definition-issue-checkers/relation-type-mismatch-checker.d.ts.map +1 -0
  52. package/dist/parser/definition-issue-checkers/relation-type-mismatch-checker.js +36 -0
  53. package/dist/parser/definition-issue-checkers/relation-type-mismatch-checker.js.map +1 -0
  54. package/dist/parser/definition-issue-utils.d.ts +23 -0
  55. package/dist/parser/definition-issue-utils.d.ts.map +1 -0
  56. package/dist/parser/definition-issue-utils.js +33 -0
  57. package/dist/parser/definition-issue-utils.js.map +1 -0
  58. package/dist/parser/index.d.ts +9 -0
  59. package/dist/parser/index.d.ts.map +1 -1
  60. package/dist/parser/index.js +8 -0
  61. package/dist/parser/index.js.map +1 -1
  62. package/dist/parser/parser.d.ts.map +1 -1
  63. package/dist/parser/parser.js +7 -2
  64. package/dist/parser/parser.js.map +1 -1
  65. package/dist/parser/schema-structure.d.ts +53 -0
  66. package/dist/parser/schema-structure.d.ts.map +1 -0
  67. package/dist/parser/schema-structure.js +171 -0
  68. package/dist/parser/schema-structure.js.map +1 -0
  69. package/dist/parser/transform-data-with-schema.d.ts +35 -0
  70. package/dist/parser/transform-data-with-schema.d.ts.map +1 -0
  71. package/dist/parser/transform-data-with-schema.js +140 -0
  72. package/dist/parser/transform-data-with-schema.js.map +1 -0
  73. package/dist/parser/types.d.ts +6 -3
  74. package/dist/parser/types.d.ts.map +1 -1
  75. package/dist/parser/walk-data-with-schema.d.ts +46 -0
  76. package/dist/parser/walk-data-with-schema.d.ts.map +1 -0
  77. package/dist/parser/walk-data-with-schema.js +140 -0
  78. package/dist/parser/walk-data-with-schema.js.map +1 -0
  79. package/dist/parser/walk-schema-structure.d.ts +60 -0
  80. package/dist/parser/walk-schema-structure.d.ts.map +1 -0
  81. package/dist/parser/walk-schema-structure.js +163 -0
  82. package/dist/parser/walk-schema-structure.js.map +1 -0
  83. package/dist/plugins/imports/loader.d.ts +1 -1
  84. package/dist/plugins/imports/loader.d.ts.map +1 -1
  85. package/dist/plugins/imports/loader.js +2 -2
  86. package/dist/plugins/imports/loader.js.map +1 -1
  87. package/dist/plugins/imports/types.d.ts +1 -1
  88. package/dist/plugins/imports/types.d.ts.map +1 -1
  89. package/dist/plugins/metadata/types.d.ts +1 -1
  90. package/dist/plugins/metadata/types.js +1 -1
  91. package/dist/plugins/plugins.test-utils.d.ts +15 -0
  92. package/dist/plugins/plugins.test-utils.d.ts.map +1 -1
  93. package/dist/plugins/plugins.test-utils.js +24 -0
  94. package/dist/plugins/plugins.test-utils.js.map +1 -1
  95. package/dist/plugins/spec/config-spec.d.ts +1 -0
  96. package/dist/plugins/spec/config-spec.d.ts.map +1 -1
  97. package/dist/plugins/spec/config-spec.js +1 -0
  98. package/dist/plugins/spec/config-spec.js.map +1 -1
  99. package/dist/plugins/store/store.d.ts +6 -1
  100. package/dist/plugins/store/store.d.ts.map +1 -1
  101. package/dist/plugins/store/store.js +9 -1
  102. package/dist/plugins/store/store.js.map +1 -1
  103. package/dist/references/definition-ref-registry.d.ts +105 -0
  104. package/dist/references/definition-ref-registry.d.ts.map +1 -0
  105. package/dist/references/definition-ref-registry.js +40 -0
  106. package/dist/references/definition-ref-registry.js.map +1 -0
  107. package/dist/references/deserialize-schema.d.ts +4 -6
  108. package/dist/references/deserialize-schema.d.ts.map +1 -1
  109. package/dist/references/deserialize-schema.js +4 -5
  110. package/dist/references/deserialize-schema.js.map +1 -1
  111. package/dist/references/expression-types.d.ts +46 -14
  112. package/dist/references/expression-types.d.ts.map +1 -1
  113. package/dist/references/expression-types.js +17 -0
  114. package/dist/references/expression-types.js.map +1 -1
  115. package/dist/references/extend-parser-context-with-refs.d.ts +32 -2
  116. package/dist/references/extend-parser-context-with-refs.d.ts.map +1 -1
  117. package/dist/references/extend-parser-context-with-refs.js +123 -163
  118. package/dist/references/extend-parser-context-with-refs.js.map +1 -1
  119. package/dist/references/extract-definition-refs.d.ts +9 -8
  120. package/dist/references/extract-definition-refs.d.ts.map +1 -1
  121. package/dist/references/extract-definition-refs.js +110 -26
  122. package/dist/references/extract-definition-refs.js.map +1 -1
  123. package/dist/references/fix-ref-deletions.d.ts +6 -6
  124. package/dist/references/fix-ref-deletions.d.ts.map +1 -1
  125. package/dist/references/fix-ref-deletions.js +2 -2
  126. package/dist/references/fix-ref-deletions.js.map +1 -1
  127. package/dist/references/index.d.ts +3 -0
  128. package/dist/references/index.d.ts.map +1 -1
  129. package/dist/references/index.js +3 -0
  130. package/dist/references/index.js.map +1 -1
  131. package/dist/references/parse-schema-with-references.d.ts +8 -6
  132. package/dist/references/parse-schema-with-references.d.ts.map +1 -1
  133. package/dist/references/parse-schema-with-references.js +10 -12
  134. package/dist/references/parse-schema-with-references.js.map +1 -1
  135. package/dist/references/ref-schema-visitor.d.ts +33 -0
  136. package/dist/references/ref-schema-visitor.d.ts.map +1 -0
  137. package/dist/references/ref-schema-visitor.js +61 -0
  138. package/dist/references/ref-schema-visitor.js.map +1 -0
  139. package/dist/references/resolve-slots.d.ts +1 -1
  140. package/dist/references/resolve-slots.d.ts.map +1 -1
  141. package/dist/references/serialize-schema.d.ts +9 -2
  142. package/dist/references/serialize-schema.d.ts.map +1 -1
  143. package/dist/references/serialize-schema.js +20 -4
  144. package/dist/references/serialize-schema.js.map +1 -1
  145. package/dist/schema/apps/web/admin/admin.d.ts +22 -37
  146. package/dist/schema/apps/web/admin/admin.d.ts.map +1 -1
  147. package/dist/schema/apps/web/admin/sections/crud-actions/admin-crud-action.d.ts +6 -15
  148. package/dist/schema/apps/web/admin/sections/crud-actions/admin-crud-action.d.ts.map +1 -1
  149. package/dist/schema/apps/web/admin/sections/crud-actions/admin-crud-action.js +3 -8
  150. package/dist/schema/apps/web/admin/sections/crud-actions/admin-crud-action.js.map +1 -1
  151. package/dist/schema/apps/web/admin/sections/crud-columns/admin-crud-column.d.ts +6 -15
  152. package/dist/schema/apps/web/admin/sections/crud-columns/admin-crud-column.d.ts.map +1 -1
  153. package/dist/schema/apps/web/admin/sections/crud-columns/admin-crud-column.js +3 -8
  154. package/dist/schema/apps/web/admin/sections/crud-columns/admin-crud-column.js.map +1 -1
  155. package/dist/schema/apps/web/admin/sections/crud-form/admin-crud-input.d.ts +9 -15
  156. package/dist/schema/apps/web/admin/sections/crud-form/admin-crud-input.d.ts.map +1 -1
  157. package/dist/schema/apps/web/admin/sections/crud-form/admin-crud-input.js +3 -8
  158. package/dist/schema/apps/web/admin/sections/crud-form/admin-crud-input.js.map +1 -1
  159. package/dist/schema/apps/web/admin/sections/crud.d.ts +6 -6
  160. package/dist/schema/apps/web/web-app.d.ts +32 -47
  161. package/dist/schema/apps/web/web-app.d.ts.map +1 -1
  162. package/dist/schema/creator/definition-default-registry.d.ts +22 -0
  163. package/dist/schema/creator/definition-default-registry.d.ts.map +1 -0
  164. package/dist/schema/creator/definition-default-registry.js +18 -0
  165. package/dist/schema/creator/definition-default-registry.js.map +1 -0
  166. package/dist/schema/creator/definition-fix-registry.d.ts +45 -0
  167. package/dist/schema/creator/definition-fix-registry.d.ts.map +1 -0
  168. package/dist/schema/creator/definition-fix-registry.js +41 -0
  169. package/dist/schema/creator/definition-fix-registry.js.map +1 -0
  170. package/dist/schema/creator/definition-issue-checker-spec.d.ts +37 -0
  171. package/dist/schema/creator/definition-issue-checker-spec.d.ts.map +1 -0
  172. package/dist/schema/creator/definition-issue-checker-spec.js +28 -0
  173. package/dist/schema/creator/definition-issue-checker-spec.js.map +1 -0
  174. package/dist/schema/creator/definition-issue-checkers.d.ts +16 -0
  175. package/dist/schema/creator/definition-issue-checkers.d.ts.map +1 -0
  176. package/dist/schema/creator/definition-issue-checkers.js +35 -0
  177. package/dist/schema/creator/definition-issue-checkers.js.map +1 -0
  178. package/dist/schema/creator/definition-issue-registry.d.ts +54 -0
  179. package/dist/schema/creator/definition-issue-registry.d.ts.map +1 -0
  180. package/dist/schema/creator/definition-issue-registry.js +47 -0
  181. package/dist/schema/creator/definition-issue-registry.js.map +1 -0
  182. package/dist/schema/creator/definition-issue-types.d.ts +53 -0
  183. package/dist/schema/creator/definition-issue-types.d.ts.map +1 -0
  184. package/dist/schema/creator/definition-issue-types.js +2 -0
  185. package/dist/schema/creator/definition-issue-types.js.map +1 -0
  186. package/dist/schema/creator/extend-parser-context-with-defaults.d.ts +20 -4
  187. package/dist/schema/creator/extend-parser-context-with-defaults.d.ts.map +1 -1
  188. package/dist/schema/creator/extend-parser-context-with-defaults.js +24 -42
  189. package/dist/schema/creator/extend-parser-context-with-defaults.js.map +1 -1
  190. package/dist/schema/creator/index.d.ts +6 -0
  191. package/dist/schema/creator/index.d.ts.map +1 -1
  192. package/dist/schema/creator/index.js +5 -0
  193. package/dist/schema/creator/index.js.map +1 -1
  194. package/dist/schema/creator/schema-creator.d.ts.map +1 -1
  195. package/dist/schema/creator/schema-creator.js +18 -4
  196. package/dist/schema/creator/schema-creator.js.map +1 -1
  197. package/dist/schema/creator/types.d.ts +3 -30
  198. package/dist/schema/creator/types.d.ts.map +1 -1
  199. package/dist/schema/models/authorizer/authorizer-expression-acorn-parser.d.ts.map +1 -1
  200. package/dist/schema/models/authorizer/authorizer-expression-acorn-parser.js +116 -25
  201. package/dist/schema/models/authorizer/authorizer-expression-acorn-parser.js.map +1 -1
  202. package/dist/schema/models/authorizer/authorizer-expression-ast.d.ts +82 -1
  203. package/dist/schema/models/authorizer/authorizer-expression-ast.d.ts.map +1 -1
  204. package/dist/schema/models/authorizer/authorizer-expression-ast.js.map +1 -1
  205. package/dist/schema/models/authorizer/authorizer-expression-parser.d.ts +8 -9
  206. package/dist/schema/models/authorizer/authorizer-expression-parser.d.ts.map +1 -1
  207. package/dist/schema/models/authorizer/authorizer-expression-parser.js +28 -35
  208. package/dist/schema/models/authorizer/authorizer-expression-parser.js.map +1 -1
  209. package/dist/schema/models/authorizer/authorizer-expression-validator.d.ts +42 -4
  210. package/dist/schema/models/authorizer/authorizer-expression-validator.d.ts.map +1 -1
  211. package/dist/schema/models/authorizer/authorizer-expression-validator.js +119 -18
  212. package/dist/schema/models/authorizer/authorizer-expression-validator.js.map +1 -1
  213. package/dist/schema/models/graphql.d.ts +42 -111
  214. package/dist/schema/models/graphql.d.ts.map +1 -1
  215. package/dist/schema/models/graphql.js +59 -19
  216. package/dist/schema/models/graphql.js.map +1 -1
  217. package/dist/schema/models/models.d.ts +1134 -343
  218. package/dist/schema/models/models.d.ts.map +1 -1
  219. package/dist/schema/models/models.js +258 -86
  220. package/dist/schema/models/models.js.map +1 -1
  221. package/dist/schema/plugins/definition.d.ts +2 -30
  222. package/dist/schema/plugins/definition.d.ts.map +1 -1
  223. package/dist/schema/plugins/definition.js +26 -15
  224. package/dist/schema/plugins/definition.js.map +1 -1
  225. package/dist/schema/project-definition.d.ts +532 -186
  226. package/dist/schema/project-definition.d.ts.map +1 -1
  227. package/dist/schema/project-definition.js +15 -3
  228. package/dist/schema/project-definition.js.map +1 -1
  229. package/dist/schema/settings/general.d.ts +1 -1
  230. package/dist/schema/settings/general.d.ts.map +1 -1
  231. package/dist/schema/settings/general.js +4 -1
  232. package/dist/schema/settings/general.js.map +1 -1
  233. package/dist/schema/settings/settings.d.ts +3 -3
  234. package/dist/schema/settings/theme.d.ts +3 -3
  235. package/dist/testing/definition-helpers.test-helper.d.ts +12 -0
  236. package/dist/testing/definition-helpers.test-helper.d.ts.map +1 -0
  237. package/dist/testing/definition-helpers.test-helper.js +77 -0
  238. package/dist/testing/definition-helpers.test-helper.js.map +1 -0
  239. package/dist/testing/expression-stub-parser.test-helper.d.ts +59 -0
  240. package/dist/testing/expression-stub-parser.test-helper.d.ts.map +1 -0
  241. package/dist/testing/expression-stub-parser.test-helper.js +79 -0
  242. package/dist/testing/expression-stub-parser.test-helper.js.map +1 -0
  243. package/dist/testing/expression-warning-parser.test-helper.d.ts +39 -0
  244. package/dist/testing/expression-warning-parser.test-helper.d.ts.map +1 -0
  245. package/dist/testing/expression-warning-parser.test-helper.js +62 -0
  246. package/dist/testing/expression-warning-parser.test-helper.js.map +1 -0
  247. package/dist/testing/index.d.ts +5 -0
  248. package/dist/testing/index.d.ts.map +1 -0
  249. package/dist/testing/index.js +5 -0
  250. package/dist/testing/index.js.map +1 -0
  251. package/dist/testing/parser-context.test-helper.d.ts +8 -0
  252. package/dist/testing/parser-context.test-helper.d.ts.map +1 -0
  253. package/dist/testing/parser-context.test-helper.js +16 -0
  254. package/dist/testing/parser-context.test-helper.js.map +1 -0
  255. package/dist/{definition/project-definition-container.test-utils.d.ts → testing/project-definition-container.test-helper.d.ts} +4 -2
  256. package/dist/testing/project-definition-container.test-helper.d.ts.map +1 -0
  257. package/dist/{definition/project-definition-container.test-utils.js → testing/project-definition-container.test-helper.js} +11 -5
  258. package/dist/testing/project-definition-container.test-helper.js.map +1 -0
  259. package/dist/tools/assign-entity-ids.d.ts +17 -0
  260. package/dist/tools/assign-entity-ids.d.ts.map +1 -0
  261. package/dist/tools/assign-entity-ids.js +34 -0
  262. package/dist/tools/assign-entity-ids.js.map +1 -0
  263. package/dist/tools/entity-service/entity-navigation.d.ts +13 -0
  264. package/dist/tools/entity-service/entity-navigation.d.ts.map +1 -0
  265. package/dist/tools/entity-service/entity-navigation.js +84 -0
  266. package/dist/tools/entity-service/entity-navigation.js.map +1 -0
  267. package/dist/tools/entity-service/entity-read.d.ts +38 -0
  268. package/dist/tools/entity-service/entity-read.d.ts.map +1 -0
  269. package/dist/tools/entity-service/entity-read.js +56 -0
  270. package/dist/tools/entity-service/entity-read.js.map +1 -0
  271. package/dist/tools/entity-service/entity-type-map.d.ts +18 -0
  272. package/dist/tools/entity-service/entity-type-map.d.ts.map +1 -0
  273. package/dist/tools/entity-service/entity-type-map.js +75 -0
  274. package/dist/tools/entity-service/entity-type-map.js.map +1 -0
  275. package/dist/tools/entity-service/entity-write.d.ts +39 -0
  276. package/dist/tools/entity-service/entity-write.d.ts.map +1 -0
  277. package/dist/tools/entity-service/entity-write.js +99 -0
  278. package/dist/tools/entity-service/entity-write.js.map +1 -0
  279. package/dist/tools/entity-service/index.d.ts +5 -0
  280. package/dist/tools/entity-service/index.d.ts.map +1 -0
  281. package/dist/tools/entity-service/index.js +4 -0
  282. package/dist/tools/entity-service/index.js.map +1 -0
  283. package/dist/tools/entity-service/types.d.ts +41 -0
  284. package/dist/tools/entity-service/types.d.ts.map +1 -0
  285. package/dist/tools/entity-service/types.js +2 -0
  286. package/dist/tools/entity-service/types.js.map +1 -0
  287. package/dist/tools/index.d.ts +2 -1
  288. package/dist/tools/index.d.ts.map +1 -1
  289. package/dist/tools/index.js +2 -1
  290. package/dist/tools/index.js.map +1 -1
  291. package/dist/tools/merge-schema/diff-definition.d.ts +74 -0
  292. package/dist/tools/merge-schema/diff-definition.d.ts.map +1 -0
  293. package/dist/tools/merge-schema/diff-definition.js +163 -0
  294. package/dist/tools/merge-schema/diff-definition.js.map +1 -0
  295. package/dist/tools/merge-schema/entity-utils.d.ts +18 -0
  296. package/dist/tools/merge-schema/entity-utils.d.ts.map +1 -0
  297. package/dist/tools/merge-schema/entity-utils.js +42 -0
  298. package/dist/tools/merge-schema/entity-utils.js.map +1 -0
  299. package/dist/tools/merge-schema/index.d.ts +10 -0
  300. package/dist/tools/merge-schema/index.d.ts.map +1 -0
  301. package/dist/tools/merge-schema/index.js +7 -0
  302. package/dist/tools/merge-schema/index.js.map +1 -0
  303. package/dist/tools/merge-schema/merge-data-with-schema.d.ts +21 -0
  304. package/dist/tools/merge-schema/merge-data-with-schema.d.ts.map +1 -0
  305. package/dist/tools/merge-schema/merge-data-with-schema.js +168 -0
  306. package/dist/tools/merge-schema/merge-data-with-schema.js.map +1 -0
  307. package/dist/tools/merge-schema/merge-definition.d.ts +42 -0
  308. package/dist/tools/merge-schema/merge-definition.d.ts.map +1 -0
  309. package/dist/tools/merge-schema/merge-definition.js +53 -0
  310. package/dist/tools/merge-schema/merge-definition.js.map +1 -0
  311. package/dist/tools/merge-schema/merge-rule-registry.d.ts +47 -0
  312. package/dist/tools/merge-schema/merge-rule-registry.d.ts.map +1 -0
  313. package/dist/tools/merge-schema/merge-rule-registry.js +53 -0
  314. package/dist/tools/merge-schema/merge-rule-registry.js.map +1 -0
  315. package/dist/tools/merge-schema/walk-schema.d.ts +26 -0
  316. package/dist/tools/merge-schema/walk-schema.d.ts.map +1 -0
  317. package/dist/tools/merge-schema/walk-schema.js +94 -0
  318. package/dist/tools/merge-schema/walk-schema.js.map +1 -0
  319. package/dist/utils/definition-diff/definition-diff.js.map +1 -1
  320. package/dist/web/components/definition-diff-alert.d.ts +9 -0
  321. package/dist/web/components/definition-diff-alert.d.ts.map +1 -0
  322. package/dist/web/components/definition-diff-alert.js +17 -0
  323. package/dist/web/components/definition-diff-alert.js.map +1 -0
  324. package/dist/web/components/index.d.ts +1 -1
  325. package/dist/web/components/index.d.ts.map +1 -1
  326. package/dist/web/components/index.js +1 -1
  327. package/dist/web/components/index.js.map +1 -1
  328. package/dist/web/hooks/use-project-definition.d.ts +10 -2
  329. package/dist/web/hooks/use-project-definition.d.ts.map +1 -1
  330. package/dist/web/hooks/use-project-definition.js.map +1 -1
  331. package/dist/web/specs/entity-type-url-web-spec.d.ts +68 -0
  332. package/dist/web/specs/entity-type-url-web-spec.d.ts.map +1 -0
  333. package/dist/web/specs/entity-type-url-web-spec.js +27 -0
  334. package/dist/web/specs/entity-type-url-web-spec.js.map +1 -0
  335. package/dist/web/specs/index.d.ts +1 -0
  336. package/dist/web/specs/index.d.ts.map +1 -1
  337. package/dist/web/specs/index.js +1 -0
  338. package/dist/web/specs/index.js.map +1 -1
  339. package/package.json +12 -11
  340. package/dist/definition/project-definition-container.test-utils.d.ts.map +0 -1
  341. package/dist/definition/project-definition-container.test-utils.js.map +0 -1
  342. package/dist/references/collect-refs.d.ts +0 -24
  343. package/dist/references/collect-refs.d.ts.map +0 -1
  344. package/dist/references/collect-refs.js +0 -86
  345. package/dist/references/collect-refs.js.map +0 -1
  346. package/dist/references/markers.d.ts +0 -59
  347. package/dist/references/markers.d.ts.map +0 -1
  348. package/dist/references/markers.js +0 -29
  349. package/dist/references/markers.js.map +0 -1
  350. package/dist/references/strip-ref-markers.d.ts +0 -7
  351. package/dist/references/strip-ref-markers.d.ts.map +0 -1
  352. package/dist/references/strip-ref-markers.js +0 -25
  353. package/dist/references/strip-ref-markers.js.map +0 -1
  354. package/dist/schema/models/mocks.d.ts +0 -6
  355. package/dist/schema/models/mocks.d.ts.map +0 -1
  356. package/dist/schema/models/mocks.js +0 -55
  357. package/dist/schema/models/mocks.js.map +0 -1
  358. package/dist/tools/model-merger/index.d.ts +0 -2
  359. package/dist/tools/model-merger/index.d.ts.map +0 -1
  360. package/dist/tools/model-merger/index.js +0 -2
  361. package/dist/tools/model-merger/index.js.map +0 -1
  362. package/dist/tools/model-merger/model-merger.d.ts +0 -569
  363. package/dist/tools/model-merger/model-merger.d.ts.map +0 -1
  364. package/dist/tools/model-merger/model-merger.js +0 -319
  365. package/dist/tools/model-merger/model-merger.js.map +0 -1
  366. package/dist/web/components/model-merger-result-alert.d.ts +0 -8
  367. package/dist/web/components/model-merger-result-alert.d.ts.map +0 -1
  368. package/dist/web/components/model-merger-result-alert.js +0 -20
  369. package/dist/web/components/model-merger-result-alert.js.map +0 -1
@@ -0,0 +1,41 @@
1
+ import type { z } from 'zod';
2
+ import type { SchemaPathElement } from '#src/parser/walk-schema-structure.js';
3
+ import type { EntitySchemaMeta } from '#src/references/definition-ref-registry.js';
4
+ import type { DefinitionEntity, DefinitionEntityType } from '#src/references/types.js';
5
+ /**
6
+ * Metadata about an entity type's location in the definition schema.
7
+ */
8
+ export interface EntityTypeMetadata {
9
+ /** Entity type name (e.g., "model", "model-scalar-field") */
10
+ name: string;
11
+ /** The DefinitionEntityType instance */
12
+ entityType: DefinitionEntityType;
13
+ /** Entity metadata from schema annotations */
14
+ entityMeta: EntitySchemaMeta;
15
+ /** Element schema for the entity array */
16
+ elementSchema: z.ZodType;
17
+ /** Path from parent entity (or root) to this entity's array */
18
+ relativePath: SchemaPathElement[];
19
+ /** Parent entity type name, if this is a nested entity */
20
+ parentEntityTypeName?: string;
21
+ }
22
+ /**
23
+ * Map from entity type name to its metadata.
24
+ * Built once from the schema and reused for all operations.
25
+ */
26
+ export type EntityTypeMap = Map<string, EntityTypeMetadata>;
27
+ export interface EntityServiceContext {
28
+ /**
29
+ * The serialized definition but with defaults provided.
30
+ */
31
+ serializedDefinition: Record<string, unknown>;
32
+ /**
33
+ * The entity type map built from the schema.
34
+ */
35
+ entityTypeMap: EntityTypeMap;
36
+ /**
37
+ * Looks up an entity by its ID.
38
+ */
39
+ lookupEntity: (entityId: string) => DefinitionEntity | undefined;
40
+ }
41
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/entity-service/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,UAAU,EAAE,oBAAoB,CAAC;IACjC,8CAA8C;IAC9C,UAAU,EAAE,gBAAgB,CAAC;IAC7B,0CAA0C;IAC1C,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC;IACzB,+DAA+D;IAC/D,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,0DAA0D;IAC1D,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C;;OAEG;IACH,aAAa,EAAE,aAAa,CAAC;IAC7B;;OAEG;IACH,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,gBAAgB,GAAG,SAAS,CAAC;CAClE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tools/entity-service/types.ts"],"names":[],"mappings":""}
@@ -1,2 +1,3 @@
1
- export * from './model-merger/index.js';
1
+ export * from './entity-service/index.js';
2
+ export * from './merge-schema/index.js';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC"}
@@ -1,2 +1,3 @@
1
- export * from './model-merger/index.js';
1
+ export * from './entity-service/index.js';
2
+ export * from './merge-schema/index.js';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,74 @@
1
+ import type { z } from 'zod';
2
+ import type { PartialProjectDefinitionInput, ProjectDefinition } from '#src/schema/index.js';
3
+ type PlainObject = Record<string, unknown>;
4
+ /**
5
+ * A single diff entry representing a changed entity or section.
6
+ */
7
+ export interface DefinitionDiffEntry {
8
+ /** Top-level key in the definition (e.g., "models", "settings") */
9
+ path: string;
10
+ /**
11
+ * Human-readable label for this entry.
12
+ *
13
+ * Entity arrays: `"Model: User"`, `"App: backend"`
14
+ * Other fields: `"Settings"`, `"Features"`
15
+ */
16
+ label: string;
17
+ /** Type of change */
18
+ type: 'added' | 'updated' | 'removed';
19
+ /** The current serialized value (undefined for additions) */
20
+ current: unknown;
21
+ /** The merged serialized value (undefined for removals) */
22
+ merged: unknown;
23
+ }
24
+ /**
25
+ * Result of diffing a project definition against a partial merge.
26
+ */
27
+ export interface DefinitionDiff {
28
+ /** Whether there are any changes */
29
+ hasChanges: boolean;
30
+ /** Individual diff entries grouped by entity/section */
31
+ entries: DefinitionDiffEntry[];
32
+ }
33
+ export interface DiffSerializedDefinitionsOptions {
34
+ /**
35
+ * When provided, only these top-level keys are compared.
36
+ * When omitted, all keys from both definitions are compared.
37
+ */
38
+ scopeToKeys?: Set<string>;
39
+ /**
40
+ * When provided, entity array diffs are scoped to only these entity names
41
+ * per top-level key. When omitted, all entities in both arrays are compared.
42
+ */
43
+ entityNamesByKey?: Map<string, Set<string>>;
44
+ }
45
+ /**
46
+ * Compares two serialized project definitions at the entity level, producing
47
+ * diff entries for added, updated, and removed entities/fields.
48
+ *
49
+ * Both definitions should be in serialized form (with entity names, not IDs).
50
+ *
51
+ * @param schema - The project definition Zod schema
52
+ * @param currentDef - The current serialized definition
53
+ * @param otherDef - The other serialized definition to compare against
54
+ * @param options - Optional scoping options
55
+ * @returns Entity-level diff entries
56
+ */
57
+ export declare function diffSerializedDefinitions(schema: z.ZodType, currentDef: PlainObject, otherDef: PlainObject, options?: DiffSerializedDefinitionsOptions): DefinitionDiff;
58
+ /**
59
+ * Computes a structured, entity-grouped diff between the current project definition
60
+ * and the result of merging a partial definition into it.
61
+ *
62
+ * For top-level entity arrays (models, apps, enums, libraries, features), produces
63
+ * one entry per entity that was added, updated, or removed — detected via schema
64
+ * entity metadata (`withEnt` annotations) using `collectEntityArrays`. For other
65
+ * top-level fields (settings, plugins, etc.), produces one entry per changed field.
66
+ *
67
+ * @param schema - The project definition Zod schema
68
+ * @param definition - The current parsed project definition (with IDs)
69
+ * @param partialDef - A partial serialized definition to merge in
70
+ * @returns A structured diff with entity-level entries
71
+ */
72
+ export declare function diffDefinition(schema: z.ZodType, definition: ProjectDefinition, partialDef: PartialProjectDefinitionInput): DefinitionDiff;
73
+ export {};
74
+ //# sourceMappingURL=diff-definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-definition.d.ts","sourceRoot":"","sources":["../../../src/tools/merge-schema/diff-definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAM7B,OAAO,KAAK,EACV,6BAA6B,EAC7B,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAQ9B,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IACtC,6DAA6D;IAC7D,OAAO,EAAE,OAAO,CAAC;IACjB,2DAA2D;IAC3D,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,wDAAwD;IACxD,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAuED,MAAM,WAAW,gCAAgC;IAC/C;;;OAGG;IACH,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CAC7C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,CAAC,CAAC,OAAO,EACjB,UAAU,EAAE,WAAW,EACvB,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,gCAAgC,GACzC,cAAc,CA2EhB;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,CAAC,CAAC,OAAO,EACjB,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,6BAA6B,GACxC,cAAc,CAwChB"}
@@ -0,0 +1,163 @@
1
+ import { isEqual } from 'es-toolkit';
2
+ import { capitalize } from 'es-toolkit/compat';
3
+ import { serializeSchema } from '#src/references/serialize-schema.js';
4
+ import { getEntityName } from './entity-utils.js';
5
+ import { mergeDefinition } from './merge-definition.js';
6
+ import { collectEntityArrays } from './walk-schema.js';
7
+ // ---------------------------------------------------------------------------
8
+ // Entity array diffing
9
+ // ---------------------------------------------------------------------------
10
+ /**
11
+ * Diffs an entity array by the `name` field.
12
+ *
13
+ * When `scopeToNames` is provided, only those entities are compared — this prevents
14
+ * showing "removed" entries for entities that the partial doesn't care about.
15
+ * When omitted, all entities in both arrays are compared.
16
+ */
17
+ function diffEntityArray(path, entityMeta, currentArray, otherArray, scopeToNames) {
18
+ const entries = [];
19
+ const label = capitalize(entityMeta.type.name);
20
+ const currentByName = new Map(currentArray.map((item) => [getEntityName(entityMeta, item), item]));
21
+ const otherByName = new Map(otherArray.map((item) => [getEntityName(entityMeta, item), item]));
22
+ const namesToDiff = scopeToNames ?? new Set([...currentByName.keys(), ...otherByName.keys()]);
23
+ for (const name of namesToDiff) {
24
+ const currentItem = currentByName.get(name);
25
+ const otherItem = otherByName.get(name);
26
+ if (!currentItem && otherItem) {
27
+ entries.push({
28
+ path,
29
+ label: `${label}: ${name}`,
30
+ type: 'added',
31
+ current: undefined,
32
+ merged: otherItem,
33
+ });
34
+ }
35
+ else if (currentItem && !otherItem) {
36
+ entries.push({
37
+ path,
38
+ label: `${label}: ${name}`,
39
+ type: 'removed',
40
+ current: currentItem,
41
+ merged: undefined,
42
+ });
43
+ }
44
+ else if (currentItem && otherItem && !isEqual(currentItem, otherItem)) {
45
+ entries.push({
46
+ path,
47
+ label: `${label}: ${name}`,
48
+ type: 'updated',
49
+ current: currentItem,
50
+ merged: otherItem,
51
+ });
52
+ }
53
+ }
54
+ return entries;
55
+ }
56
+ /**
57
+ * Compares two serialized project definitions at the entity level, producing
58
+ * diff entries for added, updated, and removed entities/fields.
59
+ *
60
+ * Both definitions should be in serialized form (with entity names, not IDs).
61
+ *
62
+ * @param schema - The project definition Zod schema
63
+ * @param currentDef - The current serialized definition
64
+ * @param otherDef - The other serialized definition to compare against
65
+ * @param options - Optional scoping options
66
+ * @returns Entity-level diff entries
67
+ */
68
+ export function diffSerializedDefinitions(schema, currentDef, otherDef, options) {
69
+ const entityArrayInfoByKey = new Map(collectEntityArrays(schema)
70
+ .filter((info) => !info.path.includes('.'))
71
+ .map((info) => [info.path, info]));
72
+ const entries = [];
73
+ const keysToCompare = options?.scopeToKeys ??
74
+ new Set([...Object.keys(currentDef), ...Object.keys(otherDef)]);
75
+ for (const key of keysToCompare) {
76
+ const currentValue = currentDef[key];
77
+ const otherValue = otherDef[key];
78
+ if (isEqual(currentValue, otherValue)) {
79
+ continue;
80
+ }
81
+ const entityInfo = entityArrayInfoByKey.get(key);
82
+ if (entityInfo) {
83
+ const currentArray = (Array.isArray(currentValue) ? currentValue : []);
84
+ const otherArray = (Array.isArray(otherValue) ? otherValue : []);
85
+ const scopeToNames = options?.entityNamesByKey?.get(key);
86
+ entries.push(...diffEntityArray(key, entityInfo.entityMeta, currentArray, otherArray, scopeToNames));
87
+ }
88
+ else {
89
+ const label = capitalize(key);
90
+ if (currentValue === undefined) {
91
+ entries.push({
92
+ path: key,
93
+ label,
94
+ type: 'added',
95
+ current: undefined,
96
+ merged: otherValue,
97
+ });
98
+ }
99
+ else if (otherValue === undefined) {
100
+ entries.push({
101
+ path: key,
102
+ label,
103
+ type: 'removed',
104
+ current: currentValue,
105
+ merged: undefined,
106
+ });
107
+ }
108
+ else {
109
+ entries.push({
110
+ path: key,
111
+ label,
112
+ type: 'updated',
113
+ current: currentValue,
114
+ merged: otherValue,
115
+ });
116
+ }
117
+ }
118
+ }
119
+ return {
120
+ hasChanges: entries.length > 0,
121
+ entries,
122
+ };
123
+ }
124
+ // ---------------------------------------------------------------------------
125
+ // High-level diff with merge
126
+ // ---------------------------------------------------------------------------
127
+ /**
128
+ * Computes a structured, entity-grouped diff between the current project definition
129
+ * and the result of merging a partial definition into it.
130
+ *
131
+ * For top-level entity arrays (models, apps, enums, libraries, features), produces
132
+ * one entry per entity that was added, updated, or removed — detected via schema
133
+ * entity metadata (`withEnt` annotations) using `collectEntityArrays`. For other
134
+ * top-level fields (settings, plugins, etc.), produces one entry per changed field.
135
+ *
136
+ * @param schema - The project definition Zod schema
137
+ * @param definition - The current parsed project definition (with IDs)
138
+ * @param partialDef - A partial serialized definition to merge in
139
+ * @returns A structured diff with entity-level entries
140
+ */
141
+ export function diffDefinition(schema, definition, partialDef) {
142
+ const serializedDef = serializeSchema(schema, definition);
143
+ const mergedDef = mergeDefinition(schema, definition, partialDef);
144
+ const partialObj = partialDef;
145
+ const scopeToKeys = new Set(Object.keys(partialObj));
146
+ // Build entity name scopes from the partial definition
147
+ const entityArrayInfoByKey = new Map(collectEntityArrays(schema)
148
+ .filter((info) => !info.path.includes('.'))
149
+ .map((info) => [info.path, info]));
150
+ const entityNamesByKey = new Map();
151
+ for (const key of scopeToKeys) {
152
+ const entityInfo = entityArrayInfoByKey.get(key);
153
+ if (entityInfo) {
154
+ const partialArray = (Array.isArray(partialObj[key]) ? partialObj[key] : []);
155
+ entityNamesByKey.set(key, new Set(partialArray.map((item) => getEntityName(entityInfo.entityMeta, item))));
156
+ }
157
+ }
158
+ return diffSerializedDefinitions(schema, serializedDef, mergedDef, {
159
+ scopeToKeys,
160
+ entityNamesByKey,
161
+ });
162
+ }
163
+ //# sourceMappingURL=diff-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-definition.js","sourceRoot":"","sources":["../../../src/tools/merge-schema/diff-definition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { z } from 'zod';
2
+ import type { EntitySchemaMeta } from '#src/references/definition-ref-registry.js';
3
+ type PlainObject = Record<string, unknown>;
4
+ /**
5
+ * Returns the first EntitySchemaMeta found on the given schema or any inner
6
+ * schema reachable through wrappers (optional/nullable/default).
7
+ */
8
+ export declare function getEntityMeta(schema: z.ZodType): EntitySchemaMeta | undefined;
9
+ /**
10
+ * Resolves the name of an entity from its serialized (name-based) data using
11
+ * the entity schema's name resolver.
12
+ *
13
+ * Since the data is already serialized, reference IDs are already names —
14
+ * no cross-entity resolution or toposort is needed.
15
+ */
16
+ export declare function getEntityName(entityMeta: EntitySchemaMeta, item: PlainObject): string;
17
+ export {};
18
+ //# sourceMappingURL=entity-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-utils.d.ts","sourceRoot":"","sources":["../../../src/tools/merge-schema/entity-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAKnF,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,GAAG,gBAAgB,GAAG,SAAS,CAY7E;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,WAAW,GAChB,MAAM,CAgBR"}
@@ -0,0 +1,42 @@
1
+ import { getSchemaChildren } from '#src/parser/schema-structure.js';
2
+ import { definitionRefRegistry } from '#src/references/definition-ref-registry.js';
3
+ /**
4
+ * Returns the first EntitySchemaMeta found on the given schema or any inner
5
+ * schema reachable through wrappers (optional/nullable/default).
6
+ */
7
+ export function getEntityMeta(schema) {
8
+ const meta = definitionRefRegistry
9
+ .getAll(schema)
10
+ .find((m) => m.kind === 'entity');
11
+ if (meta) {
12
+ return meta;
13
+ }
14
+ const children = getSchemaChildren(schema, undefined, []);
15
+ if (children.kind === 'wrapper') {
16
+ return getEntityMeta(children.innerSchema);
17
+ }
18
+ return undefined;
19
+ }
20
+ /**
21
+ * Resolves the name of an entity from its serialized (name-based) data using
22
+ * the entity schema's name resolver.
23
+ *
24
+ * Since the data is already serialized, reference IDs are already names —
25
+ * no cross-entity resolution or toposort is needed.
26
+ */
27
+ export function getEntityName(entityMeta, item) {
28
+ if (!entityMeta.getNameResolver) {
29
+ return item.name;
30
+ }
31
+ const resolver = entityMeta.getNameResolver(item);
32
+ if (typeof resolver === 'string') {
33
+ return resolver;
34
+ }
35
+ // In serialized data, reference IDs are already names — pass them through
36
+ const resolvedIds = Object.fromEntries(Object.entries(resolver.idsToResolve ?? {}).map(([key, idOrIds]) => [
37
+ key,
38
+ idOrIds,
39
+ ]));
40
+ return resolver.resolveName(resolvedIds);
41
+ }
42
+ //# sourceMappingURL=entity-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-utils.js","sourceRoot":"","sources":["../../../src/tools/merge-schema/entity-utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAInF;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,MAAM,IAAI,GAAG,qBAAqB;SAC/B,MAAM,CAAC,MAAM,CAAC;SACd,IAAI,CAAC,CAAC,CAAC,EAAyB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC3D,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC1D,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,UAA4B,EAC5B,IAAiB;IAEjB,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,IAAc,CAAC;IAC7B,CAAC;IACD,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,0EAA0E;IAC1E,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CACpC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;QAClE,GAAG;QACH,OAAO;KACR,CAAC,CACH,CAAC;IACF,OAAO,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { diffDefinition, diffSerializedDefinitions, } from './diff-definition.js';
2
+ export type { DefinitionDiff, DefinitionDiffEntry, DiffSerializedDefinitionsOptions, } from './diff-definition.js';
3
+ export { getEntityName } from './entity-utils.js';
4
+ export { mergeDataWithSchema } from './merge-data-with-schema.js';
5
+ export { applyMergedDefinition, mergeDefinition, mergeDefinitionContainer, } from './merge-definition.js';
6
+ export { getMergeRule, withByKeyMergeRule, withMergeRule, } from './merge-rule-registry.js';
7
+ export type { MergeRule } from './merge-rule-registry.js';
8
+ export { collectEntityArrays } from './walk-schema.js';
9
+ export type { EntityArrayInfo } from './walk-schema.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/merge-schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,gCAAgC,GACjC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { diffDefinition, diffSerializedDefinitions, } from './diff-definition.js';
2
+ export { getEntityName } from './entity-utils.js';
3
+ export { mergeDataWithSchema } from './merge-data-with-schema.js';
4
+ export { applyMergedDefinition, mergeDefinition, mergeDefinitionContainer, } from './merge-definition.js';
5
+ export { getMergeRule, withByKeyMergeRule, withMergeRule, } from './merge-rule-registry.js';
6
+ export { collectEntityArrays } from './walk-schema.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/merge-schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,aAAa,GACd,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { PartialDeep } from 'type-fest';
2
+ import type { z } from 'zod';
3
+ /**
4
+ * Merges two values according to the given Zod schema and any registered merge rules.
5
+ *
6
+ * Default behaviors:
7
+ * - Leaf scalar → desired replaces current
8
+ * - Object → merge fields recursively; `undefined` desired fields keep current value (partial patch)
9
+ * - Array whose element has `withEnt` annotation → merge by entity name (add-only, order-preserving)
10
+ * - Any other array → full replace with desired
11
+ * - Wrapper (optional/nullable/default) → descend to inner schema
12
+ * - Discriminated union → find matching branch by discriminator, merge
13
+ *
14
+ * Explicit rules from `withMergeRule` override the defaults:
15
+ * - `replace` → always return desired value
16
+ * - `by-key` → merge array by a custom key function (add-only)
17
+ */
18
+ export declare function mergeDataWithSchema<T extends z.ZodType>(schema: T, current: z.input<T>, desired: PartialDeep<z.input<T>, {
19
+ recurseIntoArrays: true;
20
+ }>): z.input<T>;
21
+ //# sourceMappingURL=merge-data-with-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-data-with-schema.d.ts","sourceRoot":"","sources":["../../../src/tools/merge-schema/merge-data-with-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAc7B;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EACrD,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EACnB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAAE,iBAAiB,EAAE,IAAI,CAAA;CAAE,CAAC,GAC5D,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAEZ"}
@@ -0,0 +1,168 @@
1
+ import { toMerged } from 'es-toolkit';
2
+ import { getSchemaChildren } from '#src/parser/schema-structure.js';
3
+ import { assignEntityIds } from '../assign-entity-ids.js';
4
+ import { getEntityMeta, getEntityName } from './entity-utils.js';
5
+ import { getMergeRule } from './merge-rule-registry.js';
6
+ /**
7
+ * Merges two values according to the given Zod schema and any registered merge rules.
8
+ *
9
+ * Default behaviors:
10
+ * - Leaf scalar → desired replaces current
11
+ * - Object → merge fields recursively; `undefined` desired fields keep current value (partial patch)
12
+ * - Array whose element has `withEnt` annotation → merge by entity name (add-only, order-preserving)
13
+ * - Any other array → full replace with desired
14
+ * - Wrapper (optional/nullable/default) → descend to inner schema
15
+ * - Discriminated union → find matching branch by discriminator, merge
16
+ *
17
+ * Explicit rules from `withMergeRule` override the defaults:
18
+ * - `replace` → always return desired value
19
+ * - `by-key` → merge array by a custom key function (add-only)
20
+ */
21
+ export function mergeDataWithSchema(schema, current, desired) {
22
+ return mergeDataWithSchemaInternal(schema, current, desired);
23
+ }
24
+ /**
25
+ * Internal untyped implementation of the schema-driven merge walker.
26
+ */
27
+ function mergeDataWithSchemaInternal(schema, current, desired) {
28
+ // If desired is undefined, always keep current (partial patch semantics)
29
+ if (desired === undefined) {
30
+ return current;
31
+ }
32
+ // Check for explicit merge rule registered via withMergeRule
33
+ const rule = getMergeRule(schema);
34
+ if (rule) {
35
+ switch (rule.kind) {
36
+ case 'replace': {
37
+ return desired;
38
+ }
39
+ case 'by-key': {
40
+ return mergeByKey(current, desired, rule.getKey);
41
+ }
42
+ }
43
+ }
44
+ const children = getSchemaChildren(schema, desired, []);
45
+ switch (children.kind) {
46
+ case 'leaf':
47
+ case 'leaf-union': {
48
+ return desired;
49
+ }
50
+ case 'wrapper': {
51
+ return mergeDataWithSchemaInternal(children.innerSchema, current, desired);
52
+ }
53
+ case 'object': {
54
+ const currentObj = (current ?? {});
55
+ const desiredObj = desired;
56
+ const merged = { ...currentObj };
57
+ for (const [key, fieldSchema] of children.entries) {
58
+ const desiredValue = desiredObj[key];
59
+ if (desiredValue === undefined) {
60
+ // Keep current value — partial patch semantics
61
+ continue;
62
+ }
63
+ merged[key] = mergeDataWithSchemaInternal(fieldSchema, currentObj[key], desiredValue);
64
+ }
65
+ return merged;
66
+ }
67
+ case 'array': {
68
+ const { elementSchema } = children;
69
+ const entityMeta = getEntityMeta(elementSchema);
70
+ // Auto-detect entity arrays: merge by `name` field
71
+ if (entityMeta) {
72
+ return mergeEntityArray(current, desired, elementSchema, entityMeta);
73
+ }
74
+ // Default: full replace
75
+ return desired;
76
+ }
77
+ case 'discriminated-union': {
78
+ if (!children.match) {
79
+ // No matching branch found for desired — replace
80
+ return desired;
81
+ }
82
+ // If current matches a different branch, replace to avoid leaking stale fields
83
+ const currentChildren = getSchemaChildren(schema, current, []);
84
+ if (currentChildren.kind !== 'discriminated-union' ||
85
+ currentChildren.match !== children.match) {
86
+ return desired;
87
+ }
88
+ return mergeDataWithSchemaInternal(children.match, current, desired);
89
+ }
90
+ case 'tuple':
91
+ case 'record':
92
+ case 'intersection': {
93
+ // For these structural types, default to full replace
94
+ return desired;
95
+ }
96
+ }
97
+ }
98
+ /**
99
+ * Merges an array of entity objects by name (add-only, order-preserving).
100
+ *
101
+ * - Current items are kept in their original order
102
+ * - Matched items (by name) are merged recursively via schema
103
+ * - Current items not in desired are kept as-is
104
+ * - New desired items are appended at the end with fresh generated IDs
105
+ */
106
+ function mergeEntityArray(current, desired, elementSchema, entityMeta) {
107
+ const currentItems = current ?? [];
108
+ const desiredByName = new Map(desired.map((item) => [getEntityName(entityMeta, item), item]));
109
+ const seen = new Set();
110
+ const result = [];
111
+ // Walk current items in order — merge matched, keep unmatched
112
+ for (const currentItem of currentItems) {
113
+ const name = getEntityName(entityMeta, currentItem);
114
+ const desiredItem = desiredByName.get(name);
115
+ if (desiredItem) {
116
+ result.push(mergeDataWithSchemaInternal(elementSchema, currentItem, desiredItem));
117
+ seen.add(name);
118
+ }
119
+ else {
120
+ result.push(currentItem);
121
+ }
122
+ }
123
+ // Append new desired items at the end, with fresh IDs
124
+ for (const desiredItem of desired) {
125
+ const name = getEntityName(entityMeta, desiredItem);
126
+ if (!seen.has(name)) {
127
+ const baseItem = assignEntityIds(elementSchema, desiredItem);
128
+ result.push(mergeDataWithSchemaInternal(elementSchema, {}, baseItem));
129
+ seen.add(name);
130
+ }
131
+ }
132
+ return result;
133
+ }
134
+ /**
135
+ * Merges an array by a custom key function (add-only).
136
+ *
137
+ * - Items in `desired` that match a `current` item (by key) are merged with `toMerged`
138
+ * - Items in `desired` not in `current` are appended
139
+ * - Items in `current` not in `desired` are kept (add-only semantics)
140
+ */
141
+ function mergeByKey(current, desired, getKey) {
142
+ const currentItems = current ?? [];
143
+ const desiredByKey = new Map(desired.map((item) => [getKey(item), item]));
144
+ const seen = new Set();
145
+ const result = [];
146
+ // Walk current items in order — merge matched, keep unmatched
147
+ for (const currentItem of currentItems) {
148
+ const key = getKey(currentItem);
149
+ const desiredItem = desiredByKey.get(key);
150
+ if (desiredItem) {
151
+ result.push(toMerged(currentItem, desiredItem));
152
+ seen.add(key);
153
+ }
154
+ else {
155
+ result.push(currentItem);
156
+ }
157
+ }
158
+ // Append new desired items (not in current) at the end
159
+ for (const desiredItem of desired) {
160
+ const key = getKey(desiredItem);
161
+ if (!seen.has(key)) {
162
+ result.push(desiredItem);
163
+ seen.add(key);
164
+ }
165
+ }
166
+ return result;
167
+ }
168
+ //# sourceMappingURL=merge-data-with-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-data-with-schema.js","sourceRoot":"","sources":["../../../src/tools/merge-schema/merge-data-with-schema.ts"],"names":[],"mappings":"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"}