@salsita-ai/sdk 0.50.0-develop.9267bdc12e → 0.50.0-develop.98166fe7c3

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 (554) hide show
  1. package/README.md +14 -13
  2. package/dist/admin/default-admin-elements.d.ts +9 -0
  3. package/dist/admin/default-admin-elements.js +1 -0
  4. package/dist/admin/default-elements/built-in-entity-element.d.ts +10 -0
  5. package/dist/admin/default-elements/built-in-entity-element.js +1 -0
  6. package/dist/admin/default-elements/built-in-layout-element.d.ts +10 -0
  7. package/dist/admin/default-elements/built-in-layout-element.js +1 -0
  8. package/dist/admin/default-elements/index.d.ts +2 -0
  9. package/dist/admin/default-elements/index.js +1 -0
  10. package/dist/admin/index.d.ts +1 -0
  11. package/dist/admin/index.js +1 -1
  12. package/dist/application-spec/caching/content-diff.js +1 -1
  13. package/dist/application-spec/core/application-file.d.ts +0 -2
  14. package/dist/application-spec/core/application-file.js +1 -1
  15. package/dist/application-spec/core/components/component-filter.d.ts +53 -0
  16. package/dist/application-spec/core/components/component-filter.js +1 -0
  17. package/dist/application-spec/core/components/index.d.ts +2 -0
  18. package/dist/application-spec/core/components/index.js +1 -0
  19. package/dist/application-spec/core/components/sdk-code-ref.d.ts +9 -0
  20. package/dist/application-spec/core/components/sdk-code-ref.js +1 -0
  21. package/dist/application-spec/core/enhanced-json-value.d.ts +0 -68
  22. package/dist/application-spec/core/enhanced-json-value.js +1 -1
  23. package/dist/application-spec/core/expressions/index.d.ts +2 -0
  24. package/dist/application-spec/core/expressions/index.js +1 -0
  25. package/dist/application-spec/core/expressions/relation-expression-params.d.ts +11 -0
  26. package/dist/application-spec/core/expressions/relation-expression-params.js +1 -0
  27. package/dist/application-spec/core/expressions/sdk-expression-implementation.d.ts +24 -0
  28. package/dist/application-spec/core/expressions/sdk-expression-implementation.js +1 -0
  29. package/dist/application-spec/core/index.d.ts +2 -0
  30. package/dist/application-spec/core/index.js +1 -1
  31. package/dist/application-spec/core/json-value.d.ts +1 -1
  32. package/dist/application-spec/{core → enhanced-json}/eval-to-constant.d.ts +1 -1
  33. package/dist/application-spec/enhanced-json/index.d.ts +4 -0
  34. package/dist/application-spec/enhanced-json/index.js +1 -0
  35. package/dist/application-spec/enhanced-json/is-enhanced-json-array.d.ts +2 -0
  36. package/dist/application-spec/enhanced-json/is-enhanced-json-array.js +1 -0
  37. package/dist/application-spec/enhanced-json/resolve-enhanced-json-value.d.ts +18 -0
  38. package/dist/application-spec/enhanced-json/resolve-enhanced-json-value.js +1 -0
  39. package/dist/application-spec/enhanced-json/schema-from-value.d.ts +24 -0
  40. package/dist/application-spec/enhanced-json/schema-from-value.js +1 -0
  41. package/dist/application-spec/enhanced-json/stringify-enhanced-json-value.d.ts +14 -0
  42. package/dist/application-spec/enhanced-json/stringify-enhanced-json-value.js +1 -0
  43. package/dist/application-spec/enhanced-json/validate-enhanced-json-value-caps.d.ts +12 -0
  44. package/dist/application-spec/enhanced-json/validate-enhanced-json-value-caps.js +1 -0
  45. package/dist/application-spec/enhanced-json/validate-no-legacy-code-ref.d.ts +13 -0
  46. package/dist/application-spec/enhanced-json/validate-no-legacy-code-ref.js +1 -0
  47. package/dist/application-spec/errors/diagnostic-codes.d.ts +9 -0
  48. package/dist/application-spec/errors/diagnostic-codes.js +1 -1
  49. package/dist/application-spec/errors/diagnostic-messages.d.ts +12 -0
  50. package/dist/application-spec/errors/diagnostic-messages.js +1 -1
  51. package/dist/application-spec/generate-application/code/domain-runtime-files.js +1 -1
  52. package/dist/application-spec/generate-application/code/generate-application-code.d.ts +3 -2
  53. package/dist/application-spec/generate-application/code/generate-application-code.js +1 -1
  54. package/dist/application-spec/generate-application/code/project-scaffolding.d.ts +11 -8
  55. package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
  56. package/dist/application-spec/generate-application/code/standalone-app-files.d.ts +2 -2
  57. package/dist/application-spec/generate-application/code/standalone-app-files.js +1 -1
  58. package/dist/application-spec/generate-application/code/templates/admin-config.js +3 -0
  59. package/dist/application-spec/generate-application/code/templates/configurator-config.js +6 -4
  60. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.js +4 -4
  61. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-defaults.js +1 -1
  62. package/dist/application-spec/generate-application/code/templates/eslint-config.d.ts +5 -0
  63. package/dist/application-spec/generate-application/code/templates/eslint-config.js +4 -5
  64. package/dist/application-spec/generate-application/code/templates/frontend-config.js +3 -5
  65. package/dist/application-spec/generate-application/code/templates/gitignore.js +0 -3
  66. package/dist/application-spec/generate-application/code/templates/globals.js +7 -5
  67. package/dist/application-spec/generate-application/code/templates/index.d.ts +3 -1
  68. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  69. package/dist/application-spec/generate-application/code/templates/lingui-rc.d.ts +5 -0
  70. package/dist/application-spec/generate-application/code/templates/lingui-rc.js +4 -4
  71. package/dist/application-spec/generate-application/code/templates/package-json.js +1 -1
  72. package/dist/application-spec/generate-application/code/templates/prettier-config.d.ts +5 -0
  73. package/dist/application-spec/generate-application/code/templates/prettier-config.js +4 -5
  74. package/dist/application-spec/generate-application/code/templates/root-tsconfig.d.ts +6 -0
  75. package/dist/application-spec/generate-application/code/templates/root-tsconfig.js +2 -0
  76. package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.js +1 -1
  77. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +1 -1
  78. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +1 -1
  79. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +13 -6
  80. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +2 -2
  81. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.d.ts +58 -0
  82. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.js +1 -0
  83. package/dist/application-spec/generate-application/code/templates/spec-code/index.d.ts +2 -0
  84. package/dist/application-spec/generate-application/code/templates/spec-code/index.js +1 -0
  85. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.d.ts +18 -0
  86. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.js +41 -0
  87. package/dist/application-spec/generate-application/code/templates/spec-messages/index.d.ts +1 -0
  88. package/dist/application-spec/generate-application/code/templates/spec-messages/index.js +1 -0
  89. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.d.ts +20 -0
  90. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.js +6 -0
  91. package/dist/application-spec/generate-application/code/templates/tsconfig.d.ts +5 -0
  92. package/dist/application-spec/generate-application/code/templates/tsconfig.js +1 -1
  93. package/dist/application-spec/generate-application/code/templates/webhook-index.d.ts +6 -1
  94. package/dist/application-spec/generate-application/code/templates/webhook-index.js +10 -1
  95. package/dist/application-spec/generate-application/code/templates/webhooks-config.js +2 -3
  96. package/dist/application-spec/generate-application/index.d.ts +2 -0
  97. package/dist/application-spec/generate-application/index.js +1 -1
  98. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.d.ts +4 -3
  99. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.d.ts +7 -3
  100. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.js +1 -1
  101. package/dist/application-spec/generate-application/runtime/admin-runtime/states-runtime.d.ts +2 -2
  102. package/dist/application-spec/generate-application/runtime/application-runtime.d.ts +13 -5
  103. package/dist/application-spec/generate-application/runtime/application-runtime.js +1 -1
  104. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.d.ts +4 -3
  105. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +6 -2
  106. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.js +1 -1
  107. package/dist/application-spec/generate-application/runtime/configurator-runtime/states-runtime.d.ts +2 -2
  108. package/dist/application-spec/generate-application/runtime/factory-data/factory-data-runtime.d.ts +43 -0
  109. package/dist/application-spec/generate-application/runtime/factory-data/factory-data-runtime.js +1 -0
  110. package/dist/application-spec/generate-application/runtime/factory-data/index.d.ts +3 -0
  111. package/dist/application-spec/generate-application/runtime/factory-data/index.js +1 -0
  112. package/dist/application-spec/generate-application/runtime/factory-data/recipe-defaults.d.ts +13 -0
  113. package/dist/application-spec/generate-application/runtime/factory-data/recipe-defaults.js +1 -0
  114. package/dist/application-spec/generate-application/runtime/factory-data/static-violations.d.ts +16 -0
  115. package/dist/application-spec/generate-application/runtime/factory-data/static-violations.js +1 -0
  116. package/dist/application-spec/generate-application/runtime/migrations/index.d.ts +1 -0
  117. package/dist/application-spec/generate-application/runtime/migrations/index.js +1 -0
  118. package/dist/application-spec/generate-application/runtime/migrations/migration-runtime.d.ts +53 -0
  119. package/dist/application-spec/generate-application/runtime/migrations/migration-runtime.js +1 -0
  120. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.d.ts +2 -2
  121. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.d.ts +1 -1
  122. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.js +1 -1
  123. package/dist/application-spec/generate-application/runtime/sections/data-runtime.d.ts +4 -4
  124. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.d.ts +3 -2
  125. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.js +1 -1
  126. package/dist/application-spec/generate-application/runtime/sections/theme-runtime.d.ts +2 -2
  127. package/dist/application-spec/generate-application/runtime/sections/transformers-runtime.d.ts +3 -3
  128. package/dist/application-spec/generate-application/runtime-spec/decode-runtime-spec.d.ts +9 -0
  129. package/dist/application-spec/generate-application/runtime-spec/decode-runtime-spec.js +1 -0
  130. package/dist/application-spec/generate-application/runtime-spec/encode-runtime-spec.d.ts +8 -0
  131. package/dist/application-spec/generate-application/runtime-spec/encode-runtime-spec.js +1 -0
  132. package/dist/application-spec/generate-application/runtime-spec/encoded-runtime-spec.d.ts +27 -0
  133. package/dist/application-spec/generate-application/runtime-spec/encoded-runtime-spec.js +1 -0
  134. package/dist/application-spec/generate-application/runtime-spec/index.d.ts +5 -0
  135. package/dist/application-spec/generate-application/runtime-spec/index.js +1 -0
  136. package/dist/application-spec/generate-application/runtime-spec/runtime-spec.d.ts +68 -0
  137. package/dist/application-spec/generate-application/runtime-spec/runtime-spec.js +1 -0
  138. package/dist/application-spec/generate-application/runtime-spec/spec-code-id.d.ts +40 -0
  139. package/dist/application-spec/generate-application/runtime-spec/spec-code-id.js +1 -0
  140. package/dist/application-spec/index.d.ts +1 -0
  141. package/dist/application-spec/index.js +1 -1
  142. package/dist/application-spec/parse-application-files/categorize/categorize-files.d.ts +34 -0
  143. package/dist/application-spec/parse-application-files/categorize/categorize-files.js +1 -1
  144. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.d.ts +16 -0
  145. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.js +9 -0
  146. package/dist/application-spec/parse-application-files/categorize/earlier-generated-tsconfig.d.ts +9 -0
  147. package/dist/application-spec/parse-application-files/categorize/earlier-generated-tsconfig.js +1 -0
  148. package/dist/application-spec/parse-application-files/raw-spec/parse-yaml-spec-file.js +1 -1
  149. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.d.ts +15 -2
  150. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
  151. package/dist/application-spec/parse-application-files/raw-spec/raw-spec-file.js +1 -1
  152. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-spec.js +1 -1
  153. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/configurator-spec.js +1 -1
  154. package/dist/application-spec/parse-application-files/spec/common/index.d.ts +1 -0
  155. package/dist/application-spec/parse-application-files/spec/common/index.js +1 -1
  156. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.d.ts +3 -0
  157. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.js +1 -0
  158. package/dist/application-spec/parse-application-files/spec/common/value-type/index.d.ts +5 -0
  159. package/dist/application-spec/parse-application-files/spec/common/value-type/index.js +1 -0
  160. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.d.ts +6 -0
  161. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.js +1 -0
  162. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.d.ts +8 -0
  163. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.js +1 -0
  164. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.d.ts +10 -0
  165. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.js +1 -0
  166. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.d.ts +98 -0
  167. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.js +1 -0
  168. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.d.ts +13 -0
  169. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.js +1 -0
  170. package/dist/application-spec/parse-application-files/spec/components/bindings/index.d.ts +2 -0
  171. package/dist/application-spec/parse-application-files/spec/components/bindings/index.js +1 -1
  172. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.d.ts +24 -0
  173. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.js +1 -0
  174. package/dist/application-spec/parse-application-files/spec/components/component-entry.d.ts +1 -9
  175. package/dist/application-spec/parse-application-files/spec/components/component-entry.js +1 -1
  176. package/dist/application-spec/parse-application-files/spec/components/component-filter.d.ts +1 -54
  177. package/dist/application-spec/parse-application-files/spec/components/component-filter.js +1 -1
  178. package/dist/application-spec/parse-application-files/spec/components/component-state-type.d.ts +8 -0
  179. package/dist/application-spec/parse-application-files/spec/components/component-state-type.js +1 -0
  180. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.d.ts +13 -0
  181. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.js +1 -0
  182. package/dist/application-spec/parse-application-files/spec/components/index.d.ts +1 -1
  183. package/dist/application-spec/parse-application-files/spec/components/index.js +1 -1
  184. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.d.ts +14 -0
  185. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.js +1 -0
  186. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.d.ts +6 -0
  187. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.js +1 -1
  188. package/dist/application-spec/parse-application-files/spec/components/user-components.d.ts +7 -4
  189. package/dist/application-spec/parse-application-files/spec/components/user-components.js +1 -1
  190. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.d.ts +24 -0
  191. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.js +1 -0
  192. package/dist/application-spec/parse-application-files/spec/expressions/expression-read.d.ts +13 -0
  193. package/dist/application-spec/parse-application-files/spec/expressions/expression-read.js +1 -0
  194. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.d.ts +9 -0
  195. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.js +1 -0
  196. package/dist/application-spec/parse-application-files/spec/expressions/expression.d.ts +1 -28
  197. package/dist/application-spec/parse-application-files/spec/expressions/expression.js +1 -1
  198. package/dist/application-spec/parse-application-files/spec/expressions/expressions.d.ts +7 -3
  199. package/dist/application-spec/parse-application-files/spec/expressions/expressions.js +1 -1
  200. package/dist/application-spec/parse-application-files/spec/expressions/index.d.ts +0 -1
  201. package/dist/application-spec/parse-application-files/spec/expressions/index.js +1 -1
  202. package/dist/application-spec/parse-application-files/spec/expressions/memo-eval-plan.js +1 -1
  203. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.d.ts +3 -1
  204. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.js +1 -1
  205. package/dist/application-spec/parse-application-files/spec/invariants/invariants.d.ts +2 -2
  206. package/dist/application-spec/parse-application-files/spec/invariants/invariants.js +1 -1
  207. package/dist/application-spec/parse-application-files/spec/model/defaults.js +1 -1
  208. package/dist/application-spec/parse-application-files/spec/model/index.d.ts +1 -0
  209. package/dist/application-spec/parse-application-files/spec/model/index.js +1 -1
  210. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.d.ts +10 -0
  211. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.js +1 -0
  212. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
  213. package/dist/client/phoenix-api.d.ts +463 -0
  214. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +36 -1
  215. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  216. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.d.ts +7 -1
  217. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.js +1 -1
  218. package/dist/configurator/application-runtime/extensions/systems/drag-and-drop-system/drag-and-drop-system.d.ts +3 -3
  219. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +17 -3
  220. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  221. package/dist/configurator/application-runtime/extensions/systems/graphql-system/inject-assistant-lenses.d.ts +11 -0
  222. package/dist/configurator/application-runtime/extensions/systems/graphql-system/inject-assistant-lenses.js +1 -0
  223. package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.d.ts +2 -2
  224. package/dist/configurator/common/configurator-interface.d.ts +22 -1
  225. package/dist/configurator/common/configurator-interface.js +1 -1
  226. package/dist/configurator/common/frontend-analytics.d.ts +2 -0
  227. package/dist/configurator/common/frontend-analytics.js +1 -1
  228. package/dist/configurator/common/index.d.ts +2 -0
  229. package/dist/configurator/common/index.js +1 -1
  230. package/dist/configurator/common/use-finalize-action.d.ts +31 -0
  231. package/dist/configurator/common/use-finalize-action.js +1 -0
  232. package/dist/configurator/common/use-reset-camera.d.ts +6 -0
  233. package/dist/configurator/common/use-reset-camera.js +1 -0
  234. package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.d.ts +1 -1
  235. package/dist/configurator/pages/DefaultConfiguratorLayout.d.ts +3 -2
  236. package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
  237. package/dist/configurator/pages/configurator-layout-name.d.ts +2 -0
  238. package/dist/configurator/pages/configurator-layout-name.js +1 -0
  239. package/dist/configurator/pages/default-configurator-elements.d.ts +8 -0
  240. package/dist/configurator/pages/default-configurator-elements.js +1 -0
  241. package/dist/configurator/pages/default-elements/built-in-entity-element.d.ts +10 -0
  242. package/dist/configurator/pages/default-elements/built-in-entity-element.js +1 -0
  243. package/dist/configurator/pages/default-elements/built-in-layout-element.d.ts +10 -0
  244. package/dist/configurator/pages/default-elements/built-in-layout-element.js +1 -0
  245. package/dist/configurator/pages/default-elements/domain-control-elements.d.ts +6 -0
  246. package/dist/configurator/pages/default-elements/domain-control-elements.js +1 -0
  247. package/dist/configurator/pages/default-elements/index.d.ts +4 -0
  248. package/dist/configurator/pages/default-elements/index.js +1 -0
  249. package/dist/configurator/pages/default-elements/recipe-panel-elements.d.ts +3 -0
  250. package/dist/configurator/pages/default-elements/recipe-panel-elements.js +1 -0
  251. package/dist/configurator/pages/default-elements/sidebar-footer-elements.d.ts +7 -0
  252. package/dist/configurator/pages/default-elements/sidebar-footer-elements.js +1 -0
  253. package/dist/configurator/pages/default-elements/toolbar-elements.d.ts +7 -0
  254. package/dist/configurator/pages/default-elements/toolbar-elements.js +1 -0
  255. package/dist/configurator/pages/index.d.ts +1 -0
  256. package/dist/configurator/pages/index.js +1 -1
  257. package/dist/configurator/scene/scene-controls/hotspot-drag-handle/HotspotDragHandle.d.ts +1 -1
  258. package/dist/configurator/scene/scene-controls/hotspot-drag-handle/HotspotDragSceneHandle.d.ts +1 -1
  259. package/dist/configurator/scene/scene-entity/dimension-indicators/DimensionIndicator.d.ts +1 -1
  260. package/dist/configurator/scene/scene-entity/dimension-indicators/DimensionIndicatorInternal.d.ts +1 -1
  261. package/dist/configurator/scene/scene-entity/drag-and-drop/shared.d.ts +2 -2
  262. package/dist/configurator/scene/scene-entity/drag-and-drop/use-drag-object.d.ts +1 -1
  263. package/dist/configurator/scene/scene-entity/materials/RemoteReplacedMaterial.js +1 -1
  264. package/dist/configurator/scene/scene-entity/objects/SceneEntityObjectTextDecal.d.ts +1 -1
  265. package/dist/configurator/ui/assistant/AssistantChips.d.ts +8 -2
  266. package/dist/configurator/ui/assistant/AssistantChips.js +1 -1
  267. package/dist/configurator/ui/assistant/AssistantMarkdown.d.ts +7 -2
  268. package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -1
  269. package/dist/configurator/ui/assistant/AssistantPanel.js +1 -1
  270. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  271. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.d.ts +13 -0
  272. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.js +1 -0
  273. package/dist/configurator/ui/assistant/entity-link/entity-link-selection.d.ts +22 -0
  274. package/dist/configurator/ui/assistant/entity-link/entity-link-selection.js +1 -0
  275. package/dist/configurator/ui/assistant/entity-link/entity-link-state.d.ts +27 -0
  276. package/dist/configurator/ui/assistant/entity-link/entity-link-state.js +1 -0
  277. package/dist/configurator/ui/assistant/entity-link/index.d.ts +2 -0
  278. package/dist/configurator/ui/assistant/entity-link/index.js +1 -0
  279. package/dist/configurator/ui/assistant/form/AssistantForm.d.ts +19 -0
  280. package/dist/configurator/ui/assistant/form/AssistantForm.js +1 -0
  281. package/dist/configurator/ui/assistant/form/built-in-form-registry.d.ts +10 -0
  282. package/dist/configurator/ui/assistant/form/built-in-form-registry.js +1 -0
  283. package/dist/configurator/ui/assistant/form/compose-answer.d.ts +11 -0
  284. package/dist/configurator/ui/assistant/form/compose-answer.js +1 -0
  285. package/dist/configurator/ui/assistant/form/describe-build-errors.d.ts +6 -0
  286. package/dist/configurator/ui/assistant/form/describe-build-errors.js +1 -0
  287. package/dist/configurator/ui/assistant/form/form-element-definition.d.ts +14 -0
  288. package/dist/configurator/ui/assistant/form/form-element-definition.js +1 -0
  289. package/dist/configurator/ui/assistant/form/form-model.d.ts +38 -0
  290. package/dist/configurator/ui/assistant/form/form-model.js +1 -0
  291. package/dist/configurator/ui/assistant/form/form-registry.d.ts +31 -0
  292. package/dist/configurator/ui/assistant/form/form-registry.js +8 -0
  293. package/dist/configurator/ui/assistant/form/form-state.d.ts +4 -0
  294. package/dist/configurator/ui/assistant/form/form-state.js +1 -0
  295. package/dist/configurator/ui/assistant/form/index.d.ts +2 -0
  296. package/dist/configurator/ui/assistant/form/index.js +1 -0
  297. package/dist/configurator/ui/assistant/form/parse-form-block.d.ts +9 -0
  298. package/dist/configurator/ui/assistant/form/parse-form-block.js +1 -0
  299. package/dist/configurator/ui/assistant/form/read-form-attributes.d.ts +13 -0
  300. package/dist/configurator/ui/assistant/form/read-form-attributes.js +1 -0
  301. package/dist/configurator/ui/assistant/form-elements/FormGroup.d.ts +3 -0
  302. package/dist/configurator/ui/assistant/form-elements/FormGroup.js +1 -0
  303. package/dist/configurator/ui/assistant/form-elements/FormOptions.d.ts +3 -0
  304. package/dist/configurator/ui/assistant/form-elements/FormOptions.js +1 -0
  305. package/dist/configurator/ui/assistant/form-elements/FormReply.d.ts +3 -0
  306. package/dist/configurator/ui/assistant/form-elements/FormReply.js +1 -0
  307. package/dist/configurator/ui/assistant/form-elements/FormText.d.ts +3 -0
  308. package/dist/configurator/ui/assistant/form-elements/FormText.js +1 -0
  309. package/dist/configurator/ui/assistant/form-elements/form-element-props.d.ts +34 -0
  310. package/dist/configurator/ui/assistant/form-elements/form-element-props.js +1 -0
  311. package/dist/configurator/ui/assistant/form-elements/index.d.ts +5 -0
  312. package/dist/configurator/ui/assistant/form-elements/index.js +1 -0
  313. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.d.ts +16 -0
  314. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.js +1 -0
  315. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.d.ts +34 -0
  316. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.js +1 -0
  317. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.d.ts +25 -0
  318. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.js +1 -0
  319. package/dist/configurator/ui/assistant/reference-link/index.d.ts +3 -0
  320. package/dist/configurator/ui/assistant/reference-link/index.js +1 -0
  321. package/dist/configurator/ui/assistant/reference-link/reference-styles.d.ts +12 -0
  322. package/dist/configurator/ui/assistant/reference-link/reference-styles.js +1 -0
  323. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.d.ts +8 -0
  324. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.js +1 -0
  325. package/dist/configurator/ui/assistant/streamed-markdown.d.ts +2 -0
  326. package/dist/configurator/ui/assistant/streamed-markdown.js +2 -2
  327. package/dist/configurator/ui/assistant/thread-items.d.ts +8 -1
  328. package/dist/configurator/ui/assistant/thread-items.js +1 -1
  329. package/dist/configurator/ui/configurator-layout/sidebar-keys/index.d.ts +1 -0
  330. package/dist/configurator/ui/configurator-layout/sidebar-keys/index.js +1 -0
  331. package/dist/configurator/ui/configurator-layout/sidebar-keys/sidebar-keys.d.ts +11 -0
  332. package/dist/configurator/ui/configurator-layout/sidebar-keys/sidebar-keys.js +1 -0
  333. package/dist/configurator/ui/configurator-layout/{universal → slots/desktop-sidebar}/DesktopSidebar.d.ts +23 -14
  334. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/DesktopSidebar.js +16 -0
  335. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/index.d.ts +1 -0
  336. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/index.js +1 -0
  337. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.d.ts +4 -4
  338. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.js +1 -1
  339. package/dist/configurator/ui/configurator-layout/slots/services/SideEffects.d.ts +3 -6
  340. package/dist/configurator/ui/configurator-layout/slots/services/SideEffects.js +1 -1
  341. package/dist/configurator/ui/configurator-layout/slots/slots.d.ts +1 -0
  342. package/dist/configurator/ui/configurator-layout/slots/slots.js +1 -1
  343. package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.d.ts +1 -1
  344. package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.js +2 -2
  345. package/dist/configurator/ui/legacy/layout/steps/StepsNavigation.d.ts +2 -2
  346. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.d.ts +2 -2
  347. package/dist/docs/controls/select-child-entity/cardselect.mdx +1 -0
  348. package/dist/docs/dimensions/3d-scene-integration/dimension-indicators.mdx +2 -2
  349. package/dist/docs/dimensions/3d-scene-integration/editable-angle-indicator.mdx +1 -1
  350. package/dist/docs/dimensions/3d-scene-integration/editable-distance-dimension-indicator.mdx +1 -1
  351. package/dist/docs/dimensions/3d-scene-integration/list-selector-dimension-indicator.mdx +1 -1
  352. package/dist/docs/drag-and-drop/drag-handle.mdx +1 -1
  353. package/dist/docs/drag-and-drop/hotspot-handle.mdx +1 -1
  354. package/dist/docs/drag-and-drop/planes.mdx +1 -1
  355. package/dist/docs/drag-and-drop/rotatable.mdx +2 -2
  356. package/dist/docs/fabs/basic.mdx +2 -2
  357. package/dist/docs/index.json +32 -1
  358. package/dist/docs/layouts/custom-layout.mdx +1636 -183
  359. package/dist/docs/layouts/header/fixed.mdx +2 -2
  360. package/dist/docs/layouts/header/floating.mdx +2 -2
  361. package/dist/docs/layouts/sidebar/in-a-custom-layout.mdx +380 -0
  362. package/dist/docs/layouts/sidebar-footer/basic.mdx +32 -77
  363. package/dist/docs/other-features/client-side-rendering/declarative.mdx +1 -1
  364. package/dist/docs/other-features/transformers.mdx +4 -0
  365. package/dist/docs/phoenix/application-states.mdx +9 -7
  366. package/dist/docs/phoenix/components.mdx +6 -0
  367. package/dist/docs/phoenix/configurator-interface.mdx +135 -18
  368. package/dist/docs/phoenix/deployments.mdx +2 -6
  369. package/dist/docs/phoenix/domain-model.mdx +2 -0
  370. package/dist/docs/phoenix/finalization.mdx +1 -1
  371. package/dist/docs/phoenix/getting-started.mdx +2 -1
  372. package/dist/docs/phoenix/layout-slots.mdx +116 -0
  373. package/dist/docs/phoenix/localization.mdx +10 -6
  374. package/dist/docs/phoenix/migration-guide.mdx +21 -8
  375. package/dist/docs/phoenix/phoenix-cli.mdx +51 -11
  376. package/dist/docs/phoenix/project-structure.mdx +33 -13
  377. package/dist/docs/phoenix/sdk-builder-workflow.mdx +2 -2
  378. package/dist/docs/phoenix/testing.mdx +140 -0
  379. package/dist/docs/phoenix/webhooks.mdx +21 -4
  380. package/dist/domain/application/application-config.d.ts +3 -1
  381. package/dist/domain/application/assistant/assistant-fields.d.ts +8 -1
  382. package/dist/domain/application/assistant/assistant-fields.js +1 -1
  383. package/dist/domain/application/assistant/assistant-form-elements.d.ts +28 -0
  384. package/dist/domain/application/assistant/assistant-form-elements.js +1 -0
  385. package/dist/domain/application/assistant/assistant-manifest.d.ts +9 -1
  386. package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +11 -1
  387. package/dist/domain/application/assistant/build-assistant-lenses.d.ts +14 -0
  388. package/dist/domain/application/assistant/build-assistant-lenses.js +5 -0
  389. package/dist/domain/application/assistant/build-assistant-manifest.js +1 -1
  390. package/dist/domain/application/assistant/create-assistant-execution-schema.d.ts +32 -0
  391. package/dist/domain/application/assistant/create-assistant-execution-schema.js +1 -0
  392. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
  393. package/dist/domain/application/assistant/index.d.ts +5 -1
  394. package/dist/domain/application/assistant/index.js +1 -1
  395. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.js +1 -1
  396. package/dist/domain/application/assistant-recipe-groups.d.ts +3 -1
  397. package/dist/domain/application/configurator-builder.d.ts +4 -1
  398. package/dist/domain/application/configurator-builder.js +1 -1
  399. package/dist/domain/core/invariant/violation.d.ts +50 -2
  400. package/dist/domain/core/invariant/violation.js +1 -1
  401. package/dist/domain/core/model/model.d.ts +1 -1
  402. package/dist/domain/core/schema/extended-schema-validator.js +1 -1
  403. package/dist/domain/domain-context/index.d.ts +1 -1
  404. package/dist/domain/domain-context/undo-system.d.ts +28 -1
  405. package/dist/domain/domain-context/undo-system.js +1 -1
  406. package/dist/domain/domain-runtime/spec/initialize.d.ts +11 -0
  407. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  408. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  409. package/dist/domain/domain-runtime/spec/types.d.ts +2 -0
  410. package/dist/domain/extensions/attribute-switch.d.ts +1 -1
  411. package/dist/domain/extensions/attribute-switch.js +1 -1
  412. package/dist/domain/extensions/canvas-config.d.ts +1 -1
  413. package/dist/domain/extensions/client-side-image.d.ts +2 -2
  414. package/dist/domain/extensions/client-side-image.js +1 -1
  415. package/dist/domain/extensions/common/angle-indicator-schema.d.ts +2 -2
  416. package/dist/domain/extensions/common/dimension-indicator-schema.d.ts +2 -2
  417. package/dist/domain/extensions/editable-angle-indicator.d.ts +1 -1
  418. package/dist/domain/extensions/editable-distance-dimension-indicator.d.ts +1 -1
  419. package/dist/domain/extensions/editable-offset-indicator.d.ts +1 -1
  420. package/dist/domain/extensions/editable-offset-indicator.js +1 -1
  421. package/dist/domain/extensions/fit-selection-orthographic-camera-component.js +1 -1
  422. package/dist/domain/extensions/fit-selection-perspective-camera-component.js +1 -1
  423. package/dist/domain/extensions/horizontal-tabs.d.ts +2 -2
  424. package/dist/domain/extensions/list-selector-dimension-indicator.d.ts +1 -1
  425. package/dist/domain/extensions/navigation-steps.d.ts +2 -2
  426. package/dist/domain/extensions/offset-indicator.js +1 -1
  427. package/dist/domain/extensions/rotation-handle.d.ts +2 -2
  428. package/dist/domain/extensions/save-template-thumbnail.d.ts +2 -2
  429. package/dist/domain/extensions/save-template-thumbnail.js +1 -1
  430. package/dist/domain/extensions/scene-entity-animation.js +1 -1
  431. package/dist/domain/mocks/create-test-application-config.d.ts +59 -0
  432. package/dist/domain/mocks/create-test-application-config.js +1 -0
  433. package/dist/domain/mocks/index.d.ts +1 -0
  434. package/dist/domain/mocks/index.js +1 -1
  435. package/dist/domain/system-components/application-config.d.ts +2 -2
  436. package/dist/domain/system-components/child-entity-selection.js +1 -1
  437. package/dist/domain/system-components/collision-box-geometry.d.ts +4 -2
  438. package/dist/domain/system-components/collision-geometry.d.ts +4 -2
  439. package/dist/domain/system-components/collision-point-geometry.d.ts +4 -2
  440. package/dist/domain/system-components/common/material-override-schema.d.ts +2 -2
  441. package/dist/domain/system-components/common/recipes.d.ts +21 -3
  442. package/dist/domain/system-components/common/recipes.js +1 -1
  443. package/dist/domain/system-components/common/scene-entity-control-schema.d.ts +3 -0
  444. package/dist/domain/system-components/common/scene-entity-control-schema.js +1 -1
  445. package/dist/domain/system-components/constraint.d.ts +10 -23
  446. package/dist/domain/system-components/drag-handle.d.ts +1 -1
  447. package/dist/domain/system-components/drag-handle.js +1 -1
  448. package/dist/domain/system-components/fit-entity-orthographic-camera-component.js +1 -1
  449. package/dist/domain/system-components/fit-entity-perspective-camera-component.js +1 -1
  450. package/dist/domain/system-components/fit-root-orthographic-camera-component.js +1 -1
  451. package/dist/domain/system-components/fit-root-perspective-camera-component.js +1 -1
  452. package/dist/domain/system-components/hotspot-drag-handle.d.ts +1 -1
  453. package/dist/domain/system-components/hotspot-drag-handle.js +1 -1
  454. package/dist/domain/system-components/material-swatch.js +1 -1
  455. package/dist/domain/system-components/scene-entity-material-override.d.ts +1 -1
  456. package/dist/domain/system-components/scene-entity-object-material-override.d.ts +1 -1
  457. package/dist/domain/system-components/scene-entity-object-text-decal.d.ts +1 -1
  458. package/dist/domain/system-components/scene-entity-object-transimissive-material-override.d.ts +1 -1
  459. package/dist/domain/system-components/scene-entity-transimissive-material-override.d.ts +1 -1
  460. package/dist/domain/system-components/static-orthographic-camera-component.js +1 -1
  461. package/dist/domain/system-components/static-perspective-camera-component.js +1 -1
  462. package/dist/globals/index.d.ts +2 -0
  463. package/dist/i18n/locales/cs/messages.js +1 -1
  464. package/dist/i18n/locales/da/messages.js +1 -1
  465. package/dist/i18n/locales/de/messages.js +1 -1
  466. package/dist/i18n/locales/de-AT/messages.js +1 -1
  467. package/dist/i18n/locales/en/messages.js +1 -1
  468. package/dist/i18n/locales/en-AU/messages.js +1 -1
  469. package/dist/i18n/locales/en-GB/messages.js +1 -1
  470. package/dist/i18n/locales/es/messages.js +1 -1
  471. package/dist/i18n/locales/fr/messages.js +1 -1
  472. package/dist/i18n/locales/hu/messages.js +1 -1
  473. package/dist/i18n/locales/it/messages.js +1 -1
  474. package/dist/i18n/locales/nl/messages.js +1 -1
  475. package/dist/i18n/locales/pl/messages.js +1 -1
  476. package/dist/i18n/locales/pt/messages.js +1 -1
  477. package/dist/i18n/locales/ro/messages.js +1 -1
  478. package/dist/i18n/locales/sk/messages.js +1 -1
  479. package/dist/i18n/locales/tr/messages.js +1 -1
  480. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  481. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  482. package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +160 -148
  483. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/claude-md.d.ts +1 -1
  484. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/cursor-rules.d.ts +1 -1
  485. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.d.ts +1 -1
  486. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.js +7 -1
  487. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +15 -14
  488. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-configurator.js +14 -12
  489. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +14 -13
  490. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-configurator.js +13 -11
  491. package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
  492. package/dist/phoenix/application-spec/generate-application-spec-story.js +2 -2
  493. package/dist/phoenix/application-spec/project-files.js +1 -1
  494. package/dist/phoenix/bin.d.ts +2 -0
  495. package/dist/phoenix/bin.js +2 -0
  496. package/dist/phoenix/check-configs/built-in-eslint-config.d.ts +9 -0
  497. package/dist/phoenix/check-configs/built-in-eslint-config.js +1 -0
  498. package/dist/phoenix/check-configs/eslint-config.d.ts +10 -0
  499. package/dist/phoenix/check-configs/eslint-config.js +1 -0
  500. package/dist/phoenix/check-configs/index.d.ts +8 -0
  501. package/dist/phoenix/check-configs/index.js +1 -0
  502. package/dist/phoenix/check-configs/typescript-project.d.ts +5 -0
  503. package/dist/phoenix/check-configs/typescript-project.js +1 -0
  504. package/dist/phoenix/cli.d.ts +0 -1
  505. package/dist/phoenix/cli.js +1 -2
  506. package/dist/phoenix/commands/check.js +1 -1
  507. package/dist/phoenix/commands/deploy.js +1 -1
  508. package/dist/phoenix/commands/deps/deps.d.ts +52 -0
  509. package/dist/phoenix/commands/deps/deps.js +3 -0
  510. package/dist/phoenix/commands/deps/index.d.ts +1 -0
  511. package/dist/phoenix/commands/deps/index.js +1 -0
  512. package/dist/phoenix/commands/deps/sdk-manifest.d.ts +12 -0
  513. package/dist/phoenix/commands/deps/sdk-manifest.js +1 -0
  514. package/dist/phoenix/commands/dev.js +5 -5
  515. package/dist/phoenix/commands/fix.js +1 -1
  516. package/dist/phoenix/commands/index.d.ts +1 -0
  517. package/dist/phoenix/commands/index.js +1 -1
  518. package/dist/phoenix/commands/prettier.js +1 -1
  519. package/dist/phoenix/services/application-spec-project-watcher.d.ts +2 -0
  520. package/dist/phoenix/services/application-spec-project-watcher.js +3 -3
  521. package/dist/phoenix/services/lingui.d.ts +8 -0
  522. package/dist/phoenix/services/lingui.js +1 -1
  523. package/dist/phoenix/services/source-archive.d.ts +1 -0
  524. package/dist/phoenix/services/source-archive.js +1 -1
  525. package/dist/phoenix/services/swc.js +1 -1
  526. package/dist/phoenix/services/vite-config.js +1 -1
  527. package/dist/phoenix/utils/index.d.ts +2 -1
  528. package/dist/phoenix/utils/index.js +1 -1
  529. package/dist/phoenix/utils/node-version/index.d.ts +1 -0
  530. package/dist/phoenix/utils/node-version/index.js +1 -0
  531. package/dist/phoenix/utils/node-version/supported-node-version.d.ts +12 -0
  532. package/dist/phoenix/utils/node-version/supported-node-version.js +4 -0
  533. package/dist/phoenix/utils/run-command.d.ts +11 -0
  534. package/dist/phoenix/utils/run-command.js +1 -1
  535. package/dist/phoenix/utils/sdk-tool/index.d.ts +1 -0
  536. package/dist/phoenix/utils/sdk-tool/index.js +1 -0
  537. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.d.ts +15 -0
  538. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.js +1 -0
  539. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.d.ts +30 -0
  540. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.js +1 -0
  541. package/dist/react-sdk/domain-context/index.d.ts +2 -1
  542. package/dist/react-sdk/domain-context/index.js +1 -1
  543. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.d.ts +5 -0
  544. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.js +1 -1
  545. package/dist/react-sdk/domain-controls/hooks/use-angle-dimension.d.ts +1 -1
  546. package/dist/ui-sdk/theme/types.d.ts +1 -1
  547. package/package.json +46 -35
  548. package/schema/domain-spec.json +1201 -217
  549. package/dist/application-spec/generate-application/code/templates/webhook-implementation.d.ts +0 -1
  550. package/dist/application-spec/generate-application/code/templates/webhook-implementation.js +0 -7
  551. package/dist/configurator/ui/configurator-layout/universal/DesktopSidebar.js +0 -16
  552. /package/dist/application-spec/{core → enhanced-json}/eval-code-uses-self.d.ts +0 -0
  553. /package/dist/application-spec/{core → enhanced-json}/eval-code-uses-self.js +0 -0
  554. /package/dist/application-spec/{core → enhanced-json}/eval-to-constant.js +0 -0
