@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
@@ -1,8 +1,9 @@
1
+ import { ProjectDefinitionContainer } from '#src/definition/project-definition-container.js';
1
2
  import { getLatestMigrationVersion } from '#src/migrations/index.js';
2
3
  import { createPluginSpecStore } from '#src/parser/parser.js';
3
4
  import { deserializeSchemaWithTransformedReferences } from '#src/references/deserialize-schema.js';
5
+ import { createDefinitionSchemaParserContext } from '#src/schema/index.js';
4
6
  import { createProjectDefinitionSchema } from '#src/schema/project-definition.js';
5
- import { ProjectDefinitionContainer } from './project-definition-container.js';
6
7
  export function createTestProjectDefinition(input = {}) {
7
8
  return {
8
9
  settings: {
@@ -36,7 +37,8 @@ export function createTestProjectDefinitionContainer(input = {}) {
36
37
  const pluginSpecStore = createPluginSpecStore(pluginStore, {
37
38
  plugins: [],
38
39
  });
39
- const resolvedRefPayload = deserializeSchemaWithTransformedReferences(createProjectDefinitionSchema, createTestProjectDefinitionInput(input), { plugins: pluginSpecStore });
40
+ const schema = createProjectDefinitionSchema(createDefinitionSchemaParserContext({ plugins: pluginSpecStore }));
41
+ const resolvedRefPayload = deserializeSchemaWithTransformedReferences(schema, createTestProjectDefinitionInput(input));
40
42
  return new ProjectDefinitionContainer(resolvedRefPayload, {
41
43
  pluginStore,
42
44
  cliVersion: '0.1.0',
@@ -44,8 +46,12 @@ export function createTestProjectDefinitionContainer(input = {}) {
44
46
  id: 'test-project',
45
47
  name: 'test-project',
46
48
  directory: '/test-project',
47
- isInternalExample: false,
49
+ type: 'user',
50
+ baseplateDirectory: '/test-project/baseplate',
48
51
  },
49
- }, pluginSpecStore);
52
+ }, pluginSpecStore, schema);
50
53
  }
51
- //# sourceMappingURL=project-definition-container.test-utils.js.map
54
+ export function createTestEntityServiceContext(input = {}) {
55
+ return createTestProjectDefinitionContainer(input).toEntityServiceContext();
56
+ }
57
+ //# sourceMappingURL=project-definition-container.test-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-definition-container.test-helper.js","sourceRoot":"","sources":["../../src/testing/project-definition-container.test-helper.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AAC7F,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,0CAA0C,EAAE,MAAM,uCAAuC,CAAC;AACnG,OAAO,EAAE,mCAAmC,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAElF,MAAM,UAAU,2BAA2B,CACzC,QAAoC,EAAE;IAEtC,OAAO;QACL,QAAQ,EAAE;YACR,OAAO,EAAE;gBACP,IAAI,EAAE,cAAc;gBACpB,YAAY,EAAE,EAAE;gBAChB,UAAU,EAAE,IAAI;aACjB;SACF;QACD,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,OAAO;QACnB,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,EAAE;QACb,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,IAAI;QACnB,aAAa,EAAE,yBAAyB,EAAE;QAC1C,GAAG,KAAK;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,QAAyC,EAAE;IAE3C,OAAO;QACL,GAAG,2BAA2B,EAAE;QAChC,GAAG,KAAK;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oCAAoC,CAClD,QAAyC,EAAE;IAE3C,MAAM,WAAW,GAAgB;QAC/B,gBAAgB,EAAE,EAAE;QACpB,WAAW,EAAE,EAAE;KAChB,CAAC;IACF,MAAM,eAAe,GAAG,qBAAqB,CAAC,WAAW,EAAE;QACzD,OAAO,EAAE,EAAE;KACZ,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,6BAA6B,CAC1C,mCAAmC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAClE,CAAC;IACF,MAAM,kBAAkB,GAAG,0CAA0C,CACnE,MAAM,EACN,gCAAgC,CAAC,KAAK,CAAC,CACxC,CAAC;IACF,OAAO,IAAI,0BAA0B,CACnC,kBAAkB,EAClB;QACE,WAAW;QACX,UAAU,EAAE,OAAO;QACnB,OAAO,EAAE;YACP,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,cAAc;YACpB,SAAS,EAAE,eAAe;YAC1B,IAAI,EAAE,MAAM;YACZ,kBAAkB,EAAE,yBAAyB;SAC9C;KACF,EACD,eAAe,EACf,MAAM,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,QAAyC,EAAE;IAE3C,OAAO,oCAAoC,CAAC,KAAK,CAAC,CAAC,sBAAsB,EAAE,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { z } from 'zod';
2
+ interface AssignEntityIdsOptions {
3
+ /** If returns true for an ID, that ID is preserved (not regenerated). */
4
+ isExistingId?: (id: string) => boolean;
5
+ }
6
+ /**
7
+ * Recursively assigns IDs to an entity and all nested child entities.
8
+ *
9
+ * Walks the schema using `transformDataWithSchema` to detect entity nodes
10
+ * (via `getEntityMeta`). At each entity boundary, generates a new ID unless
11
+ * the existing ID is preserved by the `isExistingId` callback.
12
+ *
13
+ * Returns a new object with IDs assigned (immutable, structural sharing).
14
+ */
15
+ export declare function assignEntityIds<T>(schema: z.ZodType, data: T, options?: AssignEntityIdsOptions): T;
16
+ export {};
17
+ //# sourceMappingURL=assign-entity-ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assign-entity-ids.d.ts","sourceRoot":"","sources":["../../src/tools/assign-entity-ids.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAS7B,UAAU,sBAAsB;IAC9B,yEAAyE;IACzE,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;CACxC;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,MAAM,EAAE,CAAC,CAAC,OAAO,EACjB,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,sBAAsB,GAC/B,CAAC,CAuBH"}
@@ -0,0 +1,34 @@
1
+ import { immutableSet } from '@baseplate-dev/utils';
2
+ import { get } from 'es-toolkit/compat';
3
+ import { transformDataWithSchema } from '#src/parser/transform-data-with-schema.js';
4
+ import { getEntityMeta } from './merge-schema/entity-utils.js';
5
+ /**
6
+ * Recursively assigns IDs to an entity and all nested child entities.
7
+ *
8
+ * Walks the schema using `transformDataWithSchema` to detect entity nodes
9
+ * (via `getEntityMeta`). At each entity boundary, generates a new ID unless
10
+ * the existing ID is preserved by the `isExistingId` callback.
11
+ *
12
+ * Returns a new object with IDs assigned (immutable, structural sharing).
13
+ */
14
+ export function assignEntityIds(schema, data, options) {
15
+ return transformDataWithSchema(schema, data, (value, ctx) => {
16
+ const entityMeta = getEntityMeta(ctx.schema);
17
+ if (!entityMeta) {
18
+ return value;
19
+ }
20
+ if (value === null || value === undefined || typeof value !== 'object') {
21
+ return value;
22
+ }
23
+ const currentId = get(value, entityMeta.idPath);
24
+ if (currentId !== undefined && typeof currentId !== 'string') {
25
+ throw new TypeError(`Expected string id at path "${entityMeta.idPath.join('.')}" but got ${typeof currentId}`);
26
+ }
27
+ if (currentId && options?.isExistingId?.(currentId)) {
28
+ return value;
29
+ }
30
+ const newId = entityMeta.type.generateNewId();
31
+ return immutableSet(value, entityMeta.idPath, newId);
32
+ });
33
+ }
34
+ //# sourceMappingURL=assign-entity-ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assign-entity-ids.js","sourceRoot":"","sources":["../../src/tools/assign-entity-ids.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAExC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAEpF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAO/D;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAiB,EACjB,IAAO,EACP,OAAgC;IAEhC,OAAO,uBAAuB,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1D,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAY,CAAC;QAC3D,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC7D,MAAM,IAAI,SAAS,CACjB,+BAA+B,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,OAAO,SAAS,EAAE,CAC1F,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YACpD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,OAAO,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { ReferencePath } from '#src/references/types.js';
2
+ import type { EntityServiceContext } from './types.js';
3
+ /**
4
+ * Finds the entity array containing entities of the given type.
5
+ *
6
+ * For top-level types: navigates from the definition root.
7
+ * For nested types: finds the parent entity by ID, then navigates from there.
8
+ */
9
+ export declare function resolveEntityArray(entityTypeName: string, parentEntityId: string | undefined, { entityTypeMap, lookupEntity, serializedDefinition }: EntityServiceContext): {
10
+ array: unknown[];
11
+ path: ReferencePath;
12
+ };
13
+ //# sourceMappingURL=entity-navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-navigation.d.ts","sourceRoot":"","sources":["../../../src/tools/entity-service/entity-navigation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAwEvD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,EAAE,aAAa,EAAE,YAAY,EAAE,oBAAoB,EAAE,EAAE,oBAAoB,GAC1E;IAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CA0C3C"}
@@ -0,0 +1,84 @@
1
+ import { isPlainObject } from 'es-toolkit';
2
+ import { get } from 'es-toolkit/compat';
3
+ /**
4
+ * Navigates from a starting object through a schema relative path to reach the entity array.
5
+ * Returns the array at the end of the path, or throws an error if the path is invalid.
6
+ */
7
+ function navigateToEntityArrayFromSchemaPath(obj, relativePath, pathPrefix) {
8
+ let current = obj;
9
+ const path = [...pathPrefix];
10
+ for (const element of relativePath) {
11
+ switch (element.type) {
12
+ case 'object-key': {
13
+ if (!isPlainObject(current)) {
14
+ throw new TypeError(`Expected object at path "${path.join('.')}" but got ${typeof current}`);
15
+ }
16
+ current = current[element.key];
17
+ path.push(element.key);
18
+ break;
19
+ }
20
+ case 'tuple-index': {
21
+ if (!Array.isArray(current)) {
22
+ throw new TypeError(`Expected array at path "${path.join('.')}" but got ${typeof current}`);
23
+ }
24
+ current = current[element.index];
25
+ path.push(element.index);
26
+ break;
27
+ }
28
+ case 'discriminated-union-array': {
29
+ // Enter the array and find the unique element matching the discriminator
30
+ if (!Array.isArray(current)) {
31
+ throw new TypeError(`Expected array at path "${path.join('.')}" but got ${typeof current}`);
32
+ }
33
+ const match = current.findIndex((item) => {
34
+ if (!isPlainObject(item)) {
35
+ throw new TypeError(`Expected object at path "${path.join('.')}" but got ${typeof item}`);
36
+ }
37
+ return item[element.discriminatorKey] === element.value;
38
+ });
39
+ if (match === -1) {
40
+ throw new Error(`No element found in array at path "${path.join('.')}" with discriminator key "${element.discriminatorKey}" and value "${element.value}"`);
41
+ }
42
+ current = current[match];
43
+ path.push(match);
44
+ break;
45
+ }
46
+ }
47
+ }
48
+ if (!Array.isArray(current)) {
49
+ throw new TypeError(`Expected array at path "${path.join('.')}" but got ${typeof current}`);
50
+ }
51
+ return { array: current, path };
52
+ }
53
+ /**
54
+ * Finds the entity array containing entities of the given type.
55
+ *
56
+ * For top-level types: navigates from the definition root.
57
+ * For nested types: finds the parent entity by ID, then navigates from there.
58
+ */
59
+ export function resolveEntityArray(entityTypeName, parentEntityId, { entityTypeMap, lookupEntity, serializedDefinition }) {
60
+ const metadata = entityTypeMap.get(entityTypeName);
61
+ if (!metadata) {
62
+ throw new Error(`Unknown entity type: ${entityTypeName}`);
63
+ }
64
+ let startPath = [];
65
+ if (metadata.parentEntityTypeName) {
66
+ // Nested entity: find the parent first
67
+ if (!parentEntityId) {
68
+ throw new Error(`Entity type "${entityTypeName}" requires a parent entity ID (parent type: "${metadata.parentEntityTypeName}")`);
69
+ }
70
+ const parentResult = lookupEntity(parentEntityId);
71
+ if (!parentResult) {
72
+ throw new Error(`Parent entity "${parentEntityId}" not found for entity type "${entityTypeName}"`);
73
+ }
74
+ startPath = parentResult.path;
75
+ }
76
+ const parentEntity = (startPath.length === 0
77
+ ? serializedDefinition
78
+ : get(serializedDefinition, startPath));
79
+ if (!isPlainObject(parentEntity)) {
80
+ throw new Error(`Parent entity at path "${startPath.join('.')}" is not a plain object`);
81
+ }
82
+ return navigateToEntityArrayFromSchemaPath(parentEntity, metadata.relativePath, startPath);
83
+ }
84
+ //# sourceMappingURL=entity-navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-navigation.js","sourceRoot":"","sources":["../../../src/tools/entity-service/entity-navigation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { EntityServiceContext } from './types.js';
2
+ export interface ListEntitiesInput {
3
+ entityTypeName: string;
4
+ parentEntityId?: string;
5
+ }
6
+ /**
7
+ * Lightweight entity stub returned by listEntities.
8
+ */
9
+ export interface EntityStub {
10
+ id: string;
11
+ name: string;
12
+ type: string;
13
+ }
14
+ /**
15
+ * Lists all entities of a given type, returning lightweight stubs.
16
+ *
17
+ * For nested entity types, `parentEntityId` is required to scope the listing
18
+ * to entities within a specific parent.
19
+ *
20
+ * @param container - The project definition container
21
+ * @param entityTypeMap - The entity type map built from the schema
22
+ * @param entityTypeName - The entity type to list
23
+ * @param parentEntityId - Required for nested entity types
24
+ * @returns Array of entity stubs with id, name, and type
25
+ */
26
+ export declare function listEntities({ entityTypeName, parentEntityId }: ListEntitiesInput, context: EntityServiceContext): EntityStub[];
27
+ /**
28
+ * Gets a single entity by ID, returning its full serialized (name-based) data.
29
+ *
30
+ * @param container - The project definition container
31
+ * @param entityTypeMap - The entity type map built from the schema
32
+ * @param serializedDef - The serialized project definition (with names)
33
+ * @param entityTypeName - The entity type to get
34
+ * @param entityId - The entity ID
35
+ * @returns The serialized entity data, or undefined if not found
36
+ */
37
+ export declare function getEntity(entityId: string, context: EntityServiceContext): Record<string, unknown> | undefined;
38
+ //# sourceMappingURL=entity-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-read.d.ts","sourceRoot":"","sources":["../../../src/tools/entity-service/entity-read.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAKvD,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,EAAE,cAAc,EAAE,cAAc,EAAE,EAAE,iBAAiB,EACrD,OAAO,EAAE,oBAAoB,GAC5B,UAAU,EAAE,CA2Bd;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAYrC"}
@@ -0,0 +1,56 @@
1
+ import { isPlainObject } from 'es-toolkit';
2
+ import { get } from 'es-toolkit/compat';
3
+ import { getEntityName } from '../merge-schema/entity-utils.js';
4
+ import { resolveEntityArray } from './entity-navigation.js';
5
+ /**
6
+ * Lists all entities of a given type, returning lightweight stubs.
7
+ *
8
+ * For nested entity types, `parentEntityId` is required to scope the listing
9
+ * to entities within a specific parent.
10
+ *
11
+ * @param container - The project definition container
12
+ * @param entityTypeMap - The entity type map built from the schema
13
+ * @param entityTypeName - The entity type to list
14
+ * @param parentEntityId - Required for nested entity types
15
+ * @returns Array of entity stubs with id, name, and type
16
+ */
17
+ export function listEntities({ entityTypeName, parentEntityId }, context) {
18
+ const metadata = context.entityTypeMap.get(entityTypeName);
19
+ if (!metadata) {
20
+ throw new Error(`Unknown entity type: ${entityTypeName}`);
21
+ }
22
+ const { array, path } = resolveEntityArray(entityTypeName, parentEntityId, context);
23
+ return array.map((item, index) => {
24
+ if (!isPlainObject(item)) {
25
+ throw new TypeError(`Expected plain object at path "${path.join('.')}[${index}]" but got ${typeof item}`);
26
+ }
27
+ const id = get(item, metadata.entityMeta.idPath);
28
+ if (typeof id !== 'string') {
29
+ throw new TypeError(`Expected string id at path "${metadata.entityMeta.idPath.join('.')}" but got ${typeof id}`);
30
+ }
31
+ const name = getEntityName(metadata.entityMeta, item);
32
+ return { id, name, type: entityTypeName };
33
+ });
34
+ }
35
+ /**
36
+ * Gets a single entity by ID, returning its full serialized (name-based) data.
37
+ *
38
+ * @param container - The project definition container
39
+ * @param entityTypeMap - The entity type map built from the schema
40
+ * @param serializedDef - The serialized project definition (with names)
41
+ * @param entityTypeName - The entity type to get
42
+ * @param entityId - The entity ID
43
+ * @returns The serialized entity data, or undefined if not found
44
+ */
45
+ export function getEntity(entityId, context) {
46
+ const result = context.lookupEntity(entityId);
47
+ if (!result) {
48
+ return undefined;
49
+ }
50
+ const item = get(context.serializedDefinition, result.path);
51
+ if (!isPlainObject(item)) {
52
+ throw new TypeError(`Expected plain object at path "${result.path.join('.')}" but got ${typeof item}`);
53
+ }
54
+ return item;
55
+ }
56
+ //# sourceMappingURL=entity-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-read.js","sourceRoot":"","sources":["../../../src/tools/entity-service/entity-read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAIxC,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAgB5D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAC1B,EAAE,cAAc,EAAE,cAAc,EAAqB,EACrD,OAA6B;IAE7B,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,cAAc,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,kBAAkB,CACxC,cAAc,EACd,cAAc,EACd,OAAO,CACR,CAAC;IAEF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,SAAS,CACjB,kCAAkC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,cAAc,OAAO,IAAI,EAAE,CACrF,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAY,CAAC;QAC5D,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,SAAS,CACjB,+BAA+B,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,OAAO,EAAE,EAAE,CAC5F,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACtD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CACvB,QAAgB,EAChB,OAA6B;IAE7B,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAY,CAAC;IACvE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,SAAS,CACjB,kCAAkC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,OAAO,IAAI,EAAE,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { z } from 'zod';
2
+ import type { EntityTypeMap } from './types.js';
3
+ /**
4
+ * Collects entity metadata from a Zod schema by walking its structure.
5
+ *
6
+ * Walks the schema once, detecting entity arrays (via `definitionRefRegistry`
7
+ * annotations) and building metadata for each entity type including its
8
+ * relative path from the parent entity (or root) and parent entity type linkage.
9
+ *
10
+ * Parent relationships are determined by `entityType.parentType` on the
11
+ * `DefinitionEntityType` instance — when a parent type is set, the walker
12
+ * finds the matching ancestor entity in its stack and computes the relative
13
+ * path from there.
14
+ *
15
+ * Call once per schema and reuse the result.
16
+ */
17
+ export declare function collectEntityMetadata(schema: z.ZodType): EntityTypeMap;
18
+ //# sourceMappingURL=entity-type-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-type-map.d.ts","sourceRoot":"","sources":["../../../src/tools/entity-service/entity-type-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAO7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,GAAG,aAAa,CAyEtE"}
@@ -0,0 +1,75 @@
1
+ import { getSchemaChildren } from '#src/parser/schema-structure.js';
2
+ import { walkSchemaStructure } from '#src/parser/walk-schema-structure.js';
3
+ import { getEntityMeta } from '../merge-schema/entity-utils.js';
4
+ /**
5
+ * Collects entity metadata from a Zod schema by walking its structure.
6
+ *
7
+ * Walks the schema once, detecting entity arrays (via `definitionRefRegistry`
8
+ * annotations) and building metadata for each entity type including its
9
+ * relative path from the parent entity (or root) and parent entity type linkage.
10
+ *
11
+ * Parent relationships are determined by `entityType.parentType` on the
12
+ * `DefinitionEntityType` instance — when a parent type is set, the walker
13
+ * finds the matching ancestor entity in its stack and computes the relative
14
+ * path from there.
15
+ *
16
+ * Call once per schema and reuse the result.
17
+ */
18
+ export function collectEntityMetadata(schema) {
19
+ const map = new Map();
20
+ // Stack of entity types encountered during the walk, used to determine
21
+ // parent-child relationships and compute relative paths.
22
+ const entityStack = [];
23
+ walkSchemaStructure(schema, [
24
+ {
25
+ visit(innerSchema, ctx) {
26
+ const children = getSchemaChildren(innerSchema, undefined, []);
27
+ if (children.kind !== 'array') {
28
+ return undefined;
29
+ }
30
+ const entityMeta = getEntityMeta(children.elementSchema);
31
+ if (!entityMeta) {
32
+ return undefined;
33
+ }
34
+ const entityTypeName = entityMeta.type.name;
35
+ const { parentType } = entityMeta.type;
36
+ let parentEntityTypeName;
37
+ let relativePath;
38
+ if (parentType) {
39
+ // Find the parent entity in the stack
40
+ const parentEntry = entityStack.findLast((entry) => entry.entityTypeName === parentType.name);
41
+ if (!parentEntry) {
42
+ throw new Error(`Entity type "${entityTypeName}" declares parent type "${parentType.name}" ` +
43
+ `but no such entity was found in the ancestor chain`);
44
+ }
45
+ parentEntityTypeName = parentType.name;
46
+ relativePath = ctx.path.slice(parentEntry.pathAtEntity.length);
47
+ }
48
+ else {
49
+ // Top-level entity: relative path is the full path
50
+ relativePath = ctx.path;
51
+ }
52
+ map.set(entityTypeName, {
53
+ name: entityTypeName,
54
+ entityType: entityMeta.type,
55
+ entityMeta,
56
+ elementSchema: children.elementSchema,
57
+ relativePath,
58
+ parentEntityTypeName,
59
+ });
60
+ // Push onto entity stack. Child relative paths are computed by
61
+ // slicing from this position — the walker adds discriminated-union-array
62
+ // elements when descending into array branches.
63
+ entityStack.push({
64
+ entityTypeName,
65
+ pathAtEntity: ctx.path,
66
+ });
67
+ return () => {
68
+ entityStack.pop();
69
+ };
70
+ },
71
+ },
72
+ ]);
73
+ return map;
74
+ }
75
+ //# sourceMappingURL=entity-type-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-type-map.js","sourceRoot":"","sources":["../../../src/tools/entity-service/entity-type-map.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAI3E,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,GAAG,GAAkB,IAAI,GAAG,EAAE,CAAC;IAErC,uEAAuE;IACvE,yDAAyD;IACzD,MAAM,WAAW,GAGX,EAAE,CAAC;IAET,mBAAmB,CAAC,MAAM,EAAE;QAC1B;YACE,KAAK,CAAC,WAAW,EAAE,GAAG;gBACpB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC/D,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC9B,OAAO,SAAS,CAAC;gBACnB,CAAC;gBAED,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBACzD,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,OAAO,SAAS,CAAC;gBACnB,CAAC;gBAED,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5C,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC;gBAEvC,IAAI,oBAAwC,CAAC;gBAC7C,IAAI,YAAgD,CAAC;gBAErD,IAAI,UAAU,EAAE,CAAC;oBACf,sCAAsC;oBACtC,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,CACtC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,KAAK,UAAU,CAAC,IAAI,CACpD,CAAC;oBAEF,IAAI,CAAC,WAAW,EAAE,CAAC;wBACjB,MAAM,IAAI,KAAK,CACb,gBAAgB,cAAc,2BAA2B,UAAU,CAAC,IAAI,IAAI;4BAC1E,oDAAoD,CACvD,CAAC;oBACJ,CAAC;oBAED,oBAAoB,GAAG,UAAU,CAAC,IAAI,CAAC;oBACvC,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACjE,CAAC;qBAAM,CAAC;oBACN,mDAAmD;oBACnD,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC;gBAC1B,CAAC;gBAED,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE;oBACtB,IAAI,EAAE,cAAc;oBACpB,UAAU,EAAE,UAAU,CAAC,IAAI;oBAC3B,UAAU;oBACV,aAAa,EAAE,QAAQ,CAAC,aAAa;oBACrC,YAAY;oBACZ,oBAAoB;iBACrB,CAAC,CAAC;gBAEH,+DAA+D;gBAC/D,yEAAyE;gBACzE,gDAAgD;gBAChD,WAAW,CAAC,IAAI,CAAC;oBACf,cAAc;oBACd,YAAY,EAAE,GAAG,CAAC,IAAI;iBACvB,CAAC,CAAC;gBACH,OAAO,GAAG,EAAE;oBACV,WAAW,CAAC,GAAG,EAAE,CAAC;gBACpB,CAAC,CAAC;YACJ,CAAC;SACF;KACF,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { EntityServiceContext } from './types.js';
2
+ export interface CreateEntityInput {
3
+ entityTypeName: string;
4
+ entityData: Record<string, unknown>;
5
+ parentEntityId?: string;
6
+ }
7
+ /**
8
+ * Creates a new entity in the definition.
9
+ *
10
+ * Generates a new ID for the entity using the entity type's ID generation.
11
+ * For nested entity types, `parentEntityId` specifies which parent to add to.
12
+ *
13
+ * @returns A new definition with the entity added (original is not modified)
14
+ */
15
+ export declare function createEntity({ entityTypeName, entityData, parentEntityId }: CreateEntityInput, context: EntityServiceContext): Record<string, unknown>;
16
+ export interface UpdateEntityInput {
17
+ entityTypeName: string;
18
+ entityId: string;
19
+ entityData: Record<string, unknown>;
20
+ }
21
+ /**
22
+ * Updates an existing entity by ID.
23
+ *
24
+ * Replaces the entity data while preserving the entity's ID.
25
+ *
26
+ * @returns A new definition with the entity updated (original is not modified)
27
+ */
28
+ export declare function updateEntity({ entityTypeName, entityId, entityData }: UpdateEntityInput, context: EntityServiceContext): Record<string, unknown>;
29
+ export interface DeleteEntityInput {
30
+ entityTypeName: string;
31
+ entityId: string;
32
+ }
33
+ /**
34
+ * Deletes an entity by ID.
35
+ *
36
+ * @returns A new definition with the entity removed (original is not modified)
37
+ */
38
+ export declare function deleteEntity({ entityTypeName, entityId }: DeleteEntityInput, context: EntityServiceContext): Record<string, unknown>;
39
+ //# sourceMappingURL=entity-write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-write.d.ts","sourceRoot":"","sources":["../../../src/tools/entity-service/entity-write.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAKvD,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,iBAAiB,EACjE,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBzB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAC3D,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA4CzB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAC/C,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiCzB"}
@@ -0,0 +1,99 @@
1
+ import { isPlainObject } from 'es-toolkit';
2
+ import { get } from 'es-toolkit/compat';
3
+ import { produce } from 'immer';
4
+ import { assignEntityIds } from '../assign-entity-ids.js';
5
+ import { resolveEntityArray } from './entity-navigation.js';
6
+ /**
7
+ * Creates a new entity in the definition.
8
+ *
9
+ * Generates a new ID for the entity using the entity type's ID generation.
10
+ * For nested entity types, `parentEntityId` specifies which parent to add to.
11
+ *
12
+ * @returns A new definition with the entity added (original is not modified)
13
+ */
14
+ export function createEntity({ entityTypeName, entityData, parentEntityId }, context) {
15
+ const metadata = context.entityTypeMap.get(entityTypeName);
16
+ if (!metadata) {
17
+ throw new Error(`Unknown entity type: ${entityTypeName}`);
18
+ }
19
+ // Resolve the array path on the original definition
20
+ const { path } = resolveEntityArray(entityTypeName, parentEntityId, context);
21
+ // Assign IDs to the entity and all nested child entities
22
+ const entityWithIds = assignEntityIds(metadata.elementSchema, entityData);
23
+ return produce(context.serializedDefinition, (draft) => {
24
+ const array = get(draft, path);
25
+ if (!Array.isArray(array)) {
26
+ throw new TypeError(`Expected array at path "${path.join('.')}" but got ${typeof array}`);
27
+ }
28
+ array.push(entityWithIds);
29
+ });
30
+ }
31
+ /**
32
+ * Updates an existing entity by ID.
33
+ *
34
+ * Replaces the entity data while preserving the entity's ID.
35
+ *
36
+ * @returns A new definition with the entity updated (original is not modified)
37
+ */
38
+ export function updateEntity({ entityTypeName, entityId, entityData }, context) {
39
+ const metadata = context.entityTypeMap.get(entityTypeName);
40
+ if (!metadata) {
41
+ throw new Error(`Unknown entity type: ${entityTypeName}`);
42
+ }
43
+ // Verify the entity exists and get its path
44
+ const entity = context.lookupEntity(entityId);
45
+ if (!entity) {
46
+ throw new Error(`Entity "${entityId}" of type "${entityTypeName}" not found`);
47
+ }
48
+ // Preserve the ID in the updated data but populate any children entities with new IDs if they don't have an ID yet.
49
+ const updatedEntity = assignEntityIds(metadata.elementSchema, entityData, {
50
+ isExistingId: (id) => !!context.lookupEntity(id),
51
+ });
52
+ return produce(context.serializedDefinition, (draft) => {
53
+ const target = get(draft, entity.path);
54
+ if (!isPlainObject(target)) {
55
+ throw new TypeError(`Expected plain object at path "${entity.path.join('.')}" but got ${typeof target}`);
56
+ }
57
+ // Find the parent array and the entity's index within it
58
+ const parentPath = entity.path.slice(0, -1);
59
+ const entityIndex = entity.path.at(-1);
60
+ if (typeof entityIndex !== 'number') {
61
+ throw new TypeError(`Expected numeric index at end of entity path "${entity.path.join('.')}"`);
62
+ }
63
+ const parentArray = get(draft, parentPath);
64
+ if (!Array.isArray(parentArray)) {
65
+ throw new TypeError(`Expected array at path "${parentPath.join('.')}" but got ${typeof parentArray}`);
66
+ }
67
+ parentArray[entityIndex] = updatedEntity;
68
+ });
69
+ }
70
+ /**
71
+ * Deletes an entity by ID.
72
+ *
73
+ * @returns A new definition with the entity removed (original is not modified)
74
+ */
75
+ export function deleteEntity({ entityTypeName, entityId }, context) {
76
+ const metadata = context.entityTypeMap.get(entityTypeName);
77
+ if (!metadata) {
78
+ throw new Error(`Unknown entity type: ${entityTypeName}`);
79
+ }
80
+ // Verify the entity exists and get its path
81
+ const entity = context.lookupEntity(entityId);
82
+ if (!entity) {
83
+ throw new Error(`Entity "${entityId}" of type "${entityTypeName}" not found`);
84
+ }
85
+ // Find the parent array and remove the entity by index
86
+ const parentPath = entity.path.slice(0, -1);
87
+ const entityIndex = entity.path.at(-1);
88
+ if (typeof entityIndex !== 'number') {
89
+ throw new TypeError(`Expected numeric index at end of entity path "${entity.path.join('.')}"`);
90
+ }
91
+ return produce(context.serializedDefinition, (draft) => {
92
+ const parentArray = get(draft, parentPath);
93
+ if (!Array.isArray(parentArray)) {
94
+ throw new TypeError(`Expected array at path "${parentPath.join('.')}" but got ${typeof parentArray}`);
95
+ }
96
+ parentArray.splice(entityIndex, 1);
97
+ });
98
+ }
99
+ //# sourceMappingURL=entity-write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-write.js","sourceRoot":"","sources":["../../../src/tools/entity-service/entity-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAIhC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAQ5D;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAqB,EACjE,OAA6B;IAE7B,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,cAAc,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,oDAAoD;IACpD,MAAM,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,cAAc,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IAE7E,yDAAyD;IACzD,MAAM,aAAa,GAAG,eAAe,CAAC,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAE1E,OAAO,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;QACrD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,IAAI,CAAY,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,SAAS,CACjB,2BAA2B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,OAAO,KAAK,EAAE,CACrE,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC;AAQD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAqB,EAC3D,OAA6B;IAE7B,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,cAAc,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,4CAA4C;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,WAAW,QAAQ,cAAc,cAAc,aAAa,CAC7D,CAAC;IACJ,CAAC;IAED,oHAAoH;IACpH,MAAM,aAAa,GAAG,eAAe,CAAC,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE;QACxE,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;KACjD,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;QACrD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAY,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,SAAS,CACjB,kCAAkC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,OAAO,MAAM,EAAE,CACpF,CAAC;QACJ,CAAC;QAED,yDAAyD;QACzD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,SAAS,CACjB,iDAAiD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAC1E,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,EAAE,UAAU,CAAY,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,SAAS,CACjB,2BAA2B,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,OAAO,WAAW,EAAE,CACjF,CAAC;QACJ,CAAC;QAED,WAAW,CAAC,WAAW,CAAC,GAAG,aAAa,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AAOD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,EAAE,cAAc,EAAE,QAAQ,EAAqB,EAC/C,OAA6B;IAE7B,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,cAAc,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,4CAA4C;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,WAAW,QAAQ,cAAc,cAAc,aAAa,CAC7D,CAAC;IACJ,CAAC;IAED,uDAAuD;IACvD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,SAAS,CACjB,iDAAiD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAC1E,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;QACrD,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,EAAE,UAAU,CAAY,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,SAAS,CACjB,2BAA2B,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,OAAO,WAAW,EAAE,CACjF,CAAC;QACJ,CAAC;QAED,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { getEntity, listEntities } from './entity-read.js';
2
+ export { collectEntityMetadata } from './entity-type-map.js';
3
+ export { createEntity, deleteEntity, updateEntity } from './entity-write.js';
4
+ export type { EntityServiceContext, EntityTypeMap, EntityTypeMetadata, } from './types.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/entity-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7E,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { getEntity, listEntities } from './entity-read.js';
2
+ export { collectEntityMetadata } from './entity-type-map.js';
3
+ export { createEntity, deleteEntity, updateEntity } from './entity-write.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/entity-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}