@salsita-ai/sdk 0.50.0-develop.ae52227c7e → 0.50.0-develop.ae9a830ef0

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 (362) hide show
  1. package/dist/application-spec/core/components/component-filter.d.ts +53 -0
  2. package/dist/application-spec/core/components/component-filter.js +1 -0
  3. package/dist/application-spec/core/components/index.d.ts +2 -0
  4. package/dist/application-spec/core/components/index.js +1 -0
  5. package/dist/application-spec/core/components/sdk-code-ref.d.ts +9 -0
  6. package/dist/application-spec/core/components/sdk-code-ref.js +1 -0
  7. package/dist/application-spec/core/enhanced-json-value.d.ts +0 -68
  8. package/dist/application-spec/core/enhanced-json-value.js +1 -1
  9. package/dist/application-spec/core/expressions/index.d.ts +2 -0
  10. package/dist/application-spec/core/expressions/index.js +1 -0
  11. package/dist/application-spec/core/expressions/relation-expression-params.d.ts +11 -0
  12. package/dist/application-spec/core/expressions/sdk-expression-implementation.d.ts +24 -0
  13. package/dist/application-spec/core/expressions/sdk-expression-implementation.js +1 -0
  14. package/dist/application-spec/core/index.d.ts +2 -0
  15. package/dist/application-spec/core/index.js +1 -1
  16. package/dist/application-spec/core/json-value.d.ts +1 -1
  17. package/dist/application-spec/{core → enhanced-json}/eval-to-constant.d.ts +1 -1
  18. package/dist/application-spec/enhanced-json/index.d.ts +4 -0
  19. package/dist/application-spec/enhanced-json/index.js +1 -0
  20. package/dist/application-spec/enhanced-json/is-enhanced-json-array.d.ts +2 -0
  21. package/dist/application-spec/enhanced-json/is-enhanced-json-array.js +1 -0
  22. package/dist/application-spec/enhanced-json/resolve-enhanced-json-value.d.ts +18 -0
  23. package/dist/application-spec/enhanced-json/resolve-enhanced-json-value.js +1 -0
  24. package/dist/application-spec/enhanced-json/schema-from-value.d.ts +24 -0
  25. package/dist/application-spec/enhanced-json/schema-from-value.js +1 -0
  26. package/dist/application-spec/enhanced-json/stringify-enhanced-json-value.d.ts +14 -0
  27. package/dist/application-spec/enhanced-json/stringify-enhanced-json-value.js +1 -0
  28. package/dist/application-spec/enhanced-json/validate-enhanced-json-value-caps.d.ts +12 -0
  29. package/dist/application-spec/enhanced-json/validate-enhanced-json-value-caps.js +1 -0
  30. package/dist/application-spec/enhanced-json/validate-no-legacy-code-ref.d.ts +13 -0
  31. package/dist/application-spec/enhanced-json/validate-no-legacy-code-ref.js +1 -0
  32. package/dist/application-spec/errors/diagnostic-codes.d.ts +8 -0
  33. package/dist/application-spec/errors/diagnostic-codes.js +1 -1
  34. package/dist/application-spec/errors/diagnostic-messages.d.ts +11 -0
  35. package/dist/application-spec/errors/diagnostic-messages.js +1 -1
  36. package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
  37. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.js +4 -4
  38. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-defaults.d.ts +4 -2
  39. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-defaults.js +1 -1
  40. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-domain-block.js +43 -45
  41. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-phx-globals.js +3 -0
  42. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-relation-expressions.js +1 -1
  43. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.d.ts +6 -8
  44. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.js +11 -11
  45. package/dist/application-spec/generate-application/code/templates/domain-spec/index.d.ts +1 -1
  46. package/dist/application-spec/generate-application/code/templates/domain-spec/index.js +1 -1
  47. package/dist/application-spec/generate-application/code/templates/domain-spec.js +12 -12
  48. package/dist/application-spec/generate-application/code/templates/globals.js +5 -4
  49. package/dist/application-spec/generate-application/code/templates/index.d.ts +0 -1
  50. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  51. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +8 -2
  52. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +1 -1
  53. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +5 -3
  54. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +2 -2
  55. package/dist/application-spec/generate-application/runtime/application-runtime.d.ts +1 -3
  56. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +1 -3
  57. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.d.ts +1 -1
  58. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.js +1 -1
  59. package/dist/application-spec/generate-application/runtime/sections/component-optic.d.ts +2 -1
  60. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.js +1 -1
  61. package/dist/application-spec/generate-application/runtime/sections/transformers-runtime.d.ts +2 -4
  62. package/dist/application-spec/index.d.ts +1 -0
  63. package/dist/application-spec/index.js +1 -1
  64. package/dist/application-spec/parse-application-files/categorize/module-analysis.d.ts +1 -1
  65. package/dist/application-spec/parse-application-files/categorize/module-analysis.js +1 -1
  66. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.d.ts +16 -3
  67. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
  68. package/dist/application-spec/parse-application-files/raw-spec/raw-spec-file.js +1 -1
  69. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-spec.js +1 -1
  70. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/configurator-spec.js +1 -1
  71. package/dist/application-spec/parse-application-files/spec/components/component-entry.d.ts +1 -9
  72. package/dist/application-spec/parse-application-files/spec/components/component-entry.js +1 -1
  73. package/dist/application-spec/parse-application-files/spec/components/component-filter.d.ts +1 -54
  74. package/dist/application-spec/parse-application-files/spec/components/component-filter.js +1 -1
  75. package/dist/application-spec/parse-application-files/spec/components/index.d.ts +1 -1
  76. package/dist/application-spec/parse-application-files/spec/components/index.js +1 -1
  77. package/dist/application-spec/parse-application-files/spec/expressions/expression.d.ts +1 -28
  78. package/dist/application-spec/parse-application-files/spec/expressions/expression.js +1 -1
  79. package/dist/application-spec/parse-application-files/spec/expressions/expressions.d.ts +1 -1
  80. package/dist/application-spec/parse-application-files/spec/expressions/expressions.js +1 -1
  81. package/dist/application-spec/parse-application-files/spec/expressions/index.d.ts +0 -1
  82. package/dist/application-spec/parse-application-files/spec/expressions/index.js +1 -1
  83. package/dist/application-spec/parse-application-files/spec/expressions/memo-eval-plan.js +1 -1
  84. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.js +1 -1
  85. package/dist/application-spec/parse-application-files/spec/model/defaults.d.ts +3 -3
  86. package/dist/application-spec/parse-application-files/spec/model/defaults.js +1 -1
  87. package/dist/application-spec/parse-application-files/spec/relations/reference-field-type.d.ts +25 -0
  88. package/dist/application-spec/parse-application-files/spec/relations/reference-field-type.js +1 -0
  89. package/dist/application-spec/parse-application-files/spec/relations/relation-field-mismatch.d.ts +46 -0
  90. package/dist/application-spec/parse-application-files/spec/relations/relation-field-mismatch.js +1 -0
  91. package/dist/application-spec/parse-application-files/spec/relations/relations.d.ts +4 -3
  92. package/dist/application-spec/parse-application-files/spec/relations/relations.js +1 -1
  93. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
  94. package/dist/application-spec/parse-application-files/spec/sections/infra.d.ts +2 -0
  95. package/dist/application-spec/parse-application-files/spec/sections/infra.js +1 -1
  96. package/dist/client/phoenix-api.d.ts +96 -0
  97. package/dist/configurator/application-runtime/extensions/create-configurator-extensions.js +1 -1
  98. package/dist/configurator/application-runtime/extensions/selectors.d.ts +3 -1
  99. package/dist/configurator/application-runtime/extensions/selectors.js +1 -1
  100. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +3 -1
  101. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  102. package/dist/configurator/application-runtime/extensions/systems/drag-and-drop-system/drag-and-drop-system.d.ts +3 -3
  103. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +14 -4
  104. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  105. package/dist/configurator/application-runtime/extensions/systems/graphql-system/inject-assistant-lenses.d.ts +11 -0
  106. package/dist/configurator/application-runtime/extensions/systems/graphql-system/inject-assistant-lenses.js +1 -0
  107. package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.d.ts +2 -2
  108. package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.js +1 -1
  109. package/dist/configurator/common/configurator-interface.d.ts +11 -1
  110. package/dist/configurator/common/configurator-interface.js +1 -1
  111. package/dist/configurator/common/frontend-analytics.d.ts +2 -0
  112. package/dist/configurator/common/frontend-analytics.js +1 -1
  113. package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.d.ts +1 -1
  114. package/dist/configurator/scene/scene-controls/hotspot-drag-handle/HotspotDragHandle.d.ts +1 -1
  115. package/dist/configurator/scene/scene-controls/hotspot-drag-handle/HotspotDragSceneHandle.d.ts +1 -1
  116. package/dist/configurator/scene/scene-entity/dimension-indicators/DimensionIndicator.d.ts +1 -1
  117. package/dist/configurator/scene/scene-entity/dimension-indicators/DimensionIndicatorInternal.d.ts +1 -1
  118. package/dist/configurator/scene/scene-entity/drag-and-drop/shared.d.ts +2 -2
  119. package/dist/configurator/scene/scene-entity/drag-and-drop/use-drag-object.d.ts +1 -1
  120. package/dist/configurator/scene/scene-entity/materials/RemoteReplacedMaterial.js +1 -1
  121. package/dist/configurator/scene/scene-entity/objects/SceneEntityObjectTextDecal.d.ts +1 -1
  122. package/dist/configurator/ui/assistant/AssistantMarkdown.d.ts +1 -1
  123. package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -1
  124. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  125. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.d.ts +13 -0
  126. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.js +1 -0
  127. package/dist/configurator/ui/assistant/entity-link/entity-link-selection.d.ts +22 -0
  128. package/dist/configurator/ui/assistant/entity-link/entity-link-selection.js +1 -0
  129. package/dist/configurator/ui/assistant/entity-link/entity-link-state.d.ts +27 -0
  130. package/dist/configurator/ui/assistant/entity-link/entity-link-state.js +1 -0
  131. package/dist/configurator/ui/assistant/entity-link/entity-link-target.d.ts +5 -0
  132. package/dist/configurator/ui/assistant/entity-link/entity-link-target.js +1 -0
  133. package/dist/configurator/ui/assistant/entity-link/index.d.ts +3 -0
  134. package/dist/configurator/ui/assistant/entity-link/index.js +1 -0
  135. package/dist/configurator/ui/configurator-layout/sidebar-keys/index.d.ts +1 -0
  136. package/dist/configurator/ui/configurator-layout/sidebar-keys/index.js +1 -0
  137. package/dist/configurator/ui/configurator-layout/sidebar-keys/sidebar-keys.d.ts +11 -0
  138. package/dist/configurator/ui/configurator-layout/sidebar-keys/sidebar-keys.js +1 -0
  139. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/DesktopSidebar.d.ts +101 -0
  140. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/DesktopSidebar.js +16 -0
  141. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/index.d.ts +1 -0
  142. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/index.js +1 -0
  143. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.d.ts +4 -4
  144. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.js +1 -1
  145. package/dist/configurator/ui/configurator-layout/slots/services/SideEffects.d.ts +3 -6
  146. package/dist/configurator/ui/configurator-layout/slots/services/SideEffects.js +1 -1
  147. package/dist/configurator/ui/configurator-layout/slots/slots.d.ts +1 -0
  148. package/dist/configurator/ui/configurator-layout/slots/slots.js +1 -1
  149. package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.d.ts +0 -74
  150. package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.js +5 -20
  151. package/dist/configurator/ui/legacy/layout/steps/StepsNavigation.d.ts +2 -2
  152. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.d.ts +2 -2
  153. package/dist/docs/dimensions/3d-scene-integration/dimension-indicators.mdx +2 -2
  154. package/dist/docs/dimensions/3d-scene-integration/editable-angle-indicator.mdx +1 -1
  155. package/dist/docs/dimensions/3d-scene-integration/editable-distance-dimension-indicator.mdx +1 -1
  156. package/dist/docs/dimensions/3d-scene-integration/list-selector-dimension-indicator.mdx +1 -1
  157. package/dist/docs/drag-and-drop/drag-handle.mdx +1 -1
  158. package/dist/docs/drag-and-drop/hotspot-handle.mdx +1 -1
  159. package/dist/docs/drag-and-drop/planes.mdx +1 -1
  160. package/dist/docs/drag-and-drop/rotatable.mdx +2 -2
  161. package/dist/docs/index.json +42 -1
  162. package/dist/docs/layouts/custom-layout.mdx +1164 -0
  163. package/dist/docs/layouts/header/fixed.mdx +2 -2
  164. package/dist/docs/layouts/header/floating.mdx +2 -2
  165. package/dist/docs/layouts/sidebar/in-a-custom-layout.mdx +380 -0
  166. package/dist/docs/layouts/sidebar-footer/basic.mdx +32 -77
  167. package/dist/docs/other-features/client-side-rendering/declarative.mdx +1 -1
  168. package/dist/docs/other-features/transformers.mdx +4 -0
  169. package/dist/docs/phoenix/application-states.mdx +9 -7
  170. package/dist/docs/phoenix/configurator-interface.mdx +87 -18
  171. package/dist/docs/phoenix/domain-model.mdx +4 -0
  172. package/dist/docs/phoenix/finalization.mdx +1 -1
  173. package/dist/docs/phoenix/layout-slots.mdx +114 -0
  174. package/dist/docs/phoenix/phoenix-cli.mdx +5 -1
  175. package/dist/docs/phoenix/project-structure.mdx +6 -3
  176. package/dist/docs/phoenix/testing.mdx +140 -0
  177. package/dist/docs/phoenix/webhook-membership.mdx +10 -9
  178. package/dist/docs/phoenix/webhooks.mdx +1 -1
  179. package/dist/domain/admin-domain/implementation/common-admin-expressions.d.ts +26 -11
  180. package/dist/domain/admin-domain/implementation/common-admin-publish.d.ts +1 -2
  181. package/dist/domain/admin-domain/index.js +1 -1
  182. package/dist/domain/application/GetApplicationWrapperHandler.d.ts +1 -1
  183. package/dist/domain/application/application-config.d.ts +4 -2
  184. package/dist/domain/application/assistant/assistant-fields.d.ts +12 -0
  185. package/dist/domain/application/assistant/assistant-fields.js +1 -0
  186. package/dist/domain/application/assistant/assistant-manifest.d.ts +9 -1
  187. package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +38 -2
  188. package/dist/domain/application/assistant/assistant-resolved-manifest.js +1 -1
  189. package/dist/domain/application/assistant/build-assistant-lenses.d.ts +14 -0
  190. package/dist/domain/application/assistant/build-assistant-lenses.js +5 -0
  191. package/dist/domain/application/assistant/build-assistant-manifest.js +1 -1
  192. package/dist/domain/application/assistant/create-assistant-execution-schema.d.ts +32 -0
  193. package/dist/domain/application/assistant/create-assistant-execution-schema.js +1 -0
  194. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
  195. package/dist/domain/application/assistant/index.d.ts +6 -1
  196. package/dist/domain/application/assistant/index.js +1 -1
  197. package/dist/domain/application/assistant/session-setup/AssistantSetupHandler.d.ts +20 -0
  198. package/dist/domain/application/assistant/session-setup/AssistantSetupHandler.js +1 -0
  199. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.d.ts +10 -0
  200. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.js +1 -0
  201. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.d.ts +48 -0
  202. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.js +1 -0
  203. package/dist/domain/application/assistant/session-setup/create-session-assistant.d.ts +15 -0
  204. package/dist/domain/application/assistant/session-setup/create-session-assistant.js +1 -0
  205. package/dist/domain/application/assistant/session-setup/index.d.ts +4 -0
  206. package/dist/domain/application/assistant/session-setup/index.js +1 -0
  207. package/dist/domain/application/configurator-builder.d.ts +1 -1
  208. package/dist/domain/application/configurator-builder.js +1 -1
  209. package/dist/domain/application/create-initial-published-data.d.ts +5 -5
  210. package/dist/domain/application/index.d.ts +0 -1
  211. package/dist/domain/application/index.js +1 -1
  212. package/dist/domain/application/published-data/map-published-chunked-data.d.ts +1 -1
  213. package/dist/domain/application/published-data/map-published-data.d.ts +7 -3
  214. package/dist/domain/core/component/domain-component-optic.d.ts +1 -2
  215. package/dist/domain/core/component/domain-component-optic.js +2 -2
  216. package/dist/domain/core/component/system-component-filter.d.ts +15 -2
  217. package/dist/domain/core/expression/constant-expressions.d.ts +16 -8
  218. package/dist/domain/core/expression/custom-expression.d.ts +16 -3
  219. package/dist/domain/core/invariant/violation.d.ts +50 -2
  220. package/dist/domain/core/invariant/violation.js +1 -1
  221. package/dist/domain/core/model/model.d.ts +1 -1
  222. package/dist/domain/core/recipe/recipes.d.ts +18 -50
  223. package/dist/domain/core/recipe/recipes.js +1 -1
  224. package/dist/domain/core/relation/all-of-type-relation.d.ts +8 -21
  225. package/dist/domain/core/relation/all-of-type-relation.js +1 -1
  226. package/dist/domain/core/relation/direct-relation.d.ts +13 -24
  227. package/dist/domain/core/relation/index.d.ts +0 -1
  228. package/dist/domain/core/relation/indirect-relation.d.ts +12 -67
  229. package/dist/domain/core/relation/indirect-relation.js +1 -1
  230. package/dist/domain/core/relation/relation-factory.d.ts +19 -15
  231. package/dist/domain/core/relation/relation-factory.js +1 -1
  232. package/dist/domain/core/state/state.d.ts +1 -1
  233. package/dist/domain/domain-runtime/access/selectors.d.ts +9 -0
  234. package/dist/domain/domain-runtime/access/selectors.js +1 -1
  235. package/dist/domain/domain-runtime/access/types.d.ts +2 -0
  236. package/dist/domain/domain-runtime/access/types.js +1 -1
  237. package/dist/domain/domain-runtime/domain-context/selectors.d.ts +14 -13
  238. package/dist/domain/domain-runtime/domain-context/selectors.js +1 -1
  239. package/dist/domain/domain-runtime/domain-context/types.d.ts +4 -1
  240. package/dist/domain/domain-runtime/domain-runtime.d.ts +32 -16
  241. package/dist/domain/domain-runtime/errors/implementation-error-collector.d.ts +19 -0
  242. package/dist/domain/domain-runtime/errors/implementation-error-collector.js +1 -0
  243. package/dist/domain/domain-runtime/errors/implementation-error.d.ts +46 -0
  244. package/dist/domain/domain-runtime/errors/implementation-error.js +1 -0
  245. package/dist/domain/domain-runtime/errors/implementation-errors.d.ts +13 -0
  246. package/dist/domain/domain-runtime/errors/implementation-errors.js +1 -0
  247. package/dist/domain/domain-runtime/errors/index.d.ts +4 -0
  248. package/dist/domain/domain-runtime/errors/index.js +1 -0
  249. package/dist/domain/domain-runtime/errors/to-implementation-errors.d.ts +10 -0
  250. package/dist/domain/domain-runtime/errors/to-implementation-errors.js +1 -0
  251. package/dist/domain/domain-runtime/index.d.ts +1 -0
  252. package/dist/domain/domain-runtime/index.js +1 -1
  253. package/dist/domain/domain-runtime/spec/initialize.d.ts +11 -0
  254. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  255. package/dist/domain/domain-runtime/spec/module-checks/project-modules.d.ts +8 -1
  256. package/dist/domain/domain-runtime/spec/module-checks/project-modules.js +1 -1
  257. package/dist/domain/domain-runtime/spec/module-checks/resolve-action-modules.js +1 -1
  258. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.js +1 -1
  259. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.d.ts +7 -7
  260. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.js +1 -1
  261. package/dist/domain/domain-runtime/spec/module-checks/resolve-invariant-modules.js +1 -1
  262. package/dist/domain/extensions/attribute-switch.d.ts +1 -1
  263. package/dist/domain/extensions/attribute-switch.js +1 -1
  264. package/dist/domain/extensions/canvas-config.d.ts +1 -1
  265. package/dist/domain/extensions/client-side-image.d.ts +2 -2
  266. package/dist/domain/extensions/client-side-image.js +1 -1
  267. package/dist/domain/extensions/common/angle-indicator-schema.d.ts +2 -2
  268. package/dist/domain/extensions/common/dimension-indicator-schema.d.ts +2 -2
  269. package/dist/domain/extensions/editable-angle-indicator.d.ts +1 -1
  270. package/dist/domain/extensions/editable-distance-dimension-indicator.d.ts +1 -1
  271. package/dist/domain/extensions/editable-offset-indicator.d.ts +1 -1
  272. package/dist/domain/extensions/editable-offset-indicator.js +1 -1
  273. package/dist/domain/extensions/fit-selection-orthographic-camera-component.js +1 -1
  274. package/dist/domain/extensions/fit-selection-perspective-camera-component.js +1 -1
  275. package/dist/domain/extensions/horizontal-tabs.d.ts +2 -2
  276. package/dist/domain/extensions/list-selector-dimension-indicator.d.ts +1 -1
  277. package/dist/domain/extensions/navigation-steps.d.ts +2 -2
  278. package/dist/domain/extensions/offset-indicator.js +1 -1
  279. package/dist/domain/extensions/rotation-handle.d.ts +2 -2
  280. package/dist/domain/extensions/save-template-thumbnail.d.ts +2 -2
  281. package/dist/domain/extensions/save-template-thumbnail.js +1 -1
  282. package/dist/domain/extensions/scene-entity-animation.js +1 -1
  283. package/dist/domain/mocks/create-mock-domain-context.d.ts +1 -1
  284. package/dist/domain/mocks/create-mock-domain-runtime.d.ts +18 -9
  285. package/dist/domain/mocks/create-mock-domain-runtime.js +1 -1
  286. package/dist/domain/mocks/create-mock-domain.d.ts +1 -1
  287. package/dist/domain/mocks/create-mock-domain.js +1 -1
  288. package/dist/domain/mocks/create-mock-state.d.ts +2 -2
  289. package/dist/domain/mocks/create-test-application-config.d.ts +59 -0
  290. package/dist/domain/mocks/create-test-application-config.js +1 -0
  291. package/dist/domain/mocks/index.d.ts +1 -0
  292. package/dist/domain/mocks/index.js +1 -1
  293. package/dist/domain/projections/blender-projections/camera.d.ts +1 -1
  294. package/dist/domain/system-components/application-config.d.ts +2 -2
  295. package/dist/domain/system-components/child-entity-selection.js +1 -1
  296. package/dist/domain/system-components/collision-box-geometry.d.ts +4 -2
  297. package/dist/domain/system-components/collision-geometry.d.ts +4 -2
  298. package/dist/domain/system-components/collision-point-geometry.d.ts +4 -2
  299. package/dist/domain/system-components/common/material-override-schema.d.ts +2 -2
  300. package/dist/domain/system-components/common/recipes.d.ts +21 -3
  301. package/dist/domain/system-components/common/recipes.js +1 -1
  302. package/dist/domain/system-components/constraint.d.ts +10 -23
  303. package/dist/domain/system-components/drag-handle.d.ts +1 -1
  304. package/dist/domain/system-components/drag-handle.js +1 -1
  305. package/dist/domain/system-components/fit-entity-orthographic-camera-component.js +1 -1
  306. package/dist/domain/system-components/fit-entity-perspective-camera-component.js +1 -1
  307. package/dist/domain/system-components/fit-root-orthographic-camera-component.js +1 -1
  308. package/dist/domain/system-components/fit-root-perspective-camera-component.js +1 -1
  309. package/dist/domain/system-components/hotspot-drag-handle.d.ts +1 -1
  310. package/dist/domain/system-components/hotspot-drag-handle.js +1 -1
  311. package/dist/domain/system-components/material-swatch.js +1 -1
  312. package/dist/domain/system-components/scene-entity-material-override.d.ts +1 -1
  313. package/dist/domain/system-components/scene-entity-object-material-override.d.ts +1 -1
  314. package/dist/domain/system-components/scene-entity-object-text-decal.d.ts +1 -1
  315. package/dist/domain/system-components/scene-entity-object-transimissive-material-override.d.ts +1 -1
  316. package/dist/domain/system-components/scene-entity-transimissive-material-override.d.ts +1 -1
  317. package/dist/domain/system-components/static-orthographic-camera-component.js +1 -1
  318. package/dist/domain/system-components/static-perspective-camera-component.js +1 -1
  319. package/dist/domain/utils/eval-cache.d.ts +1 -1
  320. package/dist/domain/utils/map-nested-object.d.ts +1 -1
  321. package/dist/editor/domain-editors/use-implementation-files.d.ts +1 -2
  322. package/dist/editor/mocks/EditorMockContext.js +1 -1
  323. package/dist/legacy/domain-cli/gen/configurator-builder.js +13 -12
  324. package/dist/legacy/domain-cli/gen/constant-expressions.js +1 -1
  325. package/dist/legacy/domain-cli/gen/defaults.js +1 -7
  326. package/dist/legacy/domain-cli/gen/relations.js +1 -1
  327. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  328. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  329. package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +81 -68
  330. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/claude-md.d.ts +1 -1
  331. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/cursor-rules.d.ts +1 -1
  332. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.d.ts +1 -1
  333. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.js +2 -1
  334. package/dist/phoenix/commands/deploy.js +1 -1
  335. package/dist/phoenix/services/source-archive.d.ts +1 -0
  336. package/dist/phoenix/services/source-archive.js +1 -1
  337. package/dist/react-sdk/application-runtime/hooks/use-access-service.d.ts +2 -0
  338. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.js +1 -1
  339. package/dist/react-sdk/application-runtime/routing/access-service.d.ts +1 -0
  340. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.d.ts +33 -16
  341. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.js +1 -1
  342. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.d.ts +30 -0
  343. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.js +1 -0
  344. package/dist/react-sdk/domain-context/common-hooks/use-domain-context.d.ts +4 -4
  345. package/dist/react-sdk/domain-context/index.d.ts +2 -1
  346. package/dist/react-sdk/domain-context/index.js +1 -1
  347. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.d.ts +6 -0
  348. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.js +1 -1
  349. package/dist/react-sdk/domain-controls/hooks/use-angle-dimension.d.ts +1 -1
  350. package/dist/ui-sdk/theme/types.d.ts +1 -1
  351. package/dist/webhook/builders/webhook-builder.js +1 -1
  352. package/package.json +3 -3
  353. package/schema/domain-spec.json +1115 -209
  354. package/dist/application-spec/generate-application/code/templates/prettier-ignore.d.ts +0 -1
  355. package/dist/application-spec/generate-application/code/templates/prettier-ignore.js +0 -6
  356. package/dist/domain/application/resource-builder.d.ts +0 -13
  357. package/dist/domain/application/resource-builder.js +0 -1
  358. package/dist/domain/core/relation/relation-implementation.d.ts +0 -7
  359. /package/dist/{domain/core/relation/relation-implementation.js → application-spec/core/expressions/relation-expression-params.js} +0 -0
  360. /package/dist/application-spec/{core → enhanced-json}/eval-code-uses-self.d.ts +0 -0
  361. /package/dist/application-spec/{core → enhanced-json}/eval-code-uses-self.js +0 -0
  362. /package/dist/application-spec/{core → enhanced-json}/eval-to-constant.js +0 -0