@@ -0,0 +1,13 @@
1
+ import type { ParseContext, SchemaPathSegment } from '../../../../core/index.js';
2
+ import type { ComponentReadBindingContext } from './read-binding.js';
3
+ type ComponentInstance = Pick<ComponentReadBindingContext, 'entityKey' | 'componentName' | 'instanceName'>;
4
+ /** Writes a path inside a component instance's props, such as `options[0].label`. */
5
+ export declare const formatComponentPropPath: (path: readonly SchemaPathSegment[]) => string;
6
+ /**
7
+ * Names a place in a component instance for a diagnostic: `Entity.component.instance`, followed by
8
+ * the path inside the instance (a prop path or a filter criterion) when there is one.
9
+ */
10
+ export declare const componentPath: (instance: ComponentInstance, path: readonly SchemaPathSegment[]) => string;
11
+ /** The parse context at a place in a component instance, so a diagnostic carries its spec path. */
12
+ export declare const componentParseContext: (parsingContext: ParseContext, instance: ComponentInstance, path: readonly SchemaPathSegment[]) => ParseContext;
13
+ export {};
@@ -0,0 +1 @@
1
+ export const formatComponentPropPath=t=>t.reduce((t,n)=>"number"==typeof n?`${t}[${n}]`:0===t.length?n:`${t}.${n}`,"");export const componentPath=(t,n)=>{let e=`${String(t.entityKey)}.${t.componentName}.${String(t.instanceName)}`;return 0===n.length?e:`${e}.${formatComponentPropPath(n)}`};export const componentParseContext=(t,n,e)=>t.at(String(n.entityKey),n.componentName,String(n.instanceName),...e.map(String));
@@ -1,2 +1,4 @@
1
+ export * from './component-path.js';
1
2
  export * from './read-binding.js';
