@salsita-ai/sdk 0.50.0-develop.b335a15889 → 0.50.0-develop.b9eb39baf0

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 (366) hide show
  1. package/dist/application-spec/generate-application/code/common/index.d.ts +1 -0
  2. package/dist/application-spec/generate-application/code/common/index.js +1 -1
  3. package/dist/application-spec/generate-application/code/common/project-module-list.d.ts +8 -0
  4. package/dist/application-spec/generate-application/code/common/project-module-list.js +3 -0
  5. package/dist/application-spec/generate-application/code/domain-runtime-files.js +1 -1
  6. package/dist/application-spec/generate-application/code/templates/admin-domain-code.d.ts +1 -2
  7. package/dist/application-spec/generate-application/code/templates/admin-domain-code.js +6 -14
  8. package/dist/application-spec/generate-application/code/templates/admin-frontend-code.d.ts +1 -2
  9. package/dist/application-spec/generate-application/code/templates/admin-frontend-code.js +4 -4
  10. package/dist/application-spec/generate-application/code/templates/configurator-domain-code.d.ts +1 -2
  11. package/dist/application-spec/generate-application/code/templates/configurator-domain-code.js +7 -16
  12. package/dist/application-spec/generate-application/code/templates/configurator-frontend-code.d.ts +1 -2
  13. package/dist/application-spec/generate-application/code/templates/configurator-frontend-code.js +7 -9
  14. package/dist/application-spec/generate-application/code/templates/domain.js +3 -3
  15. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +1 -1
  16. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +2 -1
  17. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +1 -2
  18. package/dist/application-spec/generate-application/code/templates/webhook-builders.js +3 -3
  19. package/dist/docs/complex-use-cases/filtered-controls-with-fix-dialog.mdx +84 -98
  20. package/dist/docs/complex-use-cases/navigation-reset-selection.mdx +18 -12
  21. package/dist/docs/index.json +1 -1
  22. package/dist/docs/layouts/custom-price.mdx +14 -16
  23. package/dist/docs/layouts/sidebar/tabs.mdx +24 -21
  24. package/dist/docs/other-features/domain-actions.mdx +1 -1
  25. package/dist/docs/other-features/side-effects.mdx +42 -34
  26. package/dist/docs/other-features/transformers.mdx +1 -1
  27. package/dist/docs/phoenix/admin.mdx +9 -24
  28. package/dist/docs/phoenix/localization.mdx +3 -22
  29. package/dist/docs/phoenix/project-structure.mdx +6 -0
  30. package/dist/docs/recipes-and-delete/recipe-hierarchy-selection.mdx +15 -13
  31. package/dist/docs/relations/hierarchy.mdx +13 -2
  32. package/dist/domain/actions/action-factory.d.ts +4 -4
  33. package/dist/domain/admin-domain/__generated/enhanced-model.d.ts +1 -1
  34. package/dist/domain/admin-domain/__generated/model/versions/v1.d.ts +1 -1
  35. package/dist/domain/admin-domain/__generated/model/versions/v2.d.ts +1 -1
  36. package/dist/domain/admin-domain/__generated/model/versions/v3.d.ts +1 -1
  37. package/dist/domain/admin-domain/__generated/model/versions/v4.d.ts +1 -1
  38. package/dist/domain/admin-domain/__generated/model/versions/v5.d.ts +1 -1
  39. package/dist/domain/admin-domain/__generated/model/versions/v6.d.ts +2 -2
  40. package/dist/domain/admin-domain/__generated/model/versions/v6.js +1 -1
  41. package/dist/domain/admin-domain/implementation/common-admin-expressions.d.ts +1 -3
  42. package/dist/domain/admin-domain/implementation/common-admin-migrations.d.ts +1 -1
  43. package/dist/domain/admin-domain/index.d.ts +1 -1
  44. package/dist/domain/application/admin-page-factories.d.ts +1 -1
  45. package/dist/domain/application/application-config.d.ts +23 -13
  46. package/dist/domain/application/assistant-field-options.d.ts +1 -2
  47. package/dist/domain/application/assistant-mutations.d.ts +1 -3
  48. package/dist/domain/application/assistant-mutations.js +1 -1
  49. package/dist/domain/application/assistant-recipe-groups.d.ts +1 -3
  50. package/dist/domain/application/configurator-builder.d.ts +30 -16
  51. package/dist/domain/application/configurator-builder.js +1 -1
  52. package/dist/domain/application/element-registration.d.ts +5 -0
  53. package/dist/domain/application/element-registration.js +1 -1
  54. package/dist/domain/application/handler-registration.d.ts +5 -0
  55. package/dist/domain/application/handler-registration.js +1 -1
  56. package/dist/domain/application/index.d.ts +4 -4
  57. package/dist/domain/application/index.js +1 -1
  58. package/dist/domain/application/published-data/create-finalize-admin-domain.d.ts +1 -2
  59. package/dist/domain/application/published-data/map-published-chunked-data.d.ts +1 -1
  60. package/dist/domain/application/published-data/map-published-data.d.ts +1 -2
  61. package/dist/domain/application/resolve-imported-transformers.d.ts +12 -2
  62. package/dist/domain/application/resolve-imported-transformers.js +1 -1
  63. package/dist/domain/components/component-reader-types.d.ts +1 -2
  64. package/dist/domain/components/debug-state-component.d.ts +1 -1
  65. package/dist/domain/components/debug-state-component.js +1 -1
  66. package/dist/domain/components/domain-component-optic.d.ts +4 -5
  67. package/dist/domain/components/domain-component-optic.js +2 -2
  68. package/dist/domain/components/drag-state-component.d.ts +1 -1
  69. package/dist/domain/components/drag-state-component.js +1 -1
  70. package/dist/domain/components/export-state-component.d.ts +1 -1
  71. package/dist/domain/components/export-state-component.js +1 -1
  72. package/dist/domain/components/fullscreen-state-component.d.ts +1 -1
  73. package/dist/domain/components/fullscreen-state-component.js +1 -1
  74. package/dist/domain/components/group-components-by-entity-id-and-name.d.ts +1 -2
  75. package/dist/domain/components/group-components-by-entity-id-and-name.js +1 -1
  76. package/dist/domain/components/hover-state-component.d.ts +1 -1
  77. package/dist/domain/components/hover-state-component.js +1 -1
  78. package/dist/domain/components/legacy-filter.d.ts +1 -2
  79. package/dist/domain/components/navigation-state-component.d.ts +1 -1
  80. package/dist/domain/components/navigation-state-component.js +1 -1
  81. package/dist/domain/components/selection-state-component.d.ts +1 -1
  82. package/dist/domain/components/selection-state-component.js +1 -1
  83. package/dist/domain/components/system-component-builder.d.ts +1 -2
  84. package/dist/domain/components/system-component-builder.js +1 -1
  85. package/dist/domain/components/system-component-filter.d.ts +1 -3
  86. package/dist/domain/components/system-virtual-entity.js +1 -1
  87. package/dist/domain/components/tool-state-component.d.ts +1 -1
  88. package/dist/domain/components/tool-state-component.js +1 -1
  89. package/dist/domain/components/updates.d.ts +1 -2
  90. package/dist/domain/components/view-state-component.d.ts +1 -1
  91. package/dist/domain/components/view-state-component.js +1 -1
  92. package/dist/domain/components/viewport-state-component.d.ts +1 -1
  93. package/dist/domain/components/viewport-state-component.js +1 -1
  94. package/dist/domain/core/action.d.ts +2 -2
  95. package/dist/domain/core/decoder/create-decoder.d.ts +6 -0
  96. package/dist/domain/core/decoder/create-decoder.js +1 -0
  97. package/dist/domain/core/decoder/decoder.d.ts +6 -0
  98. package/dist/domain/core/decoder/index.d.ts +2 -0
  99. package/dist/domain/core/decoder/index.js +1 -0
  100. package/dist/domain/core/domain-factory.d.ts +1 -2
  101. package/dist/domain/core/domain-factory.js +1 -1
  102. package/dist/domain/core/domain.d.ts +1 -2
  103. package/dist/domain/core/domain.js +1 -1
  104. package/dist/domain/core/expression.d.ts +1 -2
  105. package/dist/domain/core/index.d.ts +8 -17
  106. package/dist/domain/core/index.js +1 -1
  107. package/dist/domain/core/migrations.d.ts +1 -2
  108. package/dist/domain/core/{component.d.ts → model/component.d.ts} +1 -1
  109. package/dist/domain/core/model/index.d.ts +6 -0
  110. package/dist/domain/core/model/index.js +1 -0
  111. package/dist/domain/core/{reflection.d.ts → model/reflection.d.ts} +1 -1
  112. package/dist/domain/core/model/reflection.js +1 -0
  113. package/dist/domain/core/schema/extended-schema-validator.js +1 -0
  114. package/dist/domain/core/schema/index.d.ts +3 -0
  115. package/dist/domain/core/schema/index.js +1 -0
  116. package/dist/domain/core/schema/schema-validator.js +1 -0
  117. package/dist/domain/core/state.d.ts +1 -2
  118. package/dist/domain/domain-builder.d.ts +11 -8
  119. package/dist/domain/domain-builder.js +1 -1
  120. package/dist/domain/domain-context/action-system/action-system.d.ts +1 -3
  121. package/dist/domain/domain-context/action-system/action-system.js +1 -1
  122. package/dist/domain/domain-context/create-transformer.d.ts +1 -1
  123. package/dist/domain/domain-context/domain-context-systems.d.ts +1 -3
  124. package/dist/domain/domain-context/navigation-system/navigation-system.d.ts +1 -2
  125. package/dist/domain/domain-context/navigation-system/navigation-updates.d.ts +1 -1
  126. package/dist/domain/domain-context/navigation-system/selection-transformers.d.ts +1 -1
  127. package/dist/domain/domain-context/navigation-system/selection-transformers.js +1 -1
  128. package/dist/domain/domain-context/recipe-system/recipes.d.ts +1 -3
  129. package/dist/domain/domain-context/recipe-system/recipes.js +1 -1
  130. package/dist/domain/domain-context/relation-transformers/cascade-deletes.d.ts +1 -1
  131. package/dist/domain/domain-context/relation-transformers/cascade-deletes.js +1 -1
  132. package/dist/domain/domain-context/relation-transformers/cascade-ref-pruning.d.ts +1 -1
  133. package/dist/domain/domain-context/relation-transformers/create-entity-refs.d.ts +1 -1
  134. package/dist/domain/domain-context/relation-transformers/replace-refs.d.ts +1 -1
  135. package/dist/domain/domain-context/store-system/apply-updates.d.ts +1 -2
  136. package/dist/domain/domain-context/store-system/apply-updates.js +1 -1
  137. package/dist/domain/domain-context/store-system/next-domain-entity-id.d.ts +1 -2
  138. package/dist/domain/domain-context/store-system/next-domain-entity-id.js +1 -1
  139. package/dist/domain/domain-context/store-system/reconcile-projected-entities.d.ts +1 -1
  140. package/dist/domain/domain-context/store-system/store-system.d.ts +1 -3
  141. package/dist/domain/domain-context/store-system/store-system.js +1 -1
  142. package/dist/domain/domain-context/store-system/system-state.d.ts +1 -3
  143. package/dist/domain/domain-context/transformers/actions-builder.d.ts +1 -1
  144. package/dist/domain/domain-context/transformers/actions-builder.js +1 -1
  145. package/dist/domain/domain-context/transformers/auto-snap-transformer.d.ts +1 -2
  146. package/dist/domain/domain-context/transformers/chain-builder.d.ts +2 -2
  147. package/dist/domain/domain-context/transformers/context.d.ts +1 -2
  148. package/dist/domain/domain-context/transformers/entity-builder.d.ts +1 -1
  149. package/dist/domain/domain-context/transformers/entity-builder.js +1 -1
  150. package/dist/domain/domain-context/transformers/then-builder.d.ts +1 -1
  151. package/dist/domain/domain-context/transformers/then-builder.js +1 -1
  152. package/dist/domain/domain-context/transformers/when-builder.d.ts +1 -2
  153. package/dist/domain/domain-context/transformers/when-builder.js +1 -1
  154. package/dist/domain/domain-context/undo-system.d.ts +1 -1
  155. package/dist/domain/domain-runtime/domain-context/component-reader.d.ts +1 -3
  156. package/dist/domain/domain-runtime/domain-context/component-reader.js +1 -1
  157. package/dist/domain/domain-runtime/domain-context/selectors.d.ts +1 -2
  158. package/dist/domain/domain-runtime/domain-context/selectors.js +1 -1
  159. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  160. package/dist/domain/expressions/constant-expressions.d.ts +1 -3
  161. package/dist/domain/expressions/custom-expression.d.ts +1 -4
  162. package/dist/domain/expressions/memoize-expression.d.ts +1 -2
  163. package/dist/domain/expressions/prepare-domain-expressions.d.ts +1 -1
  164. package/dist/domain/index.d.ts +3 -2
  165. package/dist/domain/index.js +1 -1
  166. package/dist/domain/invariants/builtin-invariant.d.ts +1 -2
  167. package/dist/domain/invariants/custom-invariants.d.ts +1 -2
  168. package/dist/domain/invariants/invariants.d.ts +10 -4
  169. package/dist/domain/invariants/invariants.js +1 -1
  170. package/dist/domain/invariants/violation.d.ts +1 -1
  171. package/dist/domain/mocks/create-mock-domain-runtime.d.ts +1 -1
  172. package/dist/domain/mocks/create-mock-domain-runtime.js +1 -1
  173. package/dist/domain/project-modules/index.d.ts +1 -0
  174. package/dist/domain/project-modules/index.js +1 -0
  175. package/dist/domain/project-modules/project-modules.d.ts +41 -0
  176. package/dist/domain/project-modules/project-modules.js +1 -0
  177. package/dist/domain/projections/projected-entities-projections.d.ts +1 -2
  178. package/dist/domain/projections/snap-matching.d.ts +1 -2
  179. package/dist/domain/projections/snap-utils.d.ts +1 -2
  180. package/dist/domain/relations/all-of-type-relation.d.ts +1 -4
  181. package/dist/domain/relations/all-of-type-relation.js +1 -1
  182. package/dist/domain/relations/component-factories.d.ts +1 -2
  183. package/dist/domain/relations/composed-of.d.ts +1 -1
  184. package/dist/domain/relations/composed-of.js +1 -1
  185. package/dist/domain/relations/direct-relation.d.ts +1 -3
  186. package/dist/domain/relations/indirect-relation.d.ts +1 -4
  187. package/dist/domain/relations/indirect-relation.js +1 -1
  188. package/dist/domain/relations/reference-component.d.ts +1 -2
  189. package/dist/domain/relations/reference-component.js +1 -1
  190. package/dist/domain/relations/reference-field.d.ts +1 -1
  191. package/dist/domain/relations/relation-factory.d.ts +1 -3
  192. package/dist/domain/relations/relation-implementation.d.ts +1 -4
  193. package/dist/domain/system-components/admin-sidebar.d.ts +1 -1
  194. package/dist/domain/system-components/admin-sidebar.js +1 -1
  195. package/dist/domain/system-components/angle-indicator.d.ts +1 -1
  196. package/dist/domain/system-components/angle-indicator.js +1 -1
  197. package/dist/domain/system-components/application-config.d.ts +1 -1
  198. package/dist/domain/system-components/application-config.js +1 -1
  199. package/dist/domain/system-components/attribute-selection.js +1 -1
  200. package/dist/domain/system-components/autorotate-camera-component.d.ts +1 -1
  201. package/dist/domain/system-components/basic-sidebar-footer.d.ts +1 -1
  202. package/dist/domain/system-components/basic-sidebar-footer.js +1 -1
  203. package/dist/domain/system-components/bounding-box-component.d.ts +1 -1
  204. package/dist/domain/system-components/bounding-sphere-component.d.ts +1 -1
  205. package/dist/domain/system-components/camera-based-hidden-entity-object.js +1 -1
  206. package/dist/domain/system-components/camera-based-hidden-entity.js +1 -1
  207. package/dist/domain/system-components/canvas-config.d.ts +1 -1
  208. package/dist/domain/system-components/canvas-config.js +1 -1
  209. package/dist/domain/system-components/canvas-padding.d.ts +1 -1
  210. package/dist/domain/system-components/canvas-padding.js +1 -1
  211. package/dist/domain/system-components/canvas-preset-environment.d.ts +1 -1
  212. package/dist/domain/system-components/canvas-preset-environment.js +1 -1
  213. package/dist/domain/system-components/child-entity-selection.d.ts +1 -1
  214. package/dist/domain/system-components/client-side-image.js +1 -1
  215. package/dist/domain/system-components/collision-box-geometry.d.ts +1 -1
  216. package/dist/domain/system-components/collision-geometries.d.ts +1 -1
  217. package/dist/domain/system-components/collision-geometry.d.ts +1 -1
  218. package/dist/domain/system-components/collision-point-geometry.d.ts +1 -1
  219. package/dist/domain/system-components/common/dimension-indicator-schema.d.ts +1 -1
  220. package/dist/domain/system-components/common/dimension-indicator-schema.js +1 -1
  221. package/dist/domain/system-components/constraint.d.ts +1 -1
  222. package/dist/domain/system-components/create-blueprint.d.ts +1 -1
  223. package/dist/domain/system-components/custom-header.d.ts +1 -1
  224. package/dist/domain/system-components/custom-header.js +1 -1
  225. package/dist/domain/system-components/custom-scene-entity.d.ts +1 -1
  226. package/dist/domain/system-components/custom-scene-entity.js +1 -1
  227. package/dist/domain/system-components/custom-sidebar-footer.d.ts +1 -1
  228. package/dist/domain/system-components/custom-sidebar-footer.js +1 -1
  229. package/dist/domain/system-components/dimension-indicator.d.ts +1 -1
  230. package/dist/domain/system-components/dimension-indicator.js +1 -1
  231. package/dist/domain/system-components/distance-dimension-select.d.ts +1 -1
  232. package/dist/domain/system-components/distance-dimension-select.js +1 -1
  233. package/dist/domain/system-components/distance-dimension.d.ts +1 -1
  234. package/dist/domain/system-components/distance-dimension.js +1 -1
  235. package/dist/domain/system-components/drag-handle.d.ts +1 -1
  236. package/dist/domain/system-components/drag-handle.js +1 -1
  237. package/dist/domain/system-components/editable-angle-indicator.d.ts +1 -1
  238. package/dist/domain/system-components/editable-angle-indicator.js +1 -1
  239. package/dist/domain/system-components/editable-distance-dimension-indicator.d.ts +1 -1
  240. package/dist/domain/system-components/editable-distance-dimension-indicator.js +1 -1
  241. package/dist/domain/system-components/editable-offset-indicator.d.ts +1 -1
  242. package/dist/domain/system-components/editable-offset-indicator.js +1 -1
  243. package/dist/domain/system-components/editable-size-indicator.d.ts +1 -1
  244. package/dist/domain/system-components/editable-size-indicator.js +1 -1
  245. package/dist/domain/system-components/exit-tool-mode-fab.d.ts +1 -1
  246. package/dist/domain/system-components/exit-tool-mode-fab.js +1 -1
  247. package/dist/domain/system-components/finalize-action.d.ts +1 -1
  248. package/dist/domain/system-components/finalize-action.js +1 -1
  249. package/dist/domain/system-components/fixed-header.d.ts +1 -1
  250. package/dist/domain/system-components/fixed-header.js +1 -1
  251. package/dist/domain/system-components/floating-header.d.ts +1 -1
  252. package/dist/domain/system-components/floating-header.js +1 -1
  253. package/dist/domain/system-components/generic-dimension.d.ts +1 -1
  254. package/dist/domain/system-components/generic-dimension.js +1 -1
  255. package/dist/domain/system-components/hidden-header.d.ts +1 -1
  256. package/dist/domain/system-components/hidden-header.js +1 -1
  257. package/dist/domain/system-components/hidden-sidebar-footer.d.ts +1 -1
  258. package/dist/domain/system-components/hidden-sidebar-footer.js +1 -1
  259. package/dist/domain/system-components/horizontal-tabs.d.ts +1 -1
  260. package/dist/domain/system-components/horizontal-tabs.js +1 -1
  261. package/dist/domain/system-components/hotspot-drag-handle.d.ts +1 -1
  262. package/dist/domain/system-components/hotspot-drag-handle.js +1 -1
  263. package/dist/domain/system-components/list-selector-dimension-indicator.d.ts +1 -1
  264. package/dist/domain/system-components/list-selector-dimension-indicator.js +1 -1
  265. package/dist/domain/system-components/material-swatch.js +1 -1
  266. package/dist/domain/system-components/offset-anchors.d.ts +1 -1
  267. package/dist/domain/system-components/offset-anchors.js +1 -1
  268. package/dist/domain/system-components/offset-indicator.d.ts +1 -2
  269. package/dist/domain/system-components/offset-indicator.js +1 -1
  270. package/dist/domain/system-components/offset.d.ts +1 -1
  271. package/dist/domain/system-components/offset.js +1 -1
  272. package/dist/domain/system-components/other-action.d.ts +1 -1
  273. package/dist/domain/system-components/other-action.js +1 -1
  274. package/dist/domain/system-components/pivot-point.d.ts +1 -1
  275. package/dist/domain/system-components/pivot-point.js +1 -1
  276. package/dist/domain/system-components/price.js +1 -1
  277. package/dist/domain/system-components/projected-entities.d.ts +1 -1
  278. package/dist/domain/system-components/projected-entities.js +1 -1
  279. package/dist/domain/system-components/property-page.d.ts +1 -1
  280. package/dist/domain/system-components/property-page.js +1 -1
  281. package/dist/domain/system-components/read-sidebar-footer.d.ts +1 -1
  282. package/dist/domain/system-components/read-sidebar-footer.js +1 -1
  283. package/dist/domain/system-components/save-template-thumbnail.js +1 -1
  284. package/dist/domain/system-components/scene-entity-add-fab.js +1 -1
  285. package/dist/domain/system-components/scene-entity-delete-fab.js +1 -1
  286. package/dist/domain/system-components/scene-entity-local-material-override.js +1 -1
  287. package/dist/domain/system-components/scene-entity-material-override.js +1 -1
  288. package/dist/domain/system-components/scene-entity-navigation-hotspot.js +1 -1
  289. package/dist/domain/system-components/scene-entity-object-local-material-override.js +1 -1
  290. package/dist/domain/system-components/scene-entity-object-material-override.js +1 -1
  291. package/dist/domain/system-components/scene-entity-object-remote-material-override.js +1 -1
  292. package/dist/domain/system-components/scene-entity-object-transimissive-material-override.js +1 -1
  293. package/dist/domain/system-components/scene-entity-remote-material-override.js +1 -1
  294. package/dist/domain/system-components/scene-entity-select-hotspot.js +1 -1
  295. package/dist/domain/system-components/scene-entity-transimissive-material-override.js +1 -1
  296. package/dist/domain/system-components/sidebar-tabs.d.ts +1 -1
  297. package/dist/domain/system-components/sidebar-tabs.js +1 -1
  298. package/dist/domain/system-components/simple-summary.js +1 -1
  299. package/dist/domain/system-components/size.d.ts +1 -1
  300. package/dist/domain/system-components/size.js +1 -1
  301. package/dist/domain/system-components/sketching-draw.d.ts +1 -1
  302. package/dist/domain/system-components/sketching-draw.js +1 -1
  303. package/dist/domain/system-components/sketching-edit.d.ts +1 -1
  304. package/dist/domain/system-components/sketching-edit.js +1 -1
  305. package/dist/domain/system-components/sketching-line.d.ts +1 -1
  306. package/dist/domain/system-components/sketching-line.js +1 -1
  307. package/dist/domain/system-components/sketching-rectangle.d.ts +1 -1
  308. package/dist/domain/system-components/sketching-rectangle.js +1 -1
  309. package/dist/domain/system-components/sketching.d.ts +1 -1
  310. package/dist/domain/system-components/sketching.js +1 -1
  311. package/dist/domain/system-components/snap-axis.d.ts +1 -1
  312. package/dist/domain/system-components/snap-axis.js +1 -1
  313. package/dist/domain/system-components/snap-edge.d.ts +1 -1
  314. package/dist/domain/system-components/snap-edge.js +1 -1
  315. package/dist/domain/system-components/snap-plane.d.ts +1 -1
  316. package/dist/domain/system-components/snap-plane.js +1 -1
  317. package/dist/domain/system-components/snap-point.d.ts +1 -1
  318. package/dist/domain/system-components/snap-point.js +1 -1
  319. package/dist/domain/system-components/summary-component.js +1 -1
  320. package/dist/domain/system-components/tool-menu-fab.d.ts +1 -1
  321. package/dist/domain/system-components/tool-menu-fab.js +1 -1
  322. package/dist/domain/system-components/toolbar.d.ts +1 -1
  323. package/dist/domain/system-components/toolbar.js +1 -1
  324. package/dist/domain/system-components/universal-sidebar-footer.d.ts +1 -1
  325. package/dist/domain/system-components/universal-sidebar-footer.js +1 -1
  326. package/dist/domain/utils/eval-cache.d.ts +1 -2
  327. package/dist/domain/utils/memo-eval.d.ts +1 -3
  328. package/dist/editor/domain-editors/use-implementation-files.d.ts +7 -6
  329. package/dist/editor/domain-editors/use-implementation-files.js +1 -1
  330. package/dist/legacy/domain-cli/gen/configurator-builder.js +21 -8
  331. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  332. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  333. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +18 -19
  334. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-configurator.js +15 -16
  335. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +22 -23
  336. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-configurator.js +15 -16
  337. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/generator-shared.d.ts +7 -2
  338. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/generator-shared.js +8 -12
  339. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/index.d.ts +1 -1
  340. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/index.js +1 -1
  341. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/webhook-builders.js +7 -7
  342. package/dist/phoenix/scripts/build-admin.js +1 -1
  343. package/dist/react-sdk/application-runtime/hooks/use-domain-application-props.d.ts +5 -2
  344. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.d.ts +1 -1
  345. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.js +1 -1
  346. package/package.json +3 -3
  347. package/dist/domain/core/json-schema.js +0 -1
  348. package/dist/domain/core/reflection.js +0 -1
  349. /package/dist/domain/core/{enhanced-json-schema.js → decoder/decoder.js} +0 -0
  350. /package/dist/domain/core/{alias.d.ts → model/alias.d.ts} +0 -0
  351. /package/dist/domain/core/{alias.js → model/alias.js} +0 -0
  352. /package/dist/domain/core/{common-definitions.d.ts → model/common-definitions.d.ts} +0 -0
  353. /package/dist/domain/core/{common-definitions.js → model/common-definitions.js} +0 -0
  354. /package/dist/domain/core/{component.js → model/component.js} +0 -0
  355. /package/dist/domain/core/{model.d.ts → model/model.d.ts} +0 -0
  356. /package/dist/domain/core/{model.js → model/model.js} +0 -0
  357. /package/dist/domain/core/{preset.d.ts → model/preset.d.ts} +0 -0
  358. /package/dist/domain/core/{preset.js → model/preset.js} +0 -0
  359. /package/dist/domain/core/{schema-validator-ajv.d.ts → schema/create-ajv-schema-validator.d.ts} +0 -0
  360. /package/dist/domain/core/{schema-validator-ajv.js → schema/create-ajv-schema-validator.js} +0 -0
  361. /package/dist/domain/core/{schema-validator-csp.d.ts → schema/create-csp-schema-validator.d.ts} +0 -0
  362. /package/dist/domain/core/{schema-validator-csp.js → schema/create-csp-schema-validator.js} +0 -0
  363. /package/dist/domain/core/{enhanced-json-schema.d.ts → schema/enhanced-json-schema.d.ts} +0 -0
  364. /package/dist/domain/core/{schema-validator.js → schema/enhanced-json-schema.js} +0 -0
  365. /package/dist/domain/core/{json-schema.d.ts → schema/extended-schema-validator.d.ts} +0 -0
  366. /package/dist/domain/core/{schema-validator.d.ts → schema/schema-validator.d.ts} +0 -0
