@salsita-ai/sdk 0.50.0-develop.c33986dc44 → 0.50.0-develop.c402728d10
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 +5 -1
- package/dist/admin/AdminShell.js +1 -1
- package/dist/admin/legacy-admin/Application.js +1 -1
- package/dist/application-spec/core/enhanced-json-value.d.ts +2 -31
- package/dist/application-spec/core/enhanced-json-value.js +1 -1
- package/dist/application-spec/core/index.d.ts +1 -3
- package/dist/application-spec/core/index.js +1 -1
- package/dist/application-spec/core/json-schema.d.ts +2 -52
- package/dist/application-spec/core/markers/index.d.ts +1 -1
- package/dist/application-spec/core/markers/index.js +1 -1
- package/dist/application-spec/core/markers/msg-marker.d.ts +2 -28
- package/dist/application-spec/core/markers/msg-marker.js +1 -1
- package/dist/application-spec/core/markers/raw-eval-write-marker.d.ts +1 -1
- package/dist/application-spec/core/markers/raw-eval-write-marker.js +1 -1
- package/dist/application-spec/core/markers/raw-read-write-marker.js +1 -1
- package/dist/application-spec/errors/diagnostic-codes.d.ts +8 -1
- package/dist/application-spec/errors/diagnostic-codes.js +1 -1
- package/dist/application-spec/errors/diagnostic-messages.d.ts +15 -1
- package/dist/application-spec/errors/diagnostic-messages.js +1 -1
- package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
- package/dist/application-spec/generate-application/code/templates/index.d.ts +2 -6
- package/dist/application-spec/generate-application/code/templates/index.js +1 -1
- package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill-bundle.d.ts +10 -0
- package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill-bundle.js +7 -0
- 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 +1 -1
- package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +1 -1
- package/dist/application-spec/generate-application/code/templates/story/wrapper.js +2 -4
- package/dist/application-spec/generate-application/implementations/phx-model.d.ts +1 -1
- package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.d.ts +1 -2
- package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.d.ts +1 -2
- package/dist/application-spec/generate-application/runtime/factory-data/factory-data-runtime.d.ts +1 -2
- package/dist/application-spec/generate-application/runtime/factory-data/recipe-defaults.d.ts +1 -1
- package/dist/application-spec/generate-application/runtime/factory-data/recipe-defaults.js +1 -1
- package/dist/application-spec/generate-application/runtime/factory-data/static-violations.d.ts +1 -2
- package/dist/application-spec/generate-application/runtime/factory-data/static-violations.js +1 -1
- package/dist/application-spec/generate-application/runtime/generate-runtime-instance.d.ts +1 -1
- package/dist/application-spec/generate-application/runtime/generate-runtime-instance.js +1 -1
- package/dist/application-spec/generate-application/runtime/sections/actions-runtime.d.ts +1 -2
- 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/build-user-bound-optic.d.ts +1 -1
- package/dist/application-spec/generate-application/runtime/sections/component-optic.d.ts +1 -2
- package/dist/application-spec/generate-application/runtime/sections/expression-runtime.d.ts +1 -2
- package/dist/application-spec/generate-application/runtime/sections/expression-runtime.js +1 -1
- package/dist/application-spec/generate-application/runtime/sections/generate-memo-eval-plan-runtime.d.ts +1 -2
- package/dist/application-spec/generate-application/runtime/sections/generate-memo-eval-plan-runtime.js +1 -1
- package/dist/application-spec/generate-application/runtime/sections/preset-runtime.d.ts +2 -3
- package/dist/application-spec/generate-application/runtime/sections/reflection-constants-runtime.d.ts +1 -1
- package/dist/application-spec/generate-application/runtime/spec-code/resolve-spec-code.d.ts +1 -1
- package/dist/application-spec/generate-application/runtime-spec/runtime-spec.d.ts +96 -31
- package/dist/application-spec/generate-application/runtime-spec/spec-code-id.d.ts +1 -1
- package/dist/application-spec/parse-application-files/merge/merged-assistant.d.ts +13 -4
- package/dist/application-spec/parse-application-files/merge/merged-assistant.js +1 -1
- package/dist/application-spec/parse-application-files/merge/merged-infra.d.ts +4 -11
- package/dist/application-spec/parse-application-files/merge/merged-transformers.d.ts +2 -4
- package/dist/application-spec/parse-application-files/parse-application-files.js +1 -1
- package/dist/application-spec/parse-application-files/raw-spec/raw-acl.d.ts +2 -2
- package/dist/application-spec/parse-application-files/raw-spec/raw-acl.js +1 -1
- package/dist/application-spec/parse-application-files/raw-spec/raw-admin-pages.d.ts +3 -24
- package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.d.ts +25 -20
- package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
- package/dist/application-spec/parse-application-files/raw-spec/raw-expressions.d.ts +1 -1
- package/dist/application-spec/parse-application-files/raw-spec/raw-expressions.js +1 -1
- package/dist/application-spec/parse-application-files/raw-spec/raw-resources.d.ts +19 -64
- package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-pages.d.ts +3 -20
- package/dist/application-spec/parse-application-files/spec/application/admin-spec/states.d.ts +3 -5
- package/dist/application-spec/parse-application-files/spec/application/configurator-spec/states.d.ts +3 -8
- package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding.d.ts +3 -13
- package/dist/application-spec/parse-application-files/spec/components/bindings/write-binding.d.ts +4 -32
- package/dist/application-spec/parse-application-files/spec/components/component-filter.d.ts +4 -10
- package/dist/application-spec/parse-application-files/spec/components/components.d.ts +3 -4
- package/dist/application-spec/parse-application-files/spec/components/index.d.ts +1 -2
- package/dist/application-spec/parse-application-files/spec/components/index.js +1 -1
- package/dist/application-spec/parse-application-files/spec/components/sdk-component-entry.d.ts +1 -1
- package/dist/application-spec/parse-application-files/spec/components/user-component-entry.d.ts +2 -3
- package/dist/application-spec/parse-application-files/spec/components/user-component-entry.js +1 -1
- package/dist/application-spec/parse-application-files/spec/components/user-components.d.ts +2 -3
- package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.d.ts +2 -2
- package/dist/application-spec/parse-application-files/spec/expressions/expressions.d.ts +7 -29
- package/dist/application-spec/parse-application-files/spec/expressions/index.d.ts +0 -1
- package/dist/application-spec/parse-application-files/spec/expressions/memo-eval-plan.d.ts +4 -71
- 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.d.ts +2 -2
- package/dist/application-spec/parse-application-files/spec/invariants/invariant.d.ts +5 -21
- package/dist/application-spec/parse-application-files/spec/invariants/invariants.d.ts +4 -14
- package/dist/application-spec/parse-application-files/spec/model/aliases.d.ts +3 -9
- package/dist/application-spec/parse-application-files/spec/model/common-types.d.ts +6 -14
- package/dist/application-spec/parse-application-files/spec/model/defaults.d.ts +6 -31
- package/dist/application-spec/parse-application-files/spec/model/entity-types.d.ts +3 -8
- package/dist/application-spec/parse-application-files/spec/model/model-version-key.d.ts +3 -3
- package/dist/application-spec/parse-application-files/spec/model/names/action-name.d.ts +3 -7
- package/dist/application-spec/parse-application-files/spec/model/names/alias-name.d.ts +3 -7
- package/dist/application-spec/parse-application-files/spec/model/names/entity-or-alias-name.d.ts +3 -8
- package/dist/application-spec/parse-application-files/spec/model/names/entity-type-name.d.ts +3 -8
- package/dist/application-spec/parse-application-files/spec/model/names/expression-name.d.ts +3 -6
- package/dist/application-spec/parse-application-files/spec/model/names/instance-name.d.ts +3 -7
- package/dist/application-spec/parse-application-files/spec/model/names/invariant-name.d.ts +3 -3
- package/dist/application-spec/parse-application-files/spec/model/names/shape-property-name.d.ts +3 -11
- package/dist/application-spec/parse-application-files/spec/model/names/violation-type-name.d.ts +3 -3
- package/dist/application-spec/parse-application-files/spec/model/presets.d.ts +6 -29
- package/dist/application-spec/parse-application-files/spec/sections/actions.d.ts +6 -23
- package/dist/application-spec/parse-application-files/spec/sections/app-metadata.d.ts +3 -18
- package/dist/application-spec/parse-application-files/spec/sections/application-version.d.ts +3 -7
- package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
- package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant.js +1 -1
- package/dist/application-spec/parse-application-files/spec/sections/data-spec/chunks.d.ts +6 -23
- package/dist/application-spec/parse-application-files/spec/sections/data-spec/custom-data-spec.d.ts +1 -16
- package/dist/application-spec/parse-application-files/spec/sections/data-spec/data-entry-key.d.ts +3 -9
- package/dist/application-spec/parse-application-files/spec/sections/data-spec/data-spec.d.ts +1 -10
- package/dist/application-spec/parse-application-files/spec/sections/data-spec/swatch-data-spec.d.ts +1 -14
- package/dist/application-spec/parse-application-files/spec/sections/state-value.d.ts +3 -7
- package/dist/application-spec/parse-application-files/spec/sections/theme.d.ts +3 -10
- package/dist/application-spec/parse-application-files/spec/sections/transformers.d.ts +4 -11
- package/dist/application-spec/parse-application-files/spec/sections/ui.d.ts +3 -12
- package/dist/client/authorized-client.d.ts +3 -1
- package/dist/client/authorized-client.js +1 -1
- package/dist/client/contract.d.ts +30 -1
- package/dist/client/contract.js +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/local-authorized-client.d.ts +3 -1
- package/dist/client/local-authorized-client.js +1 -1
- package/dist/client/memory-authorized-client.d.ts +4 -1
- package/dist/client/memory-authorized-client.js +1 -1
- package/dist/client/phoenix-api.d.ts +259 -1
- package/dist/configurator/ConfiguratorApp.js +1 -1
- package/dist/configurator/application-runtime/extensions/selectors.js +1 -1
- package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +64 -6
- package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
- package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.d.ts +21 -4
- package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.js +1 -1
- package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.d.ts +70 -56
- package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.js +1 -1
- package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +30 -9
- package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
- package/dist/configurator/application-runtime/extensions/systems/graphql-system/violations.d.ts +40 -0
- package/dist/configurator/application-runtime/extensions/systems/graphql-system/violations.js +1 -0
- package/dist/configurator/common/configurator-interface.d.ts +2 -2
- package/dist/configurator/common/configurator-interface.js +1 -1
- package/dist/configurator/configurator-context/configurator-hooks/index.d.ts +0 -1
- package/dist/configurator/configurator-context/configurator-hooks/index.js +1 -1
- package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.js +1 -1
- package/dist/configurator/configurator-context/index.d.ts +0 -5
- package/dist/configurator/configurator-context/index.js +1 -1
- package/dist/configurator/pages/ConfiguratorNotFoundPage.js +1 -1
- package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
- package/dist/configurator/pages/NewConfiguratorPage.js +1 -1
- package/dist/configurator/pages/error-boundaries/DevContextFallback.js +1 -1
- package/dist/configurator/pages/error-boundaries/DevLoadingFallback.js +1 -1
- package/dist/configurator/ui/assistant/AssistantChips.js +1 -1
- package/dist/configurator/ui/assistant/AssistantComposer.d.ts +6 -0
- package/dist/configurator/ui/assistant/AssistantComposer.js +2 -1
- package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
- package/dist/configurator/ui/assistant/attachments/MessageImages.d.ts +11 -0
- package/dist/configurator/ui/assistant/attachments/MessageImages.js +1 -0
- package/dist/configurator/ui/assistant/attachments/index.d.ts +2 -0
- package/dist/configurator/ui/assistant/attachments/index.js +1 -0
- package/dist/configurator/ui/assistant/attachments/prepare-image.d.ts +19 -0
- package/dist/configurator/ui/assistant/attachments/prepare-image.js +1 -0
- package/dist/configurator/ui/assistant/screenshots/ScreenshotThumbnails.d.ts +1 -1
- package/dist/configurator/ui/assistant/screenshots/ScreenshotThumbnails.js +1 -1
- package/dist/configurator/ui/assistant/screenshots/index.d.ts +1 -0
- package/dist/configurator/ui/assistant/screenshots/index.js +1 -1
- package/dist/configurator/ui/assistant/screenshots/tool-screenshots.d.ts +12 -4
- package/dist/configurator/ui/assistant/screenshots/tool-screenshots.js +1 -1
- package/dist/configurator/ui/assistant/screenshots/use-screenshot-src.d.ts +8 -0
- package/dist/configurator/ui/assistant/screenshots/use-screenshot-src.js +1 -0
- package/dist/configurator/ui/assistant/thread-items.d.ts +2 -0
- package/dist/configurator/ui/assistant/thread-items.js +1 -1
- package/dist/configurator/ui/assistant/tool-chip.d.ts +19 -9
- package/dist/configurator/ui/assistant/tool-chip.js +1 -1
- package/dist/configurator/ui/configurator-layout/slots/canvas/GPUAccelerationDisabled.js +1 -1
- package/dist/configurator/ui/configurator-layout/slots/canvas/WebGLNotSupported.js +1 -1
- package/dist/configurator/ui/configurator-layout/slots/readonly-banner/CloneToEditDialog.js +1 -1
- package/dist/configurator/ui/configurator-layout/universal/DesktopPreview.js +1 -1
- package/dist/configurator/ui/configurator-layout/universal/MobilePreview.js +1 -1
- package/dist/configurator/ui/legacy/chat/MobileChat.js +1 -1
- package/dist/configurator/ui/legacy/layout/common/CommonTopNavigation.js +1 -1
- package/dist/configurator/ui/legacy/layout/simple/SimpleSidebar.js +1 -1
- package/dist/configurator/ui/legacy/layout/simple/SimpleTopNavigation.js +1 -1
- package/dist/configurator/ui/legacy/layout/steps/StepsNavigation.js +1 -1
- package/dist/configurator/ui/legacy/layout/steps/StepsOwnerLayout.js +1 -1
- package/dist/configurator/ui/legacy/layout/steps/StepsSideBar.js +1 -1
- package/dist/configurator/ui/legacy/layout/tabs/TabsSidebar.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/header/common/back-button/use-go-back-action.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/basic/use-basic-sidebar-footer.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/PreviousStepButton.js +1 -1
- package/dist/configurator/ui/preset-layout/CategoryPresetUi.js +1 -1
- package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.js +1 -1
- package/dist/docs/3d-scene/cameras/custom.mdx +4 -2
- package/dist/docs/drag-and-drop/room-planner.mdx +1 -1
- package/dist/docs/index.json +1 -1
- package/dist/docs/phoenix/configurator-interface.mdx +1 -1
- package/dist/docs/phoenix/domain-model.mdx +4 -1
- package/dist/docs/phoenix/layout-slots.mdx +21 -0
- package/dist/docs/phoenix/migration-guide.mdx +3 -3
- package/dist/docs/phoenix/phoenix-cli.mdx +40 -7
- package/dist/docs/phoenix/project-structure.mdx +23 -19
- package/dist/docs/phoenix/sdk-builder-workflow.mdx +2 -2
- package/dist/docs/phoenix/webhooks.mdx +9 -1
- package/dist/domain/application/application-config.d.ts +6 -24
- package/dist/domain/application/assistant/assistant-manifest.d.ts +13 -3
- package/dist/domain/application/assistant/assistant-manifest.js +1 -1
- package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +5 -9
- package/dist/domain/application/assistant/assistant-resolved-manifest.js +1 -1
- package/dist/domain/application/assistant/build-assistant-lenses.js +1 -1
- package/dist/domain/application/assistant/build-assistant-manifest.js +1 -1
- package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
- package/dist/domain/application/assistant/index.d.ts +3 -3
- package/dist/domain/application/assistant/index.js +1 -1
- package/dist/domain/application/assistant/session-setup/apply-assistant-setup.js +1 -1
- package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.d.ts +2 -4
- package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.js +1 -1
- package/dist/domain/application/assistant-mutations.js +1 -1
- package/dist/domain/available-system-components/available-system-components.d.ts +11 -0
- package/dist/domain/available-system-components/available-system-components.js +1 -0
- package/dist/domain/available-system-components/index.d.ts +1 -0
- package/dist/domain/available-system-components/index.js +1 -0
- package/dist/domain/{domain-builder.d.ts → domain-builder/domain-builder.d.ts} +2 -2
- package/dist/domain/domain-builder/domain-builder.js +1 -0
- package/dist/domain/domain-builder/index.d.ts +1 -0
- package/dist/domain/domain-builder/index.js +1 -0
- package/dist/domain/extensions/export-images/agent-screenshot.d.ts +6 -0
- package/dist/domain/extensions/export-images/agent-screenshot.js +1 -1
- package/dist/domain/extensions/export-images/index.d.ts +1 -1
- package/dist/domain/extensions/export-images/index.js +1 -1
- package/dist/domain/extensions/index.d.ts +1 -1
- package/dist/domain/extensions/index.js +1 -1
- package/dist/domain/index.d.ts +3 -2
- package/dist/domain/index.js +1 -1
- package/dist/domain/spec/application/admin-pages-section.d.ts +29 -0
- package/dist/domain/spec/application/admin-pages.d.ts +26 -0
- package/dist/domain/spec/application/admin-states.d.ts +5 -0
- package/dist/domain/spec/application/configurator-states.d.ts +8 -0
- package/dist/domain/spec/application/configurator-states.js +1 -0
- package/dist/domain/spec/application/index.d.ts +5 -0
- package/dist/domain/spec/application/index.js +1 -0
- package/dist/domain/spec/components/bindings/index.d.ts +2 -0
- package/dist/domain/spec/components/bindings/index.js +1 -0
- package/dist/domain/spec/components/bindings/read-binding.d.ts +13 -0
- package/dist/domain/spec/components/bindings/read-binding.js +1 -0
- package/dist/domain/spec/components/bindings/write-binding.d.ts +32 -0
- package/dist/domain/spec/components/bindings/write-binding.js +1 -0
- package/dist/{application-spec/parse-application-files → domain}/spec/components/component-entry.d.ts +3 -3
- package/dist/domain/spec/components/component-entry.js +1 -0
- package/dist/{application-spec/core → domain/spec}/components/component-filter.d.ts +3 -2
- package/dist/domain/spec/components/component-filters.d.ts +10 -0
- package/dist/domain/spec/components/component-filters.js +1 -0
- package/dist/domain/spec/components/components.d.ts +4 -0
- package/dist/domain/spec/components/components.js +1 -0
- package/dist/domain/spec/components/index.d.ts +6 -0
- package/dist/domain/spec/enhanced-json/enhanced-json-value.d.ts +30 -0
- package/dist/domain/spec/enhanced-json/enhanced-json-value.js +1 -0
- package/dist/domain/spec/enhanced-json/index.d.ts +1 -0
- package/dist/domain/spec/enhanced-json/index.js +1 -0
- package/dist/{application-spec/parse-application-files → domain}/spec/expressions/expression.d.ts +9 -3
- package/dist/domain/spec/expressions/expression.js +1 -0
- package/dist/domain/spec/expressions/expressions.d.ts +27 -0
- package/dist/domain/spec/expressions/expressions.js +1 -0
- package/dist/domain/spec/expressions/index.d.ts +5 -0
- package/dist/domain/spec/expressions/memo-eval-plan.d.ts +70 -0
- package/dist/domain/spec/expressions/memo-eval-plan.js +1 -0
- package/dist/domain/spec/expressions/relation-expression-params.js +1 -0
- package/dist/domain/spec/index.d.ts +9 -0
- package/dist/domain/spec/index.js +1 -0
- package/dist/domain/spec/invariants/index.d.ts +2 -0
- package/dist/domain/spec/invariants/index.js +1 -0
- package/dist/domain/spec/invariants/invariant.d.ts +24 -0
- package/dist/domain/spec/invariants/invariant.js +1 -0
- package/dist/domain/spec/invariants/invariants.d.ts +14 -0
- package/dist/domain/spec/invariants/invariants.js +1 -0
- package/dist/domain/spec/json-schema.d.ts +52 -0
- package/dist/domain/spec/json-schema.js +1 -0
- package/dist/domain/spec/markers/index.d.ts +3 -0
- package/dist/domain/spec/markers/index.js +1 -0
- package/dist/domain/spec/markers/msg-marker.d.ts +28 -0
- package/dist/domain/spec/markers/msg-marker.js +1 -0
- package/dist/domain/spec/model/aliases.d.ts +9 -0
- package/dist/domain/spec/model/aliases.js +1 -0
- package/dist/domain/spec/model/common-types.d.ts +15 -0
- package/dist/domain/spec/model/common-types.js +1 -0
- package/dist/domain/spec/model/defaults.d.ts +33 -0
- package/dist/domain/spec/model/defaults.js +1 -0
- package/dist/domain/spec/model/entity-types.d.ts +8 -0
- package/dist/domain/spec/model/entity-types.js +1 -0
- package/dist/domain/spec/model/index.d.ts +7 -0
- package/dist/domain/spec/model/index.js +1 -0
- package/dist/domain/spec/model/model-version-key.d.ts +3 -0
- package/dist/domain/spec/model/model-version-key.js +1 -0
- package/dist/domain/spec/model/names/action-name.d.ts +7 -0
- package/dist/domain/spec/model/names/action-name.js +1 -0
- package/dist/domain/spec/model/names/alias-name.d.ts +7 -0
- package/dist/domain/spec/model/names/alias-name.js +1 -0
- package/dist/domain/spec/model/names/entity-or-alias-name.d.ts +8 -0
- package/dist/domain/spec/model/names/entity-or-alias-name.js +1 -0
- package/dist/domain/spec/model/names/entity-type-name.d.ts +8 -0
- package/dist/domain/spec/model/names/entity-type-name.js +1 -0
- package/dist/domain/spec/model/names/expression-name.d.ts +6 -0
- package/dist/domain/spec/model/names/expression-name.js +1 -0
- package/dist/domain/spec/model/names/index.d.ts +9 -0
- package/dist/domain/spec/model/names/index.js +1 -0
- package/dist/domain/spec/model/names/instance-name.d.ts +7 -0
- package/dist/domain/spec/model/names/instance-name.js +1 -0
- package/dist/domain/spec/model/names/invariant-name.d.ts +3 -0
- package/dist/domain/spec/model/names/invariant-name.js +1 -0
- package/dist/domain/spec/model/names/shape-property-name.d.ts +11 -0
- package/dist/domain/spec/model/names/shape-property-name.js +1 -0
- package/dist/domain/spec/model/names/violation-type-name.d.ts +3 -0
- package/dist/domain/spec/model/names/violation-type-name.js +1 -0
- package/dist/domain/spec/model/presets.d.ts +30 -0
- package/dist/domain/spec/model/presets.js +1 -0
- package/dist/domain/spec/sections/actions.d.ts +23 -0
- package/dist/domain/spec/sections/actions.js +1 -0
- package/dist/domain/spec/sections/app-metadata.d.ts +18 -0
- package/dist/domain/spec/sections/app-metadata.js +1 -0
- package/dist/domain/spec/sections/application-version.d.ts +7 -0
- package/dist/domain/spec/sections/application-version.js +1 -0
- package/dist/domain/spec/sections/data-spec/chunks.d.ts +23 -0
- package/dist/domain/spec/sections/data-spec/chunks.js +1 -0
- package/dist/domain/spec/sections/data-spec/custom-data-spec-entry.d.ts +16 -0
- package/dist/domain/spec/sections/data-spec/custom-data-spec-entry.js +1 -0
- package/dist/domain/spec/sections/data-spec/data-entry-key.d.ts +9 -0
- package/dist/domain/spec/sections/data-spec/data-entry-key.js +1 -0
- package/dist/domain/spec/sections/data-spec/index.d.ts +5 -0
- package/dist/domain/spec/sections/data-spec/index.js +1 -0
- package/dist/domain/spec/sections/data-spec/parsed-data-spec-entries.d.ts +10 -0
- package/dist/domain/spec/sections/data-spec/parsed-data-spec-entries.js +1 -0
- package/dist/domain/spec/sections/data-spec/swatch-data-spec-entry.d.ts +14 -0
- package/dist/domain/spec/sections/data-spec/swatch-data-spec-entry.js +1 -0
- package/dist/domain/spec/sections/index.d.ts +9 -0
- package/dist/domain/spec/sections/index.js +1 -0
- package/dist/domain/spec/sections/infra/acl.d.ts +12 -0
- package/dist/domain/spec/sections/infra/acl.js +1 -0
- package/dist/domain/spec/sections/infra/index.d.ts +3 -0
- package/dist/domain/spec/sections/infra/index.js +1 -0
- package/dist/domain/spec/sections/infra/resource-entry.d.ts +46 -0
- package/dist/domain/spec/sections/infra/resource-entry.js +1 -0
- package/dist/domain/spec/sections/infra/resources-config.d.ts +10 -0
- package/dist/domain/spec/sections/infra/resources-config.js +1 -0
- package/dist/domain/spec/sections/state-value.d.ts +7 -0
- package/dist/domain/spec/sections/state-value.js +1 -0
- package/dist/domain/spec/sections/theme.d.ts +10 -0
- package/dist/domain/spec/sections/theme.js +1 -0
- package/dist/domain/spec/sections/transformers.d.ts +15 -0
- package/dist/domain/spec/sections/transformers.js +1 -0
- package/dist/domain/spec/sections/ui.d.ts +12 -0
- package/dist/domain/spec/sections/ui.js +1 -0
- package/dist/domain/system-definitions.js +1 -1
- package/dist/domain/utils/index.d.ts +2 -0
- package/dist/domain/utils/index.js +1 -0
- package/dist/editor/graphql/GraphQLPanel.js +1 -1
- package/dist/i18n/locales/cs/messages.js +1 -1
- package/dist/i18n/locales/da/messages.js +1 -1
- package/dist/i18n/locales/de/messages.js +1 -1
- package/dist/i18n/locales/de-AT/messages.js +1 -1
- package/dist/i18n/locales/en/messages.js +1 -1
- package/dist/i18n/locales/en-AU/messages.js +1 -1
- package/dist/i18n/locales/en-GB/messages.js +1 -1
- package/dist/i18n/locales/es/messages.js +1 -1
- package/dist/i18n/locales/fr/messages.js +1 -1
- package/dist/i18n/locales/hu/messages.js +1 -1
- package/dist/i18n/locales/it/messages.js +1 -1
- package/dist/i18n/locales/nl/messages.js +1 -1
- package/dist/i18n/locales/pl/messages.js +1 -1
- package/dist/i18n/locales/pt/messages.js +1 -1
- package/dist/i18n/locales/ro/messages.js +1 -1
- package/dist/i18n/locales/sk/messages.js +1 -1
- package/dist/i18n/locales/tr/messages.js +1 -1
- package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +2 -2
- package/dist/legacy/phoenix-cli/services/webhook-service/transport.js +1 -1
- package/dist/legacy/phoenix-cli/services/webhook-service/tunnel.d.ts +1 -0
- package/dist/legacy/phoenix-cli/services/webhook-service/tunnel.js +1 -1
- package/dist/legacy/webhook-cli/lambda-local/index.js +1 -1
- package/dist/phoenix/application-spec/generate-application-spec-project.d.ts +1 -0
- package/dist/phoenix/application-spec/generate-application-spec-project.js +2 -2
- package/dist/phoenix/application-spec/generate-project-files.d.ts +1 -0
- package/dist/phoenix/application-spec/index.d.ts +1 -0
- package/dist/phoenix/application-spec/index.js +1 -1
- package/dist/phoenix/application-spec/resolve-deployment-data.d.ts +11 -0
- package/dist/phoenix/application-spec/resolve-deployment-data.js +2 -2
- package/dist/phoenix/bin.js +1 -1
- package/dist/phoenix/cli.js +1 -1
- package/dist/phoenix/commands/activate-deployment.js +1 -1
- package/dist/phoenix/commands/build.js +1 -1
- package/dist/phoenix/commands/changelog.js +1 -1
- package/dist/phoenix/commands/check.js +1 -1
- package/dist/phoenix/commands/clean.js +1 -1
- package/dist/phoenix/commands/cleanup-environment.js +2 -2
- package/dist/phoenix/commands/create-environment.js +1 -1
- package/dist/phoenix/commands/data.js +1 -1
- package/dist/phoenix/commands/deploy.js +1 -1
- package/dist/phoenix/commands/deployment-build-envs-command.js +1 -1
- package/dist/phoenix/commands/dev.js +4 -5
- package/dist/phoenix/commands/docs.js +1 -1
- package/dist/phoenix/commands/finish-deployment-command.js +1 -1
- package/dist/phoenix/commands/fix.js +1 -1
- package/dist/phoenix/commands/index.d.ts +1 -1
- package/dist/phoenix/commands/index.js +1 -1
- package/dist/phoenix/commands/inspect-assets.js +1 -1
- package/dist/phoenix/commands/list-environments.js +1 -1
- package/dist/phoenix/commands/login.d.ts +4 -1
- package/dist/phoenix/commands/login.js +2 -2
- package/dist/phoenix/commands/prepare-deployment-command.js +2 -2
- package/dist/phoenix/commands/register-deployment.js +1 -1
- package/dist/phoenix/commands/scene.js +1 -1
- package/dist/phoenix/commands/screenshot.js +1 -1
- package/dist/phoenix/commands/state.js +1 -1
- package/dist/phoenix/commands/story-build.js +3 -3
- package/dist/phoenix/commands/story-create.js +1 -1
- package/dist/phoenix/commands/story-dev.js +2 -2
- package/dist/phoenix/commands/sync.js +1 -1
- package/dist/phoenix/commands/variants.js +1 -1
- package/dist/phoenix/editor-server/commands-router.js +1 -1
- package/dist/phoenix/editor-server/editor-server.d.ts +2 -13
- package/dist/phoenix/editor-server/editor-server.js +1 -1
- package/dist/phoenix/editor-server/spec-router.js +1 -1
- package/dist/phoenix/editor-server/trpc.d.ts +2 -12
- package/dist/phoenix/lingui/index.d.ts +1 -0
- package/dist/phoenix/lingui/index.js +1 -0
- package/dist/phoenix/lingui/lingui.d.ts +18 -0
- package/dist/phoenix/lingui/lingui.js +1 -0
- package/dist/phoenix/services/application-spec-project-watcher.d.ts +11 -6
- package/dist/phoenix/services/application-spec-project-watcher.js +2 -2
- package/dist/phoenix/services/cli-credentials.d.ts +3 -0
- package/dist/phoenix/services/cli-credentials.js +1 -1
- package/dist/phoenix/services/cli-exit.d.ts +5 -0
- package/dist/phoenix/services/cli-exit.js +1 -0
- package/dist/phoenix/services/deployment/deployment-preparation-service.d.ts +28 -0
- package/dist/phoenix/services/deployment/deployment-preparation-service.js +1 -0
- package/dist/phoenix/{commands → services/deployment}/generated-env-markers.d.ts +1 -0
- package/dist/phoenix/services/deployment/generated-env-markers.js +1 -0
- package/dist/phoenix/services/deployment/index.d.ts +2 -0
- package/dist/phoenix/services/deployment/index.js +1 -0
- package/dist/phoenix/services/index.d.ts +5 -1
- package/dist/phoenix/services/index.js +1 -1
- package/dist/phoenix/services/lingui-watcher.js +1 -1
- package/dist/phoenix/services/phoenix-store.d.ts +3 -0
- package/dist/phoenix/services/phoenix-store.js +1 -1
- package/dist/phoenix/services/prepare-development-environment.js +1 -1
- package/dist/phoenix/services/session/editor-server-handle.d.ts +5 -0
- package/dist/phoenix/services/session/editor-server-handle.js +1 -0
- package/dist/phoenix/services/session/index.d.ts +2 -0
- package/dist/phoenix/services/session/index.js +1 -0
- package/dist/phoenix/services/session/phoenix-application.d.ts +82 -0
- package/dist/phoenix/services/session/phoenix-application.js +2 -0
- package/dist/phoenix/services/telemetry/amplitude-telemetry-transport.d.ts +9 -0
- package/dist/phoenix/services/telemetry/amplitude-telemetry-transport.js +1 -0
- package/dist/phoenix/services/telemetry/index.d.ts +3 -0
- package/dist/phoenix/services/telemetry/index.js +1 -0
- package/dist/phoenix/services/telemetry/telemetry-client.d.ts +25 -0
- package/dist/phoenix/services/telemetry/telemetry-client.js +1 -0
- package/dist/phoenix/services/telemetry/telemetry-command.d.ts +2 -0
- package/dist/phoenix/services/telemetry/telemetry-command.js +1 -0
- package/dist/phoenix/services/telemetry/telemetry-event.d.ts +44 -0
- package/dist/phoenix/services/telemetry/telemetry-event.js +1 -0
- package/dist/phoenix/services/telemetry/telemetry-state.d.ts +25 -0
- package/dist/phoenix/services/telemetry/telemetry-state.js +2 -0
- package/dist/phoenix/services/vite-config.js +1 -1
- package/dist/phoenix/services/webhook-service/transport.js +1 -1
- package/dist/phoenix/services/webhook-service/tunnel.d.ts +1 -0
- package/dist/phoenix/services/webhook-service/tunnel.js +1 -1
- package/dist/react-sdk/application-runtime/domain-application-context/chat-system.d.ts +1 -1
- package/dist/{configurator/configurator-context → react-sdk}/configurator-routing/ConfiguratorRoutingProvider.d.ts +1 -1
- package/dist/react-sdk/configurator-routing/ConfiguratorRoutingProvider.js +1 -0
- package/dist/{configurator/configurator-context → react-sdk}/configurator-routing/OnGoToIndexHandler.d.ts +1 -2
- package/dist/react-sdk/configurator-routing/OnGoToIndexHandler.js +1 -0
- package/dist/react-sdk/configurator-routing/index.d.ts +3 -0
- package/dist/{configurator/configurator-context → react-sdk}/configurator-routing/index.js +1 -1
- package/dist/{configurator/configurator-context → react-sdk}/configurator-routing/use-power-routing-lifecycle.d.ts +2 -0
- package/dist/react-sdk/configurator-routing/use-power-routing-lifecycle.js +1 -0
- package/dist/react-sdk/domain-application-context/BackendDataProvider.js +1 -1
- package/dist/react-sdk/domain-application-context/ConfigurationPersistSystemFailureHandler.js +1 -1
- package/dist/react-sdk/domain-application-context/FrontendDataProvider.js +1 -1
- package/dist/react-sdk/domain-application-context/OnPresetLoadedHandler.js +1 -0
- package/dist/react-sdk/domain-application-context/PublishedDataProvider.js +1 -1
- package/dist/react-sdk/domain-application-context/chat-hooks.d.ts +4 -0
- package/dist/react-sdk/domain-application-context/chat-hooks.js +1 -0
- package/dist/react-sdk/domain-application-context/index.d.ts +2 -0
- package/dist/react-sdk/domain-application-context/index.js +1 -1
- package/dist/react-sdk/elements/PhoenixEntityElement.js +1 -1
- package/dist/react-sdk/elements/PhoenixLayoutElement.js +1 -1
- package/dist/react-sdk/index.d.ts +5 -0
- package/dist/react-sdk/index.js +1 -1
- package/dist/react-sdk/integration/IntegrationSubscription.js +1 -0
- package/dist/react-sdk/integration/index.d.ts +1 -0
- package/dist/react-sdk/integration/index.js +1 -0
- package/dist/react-sdk/lifecycle-providers/ConfiguratorDataProvider.d.ts +8 -0
- package/dist/react-sdk/lifecycle-providers/ConfiguratorDataProvider.js +1 -0
- package/dist/react-sdk/lifecycle-providers/LifecycleProviders.js +1 -0
- package/dist/react-sdk/lifecycle-providers/index.d.ts +2 -0
- package/dist/react-sdk/lifecycle-providers/index.js +1 -0
- package/dist/react-sdk/notifications/index.d.ts +1 -0
- package/dist/react-sdk/notifications/index.js +1 -0
- package/dist/react-sdk/notifications/snackbar-action-button.d.ts +30 -0
- package/dist/react-sdk/notifications/snackbar-action-button.js +1 -0
- package/dist/react-sdk/preset-selection/PresetSelectionProvider.js +1 -0
- package/dist/react-sdk/preset-selection/index.d.ts +1 -0
- package/dist/react-sdk/preset-selection/index.js +1 -0
- package/dist/react-sdk/session/SessionServiceProvider.d.ts +5 -0
- package/dist/react-sdk/session/SessionServiceProvider.js +1 -1
- package/dist/ui-sdk/components/snackbar/Snackbar.d.ts +24 -3
- package/dist/ui-sdk/components/snackbar/Snackbar.js +1 -1
- package/dist/ui-sdk/icons/__generated/Paperclip.d.ts +3 -0
- package/dist/ui-sdk/icons/__generated/Paperclip.js +1 -0
- package/dist/ui-sdk/icons/__generated/index.d.ts +2 -0
- package/dist/ui-sdk/icons/__generated/index.js +1 -1
- package/dist/ui-sdk/icons/icons-registry.js +1 -1
- package/dist/ui-sdk/theme/types.d.ts +1 -1
- package/dist/watch/glob-matcher.d.ts +4 -4
- package/dist/watch/glob-matcher.js +1 -1
- package/dist/watch/watch.d.ts +4 -4
- package/dist/watch/watch.js +1 -1
- package/package.json +3 -3
- package/schema/domain-spec.json +22 -4
- package/dist/application-spec/core/components/index.d.ts +0 -2
- package/dist/application-spec/core/expressions/index.d.ts +0 -2
- package/dist/configurator/configurator-context/ConfiguratorDataProvider.d.ts +0 -2
- package/dist/configurator/configurator-context/ConfiguratorDataProvider.js +0 -1
- package/dist/configurator/configurator-context/IntegrationSubscription.js +0 -1
- package/dist/configurator/configurator-context/LifecycleProviders.js +0 -1
- package/dist/configurator/configurator-context/OnPresetLoadedHandler.js +0 -1
- package/dist/configurator/configurator-context/PresetSelectionProvider.js +0 -1
- package/dist/configurator/configurator-context/configurator-hooks/chat-hooks.d.ts +0 -1
- package/dist/configurator/configurator-context/configurator-hooks/chat-hooks.js +0 -1
- package/dist/configurator/configurator-context/configurator-routing/ConfiguratorRoutingProvider.js +0 -1
- package/dist/configurator/configurator-context/configurator-routing/OnGoToIndexHandler.js +0 -1
- package/dist/configurator/configurator-context/configurator-routing/index.d.ts +0 -2
- package/dist/configurator/configurator-context/configurator-routing/use-power-routing-lifecycle.js +0 -1
- package/dist/domain/available-system-components.d.ts +0 -11
- package/dist/domain/available-system-components.js +0 -1
- package/dist/domain/domain-builder.js +0 -1
- package/dist/phoenix/commands/generated-env-markers.js +0 -1
- package/dist/phoenix/services/lingui.d.ts +0 -15
- package/dist/phoenix/services/lingui.js +0 -1
- package/dist/phoenix/services/phoenix-application.d.ts +0 -21
- package/dist/phoenix/services/phoenix-application.js +0 -1
- /package/dist/{application-spec/core/expressions/relation-expression-params.js → domain/spec/application/admin-pages-section.js} +0 -0
- /package/dist/{application-spec/parse-application-files/spec/components/component-entry.js → domain/spec/application/admin-pages.js} +0 -0
- /package/dist/{application-spec/parse-application-files/spec/expressions/expression.js → domain/spec/application/admin-states.js} +0 -0
- /package/dist/{application-spec/core → domain/spec/application}/application-instance.d.ts +0 -0
- /package/dist/{application-spec/core → domain/spec/application}/application-instance.js +0 -0
- /package/dist/{application-spec/core → domain/spec}/components/component-filter.js +0 -0
- /package/dist/{application-spec/core → domain/spec}/components/index.js +0 -0
- /package/dist/{application-spec/core → domain/spec}/components/sdk-code-ref.d.ts +0 -0
- /package/dist/{application-spec/core → domain/spec}/components/sdk-code-ref.js +0 -0
- /package/dist/{application-spec/core → domain/spec}/expressions/index.js +0 -0
- /package/dist/{application-spec/core → domain/spec}/expressions/relation-expression-params.d.ts +0 -0
- /package/dist/{application-spec/core → domain/spec}/expressions/sdk-expression-implementation.d.ts +0 -0
- /package/dist/{application-spec/core → domain/spec}/expressions/sdk-expression-implementation.js +0 -0
- /package/dist/{application-spec/parse-application-files/spec/components → domain/spec/markers}/component-prop-target.d.ts +0 -0
- /package/dist/{application-spec/parse-application-files/spec/components → domain/spec/markers}/component-prop-target.js +0 -0
- /package/dist/{application-spec/core → domain/spec}/markers/eval-marker.d.ts +0 -0
- /package/dist/{application-spec/core → domain/spec}/markers/eval-marker.js +0 -0
- /package/dist/{configurator/configurator-context → react-sdk/domain-application-context}/OnPresetLoadedHandler.d.ts +0 -0
- /package/dist/{configurator/configurator-context → react-sdk/integration}/IntegrationSubscription.d.ts +0 -0
- /package/dist/{configurator/configurator-context → react-sdk/lifecycle-providers}/LifecycleProviders.d.ts +0 -0
- /package/dist/{configurator/configurator-context → react-sdk/preset-selection}/PresetSelectionProvider.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{eslintConfigArgs as e}from"../check-configs/index.js";import{
|
|
1
|
+
import{eslintConfigArgs as e}from"../check-configs/index.js";import{exitCli as t}from"../services/index.js";import{runSdkTool as i}from"../utils/index.js";import{formatFiles as r}from"./prettier.js";export const runFixCommand=async(s,o)=>{let{logger:n}=o,a=!0===s.lint||!0===s.format,c=!a||!0===s.lint,m=!a||!0===s.format;try{n.step("Running fixes"),c&&await i({tool:{packageName:"eslint",binName:"eslint"},args:["src","--fix","--no-error-on-unmatched-pattern",...e()],description:"ESLint fix",quiet:!0},{logger:n}),m&&(n.step("Prettier fix"),await r(".",{logger:n}),n.success("Prettier fix completed")),n.success("Fixes completed!")}catch(e){n.error(`Fix failed: ${e instanceof Error?e.message:String(e)}`,e),await t(1)}};
|
|
@@ -12,7 +12,7 @@ export { prepareDevelopmentEnvironment } from '../services/prepare-development-e
|
|
|
12
12
|
export { prepareLocalEnvironment } from './prepare-local-environment-command.js';
|
|
13
13
|
export { runFinishDeploymentCommand } from './finish-deployment-command.js';
|
|
14
14
|
export { runDeploymentBuildEnvsCommand } from './deployment-build-envs-command.js';
|
|
15
|
-
export { runDepsCommand } from './deps/index.js';
|
|
15
|
+
export { findSdkPeerMismatches, runDepsCommand } from './deps/index.js';
|
|
16
16
|
export { runDevCommand } from './dev.js';
|
|
17
17
|
export { runFixCommand } from './fix.js';
|
|
18
18
|
export { runLinkCommand } from './link.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{runBuildCommand}from"./build.js";export{runCheckCommand}from"./check.js";export{runCleanCommand}from"./clean.js";export{runActivateDeploymentCommand}from"./activate-deployment.js";export{runCreateEnvironmentCommand}from"./create-environment.js";export{runCleanupEnvironmentCommand}from"./cleanup-environment.js";export{runListEnvironmentsCommand}from"./list-environments.js";export{runRegisterDeploymentCommand}from"./register-deployment.js";export{runPrepareDeploymentCommand}from"./prepare-deployment-command.js";export{prepareDevelopmentEnvironment}from"../services/prepare-development-environment.js";export{prepareLocalEnvironment}from"./prepare-local-environment-command.js";export{runFinishDeploymentCommand}from"./finish-deployment-command.js";export{runDeploymentBuildEnvsCommand}from"./deployment-build-envs-command.js";export{runDepsCommand}from"./deps/index.js";export{runDevCommand}from"./dev.js";export{runFixCommand}from"./fix.js";export{runLinkCommand}from"./link.js";export{runUnlinkCommand}from"./unlink.js";export{runPrepareCiCommand}from"./prepare-ci.js";export{runStoryCommand}from"./story.js";export{runStoryBuildCommand}from"./story-build.js";export{runStoryCreateCommand}from"./story-create.js";export{runStoryDevCommand}from"./story-dev.js";export{runInitCommand}from"./init.js";export{runSyncCommand}from"./sync.js";export{runChangelogCommand}from"./changelog.js";export{runDocsCommand}from"./docs.js";export{runInspectAssetsCommand}from"./inspect-assets.js";export{runScreenshotCommand}from"./screenshot.js";export{runStateCommand}from"./state.js";export{runDataCommand}from"./data.js";export{runSceneCommand}from"./scene.js";export{runVariantsCommand}from"./variants.js";export{runLoginCommand}from"./login.js";export{runLogoutCommand}from"./logout.js";export{runDeployCommand}from"./deploy.js";export{runFeedbackCommand}from"./feedback.js";export{runExtractSourcesCommand}from"./extract-sources-command.js";
|
|
1
|
+
export{runBuildCommand}from"./build.js";export{runCheckCommand}from"./check.js";export{runCleanCommand}from"./clean.js";export{runActivateDeploymentCommand}from"./activate-deployment.js";export{runCreateEnvironmentCommand}from"./create-environment.js";export{runCleanupEnvironmentCommand}from"./cleanup-environment.js";export{runListEnvironmentsCommand}from"./list-environments.js";export{runRegisterDeploymentCommand}from"./register-deployment.js";export{runPrepareDeploymentCommand}from"./prepare-deployment-command.js";export{prepareDevelopmentEnvironment}from"../services/prepare-development-environment.js";export{prepareLocalEnvironment}from"./prepare-local-environment-command.js";export{runFinishDeploymentCommand}from"./finish-deployment-command.js";export{runDeploymentBuildEnvsCommand}from"./deployment-build-envs-command.js";export{findSdkPeerMismatches,runDepsCommand}from"./deps/index.js";export{runDevCommand}from"./dev.js";export{runFixCommand}from"./fix.js";export{runLinkCommand}from"./link.js";export{runUnlinkCommand}from"./unlink.js";export{runPrepareCiCommand}from"./prepare-ci.js";export{runStoryCommand}from"./story.js";export{runStoryBuildCommand}from"./story-build.js";export{runStoryCreateCommand}from"./story-create.js";export{runStoryDevCommand}from"./story-dev.js";export{runInitCommand}from"./init.js";export{runSyncCommand}from"./sync.js";export{runChangelogCommand}from"./changelog.js";export{runDocsCommand}from"./docs.js";export{runInspectAssetsCommand}from"./inspect-assets.js";export{runScreenshotCommand}from"./screenshot.js";export{runStateCommand}from"./state.js";export{runDataCommand}from"./data.js";export{runSceneCommand}from"./scene.js";export{runVariantsCommand}from"./variants.js";export{runLoginCommand}from"./login.js";export{runLogoutCommand}from"./logout.js";export{runDeployCommand}from"./deploy.js";export{runFeedbackCommand}from"./feedback.js";export{runExtractSourcesCommand}from"./extract-sources-command.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{globby as e}from"globby";import{resolve as o}from"path";import{
|
|
1
|
+
import{globby as e}from"globby";import{resolve as o}from"path";import{exitCli as t}from"../services/index.js";import{inspectGltfFile as n}from"./gltf-inspector.js";let r=e=>e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`;export const formatSummary=e=>{let o=[`File: ${e.filePath}`,`Size: ${r(e.fileSize)}${e.fileSize>0xa00000?" (large file)":""}`,`Format: ${e.format} ${e.version}`,`Generator: ${e.generator}`];return e.extensions.length>0&&o.push(`Extensions: ${e.extensions.join(", ")}`),e.dracoCompressed&&o.push("Note: Draco-compressed meshes (vertex data not decoded)"),o.join("\n")};let a=e=>String(Math.round(1e3*e)/1e3),i=e=>`[${e.map(a).join(", ")}]`,s=(e,o)=>0===o||Math.abs(e)<.01*o,l=(e,o)=>o>0&&Math.abs(Math.abs(e)-o/2)<.01*o,m=e=>{let o,t,n,r=e.children.length>0?` [${e.children.join(", ")}]`:"",m=` ${e.name} (${e.type})${r}`;if((0!==(o=e.translation)[0]||0!==o[1]||0!==o[2])&&(m+=` pos=${i(e.translation)}`),(0!==(t=e.rotation)[0]||0!==t[1]||0!==t[2]||1!==t[3])&&(m+=` rot=${i(e.rotation)}`),(1!==(n=e.scale)[0]||1!==n[1]||1!==n[2])&&(m+=` scale=${i(e.scale)}`),e.morphTargets.length>0&&(m+=` morphs=${e.morphTargets.join(",")}`),e.boundingBox){let o=e.boundingBox.dimensions,t=e.boundingBox.originOffset,n=((e,o)=>{let t=s(e[0],o[0]),n=s(e[1],o[1]),r=s(e[2],o[2]);if(t&&n&&r)return"center";let a=l(e[1],o[1])?e[1]>0?"bottom":"top":"",i=l(e[0],o[0]),m=l(e[2],o[2]),f=t&&r?"center":i&&m?"corner":i||m?"edge":"";return a&&f?`${a}-${f}`:a||f||"offset"})(t,o);m+=` bounds=${a(o[0])}x${a(o[1])}x${a(o[2])} origin=${n} ${i(t)}`}return m};export const formatNodes=e=>0===e.length?"Nodes: (none)":[`Nodes (${e.length}):`,...e.map(m)].join("\n");export const formatMaterials=e=>0===e.length?"Materials: (none)":[`Materials (${e.length}):`,...e.map(e=>` ${e.name}`)].join("\n");export const formatMorphTargets=e=>{if(0===e.size)return"Morph Targets: (none)";let o=["Morph Targets:"];for(let[t,n]of e)o.push(` ${t}: ${n.join(", ")}`);return o.join("\n")};export const formatAnimations=e=>0===e.length?"Animations: (none)":[`Animations (${e.length}):`,...e.map(e=>` ${e.name} (${e.duration}s, ${e.channelCount} channels)`)].join("\n");export const formatFullReport=e=>[formatSummary(e),"",formatNodes(e.nodes),"",formatMaterials(e.materials),"",formatMorphTargets(e.morphTargets),"",formatAnimations(e.animations)].join("\n");export const formatSummaryTable=e=>{let o="File Size Nodes Materials Morphs Animations",t="─".repeat(o.length);return[o,t,...e.map(e=>{let o=[...e.morphTargets.values()].reduce((e,o)=>e+o.length,0);return[e.filePath.padEnd(40),r(e.fileSize).padStart(10),String(e.nodes.length).padStart(7),String(e.materials.length).padStart(10),String(o).padStart(8),String(e.animations.length).padStart(11)].join("")})].join("\n")};let f=e=>({...e,morphTargets:Object.fromEntries(e.morphTargets)});export const runInspectAssetsCommand=async(r,a)=>{let{logger:i}=a;try{if(r.file){let e=o(r.file),t=await n(e);if(r.json)return void console.log(JSON.stringify(f(t),null,2));if(r.objects)return void console.log(formatNodes(t.nodes));if(r.materials)return void console.log(formatMaterials(t.materials));if(r.morphs)return void console.log(formatMorphTargets(t.morphTargets));if(r.animations)return void console.log(formatAnimations(t.animations));console.log(formatFullReport(t));return}let t=await e("public/**/*.{glb,gltf}");if(0===t.length)return void i.warn("No glTF/GLB files found in public/");let a=[];for(let e of t)try{a.push(await n(o(e)))}catch(o){i.error(`Failed to parse ${e}`,o)}if(0===a.length)return void i.warn("No files could be parsed");if(r.json)return void console.log(JSON.stringify(a.map(f),null,2));if(r.objects){let e=a.flatMap(e=>e.nodes.map(o=>`${e.filePath}: ${o.name} (${o.type})`));console.log(e.join("\n"));return}if(r.materials){let e=a.flatMap(e=>e.materials.map(o=>`${e.filePath}: ${o.name}`));console.log(e.join("\n"));return}if(r.morphs){let e=[];for(let o of a)for(let[t,n]of o.morphTargets)e.push(`${o.filePath}: ${t} → ${n.join(", ")}`);if(0===e.length)return void i.info("No morph targets found in any file");console.log(e.join("\n"));return}if(r.animations){let e=a.flatMap(e=>e.animations.map(o=>`${e.filePath}: ${o.name} (${o.duration}s, ${o.channelCount} ch)`));if(0===e.length)return void i.info("No animations found in any file");console.log(e.join("\n"));return}console.log(formatSummaryTable(a))}catch(e){e instanceof Error?i.error(e.message):i.error("Unexpected error during asset inspection",e),await t(1)}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{exitCli as e}from"../services/index.js";import{runCommand as n}from"../utils/index.js";export const runListEnvironmentsCommand=async(r,t)=>{let{logger:i}=t;try{i.warn("DEPRECATED: environment:list command is deprecated, switch to a new workflow and use the prepare environment flow instead"),i.step("Listing deployment environments");let e=["list"];r?.server&&e.push("--server",`"${r.server}"`),r?.apiKey&&e.push("--apiKey",`"${r.apiKey}"`),await n({command:"deployment-cli",args:e,description:"Listing environments"},{logger:i})}catch(n){i.error(`Failed to list environments: ${n instanceof Error?n.message:String(n)}`,n),await e(1)}};
|
|
@@ -37,5 +37,8 @@ export declare const startLoginCallbackListener: (props: LoginCallbackListenerPr
|
|
|
37
37
|
* one-time code to this CLI's loopback listener, and the CLI exchanges it with its PKCE verifier for an API token.
|
|
38
38
|
* The browser waits on the callback meanwhile and ends on Studio's page for the outcome.
|
|
39
39
|
*/
|
|
40
|
-
export declare const runLoginCommand: (props: LoginCommandProps, { logger }: CommandContext) => Promise<
|
|
40
|
+
export declare const runLoginCommand: (props: LoginCommandProps, { logger }: CommandContext) => Promise<{
|
|
41
|
+
userId: string;
|
|
42
|
+
workspaceId: string;
|
|
43
|
+
} | undefined>;
|
|
41
44
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{spawn as e}from"node:child_process";import{createHash as t,randomBytes as r}from"node:crypto";import{createServer as o}from"node:http";import{hostname as n}from"node:os";import{
|
|
1
|
+
import{spawn as e}from"node:child_process";import{createHash as t,randomBytes as r}from"node:crypto";import{createServer as o}from"node:http";import{hostname as n}from"node:os";import{z as s}from"zod";import{createApiBaseClient as i}from"#package/client";import{getServerCredentials as a,saveServerCredentials as l}from"../services/index.js";let c=s.string().uuid(),d={"&":"&","<":"<",">":">",'"':""","'":"'"},m=(e,t)=>`<!doctype html><html><head><meta charset="utf-8"><title>${e}</title></head><body style="font-family:system-ui,sans-serif;display:grid;place-items:center;height:100vh;margin:0"><main style="text-align:center"><h1>${e}</h1><p>${t.replace(/[&<>"']/g,e=>d[e]??e)}</p></main></body></html>`,u=(e,t,r,o)=>new Promise(n=>{e.destroyed?n():(e.once("close",n),e.writeHead(t,{...r,connection:"close"}).end(o))});export const startLoginCallbackListener=async e=>{let{state:t,studioUrl:r,customer:n}=e,s=(e,t)=>{let o=new URL(e,r);return o.searchParams.set("customer",n),t&&o.searchParams.set("name",t),o.toString()},i=null,a=!1,l=new Promise((e,t)=>{i={resolve:e,reject:t}}),c=o((e,r)=>{let o=new URL(e.url??"/","http://127.0.0.1"),n=o.searchParams.get("code"),l="access_denied"===o.searchParams.get("error");if("/callback"!==o.pathname)return void r.writeHead(404).end();if(o.searchParams.get("state")!==t||a||!n&&!l){u(r,400,{"content-type":"text/html"},m("Sign-in failed","This response does not belong to the waiting CLI. Run phoenix login again.")),a||i?.reject(Error("The sign-in response did not match this CLI session. Run `phoenix login` again."));return}if(a=!0,l||!n)return void u(r,302,{location:s("/builder/cli-login/denied",null)}).then(()=>{i?.reject(Error("The sign-in was denied in Studio. Run `phoenix login` again to sign in."))});let c=o.searchParams.get("name");i?.resolve({code:n,tokenName:c,finish:e=>e.signedIn?u(r,302,{location:s("/builder/cli-login/done",c)}):u(r,200,{"content-type":"text/html"},m("Sign-in failed",e.message))})}),d=await new Promise((e,t)=>{c.once("error",t),c.listen(0,"127.0.0.1",()=>{let r=c.address();null===r||"string"==typeof r?t(Error("The login callback listener did not get a port. Run `phoenix login` again.")):e(r.port)})}),h=setTimeout(()=>{i?.reject(Error("Nobody approved the sign-in within 5 minutes. Run `phoenix login` again."))},3e5);return{port:d,callback:l,close:()=>{clearTimeout(h),c.close()}}};let h=async(e,t)=>{try{let{error:r,response:o}=await i(e).DELETE("/auth/token",{headers:{authorization:`Bearer ${t}`,"content-type":null}});return r&&401!==o.status?r.message:null}catch(e){return e instanceof Error?e.message:String(e)}},g=async(e,t)=>{let{data:r,error:o}=await i(e.serverUrl).POST("/auth/token",{body:t});if(o||!r)throw Error(`The server did not accept the sign-in: ${o?.message??"no response"}`);if(r.customer.slug!==e.customer)throw await h(e.serverUrl,r.token),Error(`The sign-in was approved in workspace "${r.customer.slug}", not "${e.customer}". Check --region or --studioUrl and run \`phoenix login ${e.customer}\` again.`);let n=await a(e.serverUrl),s=c.safeParse(r.customer.id),d=await l(e.serverUrl,{token:r.token,userId:r.userId,...s.success?{customerId:s.data}:{},customerSlug:r.customer.slug,customerName:r.customer.name,studioUrl:e.studioUrl,createdAt:new Date().toISOString()}),m=n?await h(e.serverUrl,n.token):null;return{customerName:r.customer.name,path:d,revokeError:m,telemetryAssociation:s.success?{userId:r.userId,workspaceId:s.data}:void 0}};export const runLoginCommand=async(o,{logger:s})=>{let i=r(32).toString("base64url"),a=t("sha256").update(i).digest("base64url"),l=r(16).toString("base64url"),c=n(),d=`phoenix CLI on ${c}`,m=await startLoginCallbackListener({state:l,studioUrl:o.studioUrl,customer:o.customer});try{let t=new URL("/builder/cli-login",o.studioUrl);t.searchParams.set("customer",o.customer),t.searchParams.set("port",String(m.port)),t.searchParams.set("state",l),t.searchParams.set("challenge",a),t.searchParams.set("name",d),t.searchParams.set("host",c),t.searchParams.set("started",String(Date.now())),s.step(`Signing in to workspace "${o.customer}" on ${o.serverUrl}`),s.info(`Approve the CLI in your browser:
|
|
2
2
|
|
|
3
3
|
${t.toString()}
|
|
4
|
-
`),o.open&&(t=>{let[r,o]="darwin"===process.platform?["open",[t]]:"win32"===process.platform?["rundll32",["url.dll,FileProtocolHandler",t]]:["xdg-open",[t]];e(r,o,{stdio:"ignore",detached:!0}).on("error",()=>void 0).unref()})(t.toString());let r=await m.callback;try{let e=await
|
|
4
|
+
`),o.open&&(t=>{let[r,o]="darwin"===process.platform?["open",[t]]:"win32"===process.platform?["rundll32",["url.dll,FileProtocolHandler",t]]:["xdg-open",[t]];e(r,o,{stdio:"ignore",detached:!0}).on("error",()=>void 0).unref()})(t.toString());let r=await m.callback;try{let e=await g(o,{code:r.code,codeVerifier:i,port:m.port,name:d});return e.revokeError&&s.warn(`The server did not revoke the token this sign-in replaces (${e.revokeError}). It stays valid on the server. Contact Phoenix support to revoke it.`),await r.finish({signedIn:!0}),s.success(`Signed in to ${e.customerName}. The token is stored in ${e.path}; revoke it with phoenix logout.`),e.telemetryAssociation}catch(e){throw await r.finish({signedIn:!1,message:e instanceof Error?e.message:String(e)}),e}}finally{m.close()}};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{writeFile as e}from"fs/promises";import{createApiBaseClient as
|
|
2
|
-
${e}`),
|
|
1
|
+
import{writeFile as e}from"fs/promises";import{createApiBaseClient as a}from"#package/client";import{resolveApplicationSpecDeploymentData as t}from"../application-spec/index.js";import{exitCli as r}from"../services/index.js";import{formatEnvContent as i,formatEnvLine as s}from"../utils/index.js";export const runPrepareDeploymentCommand=async(n,o)=>{let{logger:l}=o;try{l.step("Preparing deployment");let{apiKey:r,projectKey:o,projectSlug:p,projectRef:c,projectSha:m,environmentSlug:d,outFile:h,skipUpload:u,overrideSchema:f,uploadLinksFile:g,serverUrl:v}=n;l.info(`Preparing deployment for project "${p}", environment "${d}"`);let b=a(v);l.debug(`Using server URL: ${v}`);let y=await t({skipUpload:u,logger:l});if(y.assistantSetup){let{sdl:e,prompt:a,instructions:t}=y.assistantSetup,r=a.length+e.length+(t?.length??0);l.info(`Assistant GraphQL schema:
|
|
2
|
+
${e}`),l.info(`Assistant prompt of this deployment (generated prompt, schema and instructions): ${r} characters`)}l.info("Preparing deployment on server...");let{data:w,error:S}=await b.POST("/environments/prepare",{body:{projectSlug:p,environmentSlug:d,applicationVersion:y.applicationVersion,projectRef:c,projectSha:m,publishedDataHash:y.publishedDataHash,useAuthHook:y.useAuthHook,overrideSchema:f,configurationSchema:{version:y.schemaVersion,schema:y.schema},adminConfigurationSchema:y.adminSchema?{schema:y.adminSchema,version:y.adminSchemaVersion}:void 0,chat:y.chat,embeddings:y.embeddings,...y.assistant?{assistant:!0}:{},acl:{canCreate:y.aclCanCreate},privateFiles:[...y.assets.privateFilePaths],publicFiles:[...y.assets.publicFilePaths]},headers:{"x-api-key":r,"x-project-key":o,"x-project-slug":p}});if(S)throw Error(`Failed to prepare deployment with server: ${S.message}`);if(!w)throw Error("No data returned from server");l.debug("Deployment prepared on server");let{baseDomain:F,isCustomDomain:P}=w,U=w.environmentVariables,k=w.privateUploadUrls,$=w.publicUploadUrls;if(!U||!k||!$)throw Error("Incomplete data returned from server");try{let a=[i(U),s("BASE_DOMAIN",String(F)),s("IS_CUSTOM_DOMAIN",String(P))].join("\n");await e(h,a+"\n"),l.debug(`Environment variables written to ${h}`)}catch(e){throw Error("Failed to write environment variables to file")}try{if(u)await e(g,JSON.stringify({privateFiles:[],publicFiles:[]},null,2)),l.debug("Upload links file cleared (upload was skipped)");else{let a={privateFiles:[...y.assets.privateFilesFullPaths].map(e=>({localPath:e,uploadUrl:k[e.replace(/^assets\/private\//,"")]})),publicFiles:[...y.assets.publicFilesFullPaths].map(e=>({localPath:e,uploadUrl:$[e.replace(/^assets\/public\//,"")]}))};await e(g,JSON.stringify(a,null,2)),l.debug(`Upload links written to ${g}`),l.info('Run "finish" command to upload files and activate the deployment')}}catch(e){throw Error("Failed to write upload links to file")}l.success("Deployment prepared successfully!")}catch(e){l.error(`Deployment preparation failed: ${e instanceof Error?e.message:String(e)}`,e),await r(1)}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{exitCli as e}from"../services/index.js";import{runCommand as i}from"../utils/index.js";export const runRegisterDeploymentCommand=async(t,r)=>{let{logger:s}=r;try{s.warn("DEPRECATED: deployment:register command is deprecated, switch to a new workflow and use deployment:prepare and deployment:finish instead"),s.step("Registering deployment");let e=["register"];t?.server&&e.push("--server",`"${t.server}"`),t?.apiKey&&e.push("--apiKey",`"${t.apiKey}"`),t?.outFile&&e.push("--outFile",`"${t.outFile}"`),t?.skipUpload&&e.push("--skipUpload"),t?.activate===void 0||t.activate||e.push("--activate","false"),t?.overrideSchema&&e.push("--overrideSchema"),e.push("--configPath",'"./.phoenix/phoenix.config.ts"'),await i({command:"deployment-cli",args:e,description:"Registering deployment"},{logger:s}),s.success("Deployment registered successfully!")}catch(i){s.error(`Deployment registration failed: ${i instanceof Error?i.message:String(i)}`,i),await e(1)}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createTRPCClient as e,createWSClient as t,wsLink as r}from"@trpc/client";import{writeFile as o}from"fs/promises";import{resolve as i}from"path";import
|
|
1
|
+
import{createTRPCClient as e,createWSClient as t,wsLink as r}from"@trpc/client";import{writeFile as o}from"fs/promises";import{resolve as i}from"path";import n from"ws";import{exitCli as s}from"../services/index.js";export const runSceneCommand=async(a,c)=>{let{logger:l}=c,m=a.port??"3020",f=a.pretty??!0,p=t({url:`ws://localhost:${m}`,WebSocket:n}),u=e({links:[r({client:p})]});try{let e=await u.getEditorScene.mutate(),t=JSON.stringify(e,null,f?2:void 0);if(a.output){let e=i(a.output);await o(e,t,"utf-8"),l.success(`Scene saved: ${e}`)}else console.log(t)}catch(e){if(e instanceof Error){let t=e.cause;if(null!=t&&"object"==typeof t&&"code"in t&&"ECONNREFUSED"===t.code){l.error("Dev server not running. Start with `phoenix dev`"),await s(1);return}l.error(e.message)}else l.error(`Scene command failed: ${String(e)}`);await s(1)}finally{await p.close()}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createTRPCClient as e,createWSClient as t,wsLink as r}from"@trpc/client";import{resolve as o}from"path";import
|
|
1
|
+
import{createTRPCClient as e,createWSClient as t,wsLink as r}from"@trpc/client";import{resolve as o}from"path";import a from"ws";import{exitCli as i}from"../services/index.js";export const runScreenshotCommand=async(n,s)=>{let{logger:c}=s,l=n.port??"3020",p=n.output??"./screenshot.png",f=n.width??1920,h=n.height??1080,m=n.format?.toUpperCase()??"PNG";if("PNG"!==m&&"JPEG"!==m){c.error(`Invalid format: ${m}. Use PNG or JPEG`),await i(1);return}let u=t({url:`ws://localhost:${l}`,WebSocket:a}),d=e({links:[r({client:u})]});try{let e=await d.takeScreenshot.mutate({width:f,height:h,fileFormat:m,output:o(p)});console.log(`Screenshot saved: ${e.filePath}`)}catch(e){if(e instanceof Error){let t=e.cause;if(null!=t&&"object"==typeof t&&"code"in t&&"ECONNREFUSED"===t.code){c.error("Dev server not running. Start with `phoenix dev`"),await i(1);return}c.error(e.message)}else c.error(`Screenshot failed: ${String(e)}`);await i(1)}finally{await u.close()}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createTRPCClient as t,createWSClient as e,wsLink as
|
|
1
|
+
import{createTRPCClient as t,createWSClient as e,wsLink as i}from"@trpc/client";import{writeFile as r}from"fs/promises";import{resolve as o}from"path";import a from"ws";import{exitCli as n}from"../services/index.js";let s=["entities","navigation","validation"];export const runStateCommand=async(l,c)=>{let{logger:m}=c,f=l.port??"3020",p=l.pretty??!0,u=l.sections?l.sections.split(",").map(t=>t.trim()):[...s],d=u.filter(t=>!s.includes(t));if(d.length>0){m.error(`Invalid sections: ${d.join(", ")}. Valid: ${s.join(", ")}`),await n(1);return}let v=e({url:`ws://localhost:${f}`,WebSocket:a}),w=t({links:[i({client:v})]});try{let t=await w.getEditorState.mutate({sections:u}),e=JSON.stringify(t,null,p?2:void 0);if(l.output){let t=o(l.output);await r(t,e,"utf-8"),m.success(`State saved: ${t}`)}else console.log(e)}catch(t){if(t instanceof Error){let e=t.cause;if(null!=e&&"object"==typeof e&&"code"in e&&"ECONNREFUSED"===e.code){m.error("Dev server not running. Start with `phoenix dev`"),await n(1);return}m.error(t.message)}else m.error(`State command failed: ${String(t)}`);await n(1)}finally{await v.close()}};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import r from"promise-queue";import{generateApplicationSpecStory as e}from"../application-spec/generate-application-spec-story.js";import{
|
|
2
|
-
Found ${
|
|
3
|
-
`),
|
|
1
|
+
import r from"promise-queue";import{generateApplicationSpecStory as e}from"../application-spec/generate-application-spec-story.js";import{exitCli as o}from"../services/index.js";import{resolveGlobToDirectories as t}from"./resolve-story-directories.js";export const buildStoryInDirectory=async(r,o)=>{let{logger:t}=o;t.step(`Building Storybook example in ${r.targetDir}`),await e(r.targetDir,o),t.success(`Completed building Storybook example in ${r.targetDir}`)};export const runStoryBuildCommand=async(e,i)=>{let{logger:s}=i;try{let n=await t(e.folder,e.baseDir);if(0===n.length){let r=e.baseDir?`${e.baseDir}/${e.folder}`:e.folder;s.error(`No directories found matching pattern: ${r}. The pattern did not match any directories in the base directory, ensure the base directory exists and contains matching folders.`),await o(1);return}console.log(`
|
|
2
|
+
Found ${n.length} matching ${1===n.length?"directory":"directories"}:
|
|
3
|
+
`),n.forEach(r=>{console.log(` - ${r}`)}),console.log("");let a=new r(4,1/0),l=[];if(await Promise.all(n.map(async r=>{try{await a.add(()=>buildStoryInDirectory({targetDir:r},i)),console.log("")}catch(e){s.error(`Failed to build story in ${r}: ${e instanceof Error?e.message:String(e)}`),console.log(e),l.push({dir:r,error:e instanceof Error?e:Error(String(e))})}})),l.length>0)throw s.error(`Failed to build ${l.length} ${1===l.length?"story":"stories"}:`),l.forEach(r=>{s.error(` - ${r.dir}: ${r.error.message}`)}),Error("Failed to build stories");s.success(`Completed building ${n.length} ${1===n.length?"story":"stories"}!`)}catch(r){throw s.error(`Story build failed: ${r instanceof Error?r.message:String(r)}`),r}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{basename as r,join as e}from"path";import{
|
|
1
|
+
import{basename as r,join as e}from"path";import{exitCli as t}from"../services/index.js";import{generateInitialStory as a}from"../story-scaffolding/index.js";import{askQuestion as o,exists as i,toPascalCase as s}from"../utils/index.js";import{buildStoryInDirectory as n}from"./story-build.js";export const runStoryCreateCommand=async(m={},c)=>{let{logger:y}=c;try{y.step("Creating new Storybook example");let f=m.name;if(!f)for(;!f;){let r=await o('Enter the story name (e.g., "my-feature" or "MyFeature"): ');if(!r||0===r.trim().length){y.error("Story name is required");continue}if(!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(r)){y.error("Story name must start with a letter and contain only letters, numbers, hyphens, and underscores");continue}f=r.trim()}if(!f){y.error("Story name is required"),await t(1);return}if(await i(e(process.cwd(),`src/${f}`))){y.error(`Story ${f} already exists`),await t(1);return}let l=e(process.cwd(),`src/examples/${f}`),u=s(r(l));await a(l,u),await n({targetDir:l},c),y.success(`Story created successfully in ${l}!`)}catch(r){y.error(`Story creation failed: ${r instanceof Error?r.message:String(r)}`,r),await t(1)}};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{globby as e}from"globby";import{rmSync as r}from"node:fs";import{mkdir as o,writeFile as t}from"node:fs/promises";import{dirname as s,resolve as i}from"node:path";import{startEditorServer as a}from"../editor-server/index.js";import{
|
|
2
|
-
`),a},
|
|
1
|
+
import{globby as e}from"globby";import{rmSync as r}from"node:fs";import{mkdir as o,writeFile as t}from"node:fs/promises";import{dirname as s,resolve as i}from"node:path";import{startEditorServer as a}from"../editor-server/index.js";import{PhoenixApplication as n,STORY_DEV_MARKER_PATH as l,readActiveStoryDevMarker as c}from"../services/index.js";import{resolveGlobToDirectories as d}from"./resolve-story-directories.js";import{runStoryBuildCommand as f}from"./story-build.js";let p=async(r,o)=>{let t=o?i(process.cwd(),o):s(r),a=new Set([r,...(await e(`*/${l}`,{cwd:t,absolute:!0})).map(e=>s(s(e)))]);return(await Promise.all([...a].map(c))).find(e=>null!==e)??null},w=async(e,r)=>{let a=i(e,l),n={projectRoot:e,pid:process.pid,port:r};return await o(s(a),{recursive:!0}),await t(a,`${JSON.stringify(n)}
|
|
2
|
+
`),a},g=async(e,o)=>{let t=await d(e.folder,e.baseDir),[s]=t,i=e.editorWsPort??3120;if(!s||1!==t.length)throw Error(`Story dev requires exactly one existing story folder, but "${e.folder}" resolved ${t.length}. Pass one concrete folder and check the base directory.`);let l=await p(s,e.baseDir);if(l)throw Error(`Story dev is already running for "${l.projectRoot}" (PID ${l.pid}) on port ${l.port}. Stop that process before starting another story.`);let c=await w(s,i),g=()=>r(c,{force:!0});process.once("exit",g);let m=new n({projectRoot:s,mode:"story",development:void 0,editorPort:i},{logger:o.logger,createEditorServer:a,onProjectPrepared:()=>{},onStartupFailure:()=>{},onBrowserConsole:()=>{}}),y=!1,u=async()=>{y||(y=!0,process.off("exit",g),await m.close(),r(c,{force:!0}))};try{return o.logger.step(`Building application-spec story in ${s}`),await f({folder:s,baseDir:e.baseDir},o),await m.start(),o.logger.success(`Story dev is running for ${s}`),o.logger.info(`Editor WebSocket: ws://localhost:${i}`),o.logger.info("Source changes update the editor without regenerating Storybook files."),{markerPath:c,close:u}}catch(e){throw await u(),e}};export const runStoryDevCommand=async(e,r)=>{let o;if(o=e.folder,/[*?[\]{}()!]/.test(o))throw Error(`Story dev accepts one concrete story folder, but "${e.folder}" contains glob syntax. Pass a folder name without wildcards.`);let t=await g(e,r),s=null,i=new Promise(e=>{s=e}),a=()=>s?.();process.once("SIGINT",a),process.once("SIGTERM",a),e.shutdownSignal?.addEventListener("abort",a,{once:!0}),e.shutdownSignal?.aborted&&a();try{await i}finally{process.off("SIGINT",a),process.off("SIGTERM",a),e.shutdownSignal?.removeEventListener("abort",a),await t.close()}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{generateProjectFiles as e}from"../application-spec/index.js";export const runSyncCommand=async(
|
|
1
|
+
import{generateProjectFiles as e,logDiagnostics as s}from"../application-spec/index.js";import{exitCli as c}from"../services/index.js";export const runSyncCommand=async(i,r)=>{let{logger:t}=r,{sdkVersion:n,projectSlug:o,environmentSlug:l,cliUseWorkspace:a,enableEditor:p,force:f=!1,analyze:m=!1}=i;try{t.step("Syncing Phoenix project files"),t.step("Building project files");let{diagnostics:c}=await e({sdkVersion:n,projectSlug:o,environmentSlug:l,cliUseWorkspace:a,enableEditor:p,inlineTemplates:!0,force:f,analyze:m},r);s(c,t),t.success("Project files built successfully"),t.success("Sync completed successfully!")}catch(e){t.error(`Sync failed: ${e instanceof Error?e.message:String(e)}`,e),await c(1)}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createTRPCClient as e,createWSClient as t,wsLink as o}from"@trpc/client";import{existsSync as r,readFileSync as i,readdirSync as n,rmSync as a,statSync as s}from"fs";import{isAbsolute as l,join as c,relative as p,resolve as d,sep as h}from"path";import f from"ws";import{
|
|
1
|
+
import{createTRPCClient as e,createWSClient as t,wsLink as o}from"@trpc/client";import{existsSync as r,readFileSync as i,readdirSync as n,rmSync as a,statSync as s}from"fs";import{isAbsolute as l,join as c,relative as p,resolve as d,sep as h}from"path";import f from"ws";import{exitCli as w}from"../services/index.js";import{toPosixPath as m}from"../utils/path.js";let u=".phoenix",v="variants",g=".variant.js",y=".html",$={"&":"&","<":"<",">":">",""":'"',"'":"'"},b=e=>{let t=e?.trim();return""===t?void 0:t},C=e=>b(e?.replace(/&(?:amp|lt|gt|quot|#39);/g,e=>$[e]??e)),E=(e,t)=>{let o=e.match(RegExp(`export\\s+const\\s+${t}\\s*=\\s*(['"\`])((?:\\\\.|(?!\\1).)*)\\1`))?.[2];return b(o?.replace(/\\(.)/g,"$1"))};export const readVariantSet=e=>{let t=d(e.projectRoot,u),o=c(t,v),a=d(e.projectRoot,e.directory),f=p(o,a),w=`${u}/${v}/<name>/`;if(""===f||".."===f||f.startsWith(`..${h}`)||l(f))throw Error(`Cannot preview ${e.directory}: the dev server only shows options from a folder of their own below ${u}/${v}/. Write the option files to ${w} and pass that folder`);if(!r(a)||!s(a).isDirectory())throw Error(`Cannot preview ${e.directory}: there is no such folder. Write one ${g} or ${y} file per option to ${w} first`);let $=n(a),b=Math.round(Math.max(0,...$.map(e=>s(c(a,e)).mtimeMs))),x=$.filter(e=>e.endsWith(g)||e.endsWith(y)).sort().map(e=>(e=>{let{webRoot:t,directory:o,name:r,version:n}=e,a=c(o,r),s=i(a,"utf8"),l=`/${m(p(t,a)).split("/").map(encodeURIComponent).join("/")}`,d=r.endsWith(g),h=r.slice(0,-(d?g:y).length),f=s.match(/<meta\b[^>]*\bname=(["'])description\1[^>]*>/i)?.[0];return{id:h,kind:d?"script":"page",label:(d?E(s,"title"):C(s.match(/<title[^>]*>([^<]*)<\/title>/i)?.[1]))??h,description:(d?E(s,"description"):C(f?.match(/\bcontent=(["'])(.*?)\1/i)?.[2]))??"",url:`${l}?t=${n}`}})({webRoot:t,directory:a,name:e,version:b}));if(0===x.length)throw Error(`Cannot preview ${e.directory}: it holds no ${g} or ${y} file, so there is no option to show. Write one file per option; any other file is a helper the options share`);let R=x.find((e,t)=>x.findIndex(t=>t.id===e.id)!==t);if(R)throw Error(`Cannot preview ${e.directory}: two options are named "${R.id}", and the answer names an option by its file name without the suffix. Rename one of the files`);return{directory:a,variantsRoot:o,options:x}};let x=r=>{let i=t({url:`ws://localhost:${r}`,WebSocket:f});return{wsClient:i,client:e({links:[o({client:i})]})}},R=e=>{console.log(JSON.stringify(e,null,2))},j=async e=>{let{wsClient:t,client:o}=x(e);try{let{closed:e}=await o.closeVariantPreview.mutate();R({status:"closed",message:e?"The open preview was closed.":"No preview was open."})}finally{await t.close()}},S=async(e,t,o,i)=>{let{wsClient:s,client:l}=x(t.port);try{let s=await l.previewVariants.mutate({title:t.title??"Which option do you prefer?",description:t.description??"",variants:[...e.options],timeoutMs:o});if("waiting"===s.status)return void R({status:"waiting",message:"The preview is still open and nothing was picked yet. Run the same command again to keep waiting."});if("closed"===s.status)return void R({status:"closed",message:"The preview was closed before an answer was given. The option folder is kept."});await l.claimVariantChoice.mutate({requestId:s.requestId});let c=e.options.find(e=>e.id===s.choice);if(R({status:"chosen",choice:s.choice,label:c?.label??"Original"}),!t.keep)try{a(e.directory,{recursive:!0,force:!0}),r(e.variantsRoot)&&0===n(e.variantsRoot).length&&a(e.variantsRoot,{recursive:!0,force:!0})}catch(t){i.logger.warn(`Could not remove ${e.directory} after the answer: ${t instanceof Error?t.message:String(t)}. Remove the folder yourself`)}}finally{await s.close()}};export const runVariantsCommand=async(e,t)=>{let{logger:o}=t;try{if(e.close)return void await j(e.port);if(void 0===e.directory)throw Error(`Cannot preview without a folder: the options to show are read from it. Pass ${u}/${v}/<name>/, or --close to close the open preview`);let o=(e=>{let t=Math.round((e??540)*1e3);if(!Number.isFinite(t)||t<=0)throw Error(`Cannot wait for ${e} seconds: --timeout is how long the command waits for the answer. Pass a positive number of seconds`);if(t>0x7fffffff)throw Error(`Cannot wait for ${e} seconds: a wait is at most ${Math.floor(2147483.647)} seconds. Pass a smaller --timeout and run the command again while it answers "waiting"`);return t})(e.timeout),r=readVariantSet({projectRoot:process.cwd(),directory:e.directory});await S(r,e,o,t)}catch(e){o.error((e=>{let t;if(!(e instanceof Error))return`Variant preview failed: ${String(e)}`;let o=e.cause;return null!=o&&"object"==typeof o&&"code"in o&&"ECONNREFUSED"===o.code?"Dev server not running. Start with `phoenix dev`":"object"==typeof(t="data"in e?e.data:void 0)&&null!==t&&"code"in t&&"NOT_FOUND"===t.code?"Cannot preview: the dev server that is running has no variant previews, because it runs the legacy pipeline or an older SDK. Variant previews need `phoenix dev` of a project on the application-spec pipeline, started with this SDK version":e.message})(e)),await w(1)}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{observable as e}from"@trpc/server/observable";import{writeFile as t}from"fs/promises";import{resolve as r}from"path";import{filter as s,firstValueFrom as n,timeout as o}from"rxjs";import{z as i}from"zod";import{LOG_STREAMS as u}from"../services/log-bus.js";import{publicProcedure as a,router as l}from"./trpc.js";let
|
|
1
|
+
import{observable as e}from"@trpc/server/observable";import{writeFile as t}from"fs/promises";import{resolve as r}from"path";import{filter as s,firstValueFrom as n,timeout as o}from"rxjs";import{z as i}from"zod";import{LOG_STREAMS as u}from"../services/log-bus.js";import{publicProcedure as a,router as l}from"./trpc.js";let c=i.enum(["all",...u]),b=e=>{if(!e.application.variantPreviews)throw Error("Cannot preview variants: this session cannot rewrite project files, because it is not `phoenix dev`. Run `phoenix dev` in the project and try again");return e.application.variantPreviews};export const commandsRouter=l({getLogs:a.input(i.object({stream:c,beforeSeq:i.number().int().positive().optional(),limit:i.number().int().positive().max(500).default(200)})).query(({input:e,ctx:t})=>{if(!t.application.logs)return{entries:[],hasMore:!1,counts:null};let r=t.application.logs.query(e);return{entries:r.entries,hasMore:r.hasMore,counts:t.application.logs.allCounts()}}),onLog:a.subscription(({ctx:t})=>e(e=>t.application.logs?t.application.logs.subscribe(t=>{e.next(t)}):()=>{})),getTunnelState:a.query(({ctx:e})=>e.application.tunnelMonitor?{state:e.application.tunnelMonitor.state(),entries:e.application.tunnelMonitor.summaries()}:{state:null,entries:[]}),getTunnelRequest:a.input(i.object({seq:i.number().int().positive()})).query(({ctx:e,input:t})=>e.application.tunnelMonitor?.entry(t.seq)??null),onTunnelEvent:a.subscription(({ctx:t})=>e(e=>t.application.tunnelMonitor?t.application.tunnelMonitor.subscribe(t=>{e.next(t)}):()=>{})),takeScreenshot:a.input(i.object({width:i.number().int().positive(),height:i.number().int().positive(),fileFormat:i.enum(["PNG","JPEG"]),output:i.string()})).mutation(async({input:e,ctx:i})=>{let u;if(0===i.pubsub.screenshotRequest$.observers.length)throw Error("No editor connected. Open the configurator in a browser");let a=crypto.randomUUID(),l=n(i.pubsub.screenshotResult$.pipe(s(e=>e.requestId===a),o(3e4)));i.pubsub.screenshotRequest$.next({requestId:a,width:e.width,height:e.height,fileFormat:e.fileFormat});try{u=await l}catch{throw Error("Screenshot timed out. Ensure configurator is fully loaded")}let c=r(e.output),b=Buffer.from(u.imageBase64,"base64");try{await t(c,b)}catch(e){throw Error(`Failed to save screenshot: ${e instanceof Error?e.message:String(e)}`)}return{filePath:c}}),onScreenshotRequest:a.subscription(({ctx:t})=>e(e=>{let r=t.pubsub.screenshotRequest$.subscribe({next:r=>{t.logger.debug(`Emitting screenshot request to subscriber: ${r.requestId}`),e.next(r)},error:r=>{t.logger.error(`Screenshot request subject error: ${r instanceof Error?r.message:String(r)}`),e.error(r)}});return()=>{t.logger.debug("Screenshot request subscription unsubscribed"),r.unsubscribe()}})),submitScreenshot:a.input(i.object({requestId:i.string(),imageBase64:i.string(),fileFormat:i.enum(["PNG","JPEG"])})).mutation(({input:e,ctx:t})=>{t.logger.debug(`Received screenshot result for request: ${e.requestId}`),t.pubsub.screenshotResult$.next({requestId:e.requestId,imageBase64:e.imageBase64,fileFormat:e.fileFormat})}),reportBrowserConsole:a.input(i.object({level:i.enum(["error","warn","info"]),message:i.string(),source:i.string().optional(),timestamp:i.string().optional()})).mutation(({input:e,ctx:t})=>{if(!t.application.logs){let r=e.source?`browser:${e.source}`:"browser";t.logger.warn(`[${r}] ${e.message}`)}t.pubsub.browserConsole$.next({level:e.level,message:e.message,source:e.source,timestamp:e.timestamp})}),onBrowserConsole:a.subscription(({ctx:t})=>e(e=>{let r=t.pubsub.browserConsole$.subscribe({next:t=>{e.next(t)},error:r=>{t.logger.error(`Browser console subject error: ${r instanceof Error?r.message:String(r)}`),e.error(r)}});return()=>{r.unsubscribe()}})),getEditorState:a.input(i.object({sections:i.array(i.enum(["entities","navigation","validation"])).optional()})).mutation(async({input:e,ctx:t})=>{let r;if(0===t.pubsub.stateRequest$.observers.length)throw Error("No editor connected. Open the configurator in a browser");let i=crypto.randomUUID(),u=e.sections??["entities","navigation","validation"],a=n(t.pubsub.stateResult$.pipe(s(e=>e.requestId===i),o(1e4)));t.pubsub.stateRequest$.next({requestId:i,sections:u});try{r=await a}catch{throw Error("State request timed out. Ensure configurator is fully loaded")}return r.state}),onStateRequest:a.subscription(({ctx:t})=>e(e=>{let r=t.pubsub.stateRequest$.subscribe({next:r=>{t.logger.debug(`Emitting state request to subscriber: ${r.requestId}`),e.next(r)},error:r=>{t.logger.error(`State request subject error: ${r instanceof Error?r.message:String(r)}`),e.error(r)}});return()=>{t.logger.debug("State request subscription unsubscribed"),r.unsubscribe()}})),submitEditorState:a.input(i.object({requestId:i.string(),state:i.object({lifecycle:i.object({domainLoaded:i.boolean(),domainContextReady:i.boolean(),configuratorReady:i.boolean(),sessionAuthenticated:i.boolean(),editorMode:i.boolean()}),entities:i.array(i.record(i.unknown())).nullable(),navigation:i.record(i.unknown()).nullable(),validation:i.record(i.unknown()).nullable()})})).mutation(({input:e,ctx:t})=>{t.logger.debug(`Received editor state for request: ${e.requestId}`),t.pubsub.stateResult$.next({requestId:e.requestId,state:e.state})}),getEditorData:a.mutation(async({ctx:e})=>{let t;if(0===e.pubsub.dataRequest$.observers.length)throw Error("No editor connected. Open the configurator in a browser");let r=crypto.randomUUID(),i=n(e.pubsub.dataResult$.pipe(s(e=>e.requestId===r),o(1e4)));e.pubsub.dataRequest$.next({requestId:r});try{t=await i}catch{throw Error("Data request timed out. Ensure configurator is fully loaded")}return t.data}),onDataRequest:a.subscription(({ctx:t})=>e(e=>{let r=t.pubsub.dataRequest$.subscribe({next:r=>{t.logger.debug(`Emitting data request to subscriber: ${r.requestId}`),e.next(r)},error:r=>{t.logger.error(`Data request subject error: ${r instanceof Error?r.message:String(r)}`),e.error(r)}});return()=>{t.logger.debug("Data request subscription unsubscribed"),r.unsubscribe()}})),submitEditorData:a.input(i.object({requestId:i.string(),data:i.object({publishedData:i.record(i.unknown()).nullable(),frontendData:i.record(i.unknown()).nullable(),backendData:i.record(i.unknown()).nullable(),sessionData:i.record(i.unknown()).nullable(),accessData:i.record(i.unknown()).nullable(),webComponentProperties:i.record(i.unknown()).nullable()})})).mutation(({input:e,ctx:t})=>{t.logger.debug(`Received editor data for request: ${e.requestId}`),t.pubsub.dataResult$.next({requestId:e.requestId,data:e.data})}),getEditorScene:a.mutation(async({ctx:e})=>{let t;if(0===e.pubsub.sceneRequest$.observers.length)throw Error("No editor connected. Open the configurator in a browser");let r=crypto.randomUUID(),i=n(e.pubsub.sceneResult$.pipe(s(e=>e.requestId===r),o(1e4)));e.pubsub.sceneRequest$.next({requestId:r});try{t=await i}catch{throw Error("Scene request timed out. Ensure configurator is fully loaded")}return t.scene}),onSceneRequest:a.subscription(({ctx:t})=>e(e=>{let r=t.pubsub.sceneRequest$.subscribe({next:r=>{t.logger.debug(`Emitting scene request to subscriber: ${r.requestId}`),e.next(r)},error:r=>{t.logger.error(`Scene request subject error: ${r instanceof Error?r.message:String(r)}`),e.error(r)}});return()=>{t.logger.debug("Scene request subscription unsubscribed"),r.unsubscribe()}})),submitEditorScene:a.input(i.object({requestId:i.string(),scene:i.record(i.unknown()).nullable()})).mutation(({input:e,ctx:t})=>{t.logger.debug(`Received editor scene for request: ${e.requestId}`),t.pubsub.sceneResult$.next({requestId:e.requestId,scene:e.scene})}),previewVariants:a.input(i.object({title:i.string(),description:i.string(),variants:i.array(i.object({id:i.string(),kind:i.enum(["script","page"]),label:i.string(),description:i.string(),url:i.string().refine(e=>{try{let t=decodeURIComponent(new URL(e,"http://variant.invalid").pathname);return e.startsWith("/variants/")&&t.startsWith("/variants/")&&!t.includes("\\")&&!t.split("/").some(e=>"."===e||".."===e)}catch{return!1}},"Option URLs must stay below /variants/; use a file from the variant set")})).min(1),timeoutMs:i.number().int().positive().max(0x7fffffff)})).mutation(({input:e,ctx:t})=>b(t).open(e)),onVariantPreview:a.subscription(({ctx:t})=>e(e=>{let r=t.application.variantPreviews;if(!r)return e.next(null),()=>void 0;let s=r.request$.subscribe(t=>{e.next(t)});return()=>{s.unsubscribe()}})),getVariantBaseline:a.input(i.object({requestId:i.string()})).query(({input:e,ctx:t})=>b(t).getBaseline(e.requestId)),applyVariantFiles:a.input(i.object({requestId:i.string(),choice:i.string().nullable(),files:i.array(i.object({fileName:i.string(),content:i.string().nullable()}))})).mutation(({input:e,ctx:t})=>b(t).applyFiles(e)),submitVariantChoice:a.input(i.object({requestId:i.string(),choice:i.string().nullable()})).mutation(({input:e,ctx:t})=>b(t).submit(e)),closeVariantPreview:a.mutation(({ctx:e})=>e.application.variantPreviews?.close()??Promise.resolve({closed:!1})),claimVariantChoice:a.input(i.object({requestId:i.string()})).mutation(({input:e,ctx:t})=>{t.application.variantPreviews?.claim(e.requestId)})});
|
|
@@ -1,20 +1,9 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { PhoenixApplication } from '../services/phoenix-application.js';
|
|
3
|
-
import type { WebhookTunnelMonitor } from '../services/webhook-tunnel-monitor.js';
|
|
1
|
+
import type { EditorServerHandle, PhoenixApplication } from '../services/index.js';
|
|
4
2
|
import type { Logger } from '../utils/index.js';
|
|
5
3
|
export interface EditorServerOptions {
|
|
6
4
|
readonly port: number;
|
|
7
|
-
readonly projectRoot: string;
|
|
8
5
|
readonly application: PhoenixApplication;
|
|
9
6
|
readonly logger: Logger;
|
|
10
7
|
readonly debug?: boolean;
|
|
11
|
-
/** Bound to this dev session; absent for offline and story sessions. */
|
|
12
|
-
readonly prepareDeployment?: () => Promise<void>;
|
|
13
|
-
readonly storyMode?: boolean;
|
|
14
|
-
readonly logBus?: LogBus;
|
|
15
|
-
readonly tunnelMonitor?: WebhookTunnelMonitor;
|
|
16
8
|
}
|
|
17
|
-
export declare const startEditorServer: ({ port,
|
|
18
|
-
ready: Promise<void>;
|
|
19
|
-
close: () => Promise<void>;
|
|
20
|
-
};
|
|
9
|
+
export declare const startEditorServer: ({ port, application, logger }: EditorServerOptions) => EditorServerHandle;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{applyWSSHandler as e}from"@trpc/server/adapters/ws";import{WebSocketServer as
|
|
1
|
+
import{applyWSSHandler as e}from"@trpc/server/adapters/ws";import{WebSocketServer as o}from"ws";import{appRouter as r}from"./editor-router.js";export const startEditorServer=({port:t,application:n,logger:i})=>{let s=new o({port:t}),c=e({wss:s,router:r,createContext:()=>({projectRoot:n.projectRoot,pubsub:n.pubsub,application:n,logger:i})});s.on("connection",(e,o)=>{let r=o.headers.origin??"unknown";i.info(`WS connected (clients: ${s.clients.size}, origin: ${r})`),e.on("error",e=>{i.warn(`WS error: ${e.message}`)}),e.once("close",(e,o)=>{i.info(`WS disconnected (clients: ${s.clients.size}, code: ${e}, reason: ${o.toString()||"none"})`)})}),s.on("error",e=>{i.error(`WebSocket server error: ${e.message}`)});let l=new Promise((e,o)=>{let r=()=>{s.off("error",n),i.info(`WebSocket Server listening on ws://localhost:${t}`),e()},n=e=>{s.off("listening",r),o(e)};s.once("listening",r),s.once("error",n)}),a=null;return{ready:l,close:()=>a||(i.info("Shutting down WebSocket server"),c.broadcastReconnectNotification(),a=new Promise((e,o)=>{let r=setTimeout(()=>{for(let e of s.clients)e.terminate()},3e3);s.close(t=>{clearTimeout(r),t?o(t):e()})}))}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{TRPCError as e}from"@trpc/server";import{observable as o}from"@trpc/server/observable";import{writeFile as t}from"fs/promises";import{join as
|
|
1
|
+
import{TRPCError as e}from"@trpc/server";import{observable as o}from"@trpc/server/observable";import{writeFile as t}from"fs/promises";import{join as i}from"path";import{z as r}from"zod";import{readApplicationFiles as p}from"../application-spec/index.js";import{exists as a}from"../utils/index.js";import{publicProcedure as s,router as n}from"./trpc.js";export const specRouter=n({getEditorConfig:s.query(()=>({specSync:!0})),prepareDeployment:s.mutation(async({ctx:o})=>{if(o.application.variantPreviews?.isOpen)throw new e({code:"BAD_REQUEST",message:"Deployment preparation is disabled during variant previews. Close the preview first."});if("story"===o.application.mode)throw new e({code:"BAD_REQUEST",message:"Deployment preparation is disabled in Storybook story mode."});if(!o.application.deploymentPreparation)throw new e({code:"BAD_REQUEST",message:"Deployment preparation requires a deployment configuration outside story mode."});await o.application.deploymentPreparation.prepare()}),requestSpecFiles:s.mutation(async({ctx:e})=>{let o="story"===e.application.mode?await p({projectRoot:e.projectRoot,envs:{}}):await p();e.pubsub.specFile$.next({rawProjectFiles:o,projectRoot:e.projectRoot})}),save:s.input(r.array(r.object({fileName:r.string(),content:r.string()}))).mutation(async({ctx:o,input:r})=>{if(o.application.variantPreviews?.isOpen)throw new e({code:"BAD_REQUEST",message:"Close the variant preview before editing source files."});for(let e of r){let r=i(o.projectRoot,e.fileName),p=i(o.projectRoot,e.fileName.split("/").slice(0,-1).join("/"));await a(p)&&await t(r,e.content)}}),onSpecChange:s.subscription(({ctx:e})=>o(o=>{let t=e.pubsub.specFile$.subscribe(e=>{o.next(e)});return()=>{t.unsubscribe()}}))});
|
|
@@ -1,21 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { PhoenixApplication } from '../services/index.js';
|
|
2
2
|
import type { PhoenixPubSub } from '../services/phoenix-pubsub.js';
|
|
3
|
-
import type { VariantPreviewService } from '../services/variant-preview-service.js';
|
|
4
|
-
import type { WebhookTunnelMonitor } from '../services/webhook-tunnel-monitor.js';
|
|
5
3
|
import type { Logger } from '../utils/index.js';
|
|
6
4
|
export type Context = {
|
|
7
5
|
readonly projectRoot: string;
|
|
8
6
|
readonly pubsub: PhoenixPubSub;
|
|
9
7
|
readonly logger: Logger;
|
|
10
|
-
|
|
11
|
-
readonly variantPreviews: VariantPreviewService | undefined;
|
|
12
|
-
/** Bound to this dev session; absent for offline and story sessions. */
|
|
13
|
-
readonly prepareDeployment?: () => Promise<void>;
|
|
14
|
-
readonly storyMode?: boolean;
|
|
15
|
-
/** Dev-server log buffer backing the editor Logs panel; absent in story mode. */
|
|
16
|
-
readonly logBus?: LogBus;
|
|
17
|
-
/** Dev-process tunnel state backing the editor Webhook Tunnel panel. */
|
|
18
|
-
readonly tunnelMonitor?: WebhookTunnelMonitor;
|
|
8
|
+
readonly application: PhoenixApplication;
|
|
19
9
|
};
|
|
20
10
|
export declare const router: import("@trpc/server").TRPCRouterBuilder<{
|
|
21
11
|
ctx: Context;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { LINGUI_CONFIG_PATH, bootstrapLinguiCatalogs, compileLingui, extractAndCompileLingui } from './lingui.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{LINGUI_CONFIG_PATH,bootstrapLinguiCatalogs,compileLingui,extractAndCompileLingui}from"./lingui.js";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type Logger } from '../utils/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* The project's Lingui configuration, which sync generates, relative to the project root. The Lingui
|
|
4
|
+
* CLI is given this path and Vite loads its plugins from a fresh snapshot of this file, so a
|
|
5
|
+
* `.linguirc` that earlier SDK versions left in the project root is not read. The Lingui CLI searches
|
|
6
|
+
* the working directory instead only when the named file is missing; generation writes it with the rest
|
|
7
|
+
* of `.phoenix/` before Phoenix runs Lingui or Vite. Missing-catalog bootstrap compiles with a temporary
|
|
8
|
+
* copy that stages output while keeping every locale available for fallback reads.
|
|
9
|
+
*/
|
|
10
|
+
export declare const LINGUI_CONFIG_PATH = ".phoenix/.linguirc";
|
|
11
|
+
interface LinguiCommandContext {
|
|
12
|
+
readonly logger: Logger;
|
|
13
|
+
}
|
|
14
|
+
export declare const compileLingui: (context: LinguiCommandContext) => Promise<void>;
|
|
15
|
+
export declare const extractAndCompileLingui: (context: LinguiCommandContext) => Promise<void>;
|
|
16
|
+
/** Creates only catalogs missing from a project's generated domain imports; continuous updates stay opt-in. */
|
|
17
|
+
export declare const bootstrapLinguiCatalogs: (locales: readonly string[], context: LinguiCommandContext) => Promise<void>;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{constants as i}from"node:fs";import{copyFile as a,mkdir as t,mkdtemp as e,readFile as o,rm as n,writeFile as s}from"node:fs/promises";import{dirname as r,join as l}from"node:path";import{exists as c,runSdkTool as g}from"../utils/index.js";export const LINGUI_CONFIG_PATH=".phoenix/.linguirc";let p=async i=>{await g({tool:{packageName:"@lingui/cli",binName:"lingui"},args:["extract","--config",LINGUI_CONFIG_PATH],description:"Extracting i18n messages",quiet:!0,extraEnv:{LC_ALL:"en_US.UTF-8"}},i)};export const compileLingui=async i=>{await g({tool:{packageName:"@lingui/cli",binName:"lingui"},args:["compile","--config",LINGUI_CONFIG_PATH],description:"Compiling i18n messages",quiet:!0},i)};export const extractAndCompileLingui=async i=>{await p(i),await compileLingui(i)};export const bootstrapLinguiCatalogs=async(p,m)=>{let u,f=(await Promise.all(p.map(async i=>await c(`src/locales/${i}/messages.ts`)?[]:[i]))).flat();if(0!==f.length)try{m.logger.info(`Bootstrapping missing i18n catalogs: ${f.join(", ")}`);let n=(await Promise.all(f.map(async i=>await c(`src/locales/${i}/messages.po`)?[]:[i]))).flat();n.length>0&&await g({tool:{packageName:"@lingui/cli",binName:"lingui"},args:["extract","--config",LINGUI_CONFIG_PATH,"--locale",n.join(",")],description:"Extracting missing i18n catalogs",quiet:!0,extraEnv:{LC_ALL:"en_US.UTF-8"}},m);let p=JSON.parse(await o(LINGUI_CONFIG_PATH,"utf-8"));if("object"!=typeof p||null===p||Array.isArray(p))throw Error(`${LINGUI_CONFIG_PATH} is not a configuration object`);u=await e(".phoenix/lingui-bootstrap-");let N=l(u,".linguirc");for(let e of(await s(N,JSON.stringify({...p,catalogsMergePath:l(u,"compiled","{locale}","messages").replaceAll("\\","/")})),await g({tool:{packageName:"@lingui/cli",binName:"lingui"},args:["compile","--config",N],description:"Compiling missing i18n catalogs",quiet:!0},m),f)){let o=l("src","locales",e,"messages.ts");await t(r(o),{recursive:!0}),await a(l(u,"compiled",e,"messages.ts"),o,i.COPYFILE_EXCL)}}catch(i){throw Error(`Cannot bootstrap i18n catalogs for ${f.join(", ")}: ${i instanceof Error?i.message:String(i)}. Fix the reported Lingui error and restart phoenix dev, or run phoenix sync to update all catalogs.`,{cause:i})}finally{void 0!==u&&await n(u,{recursive:!0,force:!0})}};
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { type ViteDevServer } from 'vite';
|
|
2
2
|
import type { Logger } from '../utils/index.js';
|
|
3
|
+
import type { DeploymentPreparationService } from './deployment/index.js';
|
|
4
|
+
import type { LinguiWatcher } from './lingui-watcher.js';
|
|
3
5
|
import type { PhoenixPubSub } from './phoenix-pubsub.js';
|
|
6
|
+
import type { PhoenixStore } from './phoenix-store.js';
|
|
4
7
|
import type { VariantFileEdit } from './variant-file-session.js';
|
|
5
8
|
export declare const WATCH_PATTERNS: string[];
|
|
6
9
|
export declare const IGNORED_PATTERNS: string[];
|
|
@@ -8,8 +11,6 @@ export declare const IGNORED_PATTERNS: string[];
|
|
|
8
11
|
export interface ApplicationSpecProjectWatcherConfig {
|
|
9
12
|
readonly pubsub: PhoenixPubSub;
|
|
10
13
|
readonly logger: Logger;
|
|
11
|
-
readonly onRebuilt?: () => void;
|
|
12
|
-
readonly onViteServerChange?: (viteServer: ViteDevServer) => void;
|
|
13
14
|
readonly sdkVersion: string;
|
|
14
15
|
readonly projectSlug: string;
|
|
15
16
|
readonly environmentSlug: string;
|
|
@@ -18,6 +19,12 @@ export interface ApplicationSpecProjectWatcherConfig {
|
|
|
18
19
|
readonly inlineTemplates: boolean;
|
|
19
20
|
readonly useServer: boolean;
|
|
20
21
|
}
|
|
22
|
+
/** Services the watcher notifies after a rebuild; the store owns its replaceable Vite handle. */
|
|
23
|
+
export interface ApplicationSpecProjectWatcherContext {
|
|
24
|
+
readonly store: PhoenixStore;
|
|
25
|
+
readonly linguiWatcher: LinguiWatcher | undefined;
|
|
26
|
+
readonly deploymentPreparation: DeploymentPreparationService | undefined;
|
|
27
|
+
}
|
|
21
28
|
/**
|
|
22
29
|
* Application-spec project watcher with layered caching via {@link ApplicationSpecBuilder}:
|
|
23
30
|
*
|
|
@@ -29,22 +36,20 @@ export interface ApplicationSpecProjectWatcherConfig {
|
|
|
29
36
|
* Rebuilds are serialized via PromiseQueue(1).
|
|
30
37
|
*/
|
|
31
38
|
export declare class ApplicationSpecProjectWatcher {
|
|
39
|
+
private readonly context;
|
|
32
40
|
private watcher;
|
|
33
41
|
private subscription;
|
|
34
42
|
private readonly rebuildQueue;
|
|
35
43
|
/** Each watcher event emits the changed source path; debounced + buffered into batches. */
|
|
36
44
|
private readonly changeSubject$;
|
|
37
|
-
private viteServer;
|
|
38
45
|
private readonly pubsub;
|
|
39
46
|
private readonly logger;
|
|
40
|
-
private readonly onRebuilt?;
|
|
41
|
-
private readonly onViteServerChange?;
|
|
42
47
|
private readonly builder;
|
|
43
48
|
private readonly useServer;
|
|
44
49
|
private isShuttingDown;
|
|
45
50
|
private suspended;
|
|
46
51
|
private readonly heldChanges;
|
|
47
|
-
constructor(config: ApplicationSpecProjectWatcherConfig);
|
|
52
|
+
constructor(config: ApplicationSpecProjectWatcherConfig, context: ApplicationSpecProjectWatcherContext);
|
|
48
53
|
start(viteServer: ViteDevServer): void;
|
|
49
54
|
/** Rebuilds a batch a variant comparison wrote, at once and without the server work of a source change. */
|
|
50
55
|
applyVariantFiles(files: readonly VariantFileEdit[]): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
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
|
|
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 c}from"vite";import{watch as a}from"#package/watch";import{ApplicationSpecBuilder as l}from"../application-spec/application-spec-builder.js";import{logDiagnostics as h}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";export const WATCH_PATTERNS=["package.json","spec/**/*.{yaml,yml}","src/**/*.{ts,tsx,yaml,yml,json,html,css}","templates/*.html",".env",".env.generated",".phoenix/.env.generated"];export const IGNORED_PATTERNS=["src/locales/**/*.{ts,tsx}",".phoenix/!(.env.generated)/**"];export class ApplicationSpecProjectWatcher{context;watcher=null;subscription=null;rebuildQueue=new i(1,1/0);changeSubject$=new s;pubsub;logger;builder;useServer;isShuttingDown=!1;suspended=!1;heldChanges=new Set;constructor(e,t){this.context=t,this.pubsub=e.pubsub,this.logger=e.logger,this.builder=new l({logger:e.logger,sdkVersion:e.sdkVersion,projectSlug:e.projectSlug,environmentSlug:e.environmentSlug,cliUseWorkspace:e.cliUseWorkspace,enableEditor:e.enableEditor,inlineTemplates:e.inlineTemplates}),this.useServer=e.useServer}start(e){this.context.store.viteServer$.next(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=a(WATCH_PATTERNS,{ignored:IGNORED_PATTERNS,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
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(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
|
|
4
|
+
`),await this.rebuild(t,i,!1))})})}async rebuild(e,i,s){try{let r=this.context.store.viteServer$.value;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 a=await this.builder.build({compile:!s});if(this.isShuttingDown)return;if(h(a.diagnostics,this.logger),!a.ok){for(let e of a.errors)this.logger.error(`[${e.code}] ${e.message}${e.file?` (${e.file})`:""}`);this.pubsub.specFile$.next({rawProjectFiles:a.rawProjectFiles,projectRoot:process.cwd()});return}let{application:l,changedFiles:d}=a;this.context.linguiWatcher?.trigger(),this.context.deploymentPreparation?.reportUnregisteredSpec(l.applicationSpec);let w=r.moduleGraph,f=Date.now(),b=new Set,m=process.cwd(),S=e=>{let t=w.getModulesByFile(c(e));if(t)for(let e of t)w.invalidateModule(e,b,f,!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:l.rawProjectFiles,projectRoot:process.cwd(),configurationSchemaHash:l.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.context.store.viteServer$.next(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)}}}
|
|
@@ -5,6 +5,7 @@ import { z } from 'zod';
|
|
|
5
5
|
declare const ServerCredentials: z.ZodObject<{
|
|
6
6
|
token: z.ZodString;
|
|
7
7
|
userId: z.ZodString;
|
|
8
|
+
customerId: z.ZodOptional<z.ZodString>;
|
|
8
9
|
customerSlug: z.ZodString;
|
|
9
10
|
customerName: z.ZodString;
|
|
10
11
|
studioUrl: z.ZodOptional<z.ZodString>;
|
|
@@ -12,6 +13,7 @@ declare const ServerCredentials: z.ZodObject<{
|
|
|
12
13
|
}, "strip", z.ZodTypeAny, {
|
|
13
14
|
token: string;
|
|
14
15
|
userId: string;
|
|
16
|
+
customerId?: string | undefined;
|
|
15
17
|
customerSlug: string;
|
|
16
18
|
customerName: string;
|
|
17
19
|
studioUrl?: string | undefined;
|
|
@@ -19,6 +21,7 @@ declare const ServerCredentials: z.ZodObject<{
|
|
|
19
21
|
}, {
|
|
20
22
|
token: string;
|
|
21
23
|
userId: string;
|
|
24
|
+
customerId?: string | undefined;
|
|
22
25
|
customerSlug: string;
|
|
23
26
|
customerName: string;
|
|
24
27
|
studioUrl?: string | undefined;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{chmod as e,mkdir as r,readFile as t,writeFile as s}from"node:fs/promises";import{homedir as n}from"node:os";import{dirname as
|
|
1
|
+
import{chmod as e,mkdir as r,readFile as t,writeFile as s}from"node:fs/promises";import{homedir as n}from"node:os";import{dirname as i,join as o}from"node:path";import{z as a}from"zod";let l=a.object({token:a.string().min(1),userId:a.string(),customerId:a.string().uuid().optional(),customerSlug:a.string(),customerName:a.string(),studioUrl:a.string().optional(),createdAt:a.string()}),c=a.object({version:a.literal(1),servers:a.record(a.string(),l)}),d={version:1,servers:{}};export const getCredentialsPath=()=>process.env.PHOENIX_CREDENTIALS_FILE??o(n(),".phoenix","credentials.json");let u=e=>new URL(e).origin,g=async()=>{let e;try{e=await t(getCredentialsPath(),"utf8")}catch(e){if(e instanceof Error&&"code"in e&&"ENOENT"===e.code)return d;throw e}let r=c.safeParse((e=>{try{return JSON.parse(e)}catch{return null}})(e));if(!r.success)throw Error(`The credentials file ${getCredentialsPath()} is not valid. Delete it and run \`phoenix login\` again.`);return r.data},m=async t=>{let n=getCredentialsPath();return await r(i(n),{recursive:!0,mode:448}),await s(n,`${JSON.stringify(t,null,2)}
|
|
2
2
|
`,{mode:384}),await e(n,384),n};export const getServerCredentials=async e=>(await g()).servers[u(e)]??null;export const saveServerCredentials=async(e,r)=>{let t=await g();return m({...t,servers:{...t.servers,[u(e)]:r}})};export const removeServerCredentials=async e=>{let r=await g(),{[u(e)]:t,...s}=r.servers;await m({...r,servers:s})};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
type BeforeCliExit = (exitCode: number) => Promise<void>;
|
|
2
|
+
export declare const setBeforeCliExit: (handler: BeforeCliExit) => (() => void);
|
|
3
|
+
/** Gives the Phoenix CLI a chance to finish best-effort work, then preserves process.exit semantics. */
|
|
4
|
+
export declare const exitCli: (exitCode: number) => Promise<never>;
|
|
5
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let t=null;export const setBeforeCliExit=e=>(t=e,()=>{t===e&&(t=null)});export const exitCli=async e=>{try{await t?.(e)}finally{process.exit(e)}};
|