3
+ export * from './read-binding-type.js';
2
4
  export * from './write-binding.js';
@@ -1 +1 @@
1
- export*from"./read-binding.js";export*from"./write-binding.js";
1
+ export*from"./component-path.js";export*from"./read-binding.js";export*from"./read-binding-type.js";export*from"./write-binding.js";
@@ -0,0 +1,24 @@
1
+ import type { SchemaPathSegment } from '../../../../core/index.js';
2
+ import { type ValueType, type ValueTypeResolution } from '../../common/index.js';
3
+ import { type ComponentReadBindingContext } from './read-binding.js';
4
+ /** What the type check of a read binding needs besides the binding's own context. */
5
+ export interface ReadBindingTypeContext extends ComponentReadBindingContext {
6
+ /** Resolves the refs of the entity's field schemas; the schemas are the project's. */
7
+ readonly typeResolution: Omit<ValueTypeResolution, 'author' | 'definitions'>;
8
+ }
9
+ /** A `$read` or `$bind` of a shape field and the place in the component where it is read. */
10
+ export interface ReadBindingTypeCheck {
11
+ readonly marker: '$read' | '$bind';
12
+ readonly target: string;
13
+ /** Where in the component the value goes: a prop path or a filter criterion, or empty for the whole state. */
14
+ readonly path: readonly SchemaPathSegment[];
15
+ /** The type the component expects there. */
16
+ readonly expected: ValueType;
17
+ }
18
+ /**
19
+ * Reports a `$read` or `$bind` of a shape field whose type does not fit the type the component
20
+ * expects where the value goes, which the type check of generated code rejects. An expression
21
+ * target is checked where the expression's type is settled; an unknown field is reported by
22
+ * {@link ComponentReadBinding}.
23
+ */
24
+ export declare const checkReadBindingType: (check: ReadBindingTypeCheck, context: ReadBindingTypeContext) => void;
@@ -0,0 +1 @@
1
+ import{DiagnosticCode as e,diagnosticMessages as t}from"../../../../errors/index.js";import{entityIdValueType as r,formatValueType as o,isAssignableValueType as i,ValueType as n}from"../../common/index.js";import{componentParseContext as p,componentPath as a}from"./component-path.js";import{isExpressionReadTarget as m}from"./read-binding.js";export const checkReadBindingType=(s,d)=>{if(m(s.target))return;let c=((e,t)=>{if("id"===e)return r(String(t.entityKey),t.typeResolution);let o=t.resolvedShape.fieldSchemas.get(e);return o&&n(o,{...t.typeResolution,author:"project"})})(s.target,d);!c||i(c,s.expected)||p(d.parsingContext,d,s.path).error(e.COMPONENT_BINDING_TYPE_MISMATCH,t.COMPONENT_BINDING_TYPE_MISMATCH(a(d,s.path),`${s.marker}: ${s.target}`,o(c),o(s.expected)))};
@@ -1,4 +1,5 @@
1
1
  import type { Branded } from '@salsita-ai/common/utils';
