@salsita-ai/sdk 0.50.0-develop.abef6d86a1 → 0.50.0-develop.ae9a830ef0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/application-spec/core/components/component-filter.d.ts +53 -0
- package/dist/application-spec/core/components/component-filter.js +1 -0
- package/dist/application-spec/core/components/index.d.ts +2 -0
- package/dist/application-spec/core/components/index.js +1 -0
- package/dist/application-spec/core/components/sdk-code-ref.d.ts +9 -0
- package/dist/application-spec/core/components/sdk-code-ref.js +1 -0
- package/dist/application-spec/core/enhanced-json-value.d.ts +0 -68
- package/dist/application-spec/core/enhanced-json-value.js +1 -1
- package/dist/application-spec/core/expressions/index.d.ts +2 -0
- package/dist/application-spec/core/expressions/index.js +1 -0
- package/dist/application-spec/core/expressions/relation-expression-params.d.ts +11 -0
- package/dist/application-spec/core/expressions/sdk-expression-implementation.d.ts +24 -0
- package/dist/application-spec/core/expressions/sdk-expression-implementation.js +1 -0
- package/dist/application-spec/core/index.d.ts +2 -0
- package/dist/application-spec/core/index.js +1 -1
- package/dist/application-spec/core/json-value.d.ts +1 -1
- package/dist/application-spec/{core → enhanced-json}/eval-to-constant.d.ts +1 -1
- package/dist/application-spec/enhanced-json/index.d.ts +4 -0
- package/dist/application-spec/enhanced-json/index.js +1 -0
- package/dist/application-spec/enhanced-json/is-enhanced-json-array.d.ts +2 -0
- package/dist/application-spec/enhanced-json/is-enhanced-json-array.js +1 -0
- package/dist/application-spec/enhanced-json/resolve-enhanced-json-value.d.ts +18 -0
- package/dist/application-spec/enhanced-json/resolve-enhanced-json-value.js +1 -0
- package/dist/application-spec/enhanced-json/schema-from-value.d.ts +24 -0
- package/dist/application-spec/enhanced-json/schema-from-value.js +1 -0
- package/dist/application-spec/enhanced-json/stringify-enhanced-json-value.d.ts +14 -0
- package/dist/application-spec/enhanced-json/stringify-enhanced-json-value.js +1 -0
- package/dist/application-spec/enhanced-json/validate-enhanced-json-value-caps.d.ts +12 -0
- package/dist/application-spec/enhanced-json/validate-enhanced-json-value-caps.js +1 -0
- package/dist/application-spec/enhanced-json/validate-no-legacy-code-ref.d.ts +13 -0
- package/dist/application-spec/enhanced-json/validate-no-legacy-code-ref.js +1 -0
- package/dist/application-spec/errors/diagnostic-codes.d.ts +9 -0
- package/dist/application-spec/errors/diagnostic-codes.js +1 -1
- package/dist/application-spec/errors/diagnostic-messages.d.ts +12 -0
- package/dist/application-spec/errors/diagnostic-messages.js +1 -1
- package/dist/application-spec/generate-application/code/project-scaffolding.d.ts +7 -0
- package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.js +4 -4
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-defaults.d.ts +4 -2
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-defaults.js +1 -1
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-domain-block.js +48 -48
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-phx-globals.js +3 -0
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-relation-expressions.js +1 -1
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.d.ts +6 -8
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.js +11 -11
- package/dist/application-spec/generate-application/code/templates/domain-spec/index.d.ts +1 -1
- package/dist/application-spec/generate-application/code/templates/domain-spec/index.js +1 -1
- package/dist/application-spec/generate-application/code/templates/domain-spec.js +12 -12
- package/dist/application-spec/generate-application/code/templates/domain.js +3 -3
- package/dist/application-spec/generate-application/code/templates/globals.js +5 -4
- package/dist/application-spec/generate-application/code/templates/index.d.ts +0 -1
- package/dist/application-spec/generate-application/code/templates/index.js +1 -1
- package/dist/application-spec/generate-application/code/templates/package-json.js +1 -1
- package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +8 -2
- package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +1 -1
- package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +5 -2
- package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +2 -2
- package/dist/application-spec/generate-application/runtime/application-runtime.d.ts +1 -3
- package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +1 -3
- package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.d.ts +1 -1
- package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.js +1 -1
- package/dist/application-spec/generate-application/runtime/sections/component-optic.d.ts +2 -1
- package/dist/application-spec/generate-application/runtime/sections/expression-runtime.js +1 -1
- package/dist/application-spec/generate-application/runtime/sections/transformers-runtime.d.ts +2 -4
- package/dist/application-spec/index.d.ts +1 -0
- package/dist/application-spec/index.js +1 -1
- package/dist/application-spec/parse-application-files/categorize/module-analysis.d.ts +1 -1
- package/dist/application-spec/parse-application-files/categorize/module-analysis.js +1 -1
- package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.d.ts +16 -3
- package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
- package/dist/application-spec/parse-application-files/raw-spec/raw-spec-file.js +1 -1
- package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-spec.js +1 -1
- package/dist/application-spec/parse-application-files/spec/application/configurator-spec/configurator-spec.js +1 -1
- package/dist/application-spec/parse-application-files/spec/components/component-entry.d.ts +1 -9
- package/dist/application-spec/parse-application-files/spec/components/component-entry.js +1 -1
- package/dist/application-spec/parse-application-files/spec/components/component-filter.d.ts +1 -54
- package/dist/application-spec/parse-application-files/spec/components/component-filter.js +1 -1
- package/dist/application-spec/parse-application-files/spec/components/index.d.ts +1 -1
- package/dist/application-spec/parse-application-files/spec/components/index.js +1 -1
- package/dist/application-spec/parse-application-files/spec/expressions/expression.d.ts +1 -28
- package/dist/application-spec/parse-application-files/spec/expressions/expression.js +1 -1
- package/dist/application-spec/parse-application-files/spec/expressions/expressions.d.ts +1 -1
- package/dist/application-spec/parse-application-files/spec/expressions/expressions.js +1 -1
- package/dist/application-spec/parse-application-files/spec/expressions/index.d.ts +0 -1
- package/dist/application-spec/parse-application-files/spec/expressions/index.js +1 -1
- package/dist/application-spec/parse-application-files/spec/expressions/memo-eval-plan.js +1 -1
- package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.js +1 -1
- package/dist/application-spec/parse-application-files/spec/model/defaults.d.ts +7 -2
- package/dist/application-spec/parse-application-files/spec/model/defaults.js +1 -1
- package/dist/application-spec/parse-application-files/spec/relations/reference-field-type.d.ts +25 -0
- package/dist/application-spec/parse-application-files/spec/relations/reference-field-type.js +1 -0
- package/dist/application-spec/parse-application-files/spec/relations/relation-field-mismatch.d.ts +46 -0
- package/dist/application-spec/parse-application-files/spec/relations/relation-field-mismatch.js +1 -0
- package/dist/application-spec/parse-application-files/spec/relations/relations.d.ts +4 -3
- package/dist/application-spec/parse-application-files/spec/relations/relations.js +1 -1
- package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
- package/dist/application-spec/parse-application-files/spec/sections/infra.d.ts +2 -0
- package/dist/application-spec/parse-application-files/spec/sections/infra.js +1 -1
- package/dist/client/phoenix-api.d.ts +96 -0
- package/dist/configurator/application-runtime/extensions/create-configurator-extensions.js +1 -1
- package/dist/configurator/application-runtime/extensions/selectors.d.ts +3 -1
- package/dist/configurator/application-runtime/extensions/selectors.js +1 -1
- package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +3 -1
- package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
- package/dist/configurator/application-runtime/extensions/systems/drag-and-drop-system/drag-and-drop-system.d.ts +3 -3
- package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +14 -4
- package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
- package/dist/configurator/application-runtime/extensions/systems/graphql-system/inject-assistant-lenses.d.ts +11 -0
- package/dist/configurator/application-runtime/extensions/systems/graphql-system/inject-assistant-lenses.js +1 -0
- package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.d.ts +2 -2
- package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.js +1 -1
- package/dist/configurator/common/configurator-interface.d.ts +11 -1
- package/dist/configurator/common/configurator-interface.js +1 -1
- package/dist/configurator/common/frontend-analytics.d.ts +2 -0
- package/dist/configurator/common/frontend-analytics.js +1 -1
- package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.d.ts +1 -1
- package/dist/configurator/pages/DefaultConfiguratorLayout.d.ts +6 -0
- package/dist/configurator/pages/DefaultConfiguratorLayout.js +1 -0
- package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
- package/dist/configurator/scene/scene-controls/hotspot-drag-handle/HotspotDragHandle.d.ts +1 -1
- package/dist/configurator/scene/scene-controls/hotspot-drag-handle/HotspotDragSceneHandle.d.ts +1 -1
- package/dist/configurator/scene/scene-entity/dimension-indicators/DimensionIndicator.d.ts +1 -1
- package/dist/configurator/scene/scene-entity/dimension-indicators/DimensionIndicatorInternal.d.ts +1 -1
- package/dist/configurator/scene/scene-entity/drag-and-drop/shared.d.ts +2 -2
- package/dist/configurator/scene/scene-entity/drag-and-drop/use-drag-object.d.ts +1 -1
- package/dist/configurator/scene/scene-entity/materials/RemoteReplacedMaterial.js +1 -1
- package/dist/configurator/scene/scene-entity/objects/SceneEntityObjectTextDecal.d.ts +1 -1
- package/dist/configurator/ui/assistant/AssistantMarkdown.d.ts +1 -1
- package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -1
- package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
- package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.d.ts +13 -0
- package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.js +1 -0
- package/dist/configurator/ui/assistant/entity-link/entity-link-selection.d.ts +22 -0
- package/dist/configurator/ui/assistant/entity-link/entity-link-selection.js +1 -0
- package/dist/configurator/ui/assistant/entity-link/entity-link-state.d.ts +27 -0
- package/dist/configurator/ui/assistant/entity-link/entity-link-state.js +1 -0
- package/dist/configurator/ui/assistant/entity-link/entity-link-target.d.ts +5 -0
- package/dist/configurator/ui/assistant/entity-link/entity-link-target.js +1 -0
- package/dist/configurator/ui/assistant/entity-link/index.d.ts +3 -0
- package/dist/configurator/ui/assistant/entity-link/index.js +1 -0
- package/dist/configurator/ui/configurator-layout/sidebar-keys/index.d.ts +1 -0
- package/dist/configurator/ui/configurator-layout/sidebar-keys/index.js +1 -0
- package/dist/configurator/ui/configurator-layout/sidebar-keys/sidebar-keys.d.ts +11 -0
- package/dist/configurator/ui/configurator-layout/sidebar-keys/sidebar-keys.js +1 -0
- package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/DesktopSidebar.d.ts +101 -0
- package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/DesktopSidebar.js +16 -0
- package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/index.d.ts +1 -0
- package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/index.js +1 -0
- package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.d.ts +4 -4
- package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.js +1 -1
- package/dist/configurator/ui/configurator-layout/slots/services/SideEffects.d.ts +3 -6
- package/dist/configurator/ui/configurator-layout/slots/services/SideEffects.js +1 -1
- package/dist/configurator/ui/configurator-layout/slots/slots.d.ts +1 -0
- package/dist/configurator/ui/configurator-layout/slots/slots.js +1 -1
- package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.d.ts +0 -74
- package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.js +5 -20
- package/dist/configurator/ui/configurator-layout/universal/DesktopPreview.js +1 -1
- package/dist/configurator/ui/configurator-layout/universal/MobileLayout.js +4 -4
- package/dist/configurator/ui/configurator-layout/universal/MobilePreview.js +1 -1
- package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.d.ts +47 -0
- package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.js +1 -0
- package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.d.ts +11 -26
- package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.js +1 -1
- package/dist/configurator/ui/legacy/layout/steps/StepsNavigation.d.ts +2 -2
- package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.d.ts +2 -2
- package/dist/docs/complex-use-cases/filtered-controls-with-fix-dialog.mdx +16 -19
- package/dist/docs/complex-use-cases/sketching.mdx +0 -38
- package/dist/docs/controls/select-attribute/cardselect.mdx +9 -13
- package/dist/docs/dimensions/3d-scene-integration/dimension-indicators.mdx +2 -2
- package/dist/docs/dimensions/3d-scene-integration/editable-angle-indicator.mdx +1 -1
- package/dist/docs/dimensions/3d-scene-integration/editable-distance-dimension-indicator.mdx +1 -1
- package/dist/docs/dimensions/3d-scene-integration/list-selector-dimension-indicator.mdx +1 -1
- package/dist/docs/drag-and-drop/drag-handle.mdx +1 -1
- package/dist/docs/drag-and-drop/hotspot-handle.mdx +1 -1
- package/dist/docs/drag-and-drop/planes.mdx +1 -1
- package/dist/docs/drag-and-drop/rotatable.mdx +2 -2
- package/dist/docs/index.json +42 -1
- package/dist/docs/integrations/woocommerce/local-development.mdx +1 -1
- package/dist/docs/layouts/custom-layout.mdx +1164 -0
- package/dist/docs/layouts/header/fixed.mdx +2 -2
- package/dist/docs/layouts/header/floating.mdx +2 -2
- package/dist/docs/layouts/sidebar/in-a-custom-layout.mdx +380 -0
- package/dist/docs/layouts/sidebar-footer/basic.mdx +32 -77
- package/dist/docs/other-features/client-side-rendering/declarative.mdx +1 -1
- package/dist/docs/other-features/side-effects.mdx +8 -11
- package/dist/docs/other-features/transformers.mdx +4 -0
- package/dist/docs/other-features/violation-messages.mdx +52 -56
- package/dist/docs/phoenix/application-states.mdx +9 -7
- package/dist/docs/phoenix/configurator-interface.mdx +184 -80
- package/dist/docs/phoenix/domain-model.mdx +4 -0
- package/dist/docs/phoenix/finalization.mdx +1 -1
- package/dist/docs/phoenix/layout-slots.mdx +114 -0
- package/dist/docs/phoenix/phoenix-cli.mdx +24 -27
- package/dist/docs/phoenix/project-structure.mdx +14 -9
- package/dist/docs/phoenix/quickstart.mdx +2 -2
- package/dist/docs/phoenix/sdk-builder-workflow.mdx +2 -2
- package/dist/docs/phoenix/testing.mdx +140 -0
- package/dist/docs/phoenix/webhook-membership.mdx +10 -9
- package/dist/docs/phoenix/webhooks.mdx +2 -2
- package/dist/domain/admin-domain/implementation/common-admin-expressions.d.ts +26 -11
- package/dist/domain/admin-domain/implementation/common-admin-publish.d.ts +1 -2
- package/dist/domain/admin-domain/index.js +1 -1
- package/dist/domain/application/GetApplicationWrapperHandler.d.ts +1 -1
- package/dist/domain/application/application-config.d.ts +4 -2
- package/dist/domain/application/assistant/assistant-fields.d.ts +12 -0
- package/dist/domain/application/assistant/assistant-fields.js +1 -0
- package/dist/domain/application/assistant/assistant-manifest.d.ts +9 -1
- package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +38 -2
- package/dist/domain/application/assistant/assistant-resolved-manifest.js +1 -1
- package/dist/domain/application/assistant/build-assistant-lenses.d.ts +14 -0
- package/dist/domain/application/assistant/build-assistant-lenses.js +5 -0
- package/dist/domain/application/assistant/build-assistant-manifest.js +1 -1
- package/dist/domain/application/assistant/create-assistant-execution-schema.d.ts +32 -0
- package/dist/domain/application/assistant/create-assistant-execution-schema.js +1 -0
- package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
- package/dist/domain/application/assistant/index.d.ts +6 -1
- package/dist/domain/application/assistant/index.js +1 -1
- package/dist/domain/application/assistant/session-setup/AssistantSetupHandler.d.ts +20 -0
- package/dist/domain/application/assistant/session-setup/AssistantSetupHandler.js +1 -0
- package/dist/domain/application/assistant/session-setup/apply-assistant-setup.d.ts +10 -0
- package/dist/domain/application/assistant/session-setup/apply-assistant-setup.js +1 -0
- package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.d.ts +48 -0
- package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.js +1 -0
- package/dist/domain/application/assistant/session-setup/create-session-assistant.d.ts +15 -0
- package/dist/domain/application/assistant/session-setup/create-session-assistant.js +1 -0
- package/dist/domain/application/assistant/session-setup/index.d.ts +4 -0
- package/dist/domain/application/assistant/session-setup/index.js +1 -0
- package/dist/domain/application/configurator-builder.d.ts +1 -1
- package/dist/domain/application/configurator-builder.js +1 -1
- package/dist/domain/application/create-initial-published-data.d.ts +5 -5
- package/dist/domain/application/index.d.ts +0 -1
- package/dist/domain/application/index.js +1 -1
- package/dist/domain/application/published-data/map-published-chunked-data.d.ts +1 -1
- package/dist/domain/application/published-data/map-published-data.d.ts +7 -3
- package/dist/domain/core/component/domain-component-optic.d.ts +11 -19
- package/dist/domain/core/component/domain-component-optic.js +2 -2
- package/dist/domain/core/component/legacy-filter.d.ts +2 -17
- package/dist/domain/core/component/system-component-filter.d.ts +36 -18
- package/dist/domain/core/expression/constant-expressions.d.ts +16 -8
- package/dist/domain/core/expression/custom-expression.d.ts +16 -3
- package/dist/domain/core/invariant/custom-invariants.d.ts +6 -14
- package/dist/domain/core/invariant/invariants.d.ts +1 -4
- package/dist/domain/core/invariant/violation.d.ts +50 -2
- package/dist/domain/core/invariant/violation.js +1 -1
- package/dist/domain/core/model/model.d.ts +1 -1
- package/dist/domain/core/recipe/recipes.d.ts +18 -50
- package/dist/domain/core/recipe/recipes.js +1 -1
- package/dist/domain/core/relation/all-of-type-relation.d.ts +8 -21
- package/dist/domain/core/relation/all-of-type-relation.js +1 -1
- package/dist/domain/core/relation/direct-relation.d.ts +13 -24
- package/dist/domain/core/relation/index.d.ts +0 -1
- package/dist/domain/core/relation/indirect-relation.d.ts +12 -67
- package/dist/domain/core/relation/indirect-relation.js +1 -1
- package/dist/domain/core/relation/relation-factory.d.ts +19 -15
- package/dist/domain/core/relation/relation-factory.js +1 -1
- package/dist/domain/core/state/migrations.d.ts +14 -45
- package/dist/domain/core/state/migrations.js +1 -1
- package/dist/domain/core/state/state.d.ts +1 -1
- package/dist/domain/domain-builder.js +1 -1
- package/dist/domain/domain-runtime/access/selectors.d.ts +9 -0
- package/dist/domain/domain-runtime/access/selectors.js +1 -1
- package/dist/domain/domain-runtime/access/types.d.ts +2 -0
- package/dist/domain/domain-runtime/access/types.js +1 -1
- package/dist/domain/domain-runtime/domain-context/selectors.d.ts +14 -13
- package/dist/domain/domain-runtime/domain-context/selectors.js +1 -1
- package/dist/domain/domain-runtime/domain-context/types.d.ts +4 -1
- package/dist/domain/domain-runtime/domain-runtime.d.ts +32 -16
- package/dist/domain/domain-runtime/errors/implementation-error-collector.d.ts +19 -0
- package/dist/domain/domain-runtime/errors/implementation-error-collector.js +1 -0
- package/dist/domain/domain-runtime/errors/implementation-error.d.ts +46 -0
- package/dist/domain/domain-runtime/errors/implementation-error.js +1 -0
- package/dist/domain/domain-runtime/errors/implementation-errors.d.ts +13 -0
- package/dist/domain/domain-runtime/errors/implementation-errors.js +1 -0
- package/dist/domain/domain-runtime/errors/index.d.ts +4 -0
- package/dist/domain/domain-runtime/errors/index.js +1 -0
- package/dist/domain/domain-runtime/errors/to-implementation-errors.d.ts +10 -0
- package/dist/domain/domain-runtime/errors/to-implementation-errors.js +1 -0
- package/dist/domain/domain-runtime/index.d.ts +1 -0
- package/dist/domain/domain-runtime/index.js +1 -1
- package/dist/domain/domain-runtime/spec/create-violation-expressions.d.ts +24 -0
- package/dist/domain/domain-runtime/spec/create-violation-expressions.js +1 -0
- package/dist/domain/domain-runtime/spec/index.d.ts +1 -1
- package/dist/domain/domain-runtime/spec/index.js +1 -1
- package/dist/domain/domain-runtime/spec/initialize.d.ts +11 -0
- package/dist/domain/domain-runtime/spec/initialize.js +1 -1
- package/dist/domain/domain-runtime/spec/module-checks/index.d.ts +1 -1
- package/dist/domain/domain-runtime/spec/module-checks/project-modules.d.ts +8 -1
- package/dist/domain/domain-runtime/spec/module-checks/project-modules.js +1 -1
- package/dist/domain/domain-runtime/spec/module-checks/resolve-action-modules.js +1 -1
- package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.js +1 -1
- package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.d.ts +7 -7
- package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.js +1 -1
- package/dist/domain/domain-runtime/spec/module-checks/resolve-invariant-modules.d.ts +2 -2
- package/dist/domain/domain-runtime/spec/module-checks/resolve-invariant-modules.js +1 -1
- package/dist/domain/extensions/attribute-switch.d.ts +1 -1
- package/dist/domain/extensions/attribute-switch.js +1 -1
- package/dist/domain/extensions/canvas-config.d.ts +1 -1
- package/dist/domain/extensions/client-side-image.d.ts +2 -2
- package/dist/domain/extensions/client-side-image.js +1 -1
- package/dist/domain/extensions/common/angle-indicator-schema.d.ts +2 -2
- package/dist/domain/extensions/common/dimension-indicator-schema.d.ts +2 -2
- package/dist/domain/extensions/editable-angle-indicator.d.ts +1 -1
- package/dist/domain/extensions/editable-distance-dimension-indicator.d.ts +1 -1
- package/dist/domain/extensions/editable-offset-indicator.d.ts +1 -1
- package/dist/domain/extensions/editable-offset-indicator.js +1 -1
- package/dist/domain/extensions/fit-selection-orthographic-camera-component.js +1 -1
- package/dist/domain/extensions/fit-selection-perspective-camera-component.js +1 -1
- package/dist/domain/extensions/horizontal-tabs.d.ts +2 -2
- package/dist/domain/extensions/list-selector-dimension-indicator.d.ts +1 -1
- package/dist/domain/extensions/navigation-steps.d.ts +2 -2
- package/dist/domain/extensions/offset-indicator.js +1 -1
- package/dist/domain/extensions/rotation-handle.d.ts +2 -2
- package/dist/domain/extensions/save-template-thumbnail.d.ts +2 -2
- package/dist/domain/extensions/save-template-thumbnail.js +1 -1
- package/dist/domain/extensions/scene-entity-animation.js +1 -1
- package/dist/domain/mocks/create-mock-domain-context.d.ts +1 -1
- package/dist/domain/mocks/create-mock-domain-runtime.d.ts +18 -9
- package/dist/domain/mocks/create-mock-domain-runtime.js +1 -1
- package/dist/domain/mocks/create-mock-domain.d.ts +1 -1
- package/dist/domain/mocks/create-mock-domain.js +1 -1
- package/dist/domain/mocks/create-mock-state.d.ts +2 -2
- package/dist/domain/mocks/create-test-application-config.d.ts +59 -0
- package/dist/domain/mocks/create-test-application-config.js +1 -0
- package/dist/domain/mocks/index.d.ts +1 -0
- package/dist/domain/mocks/index.js +1 -1
- package/dist/domain/projections/blender-projections/camera.d.ts +1 -1
- package/dist/domain/system-components/application-config.d.ts +2 -2
- package/dist/domain/system-components/child-entity-selection.js +1 -1
- package/dist/domain/system-components/collision-box-geometry.d.ts +4 -2
- package/dist/domain/system-components/collision-geometry.d.ts +4 -2
- package/dist/domain/system-components/collision-point-geometry.d.ts +4 -2
- package/dist/domain/system-components/common/material-override-schema.d.ts +2 -2
- package/dist/domain/system-components/common/recipes.d.ts +21 -3
- package/dist/domain/system-components/common/recipes.js +1 -1
- package/dist/domain/system-components/constraint.d.ts +10 -23
- package/dist/domain/system-components/drag-handle.d.ts +1 -1
- package/dist/domain/system-components/drag-handle.js +1 -1
- package/dist/domain/system-components/fit-entity-orthographic-camera-component.js +1 -1
- package/dist/domain/system-components/fit-entity-perspective-camera-component.js +1 -1
- package/dist/domain/system-components/fit-root-orthographic-camera-component.js +1 -1
- package/dist/domain/system-components/fit-root-perspective-camera-component.js +1 -1
- package/dist/domain/system-components/hotspot-drag-handle.d.ts +1 -1
- package/dist/domain/system-components/hotspot-drag-handle.js +1 -1
- package/dist/domain/system-components/material-swatch.js +1 -1
- package/dist/domain/system-components/scene-entity-material-override.d.ts +1 -1
- package/dist/domain/system-components/scene-entity-object-material-override.d.ts +1 -1
- package/dist/domain/system-components/scene-entity-object-text-decal.d.ts +1 -1
- package/dist/domain/system-components/scene-entity-object-transimissive-material-override.d.ts +1 -1
- package/dist/domain/system-components/scene-entity-transimissive-material-override.d.ts +1 -1
- package/dist/domain/system-components/static-orthographic-camera-component.js +1 -1
- package/dist/domain/system-components/static-perspective-camera-component.js +1 -1
- package/dist/domain/utils/eval-cache.d.ts +1 -1
- package/dist/domain/utils/map-nested-object.d.ts +1 -1
- package/dist/editor/domain-editors/use-implementation-files.d.ts +1 -2
- package/dist/editor/mocks/EditorMockContext.js +1 -1
- package/dist/legacy/domain-cli/gen/configurator-builder.js +13 -12
- package/dist/legacy/domain-cli/gen/constant-expressions.js +1 -1
- package/dist/legacy/domain-cli/gen/defaults.js +1 -7
- package/dist/legacy/domain-cli/gen/invariants.js +3 -4
- package/dist/legacy/domain-cli/gen/relations.js +1 -1
- package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
- package/dist/legacy/domain-cli/utils/cache.js +1 -1
- package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +81 -68
- package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/claude-md.d.ts +1 -1
- package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/cursor-rules.d.ts +1 -1
- package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.d.ts +1 -1
- package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.js +2 -0
- package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/domain-index.js +17 -15
- package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
- package/dist/phoenix/commands/deploy.js +1 -1
- package/dist/phoenix/commands/init.d.ts +4 -4
- package/dist/phoenix/commands/init.js +1 -1
- package/dist/phoenix/commands/prettier.js +1 -1
- package/dist/phoenix/services/source-archive.d.ts +1 -0
- package/dist/phoenix/services/source-archive.js +1 -1
- package/dist/phoenix/utils/git/index.d.ts +1 -0
- package/dist/phoenix/utils/git/index.js +1 -0
- package/dist/phoenix/utils/git/is-inside-git-repository.d.ts +6 -0
- package/dist/phoenix/utils/git/is-inside-git-repository.js +1 -0
- package/dist/phoenix/utils/index.d.ts +1 -0
- package/dist/phoenix/utils/index.js +1 -1
- package/dist/react-sdk/application-runtime/hooks/use-access-service.d.ts +2 -0
- package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.js +1 -1
- package/dist/react-sdk/application-runtime/routing/access-service.d.ts +1 -0
- package/dist/react-sdk/application-runtime/runtime/create-application-runtime.d.ts +33 -16
- package/dist/react-sdk/application-runtime/runtime/create-application-runtime.js +1 -1
- package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.d.ts +30 -0
- package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.js +1 -0
- package/dist/react-sdk/domain-context/common-hooks/use-domain-context.d.ts +4 -4
- package/dist/react-sdk/domain-context/index.d.ts +2 -1
- package/dist/react-sdk/domain-context/index.js +1 -1
- package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.d.ts +6 -0
- package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.js +1 -1
- package/dist/react-sdk/domain-controls/hooks/use-angle-dimension.d.ts +1 -1
- package/dist/ui-sdk/theme/types.d.ts +1 -1
- package/dist/webhook/builders/webhook-builder.js +1 -1
- package/package.json +3 -3
- package/schema/domain-spec.json +1115 -209
- package/dist/application-spec/generate-application/code/templates/prettier-ignore.d.ts +0 -1
- package/dist/application-spec/generate-application/code/templates/prettier-ignore.js +0 -6
- package/dist/domain/application/resource-builder.d.ts +0 -13
- package/dist/domain/application/resource-builder.js +0 -1
- package/dist/domain/core/relation/relation-implementation.d.ts +0 -7
- package/dist/domain/domain-runtime/spec/invariant-builder.d.ts +0 -26
- package/dist/domain/domain-runtime/spec/invariant-builder.js +0 -1
- /package/dist/{domain/core/relation/relation-implementation.js → application-spec/core/expressions/relation-expression-params.js} +0 -0
- /package/dist/application-spec/{core → enhanced-json}/eval-code-uses-self.d.ts +0 -0
- /package/dist/application-spec/{core → enhanced-json}/eval-code-uses-self.js +0 -0
- /package/dist/application-spec/{core → enhanced-json}/eval-to-constant.js +0 -0
|
@@ -2,39 +2,39 @@ import{fileHeader as n}from"./file-header.js";import{generateImports as i,getImp
|
|
|
2
2
|
${n.join(",\n ")}
|
|
3
3
|
)`,a=(n,i)=>{if(0===n.length)return"{}";let o=n.map((n,o)=>{let t=e(n);return null===t?null:` ${t}: ${i[o]}`}).filter(n=>null!==n);return 0===o.length?"{}":`{
|
|
4
4
|
${o.join(",\n")}
|
|
5
|
-
}`};export const generateIndexDomainFile=(s={})=>{let{includeMigrations:r=!0,includeI18n:m=!0,expressionsFiles:d=[],invariantsFiles:l=[],adminExpressionsFiles:p=[],adminInvariantsFiles:c=[],migrationsFiles:
|
|
5
|
+
}`};export const generateIndexDomainFile=(s={})=>{let{includeMigrations:r=!0,includeI18n:m=!0,expressionsFiles:d=[],invariantsFiles:l=[],adminExpressionsFiles:p=[],adminInvariantsFiles:c=[],migrationsFiles:x=[],adminMigrationsFiles:g=[]}=s,u=(n,i)=>`${i?"adminMigrateToV":"migrateToV"}${e(n)}`,$=x.map(n=>{let i=e(n),o=n.replace(/\.ts$/,""),t=`../src/${o}.js`;return`import { migrateToV${i} } from '${t}'`}).join("\n"),A=g.map(n=>{let i=e(n),o=n.replace(/\.ts$/,""),t=`../src/${o}.js`;return`import { migrateToV${i} as adminMigrateToV${i} } from '${t}'`}).join("\n"),h=x.map(n=>u(n,!1)),f=g.map(n=>u(n,!0)),E=x.length>0,j=g.length>0,y=i(d,"expressions"),D=i(l,"invariants"),V=i(p,"adminExpressions"),M=i(c,"adminInvariants"),F=o(d,"expressions"),I=o(l,"invariants"),v=o(p,"adminExpressions"),w=o(c,"adminInvariants"),B=t(I),R=t(F),b=t(w),T=t(v),C=[y,D,V,M].filter(Boolean).join("\n"),P=[$,A].filter(Boolean).join("\n"),S=d.length>1||l.length>1||p.length>1||c.length>1,k=a(x,h),q=a(g,f),z=E?`
|
|
6
6
|
const migrations = ${k}
|
|
7
7
|
|
|
8
|
-
const migrate =
|
|
8
|
+
const migrate = createMigrateFunction(modelVersions, modelVersion, migrations)`:"",G=j?`
|
|
9
9
|
const adminMigrations = ${q}
|
|
10
10
|
|
|
11
|
-
const migrateAdmin =
|
|
11
|
+
const migrateAdmin = createMigrateFunction(adminModelVersions, adminModelVersion, adminMigrations)`:"";return`${n}
|
|
12
12
|
${S?"import merge from 'lodash-es/merge.js'\n":""}
|
|
13
|
-
import { type AliasedExpressions${r&&(E||j)?",
|
|
13
|
+
import { type AliasedExpressions${r&&(E||j)?", createMigrateFunction":""}, createViolationExpressions } from '@salsita-ai/sdk/domain'
|
|
14
14
|
|
|
15
15
|
${m?"import { createI18n } from './i18n.js'":""}
|
|
16
|
-
import { adminDomainBuilder,
|
|
16
|
+
import { adminDomainBuilder, commonAdminInvariants } from './domain/admin-implementation.js'
|
|
17
17
|
import type {
|
|
18
18
|
Aliases as AdminAliases,
|
|
19
19
|
AnyDomainEntity as AdminAnyDomainEntity,
|
|
20
20
|
RootEntity as AdminRootEntity,
|
|
21
21
|
} from './domain/admin-model/index.js'
|
|
22
|
-
${j?"
|
|
22
|
+
import { aliases as adminAliases${j?", modelVersion as adminModelVersion, modelVersions as adminModelVersions":""} } from './domain/admin-model/index.js'
|
|
23
23
|
import type { FrontendData, PublishedData, SessionData } from './domain/application-types.js'
|
|
24
24
|
import {
|
|
25
25
|
generatedConfiguratorBuilder,
|
|
26
26
|
} from './domain/configurator-builder.js'
|
|
27
|
-
import { domainBuilder
|
|
27
|
+
import { domainBuilder } from './domain/implementation.js'
|
|
28
28
|
import type { Aliases, AnyDomainEntity, RootEntity } from './domain/model/index.js'
|
|
29
|
-
${E?"
|
|
29
|
+
import { aliases${E?", modelVersion, modelVersions":""} } from './domain/model/index.js'
|
|
30
30
|
${C?`
|
|
31
31
|
${C}`:""}
|
|
32
32
|
${P?`
|
|
33
33
|
${P}`:""}${z}${G}
|
|
34
34
|
|
|
35
|
-
const customInvariants = ${
|
|
35
|
+
const customInvariants = ${B}
|
|
36
36
|
|
|
37
|
-
const violationExpressions =
|
|
37
|
+
const violationExpressions = createViolationExpressions(aliases, [{ origin: '.phoenix/domain.ts', exports: customInvariants }])
|
|
38
38
|
|
|
39
39
|
const customExpressions: AliasedExpressions<
|
|
40
40
|
AnyDomainEntity,
|
|
@@ -43,18 +43,20 @@ const customExpressions: AliasedExpressions<
|
|
|
43
43
|
SessionData,
|
|
44
44
|
FrontendData,
|
|
45
45
|
Aliases
|
|
46
|
-
> = ${
|
|
46
|
+
> = ${R}
|
|
47
47
|
|
|
48
48
|
const domainFactory = domainBuilder
|
|
49
49
|
.withExpressions(violationExpressions)
|
|
50
50
|
.withExpressions(customExpressions)${r&&E?"\n .withMigrate(migrate)":""}
|
|
51
51
|
.build()
|
|
52
52
|
|
|
53
|
-
const customAdminInvariants = ${
|
|
53
|
+
const customAdminInvariants = ${b}
|
|
54
54
|
|
|
55
|
-
const adminViolationExpressions =
|
|
56
|
-
|
|
57
|
-
.
|
|
55
|
+
const adminViolationExpressions = createViolationExpressions(
|
|
56
|
+
adminAliases,
|
|
57
|
+
[{ origin: '.phoenix/domain.ts', exports: customAdminInvariants }],
|
|
58
|
+
commonAdminInvariants
|
|
59
|
+
)
|
|
58
60
|
|
|
59
61
|
const customAdminExpressions: AliasedExpressions<
|
|
60
62
|
AdminAnyDomainEntity,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{existsSync as e,lstatSync as i,readFileSync as t,readdirSync as r,rmSync as o,unlinkSync as s}from"fs";import{join as n}from"path";import{format as a}from"prettier";import{prettierrc as l}from"@salsita-ai/common/prettier";import{GeneratedApplication as c,GeneratedApplicationFile as p,RuntimeReferenceStore as g,buildPhoenixDefinitions as f,createContentDiffTracker as h,generateApplicationCode as
|
|
1
|
+
import{existsSync as e,lstatSync as i,readFileSync as t,readdirSync as r,rmSync as o,unlinkSync as s}from"fs";import{join as n}from"path";import{format as a}from"prettier";import{prettierrc as l}from"@salsita-ai/common/prettier";import{GeneratedApplication as c,GeneratedApplicationFile as p,RuntimeReferenceStore as g,buildPhoenixDefinitions as f,createContentDiffTracker as h,generateApplicationCode as d,parseApplicationFiles as m}from"#package/application-spec";import{getAllPhxDefinitions as u}from"#package/domain";import{compileWithSwc as w}from"../services/swc.js";import{isInsideGitRepository as b,syncChangedFiles as S}from"../utils/index.js";import{readApplicationFiles as j}from"./application-spec-file-reader.js";import{cleanStaleAgentSkills as v,removeProjectFiles as D}from"./clean-project-files.js";import{swcEvalExpressionParser as F,swcModuleAnalyzer as x}from"./swc-module-analyzer.js";let y=".phoenix",P=`${y}/`,k=async e=>{if(e.binary||!1===e.format)return e;try{let i=await a(e.content,{...l,filepath:e.path});return p(e.path,i,{binary:e.binary,format:e.format})}catch{return e}},C=async e=>{let[i,t,r]=await Promise.all([Promise.all(e.generatedProjectFiles.map(k)),Promise.all(e.initialProjectFiles.map(k)),Promise.all(e.prettierFiles.map(k))]);return c({files:e.files,generatedProjectFiles:i,initialProjectFiles:t,prettierFiles:r,removedProjectFiles:e.removedProjectFiles})};export class ApplicationSpecBuilder{contentDiff;referenceStore;config;logger;phxDefinitions;constructor(e){this.config=e,this.logger=e.logger,this.referenceStore=new g,this.contentDiff=h({readDiskContent:this.readDiskContent}),this.phxDefinitions=f(u())}async build(e){let i=e?.parsingContext,t=e?.compile??!0;e?.force&&this.referenceStore.clear();let r=i?.startSpan("readFiles","build","application-spec-builder.ts"),o=e?.rawProjectFiles??await j({envs:{}});r?.();let s=m({rawProjectFiles:o,phxDefinitions:this.phxDefinitions},{analyzer:x,evalExpressionParser:F,referenceStore:this.referenceStore,logger:this.logger,parsingContext:i});if(!s.ok)return{ok:!1,rawProjectFiles:o,errors:s.errors,diagnostics:s.diagnostics,metrics:s.metrics,counts:s.counts};let{applicationSpec:n,categorizedFiles:a,rawMockTemplates:l}=s.value,c=i?.startSpan("generateCode","build","application-spec-builder.ts"),p=b(process.cwd());p||this.logger.debug(" Not inside a git repository, .gitignore is not written");let g=d({applicationSpec:n,categorizedFiles:a,phxDefinitions:this.phxDefinitions,sdkVersion:this.config.sdkVersion,projectInGitRepository:p,cliUseWorkspace:this.config.cliUseWorkspace,name:this.config.name,description:this.config.description,projectSlug:this.config.projectSlug,environmentSlug:this.config.environmentSlug,enableEditor:this.config.enableEditor,inlineTemplates:this.config.inlineTemplates,rawMockTemplates:l});c?.();let f=i?.startSpan("cleanStaleFiles","build","application-spec-builder.ts"),h=new Set(g.files.map(e=>e.path));this.cleanStaleGeneratedFiles(h),D(g.removedProjectFiles,{logger:this.logger}),v(new Set(g.generatedProjectFiles.map(e=>e.path)),{logger:this.logger}),f?.();let u=i?.startSpan("contentDiff","build","application-spec-builder.ts"),w=await C(g),y=this.contentDiff.getChangedApplicationFiles(w,{generatedFilesPathPrefix:P,force:e?.force}),k=y.changedGeneratedFiles;u?.(),k.length>0?this.logger.info(` ${k.length}/${g.files.length} generated files changed`):this.logger.info(" No generated files changed");let $=y.filesToWrite.length-k.length;$>0&&this.logger.info(` ${$} project files changed`);let T=i?.startSpan("writeFiles","build","application-spec-builder.ts");return await S(y.filesToWrite,{logger:this.logger,skipChecksum:!0}),T?.(),t&&await this.compile(i),{ok:!0,application:s.value,changedFiles:k,diagnostics:s.diagnostics,metrics:s.metrics,counts:s.counts}}async compile(e){let i=e?.startSpan("swcCompile(src)","build","application-spec-builder.ts");await w({sourceDir:"src",outDir:`./${y}/.swc/src`},{logger:this.logger}),i?.();let t=e?.startSpan("swcCompile(.phoenix)","build","application-spec-builder.ts");await w({sourceDir:y,outDir:`./${y}/.swc/${y}`},{logger:this.logger}),t?.()}readDiskContent=i=>{try{if(e(i))return t(i,"utf-8")}catch{}};cleanStaleGeneratedFiles(t){let a=new Set(["public",".swc","dist","phoenix-dev.log","phoenix-dev.log.1","phoenix-dev.log.2","variants","variant-recovery.json"]);try{if(!e(y))return;for(let e of r(y)){if(a.has(e)||t.has(e))continue;let r=n(y,e);try{let e=i(r);if(e.isSymbolicLink())continue;e.isDirectory()?o(r,{recursive:!0}):s(r),this.logger.debug(` Removed stale: ${r}`)}catch{}}}catch{}}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{openAsBlob as e}from"node:fs";import{createApiBaseClient as t}from"#package/client";import{resolveApplicationSpecDeploymentData as i}from"../application-spec/index.js";import{createSourceArchive as o,getServerCredentials as r}from"../services/index.js";import{ensureWorkspaceInstallSettings as a}from"../utils/index.js";let s={queued:"Waiting for a build runner",preparing:"Preparing the deployment",building:"Building the project",deploying:"Deploying the frontend, webhooks and assets",live:"Live",failed:"Failed",cancelled:"Cancelled"},n=e=>new Promise(t=>setTimeout(t,e)),l=async(t,i)=>{let o=new FormData;for(let[e,i]of Object.entries(t.fields))o.append(e,i);o.append("file",await e(i,{type:"application/gzip"}),"sources.tgz");let r=await fetch(t.url,{method:"POST",body:o});if(!r.ok)throw Error(`Uploading the sources failed with HTTP ${r.status}: ${await r.text()}`)};export const runDeployCommand=async(e,{logger:d})=>{let u=await r(e.serverUrl),{pollIntervalMs:c}=e;if(!u)throw Error(`You are not signed in to ${e.serverUrl}. Run \`phoenix login <workspace>\` first.`);let p=t(e.serverUrl),h={authorization:`Bearer ${u.token}`};d.step("Validating the application spec");let m=await i({skipUpload:!0,logger:d});d.success(`The spec is valid (application version ${m.applicationVersion})`),d.step(`Packing the project for ${u.customerName}`),a(e.projectDir);let f=await o(e.projectDir);try{let t;d.info(` ${f.fileCount} files, ${(t=f.size)<1048576?`${(t/1024).toFixed(1)} KB`:`${(t/1024/1024).toFixed(1)} MB`}`);let i=await p.POST("/deployments/builds",{body:{sdkVersion:e.sdkVersion,sizeBytes:f.size,configurationSchema:{version:m.schemaVersion,schema:m.schema},adminConfigurationSchema:m.adminSchema?{version:m.adminSchemaVersion,schema:m.adminSchema}:void 0},headers:h});if(i.error||!i.data)throw Error(`The server did not create a build: ${i.error?.message??"no response"}`);let{buildId:o,upload:r}=i.data;d.step("Uploading the sources"),await l(r,f.path);let a=await p.POST("/deployments/builds/{buildId}/start",{params:{path:{buildId:o}},headers:{...h,"content-type":null}});if(a.error)throw Error(`The server did not start the build: ${a.error.message}`);if(a.data?.status==="failed")throw Error(`Build ${o} could not be started: ${a.data.error??"the server gave no reason"}`);if(d.success(`Build ${o} started`),u.studioUrl){let e=new URL(`/builder/deployments/${o}`,u.studioUrl);e.searchParams.set("customer",u.customerSlug),d.info(`Follow the build in Studio: ${e.toString()}`)}if(!e.wait)return;let g=null,w=0;for(;;){let{data:e,error:t}=await p.GET("/deployments/builds/{buildId}",{params:{path:{buildId:o}},headers:h}).catch(e=>({data:void 0,error:{message:String(e)}}));if(t||!e){if((w+=1)>=5)throw Error(`Following build ${o} failed: ${t?.message??"no response"}. The build may still finish; check Deployments in Studio.`);await n(c);continue}if(w=0,e.status!==g&&(g=e.status,d.step(s[e.status])),"live"===e.status){d.success(`Your configurator is live at ${e.configuratorUrl}`),d.info("Coding agents: when the user has nothing more to build, offer the run evaluation from the phoenix-feedback skill, once per conversation.");return}if("failed"===e.status||"cancelled"===e.status||e.timedOut){let t=await p.GET("/deployments/builds/{buildId}/log",{params:{path:{buildId:o}},headers:h}).catch(()=>({data:void 0})),i=(t.data?.log??"").trim().split("\n").slice(-40).join("\n");i&&d.info(`
|
|
1
|
+
import{openAsBlob as e}from"node:fs";import{createApiBaseClient as t}from"#package/client";import{resolveApplicationSpecDeploymentData as i}from"../application-spec/index.js";import{createSourceArchive as o,getServerCredentials as r}from"../services/index.js";import{ensureWorkspaceInstallSettings as a}from"../utils/index.js";let s={queued:"Waiting for a build runner",preparing:"Preparing the deployment",building:"Building the project",deploying:"Deploying the frontend, webhooks and assets",live:"Live",failed:"Failed",cancelled:"Cancelled"},n=e=>new Promise(t=>setTimeout(t,e)),l=async(t,i)=>{let o=new FormData;for(let[e,i]of Object.entries(t.fields))o.append(e,i);o.append("file",await e(i,{type:"application/gzip"}),"sources.tgz");let r=await fetch(t.url,{method:"POST",body:o});if(!r.ok)throw Error(`Uploading the sources failed with HTTP ${r.status}: ${await r.text()}`)};export const runDeployCommand=async(e,{logger:d})=>{let u=await r(e.serverUrl),{pollIntervalMs:c}=e;if(!u)throw Error(`You are not signed in to ${e.serverUrl}. Run \`phoenix login <workspace>\` first.`);let p=t(e.serverUrl),h={authorization:`Bearer ${u.token}`};d.step("Validating the application spec");let m=await i({skipUpload:!0,logger:d});d.success(`The spec is valid (application version ${m.applicationVersion})`),d.step(`Packing the project for ${u.customerName}`),a(e.projectDir);let f=await o(e.projectDir);try{let t;f.hasConversationLog?d.info("Including conversation.log in the private sources archive. It is not published with the application."):d.warn("No conversation.log found in the project root. Deploying without a conversation transcript."),d.info(` ${f.fileCount} files, ${(t=f.size)<1048576?`${(t/1024).toFixed(1)} KB`:`${(t/1024/1024).toFixed(1)} MB`}`);let i=await p.POST("/deployments/builds",{body:{sdkVersion:e.sdkVersion,sizeBytes:f.size,configurationSchema:{version:m.schemaVersion,schema:m.schema},adminConfigurationSchema:m.adminSchema?{version:m.adminSchemaVersion,schema:m.adminSchema}:void 0},headers:h});if(i.error||!i.data)throw Error(`The server did not create a build: ${i.error?.message??"no response"}`);let{buildId:o,upload:r}=i.data;d.step("Uploading the sources"),await l(r,f.path);let a=await p.POST("/deployments/builds/{buildId}/start",{params:{path:{buildId:o}},headers:{...h,"content-type":null}});if(a.error)throw Error(`The server did not start the build: ${a.error.message}`);if(a.data?.status==="failed")throw Error(`Build ${o} could not be started: ${a.data.error??"the server gave no reason"}`);if(d.success(`Build ${o} started`),u.studioUrl){let e=new URL(`/builder/deployments/${o}`,u.studioUrl);e.searchParams.set("customer",u.customerSlug),d.info(`Follow the build in Studio: ${e.toString()}`)}if(!e.wait)return;let g=null,w=0;for(;;){let{data:e,error:t}=await p.GET("/deployments/builds/{buildId}",{params:{path:{buildId:o}},headers:h}).catch(e=>({data:void 0,error:{message:String(e)}}));if(t||!e){if((w+=1)>=5)throw Error(`Following build ${o} failed: ${t?.message??"no response"}. The build may still finish; check Deployments in Studio.`);await n(c);continue}if(w=0,e.status!==g&&(g=e.status,d.step(s[e.status])),"live"===e.status){d.success(`Your configurator is live at ${e.configuratorUrl}`),d.info("Coding agents: when the user has nothing more to build, offer the run evaluation from the phoenix-feedback skill, once per conversation.");return}if("failed"===e.status||"cancelled"===e.status||e.timedOut){let t=await p.GET("/deployments/builds/{buildId}/log",{params:{path:{buildId:o}},headers:h}).catch(()=>({data:void 0})),i=(t.data?.log??"").trim().split("\n").slice(-40).join("\n");i&&d.info(`
|
|
2
2
|
Last lines of the build log:
|
|
3
3
|
${i}
|
|
4
4
|
`);let r=e.timedOut?"it took too long":e.error??"see the build log";throw Error(`Build ${o} did not go live: ${r}`)}await n(c)}}finally{await f.cleanup()}};
|
|
@@ -6,10 +6,10 @@ export interface InitCommandProps {
|
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
8
|
* Starts a Phoenix project: writes a `package.json` that depends on this CLI's SDK version when the folder has none,
|
|
9
|
-
* the starter spec and the pnpm settings the first install needs,
|
|
10
|
-
* pipeline. It touches no
|
|
11
|
-
* nothing: the starter spec names the default project of whichever workspace the developer signs in
|
|
12
|
-
* everything else is generated by sync or the build.
|
|
9
|
+
* the starter spec and the pnpm settings the first install needs, adds the `dev`, `build`, `deploy`, `check` and `fix`
|
|
10
|
+
* scripts the project does not have yet, and switches the project to the application-spec pipeline. It touches no
|
|
11
|
+
* server and asks nothing: the starter spec names the default project of whichever workspace the developer signs in
|
|
12
|
+
* to, and everything else is generated by sync or the build.
|
|
13
13
|
*
|
|
14
14
|
* Refuses when a `spec/` folder exists, and when an existing `package.json` does not depend on the SDK.
|
|
15
15
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{existsSync as e}from"fs";import{mkdir as n,readFile as t,writeFile as i}from"fs/promises";import{basename as o,dirname as r,join as p}from"path";import{ensureWorkspaceInstallSettings as
|
|
1
|
+
import{existsSync as e}from"fs";import{mkdir as n,readFile as t,writeFile as i}from"fs/promises";import{basename as o,dirname as r,join as p}from"path";import{ensureWorkspaceInstallSettings as s}from"../utils/index.js";import{starterSpecFiles as a}from"./init-starter-spec.js";let c="@salsita-ai/sdk",l={dev:"phoenix dev",build:"phoenix build",deploy:"phoenix deploy",check:"phoenix check",fix:"phoenix fix"},d=async e=>{let n=`Install the SDK first (\`pnpm add ${c}\`), then rerun \`pnpm phoenix init\`.`,i=JSON.parse(await t(e,"utf-8"));if("object"!=typeof i||null===i||Array.isArray(i))throw Error(`phoenix init could not read package.json because it is not a JSON object. ${n}`);if(!["dependencies","devDependencies"].some(e=>{let n=Reflect.get(i,e);return"object"==typeof n&&null!==n&&c in n}))throw Error(`phoenix init found no ${c} dependency in package.json. ${n}`);return{...i}},h=async e=>{for(let t of a){let o=p(e,t.path);await n(r(o),{recursive:!0}),await i(o,t.content)}},f=async(e,n)=>{let t=n.phoenix,o=n.scripts,r="object"==typeof o&&null!==o?o:{},p=Object.fromEntries(Object.entries(l).filter(([e])=>!(e in r)));await i(e,JSON.stringify({...n,scripts:{...r,...p},phoenix:{..."object"==typeof t&&null!==t?t:{},applicationFlow:!0}},null,2)+"\n")};export const runInitCommand=async(t,{logger:i})=>{var r,a;let u,m=t.projectRoot??process.cwd(),x=p(m,"package.json");if(e(p(m,"spec")))throw Error("phoenix init found an existing spec/ folder. init only starts new projects, and writing a starter spec would overwrite or mix with the existing one. To update an existing project, run `pnpm phoenix sync`; to start over, run init in an empty project folder.");let w=e(x)?await d(x):(r=m,a=t.sdkVersion,{name:(u=o(r).toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^[._-]+|[-]+$/g,"")).length>0?u:"phoenix-configurator",private:!0,type:"module",scripts:l,dependencies:{[c]:a},devDependencies:{"@lingui/cli":"5.9.5","@lingui/swc-plugin":"5.11.0"}});i.step(`Writing the starter project to ${m}`),await n(m,{recursive:!0}),await h(m),await f(x,w),s(m),i.success(`Phoenix project created in ${m}.`),i.info("\nNext steps, in the project folder:\n pnpm install\n pnpm phoenix sync\n pnpm phoenix login <workspace>\n pnpm phoenix dev\n pnpm phoenix deploy\n\nDeveloping against a Studio development environment instead? Paste its .env block into .env before phoenix dev.")};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readFile as t,writeFile as e}from"fs/promises";import{globby as o}from"globby";import{resolve as
|
|
1
|
+
import{readFile as t,writeFile as e}from"fs/promises";import{globby as o}from"globby";import{resolve as i}from"path";import*as r from"prettier";let a=["**/node_modules/**","**/dist/**","**/.git/**","**/.phoenix/**","**/locales/*/*.ts","pnpm-lock.yaml",".linguirc"];export const formatFiles=async(n,l)=>{let{logger:f}=l,s=await o("."===n?"**/*":n,{gitignore:!0,ignore:a}),c=0;for(let o of s)try{let a=i(o),n=await t(a,"utf-8"),l=await r.resolveConfig(a);if((await r.getFileInfo(a)).ignored)continue;let f=await r.format(n,{...l,filepath:a});f!==n&&(await e(a,f,"utf-8"),c++)}catch(t){}c>0&&f.info(`Formatted ${c} file${1!==c?"s":""}`)};export const checkFiles=async(e,n)=>{let{logger:l}=n,f=await o("."===e?"**/*":e,{gitignore:!0,ignore:a}),s=[];for(let e of f)try{let o=i(e),a=await t(o,"utf-8"),n=await r.resolveConfig(o);if((await r.getFileInfo(o)).ignored)continue;await r.check(a,{...n,filepath:o})||s.push(e)}catch(t){}return!(s.length>0)||(l.error(`Found ${s.length} unformatted file${1!==s.length?"s":""}:`),s.forEach(t=>{console.error(` - ${t}`)}),!1)};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{execFile as e}from"node:child_process";import{createReadStream as r,createWriteStream as t}from"node:fs";import{lstat as o,mkdir as i,mkdtemp as a,readdir as n,rm as s,stat as c,writeFile as l}from"node:fs/promises";import{tmpdir as h}from"node:os";import{dirname as p,join as f}from"node:path";import{Transform as d}from"node:stream";import{pipeline as w}from"node:stream/promises";import{promisify as m}from"node:util";import{createGunzip as u}from"node:zlib";import{extract as g}from"tar-stream";import{isProjectFile as y,listProjectEntries as v}from"../application-spec/project-files.js";let x=m(e);export const createSourceArchive=async e=>{let r=await
|
|
1
|
+
import{execFile as e}from"node:child_process";import{createReadStream as r,createWriteStream as t}from"node:fs";import{lstat as o,mkdir as i,mkdtemp as a,readdir as n,rm as s,stat as c,writeFile as l}from"node:fs/promises";import{tmpdir as h}from"node:os";import{dirname as p,join as f}from"node:path";import{Transform as d}from"node:stream";import{pipeline as w}from"node:stream/promises";import{promisify as m}from"node:util";import{createGunzip as u}from"node:zlib";import{extract as g}from"tar-stream";import{isProjectFile as y,listProjectEntries as v}from"../application-spec/project-files.js";let x=m(e);export const createSourceArchive=async e=>{let r=(await n(e)).includes("conversation.log"),t=[...await v(e),...r?["conversation.log"]:[]],i=await Promise.all(t.map(async r=>({name:r,entry:await o(f(e,r))})));if(i.some(({name:e,entry:r})=>"conversation.log"===e&&r.isDirectory()))throw Error("conversation.log is a directory. Replace it with a regular transcript file and deploy again.");let p=i.filter(({entry:e})=>!e.isDirectory()&&(!e.isFile()||e.nlink>1)),d=i.filter(({entry:e})=>e.isFile()).map(({name:e})=>e);if(p.length>0)throw Error(`These project files are links or special files, which builds do not accept: ${p.map(({name:e})=>e).join(", ")}. Replace them with regular files and deploy again.`);if(0===d.length)throw Error(`No project files were found in ${e}, so there is nothing to deploy. Run phoenix deploy in the folder of an application-spec project.`);let w=await a(f(h(),"phoenix-deploy-")),m="sources.tgz",u=f(w,m),g=f(w,"files");try{await l(g,d.join("\0")),await x("tar",["-czf",m,"-C",e,"--null","-T",g],{cwd:w,env:{...process.env,COPYFILE_DISABLE:"1"}})}catch(r){await s(w,{recursive:!0,force:!0});let e=r instanceof Error?r.message:String(r);throw Error(`Packing the project with tar failed: ${e}. Check that tar is installed and on the PATH.`)}return{path:u,fileCount:d.length,size:(await c(u)).size,hasConversationLog:r,cleanup:()=>s(w,{recursive:!0,force:!0})}};let E=(e,...r)=>e instanceof Error&&"code"in e&&"string"==typeof e.code&&r.includes(e.code),j=async e=>{try{return 0===(await n(e)).length}catch(e){if(E(e,"ENOENT"))return!0;throw e}},T=class ArchiveRefusal extends Error{},b=e=>e.length>0&&!e.startsWith("/")&&!e.includes("\\")&&!/^[A-Za-z]:/.test(e)&&!/[\x00-\x1f\x7f]/.test(e)&&!e.split("/").includes("..");export const extractSourceArchive=async e=>{let o,a,{archivePath:n,targetDir:l}=e,h=(await c(n)).size;if(h>0xc800000)throw Error(`The source archive is ${h} bytes, over the 209715200 byte limit. Remove large files from the project and deploy again.`);if(!await j(l))throw Error(`The folder ${l} is not empty, and extracted sources must not mix with existing files. Extract into a new or empty folder.`);let m=g(),v=new AbortController,x=w(r(n),u(),(a=0,new d({transform(e,r,t){(a+=e.length)>0x40000000?t(new T("The source archive extracts to more than 1073741824 bytes. Remove large files from the project and deploy again.")):t(null,e)}})),m).catch(e=>{o??=e,v.abort()}),$=[],R=0,z=0;try{for await(let e of m){let{type:r}=e.header,o=e.header.name.replace(/^(\.\/)+/,""),a=JSON.stringify(o);if("directory"===r){e.resume();continue}if((z+=1)>1e5)throw new T("The source archive has more than 100000 files. Remove generated or unused files from the project and deploy again.");if(!b(o))throw new T(`The source archive contains ${a}, which is not a plain relative path inside the project. Pack the project with phoenix deploy.`);if("file"!==r)throw new T(`The source archive contains ${a}, which is a ${r??"special file"}. Builds accept only regular files; replace it with a regular file and deploy again.`);if(!y(o)){$.push(o),e.resume();continue}let n=f(l,...o.split("/"));try{await i(p(n),{recursive:!0}),await w(e,t(n,{flags:"wx"}),{signal:v.signal})}catch(e){if(E(e,"EEXIST","ENOTDIR","EISDIR"))throw new T(`The source archive contains ${a}, which repeats or collides with an earlier entry, so its content is ambiguous. Pack the project with phoenix deploy.`);throw e}R+=1}if(await x,void 0!==o)throw o}catch(t){let e=t instanceof T?t:o??t;if(m.destroy(),await x,await s(l,{recursive:!0,force:!0}),e instanceof T)throw e;let r=e instanceof Error?e.message:String(e);throw Error(`The source archive could not be read: ${r}. It is truncated or not a gzip tarball; pack the project with phoenix deploy.`)}return{fileCount:R,skipped:$}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { isInsideGitRepository } from './is-inside-git-repository.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{isInsideGitRepository}from"./is-inside-git-repository.js";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a folder is inside a git work tree: the folder or one of its parents, up to the file-system root, holds a
|
|
3
|
+
* `.git` entry. The entry is a directory in a plain checkout and a file in a linked worktree or a submodule; both
|
|
4
|
+
* count. Only the file system is read, so the answer does not depend on git being installed.
|
|
5
|
+
*/
|
|
6
|
+
export declare const isInsideGitRepository: (folder: string) => boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{existsSync as t,realpathSync as r}from"fs";import{dirname as e,join as i,resolve as o}from"path";export const isInsideGitRepository=f=>{let n=(t=>{let e=o(t);try{return r(e)}catch{return e}})(f);for(;;){if(t(i(n,".git")))return!0;let r=e(n);if(r===n)return!1;n=r}};
|
|
@@ -4,6 +4,7 @@ export { formatEnvContent, formatEnvLine } from './env-file.js';
|
|
|
4
4
|
export { parseChangelog, getLatestVersion, getVersion, paginateVersions, getVersionNumbers, type ChangelogVersion, type PaginatedVersions, } from './changelog-parser.js';
|
|
5
5
|
export { createDirectoryFromYaml, exists, scanFolderForFiles, syncChangedFiles, syncExistingFolders, validateFolders, writeFileIfNotExists, writeFilesIfNotExists, writeRawFiles, } from './file-system.js';
|
|
6
6
|
export { FileLogger } from './file-logger.js';
|
|
7
|
+
export { isInsideGitRepository } from './git/index.js';
|
|
7
8
|
export { type Logger, type CreateLoggerOptions, createLogger } from './logger.js';
|
|
8
9
|
export { addWorkspaceOverrides, ensureWorkspaceInstallSettings, getLocalOverrides, getSdkPackages, getWorkspaceDir, hasLocalOverrides, readPackageJson, removeWorkspaceOverrides, } from './package-info.js';
|
|
9
10
|
export { toPascalCase } from './pascal-case.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{askQuestion}from"./ask-question.js";export{checkBundleSizeBudgets}from"./check-bundle-size-budgets.js";export{formatEnvContent,formatEnvLine}from"./env-file.js";export{parseChangelog,getLatestVersion,getVersion,paginateVersions,getVersionNumbers}from"./changelog-parser.js";export{createDirectoryFromYaml,exists,scanFolderForFiles,syncChangedFiles,syncExistingFolders,validateFolders,writeFileIfNotExists,writeFilesIfNotExists,writeRawFiles}from"./file-system.js";export{FileLogger}from"./file-logger.js";export{createLogger}from"./logger.js";export{addWorkspaceOverrides,ensureWorkspaceInstallSettings,getLocalOverrides,getSdkPackages,getWorkspaceDir,hasLocalOverrides,readPackageJson,removeWorkspaceOverrides}from"./package-info.js";export{toPascalCase}from"./pascal-case.js";export{readGitCommit}from"./read-git-commit.js";export{runCommand}from"./run-command.js";export{uploadFilesWithPresignedUrls,readUploadLinks}from"./upload-utils.js";
|
|
1
|
+
export{askQuestion}from"./ask-question.js";export{checkBundleSizeBudgets}from"./check-bundle-size-budgets.js";export{formatEnvContent,formatEnvLine}from"./env-file.js";export{parseChangelog,getLatestVersion,getVersion,paginateVersions,getVersionNumbers}from"./changelog-parser.js";export{createDirectoryFromYaml,exists,scanFolderForFiles,syncChangedFiles,syncExistingFolders,validateFolders,writeFileIfNotExists,writeFilesIfNotExists,writeRawFiles}from"./file-system.js";export{FileLogger}from"./file-logger.js";export{isInsideGitRepository}from"./git/index.js";export{createLogger}from"./logger.js";export{addWorkspaceOverrides,ensureWorkspaceInstallSettings,getLocalOverrides,getSdkPackages,getWorkspaceDir,hasLocalOverrides,readPackageJson,removeWorkspaceOverrides}from"./package-info.js";export{toPascalCase}from"./pascal-case.js";export{readGitCommit}from"./read-git-commit.js";export{runCommand}from"./run-command.js";export{uploadFilesWithPresignedUrls,readUploadLinks}from"./upload-utils.js";
|
|
@@ -12,12 +12,14 @@ export declare const useConfiguratorRawAccessService: () => AccessService | null
|
|
|
12
12
|
export declare const useAdminRawAccessService: () => AccessService | null;
|
|
13
13
|
export declare const useConfiguratorRawAccessInfo: () => {
|
|
14
14
|
raw: string;
|
|
15
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
15
16
|
viewMode: boolean;
|
|
16
17
|
revisionId: string | undefined;
|
|
17
18
|
configurationId: string;
|
|
18
19
|
} | null;
|
|
19
20
|
export declare const useAdminRawAccessInfo: () => {
|
|
20
21
|
raw: string;
|
|
22
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
21
23
|
viewMode: boolean;
|
|
22
24
|
revisionId: string | undefined;
|
|
23
25
|
configurationId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{memoOnce as e}from"@salsita-ai/common/utils";import{createDomainRuntime as
|
|
1
|
+
import{memoOnce as e}from"@salsita-ai/common/utils";import{AccessLevel as t}from"@salsita-ai/contracts/api";import{createDomainRuntime as o,createMockDomainRuntimeServices as n,createMockSessionContext as s}from"#package/domain";import{createCommonServicesSelectors as i}from"../common-services/index.js";import{createDomainApplicationContextSelectors as a}from"../domain-application-context/index.js";import{createIntegrationActions as r,createIntegrationSelectors as c,initializeIntegration as m}from"../integration/index.js";import{createRoutingActions as d,createRoutingSelectors as p,initializeRouting as l}from"../routing/index.js";import{SessionService as S,createSessionRuntimeActions as g,createSessionRuntimeSelectors as v,initializeSessionRuntime as u}from"../session/index.js";import{createMockWebComponentApi as f}from"../web-component/index.js";export const createMockApplicationRuntime=(C,x)=>{var b;let w,y,A,D,k,E,I,R,h,j,O,T,L,F,M,{sessionData:U,mode:V,role:z}=x,q=n(),B=(b={webComponentOptions:x.webComponentOptions??C.mount.options,webComponentApi:x.webComponentApi??f()},A=u(),D=o({config:C,services:q,getExtensionSystems:e=>M[e].getInitializableSystems()}),k=new Set,E=()=>{k.forEach(e=>{e()})},w=m({actions:I=r({setIntegration:e=>{w=e(w),E()}})}),R=c({getState:()=>({integration:w})}),h=d({setRouting:e=>{y=e(y),E()}}),y=l(),j=p({getState:()=>({...D.getState(),routing:y}),actions:h,accessActions:D.actions.access,loadedDataActions:D.actions.loadedData,domainServicesSelectors:D.selectors.domainServices,overridesSelectors:D.selectors.overrides}),O=i({getState:()=>({...D.getState(),session:A}),environmentSelectors:D.selectors.environment,specSelectors:D.selectors.spec,accessSelectors:D.selectors.access,domainServicesSelectors:D.selectors.domainServices,webComponentOptions:b.webComponentOptions,webComponentApi:b.webComponentApi,getSessionService:()=>F(),routingSelectors:j}),T=g({setSessionRuntime:e=>{A=e(A),E()}}),L=v({getState:()=>({...D.getState(),session:A}),sessionContextSelectors:D.selectors.sessionContext}),F=e(()=>new S({getLogger:()=>D.selectors.domainServices.getLogger(),getAnalyticsService:()=>D.selectors.domainServices.getAnalyticsService(),getUnauthenticatedClient:O.getUnauthenticatedClient,environmentSelectors:D.selectors.environment,sessionActions:T,setSessionContext:D.actions.sessionContext.setSessionContext,sessionSelectors:L,specSelectors:D.selectors.spec})),M={configurator:a({applicationType:"configurator",commonServicesSelectors:O,domainServicesSelectors:D.selectors.domainServices,domainContextSelectors:D.selectors.domainContext.configurator,getApplicationRuntimeExtensions:()=>[]}),admin:a({applicationType:"admin",commonServicesSelectors:O,domainServicesSelectors:D.selectors.domainServices,domainContextSelectors:D.selectors.domainContext.admin,getApplicationRuntimeExtensions:()=>[]})},{subscribe:e=>{k.add(e);let t=D.subscribe(e);return()=>{k.delete(e),t()}},getState:()=>({...D.getState(),integration:w,routing:y,session:A}),selectors:{...D.selectors,commonServices:O,integration:R,routing:j,session:L,domainApplicationContext:M},actions:{...D.actions,integration:I,routing:h,session:T}}),G=B.getState().spec;return B.actions.spec.updateSpec({...G,configurator:{...G.configurator,createTransformers:e=>x.transformers.map(t=>t.transformer.register(e,t.priority??1/0))}}),B.actions.sessionContext.setSessionContext(s(z,U)),B.actions.access.setConfiguratorAccessInfo({raw:"mock-access-token",access:"read"===V?t.Read:t.Owner,viewMode:"read"===V,revisionId:void 0,configurationId:"mock"}),B.actions.domainData.setDomainData({publishedData:x.publishedData,frontendData:x.frontendData,backendData:x.backendData}),B.actions.loadedData.completeConfiguratorLoad({initialRevisionId:"mock-revision",initialEntities:x.entities,modelVersion:C.domain.domainFactory.modelVersion,rootEntityType:x.rootEntityType,schemaIdentity:C.domain.domainFactory}),B};
|
|
@@ -3,6 +3,7 @@ export declare const getAccessTokenFromLocalStorage: (configurationId: string) =
|
|
|
3
3
|
export declare const removeAccessTokenFromLocalStorage: (configurationId: string) => void;
|
|
4
4
|
export declare const getAccessInfo: (configurationId: string, accessToken?: string) => {
|
|
5
5
|
raw: string;
|
|
6
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
6
7
|
viewMode: boolean;
|
|
7
8
|
revisionId: string | undefined;
|
|
8
9
|
configurationId: string;
|
|
@@ -36,6 +36,7 @@ interface Props<State extends ApplicationRuntimeState, CONFIGURATOR_EXTENSIONS e
|
|
|
36
36
|
* `createDomainRuntimeSlices`, which this composes.
|
|
37
37
|
*/
|
|
38
38
|
export declare function createApplicationRuntimeSlices<State extends ApplicationRuntimeState, CONFIGURATOR_EXTENSIONS extends readonly AnyApplicationRuntimeExtension[]>(props: Props<State, CONFIGURATOR_EXTENSIONS>): {
|
|
39
|
+
getState: () => State;
|
|
39
40
|
initialize: () => {
|
|
40
41
|
spec: import("#package/domain").ApplicationSpec;
|
|
41
42
|
overrides: import("#package/domain").ApplicationOverrides;
|
|
@@ -278,24 +279,28 @@ export declare function createApplicationRuntimeSlices<State extends Application
|
|
|
278
279
|
access: {
|
|
279
280
|
selectConfiguratorRawAccessInfo: import("@salsita-ai/common/utils").Selector<import("#package/domain").AccessSelectorState, {
|
|
280
281
|
raw: string;
|
|
282
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
281
283
|
viewMode: boolean;
|
|
282
284
|
revisionId: string | undefined;
|
|
283
285
|
configurationId: string;
|
|
284
286
|
} | null>;
|
|
285
287
|
selectAdminRawAccessInfo: import("@salsita-ai/common/utils").Selector<import("#package/domain").AccessSelectorState, {
|
|
286
288
|
raw: string;
|
|
289
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
287
290
|
viewMode: boolean;
|
|
288
291
|
revisionId: string | undefined;
|
|
289
292
|
configurationId: string;
|
|
290
293
|
} | null>;
|
|
291
294
|
selectConfiguratorAccessInfo: import("@salsita-ai/common/utils").Selector<import("#package/domain").AccessSelectorState, {
|
|
292
295
|
raw: string;
|
|
296
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
293
297
|
viewMode: boolean;
|
|
294
298
|
revisionId: string | undefined;
|
|
295
299
|
configurationId: string;
|
|
296
300
|
}>;
|
|
297
301
|
selectAdminAccessInfo: import("@salsita-ai/common/utils").Selector<import("#package/domain").AccessSelectorState, {
|
|
298
302
|
raw: string;
|
|
303
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
299
304
|
viewMode: boolean;
|
|
300
305
|
revisionId: string | undefined;
|
|
301
306
|
configurationId: string;
|
|
@@ -308,24 +313,28 @@ export declare function createApplicationRuntimeSlices<State extends Application
|
|
|
308
313
|
selectAdminConfigurationId: import("@salsita-ai/common/utils").Selector<import("#package/domain").AccessSelectorState, string>;
|
|
309
314
|
getConfiguratorRawAccessInfo: () => {
|
|
310
315
|
raw: string;
|
|
316
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
311
317
|
viewMode: boolean;
|
|
312
318
|
revisionId: string | undefined;
|
|
313
319
|
configurationId: string;
|
|
314
320
|
} | null;
|
|
315
321
|
getAdminRawAccessInfo: () => {
|
|
316
322
|
raw: string;
|
|
323
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
317
324
|
viewMode: boolean;
|
|
318
325
|
revisionId: string | undefined;
|
|
319
326
|
configurationId: string;
|
|
320
327
|
} | null;
|
|
321
328
|
getConfiguratorAccessInfo: () => {
|
|
322
329
|
raw: string;
|
|
330
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
323
331
|
viewMode: boolean;
|
|
324
332
|
revisionId: string | undefined;
|
|
325
333
|
configurationId: string;
|
|
326
334
|
};
|
|
327
335
|
getAdminAccessInfo: () => {
|
|
328
336
|
raw: string;
|
|
337
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
329
338
|
viewMode: boolean;
|
|
330
339
|
revisionId: string | undefined;
|
|
331
340
|
configurationId: string;
|
|
@@ -371,9 +380,9 @@ export declare function createApplicationRuntimeSlices<State extends Application
|
|
|
371
380
|
selectIsViewMode: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, boolean>;
|
|
372
381
|
selectInitializationState: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, import("#package/domain").DomainContextInitializationState>;
|
|
373
382
|
selectComponentOptics: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, readonly import("#package/domain").AnyDomainComponentOptic[]>;
|
|
374
|
-
selectComponentReaderIndexes: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, import("#package/domain").ComponentReaderIndexes
|
|
383
|
+
selectComponentReaderIndexes: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, import("#package/domain").ComponentReaderIndexes>;
|
|
375
384
|
selectStoreRuntimeDependencies: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, {
|
|
376
|
-
componentReaderIndexes: import("#package/domain").ComponentReaderIndexes
|
|
385
|
+
componentReaderIndexes: import("#package/domain").ComponentReaderIndexes;
|
|
377
386
|
domainExpressions: import("#package/domain").AnyExpressions;
|
|
378
387
|
allowedRootEntityTypes: import("#package/domain").AnyAllowedRootEntityTypes;
|
|
379
388
|
}>;
|
|
@@ -413,9 +422,9 @@ export declare function createApplicationRuntimeSlices<State extends Application
|
|
|
413
422
|
getMigrate: () => import("#package/domain").MigrateFunction<import("#package/domain").DomainEntity<string>>;
|
|
414
423
|
getActiveMode: () => import("#package/domain").DomainMode;
|
|
415
424
|
getIsInitialized: () => boolean;
|
|
416
|
-
getComponentReaderIndexes: () => import("#package/domain").ComponentReaderIndexes
|
|
425
|
+
getComponentReaderIndexes: () => import("#package/domain").ComponentReaderIndexes;
|
|
417
426
|
getStoreRuntimeDependencies: () => {
|
|
418
|
-
componentReaderIndexes: import("#package/domain").ComponentReaderIndexes
|
|
427
|
+
componentReaderIndexes: import("#package/domain").ComponentReaderIndexes;
|
|
419
428
|
domainExpressions: import("#package/domain").AnyExpressions;
|
|
420
429
|
allowedRootEntityTypes: import("#package/domain").AnyAllowedRootEntityTypes;
|
|
421
430
|
};
|
|
@@ -480,9 +489,9 @@ export declare function createApplicationRuntimeSlices<State extends Application
|
|
|
480
489
|
selectIsViewMode: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, boolean>;
|
|
481
490
|
selectInitializationState: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, import("#package/domain").DomainContextInitializationState>;
|
|
482
491
|
selectComponentOptics: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, readonly import("#package/domain").AnyDomainComponentOptic[]>;
|
|
483
|
-
selectComponentReaderIndexes: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, import("#package/domain").ComponentReaderIndexes
|
|
492
|
+
selectComponentReaderIndexes: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, import("#package/domain").ComponentReaderIndexes>;
|
|
484
493
|
selectStoreRuntimeDependencies: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, {
|
|
485
|
-
componentReaderIndexes: import("#package/domain").ComponentReaderIndexes
|
|
494
|
+
componentReaderIndexes: import("#package/domain").ComponentReaderIndexes;
|
|
486
495
|
domainExpressions: import("#package/domain").AnyExpressions;
|
|
487
496
|
allowedRootEntityTypes: import("#package/domain").AnyAllowedRootEntityTypes;
|
|
488
497
|
}>;
|
|
@@ -522,9 +531,9 @@ export declare function createApplicationRuntimeSlices<State extends Application
|
|
|
522
531
|
getMigrate: () => import("#package/domain").MigrateFunction<import("#package/domain").DomainEntity<string>>;
|
|
523
532
|
getActiveMode: () => import("#package/domain").DomainMode;
|
|
524
533
|
getIsInitialized: () => boolean;
|
|
525
|
-
getComponentReaderIndexes: () => import("#package/domain").ComponentReaderIndexes
|
|
534
|
+
getComponentReaderIndexes: () => import("#package/domain").ComponentReaderIndexes;
|
|
526
535
|
getStoreRuntimeDependencies: () => {
|
|
527
|
-
componentReaderIndexes: import("#package/domain").ComponentReaderIndexes
|
|
536
|
+
componentReaderIndexes: import("#package/domain").ComponentReaderIndexes;
|
|
528
537
|
domainExpressions: import("#package/domain").AnyExpressions;
|
|
529
538
|
allowedRootEntityTypes: import("#package/domain").AnyAllowedRootEntityTypes;
|
|
530
539
|
};
|
|
@@ -938,24 +947,28 @@ declare const createApplicationRuntimeImpl: <EXTENSIONS extends readonly AnyAppl
|
|
|
938
947
|
access: {
|
|
939
948
|
selectConfiguratorRawAccessInfo: import("@salsita-ai/common/utils").Selector<import("#package/domain").AccessSelectorState, {
|
|
940
949
|
raw: string;
|
|
950
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
941
951
|
viewMode: boolean;
|
|
942
952
|
revisionId: string | undefined;
|
|
943
953
|
configurationId: string;
|
|
944
954
|
} | null>;
|
|
945
955
|
selectAdminRawAccessInfo: import("@salsita-ai/common/utils").Selector<import("#package/domain").AccessSelectorState, {
|
|
946
956
|
raw: string;
|
|
957
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
947
958
|
viewMode: boolean;
|
|
948
959
|
revisionId: string | undefined;
|
|
949
960
|
configurationId: string;
|
|
950
961
|
} | null>;
|
|
951
962
|
selectConfiguratorAccessInfo: import("@salsita-ai/common/utils").Selector<import("#package/domain").AccessSelectorState, {
|
|
952
963
|
raw: string;
|
|
964
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
953
965
|
viewMode: boolean;
|
|
954
966
|
revisionId: string | undefined;
|
|
955
967
|
configurationId: string;
|
|
956
968
|
}>;
|
|
957
969
|
selectAdminAccessInfo: import("@salsita-ai/common/utils").Selector<import("#package/domain").AccessSelectorState, {
|
|
958
970
|
raw: string;
|
|
971
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
959
972
|
viewMode: boolean;
|
|
960
973
|
revisionId: string | undefined;
|
|
961
974
|
configurationId: string;
|
|
@@ -968,24 +981,28 @@ declare const createApplicationRuntimeImpl: <EXTENSIONS extends readonly AnyAppl
|
|
|
968
981
|
selectAdminConfigurationId: import("@salsita-ai/common/utils").Selector<import("#package/domain").AccessSelectorState, string>;
|
|
969
982
|
getConfiguratorRawAccessInfo: () => {
|
|
970
983
|
raw: string;
|
|
984
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
971
985
|
viewMode: boolean;
|
|
972
986
|
revisionId: string | undefined;
|
|
973
987
|
configurationId: string;
|
|
974
988
|
} | null;
|
|
975
989
|
getAdminRawAccessInfo: () => {
|
|
976
990
|
raw: string;
|
|
991
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
977
992
|
viewMode: boolean;
|
|
978
993
|
revisionId: string | undefined;
|
|
979
994
|
configurationId: string;
|
|
980
995
|
} | null;
|
|
981
996
|
getConfiguratorAccessInfo: () => {
|
|
982
997
|
raw: string;
|
|
998
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
983
999
|
viewMode: boolean;
|
|
984
1000
|
revisionId: string | undefined;
|
|
985
1001
|
configurationId: string;
|
|
986
1002
|
};
|
|
987
1003
|
getAdminAccessInfo: () => {
|
|
988
1004
|
raw: string;
|
|
1005
|
+
access: import("@salsita-ai/contracts/api").AccessLevel;
|
|
989
1006
|
viewMode: boolean;
|
|
990
1007
|
revisionId: string | undefined;
|
|
991
1008
|
configurationId: string;
|
|
@@ -1031,9 +1048,9 @@ declare const createApplicationRuntimeImpl: <EXTENSIONS extends readonly AnyAppl
|
|
|
1031
1048
|
selectIsViewMode: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, boolean>;
|
|
1032
1049
|
selectInitializationState: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, import("#package/domain").DomainContextInitializationState>;
|
|
1033
1050
|
selectComponentOptics: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, readonly import("#package/domain").AnyDomainComponentOptic[]>;
|
|
1034
|
-
selectComponentReaderIndexes: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, import("#package/domain").ComponentReaderIndexes
|
|
1051
|
+
selectComponentReaderIndexes: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, import("#package/domain").ComponentReaderIndexes>;
|
|
1035
1052
|
selectStoreRuntimeDependencies: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, {
|
|
1036
|
-
componentReaderIndexes: import("#package/domain").ComponentReaderIndexes
|
|
1053
|
+
componentReaderIndexes: import("#package/domain").ComponentReaderIndexes;
|
|
1037
1054
|
domainExpressions: import("#package/domain").AnyExpressions;
|
|
1038
1055
|
allowedRootEntityTypes: import("#package/domain").AnyAllowedRootEntityTypes;
|
|
1039
1056
|
}>;
|
|
@@ -1073,9 +1090,9 @@ declare const createApplicationRuntimeImpl: <EXTENSIONS extends readonly AnyAppl
|
|
|
1073
1090
|
getMigrate: () => import("#package/domain").MigrateFunction<import("#package/domain").DomainEntity<string>>;
|
|
1074
1091
|
getActiveMode: () => import("#package/domain").DomainMode;
|
|
1075
1092
|
getIsInitialized: () => boolean;
|
|
1076
|
-
getComponentReaderIndexes: () => import("#package/domain").ComponentReaderIndexes
|
|
1093
|
+
getComponentReaderIndexes: () => import("#package/domain").ComponentReaderIndexes;
|
|
1077
1094
|
getStoreRuntimeDependencies: () => {
|
|
1078
|
-
componentReaderIndexes: import("#package/domain").ComponentReaderIndexes
|
|
1095
|
+
componentReaderIndexes: import("#package/domain").ComponentReaderIndexes;
|
|
1079
1096
|
domainExpressions: import("#package/domain").AnyExpressions;
|
|
1080
1097
|
allowedRootEntityTypes: import("#package/domain").AnyAllowedRootEntityTypes;
|
|
1081
1098
|
};
|
|
@@ -1140,9 +1157,9 @@ declare const createApplicationRuntimeImpl: <EXTENSIONS extends readonly AnyAppl
|
|
|
1140
1157
|
selectIsViewMode: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, boolean>;
|
|
1141
1158
|
selectInitializationState: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, import("#package/domain").DomainContextInitializationState>;
|
|
1142
1159
|
selectComponentOptics: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, readonly import("#package/domain").AnyDomainComponentOptic[]>;
|
|
1143
|
-
selectComponentReaderIndexes: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, import("#package/domain").ComponentReaderIndexes
|
|
1160
|
+
selectComponentReaderIndexes: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, import("#package/domain").ComponentReaderIndexes>;
|
|
1144
1161
|
selectStoreRuntimeDependencies: import("@salsita-ai/common/utils").Selector<import("#package/domain").DomainContextSelectorState, {
|
|
1145
|
-
componentReaderIndexes: import("#package/domain").ComponentReaderIndexes
|
|
1162
|
+
componentReaderIndexes: import("#package/domain").ComponentReaderIndexes;
|
|
1146
1163
|
domainExpressions: import("#package/domain").AnyExpressions;
|
|
1147
1164
|
allowedRootEntityTypes: import("#package/domain").AnyAllowedRootEntityTypes;
|
|
1148
1165
|
}>;
|
|
@@ -1182,9 +1199,9 @@ declare const createApplicationRuntimeImpl: <EXTENSIONS extends readonly AnyAppl
|
|
|
1182
1199
|
getMigrate: () => import("#package/domain").MigrateFunction<import("#package/domain").DomainEntity<string>>;
|
|
1183
1200
|
getActiveMode: () => import("#package/domain").DomainMode;
|
|
1184
1201
|
getIsInitialized: () => boolean;
|
|
1185
|
-
getComponentReaderIndexes: () => import("#package/domain").ComponentReaderIndexes
|
|
1202
|
+
getComponentReaderIndexes: () => import("#package/domain").ComponentReaderIndexes;
|
|
1186
1203
|
getStoreRuntimeDependencies: () => {
|
|
1187
|
-
componentReaderIndexes: import("#package/domain").ComponentReaderIndexes
|
|
1204
|
+
componentReaderIndexes: import("#package/domain").ComponentReaderIndexes;
|
|
1188
1205
|
domainExpressions: import("#package/domain").AnyExpressions;
|
|
1189
1206
|
allowedRootEntityTypes: import("#package/domain").AnyAllowedRootEntityTypes;
|
|
1190
1207
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{BehaviorSubject as e}from"rxjs";import{memoOnce as t}from"@salsita-ai/common/utils";import{createDomainRuntimeSlices as i,resolveIsDev as n}from"#package/domain";import{initializeAnalyticsService as o}from"../common-services/analytics/analytics-service.js";import{initializeI18n as s,initializeLogger as r}from"../common-services/initialize.js";import{createCommonServicesSelectors as a}from"../common-services/selectors.js";import{createDomainApplicationContextSelectors as c}from"../domain-application-context/index.js";import{createIntegrationActions as m,createIntegrationSelectors as l,initializeIntegration as p}from"../integration/index.js";import{createRoutingActions as u,createRoutingSelectors as d,initializeRouting as g}from"../routing/index.js";import{SessionService as S,createSessionRuntimeActions as v,createSessionRuntimeSelectors as x,initializeSessionRuntime as f}from"../session/index.js";import{registerGodModeGlobal as C}from"./god-mode.js";export function createApplicationRuntimeSlices(e){let{config:y,bootConfig:A,getSubject:b,getConfiguratorExtensions:j}=e,w=n(y),R=r(y,w),I={analyticsService:o(y,R,w),i18n:s(y),logger:R},{initialize:E,selectors:h,actions:z}=i({config:y,services:I,getSubject:b,getExtensionSystems:e=>J[e].getInitializableSystems()}),D=E(),T=m({setIntegration:e=>{let t=b(),i=e(t.value.integration);t.next({...t.value,integration:i})}}),L=l({getState:()=>b().value}),O=p({actions:T}),U=u({setRouting:e=>{let t=b(),i=e(t.value.routing);t.next({...t.value,routing:i})}}),k=d({getState:()=>b().value,actions:U,accessActions:z.access,loadedDataActions:z.loadedData,domainServicesSelectors:h.domainServices,overridesSelectors:h.overrides}),G=g(),$=a({getState:()=>b().value,environmentSelectors:h.environment,specSelectors:h.spec,accessSelectors:h.access,domainServicesSelectors:h.domainServices,webComponentOptions:A.webComponentOptions,webComponentApi:A.webComponentApi,getSessionService:()=>H(),routingSelectors:k}),q=v({setSessionRuntime:e=>{let t=b(),i=e(t.value.session);t.next({...t.value,session:i})}}),B=x({getState:()=>b().value,sessionContextSelectors:h.sessionContext}),F=f(),H=t(()=>new S({getLogger:()=>h.domainServices.getLogger(),getAnalyticsService:()=>h.domainServices.getAnalyticsService(),getUnauthenticatedClient:$.getUnauthenticatedClient,environmentSelectors:h.environment,sessionActions:q,setSessionContext:z.sessionContext.setSessionContext,sessionSelectors:B,specSelectors:h.spec})),J={configurator:c({applicationType:"configurator",commonServicesSelectors:$,domainServicesSelectors:h.domainServices,domainContextSelectors:h.domainContext.configurator,getApplicationRuntimeExtensions:j}),admin:c({applicationType:"admin",commonServicesSelectors:$,domainServicesSelectors:h.domainServices,domainContextSelectors:h.domainContext.admin,getApplicationRuntimeExtensions:()=>[]})};return C({environmentActions:z.environment}),R.info(`Configurator Application loaded with deployment ID: ${y.deploymentId}!`),R.appendToGlobalContext({deploymentId:y.deploymentId}),{initialize:()=>({...D,integration:O,routing:G,session:F}),selectors:{...h,commonServices:$,integration:L,routing:k,session:B,domainApplicationContext:J},actions:{...z,integration:T,routing:U,session:q}}}export function createApplicationRuntime(t,i,n){return((t,i,n)=>{let o=null,s=null,r=()=>{if(!o)throw Error("Subject not yet initialized!");return o},{initialize:a,...c}=createApplicationRuntimeSlices({config:t,bootConfig:i,getSubject:r,getConfiguratorExtensions:()=>s});return s=n?n(c):[],c.selectors.domainApplicationContext.configurator.getSystems(),o=new e(a()),{...c,getState:()=>r().value,subscribe:e=>{let t=r().subscribe(()=>e());return()=>t.unsubscribe()}}})(t,i,n)}
|
|
1
|
+
import{BehaviorSubject as e}from"rxjs";import{memoOnce as t}from"@salsita-ai/common/utils";import{createDomainRuntimeSlices as i,resolveIsDev as n}from"#package/domain";import{initializeAnalyticsService as o}from"../common-services/analytics/analytics-service.js";import{initializeI18n as s,initializeLogger as r}from"../common-services/initialize.js";import{createCommonServicesSelectors as a}from"../common-services/selectors.js";import{createDomainApplicationContextSelectors as c}from"../domain-application-context/index.js";import{createIntegrationActions as m,createIntegrationSelectors as l,initializeIntegration as p}from"../integration/index.js";import{createRoutingActions as u,createRoutingSelectors as d,initializeRouting as g}from"../routing/index.js";import{SessionService as S,createSessionRuntimeActions as v,createSessionRuntimeSelectors as x,initializeSessionRuntime as f}from"../session/index.js";import{registerGodModeGlobal as C}from"./god-mode.js";export function createApplicationRuntimeSlices(e){let{config:y,bootConfig:A,getSubject:b,getConfiguratorExtensions:j}=e,w=n(y),R=r(y,w),I={analyticsService:o(y,R,w),i18n:s(y),logger:R},{initialize:E,selectors:h,actions:z}=i({config:y,services:I,getSubject:b,getExtensionSystems:e=>J[e].getInitializableSystems()}),D=E(),T=m({setIntegration:e=>{let t=b(),i=e(t.value.integration);t.next({...t.value,integration:i})}}),L=l({getState:()=>b().value}),O=p({actions:T}),U=u({setRouting:e=>{let t=b(),i=e(t.value.routing);t.next({...t.value,routing:i})}}),k=d({getState:()=>b().value,actions:U,accessActions:z.access,loadedDataActions:z.loadedData,domainServicesSelectors:h.domainServices,overridesSelectors:h.overrides}),G=g(),$=a({getState:()=>b().value,environmentSelectors:h.environment,specSelectors:h.spec,accessSelectors:h.access,domainServicesSelectors:h.domainServices,webComponentOptions:A.webComponentOptions,webComponentApi:A.webComponentApi,getSessionService:()=>H(),routingSelectors:k}),q=v({setSessionRuntime:e=>{let t=b(),i=e(t.value.session);t.next({...t.value,session:i})}}),B=x({getState:()=>b().value,sessionContextSelectors:h.sessionContext}),F=f(),H=t(()=>new S({getLogger:()=>h.domainServices.getLogger(),getAnalyticsService:()=>h.domainServices.getAnalyticsService(),getUnauthenticatedClient:$.getUnauthenticatedClient,environmentSelectors:h.environment,sessionActions:q,setSessionContext:z.sessionContext.setSessionContext,sessionSelectors:B,specSelectors:h.spec})),J={configurator:c({applicationType:"configurator",commonServicesSelectors:$,domainServicesSelectors:h.domainServices,domainContextSelectors:h.domainContext.configurator,getApplicationRuntimeExtensions:j}),admin:c({applicationType:"admin",commonServicesSelectors:$,domainServicesSelectors:h.domainServices,domainContextSelectors:h.domainContext.admin,getApplicationRuntimeExtensions:()=>[]})};return C({environmentActions:z.environment}),R.info(`Configurator Application loaded with deployment ID: ${y.deploymentId}!`),R.appendToGlobalContext({deploymentId:y.deploymentId}),{getState:()=>b().value,initialize:()=>({...D,integration:O,routing:G,session:F}),selectors:{...h,commonServices:$,integration:L,routing:k,session:B,domainApplicationContext:J},actions:{...z,integration:T,routing:U,session:q}}}export function createApplicationRuntime(t,i,n){return((t,i,n)=>{let o=null,s=null,r=()=>{if(!o)throw Error("Subject not yet initialized!");return o},{initialize:a,...c}=createApplicationRuntimeSlices({config:t,bootConfig:i,getSubject:r,getConfiguratorExtensions:()=>s});return s=n?n(c):[],c.selectors.domainApplicationContext.configurator.getSystems(),o=new e(a()),{...c,getState:()=>r().value,subscribe:e=>{let t=r().subscribe(()=>e());return()=>t.unsubscribe()}}})(t,i,n)}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { $DomainEntity, DomainEntity, EntityViolation, ViolationTypesOf$Entity } from '#package/domain';
|
|
2
|
+
/**
|
|
3
|
+
* A message for the user about a change to the configuration, with its text resolved to the current language.
|
|
4
|
+
* Typed per project like `StateValidationResult`, so a layout can narrow on `violation.type`.
|
|
5
|
+
* - `violation`: a change was rejected because it breaks an invariant. There is one message per violation of the
|
|
6
|
+
* rejected state, including notices and warnings that were already present; `violation.severity` tells them
|
|
7
|
+
* apart. `text` is the violation's message, or its type when it has none; `entityId` names the entity.
|
|
8
|
+
* - `sideEffect`: a committed change carried a hint, for example from a transformer that adjusted another field.
|
|
9
|
+
* - `error`: an error was thrown while the changed state was validated; `text` is a generic message for the user.
|
|
10
|
+
*/
|
|
11
|
+
export type ConfiguratorMessage<ENTITIES extends DomainEntity<string> = DomainEntity<string>, VIOLATION_TYPE extends string = string> = ({
|
|
12
|
+
readonly kind: 'violation';
|
|
13
|
+
readonly text: string;
|
|
14
|
+
} & EntityViolation<ENTITIES, VIOLATION_TYPE>) | {
|
|
15
|
+
readonly kind: 'sideEffect';
|
|
16
|
+
readonly text: string;
|
|
17
|
+
} | {
|
|
18
|
+
readonly kind: 'error';
|
|
19
|
+
readonly error: Error;
|
|
20
|
+
readonly text: string;
|
|
21
|
+
};
|
|
22
|
+
export type UseConfiguratorMessages<ENTITIES extends DomainEntity<string> = DomainEntity<string>, $MAP extends Record<ENTITIES['type'], $DomainEntity<ENTITIES>> = Record<ENTITIES['type'], $DomainEntity<ENTITIES>>> = (onMessage: (message: ConfiguratorMessage<ENTITIES, ViolationTypesOf$Entity<$MAP[ENTITIES['type']]>>) => void) => void;
|
|
23
|
+
/**
|
|
24
|
+
* Calls `onMessage` once for every violation, side-effect hint and validation error: the violations of a rejected
|
|
25
|
+
* change, the hints of a committed change and an error thrown while a change was validated. Hints committed before the
|
|
26
|
+
* component mounted are not delivered; when the most recent change was rejected or threw, its messages are
|
|
27
|
+
* delivered again on mount, because the store keeps that emission. `onMessage` may be a new function on every
|
|
28
|
+
* render; the latest one is called.
|
|
29
|
+
*/
|
|
30
|
+
export declare const useConfiguratorMessages: (onMessage: (message: ConfiguratorMessage) => void) => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useSubscription as e}from"observable-hooks";import{useMemo as t}from"react";import{distinctUntilChanged as i,map as o,skip as r}from"rxjs";import{useResolveLocalizable as s}from"../../localizable/index.js";import{useDomain as a}from"./use-domain-context.js";let n={id:"sdk.messages.validation.uncaughtError.message",message:"Oops, something went wrong"};export const useConfiguratorMessages=m=>{let{storeSystem:l}=a(),d=s(),p=t(()=>l.stateSlices.potentiallyInvalid.pipe(o(e=>e.validity)),[l]),f=t(()=>l.stateSlices.committed.pipe(r(1),i(),o(e=>"updates"in e?e.updates.flatMap(e=>e.hint?[e.hint]:[]):[])),[l]);e(p,e=>{if(!e.valid){if("uncaught"===e.severity)return void m({kind:"error",error:e.error,text:d(n)});e.entityViolations.forEach(({entityId:e,violation:t})=>{m({kind:"violation",entityId:e,violation:t,text:d(t.message??t.type)})})}}),e(f,e=>{e.forEach(e=>{m({kind:"sideEffect",text:d(e)})})})};
|