@@ -1,5 +1,4 @@
1
- import type { SystemComponentType } from '../core/component.js';
2
- import type { SchemaOfObject } from '../core/reflection.js';
1
+ import { type SchemaOfObject, type SystemComponentType } from '../core/index.js';
3
2
  export declare class SystemComponentBuilder<NAME extends string, COMPONENT_STATE extends Record<string, unknown>, WRITABLE_KEYS extends keyof COMPONENT_STATE> {
4
3
  private readonly name;
5
4
  private readonly writableKeys;
@@ -1 +1 @@
1
- import e from"lodash-es/pick.js";import{getCommonPhxDefinitions as t}from"../core/index.js";import{extendedSchemaValidator as i}from"../core/json-schema.js";export class SystemComponentBuilder{name;writableKeys;jsonSchema;constructor(e,t,i){this.name=e,this.writableKeys=t,this.jsonSchema=i}static component(e){return new SystemComponentBuilder(e,[],{type:"object",properties:{},required:[],additionalProperties:!1})}withState(e){return new SystemComponentBuilder(this.name,[],e)}withWritableKeys(e){return new SystemComponentBuilder(this.name,e,this.jsonSchema)}build(){let s=t(),r={...this.jsonSchema,definitions:{...s,...this.jsonSchema.definitions}};return{name:this.name,writableKeys:this.writableKeys,schema:this.jsonSchema,validateState:i.compile(r),validateWritableState:i.compile({...r,properties:e(this.jsonSchema.properties,this.writableKeys),required:this.jsonSchema.required?.filter(e=>this.writableKeys.includes(e))})}}}
1
+ import e from"lodash-es/pick.js";import{extendedSchemaValidator as t,getCommonPhxDefinitions as i}from"../core/index.js";export class SystemComponentBuilder{name;writableKeys;jsonSchema;constructor(e,t,i){this.name=e,this.writableKeys=t,this.jsonSchema=i}static component(e){return new SystemComponentBuilder(e,[],{type:"object",properties:{},required:[],additionalProperties:!1})}withState(e){return new SystemComponentBuilder(this.name,[],e)}withWritableKeys(e){return new SystemComponentBuilder(this.name,e,this.jsonSchema)}build(){let s=i(),r={...this.jsonSchema,definitions:{...s,...this.jsonSchema.definitions}};return{name:this.name,writableKeys:this.writableKeys,schema:this.jsonSchema,validateState:t.compile(r),validateWritableState:t.compile({...r,properties:e(this.jsonSchema.properties,this.writableKeys),required:this.jsonSchema.required?.filter(e=>this.writableKeys.includes(e))})}}}
@@ -1,7 +1,5 @@
1
1
  import type { SessionRole } from '@salsita-ai/contracts/api';
2
- import type { AnonymousExpression, ExpressionContext } from '../core/expression.js';
3
- import type { DomainEntity, DomainEntityId } from '../core/model.js';
4
- import type { DomainState } from '../core/state.js';
2
+ import type { AnonymousExpression, DomainEntity, DomainEntityId, DomainState, ExpressionContext } from '../core/index.js';
5
3
  import { type Viewport } from './viewport-state-component.js';
6
4
  export interface ComponentSystemFilterState {
7
5
  navigationState: string | undefined;
@@ -1 +1 @@
1
- import{createVirtualEntityId as t}from"../core/model.js";export const systemVirtualEntityId=t("system");
1
+ import{createVirtualEntityId as t}from"../core/index.js";export const systemVirtualEntityId=t("system");
@@ -1,4 +1,4 @@
1
- import type { EntityId } from '../core/model.js';
1
+ import { type EntityId } from '../core/index.js';
2
2
  export type ToolStateComponentState = {
3
3
  readonly activeState: string;
4
4
  };
@@ -1 +1 @@
1
- import{isSnapshotInstance as t}from"../core/component.js";import{SystemComponentBuilder as o}from"./system-component-builder.js";import{systemVirtualEntityId as e}from"./system-virtual-entity.js";export const toolStateComponent=o.component("toolState").withState({type:"object",properties:{activeState:{type:"string"}},required:["activeState"],additionalProperties:!1}).withWritableKeys(["activeState"]).build();export const isToolStateComponentSnapshot=o=>t(o,"singleton",toolStateComponent);export const isSystemToolStateComponentSnapshot=t(e,"singleton",toolStateComponent);
1
+ import{isSnapshotInstance as t}from"../core/index.js";import{SystemComponentBuilder as o}from"./system-component-builder.js";import{systemVirtualEntityId as e}from"./system-virtual-entity.js";export const toolStateComponent=o.component("toolState").withState({type:"object",properties:{activeState:{type:"string"}},required:["activeState"],additionalProperties:!1}).withWritableKeys(["activeState"]).build();export const isToolStateComponentSnapshot=o=>t(o,"singleton",toolStateComponent);export const isSystemToolStateComponentSnapshot=t(e,"singleton",toolStateComponent);
@@ -1,6 +1,5 @@
1
1
  import type { Localizable } from '@salsita-ai/common/utils';
2
- import type { ComponentInstance, StateOfComponent, SystemComponentType, SystemComponentTypeConstraint, WritableStateOfComponent } from '../core/component.js';
3
- import type { DomainEntity, EntityByType, EntityId } from '../core/model.js';
2
+ import type { ComponentInstance, DomainEntity, EntityByType, EntityId, StateOfComponent, SystemComponentType, SystemComponentTypeConstraint, WritableStateOfComponent } from '../core/index.js';
4
3
  import type { OneComponentFilter } from './component-reader-types.js';
5
4
  export interface ComponentModification<COMPONENT_TYPE extends SystemComponentTypeConstraint> {
6
5
  kind: 'modifyComponent';
@@ -1,4 +1,4 @@
1
- import type { EntityId } from '../core/model.js';
1
+ import { type EntityId } from '../core/index.js';
2
2
  export type ViewStateComponentState = {
3
3
  readonly activeState: string;
4
4
  };
@@ -1 +1 @@
1
- import{isSnapshotInstance as t}from"../core/component.js";import{SystemComponentBuilder as e}from"./system-component-builder.js";import{systemVirtualEntityId as o}from"./system-virtual-entity.js";export const viewStateComponent=e.component("viewState").withState({type:"object",properties:{activeState:{type:"string"}},required:["activeState"],additionalProperties:!1}).withWritableKeys(["activeState"]).build();export const isViewComponentSnapshot=e=>t(e,"singleton",viewStateComponent);export const isSystemViewComponentSnapshot=t(o,"singleton",viewStateComponent);
1
+ import{isSnapshotInstance as t}from"../core/index.js";import{SystemComponentBuilder as e}from"./system-component-builder.js";import{systemVirtualEntityId as o}from"./system-virtual-entity.js";export const viewStateComponent=e.component("viewState").withState({type:"object",properties:{activeState:{type:"string"}},required:["activeState"],additionalProperties:!1}).withWritableKeys(["activeState"]).build();export const isViewComponentSnapshot=e=>t(e,"singleton",viewStateComponent);export const isSystemViewComponentSnapshot=t(o,"singleton",viewStateComponent);
@@ -1,4 +1,4 @@
1
- import type { EntityId } from '../core/model.js';
1
+ import { type EntityId } from '../core/index.js';
2
2
  /**
3
3
  * A responsive class the configurator container currently satisfies. The values mirror the
4
4
  * responsive flags computed by the UI layer from the theme breakpoints (`isPhone`, `isMobile`,
@@ -1 +1 @@
1
- import{isSnapshotInstance as t}from"../core/component.js";import{SystemComponentBuilder as e}from"./system-component-builder.js";import{systemVirtualEntityId as o}from"./system-virtual-entity.js";export const VIEWPORTS=["phone","mobile","tablet","desktop","landscape","portrait"];export const viewportStateComponent=e.component("viewportState").withState({type:"object",properties:{active:{oneOf:[{type:"array",items:{type:"string",enum:[...VIEWPORTS]}},{type:"null"}]}},required:["active"],additionalProperties:!1,tsType:"ViewportStateComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"ViewportStateComponentState"}]}).withWritableKeys(["active"]).build();export const isViewportStateComponentSnapshot=e=>t(e,"singleton",viewportStateComponent);export const isSystemViewportStateComponentSnapshot=t(o,"singleton",viewportStateComponent);
1
+ import{isSnapshotInstance as t}from"../core/index.js";import{SystemComponentBuilder as e}from"./system-component-builder.js";import{systemVirtualEntityId as o}from"./system-virtual-entity.js";export const VIEWPORTS=["phone","mobile","tablet","desktop","landscape","portrait"];export const viewportStateComponent=e.component("viewportState").withState({type:"object",properties:{active:{oneOf:[{type:"array",items:{type:"string",enum:[...VIEWPORTS]}},{type:"null"}]}},required:["active"],additionalProperties:!1,tsType:"ViewportStateComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"ViewportStateComponentState"}]}).withWritableKeys(["active"]).build();export const isViewportStateComponentSnapshot=e=>t(e,"singleton",viewportStateComponent);export const isSystemViewportStateComponentSnapshot=t(o,"singleton",viewportStateComponent);
@@ -3,7 +3,7 @@ import type { StateUpdate, UpdateFactory } from '../components/updates.js';
3
3
  import type { DomainContextSystems } from '../domain-context/domain-context-systems.js';
4
4
  import type { IdSequence } from '../domain-context/store-system/next-domain-entity-id.js';
5
5
  import type { ExpressionContext } from './expression.js';
6
- import type { $DomainEntity, DomainEntity } from './model.js';
6
+ import type { $DomainEntity, DomainEntity } from './model/index.js';
7
7
  import type { DomainState } from './state.js';
8
8
  /**
9
9
  * The parameter and result types of the actions an application declares under `actions`, keyed by
@@ -59,7 +59,7 @@ export type AnyActionContext = ActionContext<any, any, any, any, any, any, any,
59
59
  */
60
60
  export type ActionImplementation<ENTITIES extends DomainEntity<string>, ALLOWED_ROOT_ENTITIES extends ENTITIES, $MAP extends Record<ENTITIES['type'], $DomainEntity<ENTITIES>>, PUBLISHED_DATA extends Record<string, unknown>, SESSION_DATA extends Record<string, unknown>, FRONTEND_DATA extends Record<string, unknown>, NAVIGATION_STATES extends string, VIEW_STATES extends string, TOOL_STATES extends string, EXPORT_STATES extends string, PARAMS, RESULT> = (params: PARAMS, state: DomainState<ENTITIES>, context: ActionContext<ENTITIES, ALLOWED_ROOT_ENTITIES, $MAP, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA, NAVIGATION_STATES, VIEW_STATES, TOOL_STATES, EXPORT_STATES>) => PreparedAction<ENTITIES, RESULT>;
61
61
  export type AnyActionImplementation = ActionImplementation<any, any, any, any, any, any, any, any, any, any, any, unknown>;
62
- /** The implementations of every declared action by name, as the generated barrel merges them from `src/actions/`. */
62
+ /** The implementations of every declared action by name, as `DomainBuilder.withActionModules` merges them from `src/actions/`. */
63
63
  export type ActionImplementations<ENTITIES extends DomainEntity<string>, ALLOWED_ROOT_ENTITIES extends ENTITIES, $MAP extends Record<ENTITIES['type'], $DomainEntity<ENTITIES>>, PUBLISHED_DATA extends Record<string, unknown>, SESSION_DATA extends Record<string, unknown>, FRONTEND_DATA extends Record<string, unknown>, NAVIGATION_STATES extends string, VIEW_STATES extends string, TOOL_STATES extends string, EXPORT_STATES extends string, ACTION_TYPES extends ActionTypes> = {
64
64
  readonly [NAME in keyof ACTION_TYPES]: ActionImplementation<ENTITIES, ALLOWED_ROOT_ENTITIES, $MAP, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA, NAVIGATION_STATES, VIEW_STATES, TOOL_STATES, EXPORT_STATES, ACTION_TYPES[NAME]['params'], ACTION_TYPES[NAME]['result']>;
65
65
  };
@@ -0,0 +1,6 @@
1
+ import type { Decoder } from './decoder.js';
2
+ /**
3
+ * Creates the decoder of data that must match a JSON schema. `subject` is what the data is, as the
4
+ * error names it, for example `Session data`.
5
+ */
6
+ export declare const createDecoder: <DATA>(schema: object, subject: string) => Decoder<DATA>;
@@ -0,0 +1 @@
1
+ import{extendedSchemaValidator as r}from"../schema/index.js";export const createDecoder=(e,o)=>t=>{let i=r.compile(e);if(!i(t))throw Error(`${o} is not valid: ${r.errorsText(i.errors)}`);return t};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Turns data of unknown shape into data of a known type, and throws when the data does not match.
3
+ * Everything that enters a domain from outside goes through one: published, session, frontend and
4
+ * backend data.
5
+ */
6
+ export type Decoder<DATA> = (data: unknown) => DATA;
@@ -0,0 +1,2 @@
1
+ export { createDecoder } from './create-decoder.js';
2
+ export type { Decoder } from './decoder.js';
@@ -0,0 +1 @@
1
+ export{createDecoder}from"./create-decoder.js";
@@ -2,8 +2,7 @@ import type { ExtendedJsonSchema } from '@salsita-ai/common/utils';
2
2
  import type { ActionDefinitions, AnyActionImplementations } from './action.js';
3
3
  import type { Expression } from './expression.js';
4
4
  import type { MigrateFunction } from './migrations.js';
5
- import type { $DomainEntity, DomainEntity, EntityByType } from './model.js';
6
- import type { $DomainEntityReflection, EntityReflections, SchemaOfObject } from './reflection.js';
5
+ import type { $DomainEntity, $DomainEntityReflection, DomainEntity, EntityByType, EntityReflections, SchemaOfObject } from './model/index.js';
7
6
  type $EntityReflections<ENTITIES extends DomainEntity<string>> = {
8
7
  [TYPE in ENTITIES['type']]: $DomainEntityReflection<$DomainEntity<EntityByType<ENTITIES, TYPE>>>;
9
8
  };
@@ -1 +1 @@
1
- import{migrateCommonAdminDomain as t}from"../admin-domain/implementation/common-admin-migrations.js";import{extendedSchemaValidator as r}from"./json-schema.js";export class DomainFactory{context;modelVersion;hasBackendData;constructor(t){this.context=t,this.modelVersion=t.modelVersion,this.hasBackendData=void 0!==t.backendData}parsePublishedData=t=>{let e=r.compile(this.context.publishedData);if(!e(t))throw Error(`Admin data is not valid: ${r.errorsText(e.errors)}`);return t};parseSessionData=t=>{let e=r.compile(this.context.sessionData);if(!e(t))throw Error(`Session data is not valid: ${r.errorsText(e.errors)}`);return t};parseFrontendData=t=>{let e=r.compile(this.context.frontendData);if(!e(t))throw Error(`Frontend data is not valid: ${r.errorsText(e.errors)}`);return t};parseBackendData=t=>{if(void 0===this.context.backendData)throw Error("Backend data is not supported for this domain");let e=r.compile(this.context.backendData);if(!e(t))throw Error(`Backend data is not valid: ${r.errorsText(e.errors)}`);return t};validateAndMigrateState=(r,e)=>{let a=this.context.isAdminDomain?t(r):r;return this.context.migrate({state:a,version:e},{trimExtraProperties:!1})}}
1
+ import{migrateCommonAdminDomain as t}from"../admin-domain/implementation/common-admin-migrations.js";import{createDecoder as a}from"./decoder/index.js";export class DomainFactory{context;modelVersion;hasBackendData;constructor(t){this.context=t,this.modelVersion=t.modelVersion,this.hasBackendData=void 0!==t.backendData}parsePublishedData=t=>a(this.context.publishedData,"Admin data")(t);parseSessionData=t=>a(this.context.sessionData,"Session data")(t);parseFrontendData=t=>a(this.context.frontendData,"Frontend data")(t);parseBackendData=t=>{if(void 0===this.context.backendData)throw Error("Backend data is not supported for this domain");return a(this.context.backendData,"Backend data")(t)};validateAndMigrateState=(a,e)=>{let n=this.context.isAdminDomain?t(a):a;return this.context.migrate({state:n,version:e},{trimExtraProperties:!1})}}
@@ -1,6 +1,5 @@
1
1
  import type { AnyExpressions, ExpressionContext } from './expression.js';
2
- import { type $DomainEntity, type DomainEntity, type DomainEntityId, type EntityByType } from './model.js';
3
- import type { AnyEntityReflections } from './reflection.js';
2
+ import { type $DomainEntity, type AnyEntityReflections, type DomainEntity, type DomainEntityId, type EntityByType } from './model/index.js';
4
3
  import type { DomainState } from './state.js';
5
4
  export type AllowedRootEntityTypes<ALLOWED_ROOT_ENTITIES extends DomainEntity<string>> = ReadonlyArray<ALLOWED_ROOT_ENTITIES['type']>;
6
5
  export type AnyAllowedRootEntityTypes = AllowedRootEntityTypes<DomainEntity<string>>;
@@ -1 +1 @@
1
- import{createCacheToken as t,getStickyCache as e}from"@salsita-ai/common/utils";import{domainEntityTypeFromId as i}from"./model.js";let r=t(),o=t();export class Domain{_context;constructor(t){this._context=t}getEntity=(t,i)=>{let r=e(i,o),n=r.get("entityMap");if(n)return n.get(t);let s=(t=>{let e=new Map;for(let i of t){if(e.has(i.id))throw Error(`Error while creating a UniqueEntityMap for caching of domain queries. Duplicate entity id ${i.id} encountered!`);e.set(i.id,i)}return e})(i.entities);return r.put("entityMap",s),s.get(t)};get$Entity=(t,i)=>{let o=e(i,r),n=o.get(t);if(n)return n;let s=this.getEntity(t,i);if(!s)throw Error(`Entity ${t} does not exist`);let a={...s},l=this._context.selectors.getDomainExpressions()[s.type];return l&&Object.entries(l).forEach(([t,e])=>{Object.defineProperty(a,t,{enumerable:!0,get:()=>e.evaluate(s.id,i,this._context.selectors.getExpressionContext())})}),Object.defineProperty(a,"_raw",{enumerable:!0,writable:!1,value:s}),Object.defineProperty(a,"_state",{enumerable:!0,writable:!1,value:i}),o.put(t,a),a};get$Entities=(t,e)=>t.map(t=>this.get$Entity(t,e));getRoot$Entity=t=>this.get$Entity(t.rootEntityId,t);validateExpressions=t=>{if(!this._context.selectors.getAllowedRootEntityTypes().includes(t.rootEntityType))throw Error(`Entity type ${t.rootEntityType} is not allowed as root entity`);if(!this.getEntity(t.rootEntityId,t))throw Error(`Root entity ${t.rootEntityId} was not found!`);t.entities.forEach(e=>{let i=this._context.selectors.getDomainExpressions()[e.type];void 0!==i&&Object.values(i).forEach(i=>{!0===i.meta.alwaysEvaluate&&i.evaluate(e.id,t,this._context.selectors.getExpressionContext())})})};validateEntity=t=>{let e=this._context.selectors.getEntityReflections()[t.type];if(!e)throw Error(`Unknown entity type ${t.type}`);return e._meta.validator(t)?{success:!0}:{success:!1,errors:e._meta.validator.errors?.map(t=>`${t.instancePath} ${t.message}`.trim())??[]}};getWritableEntityKeys=(t,e)=>{let r=i(t),o=this._context.selectors.getDomainExpressions()[r];return e.filter(t=>"id"!==t&&"type"!==t&&"_raw"!==t&&o?.[t]===void 0)}}
1
+ import{createCacheToken as t,getStickyCache as e}from"@salsita-ai/common/utils";import{domainEntityTypeFromId as i}from"./model/index.js";let r=t(),o=t();export class Domain{_context;constructor(t){this._context=t}getEntity=(t,i)=>{let r=e(i,o),n=r.get("entityMap");if(n)return n.get(t);let s=(t=>{let e=new Map;for(let i of t){if(e.has(i.id))throw Error(`Error while creating a UniqueEntityMap for caching of domain queries. Duplicate entity id ${i.id} encountered!`);e.set(i.id,i)}return e})(i.entities);return r.put("entityMap",s),s.get(t)};get$Entity=(t,i)=>{let o=e(i,r),n=o.get(t);if(n)return n;let s=this.getEntity(t,i);if(!s)throw Error(`Entity ${t} does not exist`);let a={...s},l=this._context.selectors.getDomainExpressions()[s.type];return l&&Object.entries(l).forEach(([t,e])=>{Object.defineProperty(a,t,{enumerable:!0,get:()=>e.evaluate(s.id,i,this._context.selectors.getExpressionContext())})}),Object.defineProperty(a,"_raw",{enumerable:!0,writable:!1,value:s}),Object.defineProperty(a,"_state",{enumerable:!0,writable:!1,value:i}),o.put(t,a),a};get$Entities=(t,e)=>t.map(t=>this.get$Entity(t,e));getRoot$Entity=t=>this.get$Entity(t.rootEntityId,t);validateExpressions=t=>{if(!this._context.selectors.getAllowedRootEntityTypes().includes(t.rootEntityType))throw Error(`Entity type ${t.rootEntityType} is not allowed as root entity`);if(!this.getEntity(t.rootEntityId,t))throw Error(`Root entity ${t.rootEntityId} was not found!`);t.entities.forEach(e=>{let i=this._context.selectors.getDomainExpressions()[e.type];void 0!==i&&Object.values(i).forEach(i=>{!0===i.meta.alwaysEvaluate&&i.evaluate(e.id,t,this._context.selectors.getExpressionContext())})})};validateEntity=t=>{let e=this._context.selectors.getEntityReflections()[t.type];if(!e)throw Error(`Unknown entity type ${t.type}`);return e._meta.validator(t)?{success:!0}:{success:!1,errors:e._meta.validator.errors?.map(t=>`${t.instancePath} ${t.message}`.trim())??[]}};getWritableEntityKeys=(t,e)=>{let r=i(t),o=this._context.selectors.getDomainExpressions()[r];return e.filter(t=>"id"!==t&&"type"!==t&&"_raw"!==t&&o?.[t]===void 0)}}
@@ -2,10 +2,9 @@ import type { SessionRole } from '@salsita-ai/contracts/api';
2
2
  import type { ComponentReader } from '../domain-runtime/domain-context/index.js';
3
3
  import type { CollisionProjections, ConstraintProjections, PositionProjections, ProjectedEntitiesProjections, SnappingProjections } from '../projections/index.js';
4
4
  import type { SketchingProjections } from '../sketching/index.js';
5
- import type { TypeOrAlias } from './alias.js';
6
5
  import type { Domain } from './domain.js';
7
6
  import type { MigrateFunction } from './migrations.js';
8
- import type { $DomainEntity, DomainEntity } from './model.js';
7
+ import type { $DomainEntity, DomainEntity, TypeOrAlias } from './model/index.js';
9
8
  import type { DomainState } from './state.js';
10
9
  export interface ExpressionContext<ENTITIES extends DomainEntity<string>, ALLOWED_ROOT_ENTITIES extends ENTITIES, PUBLISHED_DATA extends Record<string, unknown>, SESSION_DATA extends Record<string, unknown>, FRONTEND_DATA extends Record<string, unknown>> {
11
10
  readonly mode: 'owner' | 'read' | 'finalize';
@@ -1,18 +1,9 @@
1
- export type { EnhancedJsonObjectSchemaType, EnhancedJsonSchemaType, JsonSchemaType, MemberImport, } from './enhanced-json-schema.js';
2
- export type { ActionContext, ActionDefinition, ActionDefinitions, ActionImplementation, ActionImplementations, ActionStateChange, ActionTypes, AnyActionContext, AnyActionImplementation, AnyActionImplementations, PreparedAction, } from './action.js';
3
- export { extendedSchemaValidator, getExtendedSchemaValidator } from './json-schema.js';
4
- export { _unsafeBuildDomainEntityId, domainEntityTypeFromId, createVirtualEntityId, isDomainEntityId, isVirtualEntityId, VirtualEntityIdSchema, isEqualEntityTypeAndId, parseDomainEntityId, DomainEntityIdSchema, DomainEntitySchema, $DomainEntitySchema, } from './model.js';
5
- export type { $DomainEntity, DomainEntity, VirtualEntityId, DomainEntityId, EntityIdSchema, EntityByType, EntityId, } from './model.js';
6
- export type { PartialSchemaOfObject, SchemaOfObject, EnumLike, EntityReflections } from './reflection.js';
7
- export { type Migration, MigrateFunctionBuilder, type MigrateFunction, type VersionedState, type MigrateFunctionOptions, type AnyVersionedState, StateMigrationError, isStateMigrationError, } from './migrations.js';
8
- export * from './reflection.js';
9
- export type { ComponentInstance, StateOfComponent, WritableStateOfComponent, SystemComponentType, SystemComponentTypeConstraint, ComponentSnapshot, } from './component.js';
10
- export { isEqualComponentInstance, areEqualComponentSnapshots, isEqualComponentSnapshot, isSnapshotOfComponentType, isInstanceOfComponentType, getComponentInstanceKey, getComponentSnapshotKey, } from './component.js';
11
- export { type DomainState, type DomainStateFactory, createInitialDomainState } from './state.js';
12
- export type * from './expression.js';
13
- export * from './alias.js';
14
- export * from './domain.js';
1
+ export type * from './action.js';
2
+ export * from './decoder/index.js';
15
3
  export * from './domain-factory.js';
16
- export * from './preset.js';
17
- export { getCommonPhxDefinitions, availableDefinitions } from './common-definitions.js';
18
- export type { PhxValidateFunction, PhxValidationError, SchemaValidator } from './schema-validator.js';
4
+ export * from './domain.js';
5
+ export type * from './expression.js';
6
+ export * from './migrations.js';
7
+ export * from './model/index.js';
8
+ export * from './schema/index.js';
9
+ export * from './state.js';
@@ -1 +1 @@
1
- export{extendedSchemaValidator,getExtendedSchemaValidator}from"./json-schema.js";export{_unsafeBuildDomainEntityId,domainEntityTypeFromId,createVirtualEntityId,isDomainEntityId,isVirtualEntityId,VirtualEntityIdSchema,isEqualEntityTypeAndId,parseDomainEntityId,DomainEntityIdSchema,DomainEntitySchema,$DomainEntitySchema}from"./model.js";export{MigrateFunctionBuilder,StateMigrationError,isStateMigrationError}from"./migrations.js";export*from"./reflection.js";export{isEqualComponentInstance,areEqualComponentSnapshots,isEqualComponentSnapshot,isSnapshotOfComponentType,isInstanceOfComponentType,getComponentInstanceKey,getComponentSnapshotKey}from"./component.js";export{createInitialDomainState}from"./state.js";export*from"./alias.js";export*from"./domain.js";export*from"./domain-factory.js";export*from"./preset.js";export{getCommonPhxDefinitions,availableDefinitions}from"./common-definitions.js";
1
+ export*from"./decoder/index.js";export*from"./domain-factory.js";export*from"./domain.js";export*from"./migrations.js";export*from"./model/index.js";export*from"./schema/index.js";export*from"./state.js";
@@ -1,6 +1,5 @@
1
1
  import { type Logger } from '@salsita-ai/common/utils';
2
- import type { DomainEntity } from './model.js';
3
- import type { EntityReflections } from './reflection.js';
2
+ import type { DomainEntity, EntityReflections } from './model/index.js';
4
3
  /**
5
4
  * Thrown when domain state cannot be validated/migrated to the latest model
6
5
  * version: an entity is invalid against its schema, an entity type or model
@@ -1,6 +1,6 @@
1
1
  import { type ExtendedJsonSchema } from '@salsita-ai/common/utils';
2
+ import type { PhxValidateFunction } from '../schema/index.js';
2
3
  import type { EntityId } from './model.js';
3
- import type { PhxValidateFunction } from './schema-validator.js';
4
4
  /**
5
5
  * Definition of how the component looks like, it's name, state and other properties. It is used to instantiate components.
6
6
  */
@@ -0,0 +1,6 @@
1
+ export * from './alias.js';
2
+ export * from './common-definitions.js';
3
+ export * from './component.js';
4
+ export * from './model.js';
5
+ export * from './preset.js';
6
+ export * from './reflection.js';
@@ -0,0 +1 @@
1
+ export*from"./alias.js";export*from"./common-definitions.js";export*from"./component.js";export*from"./model.js";export*from"./preset.js";export*from"./reflection.js";
@@ -1,6 +1,6 @@
1
1
  import type { ExtendedJsonSchema } from '@salsita-ai/common/utils';
2
+ import { type PhxValidateFunction } from '../schema/index.js';
2
3
  import { type $DomainEntity, type DomainEntity, type EntityByType, type EntityId } from './model.js';
3
- import type { PhxValidateFunction } from './schema-validator.js';
4
4
  type RequiredKeys<T> = {
5
5
  [K in keyof T]: undefined extends T[K] ? never : K;
6
6
  }[keyof T];
@@ -0,0 +1 @@
1
+ import{extendedSchemaValidator as t}from"../schema/index.js";import{domainEntityTypeFromId as e,isDomainEntityId as s}from"./model.js";export class SchemaReflection{_meta;constructor(e,s){this._meta={name:e,schema:s,validator:t.compile(s)}}is=t=>this._meta.validator(t);assert(t){if(!this._meta.validator(t))throw Error(`Expected value to match schema of '${this._meta.name}' but got ${t}`)}}export class EnumReflection extends SchemaReflection{constructor(t,e){for(let s of(super(t,e),e.enum))Object.defineProperty(this,s,{value:s,writable:!1,enumerable:!0,configurable:!1})}values=()=>this._meta.schema.enum}let o=class BaseDomainEntityReflection{type;constructor(t){this.type=t}is=t=>t.type===this.type;assert(t){if(!this.is(t))throw Error(`Expected entity #${t.id} to be of type ${this.type} but got ${t.type}`)}isId=t=>s(t)&&e(t)===this.type;assertId(t){if(!this.isId(t))throw Error(`Expected entity id to be of type ${this.type} but got ${t}`)}assertIds(t){t.forEach(t=>{this.assertId(t)})}};export class DomainEntityReflection extends o{_meta;constructor(e,s){super(e);let o=s.reduce((t,e)=>{let s=e.$defs;return"object"==typeof s&&null!==s&&Object.assign(t,s),t},{}),r={type:"object",properties:{id:{type:"string",pattern:`^${e}-[0-9]+$`},type:{type:"string",const:e},...s.reduce((t,e)=>({...t,...e.properties}),{})},required:["id","type",...s.flatMap(t=>t.required??[])],additionalProperties:!1},i={...r,$defs:o};this._meta={name:e,schema:r,validator:t.compile(i)}}}let r=class $DomainEntityReflectionClass extends o{expressions;constructor(t,e,s){super(t),this.expressions=e,Object.assign(this,s)}};export const $DomainEntityReflection=r;let i=class BaseAliasReflection{name;types;typeSet;constructor(t,e){this.name=t,this.types=e,this.typeSet=new Set(e)}is=t=>this.typeSet.has(t.type);assert(t){if(!this.is(t))throw Error(`Expected entity #${t.id} to be a member of alias ${this.name} but got ${t.type}`)}isId=t=>s(t)&&this.typeSet.has(e(t));assertId(t){if(!this.isId(t))throw Error(`Expected entity id to be of a member of alias ${this.name} but got ${t}`)}assertIds(t){t.forEach(t=>{this.assertId(t)})}};export class RawAliasReflection extends i{reflections;constructor(t,e){super(t,e.map(t=>t.type)),this.reflections=e}}let a=class EnhancedAliasReflectionClass extends i{constructor(t,e,s){super(t,e),Object.assign(this,s)}};export const EnhancedAliasReflection=a;export function assertString(t){if("string"!=typeof t)throw Error(`Expected value to be a string but got ${t}`)}export function assertNumber(t){if("number"!=typeof t)throw Error(`Expected value to be a number but got ${t}`)}export function assertBoolean(t){if("boolean"!=typeof t)throw Error(`Expected value to be a boolean but got ${t}`)}
@@ -0,0 +1 @@
1
+ import{createAjvSchemaValidator as e}from"./create-ajv-schema-validator.js";import{createCspSchemaValidator as a}from"./create-csp-schema-validator.js";let t="csp-compatible"===globalThis.PHX_SCHEMA_VALIDATOR?a:e;export const getExtendedSchemaValidator=()=>{let e=t();return e.addKeyword("tsType"),e.addKeyword("import"),e.addKeyword("declared"),e};export const extendedSchemaValidator=getExtendedSchemaValidator();
@@ -0,0 +1,3 @@
1
+ export type { EnhancedJsonObjectSchemaType, EnhancedJsonSchemaType, JsonSchemaType, MemberImport, } from './enhanced-json-schema.js';
2
+ export { extendedSchemaValidator, getExtendedSchemaValidator } from './extended-schema-validator.js';
3
+ export type { PhxValidateFunction, PhxValidationError, SchemaValidator } from './schema-validator.js';
@@ -0,0 +1 @@
1
+ export{extendedSchemaValidator,getExtendedSchemaValidator}from"./extended-schema-validator.js";
@@ -0,0 +1 @@
1
+ export{};
@@ -1,5 +1,4 @@
1
- import type { ComponentSnapshot, SystemComponentTypeConstraint } from './component.js';
2
- import type { DomainEntity } from './model.js';
1
+ import type { ComponentSnapshot, DomainEntity, SystemComponentTypeConstraint } from './model/index.js';
3
2
  export interface DomainState<ENTITIES extends DomainEntity<string>> {
4
3
  readonly rootEntityId: ENTITIES['id'];
5
4
  readonly rootEntityType: ENTITIES['type'];
@@ -1,11 +1,6 @@
1
1
  import { type ExtendedJsonSchema } from '@salsita-ai/common/utils';
2
- import type { ActionDefinition, AnyActionImplementations } from './core/action.js';
3
- import { type AliasMap, type ExpandAlias, type TypeOrAlias } from './core/alias.js';
4
- import type { AnonymousExpression } from './core/expression.js';
5
- import { DomainFactory } from './core/index.js';
6
- import { type MigrateFunction } from './core/migrations.js';
7
- import { type $DomainEntity, type DomainEntity, type EntityByType } from './core/model.js';
8
- import type { $DomainEntityReflection, EntityReflections, SchemaOfObject } from './core/reflection.js';
2
+ import { type $DomainEntity, type $DomainEntityReflection, type ActionDefinition, type AliasMap, type AnonymousExpression, type AnyActionImplementations, type DomainEntity, DomainFactory, type EntityByType, type EntityReflections, type ExpandAlias, type MigrateFunction, type SchemaOfObject, type TypeOrAlias } from './core/index.js';
3
+ import { type ProjectModule } from './project-modules/index.js';
9
4
  export type AliasedExpressions<ENTITIES extends DomainEntity<string>, ALLOWED_ROOT_ENTITIES extends ENTITIES, PUBLISHED_DATA extends Record<string, unknown>, SESSION_DATA extends Record<string, unknown>, FRONTEND_DATA extends Record<string, unknown>, ALIASES extends Record<string, ENTITIES>> = {
10
5
  [K in TypeOrAlias<ENTITIES, ALIASES>]?: Record<string, AnonymousExpression<ENTITIES, ALLOWED_ROOT_ENTITIES, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA, ExpandAlias<ENTITIES, ALIASES, K>, unknown>>;
11
6
  };
@@ -31,9 +26,17 @@ export declare class DomainBuilder<ENTITIES extends DomainEntity<string>, ALLOWE
31
26
  static from<ENTITIES extends DomainEntity<string>, ALLOWED_ROOT_ENTITIES extends ENTITIES, $MAP extends Record<ENTITIES['type'], $DomainEntity<ENTITIES>>, PUBLISHED_DATA extends Record<string, unknown>, SESSION_DATA extends Record<string, unknown>, FRONTEND_DATA extends Record<string, unknown>, ALIASES extends Readonly<Record<string, ENTITIES>>>(entities: EntityReflections<ENTITIES>, aliasMap: AliasMap<ALIASES>, $entityReflections: $EntityReflections<ENTITIES>, allowedRootEntityTypes: ReadonlyArray<ALLOWED_ROOT_ENTITIES['type']>, modelVersion: number, publishedData: SchemaOfObject<PUBLISHED_DATA>, sessionData: SchemaOfObject<SESSION_DATA>, frontendData: SchemaOfObject<FRONTEND_DATA>, backendData: ExtendedJsonSchema | undefined, isAdminDomain: boolean): DomainBuilder<ENTITIES, ALLOWED_ROOT_ENTITIES, ALIASES, $MAP, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA>;
32
27
  withMigrate(migration: MigrateFunction<ENTITIES>): DomainBuilder<ENTITIES, ALLOWED_ROOT_ENTITIES, ALIASES, $MAP, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA>;
33
28
  withExpressions(implementation: AliasedExpressions<ENTITIES, ALLOWED_ROOT_ENTITIES, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA, ALIASES>): DomainBuilder<ENTITIES, ALLOWED_ROOT_ENTITIES, ALIASES, $MAP, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA>;
29
+ /**
30
+ * Adds the expressions of the `src/expressions/` files, as the generated barrel lists them. Each file
31
+ * is checked against the folder's contract and added on its own, so an expression defined twice is
32
+ * reported with both files instead of being overwritten by file order.
33
+ */
34
+ withExpressionModules(modules: readonly ProjectModule[]): DomainBuilder<ENTITIES, ALLOWED_ROOT_ENTITIES, ALIASES, $MAP, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA>;
34
35
  /** Declares the actions of the domain, as the generated `domain-spec.ts` reads them from the spec's `actions` section. */
35
36
  withActions(actions: readonly ActionDefinition[]): DomainBuilder<ENTITIES, ALLOWED_ROOT_ENTITIES, ALIASES, $MAP, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA>;
36
- /** Adds the implementations of the declared actions, as the generated barrel merges them from `src/actions/`. */
37
+ /** Adds the action implementations of the `src/actions/` files, as the generated barrel lists them, after checking each file against the folder's contract. */
38
+ withActionModules(modules: readonly ProjectModule[]): DomainBuilder<ENTITIES, ALLOWED_ROOT_ENTITIES, ALIASES, $MAP, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA>;
39
+ /** Adds the implementations of the declared actions, already merged by action name. */
37
40
  withActionImplementations(implementations: AnyActionImplementations): DomainBuilder<ENTITIES, ALLOWED_ROOT_ENTITIES, ALIASES, $MAP, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA>;
38
41
  build: () => DomainFactory<ENTITIES, ALLOWED_ROOT_ENTITIES, $MAP, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA>;
39
42
  }
@@ -1 +1 @@
1
- import{expandAlias as t}from"./core/alias.js";import{DomainFactory as i}from"./core/index.js";import{MigrateFunctionBuilder as e}from"./core/migrations.js";import{withProfilerLabel as s}from"./utils/profiler-label.js";export class DomainBuilder{entities;aliasMap;$entityReflections;allowedRootEntityTypes;implemented;modelVersion;publishedData;sessionData;frontendData;backendData;migrate;isAdminDomain;actions;actionImplementations;constructor(t,i,e,s,a,n,o,h,l,m,r,d,p,c){this.entities=t,this.aliasMap=i,this.$entityReflections=e,this.allowedRootEntityTypes=s,this.implemented=a,this.modelVersion=n,this.publishedData=o,this.sessionData=h,this.frontendData=l,this.backendData=m,this.migrate=r,this.isAdminDomain=d,this.actions=p,this.actionImplementations=c}static from(t,i,s,a,n,o,h,l,m,r){let d=e.fromVersions({1:t}).to(1).using({}).build();return new DomainBuilder(t,i,s,a,{},n,o,h,l,m,d,r,{},{})}withMigrate(t){return new DomainBuilder(this.entities,this.aliasMap,this.$entityReflections,this.allowedRootEntityTypes,this.implemented,this.modelVersion,this.publishedData,this.sessionData,this.frontendData,this.backendData,t,this.isAdminDomain,this.actions,this.actionImplementations)}withExpressions(i){let e={...this.implemented};return Object.entries(i).forEach(([i,a])=>{t(this.aliasMap,i).forEach(t=>{let n={...e[t]};e[t]=n,Object.entries(a).forEach(([e,a])=>{let o=n[e];if(o)throw Error(`Duplicate expression ${t}.${e}: The expression is defined on both ${i} and ${o.origin.typeOrAlias}, which would lead to ambiguous usage. Please ensure that expressions are only defined once.`);n[e]={...a,evaluate:s(`${t}_${e}`,a.evaluate),origin:{name:e,typeOrAlias:i}}})})}),new DomainBuilder(this.entities,this.aliasMap,this.$entityReflections,this.allowedRootEntityTypes,e,this.modelVersion,this.publishedData,this.sessionData,this.frontendData,this.backendData,this.migrate,this.isAdminDomain,this.actions,this.actionImplementations)}withActions(t){return new DomainBuilder(this.entities,this.aliasMap,this.$entityReflections,this.allowedRootEntityTypes,this.implemented,this.modelVersion,this.publishedData,this.sessionData,this.frontendData,this.backendData,this.migrate,this.isAdminDomain,Object.fromEntries(t.map(t=>[t.name,t])),this.actionImplementations)}withActionImplementations(t){return new DomainBuilder(this.entities,this.aliasMap,this.$entityReflections,this.allowedRootEntityTypes,this.implemented,this.modelVersion,this.publishedData,this.sessionData,this.frontendData,this.backendData,this.migrate,this.isAdminDomain,this.actions,{...this.actionImplementations,...t})}build=()=>{let t=this.implemented,s=this.migrate??e.fromVersions({1:this.entities}).to(1).using({}).build();return new i({aliasMap:this.aliasMap,entityReflections:this.entities,$entityReflections:this.$entityReflections,expressions:t,allowedRootEntityTypes:this.allowedRootEntityTypes,modelVersion:this.modelVersion,migrate:s,publishedData:this.publishedData,sessionData:this.sessionData,frontendData:this.frontendData,backendData:this.backendData,isAdminDomain:this.isAdminDomain,actions:this.actions,actionImplementations:this.actionImplementations})}}
1
+ import{DomainFactory as t,MigrateFunctionBuilder as i,expandAlias as e}from"./core/index.js";import{resolveActionModules as s,resolveExpressionModules as n}from"./project-modules/index.js";import{withProfilerLabel as a}from"./utils/profiler-label.js";export class DomainBuilder{entities;aliasMap;$entityReflections;allowedRootEntityTypes;implemented;modelVersion;publishedData;sessionData;frontendData;backendData;migrate;isAdminDomain;actions;actionImplementations;constructor(t,i,e,s,n,a,o,h,l,r,m,d,p,c){this.entities=t,this.aliasMap=i,this.$entityReflections=e,this.allowedRootEntityTypes=s,this.implemented=n,this.modelVersion=a,this.publishedData=o,this.sessionData=h,this.frontendData=l,this.backendData=r,this.migrate=m,this.isAdminDomain=d,this.actions=p,this.actionImplementations=c}static from(t,e,s,n,a,o,h,l,r,m){let d=i.fromVersions({1:t}).to(1).using({}).build();return new DomainBuilder(t,e,s,n,{},a,o,h,l,r,d,m,{},{})}withMigrate(t){return new DomainBuilder(this.entities,this.aliasMap,this.$entityReflections,this.allowedRootEntityTypes,this.implemented,this.modelVersion,this.publishedData,this.sessionData,this.frontendData,this.backendData,t,this.isAdminDomain,this.actions,this.actionImplementations)}withExpressions(t){let i={...this.implemented};return Object.entries(t).forEach(([t,s])=>{e(this.aliasMap,t).forEach(e=>{let n={...i[e]};i[e]=n,Object.entries(s).forEach(([i,s])=>{let o=n[i];if(o)throw Error(`Duplicate expression ${e}.${i}: The expression is defined on both ${t} and ${o.origin.typeOrAlias}, which would lead to ambiguous usage. Please ensure that expressions are only defined once.`);n[i]={...s,evaluate:a(`${e}_${i}`,s.evaluate),origin:{name:i,typeOrAlias:t}}})})}),new DomainBuilder(this.entities,this.aliasMap,this.$entityReflections,this.allowedRootEntityTypes,i,this.modelVersion,this.publishedData,this.sessionData,this.frontendData,this.backendData,this.migrate,this.isAdminDomain,this.actions,this.actionImplementations)}withExpressionModules(t){return n(t,this.aliasMap).reduce((t,i)=>t.withExpressions(i.expressions),this)}withActions(t){return new DomainBuilder(this.entities,this.aliasMap,this.$entityReflections,this.allowedRootEntityTypes,this.implemented,this.modelVersion,this.publishedData,this.sessionData,this.frontendData,this.backendData,this.migrate,this.isAdminDomain,Object.fromEntries(t.map(t=>[t.name,t])),this.actionImplementations)}withActionModules(t){return this.withActionImplementations(s(t))}withActionImplementations(t){return new DomainBuilder(this.entities,this.aliasMap,this.$entityReflections,this.allowedRootEntityTypes,this.implemented,this.modelVersion,this.publishedData,this.sessionData,this.frontendData,this.backendData,this.migrate,this.isAdminDomain,this.actions,{...this.actionImplementations,...t})}build=()=>{let e=this.implemented,s=this.migrate??i.fromVersions({1:this.entities}).to(1).using({}).build();return new t({aliasMap:this.aliasMap,entityReflections:this.entities,$entityReflections:this.$entityReflections,expressions:e,allowedRootEntityTypes:this.allowedRootEntityTypes,modelVersion:this.modelVersion,migrate:s,publishedData:this.publishedData,sessionData:this.sessionData,frontendData:this.frontendData,backendData:this.backendData,isAdminDomain:this.isAdminDomain,actions:this.actions,actionImplementations:this.actionImplementations})}}
@@ -1,6 +1,4 @@
1
- import type { ActionContext, ActionTypes, PreparedAction } from '../../core/action.js';
2
- import type { $DomainEntity, DomainEntity } from '../../core/model.js';
3
- import type { DomainState } from '../../core/state.js';
1
+ import { type $DomainEntity, type ActionContext, type ActionTypes, type DomainEntity, type DomainState, type PreparedAction } from '../../core/index.js';
4
2
  import type { DomainContextSelectors } from '../../domain-runtime/domain-context/index.js';
5
3
  export interface ActionSystemContext {
6
4
  /**
@@ -1 +1 @@
1
- import{createSelector as t}from"@salsita-ai/common/utils";import{createUpdateFactory as e}from"../../components/updates.js";import{extendedSchemaValidator as s}from"../../core/json-schema.js";import{getIdSequence as o}from"../store-system/next-domain-entity-id.js";export class ActionSystem{_context;_selectValidators=t([t.leaf(t=>t)],t=>new Map(Object.values(t).map(t=>[t.name,s.compile(t.params)])));_updates=e();constructor(t){this._context=t}createContext=t=>({expressionContext:this._context.selectors.getExpressionContext(),systems:this._context.selectors.getDomainSystems(),getIdSequence:()=>o(t.entities,[]),updates:this._updates});prepareAction=(t,e,o)=>{let n=this._context.selectors.getActionDefinitions(),i=Object.values(n).find(e=>e.name===t);if(!i){let e=Object.values(n).map(t=>`"${t.name}"`);throw Error(`Unknown action "${t}". ${e.length>0?`The application declares these actions: ${e.join(", ")}.`:"The application declares no actions."} Declare it under "actions" in a spec file and implement it in src/actions/.`)}let a=this._selectValidators(n).get(i.name);if(a&&!a(e))throw Error(`The arguments of action "${t}" do not fit its params: ${s.errorsText(a.errors)}. Nothing was changed. Send arguments that fit the params the action declares.`);return(Object.entries(this._context.selectors.getActionImplementations()).find(([e])=>e===t)?.[1])(e,o,this.createContext(o))}}
1
+ import{createSelector as t}from"@salsita-ai/common/utils";import{createUpdateFactory as e}from"../../components/updates.js";import{extendedSchemaValidator as s}from"../../core/index.js";import{getIdSequence as n}from"../store-system/next-domain-entity-id.js";export class ActionSystem{_context;_selectValidators=t([t.leaf(t=>t)],t=>new Map(Object.values(t).map(t=>[t.name,s.compile(t.params)])));_updates=e();constructor(t){this._context=t}createContext=t=>({expressionContext:this._context.selectors.getExpressionContext(),systems:this._context.selectors.getDomainSystems(),getIdSequence:()=>n(t.entities,[]),updates:this._updates});prepareAction=(t,e,n)=>{let o=this._context.selectors.getActionDefinitions(),i=Object.values(o).find(e=>e.name===t);if(!i){let e=Object.values(o).map(t=>`"${t.name}"`);throw Error(`Unknown action "${t}". ${e.length>0?`The application declares these actions: ${e.join(", ")}.`:"The application declares no actions."} Declare it under "actions" in a spec file and implement it in src/actions/.`)}let a=this._selectValidators(o).get(i.name);if(a&&!a(e))throw Error(`The arguments of action "${t}" do not fit its params: ${s.errorsText(a.errors)}. Nothing was changed. Send arguments that fit the params the action declares.`);return(Object.entries(this._context.selectors.getActionImplementations()).find(([e])=>e===t)?.[1])(e,n,this.createContext(n))}}
@@ -1,4 +1,4 @@
1
- import type { $DomainEntity, DomainEntity } from '../core/model.js';
1
+ import type { $DomainEntity, DomainEntity } from '../core/index.js';
2
2
  import type { DomainContextSystems } from './domain-context-systems.js';
3
3
  import type { UpdateTransformer } from './store-system/store-system.js';
4
4
  export declare const createTransformer: <ENTITIES extends DomainEntity<string>, ALLOWED_ROOT_ENTITIES extends ENTITIES, $MAP extends Record<ENTITIES['type'], $DomainEntity<ENTITIES>>, NAVIGATION_STATES extends string, VIEW_STATES extends string, TOOL_STATES extends string, EXPORT_STATES extends string>(transformer: (ctx: DomainContextSystems<ENTITIES, ALLOWED_ROOT_ENTITIES, $MAP, NAVIGATION_STATES, VIEW_STATES, TOOL_STATES, EXPORT_STATES>) => UpdateTransformer<ENTITIES>) => (ctx: DomainContextSystems<ENTITIES, ALLOWED_ROOT_ENTITIES, $MAP, NAVIGATION_STATES, VIEW_STATES, TOOL_STATES, EXPORT_STATES>) => UpdateTransformer<ENTITIES>;
@@ -1,6 +1,4 @@
1
- import type { ActionTypes } from '../core/action.js';
2
- import type { Domain } from '../core/domain.js';
3
- import type { $DomainEntity, DomainEntity } from '../core/model.js';
1
+ import type { $DomainEntity, ActionTypes, Domain, DomainEntity } from '../core/index.js';
4
2
  import type { ComponentReader, DomainContextSelectors } from '../domain-runtime/domain-context/index.js';
5
3
  import type { BlenderProjections, CollisionProjections, CompositionProjections, ConstraintProjections, PositionProjections, ProjectedEntitiesProjections, SnappingProjections, ValidationProjections } from '../projections/index.js';
6
4
  import type { SketchingProjections } from '../sketching/sketching-projections.js';
@@ -1,6 +1,5 @@
1
1
  import { type Viewport } from '../../components/viewport-state-component.js';
2
- import type { DomainEntity } from '../../core/model.js';
3
- import type { DomainState } from '../../core/state.js';
2
+ import type { DomainEntity, DomainState } from '../../core/index.js';
4
3
  import type { DomainContextSelectors } from '../../domain-runtime/domain-context/index.js';
5
4
  import type { DomainServicesSelectors } from '../../domain-runtime/domain-services/index.js';
6
5
  import type { UpdateTransformer } from '../store-system/store-system.js';
@@ -10,7 +10,7 @@ import { toolStateComponent } from '../../components/tool-state-component.js';
10
10
  import type { EphemeralRecordCreation, EphemeralRecordModification, StateUpdate } from '../../components/updates.js';
11
11
  import { viewStateComponent } from '../../components/view-state-component.js';
12
12
  import { viewportStateComponent } from '../../components/viewport-state-component.js';
13
- import type { DomainEntity } from '../../core/model.js';
13
+ import type { DomainEntity } from '../../core/index.js';
14
14
  /**
15
15
  * All updates performed by the navigation system.
16
16
  */
@@ -1,4 +1,4 @@
1
- import { type $DomainEntity, type DomainEntity } from '../../core/model.js';
1
+ import { type $DomainEntity, type DomainEntity } from '../../core/index.js';
2
2
  import type { DomainContextSystems } from '../domain-context-systems.js';
3
3
  import type { UpdateTransformer } from '../store-system/store-system.js';
4
4
  /**
@@ -1 +1 @@
1
- import{domainEntityTypeFromId as t,isDomainEntityId as e}from"../../core/model.js";import{isDeselectUpdate as a,isNavigationUpdate as n,isSelectUpdate as i}from"./navigation-updates.js";export const createResetSelectionOnNavigationTransformer=(t,e)=>a=>a.flatMap(a=>n(a)&&t.includes(a.writableState.activeState)?[a,e.navigationSystem.getDeselectUpdate()]:[a]);export const createNavigationOnSelectionTransformer=(e,a,n)=>o=>o.flatMap(o=>i(o)&&t(o.writableState.selectedEntityId)===e?[o,n.navigationSystem.getNavigationUpdate(a)]:[o]);export const createNavigationOnSelectionChangeTransformer=(e,a,n,o)=>(r,s)=>r.flatMap(r=>{if(!i(r))return[r];let c=t(o.navigationSystem.getActiveSelectionState(s)),l=t(r.writableState.selectedEntityId);return c===e&&l===a?[r,o.navigationSystem.getNavigationUpdate(n)]:[r]});export const createNavigationOnDeselectTransformer=(t,e)=>n=>n.flatMap(n=>a(n)?[n,e.navigationSystem.getNavigationUpdate(t)]:[n]);export const createSelectParentOnDeselectionTransformer=t=>(n,i)=>{let o=t.navigationSystem.getActiveSelectionState(i);return n.flatMap(n=>{if(a(n)&&e(o)){let e=t.compositionProjections.getTree(i).map.get(o);if(!e)throw Error(`Can not fallback to parent selected entity, entity with id ${o} not found in the composition tree. The state is invalid!`);return e.parent?[n,t.navigationSystem.getSelectUpdate(e.parent.id)]:[n]}return[n]})};
1
+ import{domainEntityTypeFromId as t,isDomainEntityId as e}from"../../core/index.js";import{isDeselectUpdate as a,isNavigationUpdate as n,isSelectUpdate as i}from"./navigation-updates.js";export const createResetSelectionOnNavigationTransformer=(t,e)=>a=>a.flatMap(a=>n(a)&&t.includes(a.writableState.activeState)?[a,e.navigationSystem.getDeselectUpdate()]:[a]);export const createNavigationOnSelectionTransformer=(e,a,n)=>o=>o.flatMap(o=>i(o)&&t(o.writableState.selectedEntityId)===e?[o,n.navigationSystem.getNavigationUpdate(a)]:[o]);export const createNavigationOnSelectionChangeTransformer=(e,a,n,o)=>(r,s)=>r.flatMap(r=>{if(!i(r))return[r];let c=t(o.navigationSystem.getActiveSelectionState(s)),l=t(r.writableState.selectedEntityId);return c===e&&l===a?[r,o.navigationSystem.getNavigationUpdate(n)]:[r]});export const createNavigationOnDeselectTransformer=(t,e)=>n=>n.flatMap(n=>a(n)?[n,e.navigationSystem.getNavigationUpdate(t)]:[n]);export const createSelectParentOnDeselectionTransformer=t=>(n,i)=>{let o=t.navigationSystem.getActiveSelectionState(i);return n.flatMap(n=>{if(a(n)&&e(o)){let e=t.compositionProjections.getTree(i).map.get(o);if(!e)throw Error(`Can not fallback to parent selected entity, entity with id ${o} not found in the composition tree. The state is invalid!`);return e.parent?[n,t.navigationSystem.getSelectUpdate(e.parent.id)]:[n]}return[n]})};
@@ -1,7 +1,5 @@
1
1
  import type { OmitEmpty, OmitNever, UnionToIntersection } from '@salsita-ai/common/utils';
2
- import { type AliasMap, type EventualAlias, type ExpandAlias, type ExtractFromAliasedRecord, type TypeOrAlias } from '../../core/alias.js';
3
- import { type DomainEntity, type DomainEntityId, type EntityByType } from '../../core/model.js';
4
- import type { DomainEntityReflection } from '../../core/reflection.js';
2
+ import { type AliasMap, type DomainEntity, type DomainEntityId, type DomainEntityReflection, type EntityByType, type EventualAlias, type ExpandAlias, type ExtractFromAliasedRecord, type TypeOrAlias } from '../../core/index.js';
5
3
  export type EntityDefaults<ENTITY extends DomainEntity<string>> = {
6
4
  [K in Exclude<keyof ENTITY, 'id' | 'type'>]: ENTITY[K] extends DomainEntityId<any> ? null : ENTITY[K];
7
5
  };
@@ -1 +1 @@
1
- import{expandAlias as r}from"../../core/alias.js";import{_unsafeBuildDomainEntityId as e}from"../../core/model.js";export const RecipeFactoryBuilder={forAliases:t=>({forEntities:o=>({withDefaults:i=>{let a={};Object.entries(i).forEach(([e,o])=>{r(t,e).forEach(r=>{a[r]={...a[r],...o}})});let f=new Map(o.map(r=>[r.type,r._meta.validator]));return Object.entries(a).forEach(([r,t])=>{let o=f.get(r);if(!o)throw Error(`Defaults provided for unknown entity ${r}`);if(!o({id:e(r,1),type:r,...t}))throw console.error(o.errors,t),Error(`Invalid defaults for ${r} entity.`)}),{build:()=>r=>({id:e(r.type,1),...a[r.type],...r})}}})})};
1
+ import{_unsafeBuildDomainEntityId as e,expandAlias as r}from"../../core/index.js";export const RecipeFactoryBuilder={forAliases:t=>({forEntities:o=>({withDefaults:i=>{let a={};Object.entries(i).forEach(([e,o])=>{r(t,e).forEach(e=>{a[e]={...a[e],...o}})});let n=new Map(o.map(e=>[e.type,e._meta.validator]));return Object.entries(a).forEach(([r,t])=>{let o=n.get(r);if(!o)throw Error(`Defaults provided for unknown entity ${r}`);if(!o({id:e(r,1),type:r,...t}))throw console.error(o.errors,t),Error(`Invalid defaults for ${r} entity.`)}),{build:()=>r=>({id:e(r.type,1),...a[r.type],...r})}}})})};
@@ -1,4 +1,4 @@
1
- import { type DomainEntity } from '../../core/model.js';
1
+ import { type DomainEntity } from '../../core/index.js';
2
2
  import type { CompositionProjections } from '../../projections/composition-projections.js';
3
3
  import type { IncrementalUpdateTransformer } from '../store-system/store-system.js';
4
4
  /**
@@ -1 +1 @@
1
- import{systemUpdateFactory as e}from"../../components/updates.js";import{isVirtualEntityId as t}from"../../core/model.js";let n=e=>"deleteEntity"===e.kind||"replaceDomainEntity"===e.kind&&!e.keepChildren;export const createCascadeDeletesTransformer=i=>(o,r,d,l,a=[])=>{let s=o.filter(n);if(0===s.length)return o;let{map:f}=i.getTree(r),p=[],c=new Set([...s,...a.filter(n)].map(e=>e.entityId));for(let n of s){if(t(n.entityId))continue;let i=f.get(n.entityId);if(i)for(let t of i.descendants())c.has(t.id)||(p.push(e.EntityDeletion({entityId:t.id,updateTag:"composition.cascadeDelete"})),c.add(t.id))}return p.length>0?[...o,...p]:o};
1
+ import{systemUpdateFactory as e}from"../../components/updates.js";import{isVirtualEntityId as t}from"../../core/index.js";let n=e=>"deleteEntity"===e.kind||"replaceDomainEntity"===e.kind&&!e.keepChildren;export const createCascadeDeletesTransformer=i=>(r,d,o,a,l=[])=>{let s=r.filter(n);if(0===s.length)return r;let{map:f}=i.getTree(d),p=[],c=new Set([...s,...l.filter(n)].map(e=>e.entityId));for(let n of s){if(t(n.entityId))continue;let i=f.get(n.entityId);if(i)for(let t of i.descendants())c.has(t.id)||(p.push(e.EntityDeletion({entityId:t.id,updateTag:"composition.cascadeDelete"})),c.add(t.id))}return p.length>0?[...r,...p]:r};
@@ -1,4 +1,4 @@
1
- import type { DomainEntity } from '../../core/model.js';
1
+ import type { DomainEntity } from '../../core/index.js';
2
2
  import type { ComponentReader } from '../../domain-runtime/domain-context/index.js';
3
3
  import type { IncrementalUpdateTransformer } from '../store-system/store-system.js';
4
4
  /**
@@ -1,4 +1,4 @@
1
- import type { DomainEntity } from '../../core/model.js';
1
+ import type { DomainEntity } from '../../core/index.js';
2
2
  import type { ComponentReader } from '../../domain-runtime/domain-context/index.js';
3
3
  import type { IncrementalUpdateTransformer } from '../store-system/store-system.js';
4
4
  /**
@@ -1,4 +1,4 @@
1
- import type { DomainEntity } from '../../core/model.js';
1
+ import type { DomainEntity } from '../../core/index.js';
2
2
  import type { ComponentReader } from '../../domain-runtime/domain-context/index.js';
3
3
  import type { IncrementalUpdateTransformer } from '../store-system/store-system.js';
4
4
  /**
@@ -1,4 +1,3 @@
1
1
  import type { DataUpdate } from '../../components/updates.js';
2
- import type { DomainEntity } from '../../core/model.js';
3
- import type { DomainState } from '../../core/state.js';
2
+ import { type DomainEntity, type DomainState } from '../../core/index.js';
4
3
  export declare const applyUpdates: <ENTITIES extends DomainEntity<string>>(updates: ReadonlyArray<DataUpdate<ENTITIES, ENTITIES>>, state: DomainState<ENTITIES>) => DomainState<ENTITIES>;
@@ -1 +1 @@
1
- import{match as e}from"ts-pattern";import{isEqualComponentInstance as t}from"../../core/component.js";import{isVirtualEntityId as n}from"../../core/model.js";export const applyUpdates=(o,i)=>o.reduce((o,r)=>e(r).with({kind:"createDomainEntity"},e=>({...o,entities:[...o.entities,e.entity]})).with({kind:"deleteEntity"},e=>{let t=o.entities;if(!n(e.entityId)&&(t=o.entities.filter(t=>t.id!==e.entityId)).length===o.entities.length)throw Error(`No-op: Cannot remove domain entity #${String(e.entityId)}, because it does not exist`);let i=o.ephemeralRecords.filter(t=>t.componentInstance.entityId!==e.entityId);if(n(e.entityId)&&i.length===o.ephemeralRecords.length)throw Error(`No-op: Cannot remove virtual entity #${e.entityId}, because it does not exist`);return{...o,entities:t,ephemeralRecords:i}}).with({kind:"modifyDomainEntity"},e=>{let t=!1,n=o.entities.map(n=>n.id===e.entityId?(t=!0,{...n,...e.stateDelta}):n);if(!t)throw Error(`No-op: Cannot modify domain entity #${String(e.entityId)}, because it does not exist`);return{...o,entities:n}}).with({kind:"replaceDomainEntity"},e=>{let t=!1,n=o.entities.map(n=>n.id===e.entityId?(t=!0,e.replacementEntity):n);if(!t)throw Error(`No-op: Cannot replace entity #${String(e.entityId)} as it was not found in the domain state`);let r=o.ephemeralRecords.filter(t=>t.componentInstance.entityId!==e.entityId),a=e.entityId===i.rootEntityId?{rootEntityId:e.replacementEntity.id,rootEntityType:e.replacementEntity.type}:void 0;return{...o,...a,ephemeralRecords:r,entities:n}}).with({kind:"modifyEphemeralRecord"},e=>{let n=!1,i=o.ephemeralRecords.map(o=>t(o.componentInstance,e.componentInstance)?(n=!0,{...o,state:{...o.state,...e.writableState}}):o);if(!n)throw Error(`No-op: Cannot modify ephemeral record #${e.entityId} for component ${e.componentInstance.componentType.name}#${e.componentInstance.instanceName}, because it does not exist`);return{...o,ephemeralRecords:i}}).with({kind:"createEphemeralRecord"},e=>{if(o.ephemeralRecords.find(n=>t(n.componentInstance,e.componentInstance)))throw Error(`No-op: Cannot create ephemeral record #${e.entityId} for component ${e.componentInstance.componentType.name}#${e.componentInstance.instanceName}, because it already exists`);let n=[...o.ephemeralRecords,{entityId:e.entityId,updateTag:e.updateTag,state:e.initialState,componentInstance:e.componentInstance}];return{...o,ephemeralRecords:n}}).with({kind:"deleteEphemeralRecord"},e=>{let n=o.ephemeralRecords.filter(n=>!t(n.componentInstance,e.componentInstance));if(n.length===o.ephemeralRecords.length)throw Error(`No-op: Cannot delete ephemeral record #${e.entityId} for component ${e.componentInstance.componentType.name}#${e.componentInstance.instanceName}, because it does not exist`);return{...o,ephemeralRecords:n}}).exhaustive(),i);
1
+ import{match as e}from"ts-pattern";import{isEqualComponentInstance as t,isVirtualEntityId as n}from"../../core/index.js";export const applyUpdates=(o,i)=>o.reduce((o,r)=>e(r).with({kind:"createDomainEntity"},e=>({...o,entities:[...o.entities,e.entity]})).with({kind:"deleteEntity"},e=>{let t=o.entities;if(!n(e.entityId)&&(t=o.entities.filter(t=>t.id!==e.entityId)).length===o.entities.length)throw Error(`No-op: Cannot remove domain entity #${String(e.entityId)}, because it does not exist`);let i=o.ephemeralRecords.filter(t=>t.componentInstance.entityId!==e.entityId);if(n(e.entityId)&&i.length===o.ephemeralRecords.length)throw Error(`No-op: Cannot remove virtual entity #${e.entityId}, because it does not exist`);return{...o,entities:t,ephemeralRecords:i}}).with({kind:"modifyDomainEntity"},e=>{let t=!1,n=o.entities.map(n=>n.id===e.entityId?(t=!0,{...n,...e.stateDelta}):n);if(!t)throw Error(`No-op: Cannot modify domain entity #${String(e.entityId)}, because it does not exist`);return{...o,entities:n}}).with({kind:"replaceDomainEntity"},e=>{let t=!1,n=o.entities.map(n=>n.id===e.entityId?(t=!0,e.replacementEntity):n);if(!t)throw Error(`No-op: Cannot replace entity #${String(e.entityId)} as it was not found in the domain state`);let r=o.ephemeralRecords.filter(t=>t.componentInstance.entityId!==e.entityId),a=e.entityId===i.rootEntityId?{rootEntityId:e.replacementEntity.id,rootEntityType:e.replacementEntity.type}:void 0;return{...o,...a,ephemeralRecords:r,entities:n}}).with({kind:"modifyEphemeralRecord"},e=>{let n=!1,i=o.ephemeralRecords.map(o=>t(o.componentInstance,e.componentInstance)?(n=!0,{...o,state:{...o.state,...e.writableState}}):o);if(!n)throw Error(`No-op: Cannot modify ephemeral record #${e.entityId} for component ${e.componentInstance.componentType.name}#${e.componentInstance.instanceName}, because it does not exist`);return{...o,ephemeralRecords:i}}).with({kind:"createEphemeralRecord"},e=>{if(o.ephemeralRecords.find(n=>t(n.componentInstance,e.componentInstance)))throw Error(`No-op: Cannot create ephemeral record #${e.entityId} for component ${e.componentInstance.componentType.name}#${e.componentInstance.instanceName}, because it already exists`);let n=[...o.ephemeralRecords,{entityId:e.entityId,updateTag:e.updateTag,state:e.initialState,componentInstance:e.componentInstance}];return{...o,ephemeralRecords:n}}).with({kind:"deleteEphemeralRecord"},e=>{let n=o.ephemeralRecords.filter(n=>!t(n.componentInstance,e.componentInstance));if(n.length===o.ephemeralRecords.length)throw Error(`No-op: Cannot delete ephemeral record #${e.entityId} for component ${e.componentInstance.componentType.name}#${e.componentInstance.instanceName}, because it does not exist`);return{...o,ephemeralRecords:n}}).exhaustive(),i);
@@ -1,6 +1,5 @@
1
1
  import type { StateUpdate } from '../../components/updates.js';
2
- import { type DomainEntity, type DomainEntityId } from '../../core/model.js';
3
- import type { DomainState } from '../../core/state.js';
2
+ import { type DomainEntity, type DomainEntityId, type DomainState } from '../../core/index.js';
4
3
  /**
5
4
  * Returns the next available entity id for the given entity type.
6
5
  *
@@ -1 +1 @@
1
- import{_unsafeBuildDomainEntityId as e,parseDomainEntityId as t}from"../../core/model.js";export const nextDomainEntityId=(n,i,r)=>{let o=0;for(let e of n.entities){let n=t(e.id);n.type===i&&n.sequenceNumber>o&&(o=n.sequenceNumber)}for(let e of r){let n;if("createDomainEntity"===e.kind&&e.entity.type===i?n=e.entity.id:"replaceDomainEntity"===e.kind&&e.replacementEntity.type===i&&(n=e.replacementEntity.id),void 0!==n){let e=t(n);e.sequenceNumber>o&&(o=e.sequenceNumber)}}return e(i,o+1)};export function getIdSequence(n,i){let r=new Map;return n.forEach(e=>{let n=t(e.id),i=r.get(n.type)??0;r.set(e.type,Math.max(i,n.sequenceNumber))}),i.forEach(e=>{let n;if("createDomainEntity"===e.kind?n=e.entity.id:"replaceDomainEntity"===e.kind&&(n=e.replacementEntity.id),void 0!==n){let e=t(n),i=r.get(e.type)??0;r.set(e.type,Math.max(i,e.sequenceNumber))}}),{nextId:t=>{let n=(r.get(t)??0)+1;return r.set(t,n),e(t,n)}}}
1
+ import{_unsafeBuildDomainEntityId as e,parseDomainEntityId as t}from"../../core/index.js";export const nextDomainEntityId=(n,i,r)=>{let o=0;for(let e of n.entities){let n=t(e.id);n.type===i&&n.sequenceNumber>o&&(o=n.sequenceNumber)}for(let e of r){let n;if("createDomainEntity"===e.kind&&e.entity.type===i?n=e.entity.id:"replaceDomainEntity"===e.kind&&e.replacementEntity.type===i&&(n=e.replacementEntity.id),void 0!==n){let e=t(n);e.sequenceNumber>o&&(o=e.sequenceNumber)}}return e(i,o+1)};export function getIdSequence(n,i){let r=new Map;return n.forEach(e=>{let n=t(e.id),i=r.get(n.type)??0;r.set(e.type,Math.max(i,n.sequenceNumber))}),i.forEach(e=>{let n;if("createDomainEntity"===e.kind?n=e.entity.id:"replaceDomainEntity"===e.kind&&(n=e.replacementEntity.id),void 0!==n){let e=t(n),i=r.get(e.type)??0;r.set(e.type,Math.max(i,e.sequenceNumber))}}),{nextId:t=>{let n=(r.get(t)??0)+1;return r.set(t,n),e(t,n)}}}
@@ -1,5 +1,5 @@
1
1
  import { type DomainEntityCreation, type EntityDeletion, type StateUpdate } from '../../components/updates.js';
2
- import type { DomainEntity } from '../../core/model.js';
2
+ import type { DomainEntity } from '../../core/index.js';
3
3
  import { type ProjectedEntitiesComponentSnapshot } from '../../system-components/index.js';
4
4
  export interface ReconciliationUpdate<ENTITY extends DomainEntity<string>, PARENT extends DomainEntity<string>> {
5
5
  readonly dataUpdate: DomainEntityCreation<ENTITY, PARENT> | EntityDeletion<ENTITY>;
@@ -1,8 +1,6 @@
1
1
  import { type ObservableWithLastValue } from '@salsita-ai/common/utils';
2
2
  import { type ComponentModification, type DataUpdate, type DomainEntityModification, type EphemeralRecordModification, type StateUpdate } from '../../components/updates.js';
3
- import { type SystemComponentTypeConstraint } from '../../core/component.js';
4
- import { type $DomainEntity, type DomainEntity } from '../../core/model.js';
5
- import type { DomainState } from '../../core/state.js';
3
+ import { type $DomainEntity, type DomainEntity, type DomainState, type SystemComponentTypeConstraint } from '../../core/index.js';
6
4
  import type { DomainContextSelectors } from '../../domain-runtime/domain-context/index.js';
7
5
  import type { DomainServicesSelectors } from '../../domain-runtime/domain-services/index.js';
8
6
  import type { EnvironmentSelectors } from '../../domain-runtime/environment/index.js';