2
+ import type { SdkCodeRef } from '../../../core/index.js';
2
3
  import type { MemoEvalPlan, MemoEvalPlanInput } from '../expressions/memo-eval-plan.js';
3
4
  import type { EntityOrAliasName, InstanceName } from '../model/index.js';
4
5
  import type { ComponentReadBinding, ComponentWriteBinding } from './bindings/index.js';
@@ -46,15 +47,6 @@ interface UserBoundImplementation {
46
47
  readonly plan: MemoEvalPlan;
47
48
  readonly implementation: RootReadImplementation | CompositeImplementation;
48
49
  }
49
- /**
50
- * A parameter that should be emitted as an unquoted code reference in codegen
51
- * (e.g. an entity reflection variable like `Top`).
52
- * At runtime, the string value is resolved to the actual object (e.g. entity reflection).
53
- */
54
- export interface SdkCodeRef {
55
- readonly $codeRef: string;
56
- }
57
- export declare const isSdkCodeRef: (value: unknown) => value is SdkCodeRef;
58
50
  export type SdkFactoryParam = SdkCodeRef | string | number | boolean | null | readonly SdkFactoryParam[] | {
59
51
  readonly [key: string]: SdkFactoryParam;
60
52
  };
@@ -1 +1 @@
1
- export const isSdkCodeRef=e=>"object"==typeof e&&null!==e&&"$codeRef"in e&&"string"==typeof e.$codeRef;
1
+ export{};
@@ -1,58 +1,5 @@
1
1
  import { Branded } from '@salsita-ai/common/utils';
2
- import { type EnhancedJsonSchemaType, type EnhancedJsonValue } from '../../../core/index.js';
3
- /**
4
- * A single filter criterion — static value, dynamic `$read` reference, or
5
- * inline `$eval` expression evaluated against `self` at runtime.
6
- *
7
- * The `target` field on the `'dynamic'` variant is a bare name (matches the
8
- * same pattern as prop-level reads); codegen emits `self.target`, runtime
9
- * reads `self[target]`.
10
- */
11
- export type FilterCriterion<T> = {
12
- readonly kind: 'static';
13
- readonly value: T;
14
- } | {
15
- readonly kind: 'dynamic';
16
- readonly target: string;
17
- } | {
18
- readonly kind: 'eval';
19
- readonly code: string;
20
- };
21
- /**
22
- * Parsed component filter controlling when the component is active. Two
23
- * mutually-exclusive shapes:
24
- *
25
- * - `'gradual'` — zero or more per-criterion fields; compiles to one entry per
26
- * set key inside `.withGradualFilter({…})`. The preferred form.
27
- * - `'root'` — the entire filter is a single `$read` at the root (legacy
28
- * form `$filter: { $read: '$x' }`); compiles to `.withFilter(self => (self.target))`.
29
- * Distinct codegen because the SDK's `withFilter` and `withGradualFilter`
30
- * methods have different evaluation semantics (whole-closure vs per-key).
31
- *
32
- * See `components.md §"Simple expression filter"` / `§"Declarative filter"`.
33
- */
34
- export type ComponentFilter = {
35
- readonly kind: 'gradual';
36
- readonly navigationStates?: FilterCriterion<readonly string[]>;
37
- readonly viewStates?: FilterCriterion<readonly string[]>;
38
- readonly toolStates?: FilterCriterion<readonly string[]>;
39
- readonly exportStates?: FilterCriterion<readonly string[]>;
40
- readonly modes?: FilterCriterion<readonly string[]>;
41
- readonly roles?: FilterCriterion<readonly string[]>;
42
- readonly selectedEntityIds?: FilterCriterion<unknown>;
43
- readonly hoveredEntityIds?: FilterCriterion<unknown>;
44
- readonly draggedEntityIds?: FilterCriterion<unknown>;
45
- readonly exportedEntityIds?: FilterCriterion<unknown>;
46
- readonly active?: FilterCriterion<boolean>;
47
- readonly fullscreen?: FilterCriterion<boolean>;
48
- readonly debug?: FilterCriterion<boolean>;
49
- readonly viewports?: FilterCriterion<unknown>;
50
- } | {
51
- readonly kind: 'root';
52
- readonly target: string;
53
- };
54
- /** Criterion field names on the gradual variant — used for parse and iteration. */
55
- export declare const FILTER_CRITERION_KEYS: readonly ["navigationStates", "viewStates", "toolStates", "exportStates", "modes", "roles", "selectedEntityIds", "hoveredEntityIds", "draggedEntityIds", "exportedEntityIds", "active", "fullscreen", "debug", "viewports"];
2
+ import { type ComponentFilter, type EnhancedJsonSchemaType, type EnhancedJsonValue } from '../../../core/index.js';
56
3
  /**
57
4
  * Schema types for each filter criterion, used for expression inference.
58
5
  * When `$read: '$expr'` appears in a filter criterion, the expression is
@@ -1 +1 @@
1
- import{Branded as t}from"@salsita-ai/common/utils";import{FILTER_OR_KEY as e,READ_MARKER_KEY as r,isEnhancedJsonObject as i,isEvalMarker as s,isRawReadMarker as a}from"../../../core/index.js";export const FILTER_CRITERION_KEYS=["navigationStates","viewStates","toolStates","exportStates","modes","roles","selectedEntityIds","hoveredEntityIds","draggedEntityIds","exportedEntityIds","active","fullscreen","debug","viewports"];let o={tsType:"IdOrWithId | readonly IdOrWithId[]",import:[{module:"@salsita-ai/sdk/domain",member:"IdOrWithId"}]};export const FILTER_CRITERION_SCHEMAS={navigationStates:{type:"array",items:{type:"string"}},viewStates:{type:"array",items:{type:"string"}},toolStates:{type:"array",items:{type:"string"}},exportStates:{type:"array",items:{type:"string"}},modes:{type:"array",items:{type:"string"}},roles:{type:"array",items:{type:"string"}},selectedEntityIds:o,hoveredEntityIds:o,draggedEntityIds:o,exportedEntityIds:o,active:{type:"boolean"},fullscreen:{type:"boolean"},debug:{type:"boolean"},viewports:{type:"array",items:{type:"string"},tsType:"readonly Viewport[]",import:[{module:"@salsita-ai/sdk/domain",member:"Viewport"}]}};let n=new Set(FILTER_CRITERION_KEYS),d=t=>a(t)?{kind:"dynamic",target:t[r]}:s(t)?{kind:"eval",code:t.$eval}:{kind:"static",value:t},y=t=>{let e=t[r];if("string"==typeof e&&!Object.keys(t).some(t=>n.has(t)))return{kind:"root",target:e};let i={};for(let[e,r]of Object.entries(t))n.has(e)&&void 0!==r&&(i[e]=d(r));return{kind:"gradual",...i}};export const ComponentFilters=r=>{if(void 0===r||!i(r))return t({items:[]});let s=r[e];return Array.isArray(s)?t({items:s.filter(i).map(y)}):t({items:[y(r)]})};
1
+ import{Branded as t}from"@salsita-ai/common/utils";import{FILTER_CRITERION_KEYS as e,FILTER_OR_KEY as r,READ_MARKER_KEY as i,isEnhancedJsonObject as s,isEvalMarker as a,isRawReadMarker as o}from"../../../core/index.js";let n={tsType:"IdOrWithId | readonly IdOrWithId[]",import:[{module:"@salsita-ai/sdk/domain",member:"IdOrWithId"}]};export const FILTER_CRITERION_SCHEMAS={navigationStates:{type:"array",items:{type:"string"}},viewStates:{type:"array",items:{type:"string"}},toolStates:{type:"array",items:{type:"string"}},exportStates:{type:"array",items:{type:"string"}},modes:{type:"array",items:{type:"string"}},roles:{type:"array",items:{type:"string"}},selectedEntityIds:n,hoveredEntityIds:n,draggedEntityIds:n,exportedEntityIds:n,active:{type:"boolean"},fullscreen:{type:"boolean"},debug:{type:"boolean"},viewports:{type:"array",items:{type:"string"},tsType:"readonly Viewport[]",import:[{module:"@salsita-ai/sdk/domain",member:"Viewport"}]}};let y=new Set(e),d=t=>o(t)?{kind:"dynamic",target:t[i]}:a(t)?{kind:"eval",code:t.$eval}:{kind:"static",value:t},p=t=>{let e=t[i];if("string"==typeof e&&!Object.keys(t).some(t=>y.has(t)))return{kind:"root",target:e};let r={};for(let[e,i]of Object.entries(t))y.has(e)&&void 0!==i&&(r[e]=d(i));return{kind:"gradual",...r}};export const ComponentFilters=e=>{if(void 0===e||!s(e))return t({items:[]});let i=e[r];return Array.isArray(i)?t({items:i.filter(s).map(p)}):t({items:[p(e)]})};
@@ -0,0 +1,8 @@
1
+ import type { EnhancedJsonSchemaType } from '../../../core/index.js';
2
+ import { ValueType, type ValueTypeResolution } from '../common/index.js';
3
+ /**
4
+ * The type of a system component's state, read from its JSON schema. The schemas state the same
5
+ * types as the components' TypeScript state types, except that a brand or template literal is known
6
+ * only by the `tsType` that names it. Read once per component schema.
7
+ */
8
+ export declare const componentStateType: (componentSchema: EnhancedJsonSchemaType, resolution: Omit<ValueTypeResolution, 'author' | 'definitions'>) => ValueType;
@@ -0,0 +1 @@
1
+ import{ValueType as e}from"../common/index.js";let t=new WeakMap;export const componentStateType=(n,o)=>{let i=t.get(n);if(i)return i;let r=e(n,{...o,author:"sdk",definitions:n.definitions});return t.set(n,r),r};
@@ -0,0 +1,13 @@
1
+ import type { EnhancedJsonSchemaType, FILTER_CRITERION_KEYS } from '../../../core/index.js';
2
+ /**
3
+ * The type each filter criterion takes, as an SDK schema that states exactly the TypeScript type of
4
+ * `ComponentSystemFilterProps`: the modes, roles and viewports are their literal unions and the
5
+ * entity ids are `DomainEntityId`s. `FILTER_CRITERION_SCHEMAS`, which infers the type of an
6
+ * expression read in a criterion, is wider where the JSON schema of the filter is.
7
+ */
8
+ export declare const FILTER_CRITERION_TYPE_SCHEMAS: Readonly<Record<(typeof FILTER_CRITERION_KEYS)[number], EnhancedJsonSchemaType>>;
9
+ /**
10
+ * The type a root filter (`$filter: { $read: x }`) takes, `ComponentSystemFilter`: a boolean, or an
11
+ * object of the criteria other than the export ones.
12
+ */
13
+ export declare const ROOT_FILTER_TYPE_SCHEMA: EnhancedJsonSchemaType;
@@ -0,0 +1 @@
1
+ import{SessionRole as e}from"@salsita-ai/contracts/api";import{VIEWPORTS as t}from"#package/domain";let r={type:"string",tsType:"DomainEntityId"},a={anyOf:[r,{type:"object",properties:{id:r},required:["id"]}]},i={anyOf:[{type:"array",items:a},a]},s={type:"array",items:{type:"string"}},o={type:"boolean"};export const FILTER_CRITERION_TYPE_SCHEMAS={navigationStates:s,viewStates:s,toolStates:s,exportStates:s,modes:{type:"array",items:{enum:["owner","read","finalize"]}},roles:{type:"array",items:{enum:Object.values(e)}},selectedEntityIds:i,hoveredEntityIds:i,draggedEntityIds:i,exportedEntityIds:i,active:o,fullscreen:o,debug:o,viewports:{type:"array",items:{enum:[...t]}}};let n=new Set(["exportedEntityIds","exportStates"]),p=Object.fromEntries(Object.entries(FILTER_CRITERION_TYPE_SCHEMAS).filter(([e])=>!n.has(e)));export const ROOT_FILTER_TYPE_SCHEMA={anyOf:[o,{type:"object",properties:p}]};
@@ -1,5 +1,5 @@
1
1
  export * from './bindings/index.js';
