@salsita-ai/sdk 0.50.0-develop.9ed52379e9 → 0.50.0-develop.a49722158a
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/standalone-app-files.d.ts +2 -2
- package/dist/application-spec/generate-application/code/standalone-app-files.js +1 -1
- package/dist/application-spec/generate-application/code/templates/configurator-config.js +6 -4
- 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 -2
- 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 +11 -4
- package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +2 -2
- package/dist/application-spec/generate-application/code/templates/webhook-index.d.ts +6 -1
- package/dist/application-spec/generate-application/code/templates/webhook-index.js +10 -1
- 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/categorize-files.d.ts +6 -0
- package/dist/application-spec/parse-application-files/categorize/categorize-files.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 +17 -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/common/index.d.ts +1 -0
- package/dist/configurator/common/index.js +1 -1
- package/dist/configurator/common/use-finalize-action.d.ts +27 -0
- package/dist/configurator/common/use-finalize-action.js +1 -0
- package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.d.ts +1 -1
- package/dist/configurator/pages/DefaultConfiguratorLayout.d.ts +2 -2
- package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
- package/dist/configurator/pages/configurator-layout-name.d.ts +2 -0
- package/dist/configurator/pages/configurator-layout-name.js +1 -0
- package/dist/configurator/pages/default-configurator-elements.d.ts +7 -0
- package/dist/configurator/pages/default-configurator-elements.js +1 -0
- package/dist/configurator/pages/index.d.ts +1 -0
- package/dist/configurator/pages/index.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 +1400 -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 +204 -82
- 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 +27 -28
- package/dist/docs/phoenix/project-structure.mdx +18 -10
- 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 +19 -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 +7 -3
- 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 +5 -2
- 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 +1 -2
- package/dist/domain/core/component/domain-component-optic.js +2 -2
- package/dist/domain/core/component/system-component-filter.d.ts +15 -2
- 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/state.d.ts +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/domain-runtime/spec/selectors.js +1 -1
- package/dist/domain/domain-runtime/spec/types.d.ts +2 -0
- 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 +7 -1
- package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/domain-index.js +15 -13
- package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +18 -16
- package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-configurator.js +14 -12
- package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +13 -11
- package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-configurator.js +13 -11
- package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
- package/dist/phoenix/commands/check.js +1 -1
- package/dist/phoenix/commands/deploy.js +1 -1
- package/dist/phoenix/commands/fix.js +1 -1
- package/dist/phoenix/commands/init.d.ts +4 -4
- package/dist/phoenix/commands/init.js +1 -1
- package/dist/phoenix/services/application-spec-project-watcher.js +3 -3
- 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/application-spec/generate-application/code/templates/webhook-implementation.d.ts +0 -1
- package/dist/application-spec/generate-application/code/templates/webhook-implementation.js +0 -7
- 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,7 +2,7 @@ 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
8
|
const migrate = createMigrateFunction(modelVersions, modelVersion, migrations)`:"",G=j?`
|
|
@@ -10,31 +10,31 @@ const adminMigrations = ${q}
|
|
|
10
10
|
|
|
11
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)?", createMigrateFunction":""} } from '@salsita-ai/sdk/domain'
|
|
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,8 +1,8 @@
|
|
|
1
|
-
import{fileHeader as e}from"./file-header.js";import{defaultEnvsCode as n,generateImports as i,generateModuleEntries as t,generateModuleList as o,generateThemeCode as a,generateTransformerMap as
|
|
1
|
+
import{fileHeader as e}from"./file-header.js";import{defaultEnvsCode as n,generateImports as i,generateModuleEntries as t,generateModuleList as o,generateThemeCode as a,generateTransformerMap as r,generateTransformerRegistration as m,generateTransformerTypeImports as s}from"./generator-shared.js";export const generateFrontendAdminFile=(p=[],d=[],c=[],l=[],f=[],$=[],g=[],u,h,A)=>{let C=i(p,"components"),F=o(t(p,"components")),S=i(d,"adminComponents"),w=o(t(d,"adminComponents")),j=i(f,"handlers"),E=o(t(f,"handlers")),P=i($,"elements"),I=i(g,"adminElements"),b=o([...t($,"elements"),...t(g,"adminElements")]),k=r(c,l),x=m(l),y=a(u,h),B=s(l.length>0),O=A?`
|
|
2
2
|
import { createAdminPagesFromSpec } from '@salsita-ai/sdk/admin'
|
|
3
|
-
import { $adminPagesSpec, $dataSpec } from './domain/application-types.js'`:"",
|
|
3
|
+
import { $adminPagesSpec, $dataSpec } from './domain/application-types.js'`:"",D=A?`
|
|
4
4
|
const { components: specAdminComponents, pages: specAdminPages } = createAdminPagesFromSpec($adminPagesSpec, $dataSpec)
|
|
5
|
-
`:"",
|
|
5
|
+
`:"",H=A?`[{ origin: '.phoenix/domain/application-types.ts', exports: specAdminComponents }, ...${w}]`:w;return`// prettier-ignore-file
|
|
6
6
|
|
|
7
7
|
${e}
|
|
8
8
|
${B?`${B}
|
|
@@ -11,27 +11,29 @@ import * as interfaceFile from './configurator-interface.js'
|
|
|
11
11
|
import * as adminInterfaceFile from './admin-interface.js'
|
|
12
12
|
|
|
13
13
|
import { mountStandaloneAdminApplication } from '@salsita-ai/sdk/application'
|
|
14
|
+
import { defaultConfiguratorElements } from '@salsita-ai/sdk/configurator'
|
|
14
15
|
|
|
15
16
|
import { configuratorBuilder } from './domain.js'${O}
|
|
16
|
-
${
|
|
17
|
-
${
|
|
18
|
-
${
|
|
19
|
-
${
|
|
20
|
-
${
|
|
21
|
-
${
|
|
22
|
-
${y.imports}`:""}${
|
|
23
|
-
${
|
|
17
|
+
${C?`
|
|
18
|
+
${C}`:""}${S?`
|
|
19
|
+
${S}`:""}${j?`
|
|
20
|
+
${j}`:""}${P?`
|
|
21
|
+
${P}`:""}${I?`
|
|
22
|
+
${I}`:""}${y.imports?`
|
|
23
|
+
${y.imports}`:""}${k}
|
|
24
|
+
${D}
|
|
24
25
|
let builder = configuratorBuilder
|
|
25
26
|
.withInterface(interfaceFile)
|
|
26
27
|
.withInterface(adminInterfaceFile)
|
|
27
|
-
.withComponentOptics(${
|
|
28
|
-
.withAdminComponentOptics(${
|
|
29
|
-
.withHandlers(${
|
|
30
|
-
.
|
|
28
|
+
.withComponentOptics(${F})
|
|
29
|
+
.withAdminComponentOptics(${H})
|
|
30
|
+
.withHandlers(${E})
|
|
31
|
+
.withDefaultElements(defaultConfiguratorElements)
|
|
32
|
+
.withElements(${b})
|
|
31
33
|
${n}${y.code?`
|
|
32
34
|
${y.code}`:""}
|
|
33
35
|
|
|
34
|
-
${
|
|
36
|
+
${x}
|
|
35
37
|
|
|
36
38
|
const config = builder.buildConfig()
|
|
37
39
|
|
package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-configurator.js
CHANGED
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
import{fileHeader as
|
|
2
|
-
${
|
|
3
|
-
${h?"":"import { mountConfiguratorApplication } from '@salsita-ai/sdk/application'\n"}
|
|
1
|
+
import{fileHeader as t}from"./file-header.js";import{defaultEnvsCode as e,generateImports as o,generateModuleEntries as r,generateModuleList as i,generateThemeCode as n,generateTransformerMap as a,generateTransformerRegistration as s,generateTransformerTypeImports as l}from"./generator-shared.js";export const generateFrontendConfiguratorFile=(f=[],m=[],c=[],$=[],p=[],u,d,g=!0,h=!1)=>{let C=o(f,"components"),w=i(r(f,"components")),j=o($,"handlers"),E=i(r($,"handlers")),F=o(p,"elements"),b=i(r(p,"elements")),k=a(m,c),x=s(c),A=n(u,d),B=l(c.length>0);return`// prettier-ignore-file
|
|
2
|
+
${t}
|
|
3
|
+
${h?"":"import { mountConfiguratorApplication } from '@salsita-ai/sdk/application'\n"}import { defaultConfiguratorElements } from '@salsita-ai/sdk/configurator'
|
|
4
|
+
${B?`${B}
|
|
4
5
|
`:""}
|
|
5
6
|
import * as interfaceFile from './configurator-interface.js'
|
|
6
7
|
|
|
7
8
|
import { configuratorBuilder } from './domain.js'
|
|
8
9
|
${C?`
|
|
9
|
-
${C}`:""}${
|
|
10
|
-
${
|
|
11
|
-
${
|
|
12
|
-
${
|
|
10
|
+
${C}`:""}${j?`
|
|
11
|
+
${j}`:""}${F?`
|
|
12
|
+
${F}`:""}${A.imports?`
|
|
13
|
+
${A.imports}`:""}${k}
|
|
13
14
|
|
|
14
15
|
const builder = configuratorBuilder
|
|
15
16
|
.withInterface(interfaceFile)
|
|
16
|
-
.withComponentOptics(${
|
|
17
|
-
.withHandlers(${
|
|
18
|
-
.
|
|
19
|
-
${
|
|
20
|
-
${
|
|
17
|
+
.withComponentOptics(${w})
|
|
18
|
+
.withHandlers(${E})
|
|
19
|
+
.withDefaultElements(defaultConfiguratorElements)
|
|
20
|
+
.withElements(${b})
|
|
21
|
+
${g?e:""}${A.code?`
|
|
22
|
+
${A.code}`:""}${x}
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
${h?"export const config = ":"const config = "}builder.buildConfig()
|
package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js
CHANGED
|
@@ -1,32 +1,34 @@
|
|
|
1
|
-
import{fileHeader as e}from"./file-header.js";import{defaultEnvsCode as i,generateImports as n,generateModuleEntries as t,generateModuleList as o,generateThemeCode as
|
|
1
|
+
import{fileHeader as e}from"./file-header.js";import{defaultEnvsCode as i,generateImports as n,generateModuleEntries as t,generateModuleList as o,generateThemeCode as a,generateTransformerMap as m,generateTransformerRegistration as r,generateTransformerTypeImports as s}from"./generator-shared.js";export const getFrontendEmbeddedAdminFile=(d,p,c=[],l=[],$=[],f=[],g=[],u=[],h=[],A,C,E)=>{let F=n(c,"components"),w=o(t(c,"components")),b=n(l,"adminComponents"),j=o(t(l,"adminComponents")),S=n(g,"handlers"),P=o(t(g,"handlers")),x=n(u,"elements"),I=n(h,"adminElements"),k=o([...t(u,"elements"),...t(h,"adminElements")]),y=m($,f),B=r(f),O=a(A,C),D=s(f.length>0),H=E?`
|
|
2
2
|
import { createAdminPagesFromSpec } from '@salsita-ai/sdk/admin'
|
|
3
|
-
import { $adminPagesSpec, $dataSpec } from './domain/application-types.js'`:"",
|
|
3
|
+
import { $adminPagesSpec, $dataSpec } from './domain/application-types.js'`:"",q=E?`
|
|
4
4
|
const { components: specAdminComponents, pages: specAdminPages } = createAdminPagesFromSpec($adminPagesSpec, $dataSpec)
|
|
5
|
-
`:"",
|
|
5
|
+
`:"",v=E?`[{ origin: '.phoenix/domain/application-types.ts', exports: specAdminComponents }, ...${j}]`:j;return`// prettier-ignore-file
|
|
6
6
|
|
|
7
7
|
${e}
|
|
8
|
-
${
|
|
8
|
+
${D?`${D}
|
|
9
9
|
`:""}
|
|
10
10
|
import * as interfaceFile from './configurator-interface.js'
|
|
11
11
|
import * as adminInterfaceFile from './admin-interface.js'
|
|
12
12
|
|
|
13
13
|
import { mountEmbeddedAdminApplication } from '@salsita-ai/sdk/application'
|
|
14
|
+
import { defaultConfiguratorElements } from '@salsita-ai/sdk/configurator'
|
|
14
15
|
|
|
15
|
-
import { configuratorBuilder } from './domain.js'${
|
|
16
|
-
${
|
|
17
|
-
${
|
|
18
|
-
${
|
|
16
|
+
import { configuratorBuilder } from './domain.js'${H}
|
|
17
|
+
${F?`
|
|
18
|
+
${F}`:""}${b?`
|
|
19
|
+
${b}`:""}${S?`
|
|
19
20
|
${S}`:""}${x?`
|
|
20
21
|
${x}`:""}${I?`
|
|
21
22
|
${I}`:""}${O.imports?`
|
|
22
23
|
${O.imports}`:""}${y}
|
|
23
|
-
${
|
|
24
|
+
${q}
|
|
24
25
|
let builder = configuratorBuilder
|
|
25
26
|
.withInterface(interfaceFile)
|
|
26
27
|
.withInterface(adminInterfaceFile)
|
|
27
|
-
.withComponentOptics(${
|
|
28
|
-
.withAdminComponentOptics(${
|
|
28
|
+
.withComponentOptics(${w})
|
|
29
|
+
.withAdminComponentOptics(${v})
|
|
29
30
|
.withHandlers(${P})
|
|
31
|
+
.withDefaultElements(defaultConfiguratorElements)
|
|
30
32
|
.withElements(${k})
|
|
31
33
|
${i}${O.code?`
|
|
32
34
|
${O.code}`:""}
|
|
@@ -1,34 +1,36 @@
|
|
|
1
|
-
import{fileHeader as e}from"./file-header.js";import{defaultEnvsCode as
|
|
1
|
+
import{fileHeader as e}from"./file-header.js";import{defaultEnvsCode as t,generateImports as o,generateModuleEntries as r,generateModuleList as i,generateThemeCode as n,generateTransformerMap as a,generateTransformerRegistration as l,generateTransformerTypeImports as s}from"./generator-shared.js";export const getFrontendEmbeddedConfiguratorFile=(f,m,d=[],u=[],c=[],$=[],p=[],g,h)=>{let C=o(d,"components"),E=i(r(d,"components")),b=o($,"handlers"),w=i(r($,"handlers")),j=o(p,"elements"),F=i(r(p,"elements")),k=a(u,c),x=l(c),A=n(g,h),B=s(c.length>0);return`// prettier-ignore-file
|
|
2
2
|
|
|
3
3
|
${e}
|
|
4
|
-
${
|
|
4
|
+
${B?`${B}
|
|
5
5
|
`:""}
|
|
6
6
|
import * as interfaceFile from './configurator-interface.js'
|
|
7
7
|
|
|
8
8
|
import { mountEmbeddedConfiguratorApplication } from '@salsita-ai/sdk/application'
|
|
9
|
+
import { defaultConfiguratorElements } from '@salsita-ai/sdk/configurator'
|
|
9
10
|
|
|
10
11
|
import { configuratorBuilder } from './domain.js'
|
|
11
|
-
${
|
|
12
|
+
${C?`
|
|
13
|
+
${C}`:""}${b?`
|
|
12
14
|
${b}`:""}${j?`
|
|
13
|
-
${j}`:""}${
|
|
14
|
-
${
|
|
15
|
-
${B.imports}`:""}${x}
|
|
15
|
+
${j}`:""}${A.imports?`
|
|
16
|
+
${A.imports}`:""}${k}
|
|
16
17
|
|
|
17
18
|
const builder = configuratorBuilder
|
|
18
19
|
.withInterface(interfaceFile)
|
|
19
|
-
.withComponentOptics(${
|
|
20
|
+
.withComponentOptics(${E})
|
|
20
21
|
.withHandlers(${w})
|
|
22
|
+
.withDefaultElements(defaultConfiguratorElements)
|
|
21
23
|
.withElements(${F})
|
|
22
|
-
${
|
|
23
|
-
${
|
|
24
|
+
${t}${A.code?`
|
|
25
|
+
${A.code}`:""}${x}
|
|
24
26
|
|
|
25
27
|
|
|
26
28
|
const config = builder.buildConfig()
|
|
27
29
|
|
|
28
30
|
export default {
|
|
29
31
|
mount: () => {
|
|
30
|
-
mountEmbeddedConfiguratorApplication(config, '${
|
|
31
|
-
return 'salsita-configurator-${
|
|
32
|
+
mountEmbeddedConfiguratorApplication(config, '${f}', '${m}')
|
|
33
|
+
return 'salsita-configurator-${f}-${m}'
|
|
32
34
|
},
|
|
33
35
|
config,
|
|
34
36
|
}
|
|
@@ -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 +1 @@
|
|
|
1
|
-
import{runCommand as e}from"../utils/index.js";import{checkFiles as t}from"./prettier.js";export const runCheckCommand=async(r,c)=>{let{logger:s}=c,i=!0===r.types||!0===r.lint||!0===r.format,o=!i||!0===r.types,n=!i||!0===r.lint,a=!i||!0===r.format;try{if(s.step("Running checks"),o&&await e({command:"tsc",args:["--project","tsconfig.json","--noEmit","--checkers","1"],description:"TypeScript check",quiet:!0},{logger:s}),n&&await e({command:"eslint",args:["src"],description:"ESLint check",quiet:!0},{logger:s}),a){if(s.step("Prettier check"),!await t(".",{logger:s}))throw Error("Prettier check failed");s.success("Prettier check passed")}s.success("All checks passed!")}catch(e){s.error(`Check failed: ${e instanceof Error?e.message:String(e)}`,e),process.exit(1)}};
|
|
1
|
+
import{runCommand as e}from"../utils/index.js";import{checkFiles as t}from"./prettier.js";export const runCheckCommand=async(r,c)=>{let{logger:s}=c,i=!0===r.types||!0===r.lint||!0===r.format,o=!i||!0===r.types,n=!i||!0===r.lint,a=!i||!0===r.format;try{if(s.step("Running checks"),o&&await e({command:"tsc",args:["--project","tsconfig.json","--noEmit","--checkers","1"],description:"TypeScript check",quiet:!0},{logger:s}),n&&await e({command:"eslint",args:["src","--no-error-on-unmatched-pattern"],description:"ESLint check",quiet:!0},{logger:s}),a){if(s.step("Prettier check"),!await t(".",{logger:s}))throw Error("Prettier check failed");s.success("Prettier check passed")}s.success("All checks passed!")}catch(e){s.error(`Check failed: ${e instanceof Error?e.message:String(e)}`,e),process.exit(1)}};
|
|
@@ -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()}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{runCommand as t}from"../utils/index.js";import{formatFiles as e}from"./prettier.js";export const runFixCommand=async(i
|
|
1
|
+
import{runCommand as t}from"../utils/index.js";import{formatFiles as e}from"./prettier.js";export const runFixCommand=async(r,i)=>{let{logger:s}=i,n=!0===r.lint||!0===r.format,o=!n||!0===r.lint,a=!n||!0===r.format;try{s.step("Running fixes"),o&&await t({command:"eslint",args:["src","--fix","--no-error-on-unmatched-pattern"],description:"ESLint fix",quiet:!0},{logger:s}),a&&(s.step("Prettier fix"),await e(".",{logger:s}),s.success("Prettier fix completed")),s.success("Fixes completed!")}catch(t){s.error(`Fix failed: ${t instanceof Error?t.message:String(t)}`,t),process.exit(1)}};
|
|
@@ -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,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
2
|
-
📝 Detected ${e}: ${t}`),this.changeSubject$.next(t)}})}setupRebuildSubscription(){let e=this.changeSubject$.pipe(
|
|
1
|
+
import{mkdirSync as e}from"fs";import{resolve as t}from"path";import i from"promise-queue";import{Subject as s,buffer as r,debounceTime as o}from"rxjs";import{createServer as n,normalizePath as l}from"vite";import{watch as h}from"#package/watch";import{ApplicationSpecBuilder as a}from"../application-spec/application-spec-builder.js";import{logDiagnostics as c}from"../application-spec/metrics/index.js";import{syncTemplateFiles as u}from"../application-spec/template-files.js";import{buildWebhooks as p}from"../webhooks/index.js";import{getViteDevConfig as g}from"./vite-config.js";let d=["spec/**/*.{yaml,yml}","src/**/*.{ts,tsx,yaml,yml,json,html,css}","templates/*.html",".env",".env.generated"],w=["src/locales/**/*.{ts,tsx}",".phoenix/**"];export class ApplicationSpecProjectWatcher{watcher=null;subscription=null;rebuildQueue=new i(1,1/0);changeSubject$=new s;viteServer=null;pubsub;logger;onRebuilt;onViteServerChange;builder;useServer;isShuttingDown=!1;suspended=!1;heldChanges=new Set;constructor(e){this.pubsub=e.pubsub,this.logger=e.logger,this.onRebuilt=e.onRebuilt,this.onViteServerChange=e.onViteServerChange,this.builder=new a({logger:e.logger,sdkVersion:e.sdkVersion,projectSlug:e.projectSlug,environmentSlug:e.environmentSlug,cliUseWorkspace:e.cliUseWorkspace,name:e.name,description:e.description,enableEditor:e.enableEditor,inlineTemplates:e.inlineTemplates}),this.useServer=e.useServer}start(e){this.viteServer=e,this.setupFileWatcher(),this.setupRebuildSubscription()}applyVariantFiles(e){this.rebuildQueue.add(async()=>{this.isShuttingDown||await this.rebuild(new Set(e.map(e=>e.fileName)),!1,!0)})}suspend(){this.suspended=!0}resume(){for(let e of(this.suspended=!1,this.heldChanges))this.changeSubject$.next(e);this.heldChanges.clear()}async close(){this.isShuttingDown=!0,this.watcher&&(await this.watcher.close(),this.watcher=null),this.subscription?.unsubscribe(),this.changeSubject$.complete()}setupFileWatcher(){e(t(process.cwd(),"src"),{recursive:!0}),this.watcher=h(d,{ignored:w,cwd:process.cwd(),persistent:!0,ignoreInitial:!1}),this.watcher.on("all",(e,t)=>{if("change"===e||"add"===e||"unlink"===e){if(this.suspended)return void this.heldChanges.add(t);this.logger.info(`
|
|
2
|
+
📝 Detected ${e}: ${t}`),this.changeSubject$.next(t)}})}setupRebuildSubscription(){let e=this.changeSubject$.pipe(o(10));this.subscription=this.changeSubject$.pipe(r(e)).subscribe(e=>{let t=new Set(e),i=t.has(".env");this.rebuildQueue.add(async()=>{this.isShuttingDown||(this.logger.info(`
|
|
3
3
|
🔨 Rebuilding spec files...
|
|
4
|
-
`),await this.rebuild(t,i,!1))})})}async rebuild(
|
|
4
|
+
`),await this.rebuild(t,i,!1))})})}async rebuild(e,i,s){try{let r=this.viteServer;if(!r)throw Error("Cannot rebuild the project: the watcher has no Vite server yet, because it was not started. Start the watcher before applying files");let o=await u();if(this.isShuttingDown)return;let h=await this.builder.build({compile:!s});if(this.isShuttingDown)return;if(c(h.diagnostics,this.logger),!h.ok){for(let e of h.errors)this.logger.error(`[${e.code}] ${e.message}${e.file?` (${e.file})`:""}`);this.pubsub.specFile$.next({rawProjectFiles:h.rawProjectFiles,projectRoot:process.cwd()});return}this.onRebuilt?.();let{application:a,changedFiles:d}=h,w=r.moduleGraph,b=Date.now(),f=new Set,m=process.cwd(),S=e=>{let t=w.getModulesByFile(l(e));if(t)for(let e of t)w.invalidateModule(e,f,b,!0)};for(let i of e)S(t(m,i));for(let e of d)S(t(m,`.phoenix/${e.path}`));if(this.pubsub.specFile$.next({rawProjectFiles:a.rawProjectFiles,projectRoot:process.cwd(),configurationSchemaHash:a.applicationSpec.configurator.configurationSchema.hash}),this.isShuttingDown)return;if(i){if(await r.close(),this.isShuttingDown)return;let e=await g({templateFiles:o});if(this.isShuttingDown)return;let t=await n(e);if(this.isShuttingDown||(await t.listen(),this.isShuttingDown))return void await t.close();this.viteServer=t,this.onViteServerChange?.(t),this.logger.success("Vite server restarted (env changed)")}if(this.useServer&&!s){if(this.logger.step("Building webhooks"),await p({experimental:!0,skipNodeEnvOverride:!0,webhookEntryPoint:"./.phoenix/.swc/.phoenix/webhook.js",preserveExistingOutput:!0}),this.isShuttingDown)return;this.logger.success("Webhooks rebuilt successfully")}this.logger.success("Project files rebuilt successfully")}catch(e){this.logger.error(`Build failed: ${e instanceof Error?e.message:String(e)}`,e)}}}
|
|
@@ -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;
|