@@ -1,71 +1,17 @@
1
1
  import type { ExpressionMeta } from '../expression/index.js';
2
- import { type AliasMap, type DomainEntity, type DomainEntityId, type ExpandAlias, type TypeOrAlias } from '../model/index.js';
2
+ import { type AnyAliasMap, type DomainEntity, type DomainEntityId } from '../model/index.js';
3
3
  import type { DomainState } from '../state/index.js';
4
- import type { ArrayReferenceField, SingleReferenceField } from './reference-field.js';
5
- interface IndirectNullableSingle0Relation<ENTITIES extends DomainEntity<string>, ALIASES extends Record<string, ENTITIES>, SELF extends TypeOrAlias<ENTITIES, ALIASES>, TARGET extends TypeOrAlias<ENTITIES, ALIASES>> {
6
- kind: 'indirect';
7
- target: TARGET;
8
- field: SingleReferenceField<ExpandAlias<ENTITIES, ALIASES, TARGET>, ExpandAlias<ENTITIES, ALIASES, SELF>, null>;
9
- cardinality: '0-1';
10
- meta?: ExpressionMeta;
11
- }
12
- interface IndirectNonNullableSingle0Relation<ENTITIES extends DomainEntity<string>, ALIASES extends Record<string, ENTITIES>, SELF extends TypeOrAlias<ENTITIES, ALIASES>, TARGET extends TypeOrAlias<ENTITIES, ALIASES>> {
13
- kind: 'indirect';
14
- target: TARGET;
15
- field: SingleReferenceField<ExpandAlias<ENTITIES, ALIASES, TARGET>, ExpandAlias<ENTITIES, ALIASES, SELF>, never>;
16
- cardinality: '0-1';
17
- meta?: ExpressionMeta;
18
- }
19
- interface IndirectNullableSingle1Relation<ENTITIES extends DomainEntity<string>, ALIASES extends Record<string, ENTITIES>, SELF extends TypeOrAlias<ENTITIES, ALIASES>, TARGET extends TypeOrAlias<ENTITIES, ALIASES>> {
20
- kind: 'indirect';
21
- target: TARGET;
22
- field: SingleReferenceField<ExpandAlias<ENTITIES, ALIASES, TARGET>, ExpandAlias<ENTITIES, ALIASES, SELF>, null>;
23
- cardinality: '1-1';
24
- meta?: ExpressionMeta;
25
- }
26
- interface IndirectNonNullableSingle1Relation<ENTITIES extends DomainEntity<string>, ALIASES extends Record<string, ENTITIES>, SELF extends TypeOrAlias<ENTITIES, ALIASES>, TARGET extends TypeOrAlias<ENTITIES, ALIASES>> {
27
- kind: 'indirect';
28
- target: TARGET;
29
- field: SingleReferenceField<ExpandAlias<ENTITIES, ALIASES, TARGET>, ExpandAlias<ENTITIES, ALIASES, SELF>, never>;
30
- cardinality: '1-1';
31
- meta?: ExpressionMeta;
32
- }
33
- interface IndirectSingleNRelation<ENTITIES extends DomainEntity<string>, ALIASES extends Record<string, ENTITIES>, SELF extends TypeOrAlias<ENTITIES, ALIASES>, TARGET extends TypeOrAlias<ENTITIES, ALIASES>> {
34
- kind: 'indirect';
35
- target: TARGET;
36
- field: SingleReferenceField<ExpandAlias<ENTITIES, ALIASES, TARGET>, ExpandAlias<ENTITIES, ALIASES, SELF>, never>;
37
- cardinality: '0-N' | '1-N';
38
- meta?: ExpressionMeta;
39
- }
40
- interface IndirectNullableSingleNRelation<ENTITIES extends DomainEntity<string>, ALIASES extends Record<string, ENTITIES>, SELF extends TypeOrAlias<ENTITIES, ALIASES>, TARGET extends TypeOrAlias<ENTITIES, ALIASES>> {
41
- kind: 'indirect';
42
- target: TARGET;
43
- field: SingleReferenceField<ExpandAlias<ENTITIES, ALIASES, TARGET>, ExpandAlias<ENTITIES, ALIASES, SELF>, null>;
44
- cardinality: '0-N' | '1-N';
45
- meta?: ExpressionMeta;
46
- }
47
- interface IndirectArray0Relation<ENTITIES extends DomainEntity<string>, ALIASES extends Record<string, ENTITIES>, SELF extends TypeOrAlias<ENTITIES, ALIASES>, TARGET extends TypeOrAlias<ENTITIES, ALIASES>> {
48
- kind: 'indirect';
49
- target: TARGET;
50
- field: ArrayReferenceField<ExpandAlias<ENTITIES, ALIASES, TARGET>, ExpandAlias<ENTITIES, ALIASES, SELF>>;
51
- cardinality: '0-1';
52
- meta?: ExpressionMeta;
53
- }
54
- interface IndirectArray1Relation<ENTITIES extends DomainEntity<string>, ALIASES extends Record<string, ENTITIES>, SELF extends TypeOrAlias<ENTITIES, ALIASES>, TARGET extends TypeOrAlias<ENTITIES, ALIASES>> {
55
- kind: 'indirect';
56
- target: TARGET;
57
- field: ArrayReferenceField<ExpandAlias<ENTITIES, ALIASES, TARGET>, ExpandAlias<ENTITIES, ALIASES, SELF>>;
58
- cardinality: '1-1';
59
- meta?: ExpressionMeta;
60
- }
61
- interface IndirectArrayNRelation<ENTITIES extends DomainEntity<string>, ALIASES extends Record<string, ENTITIES>, SELF extends TypeOrAlias<ENTITIES, ALIASES>, TARGET extends TypeOrAlias<ENTITIES, ALIASES>> {
4
+ /**
5
+ * A relation whose related entities are the ones that reference the entity in their `field`. The
6
+ * application-spec parser checks that `field` is a reference field of the target that points back.
7
+ */
8
+ export interface IndirectRelation {
62
9
  kind: 'indirect';
63
- target: TARGET;
64
- field: ArrayReferenceField<ExpandAlias<ENTITIES, ALIASES, TARGET>, ExpandAlias<ENTITIES, ALIASES, SELF>>;
65
- cardinality: '0-N' | '1-N';
10
+ target: string;
11
+ field: string;
12
+ cardinality: '0-1' | '1-1' | '0-N' | '1-N';
66
13
  meta?: ExpressionMeta;
67
14
  }
68
- export type IndirectRelation<ENTITIES extends DomainEntity<string>, ALIASES extends Record<string, ENTITIES>, SELF extends TypeOrAlias<ENTITIES, ALIASES>, TARGET extends TypeOrAlias<ENTITIES, ALIASES>> = IndirectArray1Relation<ENTITIES, ALIASES, SELF, TARGET> | IndirectArray0Relation<ENTITIES, ALIASES, SELF, TARGET> | IndirectArrayNRelation<ENTITIES, ALIASES, SELF, TARGET> | IndirectNullableSingle0Relation<ENTITIES, ALIASES, SELF, TARGET> | IndirectNonNullableSingle0Relation<ENTITIES, ALIASES, SELF, TARGET> | IndirectNullableSingle1Relation<ENTITIES, ALIASES, SELF, TARGET> | IndirectNonNullableSingle1Relation<ENTITIES, ALIASES, SELF, TARGET> | IndirectSingleNRelation<ENTITIES, ALIASES, SELF, TARGET> | IndirectNullableSingleNRelation<ENTITIES, ALIASES, SELF, TARGET>;
69
15
  /**
70
16
  * Resolves `indirect` relations from a per-state reverse-reference index. Relations reading the
71
17
  * same field on the same set of target types share one index mapping each referenced id to the
@@ -73,8 +19,7 @@ export type IndirectRelation<ENTITIES extends DomainEntity<string>, ALIASES exte
73
19
  * every index, and every later resolution on that state is a lookup. Registration closes once the
74
20
  * first state has been indexed, so an index can never be missing from a state already walked.
75
21
  */
76
- export declare const createIndirectRelation: <ENTITIES extends DomainEntity<string>, ALIASES extends Record<string, ENTITIES>>(aliasMap: AliasMap<ALIASES>) => (relation: {
77
- readonly target: TypeOrAlias<ENTITIES, ALIASES>;
22
+ export declare const createIndirectRelation: (aliasMap: AnyAliasMap) => (relation: {
23
+ readonly target: string;
78
24
  readonly field: string;
79
- }) => (sourceId: DomainEntityId<string>, state: DomainState<ENTITIES>) => DomainEntityId<string>[];
80
- export {};
25
+ }) => (sourceId: DomainEntityId<string>, state: DomainState<DomainEntity<string>>) => DomainEntityId<string>[];
@@ -1 +1 @@
1
- import{isArray as e}from"@salsita-ai/common/utils";import{expandAlias as t}from"../model/index.js";let r=e=>"string"==typeof e;export const createIndirectRelation=i=>{let n=new Map,o=new WeakMap,a=!1;return l=>{if(a)throw Error(`Cannot register indirect relation ${String(l.target)}#${l.field} after evaluation started. Create all relation expressions before evaluating the domain state.`);let s=new Set(t(i,l.target)),f=`${l.field}|${[...s].sort().join("|")}`;return n.set(f,{field:l.field,targetTypes:s}),(t,i)=>(t=>{let i=o.get(t);if(i)return i;a=!0;let l=new Map([...n.keys()].map(e=>[e,new Map]));for(let i of t.entities)for(let[t,{field:o,targetTypes:a}]of n){if(!a.has(i.type))continue;let n=i[o],s=e(n)?new Set(n.filter(r)):r(n)?[n]:[],f=l.get(t);for(let e of s){let t=f.get(e);t||(t=[],f.set(e,t)),t.push(i.id)}}return o.set(t,l),l})(i).get(f).get(t)??[]}};
1
+ import{isArray as e}from"@salsita-ai/common/utils";import{expandAlias as t}from"../model/index.js";let r=e=>"string"==typeof e;export const createIndirectRelation=i=>{let n=new Map,o=new WeakMap,a=!1;return l=>{if(a)throw Error(`Cannot register indirect relation ${l.target}#${l.field} after evaluation started. Create all relation expressions before evaluating the domain state.`);let s=new Set(t(i,l.target)),f=`${l.field}|${[...s].sort().join("|")}`;return n.set(f,{field:l.field,targetTypes:s}),(t,i)=>(t=>{let i=o.get(t);if(i)return i;a=!0;let l=new Map([...n.keys()].map(e=>[e,new Map]));for(let i of t.entities)for(let[t,{field:o,targetTypes:a}]of n){if(!a.has(i.type))continue;let n=i[o],s=e(n)?new Set(n.filter(r)):r(n)?[n]:[],f=l.get(t);for(let e of s){let t=f.get(e);t||(t=[],f.set(e,t)),t.push(i.id)}}return o.set(t,l),l})(i).get(f).get(t)??[]}};
@@ -1,18 +1,22 @@
1
1
  import type { AnonymousExpression } from '../expression/index.js';
2
- import type { $DomainEntity, AliasMap, DomainEntity, ExpandAlias, TypeOrAlias } from '../model/index.js';
2
+ import { type $DomainEntity, type AnyAliasMap, type DomainEntity } from '../model/index.js';
3
3
  import { type AllOfTypeRelation } from './all-of-type-relation.js';
4
- import type { DirectRelation } from './direct-relation.js';
4
+ import { type DirectRelation } from './direct-relation.js';
5
5
  import { type IndirectRelation } from './indirect-relation.js';
6
- export type Relation<ENTITIES extends DomainEntity<string>, ALIASES extends Record<string, ENTITIES>, SELF extends TypeOrAlias<ENTITIES, ALIASES>, TARGET extends TypeOrAlias<ENTITIES, ALIASES>> = DirectRelation<ENTITIES, ALIASES, SELF, TARGET> | AllOfTypeRelation<ENTITIES, ALIASES, TARGET> | IndirectRelation<ENTITIES, ALIASES, SELF, TARGET>;
7
- export interface RelationFactory<ENTITIES extends DomainEntity<string>, ALLOWED_ROOT_ENTITIES extends ENTITIES, $MAP extends Record<TypeOrAlias<ENTITIES, ALIASES>, $DomainEntity<ENTITIES>>, PUBLISHED_DATA extends Record<string, unknown>, SESSION_DATA extends Record<string, unknown>, FRONTEND_DATA extends Record<string, unknown>, ALIASES extends Record<string, ENTITIES>> {
8
- <SELF extends TypeOrAlias<ENTITIES, ALIASES>, TARGET extends TypeOrAlias<ENTITIES, ALIASES>>(relation: Extract<Relation<ENTITIES, ALIASES, SELF, TARGET>, {
9
- cardinality: '0-1';
10
- }>): AnonymousExpression<ENTITIES, ALLOWED_ROOT_ENTITIES, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA, ExpandAlias<ENTITIES, ALIASES, SELF>, $MAP[TARGET] | null>;
11
- <SELF extends TypeOrAlias<ENTITIES, ALIASES>, TARGET extends TypeOrAlias<ENTITIES, ALIASES>>(relation: Extract<Relation<ENTITIES, ALIASES, SELF, TARGET>, {
12
- cardinality: '1-1';
13
- }>): AnonymousExpression<ENTITIES, ALLOWED_ROOT_ENTITIES, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA, ExpandAlias<ENTITIES, ALIASES, SELF>, $MAP[TARGET]>;
14
- <SELF extends TypeOrAlias<ENTITIES, ALIASES>, TARGET extends TypeOrAlias<ENTITIES, ALIASES>>(relation: Extract<Relation<ENTITIES, ALIASES, SELF, TARGET>, {
15
- cardinality: '0-N' | '1-N';
16
- }>): AnonymousExpression<ENTITIES, ALLOWED_ROOT_ENTITIES, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA, ExpandAlias<ENTITIES, ALIASES, SELF>, ReadonlyArray<$MAP[TARGET]>>;
17
- }
18
- export declare const createRelationFactory: <ENTITIES extends DomainEntity<string>, ALLOWED_ROOT_ENTITIES extends ENTITIES, $MAP extends Record<TypeOrAlias<ENTITIES, ALIASES>, $DomainEntity<ENTITIES>>, PUBLISHED_DATA extends Record<string, unknown>, SESSION_DATA extends Record<string, unknown>, FRONTEND_DATA extends Record<string, unknown>, ALIASES extends Record<string, ENTITIES>>(aliasMap: AliasMap<ALIASES>) => RelationFactory<ENTITIES, ALLOWED_ROOT_ENTITIES, $MAP, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA, ALIASES>;
6
+ /** A relation as a spec declares it: where the related entities are found and how many there may be. */
7
+ export type Relation = DirectRelation | AllOfTypeRelation | IndirectRelation;
8
+ type RelatedEntity = $DomainEntity<DomainEntity<string>>;
9
+ /**
10
+ * The expression of a relation as a domain takes it. The entity and data types are erased, so that
11
+ * the domain of any project accepts it: an expression typed with the base entity type is not
12
+ * assignable to one typed with a project's entities. The type a project reads from a relation is
13
+ * the one its generated model declares for the relation's property.
14
+ */
15
+ type RelationExpression = AnonymousExpression<any, any, any, any, any, any, RelatedEntity | null | ReadonlyArray<RelatedEntity>>;
16
+ /**
17
+ * Makes the expression of one relation: it collects the related entities of an entity and returns
18
+ * them as the cardinality says, one entity, one entity or `null`, or an array.
19
+ */
20
+ export type RelationFactory = (relation: Relation) => RelationExpression;
21
+ export declare const createRelationFactory: (aliasMap: AnyAliasMap) => RelationFactory;
22
+ export {};
@@ -1 +1 @@
1
- import{match as t}from"ts-pattern";import{createAllOfTypeRelation as e}from"./all-of-type-relation.js";import{directRelation as r}from"./direct-relation.js";import{createIndirectRelation as i}from"./indirect-relation.js";export const createRelationFactory=n=>{let a=e(n),o=i(n);return e=>{let i=t(e).with({kind:"direct"},t=>r(t,n)).with({kind:"indirect"},t=>o(t)).with({kind:"allOfType"},t=>a(t)).exhaustive(),l=t(e).with({cardinality:"0-1"},()=>t=>{if(t.length>1)throw Error(`Expected at most one entity, but got ${t.length}`);return t.length>0?t[0]:null}).with({cardinality:"1-1"},()=>t=>{if(1!==t.length)throw Error(`Expected exactly one entity, but got ${t.length}`);return t[0]}).with({cardinality:"0-N"},()=>t=>t).with({cardinality:"1-N"},()=>t=>{if(0===t.length)throw Error("Expected at least one entity, but got none");return t}).exhaustive();return{meta:{alwaysEvaluate:!0,...e.meta},evaluate:(t,r,a)=>{let o=i(t,r,a.domain),d=a.domain.get$Entities(o,r);if(!d.every(t=>e.target in n?n[e.target].includes(t.type):t.type===e.target)){let t=d.map(t=>t.type).filter(t=>e.target in n?n[e.target].includes(t):t===e.target);throw Error(`Expected ${e.target} entities, but got ${t.join(", ")}`)}return l(d)}}}};
1
+ import{match as t}from"ts-pattern";import{expandAlias as e}from"../model/index.js";import{createAllOfTypeRelation as r}from"./all-of-type-relation.js";import{directRelation as i}from"./direct-relation.js";import{createIndirectRelation as n}from"./indirect-relation.js";export const createRelationFactory=o=>{let a=r(o),l=n(o);return r=>{let n=t(r).with({kind:"direct"},t=>i(t)).with({kind:"indirect"},t=>l(t)).with({kind:"allOfType"},t=>a(t)).exhaustive(),d=t(r).with({cardinality:"0-1"},()=>t=>{if(t.length>1)throw Error(`Expected at most one entity, but got ${t.length}`);return t[0]??null}).with({cardinality:"1-1"},()=>t=>{let[e,...r]=t;if(void 0===e||r.length>0)throw Error(`Expected exactly one entity, but got ${t.length}`);return e}).with({cardinality:"0-N"},()=>t=>t).with({cardinality:"1-N"},()=>t=>{if(0===t.length)throw Error("Expected at least one entity, but got none");return t}).exhaustive(),c=e(o,r.target);return{meta:{alwaysEvaluate:!0,...r.meta},evaluate:(t,e,i)=>{let o=n(t,e,i.domain),a=i.domain.get$Entities(o,e);if(!a.every(t=>c.includes(t.type))){let t=a.map(t=>t.type).filter(t=>!c.includes(t));throw Error(`Expected ${r.target} entities, but got ${t.join(", ")}`)}return d(a)}}}};
@@ -6,4 +6,4 @@ export interface DomainState<ENTITIES extends DomainEntity<string>> {
6
6
  readonly ephemeralRecords: ReadonlyArray<ComponentSnapshot<SystemComponentTypeConstraint>>;
7
7
  }
8
8
  export type DomainStateFactory<ENTITIES extends DomainEntity<string>> = (entities: readonly ENTITIES[], ephemeralRecords: ReadonlyArray<ComponentSnapshot<SystemComponentTypeConstraint>>, rootEntityType: ENTITIES['type']) => DomainState<ENTITIES>;
9
- export declare const createInitialDomainState: <ENTITIES extends DomainEntity<string>, ALLOWED_ROOT_ENTITIES extends ENTITIES>(entities: readonly ENTITIES[], rootEntityType: ALLOWED_ROOT_ENTITIES['type']) => DomainState<ENTITIES>;
9
+ export declare const createInitialDomainState: <ENTITIES extends DomainEntity<string>>(entities: readonly ENTITIES[], rootEntityType: ENTITIES['type']) => DomainState<ENTITIES>;
@@ -1,3 +1,4 @@
1
+ import { AccessLevel } from '@salsita-ai/contracts/api';
1
2
  import type { OverridesSelectorState, OverridesSelectors } from '../overrides/index.js';
2
3
  import type { AccessService, ApplicationAccessInfo } from './types.js';
3
4
  /**
@@ -17,24 +18,28 @@ export declare const requireAccessService: (applicationName: 'configurator' | 'a
17
18
  export declare const createAccessInfoSelectors: (context: Context) => {
18
19
  selectConfiguratorRawAccessInfo: import("@salsita-ai/common/utils").Selector<AccessSelectorState, {
19
20
  raw: string;
21
+ access: AccessLevel;
20
22
  viewMode: boolean;
21
23
  revisionId: string | undefined;
22
24
  configurationId: string;
23
25
  } | null>;
24
26
  selectAdminRawAccessInfo: import("@salsita-ai/common/utils").Selector<AccessSelectorState, {
25
27
  raw: string;
28
+ access: AccessLevel;
26
29
  viewMode: boolean;
27
30
  revisionId: string | undefined;
28
31
  configurationId: string;
29
32
  } | null>;
30
33
  selectConfiguratorAccessInfo: import("@salsita-ai/common/utils").Selector<AccessSelectorState, {
31
34
  raw: string;
35
+ access: AccessLevel;
32
36
  viewMode: boolean;
33
37
  revisionId: string | undefined;
34
38
  configurationId: string;
35
39
  }>;
36
40
  selectAdminAccessInfo: import("@salsita-ai/common/utils").Selector<AccessSelectorState, {
37
41
  raw: string;
42
+ access: AccessLevel;
38
43
  viewMode: boolean;
39
44
  revisionId: string | undefined;
40
45
  configurationId: string;
@@ -47,24 +52,28 @@ export declare const createAccessInfoSelectors: (context: Context) => {
47
52
  selectAdminConfigurationId: import("@salsita-ai/common/utils").Selector<AccessSelectorState, string>;
48
53
  getConfiguratorRawAccessInfo: () => {
49
54
  raw: string;
55
+ access: AccessLevel;
50
56
  viewMode: boolean;
51
57
  revisionId: string | undefined;
52
58
  configurationId: string;
53
59
  } | null;
54
60
  getAdminRawAccessInfo: () => {
55
61
  raw: string;
62
+ access: AccessLevel;
56
63
  viewMode: boolean;
57
64
  revisionId: string | undefined;
58
65
  configurationId: string;
59
66
  } | null;
60
67
  getConfiguratorAccessInfo: () => {
61
68
  raw: string;
69
+ access: AccessLevel;
62
70
  viewMode: boolean;
63
71
  revisionId: string | undefined;
64
72
  configurationId: string;
65
73
  };
66
74
  getAdminAccessInfo: () => {
67
75
  raw: string;
76
+ access: AccessLevel;
68
77
  viewMode: boolean;
69
78
  revisionId: string | undefined;
70
79
  configurationId: string;
@@ -1 +1 @@
1
- import{createSelector as e}from"@salsita-ai/common/utils";let c=e=>Error(`Cannot read ${e} access info because valid access is not loaded. Access info is written by the ${e} lifecycle after token validation. Move this read into the loaded ${e} lifecycle.`),i=e=>({accessInfo:e,configurationId:e.configurationId});export const requireAccessService=(e,i)=>{if(null===i)throw c(e);return i};export const createAccessInfoSelectors=n=>{let{getState:o,overridesSelectors:r}=n,s=e.withTypes(),t=s([s.leaf(e=>e.access.configuratorAccessInfo)],e=>e),a=s([s.leaf(e=>e.access.adminAccessInfo)],e=>e),l=s([t],e=>{if(null===e)throw c("configurator");return e}),f=s([a],e=>{if(null===e)throw c("admin");return e}),u=s([t,r.selectAccessService,r.selectAccessLevel],(e,c,n)=>{var o;let r,s,t=c??(null===e?null:i(e));return null===t||null===n?t:(o={configurationId:t.configurationId,...void 0===t.accessInfo.revisionId?{}:{revisionId:t.accessInfo.revisionId},access:n},r=e=>btoa(JSON.stringify(e)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""),s=`${r({alg:"none",typ:"JWT"})}.${r(o)}.`,{configurationId:t.configurationId,accessInfo:{raw:s,viewMode:"read-revision"===n,revisionId:t.accessInfo.revisionId,configurationId:t.configurationId}})}),d=s([a,r.selectAccessService],(e,c)=>null!==c?c:null===e?null:i(e)),g=s([u],e=>requireAccessService("configurator",e)),I=s([d],e=>requireAccessService("admin",e)),A=s([g],e=>e.configurationId),v=s([I],e=>e.configurationId);return{selectConfiguratorRawAccessInfo:t,selectAdminRawAccessInfo:a,selectConfiguratorAccessInfo:l,selectAdminAccessInfo:f,selectConfiguratorRawAccessService:u,selectAdminRawAccessService:d,selectConfiguratorAccessService:g,selectAdminAccessService:I,selectConfiguratorConfigurationId:A,selectAdminConfigurationId:v,getConfiguratorRawAccessInfo:()=>t(o()),getAdminRawAccessInfo:()=>a(o()),getConfiguratorAccessInfo:()=>l(o()),getAdminAccessInfo:()=>f(o()),getConfiguratorRawAccessService:()=>u(o()),getAdminRawAccessService:()=>d(o()),getConfiguratorAccessService:()=>g(o()),getAdminAccessService:()=>I(o()),getConfiguratorConfigurationId:()=>A(o()),getAdminConfigurationId:()=>v(o())}};
1
+ import{createSelector as e}from"@salsita-ai/common/utils";import{AccessLevel as c}from"@salsita-ai/contracts/api";let i=e=>Error(`Cannot read ${e} access info because valid access is not loaded. Access info is written by the ${e} lifecycle after token validation. Move this read into the loaded ${e} lifecycle.`),n=e=>({accessInfo:e,configurationId:e.configurationId});export const requireAccessService=(e,c)=>{if(null===c)throw i(e);return c};export const createAccessInfoSelectors=o=>{let{getState:r,overridesSelectors:s}=o,t=e.withTypes(),a=t([t.leaf(e=>e.access.configuratorAccessInfo)],e=>e),l=t([t.leaf(e=>e.access.adminAccessInfo)],e=>e),f=t([a],e=>{if(null===e)throw i("configurator");return e}),u=t([l],e=>{if(null===e)throw i("admin");return e}),d=t([a,s.selectAccessService,s.selectAccessLevel],(e,i,o)=>{var r;let s,t,a=i??(null===e?null:n(e));return null===a||null===o?a:(r={configurationId:a.configurationId,...void 0===a.accessInfo.revisionId?{}:{revisionId:a.accessInfo.revisionId},access:o},s=e=>btoa(JSON.stringify(e)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""),t=`${s({alg:"none",typ:"JWT"})}.${s(r)}.`,{configurationId:a.configurationId,accessInfo:{raw:t,access:"owner"===o?c.Owner:"read-revision"===o?c.ReadRevision:c.Read,viewMode:"read-revision"===o,revisionId:a.accessInfo.revisionId,configurationId:a.configurationId}})}),g=t([l,s.selectAccessService],(e,c)=>null!==c?c:null===e?null:n(e)),I=t([d],e=>requireAccessService("configurator",e)),v=t([g],e=>requireAccessService("admin",e)),A=t([I],e=>e.configurationId),m=t([v],e=>e.configurationId);return{selectConfiguratorRawAccessInfo:a,selectAdminRawAccessInfo:l,selectConfiguratorAccessInfo:f,selectAdminAccessInfo:u,selectConfiguratorRawAccessService:d,selectAdminRawAccessService:g,selectConfiguratorAccessService:I,selectAdminAccessService:v,selectConfiguratorConfigurationId:A,selectAdminConfigurationId:m,getConfiguratorRawAccessInfo:()=>a(r()),getAdminRawAccessInfo:()=>l(r()),getConfiguratorAccessInfo:()=>f(r()),getAdminAccessInfo:()=>u(r()),getConfiguratorRawAccessService:()=>d(r()),getAdminRawAccessService:()=>g(r()),getConfiguratorAccessService:()=>I(r()),getAdminAccessService:()=>v(r()),getConfiguratorConfigurationId:()=>A(r()),getAdminConfigurationId:()=>m(r())}};
@@ -1,5 +1,7 @@
1
+ import { AccessLevel } from '@salsita-ai/contracts/api';
1
2
  export declare const decodeAccessInfo: (accessToken: string, configurationId: string) => {
2
3
  raw: string;
4
+ access: AccessLevel;
3
5
  viewMode: boolean;
4
6
  revisionId: string | undefined;
5
7
  configurationId: string;
@@ -1 +1 @@
1
- import{jwtDecode as o}from"jwt-decode";import{AccessLevel as e}from"@salsita-ai/contracts/api";export const decodeAccessInfo=(i,r)=>{try{let n=o(i),t=n.exp;if(void 0!==t&&t<Date.now()/1e3||n.configurationId!==r)return null;return{raw:i,viewMode:n.access===e.ReadRevision,revisionId:n.revisionId,configurationId:n.configurationId}}catch(o){return null}};
1
+ import{jwtDecode as e}from"jwt-decode";import{AccessLevel as o}from"@salsita-ai/contracts/api";export const decodeAccessInfo=(i,r)=>{try{let c=e(i),n=c.exp;if(void 0!==n&&n<Date.now()/1e3||c.configurationId!==r)return null;return{raw:i,access:c.access,viewMode:c.access===o.ReadRevision,revisionId:c.revisionId,configurationId:c.configurationId}}catch(e){return null}};
@@ -1,4 +1,4 @@
1
- import { type AnyDomain, type AnyDomainFactory, type DomainComponentOptic, type DomainEntity, type DomainMode, type SystemComponentTypeConstraint } from '../../core/index.js';
1
+ import { type AnyDomain, type AnyDomainFactory, type DomainComponentOptic, type DomainMode, type SystemComponentTypeConstraint } from '../../core/index.js';
2
2
  import { type AnyActionSystem, type AnyDimensionSystem, type AnyDomainContextSystems, type AnyNavigationSystem, type AnyRecipeCookerSystem, type AnyStoreSystem, type AnyUndoSystem } from '../../domain-context/index.js';
3
3
  import { type AnyBlenderProjections, type AnyCollisionProjections, type AnyCompositionProjections, type AnyConstraintProjections, type AnyPositionProjections, type AnyProjectedEntitiesProjections, type AnySnappingProjections, type AnyValidationProjections } from '../../projections/index.js';
4
4
  import { type AnySketchingProjections } from '../../sketching/sketching-projections.js';
@@ -15,17 +15,18 @@ import { type AnyComponentReader } from './component-reader.js';
15
15
  import { DomainContext } from './domain-context.js';
16
16
  import type { AnyExpressionContext } from './expression-context.js';
17
17
  import type { ApplicationDomainContextState, DomainApplicationType, DomainContextInitializationContext, DomainContextInitializationIdentity, DomainContextInitializationState, InitializableSystem, SchemaCoherence } from './types.js';
18
- type ComponentOptic<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>> = DomainComponentOptic<ENTITIES, ALLOWED_ROOT_ENTITIES, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA, ENTITIES, SystemComponentTypeConstraint>;
18
+ /** A component optic of any project, for any component type. */
19
+ type ComponentOptic = DomainComponentOptic<any, any, any, any, any, any, SystemComponentTypeConstraint>;
19
20
  /**
20
21
  * Lookup indexes derived from the current component optics. The component reader and the
21
22
  * component write systems share this representation so a runtime optic update is observed
22
23
  * consistently across reads and writes.
23
24
  */
24
- export interface ComponentReaderIndexes<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>> {
25
- readonly opticMap: ReadonlyMap<ENTITIES['type'], ReadonlyMap<SystemComponentTypeConstraint, ReadonlyMap<string, ComponentOptic<ENTITIES, ALLOWED_ROOT_ENTITIES, PUBLISHED_DATA, SESSION_DATA, FRONTEND_DATA>>>>;
26
- readonly allComponentTypes: ReadonlyMap<ENTITIES['type'], ReadonlySet<SystemComponentTypeConstraint>>;
27
- readonly allComponentInstanceNames: ReadonlyMap<ENTITIES['type'], ReadonlyMap<SystemComponentTypeConstraint, ReadonlySet<string>>>;
28
- readonly dynamicInstanceNames: ReadonlyMap<ENTITIES['type'], ReadonlyMap<SystemComponentTypeConstraint, readonly string[]>>;
25
+ export interface ComponentReaderIndexes {
26
+ readonly opticMap: ReadonlyMap<string, ReadonlyMap<SystemComponentTypeConstraint, ReadonlyMap<string, ComponentOptic>>>;
27
+ readonly allComponentTypes: ReadonlyMap<string, ReadonlySet<SystemComponentTypeConstraint>>;
28
+ readonly allComponentInstanceNames: ReadonlyMap<string, ReadonlyMap<SystemComponentTypeConstraint, ReadonlySet<string>>>;
29
+ readonly dynamicInstanceNames: ReadonlyMap<string, ReadonlyMap<SystemComponentTypeConstraint, readonly string[]>>;
29
30
  }
30
31
  interface Context {
31
32
  readonly applicationType: DomainApplicationType;
@@ -69,7 +70,7 @@ export declare const createDomainContextSelectors: (context: Context) => {
69
70
  selectAliasMap: import("@salsita-ai/common/utils").Selector<DomainContextSelectorState, import("../../index.js").AnyAliasMap>;
70
71
  selectAllowedRootEntityTypes: import("@salsita-ai/common/utils").Selector<DomainContextSelectorState, import("../../index.js").AnyAllowedRootEntityTypes>;
71
72
  selectEntityReflections: import("@salsita-ai/common/utils").Selector<DomainContextSelectorState, import("../../index.js").AnyEntityReflections>;
72
- selectMigrate: import("@salsita-ai/common/utils").Selector<DomainContextSelectorState, import("../../index.js").MigrateFunction<DomainEntity<string>>>;
73
+ selectMigrate: import("@salsita-ai/common/utils").Selector<DomainContextSelectorState, import("../../index.js").MigrateFunction<import("../../index.js").DomainEntity<string>>>;
73
74
  selectLatestMode: import("@salsita-ai/common/utils").Selector<DomainContextSelectorState, DomainMode>;
74
75
  selectLatestConfigurationId: import("@salsita-ai/common/utils").Selector<DomainContextSelectorState, string | null>;
75
76
  selectLatestSessionContext: import("@salsita-ai/common/utils").Selector<DomainContextSelectorState, DomainSessionContext> | import("@salsita-ai/common/utils").Selector<SessionContextSelectorState, DomainSessionContext | null>;
@@ -81,9 +82,9 @@ export declare const createDomainContextSelectors: (context: Context) => {
81
82
  selectIsViewMode: import("@salsita-ai/common/utils").Selector<DomainContextSelectorState, boolean>;
82
83
  selectInitializationState: import("@salsita-ai/common/utils").Selector<DomainContextSelectorState, DomainContextInitializationState>;
83
84
  selectComponentOptics: import("@salsita-ai/common/utils").Selector<DomainContextSelectorState, readonly import("../../index.js").AnyDomainComponentOptic[]>;
84
- selectComponentReaderIndexes: import("@salsita-ai/common/utils").Selector<DomainContextSelectorState, ComponentReaderIndexes<any, any, any, any, any>>;
85
+ selectComponentReaderIndexes: import("@salsita-ai/common/utils").Selector<DomainContextSelectorState, ComponentReaderIndexes>;
85
86
  selectStoreRuntimeDependencies: import("@salsita-ai/common/utils").Selector<DomainContextSelectorState, {
86
- componentReaderIndexes: ComponentReaderIndexes<any, any, any, any, any>;
87
+ componentReaderIndexes: ComponentReaderIndexes;
87
88
  domainExpressions: import("../../index.js").AnyExpressions;
88
89
  allowedRootEntityTypes: import("../../index.js").AnyAllowedRootEntityTypes;
89
90
  }>;
@@ -120,12 +121,12 @@ export declare const createDomainContextSelectors: (context: Context) => {
120
121
  getAliasMap: () => import("../../index.js").AnyAliasMap;
121
122
  getAllowedRootEntityTypes: () => import("../../index.js").AnyAllowedRootEntityTypes;
122
123
  getEntityReflections: () => import("../../index.js").AnyEntityReflections;
123
- getMigrate: () => import("../../index.js").MigrateFunction<DomainEntity<string>>;
124
+ getMigrate: () => import("../../index.js").MigrateFunction<import("../../index.js").DomainEntity<string>>;
124
125
  getActiveMode: () => DomainMode;
125
126
  getIsInitialized: () => boolean;
126
- getComponentReaderIndexes: () => ComponentReaderIndexes<any, any, any, any, any>;
127
+ getComponentReaderIndexes: () => ComponentReaderIndexes;
127
128
  getStoreRuntimeDependencies: () => {
128
- componentReaderIndexes: ComponentReaderIndexes<any, any, any, any, any>;
129
+ componentReaderIndexes: ComponentReaderIndexes;
129
130
  domainExpressions: import("../../index.js").AnyExpressions;
130
131
  allowedRootEntityTypes: import("../../index.js").AnyAllowedRootEntityTypes;
131
132
  };
@@ -1 +1 @@
1
- import{createSelector as e}from"@salsita-ai/common/utils";import{Domain as t,createInitialDomainState as n}from"../../core/index.js";import{ActionSystem as o,DimensionSystem as i,NavigationSystem as a,RecipeCookerSystem as s,StoreSystem as r,UndoSystem as c}from"../../domain-context/index.js";import{BlenderProjections as l,CollisionProjections as m,CompositionProjections as d,ConstraintProjections as g,PositionProjections as f,ProjectedEntitiesProjections as u,SnappingProjections as p,ValidationProjections as y}from"../../projections/index.js";import{SketchingProjections as w}from"../../sketching/sketching-projections.js";import{requireAccessService as h}from"../access/index.js";import{prepareActionImplementations as S,prepareDomainExpressions as x}from"../spec/index.js";import{ComponentReader as C}from"./component-reader.js";import{DomainContext as D}from"./domain-context.js";let j=e.withTypes(),v=[],I={},P={role:"admin",data:I},M=e=>{if(null!==e)return e;throw Error("Cannot read the session role and data because the domain session context is not set. The session context is written into the domain runtime by the session lifecycle after authentication. Move this read into the loaded session lifecycle.")};export const createDomainContextSelectors=e=>{let{applicationType:A,getState:R,actions:E,specSelectors:T,accessSelectors:b,webComponentSelectors:$,domainDataSelectors:k,sessionContextSelectors:N,domainServicesSelectors:z,environmentSelectors:L,getExtensionSystems:V}=e,B="configurator"===A?T.selectConfiguratorSpec:T.selectAdminSpec,F="configurator"===A?b.selectConfiguratorRawAccessService:b.selectAdminRawAccessService,W=j.leaf(e=>e.domainContext[A]),_=j([W],e=>e.initializationContext),q=j([_],e=>{if(null===e)throw Error(`Domain lifecycle context is not available for ${A}! Read it from an active domain lifecycle.`);return e}),O=j([W],e=>e.executionMode),U=j([W],e=>e.isInitialized),G=j([B],e=>e.factory),H=j([B],e=>e.expressions),J=j([B],e=>e.actions),K=j([B],e=>e.actionImplementations),Q=j([J,K],S),X=j([B],e=>e.$entityReflections),Y=j([H,X],(e,t)=>x({expressions:e,$entityReflections:t})),Z=j([B],e=>e.modelVersion),ee=j([B],e=>e.aliasMap),et=j([B],e=>e.allowedRootEntityTypes),en=j([B],e=>e.entityReflections),eo=j([B],e=>e.migrate),ei=j([O,$.selectReadonly,F],(e,t,n)=>"finalize"===e?"finalize":h(A,n).accessInfo.viewMode||t?"read":"owner"),ea=j([F],e=>e?.configurationId??null),es="configurator"===A?N.selectSessionContext:j([],()=>P),er=j([es],e=>e?.role??null),ec=j([es],e=>e?.data??null),el=j([j.leaf(e=>e.loadedData)],e=>"configurator"===A?e.configuratorLoadedData:e.adminLoadedData),em=j([el],e=>e?.schemaIdentity??null),ed=j([el,G],(e,t)=>{if(null===e)return"coherent";let n=e.schemaIdentity;return void 0===n?"missing-stamp":n===t?"coherent":"schema-mismatch"}),eg=j([ea,er,ec,em,ed],(e,t,n,o,i)=>null===e||null===t||null===n||null===o||"coherent"!==i?null:{configurationId:e,role:t,schemaIdentity:o,sessionData:n}),ef=j([F,$.selectReadonly],(e,t)=>e?.accessInfo.viewMode===!0||t),eu=j([eg,_,U,ef],(e,t,n,o)=>{let i=null!==e&&null!==t&&n&&t.configurationId===e.configurationId&&t.role===e.role&&t.schemaIdentity===e.schemaIdentity&&t.sessionData===e.sessionData;return{identity:e,isCurrent:i,isViewMode:o}}),ep=j([B],e=>e.componentOptics),ey=j([ep],e=>(e=>{let t=new Map,n=new Map,o=new Map,i=new Map;for(let n of e)for(let e of n.entityTypes){let o=t.get(e);o||(o=new Map,t.set(e,o));let a=o.get(n.componentType);if(a||(a=new Map,o.set(n.componentType,a)),a.has(n.instanceName))throw Error(`Component instance ${n.instanceName} already exists for type ${n.componentType.name} in entity ${e}. This is likely a bug in the component definition! InstanceNames must be unique within an entity and component.`);if(a.set(n.instanceName,n),"dynamic"===n.kind){let t=i.get(e);t||(t=new Map,i.set(e,t));let o=t.get(n.componentType)??[],a=o.find(e=>{var t;return t=n.instanceName,e.startsWith(`${t}_`)||t.startsWith(`${e}_`)});if(a)throw Error(`Cannot register dynamic component instance ${n.instanceName} for component ${n.componentType.name} on entity ${e} because it overlaps with dynamic instance ${a}. Rename one dynamic instance so compound names cannot be ambiguous.`);t.set(n.componentType,[...o,n.instanceName])}}for(let[e,i]of t.entries()){n.set(e,new Set(i.keys()));let t=new Map;for(let[n,a]of(o.set(e,t),i.entries()))t.set(n,new Set(a.keys()))}return{opticMap:t,allComponentTypes:n,allComponentInstanceNames:o,dynamicInstanceNames:i}})(e)),ew=j([ey,Y,et],(e,t,n)=>({componentReaderIndexes:e,domainExpressions:t,allowedRootEntityTypes:n})),eh=j([B],e=>e.navigationStates),eS=j([B],e=>e.viewStates),ex="configurator"===A?j([T.selectConfiguratorSpec],e=>e.toolStates):j([],()=>v),eC="configurator"===A?j([T.selectConfiguratorSpec],e=>e.exportStates):j([],()=>v),eD="configurator"===A?j([T.selectConfiguratorSpec],e=>e.createTransformers):j([],()=>void 0),ej=j([el],e=>{if(null===e)throw Error(`Loaded data is not available for ${A}! Loaded data is written after the configuration fetch succeeds and before the domain context initialization starts.`);return e}),ev=j([ej,G],(e,t)=>n(t.validateAndMigrateState(e.initialEntities,e.modelVersion),e.rootEntityType)),eI="configurator"===A?k.selectConfiguratorFrontendData:k.selectAdminFrontendData,eP="configurator"===A?k.selectConfiguratorBackendData:k.selectAdminBackendData,eM="configurator"===A?k.selectConfiguratorPublishedData:k.selectAdminPublishedData,eA="configurator"===A?j([N.selectSessionContext],e=>M(e).role):j([],()=>"admin"),eR="configurator"===A?j([N.selectSessionContext],e=>M(e).data):j([],()=>I),eE=j([ea,ei,eA,eR,ej],(e,t,n,o,i)=>({configurationId:e,mode:t,role:n,schemaIdentity:i.schemaIdentity,sessionData:o})),eT=j([q],e=>e.mode),eb=j([q],e=>{let t=e.configurationId;if(null===t)throw Error(`Configuration id is not available for ${A}! Read it from an active interactive domain lifecycle.`);return t}),e$=j([q],e=>e.role),ek=j([q],e=>e.sessionData),eN=j([eT,e$,ek,eI,eP,eM,eo],(e,t,n,o,i,a,s)=>({mode:e,role:t,sessionData:n,frontendData:o,backendData:i,publishedData:a,migrate:s,domain:eL,componentReader:eV,positionProjections:eq,sketchingProjections:e_,collisionProjections:eO,constraintProjections:eG,snappingProjections:eU,projectedEntitiesProjections:eH})),ez={selectApplicationSpec:B,selectRawAccessService:F,selectDomainContextState:W,selectInitializationContext:_,selectActiveInitializationContext:q,selectExecutionMode:O,selectIsInitialized:U,selectFactory:G,selectSpecExpressions:H,select$SpecEntityReflections:X,selectDomainExpressions:Y,selectModelVersion:Z,selectAliasMap:ee,selectAllowedRootEntityTypes:et,selectEntityReflections:en,selectMigrate:eo,selectLatestMode:ei,selectLatestConfigurationId:ea,selectLatestSessionContext:es,selectLatestRoleOrNull:er,selectLatestSessionDataOrNull:ec,selectLatestSchemaIdentity:em,selectSchemaCoherence:ed,selectInitializationIdentity:eg,selectIsViewMode:ef,selectInitializationState:eu,selectComponentOptics:ep,selectComponentReaderIndexes:ey,selectStoreRuntimeDependencies:ew,selectNavigationStates:eh,selectViewStates:eS,selectToolStates:ex,selectExportStates:eC,selectCreateTransformers:eD,selectLatestLoadedData:el,selectLoadedData:ej,selectInitialDomainState:ev,selectFrontendData:eI,selectBackendData:eP,selectPublishedData:eM,selectLatestRole:eA,selectLatestSessionData:eR,selectNextInitializationContext:eE,selectActiveMode:eT,selectActiveConfigurationId:eb,selectActiveRole:e$,selectActiveSessionData:ek,selectExpressionContext:eN,getInitializationContext:()=>_(R()),getInitializationState:()=>eu(R()),getNextInitializationContext:()=>eE(R()),getLatestLoadedData:()=>el(R()),getSchemaCoherence:()=>ed(R()),getActiveConfigurationId:()=>eb(R()),getFactory:()=>G(R()),getDomainExpressions:()=>Y(R()),getActionDefinitions:()=>J(R()),getActionImplementations:()=>Q(R()),getModelVersion:()=>Z(R()),getAliasMap:()=>ee(R()),getAllowedRootEntityTypes:()=>et(R()),getEntityReflections:()=>en(R()),getMigrate:()=>eo(R()),getActiveMode:()=>eT(R()),getIsInitialized:()=>U(R()),getComponentReaderIndexes:()=>ey(R()),getStoreRuntimeDependencies:()=>ew(R()),getNavigationStates:()=>eh(R()),getViewStates:()=>eS(R()),getToolStates:()=>ex(R()),getExportStates:()=>eC(R()),getCreateTransformers:()=>eD(R()),getLoadedData:()=>ej(R()),getInitialDomainState:()=>ev(R()),getFrontendData:()=>eI(R()),getBackendData:()=>eP(R()),getPublishedData:()=>eM(R()),getActiveRole:()=>e$(R()),getActiveSessionData:()=>ek(R()),getDomain:()=>eL,getComponentReader:()=>eV,getCompositionProjections:()=>eB,getDimensionSystem:()=>eF,getValidationProjections:()=>eW,getSketchingProjections:()=>e_,getPositionProjections:()=>eq,getCollisionProjections:()=>eO,getSnappingProjections:()=>eU,getConstraintProjections:()=>eG,getProjectedEntitiesProjections:()=>eH,getStoreSystem:()=>eJ,getNavigationSystem:()=>eK,getUndoSystem:()=>eQ,getRecipeCookerSystem:()=>eX,getActionSystem:()=>eY,getBlenderProjections:()=>eZ,getExpressionContext:()=>eN(R()),getDomainSystems:function(){return e0},getDomainContext:function(){return e1}},eL=new t({selectors:ez}),eV=new C({selectors:ez}),eB=new d({selectors:ez}),eF=new i({selectors:ez}),eW=new y({selectors:ez}),e_=new w({selectors:ez}),eq=new f({selectors:ez}),eO=new m({selectors:ez}),eU=new p({selectors:ez}),eG=new g({selectors:ez}),eH=new u({selectors:ez}),eJ=new r({selectors:ez,domainServicesSelectors:z,environmentSelectors:L}),eK=new a({selectors:ez,domainServicesSelectors:z}),eQ=new c({selectors:ez}),eX=new s({selectors:ez}),eY=new o({selectors:ez}),eZ=new l({selectors:ez,domainServicesSelectors:z}),e0={domainContextSelectors:ez,domain:eL,componentReader:eV,compositionProjections:eB,blenderProjections:eZ,validationProjections:eW,storeSystem:eJ,navigationSystem:eK,dimensionSystem:eF,undoSystem:eQ,recipeCooker:eX,actionSystem:eY,sketchingProjections:e_,collisionProjections:eO,positionProjections:eq,snappingProjections:eU,projectedEntitiesProjections:eH,constraintProjections:eG},e1=new D({selectors:ez,actions:E,getExtensionSystems:V});return ez};
1
+ import{createSelector as e}from"@salsita-ai/common/utils";import{Domain as t,createInitialDomainState as n}from"../../core/index.js";import{ActionSystem as o,DimensionSystem as i,NavigationSystem as a,RecipeCookerSystem as s,StoreSystem as r,UndoSystem as c}from"../../domain-context/index.js";import{BlenderProjections as l,CollisionProjections as m,CompositionProjections as d,ConstraintProjections as g,PositionProjections as f,ProjectedEntitiesProjections as u,SnappingProjections as p,ValidationProjections as y}from"../../projections/index.js";import{SketchingProjections as w}from"../../sketching/sketching-projections.js";import{requireAccessService as h}from"../access/index.js";import{prepareActionImplementations as S,prepareDomainExpressions as x}from"../spec/index.js";import{ComponentReader as C}from"./component-reader.js";import{DomainContext as D}from"./domain-context.js";let j=e.withTypes(),I=[],v={},P={role:"admin",data:v},M=e=>{if(null!==e)return e;throw Error("Cannot read the session role and data because the domain session context is not set. The session context is written into the domain runtime by the session lifecycle after authentication. Move this read into the loaded session lifecycle.")};export const createDomainContextSelectors=e=>{let{applicationType:A,getState:R,actions:E,specSelectors:T,accessSelectors:b,webComponentSelectors:$,domainDataSelectors:k,sessionContextSelectors:N,domainServicesSelectors:z,environmentSelectors:L,getExtensionSystems:V}=e,B="configurator"===A?T.selectConfiguratorSpec:T.selectAdminSpec,F="configurator"===A?b.selectConfiguratorRawAccessService:b.selectAdminRawAccessService,W=j.leaf(e=>e.domainContext[A]),_=j([W],e=>e.initializationContext),q=j([_],e=>{if(null===e)throw Error(`Domain lifecycle context is not available for ${A}! Read it from an active domain lifecycle.`);return e}),O=j([W],e=>e.executionMode),U=j([W],e=>e.isInitialized),G=j([B],e=>e.factory),H=j([B],e=>e.expressions),J=j([B],e=>e.actions),K=j([B],e=>e.actionImplementations),Q=j([J,K],S),X=j([B],e=>e.$entityReflections),Y=j([H,X],(e,t)=>x({expressions:e,$entityReflections:t})),Z=j([B],e=>e.modelVersion),ee=j([B],e=>e.aliasMap),et=j([B],e=>e.allowedRootEntityTypes),en=j([B],e=>e.entityReflections),eo=j([B],e=>e.migrate),ei=j([O,$.selectReadonly,F],(e,t,n)=>"finalize"===e?"finalize":h(A,n).accessInfo.viewMode||t?"read":"owner"),ea=j([F],e=>e?.configurationId??null),es="configurator"===A?N.selectSessionContext:j([],()=>P),er=j([es],e=>e?.role??null),ec=j([es],e=>e?.data??null),el=j([j.leaf(e=>e.loadedData)],e=>"configurator"===A?e.configuratorLoadedData:e.adminLoadedData),em=j([el],e=>e?.schemaIdentity??null),ed=j([el,G],(e,t)=>{if(null===e)return"coherent";let n=e.schemaIdentity;return void 0===n?"missing-stamp":n===t?"coherent":"schema-mismatch"}),eg=j([ea,er,ec,em,ed,F],(e,t,n,o,i,a)=>null===e||null===a||null===t||null===n||null===o||"coherent"!==i?null:{access:a.accessInfo.access,configurationId:e,role:t,schemaIdentity:o,sessionData:n}),ef=j([F,$.selectReadonly],(e,t)=>e?.accessInfo.viewMode===!0||t),eu=j([eg,_,U,ef],(e,t,n,o)=>{let i=null!==e&&null!==t&&n&&t.access===e.access&&t.configurationId===e.configurationId&&t.role===e.role&&t.schemaIdentity===e.schemaIdentity&&t.sessionData===e.sessionData;return{identity:e,isCurrent:i,isViewMode:o}}),ep=j([B],e=>e.componentOptics),ey=j([ep],e=>(e=>{let t=new Map,n=new Map,o=new Map,i=new Map;for(let n of e)for(let e of n.entityTypes){let o=t.get(e);o||(o=new Map,t.set(e,o));let a=o.get(n.componentType);if(a||(a=new Map,o.set(n.componentType,a)),a.has(n.instanceName))throw Error(`Component instance ${n.instanceName} already exists for type ${n.componentType.name} in entity ${e}. This is likely a bug in the component definition! InstanceNames must be unique within an entity and component.`);if(a.set(n.instanceName,n),"dynamic"===n.kind){let t=i.get(e);t||(t=new Map,i.set(e,t));let o=t.get(n.componentType)??[],a=o.find(e=>{var t;return t=n.instanceName,e.startsWith(`${t}_`)||t.startsWith(`${e}_`)});if(a)throw Error(`Cannot register dynamic component instance ${n.instanceName} for component ${n.componentType.name} on entity ${e} because it overlaps with dynamic instance ${a}. Rename one dynamic instance so compound names cannot be ambiguous.`);t.set(n.componentType,[...o,n.instanceName])}}for(let[e,i]of t.entries()){n.set(e,new Set(i.keys()));let t=new Map;for(let[n,a]of(o.set(e,t),i.entries()))t.set(n,new Set(a.keys()))}return{opticMap:t,allComponentTypes:n,allComponentInstanceNames:o,dynamicInstanceNames:i}})(e)),ew=j([ey,Y,et],(e,t,n)=>({componentReaderIndexes:e,domainExpressions:t,allowedRootEntityTypes:n})),eh=j([B],e=>e.navigationStates),eS=j([B],e=>e.viewStates),ex="configurator"===A?j([T.selectConfiguratorSpec],e=>e.toolStates):j([],()=>I),eC="configurator"===A?j([T.selectConfiguratorSpec],e=>e.exportStates):j([],()=>I),eD="configurator"===A?j([T.selectConfiguratorSpec],e=>e.createTransformers):j([],()=>void 0),ej=j([el],e=>{if(null===e)throw Error(`Loaded data is not available for ${A}! Loaded data is written after the configuration fetch succeeds and before the domain context initialization starts.`);return e}),eI=j([ej,G],(e,t)=>n(t.validateAndMigrateState(e.initialEntities,e.modelVersion),e.rootEntityType)),ev="configurator"===A?k.selectConfiguratorFrontendData:k.selectAdminFrontendData,eP="configurator"===A?k.selectConfiguratorBackendData:k.selectAdminBackendData,eM="configurator"===A?k.selectConfiguratorPublishedData:k.selectAdminPublishedData,eA="configurator"===A?j([N.selectSessionContext],e=>M(e).role):j([],()=>"admin"),eR="configurator"===A?j([N.selectSessionContext],e=>M(e).data):j([],()=>v),eE=j([ea,ei,eA,eR,ej,F],(e,t,n,o,i,a)=>({access:a?.accessInfo.access??null,configurationId:e,mode:t,role:n,schemaIdentity:i.schemaIdentity,sessionData:o})),eT=j([q],e=>e.mode),eb=j([q],e=>{let t=e.configurationId;if(null===t)throw Error(`Configuration id is not available for ${A}! Read it from an active interactive domain lifecycle.`);return t}),e$=j([q],e=>e.role),ek=j([q],e=>e.sessionData),eN=j([eT,e$,ek,ev,eP,eM,eo],(e,t,n,o,i,a,s)=>({mode:e,role:t,sessionData:n,frontendData:o,backendData:i,publishedData:a,migrate:s,domain:eL,componentReader:eV,positionProjections:eq,sketchingProjections:e_,collisionProjections:eO,constraintProjections:eG,snappingProjections:eU,projectedEntitiesProjections:eH})),ez={selectApplicationSpec:B,selectRawAccessService:F,selectDomainContextState:W,selectInitializationContext:_,selectActiveInitializationContext:q,selectExecutionMode:O,selectIsInitialized:U,selectFactory:G,selectSpecExpressions:H,select$SpecEntityReflections:X,selectDomainExpressions:Y,selectModelVersion:Z,selectAliasMap:ee,selectAllowedRootEntityTypes:et,selectEntityReflections:en,selectMigrate:eo,selectLatestMode:ei,selectLatestConfigurationId:ea,selectLatestSessionContext:es,selectLatestRoleOrNull:er,selectLatestSessionDataOrNull:ec,selectLatestSchemaIdentity:em,selectSchemaCoherence:ed,selectInitializationIdentity:eg,selectIsViewMode:ef,selectInitializationState:eu,selectComponentOptics:ep,selectComponentReaderIndexes:ey,selectStoreRuntimeDependencies:ew,selectNavigationStates:eh,selectViewStates:eS,selectToolStates:ex,selectExportStates:eC,selectCreateTransformers:eD,selectLatestLoadedData:el,selectLoadedData:ej,selectInitialDomainState:eI,selectFrontendData:ev,selectBackendData:eP,selectPublishedData:eM,selectLatestRole:eA,selectLatestSessionData:eR,selectNextInitializationContext:eE,selectActiveMode:eT,selectActiveConfigurationId:eb,selectActiveRole:e$,selectActiveSessionData:ek,selectExpressionContext:eN,getInitializationContext:()=>_(R()),getInitializationState:()=>eu(R()),getNextInitializationContext:()=>eE(R()),getLatestLoadedData:()=>el(R()),getSchemaCoherence:()=>ed(R()),getActiveConfigurationId:()=>eb(R()),getFactory:()=>G(R()),getDomainExpressions:()=>Y(R()),getActionDefinitions:()=>J(R()),getActionImplementations:()=>Q(R()),getModelVersion:()=>Z(R()),getAliasMap:()=>ee(R()),getAllowedRootEntityTypes:()=>et(R()),getEntityReflections:()=>en(R()),getMigrate:()=>eo(R()),getActiveMode:()=>eT(R()),getIsInitialized:()=>U(R()),getComponentReaderIndexes:()=>ey(R()),getStoreRuntimeDependencies:()=>ew(R()),getNavigationStates:()=>eh(R()),getViewStates:()=>eS(R()),getToolStates:()=>ex(R()),getExportStates:()=>eC(R()),getCreateTransformers:()=>eD(R()),getLoadedData:()=>ej(R()),getInitialDomainState:()=>eI(R()),getFrontendData:()=>ev(R()),getBackendData:()=>eP(R()),getPublishedData:()=>eM(R()),getActiveRole:()=>e$(R()),getActiveSessionData:()=>ek(R()),getDomain:()=>eL,getComponentReader:()=>eV,getCompositionProjections:()=>eB,getDimensionSystem:()=>eF,getValidationProjections:()=>eW,getSketchingProjections:()=>e_,getPositionProjections:()=>eq,getCollisionProjections:()=>eO,getSnappingProjections:()=>eU,getConstraintProjections:()=>eG,getProjectedEntitiesProjections:()=>eH,getStoreSystem:()=>eJ,getNavigationSystem:()=>eK,getUndoSystem:()=>eQ,getRecipeCookerSystem:()=>eX,getActionSystem:()=>eY,getBlenderProjections:()=>eZ,getExpressionContext:()=>eN(R()),getDomainSystems:function(){return e0},getDomainContext:function(){return e1}},eL=new t({selectors:ez}),eV=new C({selectors:ez}),eB=new d({selectors:ez}),eF=new i({selectors:ez}),eW=new y({selectors:ez}),e_=new w({selectors:ez}),eq=new f({selectors:ez}),eO=new m({selectors:ez}),eU=new p({selectors:ez}),eG=new g({selectors:ez}),eH=new u({selectors:ez}),eJ=new r({selectors:ez,domainServicesSelectors:z,environmentSelectors:L}),eK=new a({selectors:ez,domainServicesSelectors:z}),eQ=new c({selectors:ez}),eX=new s({selectors:ez}),eY=new o({selectors:ez}),eZ=new l({selectors:ez,domainServicesSelectors:z}),e0={domainContextSelectors:ez,domain:eL,componentReader:eV,compositionProjections:eB,blenderProjections:eZ,validationProjections:eW,storeSystem:eJ,navigationSystem:eK,dimensionSystem:eF,undoSystem:eQ,recipeCooker:eX,actionSystem:eY,sketchingProjections:e_,collisionProjections:eO,positionProjections:eq,snappingProjections:eU,projectedEntitiesProjections:eH,constraintProjections:eG},e1=new D({selectors:ez,actions:E,getExtensionSystems:V});return ez};
@@ -1,4 +1,4 @@
1
- import type { SessionRole } from '@salsita-ai/contracts/api';
1
+ import type { AccessLevel, SessionRole } from '@salsita-ai/contracts/api';
2
2
  import type { AnyDomainFactory, DomainMode } from '../../core/index.js';
3
3
  /** A retained system that refreshes its configuration-owned state on every initialization. */
4
4
  export interface InitializableSystem {
@@ -26,6 +26,7 @@ export type DomainExecutionMode = 'interactive' | 'finalize';
26
26
  export type SchemaCoherence = 'coherent' | 'schema-mismatch' | 'missing-stamp';
27
27
  /** Runtime inputs that identify the interactive configuration rendered by a lifecycle host. */
28
28
  export interface DomainContextInitializationIdentity {
29
+ readonly access: AccessLevel;
29
30
  readonly configurationId: string;
30
31
  readonly role: SessionRole;
31
32
  readonly schemaIdentity: AnyDomainFactory;
@@ -33,6 +34,8 @@ export interface DomainContextInitializationIdentity {
33
34
  }
34
35
  /** Inputs captured by the latest successful domain-context initialization. */
35
36
  export interface DomainContextInitializationContext {
37
+ /** Token access captured with the session inputs; finalization has no interactive access. */
38
+ readonly access: AccessLevel | null;
36
39
  /** Finalization has no interactive access and therefore no configuration id. */
37
40
  readonly configurationId: string | null;
38
41
  readonly mode: DomainMode;