2
- export * from './component-entry.js';
2
+ export type * from './component-entry.js';
3
3
  export * from './component-filter.js';
4
4
  export * from './component-prop-target.js';
5
5
  export * from './components.js';
@@ -1 +1 @@
1
- export*from"./bindings/index.js";export*from"./component-entry.js";export*from"./component-filter.js";export*from"./component-prop-target.js";export*from"./components.js";export*from"./sdk-component-entry.js";export*from"./user-component-entry.js";export*from"./user-components.js";
1
+ export*from"./bindings/index.js";export*from"./component-filter.js";export*from"./component-prop-target.js";export*from"./components.js";export*from"./sdk-component-entry.js";export*from"./user-component-entry.js";export*from"./user-components.js";
@@ -0,0 +1,14 @@
1
+ import type { SchemaPathSegment } from '../../../core/index.js';
2
+ import { type ValueType } from '../common/index.js';
3
+ import { type ComponentReadBindingContext } from './bindings/index.js';
4
+ /**
5
+ * Reports a value written in a component prop or filter where the component expects an entity id
6
+ * (`DomainEntityId`). The schema checks the id's form, but the id's type is branded, so the type
7
+ * check of generated code rejects any string written in YAML: the id has to be read from the
8
+ * domain state with `$read` or `$bind`.
9
+ *
10
+ * @param value - A primitive value written in the spec
11
+ * @param path - The prop path or filter criterion the value is written at
12
+ * @param expected - The type the component expects there
13
+ */
14
+ export declare const checkStaticEntityId: (value: string | number | boolean | null, path: readonly SchemaPathSegment[], expected: ValueType, context: Omit<ComponentReadBindingContext, 'resolvedShape'>) => void;
@@ -0,0 +1 @@
1
+ import{DiagnosticCode as i,diagnosticMessages as r}from"../../../errors/index.js";import{formatValueType as o,isAssignableValueType as n,literalValueType as t}from"../common/index.js";import{componentParseContext as e,componentPath as m}from"./bindings/index.js";export const checkStaticEntityId=(s,d,T,c)=>{!T.some(i=>"string"===i.kind&&void 0!==i.named&&void 0===i.named.acceptsLiteral)||n(t(s),T)||e(c.parsingContext,c,d).error(i.COMPONENT_STATIC_ENTITY_ID,r.COMPONENT_STATIC_ENTITY_ID(m(c,d),JSON.stringify(s),o(T)))};
@@ -1,4 +1,6 @@
1
1
  import { type EnhancedJsonObject, type ParseContext } from '../../../core/index.js';
2
+ import { type ValueTypeResolution } from '../common/index.js';
3
+ import type { ExpressionRead } from '../expressions/expression-read.js';
2
4
  import type { Expression } from '../expressions/expression.js';
3
5
  import type { EntityOrAliasName, InstanceName, ResolvedShape } from '../model/index.js';
4
6
  import type { ComponentEntry } from './component-entry.js';
@@ -11,10 +13,14 @@ interface UserComponentProps {
11
13
  interface UserComponentContext {
12
14
  readonly resolvedShape: ResolvedShape;
13
15
  readonly parsingContext: ParseContext;
16
+ /** Resolves the refs of field schemas and the entity types of a name, for the type checks. */
17
+ readonly typeResolution: Omit<ValueTypeResolution, 'author' | 'definitions'>;
14
18
  }
15
19
  export interface UserComponentResult {
16
20
  readonly entry: ComponentEntry;
17
21
  readonly inferredExpressions: readonly Expression[];
22
+ /** Every `$read` of an expression in the instance, with the type expected where it is read. */
23
+ readonly expressionReads: readonly ExpressionRead[];
18
24
  }
19
25
  /**
20
26
  * Creates a user-declared ComponentEntry from raw YAML props.
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{componentsByName as t}from"#package/domain";import{FILTER_KEY as n,READ_MARKER_KEY as r,isEvalMarker as i,isImportRefShaped as a,isRawBindMarker as o,isRawDataRefMarker as m,isRawEvalWriteMarker as p,isRawReadMarker as s,isRawReadWriteMarker as l,navigateSchema as d}from"../../../core/index.js";import{DiagnosticCode as f,diagnosticMessages as c}from"../../../errors/index.js";import{MemoEvalPlan as y}from"../expressions/memo-eval-plan.js";import{ComponentReadBinding as g,ComponentWriteBinding as u,isExpressionReadTarget as N}from"./bindings/index.js";import{ComponentFilters as $,FILTER_CRITERION_SCHEMAS as O}from"./component-filter.js";let S=e=>e.reduce((e,t)=>"number"==typeof t?`${e}[${t}]`:0===e.length?t:`${e}.${t}`,""),T=(e,t,n,r)=>{if(null==e||"object"!=typeof e)return e;if(s(e))return n.addReadBinding(e.$read,t),{$target:e.$read};if(m(e))return void r.parsingContext.at(String(r.entityKey),r.componentName,String(r.instanceName),...t.map(String)).error(f.COMPONENT_DATA_REF_UNSUPPORTED,c.COMPONENT_DATA_REF_UNSUPPORTED(String(r.entityKey),r.componentName,String(r.instanceName),S(t),e.$read,e.$data));if(o(e))return n.addReadBinding(e.$bind,t),{$target:e.$bind};if(i(e))return e;if(a(e))return void r.parsingContext.at(String(r.entityKey),r.componentName,String(r.instanceName),...t.map(String)).error(f.COMPONENT_IMPORT_REF_UNSUPPORTED,c.COMPONENT_IMPORT_REF_UNSUPPORTED(String(r.entityKey),r.componentName,String(r.instanceName),S(t),e.$importRef.module,e.$importRef.member));if(Array.isArray(e))return e.map((e,i)=>T(e,[...t,i],n,r)).filter(e=>void 0!==e);let p={};for(let[i,a]of Object.entries(e)){let e=T(a,[...t,i],n,r);void 0!==e&&(p[i]=e)}return p},A=(t,n,r)=>{for(let i of t.items)if("gradual"===i.kind){for(let[t,a]of Object.entries(i))if("kind"!==t&&a?.kind==="dynamic"&&a.target&&N(a.target)){let i=O[t];i&&r.push(e({entityKey:n,name:a.target,schema:i,implementation:{kind:"user"}}))}}};export const UserComponentEntry=(i,a)=>{let{implementation:m,inferredExpressions:s}=((i,a)=>{let m=t.get(i.componentName),s=m?.schema,O=new Set,S=[],P=[],E=[],R={entityKey:i.typeOrAlias,componentName:i.componentName,instanceName:i.instanceName,resolvedShape:a.resolvedShape,parsingContext:a.parsingContext},_={entityKey:i.typeOrAlias,componentName:i.componentName,instanceName:i.instanceName,resolvedShape:a.resolvedShape,parsingContext:a.parsingContext},h=(t,n)=>{if(!O.has(t)&&(O.add(t),S.push(g(t,R)),N(t)&&s)){let r=((t,n,r,i)=>{let{schema:a,lastDeclaredType:o,pathSinceDeclaredType:m}=d(r,n),p=n=>e({entityKey:i,name:t,schema:n,implementation:{kind:"user"}});if(void 0!==o){let e=m.map(e=>"number"==typeof e?"[number]":`['${e}']`).join("");return p({...a,tsType:`${o.tsType}${e}`,import:o.import})}if(Object.keys(a).length>0)return p(a)})(t,n,s,i.typeOrAlias);r&&E.push(r)}},b={addReadBinding:h},v=$(i.rawProps[n]),C=`${String(i.typeOrAlias)}.${String(i.instanceName)}`;if((e=>{if(!(r in e)||"string"!=typeof e[r])return!1;for(let t of Object.keys(e))if(t!==r&&t!==n)return!1;return!0})(i.rawProps)){let e=i.rawProps[r];return h(e,[]),A(v,i.typeOrAlias,E),{implementation:{kind:"userBound",filters:v,plan:y({$target:e},C),implementation:{kind:"rootRead",readBinding:S[0]}},inferredExpressions:E}}let k={};for(let[e,t]of Object.entries(i.rawProps)){if(e===n)continue;if(o(t)){P.push(u(e,t.$bind,_)),h(t.$bind,[e]),k[e]={$target:t.$bind};continue}if(l(t)){h(t.$read,[e]),P.push(u(e,t.$write,_)),k[e]={$target:t.$read};continue}if(p(t)){P.push(u(e,t.$write,_)),k[e]={$eval:t.$eval};continue}let r=T(t,[e],b,R);void 0!==r&&(k[e]=r)}let j=new Map;for(let e of P){let t=j.get(e.entityField);t?a.parsingContext.error(f.WRITE_BINDING_DUPLICATE_TARGET,c.WRITE_BINDING_DUPLICATE_TARGET(String(i.typeOrAlias),i.componentName,String(i.instanceName),e.entityField,t,e.propKey)):j.set(e.entityField,e.propKey)}return A(v,i.typeOrAlias,E),{implementation:{kind:"userBound",filters:v,plan:y(k,C),implementation:{kind:"composite",resolvedProps:k,readBindings:S,writeBindings:P}},inferredExpressions:E}})(i,a);return{entry:e({typeOrAlias:i.typeOrAlias,instanceName:i.instanceName,isAlias:"alias"===a.resolvedShape.kind,componentName:i.componentName,implementation:m}),inferredExpressions:s}};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{componentsByName as t}from"#package/domain";import{FILTER_CRITERION_KEYS as n,FILTER_KEY as r,FILTER_OR_KEY as i,READ_MARKER_KEY as o,isEnhancedJsonObject as a,isEvalMarker as m,isImportRefShaped as p,isRawBindMarker as s,isRawDataRefMarker as l,isRawEvalWriteMarker as d,isRawReadMarker as c,isRawReadWriteMarker as f,navigateSchema as y}from"../../../core/index.js";import{DiagnosticCode as u,diagnosticMessages as g}from"../../../errors/index.js";import{ValueType as N,valueTypeAt as $}from"../common/index.js";import{MemoEvalPlan as O}from"../expressions/memo-eval-plan.js";import{ComponentReadBinding as S,ComponentWriteBinding as A,checkReadBindingType as k,componentPath as R,formatComponentPropPath as T,isExpressionReadTarget as b}from"./bindings/index.js";import{ComponentFilters as h,FILTER_CRITERION_SCHEMAS as P}from"./component-filter.js";import{componentStateType as E}from"./component-state-type.js";import{FILTER_CRITERION_TYPE_SCHEMAS as j,ROOT_FILTER_TYPE_SCHEMA as v}from"./filter-criterion-types.js";import{checkStaticEntityId as _}from"./static-entity-id.js";let x=(e,t,n,r)=>{if(null==e||"object"!=typeof e)return void 0!==e&&n.checkStaticValue(e,t),e;if(c(e))return n.addReadBinding(e.$read,t,"$read"),{$target:e.$read};if(l(e))return void r.parsingContext.at(String(r.entityKey),r.componentName,String(r.instanceName),...t.map(String)).error(u.COMPONENT_DATA_REF_UNSUPPORTED,g.COMPONENT_DATA_REF_UNSUPPORTED(String(r.entityKey),r.componentName,String(r.instanceName),T(t),e.$read,e.$data));if(s(e))return n.addReadBinding(e.$bind,t,"$bind"),{$target:e.$bind};if(m(e))return e;if(p(e))return void r.parsingContext.at(String(r.entityKey),r.componentName,String(r.instanceName),...t.map(String)).error(u.COMPONENT_IMPORT_REF_UNSUPPORTED,g.COMPONENT_IMPORT_REF_UNSUPPORTED(String(r.entityKey),r.componentName,String(r.instanceName),T(t),e.$importRef.module,e.$importRef.member));if(Array.isArray(e))return e.map((e,i)=>x(e,[...t,i],n,r)).filter(e=>void 0!==e);let i={};for(let[o,a]of Object.entries(e)){let e=x(a,[...t,o],n,r);void 0!==e&&(i[o]=e)}return i},C=(t,n,r)=>{for(let i of t.items)if("gradual"===i.kind){for(let[t,o]of Object.entries(i))if("kind"!==t&&o?.kind==="dynamic"&&o.target&&b(o.target)){let i=P[t];i&&r.push(e({entityKey:n,name:o.target,schema:i,implementation:{kind:"user"}}))}}},U=(e,t,n,r)=>{if("string"==typeof e||"number"==typeof e||"boolean"==typeof e||null===e)return void _(e,t,n,r);if("object"==typeof e)for(let[i,o]of Object.entries(e)){let a=Array.isArray(e)?Number(i):i;U(o,[...t,a],$(n,[a]),r)}};export const UserComponentEntry=(m,p)=>{let{implementation:l,inferredExpressions:c,expressionReads:T}=((m,p)=>{let l,c=t.get(m.componentName),T=c?.schema,P=new Set,w=[],D=[],I=[],K={entityKey:m.typeOrAlias,componentName:m.componentName,instanceName:m.instanceName,resolvedShape:p.resolvedShape,parsingContext:p.parsingContext},B={entityKey:m.typeOrAlias,componentName:m.componentName,instanceName:m.instanceName,resolvedShape:p.resolvedShape,parsingContext:p.parsingContext},F={...K,typeResolution:p.typeResolution},M=e=>T?$(l??=E(T,p.typeResolution),e):[{kind:"unknown"}],G=[],V=e=>{b(e.target)?G.push({entityKey:m.typeOrAlias,name:e.target,expected:e.expected,location:R(K,e.path)}):k(e,F)},L=(t,n,r)=>{if(V({marker:r,target:t,path:n,expected:M(n)}),!P.has(t)&&(P.add(t),w.push(S(t,K)),b(t)&&T)){let r=((t,n,r,i)=>{let{schema:o,lastDeclaredType:a,pathSinceDeclaredType:m}=y(r,n),p=n=>e({entityKey:i,name:t,schema:n,implementation:{kind:"user"}});if(void 0!==a){let e=m.map(e=>"number"==typeof e?"[number]":`['${e}']`).join("");return p({...o,tsType:`${a.tsType}${e}`,import:a.import})}if(Object.keys(o).length>0)return p(o)})(t,n,T,m.typeOrAlias);r&&I.push(r)}},W={addReadBinding:L,checkStaticValue:(e,t)=>_(e,t,M(t),K)},q=h(m.rawProps[r]);((e,t,o,m)=>{let p=e=>N(e,{...o.typeResolution,author:"sdk"}),s=void 0!==e&&a(e)&&Array.isArray(e[i]);for(let[e,a]of t.items.entries()){let t=s?[r,i,e]:[r];if("root"===a.kind){m({marker:"$read",target:a.target,path:t,expected:p(v)});continue}for(let e of n){let n=a[e],r=[...t,e],i=p(j[e]);n?.kind==="dynamic"?m({marker:"$read",target:n.target,path:r,expected:i}):n?.kind==="static"&&U(n.value,r,i,o)}}})(m.rawProps[r],q,F,V);let z=`${String(m.typeOrAlias)}.${String(m.instanceName)}`;if((e=>{if(!(o in e)||"string"!=typeof e[o])return!1;for(let t of Object.keys(e))if(t!==o&&t!==r)return!1;return!0})(m.rawProps)){let e=m.rawProps[o];return L(e,[],"$read"),C(q,m.typeOrAlias,I),{implementation:{kind:"userBound",filters:q,plan:O({$target:e},z),implementation:{kind:"rootRead",readBinding:w[0]}},inferredExpressions:I,expressionReads:G}}let H={};for(let[e,t]of Object.entries(m.rawProps)){if(e===r)continue;if(s(t)){D.push(A(e,t.$bind,B)),L(t.$bind,[e],"$bind"),H[e]={$target:t.$bind};continue}if(f(t)){L(t.$read,[e],"$read"),D.push(A(e,t.$write,B)),H[e]={$target:t.$read};continue}if(d(t)){D.push(A(e,t.$write,B)),H[e]={$eval:t.$eval};continue}let n=x(t,[e],W,K);void 0!==n&&(H[e]=n)}let J=new Map;for(let e of D){let t=J.get(e.entityField);t?p.parsingContext.error(u.WRITE_BINDING_DUPLICATE_TARGET,g.WRITE_BINDING_DUPLICATE_TARGET(String(m.typeOrAlias),m.componentName,String(m.instanceName),e.entityField,t,e.propKey)):J.set(e.entityField,e.propKey)}return C(q,m.typeOrAlias,I),{implementation:{kind:"userBound",filters:q,plan:O(H,z),implementation:{kind:"composite",resolvedProps:H,readBindings:w,writeBindings:D}},inferredExpressions:I,expressionReads:G}})(m,p);return{entry:e({typeOrAlias:m.typeOrAlias,instanceName:m.instanceName,isAlias:"alias"===p.resolvedShape.kind,componentName:m.componentName,implementation:l}),inferredExpressions:c,expressionReads:T}};
@@ -1,19 +1,22 @@
1
1
  import { Branded } from '@salsita-ai/common/utils';
2
- import type { ParseContext } from '../../../core/index.js';
2
+ import type { ParseContext, PhoenixDefinitions } from '../../../core/index.js';
3
3
  import type { MergedComponents } from '../../merge/index.js';
4
+ import type { ExpressionRead } from '../expressions/expression-read.js';
4
5
  import type { Expression } from '../expressions/expression.js';
5
- import type { ResolvedShapes } from '../model/index.js';
6
+ import type { ModelVersion } from '../model/index.js';
6
7
  import type { ComponentEntry } from './component-entry.js';
7
8
  /** User-declared component entries, flattened from the nested merge map. */
8
9
  export type UserComponents = Branded<'UserComponents', readonly ComponentEntry[]>;
9
10
  interface UserComponentsContext {
10
- readonly allNames: ReadonlySet<string>;
11
- readonly resolvedShapes: ResolvedShapes;
11
+ readonly latestModel: ModelVersion;
12
+ readonly phxDefinitions: PhoenixDefinitions;
12
13
  readonly parsingContext: ParseContext;
13
14
  }
14
15
  interface UserComponentsResult {
15
16
  readonly components: UserComponents;
16
17
  readonly expressions: readonly Expression[];
18
+ /** Every `$read` of an expression in a component, with the type expected where it is read. */
19
+ readonly expressionReads: readonly ExpressionRead[];
17
20
  }
18
21
  /**
19
22
  * Flattens the nested merge map into a flat list of ComponentEntry objects.
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{DiagnosticCode as r,diagnosticMessages as t}from"../../../errors/index.js";import{InstanceName as o,getResolvedShape as n}from"../model/index.js";import{UserComponentEntry as s}from"./user-component-entry.js";export const UserComponents=(i,p)=>{let{allNames:m,parsingContext:f}=p,l=[],N=[],O=[...m];for(let[e,c]of Object.entries(i)){if(!m.has(e)){f.error(r.COMPONENT_UNKNOWN_ENTITY_KEY,t.COMPONENT_UNKNOWN_ENTITY_KEY(e,O));continue}let i=n(p.resolvedShapes,e);for(let[r,t]of Object.entries(c))for(let[n,p]of Object.entries(t)){let t=o(n,e,r,f);if(!t)continue;let m=s({typeOrAlias:e,instanceName:t,componentName:r,rawProps:p},{resolvedShape:i,parsingContext:f});l.push(m.entry),N.push(...m.inferredExpressions)}}return{components:e(l),expressions:N}};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{DiagnosticCode as o,diagnosticMessages as r}from"../../../errors/index.js";import{InstanceName as t,ModelTypeResolution as s,getResolvedShape as n}from"../model/index.js";import{UserComponentEntry as i}from"./user-component-entry.js";export const UserComponents=(p,m)=>{let{latestModel:f,parsingContext:l}=m,N=f.allNames,a=s(f,m.phxDefinitions),O=[],c=[],u=[],x=[...N];for(let[e,s]of Object.entries(p)){if(!N.has(e)){l.error(o.COMPONENT_UNKNOWN_ENTITY_KEY,r.COMPONENT_UNKNOWN_ENTITY_KEY(e,x));continue}let p=n(f.resolvedShapes,e);for(let[o,r]of Object.entries(s))for(let[s,n]of Object.entries(r)){let r=t(s,e,o,l);if(!r)continue;let m=i({typeOrAlias:e,instanceName:r,componentName:o,rawProps:n},{resolvedShape:p,parsingContext:l,typeResolution:a});O.push(m.entry),c.push(...m.inferredExpressions),u.push(...m.expressionReads)}}return{components:e(O),expressions:c,expressionReads:u}};
@@ -0,0 +1,24 @@
1
+ import type { ParseContext } from '../../../core/index.js';
2
+ import type { EntityOrAliasName, ExpressionName, ModelTypeResolution } from '../model/index.js';
3
+ import type { ExpressionRead } from './expression-read.js';
4
+ import type { Expression } from './expression.js';
5
+ /** Where an expression is declared: the spec section and the entity or alias under it. */
6
+ export interface ExpressionLocation {
7
+ readonly section: string;
8
+ readonly entityKey: EntityOrAliasName;
9
+ }
10
+ interface ExpressionReadTypesInput {
11
+ readonly userExpressions: readonly Expression[];
12
+ readonly expressionReads: readonly ExpressionRead[];
13
+ /** Finds where a read expression is declared, which is where a conflict is reported. */
14
+ readonly locateDeclaration: (entityKey: EntityOrAliasName, name: ExpressionName) => ExpressionLocation;
15
+ }
16
+ /**
17
+ * Reports an expression whose declared type and the types its `$read`s expect have no value in
18
+ * common, or whose `$read`s expect types that have none: generated code types the expression by
19
+ * the intersection of them all, which no value can be, so the implementation cannot type-check.
20
+ * A type given as `tsType` text is not read, and never reported. Relation and invariant
21
+ * expressions state their types only as `tsType`, so only a conflict among their reads is reported.
22
+ */
23
+ export declare const checkExpressionReadTypes: ({ userExpressions, expressionReads, locateDeclaration }: ExpressionReadTypesInput, typeResolution: ModelTypeResolution, ctx: ParseContext) => void;
24
+ export {};
@@ -0,0 +1 @@
1
+ import{DiagnosticCode as e,diagnosticMessages as t}from"../../../errors/index.js";import{ValueType as r,formatValueType as n,intersectValueTypes as o}from"../common/index.js";export const checkExpressionReadTypes=({userExpressions:i,expressionReads:a,locateDeclaration:c},d,l)=>{let s=new Map,m=(e,t)=>{let r=`${String(e)}\0${String(t)}`,n=s.get(r);return n||(n={entityKey:e,name:t,reads:[]},s.set(r,n)),n};for(let e of i)e.declaredSchema&&(m(e.entityKey,e.name).declared=r(e.declaredSchema,{...d,author:"project"}));for(let e of a)m(e.entityKey,e.name).reads.push(e);for(let{entityKey:r,name:i,declared:a,reads:d}of s.values()){let[s,...m]=[...a?[a]:[],...d.map(e=>e.expected)];if(!s||m.reduce(o,s).length>0)continue;let p=c(r,i);l.at(p.section,String(p.entityKey),String(i)).error(e.EXPRESSION_READ_TYPE_CONFLICT,t.EXPRESSION_READ_TYPE_CONFLICT(String(p.entityKey),String(i),a&&n(a),d.map(e=>`${n(e.expected)} at "${e.location}"`)))}};
@@ -0,0 +1,13 @@
1
+ import type { ValueType } from '../common/index.js';
2
+ import type { EntityOrAliasName, ExpressionName } from '../model/index.js';
3
+ /**
4
+ * A `$read` of an expression in a component, with the type the component expects where the value
5
+ * goes: a prop, the whole state, a filter criterion or the whole filter.
6
+ */
7
+ export interface ExpressionRead {
8
+ readonly entityKey: EntityOrAliasName;
9
+ readonly name: ExpressionName;
10
+ readonly expected: ValueType;
11
+ /** The place of the read, such as `Hole.detail.main.title`. */
12
+ readonly location: string;
13
+ }
@@ -0,0 +1,9 @@
1
+ import { type EnhancedJsonValue } from '../../../core/index.js';
2
+ import { ValueType } from '../common/index.js';
3
+ import type { ModelTypeResolution } from '../model/index.js';
4
+ /**
5
+ * The type generated code gives the inline value of an expression that declares a schema: a `$msg`
6
+ * compiles to a lingui `MessageDescriptor`. The only other such value is an `$eval`, which is code
7
+ * whose type is not read; constants never declare a schema.
8
+ */
9
+ export declare const expressionValueType: (value: EnhancedJsonValue, resolution: ModelTypeResolution) => ValueType;
@@ -0,0 +1 @@
1
+ import{isMsgMarker as e}from"../../../core/index.js";import{ValueType as o}from"../common/index.js";let r=[{kind:"unknown"}];export const expressionValueType=(n,s)=>e(n)?o({$ref:"phx:MessageDescriptor"},{...s,author:"sdk"}):r;
@@ -1,32 +1,7 @@
1
1
  import type { Branded } from '@salsita-ai/common/utils';
2
- import type { EnhancedJsonSchemaType, EnhancedJsonValue } from '../../../core/index.js';
2
+ import type { EnhancedJsonSchemaType, EnhancedJsonValue, SdkExpressionImplementation } from '../../../core/index.js';
3
3
  import type { EntityOrAliasName, ExpressionName } from '../model/index.js';
4
4
  import type { MemoEvalPlan } from './memo-eval-plan.js';
5
- /**
6
- * The relation factory's single positional param: the relation's kind, the entity type or alias it
7
- * points to and its cardinality, plus the id field for `direct` and `indirect` relations. The
8
- * assistant schema reads `target` and `cardinality` to type a relation edge.
9
- */
10
- export interface RelationExpressionParams {
11
- readonly kind: 'direct' | 'indirect' | 'allOfType';
12
- readonly target: string;
13
- readonly cardinality: '0-1' | '1-1' | '0-N' | '1-N';
14
- readonly field?: string;
15
- }
16
- /**
17
- * An expression implementation built by an SDK factory at runtime. The kind is the
18
- * semantic source of the expression, declared by the section that generated it —
19
- * codegen and runtime dispatch on it instead of inspecting factory-function names.
20
- * - `relation`: generated from a `relations:` declaration
21
- * - `violations`: generated from `invariants:` declarations (the `$violations` expression)
22
- */
23
- export type SdkExpressionImplementation = {
24
- readonly kind: 'relation';
25
- readonly params: readonly [RelationExpressionParams];
26
- } | {
27
- readonly kind: 'violations';
28
- readonly params: readonly unknown[];
29
- };
30
5
  /**
31
6
  * How an expression's runtime implementation is provided.
32
7
  * - `user`: implementation from `src/expressions/*.ts` (dynamic import)
@@ -47,8 +22,6 @@ export type ExpressionImplementation = {
47
22
  readonly value: EnhancedJsonValue;
48
23
  readonly plan: MemoEvalPlan;
49
24
  };
50
- /** Narrows to implementations that are built by an SDK expression factory at runtime. */
51
- export declare const isSdkExpressionImplementation: (implementation: ExpressionImplementation) => implementation is SdkExpressionImplementation;
52
25
  /** A single parsed expression declaration. */
53
26
  export type Expression = Branded<'Expression', {
54
27
  readonly entityKey: EntityOrAliasName;
@@ -1 +1 @@
1
- export const isSdkExpressionImplementation=i=>"relation"===i.kind||"violations"===i.kind;
1
+ export{};
@@ -1,8 +1,9 @@
1
1
  import { Branded } from '@salsita-ai/common/utils';
2
- import { type EvalExpressionParser, type ParseContext } from '../../../core/index.js';
2
+ import { type EvalExpressionParser, type ParseContext, type PhoenixDefinitions } from '../../../core/index.js';
3
3
  import type { MergedExpressions } from '../../merge/index.js';
4
- import type { Aliases, EntityOrAliasName, EntityTypeName, ExpressionName, ModelVersion } from '../model/index.js';
5
- import { type Expression } from './expression.js';
4
+ import { type Aliases, type EntityOrAliasName, type EntityTypeName, type ExpressionName, type ModelVersion } from '../model/index.js';
5
+ import type { ExpressionRead } from './expression-read.js';
6
+ import type { Expression } from './expression.js';
6
7
  import type { MemoEvalPlan } from './memo-eval-plan.js';
7
8
  export type { Expression, ExpressionImplementation } from './expression.js';
8
9
  /**
@@ -31,12 +32,15 @@ export type Expressions = Branded<'Expressions', {
31
32
  interface ExpressionsProps {
32
33
  readonly rawExpressions: MergedExpressions;
33
34
  readonly inferredExpressions: readonly Expression[];
35
+ /** The `$read`s of expressions in components, whose expected types the expressions must share. */
36
+ readonly expressionReads: readonly ExpressionRead[];
34
37
  }
35
38
  interface ExpressionsContext {
36
39
  readonly latestModel: ModelVersion;
37
40
  readonly aliases: Aliases;
38
41
  readonly entityTypes: readonly EntityTypeName[];
39
42
  readonly evalExpressionParser: EvalExpressionParser;
43
+ readonly phxDefinitions: PhoenixDefinitions;
40
44
  readonly parsingContext: ParseContext;
41
45
  }
42
46
  /**
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{intersectSchemas as t}from"../../../core/index.js";import{DiagnosticCode as n,diagnosticMessages as o}from"../../../errors/index.js";import{isSdkExpressionImplementation as i}from"./expression.js";import{UserExpressions as r}from"./user-expressions.js";let s=(e,t)=>{let n=e.get(t.entityKey);n||(n=new Map,e.set(t.entityKey,n)),n.set(t.name,t)},a=(n,o)=>{let i=n.get(o.entityKey);i||(i=new Map,n.set(o.entityKey,i));let r=i.get(o.name);r?i.set(o.name,e({...r,schema:t(r.schema,o.schema),...r.declaredSchema||!o.declaredSchema?{}:{declaredSchema:o.declaredSchema}})):i.set(o.name,o)},l=e=>"relation"===e.implementation.kind?"relations":"violations"===e.implementation.kind?"invariants":"expressions";export const Expressions=(t,m)=>{let{rawExpressions:f,inferredExpressions:p}=t,{latestModel:c,aliases:d,entityTypes:y,evalExpressionParser:u,parsingContext:g}=m,x=r(f,{latestModel:c,evalExpressionParser:u,parsingContext:g});if(void 0===x)return;let S=new Map;for(let e of x)s(S,e);for(let e of p)a(S,e);let h=((e,t)=>{let n=new Map,o=e=>{let t=n.get(e.entityKey);t||(t=new Set,n.set(e.entityKey,t)),t.add(e.name)};for(let t of e)o(t);for(let e of t)i(e.implementation)&&o(e);return n})(x,p),w=new Map;for(let e of x){let{implementation:t}=e;if("value"!==t.kind||!t.constant||t.plan.usesSelf)continue;let n=w.get(e.entityKey);n||(n=new Map,w.set(e.entityKey,n)),n.set(e.name,t.plan)}let K=new Map;for(let t of y){let i=[],r=new Map,s=e=>{let s=S.get(e);if(!s||0===s.size)return;i.push(e);let a=h.get(e);for(let[i,m]of s){if(!a?.has(i))continue;let s=r.get(i);if(s){g.at(l(m),e,i).error(n.DUPLICATE_EXPRESSION,o.DUPLICATE_EXPRESSION(t,i,s,e));continue}r.set(i,e)}};for(let[e,n]of d)n.includes(t)&&s(e);s(t),K.set(t,e({shapeGroups:i}))}return e({expressions:S,entityExpressions:K,constants:w})};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{intersectSchemas as t,isSdkExpressionImplementation as n}from"../../../core/index.js";import{DiagnosticCode as o,diagnosticMessages as i}from"../../../errors/index.js";import{ModelTypeResolution as r}from"../model/index.js";import{checkExpressionReadTypes as s}from"./expression-read-types.js";import{UserExpressions as a}from"./user-expressions.js";let l=(e,t)=>{let n=e.get(t.entityKey);n||(n=new Map,e.set(t.entityKey,n)),n.set(t.name,t)},m=(n,o)=>{let i=n.get(o.entityKey);i||(i=new Map,n.set(o.entityKey,i));let r=i.get(o.name);r?i.set(o.name,e({...r,schema:t(r.schema,o.schema),...r.declaredSchema||!o.declaredSchema?{}:{declaredSchema:o.declaredSchema}})):i.set(o.name,o)},f=e=>"relation"===e.implementation.kind?"relations":"violations"===e.implementation.kind?"invariants":"expressions";export const Expressions=(t,p)=>{let{rawExpressions:c,inferredExpressions:d,expressionReads:y}=t,{latestModel:u,aliases:g,entityTypes:x,evalExpressionParser:h,parsingContext:S}=p,w=r(u,p.phxDefinitions),K=a(c,{latestModel:u,evalExpressionParser:h,typeResolution:w,parsingContext:S});if(void 0===K)return;let M=new Map;for(let e of K)l(M,e);for(let e of d)m(M,e);let E=((e,t)=>{let o=new Map,i=e=>{let t=o.get(e.entityKey);t||(t=new Set,o.set(e.entityKey,t)),t.add(e.name)};for(let t of e)i(t);for(let e of t)n(e.implementation)&&i(e);return o})(K,d);s({userExpressions:K,expressionReads:y,locateDeclaration:(e,t)=>{for(let n of[e,...[...g].filter(([,t])=>t.some(t=>t===e)).map(([e])=>e)]){let e=E.get(n)?.has(t)?M.get(n)?.get(t):void 0;if(e)return{section:f(e),entityKey:n}}return{section:"expressions",entityKey:e}}},w,S);let j=new Map;for(let e of K){let{implementation:t}=e;if("value"!==t.kind||!t.constant||t.plan.usesSelf)continue;let n=j.get(e.entityKey);n||(n=new Map,j.set(e.entityKey,n)),n.set(e.name,t.plan)}let v=new Map;for(let t of x){let n=[],r=new Map,s=e=>{let s=M.get(e);if(!s||0===s.size)return;n.push(e);let a=E.get(e);for(let[n,l]of s){if(!a?.has(n))continue;let s=r.get(n);if(s){S.at(f(l),e,n).error(o.DUPLICATE_EXPRESSION,i.DUPLICATE_EXPRESSION(t,n,s,e));continue}r.set(n,e)}};for(let[e,n]of g)n.includes(t)&&s(e);s(t),v.set(t,e({shapeGroups:n}))}return e({expressions:M,entityExpressions:v,constants:j})};
@@ -1,5 +1,4 @@
1
1
  export type * from './expression.js';
2
- export { isSdkExpressionImplementation } from './expression.js';
3
2
  export * from './expressions.js';
4
3
  export * from './memo-eval-plan.js';
5
4
  export * from './user-expressions.js';
@@ -1 +1 @@
1
- export{isSdkExpressionImplementation}from"./expression.js";export*from"./expressions.js";export*from"./memo-eval-plan.js";export*from"./user-expressions.js";
1
+ export*from"./expressions.js";export*from"./memo-eval-plan.js";export*from"./user-expressions.js";
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{evalCodeUsesSelf as r}from"../../../core/eval-code-uses-self.js";import{isEvalMarker as t,isMsgMarker as n}from"../../../core/index.js";import{isComponentPropTarget as o}from"../components/component-prop-target.js";let l=(e,r)=>0===r.length?e:`${e}.${r.join(".")}`,i=(r,a,u,d)=>{if(void 0===r)throw Error(`MemoEvalPlan: found undefined at ${l(u,d)}, undefined cannot be generated, remove the property or use null.`);if(t(r)){let t=((r,t,n)=>{let o=t.trim();for(let e=0;e<r.length;e++){let t=r[e];if("eval"===t.kind&&t.code===o)return e}return r.push(e({kind:"eval",code:o,label:n})),r.length-1})(a,r.$eval,u);return e({kind:"slot",depIndex:t})}if(o(r)){let t=((r,t)=>{for(let e=0;e<r.length;e++){let n=r[e];if("read"===n.kind&&n.target===t)return e}return r.push(e({kind:"read",target:t})),r.length-1})(a,r.$target);return e({kind:"slot",depIndex:t})}if(n(r))return e({kind:"msg",marker:r});if(null===r||"object"!=typeof r)return e({kind:"literal",value:r});if(Array.isArray(r))return e({kind:"array",items:r.map((e,r)=>i(e,a,u,[...d,String(r)]))});if("object"!=typeof r||null===r)throw Error(`MemoEvalPlan: found unsupported value at ${l(u,d)}, remove it or use null.`);let f=[];for(let e in r){let t=r[e];f.push([e,i(t,a,u,[...d,e])])}return e({kind:"object",entries:f})};export const MemoEvalPlan=(t,n)=>{let o=[],l=i(t,o,n,[]),a=o.some(e=>"read"===e.kind||r(e.code));return e({deps:o,template:l,usesSelf:a})};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{isEvalMarker as r,isMsgMarker as t}from"../../../core/index.js";import{evalCodeUsesSelf as n}from"../../../enhanced-json/eval-code-uses-self.js";import{isComponentPropTarget as o}from"../components/component-prop-target.js";let l=(e,r)=>0===r.length?e:`${e}.${r.join(".")}`,i=(n,a,d,u)=>{if(void 0===n)throw Error(`MemoEvalPlan: found undefined at ${l(d,u)}, undefined cannot be generated, remove the property or use null.`);if(r(n)){let r=((r,t,n)=>{let o=t.trim();for(let e=0;e<r.length;e++){let t=r[e];if("eval"===t.kind&&t.code===o)return e}return r.push(e({kind:"eval",code:o,label:n})),r.length-1})(a,n.$eval,d);return e({kind:"slot",depIndex:r})}if(o(n)){let r=((r,t)=>{for(let e=0;e<r.length;e++){let n=r[e];if("read"===n.kind&&n.target===t)return e}return r.push(e({kind:"read",target:t})),r.length-1})(a,n.$target);return e({kind:"slot",depIndex:r})}if(t(n))return e({kind:"msg",marker:n});if(null===n||"object"!=typeof n)return e({kind:"literal",value:n});if(Array.isArray(n))return e({kind:"array",items:n.map((e,r)=>i(e,a,d,[...u,String(r)]))});if("object"!=typeof n||null===n)throw Error(`MemoEvalPlan: found unsupported value at ${l(d,u)}, remove it or use null.`);let s=[];for(let e in n){let r=n[e];s.push([e,i(r,a,d,[...u,e])])}return e({kind:"object",entries:s})};export const MemoEvalPlan=(r,t)=>{let o=[],l=i(r,o,t,[]),a=o.some(e=>"read"===e.kind||n(e.code));return e({deps:o,template:l,usesSelf:a})};
@@ -1,6 +1,6 @@
1
1
  import { type EvalExpressionParser, type ParseContext } from '../../../core/index.js';
2
2
  import type { MergedExpressions } from '../../merge/index.js';
3
- import type { ModelVersion } from '../model/index.js';
3
+ import type { ModelTypeResolution, ModelVersion } from '../model/index.js';
4
4
  import type { Expression } from './expression.js';
5
5
  /**
6
6
  * Validates user-declared expressions from merged YAML.
@@ -15,6 +15,8 @@ import type { Expression } from './expression.js';
15
15
  interface UserExpressionsContext {
16
16
  readonly latestModel: ModelVersion;
17
17
  readonly evalExpressionParser: EvalExpressionParser;
18
+ /** Resolves the refs of the declared schemas, for checking an inline value against its schema. */
19
+ readonly typeResolution: ModelTypeResolution;
18
20
  readonly parsingContext: ParseContext;
19
21
  }
20
22
  export declare const UserExpressions: (rawExpressions: MergedExpressions, context: UserExpressionsContext) => readonly Expression[] | undefined;
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{schemaFromValue as t}from"../../../core/index.js";import{DiagnosticCode as r,diagnosticMessages as s}from"../../../errors/index.js";import{ExpressionName as o}from"../model/index.js";import{MemoEvalPlan as a}from"./memo-eval-plan.js";let i=(e,r,s,o)=>{if("user"===e.kind)return{schema:e.schema,implementation:{kind:"user"}};let i=a(e.value,r),m={kind:"value",constant:e.constant,value:e.value,plan:i};if(Object.keys(e.schema).length>0)return{schema:e.schema,implementation:m};let n=t(e.value,s,o);if(void 0!==n)return{schema:n,implementation:m}};export const UserExpressions=(t,a)=>{let{latestModel:m,evalExpressionParser:n,parsingContext:l}=a,{allNames:c}=m,f=[...c].map(String),h=[];for(let[a,m]of Object.entries(t)){c.has(a)||l.error(r.EXPRESSION_UNKNOWN_ENTITY_KEY,s.EXPRESSION_UNKNOWN_ENTITY_KEY(a,f));let t=e(a);for(let[r,s]of Object.entries(m)){let m=l.at(a),c=o(r,m);if(!c)continue;let f=i(s,`${a}.${r}`,m.at(r),n);f&&h.push(e({entityKey:t,name:c,schema:f.schema,declaredSchema:f.schema,implementation:f.implementation}))}}if(!l.hasErrors)return h};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{schemaFromValue as r}from"../../../enhanced-json/index.js";import{DiagnosticCode as t,diagnosticMessages as o}from"../../../errors/index.js";import{ValueType as s,formatValueType as m,isAssignableValueType as a}from"../common/index.js";import{ExpressionName as n}from"../model/index.js";import{expressionValueType as i}from"./expression-value-type.js";import{MemoEvalPlan as l}from"./memo-eval-plan.js";let c=(e,n,c,p,E)=>{if("user"===e.kind)return{schema:e.schema,implementation:{kind:"user"}};let h=l(e.value,n),u={kind:"value",constant:e.constant,value:e.value,plan:h};if(Object.keys(e.schema).length>0){var f,d;let r,l;return f=e.value,d=e.schema,r=i(f,E),a(r,l=s(d,{...E,author:"project"}))||c.error(t.EXPRESSION_VALUE_TYPE_MISMATCH,o.EXPRESSION_VALUE_TYPE_MISMATCH(n,m(r),m(l))),{schema:e.schema,implementation:u}}let N=r(e.value,c,p);if(void 0!==N)return{schema:N,implementation:u}};export const UserExpressions=(r,s)=>{let{latestModel:m,evalExpressionParser:a,typeResolution:i,parsingContext:l}=s,{allNames:p}=m,E=[...p].map(String),h=[];for(let[s,m]of Object.entries(r)){p.has(s)||l.error(t.EXPRESSION_UNKNOWN_ENTITY_KEY,o.EXPRESSION_UNKNOWN_ENTITY_KEY(s,E));let r=e(s);for(let[t,o]of Object.entries(m)){let m=l.at(s),p=n(t,m);if(!p)continue;let E=c(o,`${s}.${t}`,m.at(t),a,i);E&&h.push(e({entityKey:r,name:p,schema:E.schema,declaredSchema:E.schema,implementation:E.implementation}))}}if(!l.hasErrors)return h};
@@ -1,5 +1,5 @@
1
1
  import { Branded } from '@salsita-ai/common/utils';
2
- import type { ParseContext } from '../../../core/index.js';
2
+ import type { ParseContext, PhoenixDefinitions } from '../../../core/index.js';
3
3
  import type { MergedComponents, MergedExpressions, MergedInvariants, MergedRelations } from '../../merge/index.js';
4
4
  import type { ComponentEntry } from '../components/index.js';
5
5
  import type { Expression } from '../expressions/index.js';
@@ -22,5 +22,5 @@ interface InvariantsProps {
22
22
  }
23
23
  /** Explicit empty invariants aggregate for consumers that do not declare invariants. */
24
24
  export declare const EmptyInvariants: () => Invariants;
25
- export declare const Invariants: (props: InvariantsProps, latestModel: ModelVersion, ctx: ParseContext) => Invariants;
25
+ export declare const Invariants: (props: InvariantsProps, latestModel: ModelVersion, phxDefinitions: PhoenixDefinitions, ctx: ParseContext) => Invariants;
26
26
  export {};
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{DiagnosticCode as t,diagnosticMessages as o}from"../../../errors/index.js";import{UserComponentEntry as r}from"../components/index.js";import{ExpressionName as n,InstanceName as i,getResolvedShape as a}from"../model/index.js";import{Invariant as s}from"./invariant.js";let l="violations",p="$violations",N=(e,t)=>t.get(e)??[e],m=e=>"dynamic"===e.kind?e.violationTypes:[e.violationType],O=(t,o,r)=>{if(!r)return;let n=[...o.violationTypes].map(e=>`'${String(e)}'`).join(" | "),i={tsType:`ReadonlyArray<Violation<${n}>>`,import:[{module:"@salsita-ai/sdk/domain",member:"Violation"}]};return e({entityKey:t,name:r,schema:i,declaredSchema:i,implementation:{kind:"violations",params:[{entityType:String(t),invariants:o.declaredGroups}]}})},I=(e,t,o)=>{let n=i("default",String(e),l,o);if(n)return r({typeOrAlias:e,instanceName:n,componentName:l,rawProps:{violations:{$read:p}}},{resolvedShape:a(t.resolvedShapes,e),parsingContext:o}).entry};export const EmptyInvariants=()=>e({entries:{},expressions:[],components:[]});export const Invariants=(r,i,a)=>{let{rawInvariants:f,rawExpressions:T,rawRelations:d,rawComponents:A}=r,{allNames:c,aliases:S}=i,y=[...c].map(String),_={},v=new Map;for(let[e,r]of Object.entries(f)){let n=a.at(e);if(!c.has(e)){n.error(t.INVARIANT_UNKNOWN_ENTITY_KEY,o.INVARIANT_UNKNOWN_ENTITY_KEY(e,y));continue}let i={};for(let[e,t]of Object.entries(r)){let o=s(e,t,n.at(e));o&&(i[String(o.name)]=o)}_[String(e)]=i;let l=Object.values(i);if(0!==l.length)for(let t of N(e,S)){let o=v.get(t);for(let r of(o||(o={violationTypes:new Set,declaredGroups:[]},v.set(t,o)),o.declaredGroups.push({typeOrAlias:e,invariants:l}),l))for(let e of m(r))o.violationTypes.add(e)}}let u=[],g=[],h=n(p,a);for(let[e,t]of v){let o=O(e,t,h),r=I(e,i,a);o&&u.push(o),r&&g.push(r)}for(let[e,r]of Object.entries(A))Object.hasOwn(r,l)&&a.at("components",e,l).error(t.INVARIANT_MANUAL_VIOLATIONS_COMPONENT,o.INVARIANT_MANUAL_VIOLATIONS_COMPONENT(e));return((e,r)=>{let{invariantEntityTypes:n,rawExpressions:i,rawRelations:a,aliases:s}=e,l=e=>{let t=s.get(e);return t?t.some(e=>n.has(String(e))):n.has(e)},N=(e,n)=>{for(let[i,a]of Object.entries(e))Object.hasOwn(a,p)&&l(i)&&r.at(n,i,p).error(t.INVARIANT_VIOLATIONS_EXPRESSION_CONFLICT,o.INVARIANT_VIOLATIONS_EXPRESSION_CONFLICT(i,n))};N(i,"expressions"),N(a,"relations")})({invariantEntityTypes:new Set([...v.keys()].map(String)),rawExpressions:T,rawRelations:d,aliases:S},a),e({entries:_,expressions:u,components:g})};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{DiagnosticCode as t,diagnosticMessages as o}from"../../../errors/index.js";import{UserComponentEntry as r}from"../components/index.js";import{ExpressionName as n,InstanceName as i,ModelTypeResolution as a,getResolvedShape as s}from"../model/index.js";import{Invariant as l}from"./invariant.js";let p="violations",N="$violations",m=(e,t)=>t.get(e)??[e],O=e=>"dynamic"===e.kind?e.violationTypes:[e.violationType],I=(t,o,r)=>{if(!r)return;let n=[...o.violationTypes].map(e=>`'${String(e)}'`).join(" | "),i={tsType:`ReadonlyArray<Violation<${n}>>`,import:[{module:"@salsita-ai/sdk/domain",member:"Violation"}]};return e({entityKey:t,name:r,schema:i,declaredSchema:i,implementation:{kind:"violations",params:[{entityType:String(t),invariants:o.declaredGroups}]}})},f=(e,t,o,n)=>{let l=i("default",String(e),p,n);if(l)return r({typeOrAlias:e,instanceName:l,componentName:p,rawProps:{violations:{$read:N}}},{resolvedShape:s(t.resolvedShapes,e),parsingContext:n,typeResolution:a(t,o)}).entry};export const EmptyInvariants=()=>e({entries:{},expressions:[],components:[]});export const Invariants=(r,i,a,s)=>{let{rawInvariants:T,rawExpressions:d,rawRelations:A,rawComponents:c}=r,{allNames:y,aliases:S}=i,_=[...y].map(String),u={},v=new Map;for(let[e,r]of Object.entries(T)){let n=s.at(e);if(!y.has(e)){n.error(t.INVARIANT_UNKNOWN_ENTITY_KEY,o.INVARIANT_UNKNOWN_ENTITY_KEY(e,_));continue}let i={};for(let[e,t]of Object.entries(r)){let o=l(e,t,n.at(e));o&&(i[String(o.name)]=o)}u[String(e)]=i;let a=Object.values(i);if(0!==a.length)for(let t of m(e,S)){let o=v.get(t);for(let r of(o||(o={violationTypes:new Set,declaredGroups:[]},v.set(t,o)),o.declaredGroups.push({typeOrAlias:e,invariants:a}),a))for(let e of O(r))o.violationTypes.add(e)}}let g=[],h=[],j=n(N,s);for(let[e,t]of v){let o=I(e,t,j),r=f(e,i,a,s);o&&g.push(o),r&&h.push(r)}for(let[e,r]of Object.entries(c))Object.hasOwn(r,p)&&s.at("components",e,p).error(t.INVARIANT_MANUAL_VIOLATIONS_COMPONENT,o.INVARIANT_MANUAL_VIOLATIONS_COMPONENT(e));return((e,r)=>{let{invariantEntityTypes:n,rawExpressions:i,rawRelations:a,aliases:s}=e,l=e=>{let t=s.get(e);return t?t.some(e=>n.has(String(e))):n.has(e)},p=(e,n)=>{for(let[i,a]of Object.entries(e))Object.hasOwn(a,N)&&l(i)&&r.at(n,i,N).error(t.INVARIANT_VIOLATIONS_EXPRESSION_CONFLICT,o.INVARIANT_VIOLATIONS_EXPRESSION_CONFLICT(i,n))};p(i,"expressions"),p(a,"relations")})({invariantEntityTypes:new Set([...v.keys()].map(String)),rawExpressions:d,rawRelations:A,aliases:S},s),e({entries:u,expressions:g,components:h})};
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{CONSTANT_CAPS as t,resolveEnhancedJsonValue as r}from"../../../core/index.js";import{DiagnosticCode as i,diagnosticMessages as o}from"../../../errors/index.js";import{ShapePropertyName as n}from"./names/shape-property-name.js";let l=(e,t,r,n,l)=>{for(let s of r.validatePartialShape(t).errors){let t=s.instancePath?s.instancePath:"(root)",r=s.instancePath.split("/").filter(Boolean)[0]??"";n.error(i.DEFAULTS_SCHEMA_VIOLATION,o[i.DEFAULTS_SCHEMA_VIOLATION](e,r,t,s.message,l))}};export const Defaults=(s,a,f)=>{let E=a.allNames,T=[...E].map(String),S=new Map,N=new Map;for(let e of a.entitySchemas)S.set(e.entityType,new Set(Object.keys(e.shapeProperties))),N.set(e.entityType,e);let g={},O=new Map;for(let[e,_]of Object.entries(s)){let s=f.at(e);if(!E.has(e)){f.error(i.DEFAULTS_UNKNOWN_ENTITY_KEY,o[i.DEFAULTS_UNKNOWN_ENTITY_KEY](e,T));continue}let c=a.aliases.get(e),p=void 0!==c,h={};for(let[t,r]of Object.entries(_)){let l=n(t,s);if(l){if(p){let t=[];for(let e of c){let r=S.get(e);r&&r.has(l)||t.push(String(e))}if(t.length>0){let r=c[0],n=r?[...S.get(r)??[]]:[];f.error(i.DEFAULTS_UNKNOWN_PROPERTY,o[i.DEFAULTS_UNKNOWN_PROPERTY](e,l,n,t));continue}}else{let t=S.get(e);if(!t||!t.has(l)){let r=t?[...t]:[];f.error(i.DEFAULTS_UNKNOWN_PROPERTY,o[i.DEFAULTS_UNKNOWN_PROPERTY](e,l,r));continue}}h[l]=r}}if(0===Object.keys(h).length)continue;let A=r(h,void 0,t,s);if(void 0!==A){if(p)for(let t of c){let r=N.get(t);r&&l(e,A,r,s,String(t))}else{let t=N.get(e);t&&l(e,A,t,s)}for(let t of c??[e])g[String(t)]={...g[String(t)],...h},O.set(t,[...O.get(t)??[],e])}}for(let[e,t]of O){let r=g[String(e)]??{},n=(N.get(e)?.shapeSchema.required??[]).filter(e=>!Object.hasOwn(r,e));if(0===n.length)continue;let l=t.includes(String(e))?String(e):t.at(-1);f.at(l).error(i.DEFAULTS_INCOMPLETE,o[i.DEFAULTS_INCOMPLETE](String(e),n,t))}if(Object.keys(s).length>0&&f.warning(i.DEFAULTS_DEPRECATED,o[i.DEFAULTS_DEPRECATED]()),!f.hasErrors)return e({entries:g})};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{CONSTANT_CAPS as t}from"../../../core/index.js";import{resolveEnhancedJsonValue as r}from"../../../enhanced-json/index.js";import{DiagnosticCode as i,diagnosticMessages as n}from"../../../errors/index.js";import{ShapePropertyName as o}from"./names/shape-property-name.js";let s=(e,t,r,o,s)=>{for(let l of r.validatePartialShape(t).errors){let t=l.instancePath?l.instancePath:"(root)",r=l.instancePath.split("/").filter(Boolean)[0]??"";o.error(i.DEFAULTS_SCHEMA_VIOLATION,n[i.DEFAULTS_SCHEMA_VIOLATION](e,r,t,l.message,s))}};export const Defaults=(l,a,f)=>{let E=a.allNames,T=[...E].map(String),S=new Map,N=new Map;for(let e of a.entitySchemas)S.set(e.entityType,new Set(Object.keys(e.shapeProperties))),N.set(e.entityType,e);let g={},O=new Map;for(let[e,_]of Object.entries(l)){let l=f.at(e);if(!E.has(e)){f.error(i.DEFAULTS_UNKNOWN_ENTITY_KEY,n[i.DEFAULTS_UNKNOWN_ENTITY_KEY](e,T));continue}let c=a.aliases.get(e),p=void 0!==c,h={};for(let[t,r]of Object.entries(_)){let s=o(t,l);if(s){if(p){let t=[];for(let e of c){let r=S.get(e);r&&r.has(s)||t.push(String(e))}if(t.length>0){let r=c[0],o=r?[...S.get(r)??[]]:[];f.error(i.DEFAULTS_UNKNOWN_PROPERTY,n[i.DEFAULTS_UNKNOWN_PROPERTY](e,s,o,t));continue}}else{let t=S.get(e);if(!t||!t.has(s)){let r=t?[...t]:[];f.error(i.DEFAULTS_UNKNOWN_PROPERTY,n[i.DEFAULTS_UNKNOWN_PROPERTY](e,s,r));continue}}h[s]=r}}if(0===Object.keys(h).length)continue;let m=r(h,void 0,t,l);if(void 0!==m){if(p)for(let t of c){let r=N.get(t);r&&s(e,m,r,l,String(t))}else{let t=N.get(e);t&&s(e,m,t,l)}for(let t of c??[e])g[String(t)]={...g[String(t)],...h},O.set(t,[...O.get(t)??[],e])}}for(let[e,t]of O){let r=g[String(e)]??{},o=(N.get(e)?.shapeSchema.required??[]).filter(e=>!Object.hasOwn(r,e));if(0===o.length)continue;let s=t.includes(String(e))?String(e):t.at(-1);f.at(s).error(i.DEFAULTS_INCOMPLETE,n[i.DEFAULTS_INCOMPLETE](String(e),o,t))}if(Object.keys(l).length>0&&f.warning(i.DEFAULTS_DEPRECATED,n[i.DEFAULTS_DEPRECATED]()),!f.hasErrors)return e({entries:g})};
@@ -8,6 +8,7 @@ export * from './entity-schema.js';
8
8
  export * from './entity-types.js';
9
9
  export * from './model-version.js';
10
10
  export * from './model-version-key.js';
11
+ export * from './model-type-resolution.js';
11
12
  export * from './names/index.js';
12
13
  export * from './presets.js';
13
14
  export * from './resolved-shapes.js';