@salsita-ai/sdk 0.50.0-develop.bd84173265 → 0.50.0-develop.bded01bb03
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 +8 -4
- package/dist/admin/default-admin-elements.d.ts +9 -0
- package/dist/admin/default-admin-elements.js +1 -0
- package/dist/admin/default-elements/built-in-entity-element.d.ts +10 -0
- package/dist/admin/default-elements/built-in-entity-element.js +1 -0
- package/dist/admin/default-elements/built-in-layout-element.d.ts +10 -0
- package/dist/admin/default-elements/built-in-layout-element.js +1 -0
- package/dist/admin/default-elements/index.d.ts +2 -0
- package/dist/admin/default-elements/index.js +1 -0
- package/dist/admin/index.d.ts +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/application-spec/errors/diagnostic-codes.d.ts +1 -0
- package/dist/application-spec/errors/diagnostic-codes.js +1 -1
- package/dist/application-spec/errors/diagnostic-messages.d.ts +1 -0
- package/dist/application-spec/errors/diagnostic-messages.js +1 -1
- package/dist/application-spec/generate-application/code/common/code-imports.js +1 -1
- package/dist/application-spec/generate-application/code/common/env-reader.js +2 -2
- package/dist/application-spec/generate-application/code/common/index.d.ts +1 -0
- package/dist/application-spec/generate-application/code/common/index.js +1 -1
- package/dist/application-spec/generate-application/code/common/single-quoted-string.d.ts +6 -0
- package/dist/application-spec/generate-application/code/common/single-quoted-string.js +1 -0
- package/dist/application-spec/generate-application/code/domain-runtime-files.js +1 -1
- package/dist/application-spec/generate-application/code/project-scaffolding.d.ts +5 -7
- package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
- package/dist/application-spec/generate-application/code/story-files.js +1 -1
- package/dist/application-spec/generate-application/code/templates/admin-config.js +3 -0
- package/dist/application-spec/generate-application/code/templates/common/format-property-key.d.ts +7 -0
- package/dist/application-spec/generate-application/code/templates/common/format-property-key.js +1 -0
- package/dist/application-spec/generate-application/code/templates/common/schema-to-type-string.js +3 -3
- package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/domain-factory-types.d.ts +35 -0
- package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/domain-factory-types.js +5 -0
- package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/index.d.ts +1 -0
- package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/index.js +1 -0
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.d.ts +1 -1
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.js +6 -6
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-domain-block.js +59 -63
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.d.ts +8 -0
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.js +1 -1
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-presets.js +1 -1
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.js +13 -13
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-states.d.ts +1 -1
- package/dist/application-spec/generate-application/code/templates/domain-spec/generate-states.js +2 -2
- package/dist/application-spec/generate-application/code/templates/domain-spec/index.d.ts +2 -1
- package/dist/application-spec/generate-application/code/templates/domain-spec/index.js +1 -1
- package/dist/application-spec/generate-application/code/templates/global-definition/generate-phx-types.d.ts +43 -0
- package/dist/application-spec/generate-application/code/templates/global-definition/generate-phx-types.js +31 -0
- package/dist/application-spec/generate-application/code/templates/global-definition/index.d.ts +1 -0
- package/dist/application-spec/generate-application/code/templates/global-definition/index.js +1 -1
- package/dist/application-spec/generate-application/code/templates/globals.js +24 -43
- package/dist/application-spec/generate-application/code/templates/index.d.ts +2 -2
- package/dist/application-spec/generate-application/code/templates/index.js +1 -1
- package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.js +1 -1
- package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.js +1 -1
- package/dist/application-spec/generate-application/code/templates/skills/phoenix-feedback-skill.js +5 -5
- package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +2 -2
- package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +1 -1
- package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.js +2 -2
- package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +13 -2
- package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +2 -2
- package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.d.ts +58 -0
- package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.js +1 -0
- package/dist/application-spec/generate-application/code/templates/spec-code/index.d.ts +2 -0
- package/dist/application-spec/generate-application/code/templates/spec-code/index.js +1 -0
- package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.d.ts +18 -0
- package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.js +41 -0
- package/dist/application-spec/generate-application/code/templates/spec-messages/index.d.ts +1 -0
- package/dist/application-spec/generate-application/code/templates/spec-messages/index.js +1 -0
- package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.d.ts +20 -0
- package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.js +6 -0
- package/dist/application-spec/generate-application/code/templates/story/phx-module.d.ts +8 -2
- package/dist/application-spec/generate-application/code/templates/story/phx-module.js +15 -3
- package/dist/application-spec/generate-application/code/templates/story/wrapper.d.ts +3 -0
- package/dist/application-spec/generate-application/code/templates/story/wrapper.js +2 -1
- package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.d.ts +2 -1
- package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.js +1 -1
- package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.d.ts +2 -1
- package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.js +1 -1
- package/dist/application-spec/generate-application/runtime/application-runtime.d.ts +8 -2
- package/dist/application-spec/generate-application/runtime/application-runtime.js +1 -1
- package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.d.ts +2 -1
- package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.js +1 -1
- package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +2 -1
- package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.js +1 -1
- package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.d.ts +2 -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 +2 -1
- package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.js +1 -1
- package/dist/application-spec/generate-application/runtime/sections/component-optic.d.ts +3 -0
- package/dist/application-spec/generate-application/runtime/sections/component-optic.js +1 -1
- package/dist/application-spec/generate-application/runtime/sections/expression-runtime.d.ts +5 -3
- 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 +9 -5
- package/dist/application-spec/generate-application/runtime/sections/generate-memo-eval-plan-runtime.js +1 -1
- package/dist/application-spec/generate-application/runtime/sections/reflection-constants-runtime.d.ts +3 -1
- package/dist/application-spec/generate-application/runtime/sections/reflection-constants-runtime.js +1 -1
- package/dist/application-spec/generate-application/runtime/spec-code/index.d.ts +2 -0
- package/dist/application-spec/generate-application/runtime/spec-code/index.js +1 -0
- package/dist/application-spec/generate-application/runtime/spec-code/resolve-spec-code.d.ts +18 -0
- package/dist/application-spec/generate-application/runtime/spec-code/resolve-spec-code.js +1 -0
- package/dist/application-spec/generate-application/runtime/spec-code/spec-code-module.d.ts +17 -0
- package/dist/application-spec/generate-application/runtime/spec-code/spec-code-module.js +1 -0
- package/dist/application-spec/generate-application/runtime-spec/index.d.ts +1 -0
- package/dist/application-spec/generate-application/runtime-spec/index.js +1 -1
- package/dist/application-spec/generate-application/runtime-spec/spec-code-id.d.ts +40 -0
- package/dist/application-spec/generate-application/runtime-spec/spec-code-id.js +1 -0
- package/dist/application-spec/parse-application-files/categorize/categorize-files.js +1 -1
- package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.d.ts +9 -4
- package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.js +1 -1
- package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.d.ts +9 -0
- package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.js +1 -0
- package/dist/application-spec/parse-application-files/spec/expressions/expressions.js +1 -1
- package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.d.ts +3 -1
- package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.js +1 -1
- package/dist/configurator/application-runtime/extensions/systems/graphql-system/close-unclosed-braces.d.ts +12 -0
- package/dist/configurator/application-runtime/extensions/systems/graphql-system/close-unclosed-braces.js +1 -0
- package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +1 -1
- package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
- package/dist/configurator/common/configurator-interface.d.ts +11 -2
- package/dist/configurator/common/configurator-interface.js +1 -1
- package/dist/configurator/common/index.d.ts +2 -2
- package/dist/configurator/common/index.js +1 -1
- package/dist/configurator/configuration-not-found-page/ConfigurationNotFoundPageElement.d.ts +12 -0
- package/dist/configurator/configuration-not-found-page/ConfigurationNotFoundPageElement.js +1 -0
- package/dist/configurator/configuration-not-found-page/index.d.ts +1 -0
- package/dist/configurator/configuration-not-found-page/index.js +1 -0
- package/dist/configurator/configurator-context/PresetSelectionProvider.js +1 -1
- package/dist/configurator/pages/ConfiguratorNotFoundPage.js +1 -1
- package/dist/configurator/pages/DefaultNotAuthenticatedPage.d.ts +8 -0
- package/dist/configurator/pages/DefaultNotAuthenticatedPage.js +1 -0
- package/dist/configurator/pages/DefaultPresetUi.d.ts +7 -0
- package/dist/configurator/pages/DefaultPresetUi.js +1 -0
- package/dist/configurator/pages/NewConfiguratorPage.js +1 -1
- package/dist/configurator/pages/RootPage.js +1 -1
- package/dist/configurator/pages/default-configurator-elements.d.ts +4 -1
- package/dist/configurator/pages/default-configurator-elements.js +1 -1
- package/dist/configurator/pages/default-elements/built-in-entity-element.d.ts +1 -1
- package/dist/configurator/pages/default-elements/built-in-layout-element.d.ts +1 -1
- package/dist/configurator/preset-screen-elements/PresetDeviceNotSupportedElement.d.ts +4 -0
- package/dist/configurator/preset-screen-elements/PresetDeviceNotSupportedElement.js +1 -0
- package/dist/configurator/preset-screen-elements/PresetPageActionElement.d.ts +4 -0
- package/dist/configurator/preset-screen-elements/PresetPageActionElement.js +1 -0
- package/dist/configurator/preset-screen-elements/index.d.ts +2 -0
- package/dist/configurator/preset-screen-elements/index.js +1 -0
- package/dist/configurator/scene/scene-controls/DeleteEntityFab.js +1 -1
- package/dist/configurator/scene/scene-controls/SelectionHotspot.js +1 -1
- package/dist/configurator/ui/assistant/AssistantMarkdown.d.ts +1 -1
- package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -1
- package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.js +1 -1
- package/dist/configurator/ui/assistant/resource-image/AssistantImage.d.ts +9 -0
- package/dist/configurator/ui/assistant/resource-image/AssistantImage.js +1 -0
- package/dist/configurator/ui/assistant/resource-image/index.d.ts +3 -0
- package/dist/configurator/ui/assistant/resource-image/index.js +1 -0
- package/dist/configurator/ui/assistant/resource-image/resource-path.d.ts +11 -0
- package/dist/configurator/ui/assistant/resource-image/resource-path.js +1 -0
- package/dist/configurator/ui/assistant/resource-image/use-resource-image-url.d.ts +5 -0
- package/dist/configurator/ui/assistant/resource-image/use-resource-image-url.js +1 -0
- package/dist/configurator/ui/assistant/streamed-markdown.js +1 -1
- package/dist/configurator/ui/assistant/use-follow-stream.js +1 -1
- package/dist/configurator/ui/configurator-layout/slots/mobile-tabs/use-mobile-tabs.d.ts +1 -1
- package/dist/configurator/ui/configurator-layout/slots/mobile-tabs/use-mobile-tabs.js +1 -1
- package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.js +1 -1
- package/dist/configurator/ui/configurator-layout/slots/services/Services.js +1 -1
- package/dist/configurator/ui/configurator-layout/slots/sidebar-tabs/use-sidebar-tabs.d.ts +1 -1
- package/dist/configurator/ui/configurator-layout/slots/sidebar-tabs/use-sidebar-tabs.js +1 -1
- package/dist/configurator/ui/legacy/layout/common/CommonFinalizeButton.js +1 -1
- package/dist/configurator/ui/legacy/layout/common/CommonSummaryButton.js +1 -1
- package/dist/configurator/ui/legacy/layout/common/CommonTopNavigation.js +1 -1
- package/dist/configurator/ui/legacy/layout/common/ResponsiveFinalizeButton.js +1 -1
- package/dist/configurator/ui/legacy/layout/common/SummaryReadLayout.js +1 -1
- package/dist/configurator/ui/legacy/layout/simple/SimpleOwnerLayout.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/StepsSidebarFooter.js +1 -1
- package/dist/configurator/ui/legacy/layout/tabs/TabsOwnerLayout.js +1 -1
- package/dist/configurator/ui/legacy/toolbar/common/DimensionUnitSelector.js +1 -1
- package/dist/configurator/ui/legacy/toolbar/common/MeasurementsIndicatorsSwitch.js +1 -1
- package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/FullscreenToolbarAction.js +1 -1
- package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/HelpToolbarAction.js +1 -1
- package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/MeasurementsToolbarAction.js +1 -1
- package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/UndoRedoToolbarGroup.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/EnterFullscreenToolbarButton.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/ExitFullscreenToolbarButton.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/HelpToolbarButton.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomOwnerUi.d.ts +1 -0
- package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomOwnerUi.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomReadUi.d.ts +1 -0
- package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomReadUi.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/MeasurementsToolbarButton.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/RedoToolbarButton.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/UndoToolbarButton.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/horizontal-tabs/DesktopHorizontalTabs.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/measurements/DimensionUnitSelector.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/measurements/MeasurementsIndicatorsSwitch.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/basic/BasicFinalizeButton.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/CustomFinalizeButton.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/EnterSummaryButton.js +1 -1
- package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/NextStepButton.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/preset-layout/PresetUi.d.ts +4 -0
- package/dist/configurator/ui/preset-layout/PresetUi.js +1 -1
- package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.d.ts +10 -0
- package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.js +1 -0
- package/dist/configurator/ui/save-message-snackbars/index.d.ts +1 -0
- package/dist/configurator/ui/save-message-snackbars/index.js +1 -0
- package/dist/docs/index.json +1 -1
- package/dist/docs/layouts/custom-layout.mdx +8 -7
- package/dist/docs/other-features/not-found-404.mdx +1 -1
- package/dist/docs/phoenix/clerk-sign-in.mdx +1 -1
- package/dist/docs/phoenix/configurator-interface.mdx +51 -22
- package/dist/docs/phoenix/getting-started.mdx +5 -3
- package/dist/docs/phoenix/layout-slots.mdx +19 -19
- package/dist/docs/phoenix/localization.mdx +2 -0
- package/dist/docs/phoenix/migration-guide.mdx +3 -3
- package/dist/docs/phoenix/phoenix-cli.mdx +22 -11
- package/dist/docs/phoenix/project-structure.mdx +45 -27
- package/dist/docs/phoenix/quickstart.mdx +7 -7
- package/dist/docs/phoenix/sdk-builder-workflow.mdx +6 -6
- package/dist/docs/phoenix/testing.mdx +8 -0
- package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
- package/dist/domain/domain-runtime/spec/module-checks/element-registration.d.ts +12 -11
- package/dist/domain/domain-runtime/spec/module-checks/element-registration.js +1 -1
- package/dist/domain/domain-runtime/spec/module-checks/index.d.ts +1 -1
- package/dist/domain/domain-runtime/spec/module-checks/index.js +1 -1
- package/dist/domain/domain-runtime/spec/selectors.js +1 -1
- package/dist/editor/Editor.d.ts +7 -0
- package/dist/editor/Editor.js +1 -1
- package/dist/editor/mocks/CreateMockYaml.js +2 -2
- package/dist/editor/mocks/EditorMockContext.d.ts +2 -0
- package/dist/editor/mocks/EditorMockContext.js +1 -1
- package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
- package/dist/legacy/domain-cli/utils/cache.js +1 -1
- package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +10 -11
- package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +9 -10
- package/dist/phoenix/application-spec/application-spec-builder.d.ts +0 -2
- package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
- package/dist/phoenix/application-spec/generate-application-spec-project.d.ts +0 -2
- package/dist/phoenix/application-spec/generate-application-spec-project.js +2 -2
- package/dist/phoenix/application-spec/generate-project-files.d.ts +0 -2
- package/dist/phoenix/cli.js +1 -1
- package/dist/phoenix/commands/build.js +1 -1
- package/dist/phoenix/commands/clean.js +1 -1
- package/dist/phoenix/commands/deploy.js +2 -2
- package/dist/phoenix/commands/deps/deps.d.ts +22 -1
- package/dist/phoenix/commands/deps/deps.js +2 -2
- package/dist/phoenix/commands/deps/index.d.ts +1 -1
- package/dist/phoenix/commands/deps/index.js +1 -1
- package/dist/phoenix/commands/deps/sdk-manifest.js +1 -1
- package/dist/phoenix/commands/dev.js +4 -4
- package/dist/phoenix/commands/init.d.ts +17 -5
- package/dist/phoenix/commands/init.js +1 -1
- package/dist/phoenix/commands/link.js +1 -1
- package/dist/phoenix/commands/sync.js +1 -1
- package/dist/phoenix/commands/unlink.js +1 -1
- package/dist/phoenix/services/application-spec-project-watcher.d.ts +0 -2
- package/dist/phoenix/services/application-spec-project-watcher.js +2 -2
- package/dist/phoenix/utils/index.d.ts +2 -1
- package/dist/phoenix/utils/index.js +1 -1
- package/dist/phoenix/utils/package-info.d.ts +0 -9
- package/dist/phoenix/utils/package-info.js +1 -1
- package/dist/phoenix/utils/package-manager/index.d.ts +2 -0
- package/dist/phoenix/utils/package-manager/index.js +1 -0
- package/dist/phoenix/utils/package-manager/package-manager-commands.d.ts +19 -0
- package/dist/phoenix/utils/package-manager/package-manager-commands.js +1 -0
- package/dist/phoenix/utils/package-manager/pnpm-project.d.ts +9 -0
- package/dist/phoenix/utils/package-manager/pnpm-project.js +1 -0
- package/dist/react-sdk/application-runtime/common-services/analytics/index.d.ts +1 -0
- package/dist/react-sdk/application-runtime/common-services/analytics/index.js +1 -1
- package/dist/react-sdk/domain-application-context/DomainLifecycleBoundary.js +1 -1
- package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.d.ts +15 -4
- package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.js +1 -1
- package/dist/react-sdk/domain-context/index.d.ts +2 -0
- package/dist/react-sdk/domain-context/index.js +1 -1
- package/dist/react-sdk/domain-context/system-hooks/tab-navigation-hooks.d.ts +61 -0
- package/dist/react-sdk/domain-context/system-hooks/tab-navigation-hooks.js +1 -0
- package/dist/react-sdk/domain-context/system-hooks/undo-redo-hooks.d.ts +20 -0
- package/dist/react-sdk/domain-context/system-hooks/undo-redo-hooks.js +1 -0
- package/dist/react-sdk/handlers/index.d.ts +1 -0
- package/dist/react-sdk/handlers/index.js +1 -1
- package/dist/react-sdk/handlers/use-finalize-action.js +1 -0
- package/dist/react-sdk/session/NotAuthenticatedPage.d.ts +4 -0
- package/dist/react-sdk/session/NotAuthenticatedPage.js +1 -1
- package/dist/ui-sdk/theme/types.d.ts +1 -1
- package/package.json +3 -3
- package/dist/application-spec/generate-application/code/templates/nvmrc.d.ts +0 -1
- package/dist/application-spec/generate-application/code/templates/nvmrc.js +0 -2
- package/dist/application-spec/generate-application/code/templates/package-json.d.ts +0 -10
- package/dist/application-spec/generate-application/code/templates/package-json.js +0 -1
- package/dist/configurator/common/use-finalize-action.js +0 -1
- package/dist/phoenix/commands/generate-project-files.d.ts +0 -6
- package/dist/phoenix/commands/generate-project-files.js +0 -1
- /package/dist/{configurator/common → react-sdk/application-runtime/common-services/analytics}/frontend-analytics.d.ts +0 -0
- /package/dist/{configurator/common → react-sdk/application-runtime/common-services/analytics}/frontend-analytics.js +0 -0
- /package/dist/{configurator/common → react-sdk/handlers}/use-finalize-action.d.ts +0 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import{CodeImports as e,autoHeader as t,skipApplicationTypeImports as n}from"../../common/index.js";import{collectSpecCode as r}from"./collect-spec-code.js";let o="@salsita-ai/sdk/domain",s=`/**
|
|
2
|
+
* The type at one key of TYPE, or the item type of an array for a numeric key, taken from every
|
|
3
|
+
* member of a union that has it. \`unknown\` when no member has it, so that a type the path cannot
|
|
4
|
+
* follow loses the check instead of rejecting valid code.
|
|
5
|
+
*/
|
|
6
|
+
type SpecCodeMember<TYPE, KEY> = TYPE extends readonly (infer ITEM)[]
|
|
7
|
+
? KEY extends number
|
|
8
|
+
? ITEM
|
|
9
|
+
: never
|
|
10
|
+
: TYPE extends object
|
|
11
|
+
? KEY extends keyof TYPE
|
|
12
|
+
? TYPE[KEY]
|
|
13
|
+
: never
|
|
14
|
+
: never
|
|
15
|
+
type SpecCodeAt<TYPE, KEY> = [SpecCodeMember<TYPE, KEY>] extends [never] ? unknown : SpecCodeMember<TYPE, KEY>`,i=`/** The value a component filter criterion yields, as \`withGradualFilter\` takes it: arrays read-only. */
|
|
16
|
+
type SpecCodeFilterCriterion<KEY extends keyof ComponentSystemFilterProps> =
|
|
17
|
+
| ([Required<ComponentSystemFilterProps>[KEY]] extends [ReadonlyArray<infer ITEM>]
|
|
18
|
+
? readonly ITEM[]
|
|
19
|
+
: Required<ComponentSystemFilterProps>[KEY])
|
|
20
|
+
| undefined`,p=`/**
|
|
21
|
+
* Types one closure: \`self\` is the entity it runs on, and what it returns must fit TARGET. The
|
|
22
|
+
* result is inferred as a constant and then checked against TARGET, as the dependencies of
|
|
23
|
+
* \`memoEval\` are in generated domain code.
|
|
24
|
+
*/
|
|
25
|
+
const code =
|
|
26
|
+
<SELF, TARGET>() =>
|
|
27
|
+
<const RESULT extends TARGET>(closure: (self: SELF) => RESULT): ((self: SELF) => RESULT) =>
|
|
28
|
+
closure`,a=(e,t,n)=>{if(0===t.length)return"unknown";let r=t.map(t=>(t.length>0&&(n.usesAt=!0),t.reduce((e,t)=>`SpecCodeAt<${e}, ${"number"==typeof t?"number":JSON.stringify(t)}>`,e)));return 1===r.length?r[0]:r.map(e=>`(${e})`).join(" & ")},d=(e,t,n)=>0===e.length?"{}":`{
|
|
29
|
+
${e.map(e=>{let r,s,i;return t.registerOwnerTypes([`$${e.owner}`]),r=`${t.typePrefix}$${e.owner}`,s=((e,t,n,r)=>{if("filter"===e.kind)return r.usesFilter=!0,r.imports.addTypeImport(o,"ComponentSystemFilterProps"),`SpecCodeFilterCriterion<'${e.criterion}'>`;if("component"===e.kind){let t=`${e.componentName}Component`;return r.imports.addTypeImport(o,"StateOfComponent"),r.imports.addTypeImport(o,t),a(`StateOfComponent<typeof ${t}>`,e.paths,r)}return n.registerOwnerTypes([`${t}Expressions`]),a(`${n.typePrefix}${t}Expressions['${e.name}']`,e.paths,r)})(e.target,e.owner,t,n),i=e.usesSelf?`self => (${e.code}
|
|
30
|
+
)`:`() => (${e.code}
|
|
31
|
+
)`,` ${JSON.stringify(e.id)}: code<${r}, ${s}>()(${i}),`}).join("\n")}
|
|
32
|
+
}`;export const generateApplicationSpecCodeFile=(o,a=n)=>{let m=new e,c={imports:m,usesAt:!1,usesFilter:!1},l=r(o.configurator),y=r(o.admin),f=d(l,{typePrefix:"",registerOwnerTypes:e=>a(m,e)},c),u=d(y,{typePrefix:"Admin.",registerOwnerTypes:()=>a(m,["Admin"])},c),E=[...c.usesAt?[s]:[],...c.usesFilter?[i]:[],...l.length+y.length>0?[p]:[]];return`${t("spec-code.ts","Code written in YAML ($eval in expressions, component props and filters) as typed closures, keyed by spec code id.")}
|
|
33
|
+
${m.toString()}
|
|
34
|
+
|
|
35
|
+
${E.map(e=>`${e}
|
|
36
|
+
|
|
37
|
+
`).join("")}export const specCode = {
|
|
38
|
+
configurator: ${f},
|
|
39
|
+
admin: ${u},
|
|
40
|
+
}
|
|
41
|
+
`};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { generateApplicationSpecMessagesFile } from './spec-messages.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{generateApplicationSpecMessagesFile}from"./spec-messages.js";
|
package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ComponentEntry, Defaults, Expressions, Invariants } from '../../../../parse-application-files/index.js';
|
|
2
|
+
/** The sections of one domain whose `$msg` texts generated domain code turns into `msg` calls. */
|
|
3
|
+
export interface SpecMessagesDomain {
|
|
4
|
+
readonly expressions: Expressions;
|
|
5
|
+
readonly components: readonly ComponentEntry[];
|
|
6
|
+
readonly invariants: Invariants;
|
|
7
|
+
readonly defaults: Defaults;
|
|
8
|
+
}
|
|
9
|
+
/** The two domains of a parsed spec whose texts the generated messages file holds. */
|
|
10
|
+
export interface SpecMessagesSpec {
|
|
11
|
+
readonly configurator: SpecMessagesDomain;
|
|
12
|
+
readonly admin: SpecMessagesDomain;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Generates `.phoenix/spec-messages.ts`: one `msg` call for each distinct `$msg` text of the spec
|
|
16
|
+
* that generated domain code turns into a `msg` call, with the same message id (`$msgId`, or the id
|
|
17
|
+
* Lingui generates from the text). Lingui extracts the project's catalogues from `.phoenix`, so the
|
|
18
|
+
* YAML texts reach them through this file. Nothing imports it.
|
|
19
|
+
*/
|
|
20
|
+
export declare const generateApplicationSpecMessagesFile: (spec: SpecMessagesSpec) => string;
|
package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{isMsgMarker as e,stringifyMsgMacroCode as t}from"../../../../core/index.js";import{CodeImports as s,autoHeader as o}from"../../common/index.js";let n=(e,t)=>{"msg"===e.kind?t.push(e.marker):"array"===e.kind?e.items.forEach(e=>n(e,t)):"object"===e.kind&&e.entries.forEach(([,e])=>n(e,t))},a=(t,s)=>{e(t)?s.push(t):Array.isArray(t)?t.forEach(e=>a(e,s)):"object"==typeof t&&null!==t&&Object.values(t).forEach(e=>a(e,s))},r=(e,t)=>{for(let s of e.expressions.expressions.values())for(let e of s.values())"value"===e.implementation.kind&&n(e.implementation.plan.template,t);for(let s of e.components)"userBound"===s.implementation.kind&&n(s.implementation.plan.template,t);for(let s of Object.values(e.invariants.entries))for(let e of Object.values(s))"static"===e.kind&&"string"!=typeof e.message&&t.push(e.message);a(e.defaults.entries,t)};export const generateApplicationSpecMessagesFile=e=>{let n=[];r(e.configurator,n),r(e.admin,n);let a=[...new Set(n.map(t))],i=new s;return a.length>0&&i.addImport("@lingui/core/macro","msg"),`${o("spec-messages.ts","The texts of the spec as msg calls, for Lingui extraction.")}
|
|
2
|
+
${i.toString()}
|
|
3
|
+
|
|
4
|
+
export const specMessages = [${a.map(e=>`
|
|
5
|
+
${e},`).join("")}${a.length>0?"\n":""}]
|
|
6
|
+
`};
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
+
import type { ApplicationSpec } from '../../../../parse-application-files/index.js';
|
|
1
2
|
/**
|
|
2
3
|
* Emits the story's `phx` module.
|
|
3
4
|
*
|
|
4
5
|
* Stories bind `phx` as a module export rather than through `globalThis`, so several stories can
|
|
5
|
-
* run side by side on one Storybook page without sharing configurator state.
|
|
6
|
+
* run side by side on one Storybook page without sharing configurator state. Its type is stated from
|
|
7
|
+
* SDK types and the story's generated application types, as `globals.d.ts` states the global one.
|
|
8
|
+
*
|
|
9
|
+
* Each member of `phx.applicationTypes` is typed as a local declared constant, so an editor shows the
|
|
10
|
+
* type itself (`SchemaOfObject<never>` for data the spec leaves out), as it did when the members were
|
|
11
|
+
* the generated values, and not the alias as written.
|
|
6
12
|
*/
|
|
7
|
-
export declare const generateApplicationSpecStoryPhxModule: () => string;
|
|
13
|
+
export declare const generateApplicationSpecStoryPhxModule: (spec: ApplicationSpec) => string;
|
|
@@ -1,9 +1,21 @@
|
|
|
1
|
-
export const generateApplicationSpecStoryPhxModule=()=>`
|
|
1
|
+
import{CodeImports as a}from"../../common/index.js";import{generatePhxTypes as t}from"../global-definition/index.js";let e=[["ApplicationVersion","string"],["PublishedDataHash","string"],...["PublishedData","SessionData","FrontendData","BackendData","FinalizeData","PrefetchedFinalizeData","FinalizeResult","CallbackData"].map(a=>[a,`SchemaOfObject<${a}>`]),...["NavigationState","ViewState","ToolState","ExportState","AdminNavigationState"].map(a=>[a,`EnumLike<${a}>`])];export const generateApplicationSpecStoryPhxModule=o=>{let i=new a,n=t(o,i);for(let a of(i.addTypeImport("@salsita-ai/sdk/domain","SchemaOfObject"),n.applicationTypeNames))i.addTypeImport("./application-types.js",a);let p=e.map(([a,t])=>`declare const phx${a}: ${t}`),r=e.map(([a])=>` ${a}: typeof phx${a}`);return`${i.toTypeOnlyString()}
|
|
2
|
+
|
|
3
|
+
import { configuratorInterface } from './configurator-globals.js'
|
|
2
4
|
import { phxApplicationTypes, phxDomain } from './domain-spec.js'
|
|
3
5
|
|
|
4
|
-
|
|
6
|
+
${n.declarations}
|
|
7
|
+
|
|
8
|
+
${p.join("\n")}
|
|
9
|
+
|
|
10
|
+
export const phx: {
|
|
11
|
+
domain: ${n.domainType.replaceAll("\n","\n ")}
|
|
12
|
+
frontend: ${n.configuratorInterfaceType}
|
|
13
|
+
applicationTypes: {
|
|
14
|
+
${r.join("\n")}
|
|
15
|
+
}
|
|
16
|
+
} = {
|
|
5
17
|
domain: phxDomain,
|
|
6
18
|
frontend: configuratorInterface,
|
|
7
19
|
applicationTypes: phxApplicationTypes,
|
|
8
20
|
}
|
|
9
|
-
|
|
21
|
+
`};
|
|
@@ -7,5 +7,8 @@ import type { MockTemplateDefinition } from '../../../../mock-template-definitio
|
|
|
7
7
|
* mode change has to arrive as a fresh mount. The Storybook plugin achieves that by reloading the
|
|
8
8
|
* preview whenever the story's marker appears, changes, or disappears. In a production Storybook
|
|
9
9
|
* build the same module always reports `active === false`, so deployed stories stay local-mode.
|
|
10
|
+
*
|
|
11
|
+
* `ExampleApp` takes an optional `mockTemplate` key, so a story can pin the mock template it opens
|
|
12
|
+
* (`args: { mockTemplate: 'read' }`); the editor applies it on mount without storing it.
|
|
10
13
|
*/
|
|
11
14
|
export declare const generateApplicationSpecStoryWrapper: (storyFolderName: string, mockTemplates: readonly MockTemplateDefinition[]) => string;
|
|
@@ -14,13 +14,14 @@ const config = configuratorConfig.withWebComponentTag(tagName).buildConfig()
|
|
|
14
14
|
|
|
15
15
|
mountConfiguratorApplication(config)
|
|
16
16
|
|
|
17
|
-
export const ExampleApp = () => (
|
|
17
|
+
export const ExampleApp = ({ mockTemplate }: { readonly mockTemplate?: string }) => (
|
|
18
18
|
<Editor
|
|
19
19
|
localMode={!active}
|
|
20
20
|
wsUrl={wsUrl}
|
|
21
21
|
initialRawProjectFiles={rawProjectFiles}
|
|
22
22
|
mockTemplates={mockTemplates}
|
|
23
23
|
autoApplyTemplate
|
|
24
|
+
initialTemplateKey={mockTemplate}
|
|
24
25
|
tagName={tagName}
|
|
25
26
|
enableAdmin={false}
|
|
26
27
|
/>
|
package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { type $DomainEntity, $DomainEntityReflection, DomainBuilder, type Domain
|
|
|
3
3
|
import type { RuntimeReferenceStore } from '../../../caching/index.js';
|
|
4
4
|
import type { DataSchemas, Expressions } from '../../../parse-application-files/index.js';
|
|
5
5
|
import type { RuntimeModelVersion, RuntimeResolvedVersions } from '../../runtime-spec/index.js';
|
|
6
|
+
import type { SpecCodeMap } from '../spec-code/index.js';
|
|
6
7
|
type AnyEntity = DomainEntity<string>;
|
|
7
8
|
type AnyAliases = Record<string, AnyEntity>;
|
|
8
9
|
type AnyData = Record<string, unknown>;
|
|
@@ -25,5 +26,5 @@ interface AdminModelRuntimeFields {
|
|
|
25
26
|
readonly schemaChanged: boolean;
|
|
26
27
|
}
|
|
27
28
|
export type AdminModelRuntime = Branded<'AdminModelRuntime', AdminModelRuntimeFields>;
|
|
28
|
-
export declare const AdminModelRuntime: (domainSpec: AdminModelRuntimeSpec, dataSchemas: DataSchemas, referenceStore: RuntimeReferenceStore) => AdminModelRuntime;
|
|
29
|
+
export declare const AdminModelRuntime: (domainSpec: AdminModelRuntimeSpec, dataSchemas: DataSchemas, referenceStore: RuntimeReferenceStore, code: SpecCodeMap | undefined) => AdminModelRuntime;
|
|
29
30
|
export {};
|
package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"lodash-es/isEqual.js";import{Branded as t}from"@salsita-ai/common/utils";import{$DomainEntityReflection as s,DomainBuilder as a,DomainEntityReflection as n,RawAliasReflection as i,SchemaReflection as o}from"#package/domain";import{evaluateReflectionConstants as r,findReflectionConstants as m}from"../sections/reflection-constants-runtime.js";let l=e=>({latestVersion:e.resolvedVersions.latestVersion,versionedModels:e.resolvedVersions.versionedModels.map(e=>({version:e.version,key:e.key,isLatest:e.isLatest,migrationFile:e.migrationFile}))}),p=e=>{let t=[];for(let[s,a]of e.expressions.entityExpressions)t.push({entityType:String(s),shapeGroups:a.shapeGroups.map(String),expressionNamesByGroup:a.shapeGroups.map(t=>{let s=e.expressions.expressions.get(t);return{group:String(t),names:s?[...s.keys()].map(String):[]}}),constants:[...m(e.expressions,String(s))??[]].map(([e,t])=>[String(e),t])});return t},
|
|
1
|
+
import e from"lodash-es/isEqual.js";import{Branded as t}from"@salsita-ai/common/utils";import{$DomainEntityReflection as s,DomainBuilder as a,DomainEntityReflection as n,RawAliasReflection as i,SchemaReflection as o}from"#package/domain";import{evaluateReflectionConstants as r,findReflectionConstants as m}from"../sections/reflection-constants-runtime.js";let l=e=>({latestVersion:e.resolvedVersions.latestVersion,versionedModels:e.resolvedVersions.versionedModels.map(e=>({version:e.version,key:e.key,isLatest:e.isLatest,migrationFile:e.migrationFile}))}),p=e=>{let t=[];for(let[s,a]of e.expressions.entityExpressions)t.push({entityType:String(s),shapeGroups:a.shapeGroups.map(String),expressionNamesByGroup:a.shapeGroups.map(t=>{let s=e.expressions.expressions.get(t);return{group:String(t),names:s?[...s.keys()].map(String):[]}}),constants:[...m(e.expressions,String(s))??[]].map(([e,t])=>[String(e),t])});return t},c=(t,s)=>{let a,n;return t.code===s.code&&(a=t.domainSpec,n=s.domainSpec,e(a.latestModel.entitySchemas.map(e=>e.shapeSchema),n.latestModel.entitySchemas.map(e=>e.shapeSchema))&&e([...a.latestModel.aliases],[...n.latestModel.aliases])&&e([...a.latestModel.commonTypes],[...n.latestModel.commonTypes])&&e(l(a),l(n))&&e(p(a),p(n)))&&e(t.dataSchemas.publishedData.runtimeSchema,s.dataSchemas.publishedData.runtimeSchema)&&e(t.dataSchemas.sessionData.runtimeSchema,s.dataSchemas.sessionData.runtimeSchema)&&e(t.dataSchemas.frontendData.runtimeSchema,s.dataSchemas.frontendData.runtimeSchema)},d=e=>{let{latestModel:t,resolvedVersions:m,expressions:l}=e.domainSpec,p={};for(let e of t.entitySchemas)p[String(e.entityType)]=new n(String(e.entityType),[e.shapeSchema]);let c={};for(let[e,s]of t.commonTypes){let t=s.runtimeSchema;c[String(e)]=new o(String(e),t)}let d=[...t.aliases],S={},h={};for(let[e,t]of d){let s=t.map(e=>p[String(e)]),a=new i(String(e),s);S[String(e)]=a,h[String(e)]=a.types}let u={};for(let a of t.entityTypes){let t=String(a),n=l.entityExpressions.get(a),i=[];if(n)for(let e of n.shapeGroups){let t=l.expressions.get(e);t&&i.push(...t.keys())}u[t]=new s(t,i,r(l,t,e.code))}let y=d.map(([e])=>String(e)).includes("RootEntity")?"RootEntity":"AnyDomainEntity",g=S[y]?.types??[],f=m.latestVersion,D=e.dataSchemas.publishedData.runtimeSchema,x=e.dataSchemas.sessionData.runtimeSchema,M=e.dataSchemas.frontendData.runtimeSchema,v=a.from(p,h,u,g,f,D,x,M,void 0,!0);return{entities:p,aliasReflections:S,commonTypeReflections:c,aliases:h,$entityReflections:u,rootEntityTypes:g,modelVersion:f,domainBuilder:v}};export const AdminModelRuntime=(e,s,a,n)=>{let i=a.createBuilder("modelRuntime:admin",{build:d,getKey:()=>"singleton",compare:c}).build({domainSpec:e,dataSchemas:s,code:n});return t({...i.output,schemaChanged:i.changed})};
|
|
@@ -6,6 +6,7 @@ import { type MigrationModules, MigrationRuntime } from '../migrations/index.js'
|
|
|
6
6
|
import { ComponentOptics } from '../sections/component-optic.js';
|
|
7
7
|
import { type ExpressionImplementations, ExpressionRuntime, type InvariantImplementations, type MissingExpression } from '../sections/expression-runtime.js';
|
|
8
8
|
import { PresetRuntime } from '../sections/preset-runtime.js';
|
|
9
|
+
import type { SpecCodeMap } from '../spec-code/index.js';
|
|
9
10
|
import { AdminModelRuntime } from './admin-model-runtime.js';
|
|
10
11
|
import { AdminStatesRuntime } from './states-runtime.js';
|
|
11
12
|
export type AdminRuntime = Branded<'AdminRuntime', {
|
|
@@ -24,4 +25,4 @@ export type AdminRuntimeResult = {
|
|
|
24
25
|
readonly ok: false;
|
|
25
26
|
readonly missingExpressions: readonly MissingExpression[];
|
|
26
27
|
};
|
|
27
|
-
export declare const AdminRuntime: (spec: RuntimeSpec, referenceStore: RuntimeReferenceStore, implementations: ExpressionImplementations, invariantImplementations: InvariantImplementations, migrationModules: MigrationModules) => AdminRuntimeResult;
|
|
28
|
+
export declare const AdminRuntime: (spec: RuntimeSpec, referenceStore: RuntimeReferenceStore, implementations: ExpressionImplementations, invariantImplementations: InvariantImplementations, migrationModules: MigrationModules, code: SpecCodeMap | undefined) => AdminRuntimeResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Branded as e}from"@salsita-ai/common/utils";import{Preset as t,PresetCategory as i,commonAdminCustomExpressions as n,commonAdminViolationExpressions as r}from"#package/domain";import{FactoryDataRuntime as s}from"../factory-data/index.js";import{MigrationRuntime as o}from"../migrations/index.js";import{ComponentOptics as m}from"../sections/component-optic.js";import{ExpressionRuntime as a}from"../sections/expression-runtime.js";import{PresetRuntime as p}from"../sections/preset-runtime.js";import{AdminModelRuntime as f}from"./admin-model-runtime.js";import{AdminStatesRuntime as u}from"./states-runtime.js";let c={Preset:[{evaluate:(e,i,n)=>{let s=n.domain.get$Entity(e,i);return t.assert(s),r.Preset.nameNotEmpty(s)}}]},l={PresetCategory:{$isDraft:{origin:{name:"$isDraft",typeOrAlias:"PresetCategory"},evaluate:(e,t,r)=>{let s=r.domain.get$Entity(e,t);return i.assert(s),n.PresetCategory.$isDraft(s)},meta:{}}}},d=new WeakMap;export const AdminRuntime=(t,i,n,r,g)=>{let
|
|
1
|
+
import{Branded as e}from"@salsita-ai/common/utils";import{Preset as t,PresetCategory as i,commonAdminCustomExpressions as n,commonAdminViolationExpressions as r}from"#package/domain";import{FactoryDataRuntime as s}from"../factory-data/index.js";import{MigrationRuntime as o}from"../migrations/index.js";import{ComponentOptics as m}from"../sections/component-optic.js";import{ExpressionRuntime as a}from"../sections/expression-runtime.js";import{PresetRuntime as p}from"../sections/preset-runtime.js";import{AdminModelRuntime as f}from"./admin-model-runtime.js";import{AdminStatesRuntime as u}from"./states-runtime.js";let c={Preset:[{evaluate:(e,i,n)=>{let s=n.domain.get$Entity(e,i);return t.assert(s),r.Preset.nameNotEmpty(s)}}]},l={PresetCategory:{$isDraft:{origin:{name:"$isDraft",typeOrAlias:"PresetCategory"},evaluate:(e,t,r)=>{let s=r.domain.get$Entity(e,t);return i.assert(s),n.PresetCategory.$isDraft(s)},meta:{}}}},d=new WeakMap;export const AdminRuntime=(t,i,n,r,g,R)=>{let y={...l};for(let[e,t]of Object.entries(n))y[e]={...y[e],...t};let j=f(t.admin,t.configurator.dataSchemas,i,R),k=a(t.admin,i,y,"adminExpressionRuntime",((e,t)=>{if(0===Object.keys(e).length)return c;let i=d.get(t)??new WeakMap;d.set(t,i);let n=i.get(e);if(n)return n;let r={};for(let i of[c,e])for(let[e,n]of Object.entries(i))for(let i of t[e]??[e])r[i]=[...r[i]??[],...n];return i.set(e,r),r})(r,j.aliases),R);return k.ok?{ok:!0,runtime:e({modelRuntime:j,componentOptics:m(i,{components:t.admin.components,referenceScope:"adminRuntime/componentOptics",modelRuntime:j,code:R}),expressionRuntime:k.runtime,presetRuntime:p(i,{referenceScope:"adminRuntime/presetRuntime",presets:t.admin.presets.presets}),statesRuntime:u(t,i),migrationRuntime:o(i,{referenceScope:"adminRuntime/migrationRuntime",resolvedVersions:t.admin.resolvedVersions,latestEntities:j.entities,migrationModules:g}),factoryDataRuntime:s(i,{referenceScope:"adminRuntime/factoryDataRuntime",invariants:t.admin.invariants,defaults:t.admin.defaults,aliases:j.aliases,entities:j.entities})})}:{ok:!1,missingExpressions:k.missing}};
|
|
@@ -7,6 +7,7 @@ import { ConfiguratorRuntime } from './configurator-runtime/configurator-runtime
|
|
|
7
7
|
import type { MigrationModules } from './migrations/index.js';
|
|
8
8
|
import { DataRuntime } from './sections/data-runtime.js';
|
|
9
9
|
import type { ExpressionImplementations, InvariantImplementations, MissingExpression } from './sections/expression-runtime.js';
|
|
10
|
+
import type { SpecCodeModule } from './spec-code/index.js';
|
|
10
11
|
/**
|
|
11
12
|
* Runtime objects built from a RuntimeSpec.
|
|
12
13
|
* Domain-specific fields mirror the spec's configurator/admin nesting.
|
|
@@ -34,8 +35,13 @@ export type ApplicationRuntimeResult = {
|
|
|
34
35
|
* admin domain checks them after the invariants every admin domain has. `migrationModules` are the
|
|
35
36
|
* project's migration modules of both domains (`src/migrations/`, `src/admin/migrations/`), keyed by
|
|
36
37
|
* project path; a migration they do not provide is listed in `missingMigrations` of the domain's
|
|
37
|
-
* `migrationRuntime`.
|
|
38
|
+
* `migrationRuntime`. `specCode` is the generated `.phoenix/spec-code.ts` module: the runtime takes
|
|
39
|
+
* each piece of YAML code (`$eval` in expressions, component props and filters) from it by spec code
|
|
40
|
+
* id, and compiles the text with `new Function` only for an id it does not hold, or without it (the
|
|
41
|
+
* editor, which rebuilds from YAML it has no generated module for). The module must come from the
|
|
42
|
+
* same generation as `spec`; an id carries a hash of its code, so a module from another generation
|
|
43
|
+
* misses the ids of changed code instead of running an old closure.
|
|
38
44
|
*
|
|
39
45
|
* Returns an error result when declared expressions are missing implementations.
|
|
40
46
|
*/
|
|
41
|
-
export declare const ApplicationRuntime: (spec: RuntimeSpec, referenceStore: RuntimeReferenceStore, implementations: ExpressionImplementations, importedTransformers: readonly ImportedTransformer[], invariantImplementations?: InvariantImplementations, adminImplementations?: ExpressionImplementations, adminInvariantImplementations?: InvariantImplementations, migrationModules?: MigrationModules) => ApplicationRuntimeResult;
|
|
47
|
+
export declare const ApplicationRuntime: (spec: RuntimeSpec, referenceStore: RuntimeReferenceStore, implementations: ExpressionImplementations, importedTransformers: readonly ImportedTransformer[], invariantImplementations?: InvariantImplementations, adminImplementations?: ExpressionImplementations, adminInvariantImplementations?: InvariantImplementations, migrationModules?: MigrationModules, specCode?: SpecCodeModule) => ApplicationRuntimeResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Branded as i}from"@salsita-ai/common/utils";import{AdminRuntime as r}from"./admin-runtime/admin-runtime.js";import{ConfiguratorRuntime as n}from"./configurator-runtime/configurator-runtime.js";import{DataRuntime as o}from"./sections/data-runtime.js";export const ApplicationRuntime=(s,t,m,e,u
|
|
1
|
+
import{Branded as i}from"@salsita-ai/common/utils";import{AdminRuntime as r}from"./admin-runtime/admin-runtime.js";import{ConfiguratorRuntime as n}from"./configurator-runtime/configurator-runtime.js";import{DataRuntime as o}from"./sections/data-runtime.js";export const ApplicationRuntime=(s,t,m,e,a,u={},p={},f={},c)=>{let g=n(s,t,m,e,a,f,c?.configurator);if(!g.ok)return{ok:!1,missingExpressions:g.missingExpressions};let d=r(s,t,u,p,f,c?.admin);return d.ok?{ok:!0,runtime:i({configurator:g.runtime,admin:d.runtime,data:o(s,t)})}:{ok:!1,missingExpressions:d.missingExpressions}};
|
|
@@ -3,6 +3,7 @@ import { type $DomainEntity, $DomainEntityReflection, DomainBuilder, type Domain
|
|
|
3
3
|
import type { RuntimeReferenceStore } from '../../../caching/index.js';
|
|
4
4
|
import type { DataSchemas, Expressions } from '../../../parse-application-files/index.js';
|
|
5
5
|
import type { RuntimeModelVersion, RuntimeResolvedVersions } from '../../runtime-spec/index.js';
|
|
6
|
+
import type { SpecCodeMap } from '../spec-code/index.js';
|
|
6
7
|
type AnyEntity = DomainEntity<string>;
|
|
7
8
|
type AnyAliases = Record<string, AnyEntity>;
|
|
8
9
|
type AnyData = Record<string, unknown>;
|
|
@@ -27,5 +28,5 @@ interface ConfiguratorModelRuntimeFields {
|
|
|
27
28
|
}
|
|
28
29
|
export type ConfiguratorModelRuntime = Branded<'ConfiguratorModelRuntime', ConfiguratorModelRuntimeFields>;
|
|
29
30
|
export declare const isConfiguratorModelSchemaCompatible: (prev: ConfiguratorModelRuntimeSpec, curr: ConfiguratorModelRuntimeSpec) => boolean;
|
|
30
|
-
export declare const ConfiguratorModelRuntime: (domainSpec: ConfiguratorModelRuntimeSpec, referenceStore: RuntimeReferenceStore) => ConfiguratorModelRuntime;
|
|
31
|
+
export declare const ConfiguratorModelRuntime: (domainSpec: ConfiguratorModelRuntimeSpec, referenceStore: RuntimeReferenceStore, code: SpecCodeMap | undefined) => ConfiguratorModelRuntime;
|
|
31
32
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"lodash-es/isEqual.js";import{Branded as t}from"@salsita-ai/common/utils";import{$DomainEntityReflection as s,DomainBuilder as o,DomainEntityReflection as i,RawAliasReflection as n,SchemaReflection as a}from"#package/domain";import{evaluateReflectionConstants as r,findReflectionConstants as m}from"../sections/reflection-constants-runtime.js";let l=e=>({latestVersion:e.resolvedVersions.latestVersion,versionedModels:e.resolvedVersions.versionedModels.map(e=>({version:e.version,key:e.key,isLatest:e.isLatest,migrationFile:e.migrationFile}))}),p=e=>{let t=[];for(let[s,o]of e.expressions.entityExpressions)t.push({entityType:String(s),shapeGroups:o.shapeGroups.map(String),expressionNamesByGroup:o.shapeGroups.map(t=>{let s=e.expressions.expressions.get(t);return{group:String(t),names:s?[...s.keys()].map(String):[]}}),constants:[...m(e.expressions,String(s))??[]].map(([e,t])=>[String(e),t])});return t};export const isConfiguratorModelSchemaCompatible=(t,s)=>e(t.latestModel.entitySchemas.map(e=>e.shapeSchema),s.latestModel.entitySchemas.map(e=>e.shapeSchema))&&e([...t.latestModel.aliases],[...s.latestModel.aliases])&&e([...t.latestModel.commonTypes],[...s.latestModel.commonTypes])&&e(l(t),l(s))&&e(p(t),p(s))&&e(t.dataSchemas,s.dataSchemas);let c=e=>{let{latestModel:t,resolvedVersions:m,dataSchemas:l,expressions:p}=e.domainSpec,c={};for(let e of t.entitySchemas)c[String(e.entityType)]=new i(String(e.entityType),[e.shapeSchema]);let
|
|
1
|
+
import e from"lodash-es/isEqual.js";import{Branded as t}from"@salsita-ai/common/utils";import{$DomainEntityReflection as s,DomainBuilder as o,DomainEntityReflection as i,RawAliasReflection as n,SchemaReflection as a}from"#package/domain";import{evaluateReflectionConstants as r,findReflectionConstants as m}from"../sections/reflection-constants-runtime.js";let l=e=>({latestVersion:e.resolvedVersions.latestVersion,versionedModels:e.resolvedVersions.versionedModels.map(e=>({version:e.version,key:e.key,isLatest:e.isLatest,migrationFile:e.migrationFile}))}),p=e=>{let t=[];for(let[s,o]of e.expressions.entityExpressions)t.push({entityType:String(s),shapeGroups:o.shapeGroups.map(String),expressionNamesByGroup:o.shapeGroups.map(t=>{let s=e.expressions.expressions.get(t);return{group:String(t),names:s?[...s.keys()].map(String):[]}}),constants:[...m(e.expressions,String(s))??[]].map(([e,t])=>[String(e),t])});return t};export const isConfiguratorModelSchemaCompatible=(t,s)=>e(t.latestModel.entitySchemas.map(e=>e.shapeSchema),s.latestModel.entitySchemas.map(e=>e.shapeSchema))&&e([...t.latestModel.aliases],[...s.latestModel.aliases])&&e([...t.latestModel.commonTypes],[...s.latestModel.commonTypes])&&e(l(t),l(s))&&e(p(t),p(s))&&e(t.dataSchemas,s.dataSchemas);let c=e=>{let{latestModel:t,resolvedVersions:m,dataSchemas:l,expressions:p}=e.domainSpec,c={};for(let e of t.entitySchemas)c[String(e.entityType)]=new i(String(e.entityType),[e.shapeSchema]);let d={};for(let[e,s]of t.commonTypes){let t=s.runtimeSchema;d[String(e)]=new a(String(e),t)}let S=[...t.aliases],u={},g={};for(let[e,t]of S){let s=t.map(e=>c[String(e)]),o=new n(String(e),s);u[String(e)]=o,g[String(e)]=o.types}let h={};for(let o of t.entityTypes){let t=String(o),i=p.entityExpressions.get(o),n=[];if(i)for(let e of i.shapeGroups){let t=p.expressions.get(e);t&&n.push(...t.keys())}h[t]=new s(t,n,r(p,t,e.code))}let y=S.map(([e])=>String(e)).includes("RootEntity")?"RootEntity":"AnyDomainEntity",f=u[y]?.types??[],M=m.latestVersion,x=l.publishedData.runtimeSchema,T=l.sessionData.runtimeSchema,b=l.frontendData.runtimeSchema,k=l.backendData?.runtimeSchema,v=o.from(c,g,h,f,M,x,T,b,k,!1);return{entities:c,aliasReflections:u,commonTypeReflections:d,aliases:g,$entityReflections:h,rootEntityTypes:f,modelVersion:M,domainBuilder:v}};export const ConfiguratorModelRuntime=(e,s,o)=>{let i=s.createBuilder("modelRuntime:configurator",{build:c,getKey:()=>"singleton",compare:(e,t)=>e.code===t.code&&isConfiguratorModelSchemaCompatible(e.domainSpec,t.domainSpec)}).build({domainSpec:e,code:o});return t({...i.output,schemaChanged:i.changed})};
|
|
@@ -11,6 +11,7 @@ import { type ExpressionImplementations, ExpressionRuntime, type InvariantImplem
|
|
|
11
11
|
import { PresetRuntime } from '../sections/preset-runtime.js';
|
|
12
12
|
import { ThemeRuntime } from '../sections/theme-runtime.js';
|
|
13
13
|
import { TransformersRuntime } from '../sections/transformers-runtime.js';
|
|
14
|
+
import type { SpecCodeMap } from '../spec-code/index.js';
|
|
14
15
|
import { ConfiguratorModelRuntime } from './configurator-model-runtime.js';
|
|
15
16
|
import { ConfiguratorStatesRuntime } from './states-runtime.js';
|
|
16
17
|
export type ConfiguratorRuntime = Branded<'ConfiguratorRuntime', {
|
|
@@ -33,4 +34,4 @@ export type ConfiguratorRuntimeResult = {
|
|
|
33
34
|
readonly ok: false;
|
|
34
35
|
readonly missingExpressions: readonly MissingExpression[];
|
|
35
36
|
};
|
|
36
|
-
export declare const ConfiguratorRuntime: (spec: RuntimeSpec, referenceStore: RuntimeReferenceStore, implementations: ExpressionImplementations, importedTransformers: readonly ImportedTransformer[], invariantImplementations: InvariantImplementations | undefined, migrationModules: MigrationModules) => ConfiguratorRuntimeResult;
|
|
37
|
+
export declare const ConfiguratorRuntime: (spec: RuntimeSpec, referenceStore: RuntimeReferenceStore, implementations: ExpressionImplementations, importedTransformers: readonly ImportedTransformer[], invariantImplementations: InvariantImplementations | undefined, migrationModules: MigrationModules, code: SpecCodeMap | undefined) => ConfiguratorRuntimeResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Branded as t}from"@salsita-ai/common/utils";import{FactoryDataRuntime as e}from"../factory-data/index.js";import{MigrationRuntime as i}from"../migrations/index.js";import{ActionsRuntime as o}from"../sections/actions-runtime.js";import{AssistantRuntime as r}from"../sections/assistant-runtime.js";import{ComponentOptics as n}from"../sections/component-optic.js";import{ExpressionRuntime as s}from"../sections/expression-runtime.js";import{PresetRuntime as m}from"../sections/preset-runtime.js";import{ThemeRuntime as a}from"../sections/theme-runtime.js";import{TransformersRuntime as u}from"../sections/transformers-runtime.js";import{ConfiguratorModelRuntime as c}from"./configurator-model-runtime.js";import{ConfiguratorStatesRuntime as f}from"./states-runtime.js";export const ConfiguratorRuntime=(p,g,R,j,l,d)=>{let
|
|
1
|
+
import{Branded as t}from"@salsita-ai/common/utils";import{FactoryDataRuntime as e}from"../factory-data/index.js";import{MigrationRuntime as i}from"../migrations/index.js";import{ActionsRuntime as o}from"../sections/actions-runtime.js";import{AssistantRuntime as r}from"../sections/assistant-runtime.js";import{ComponentOptics as n}from"../sections/component-optic.js";import{ExpressionRuntime as s}from"../sections/expression-runtime.js";import{PresetRuntime as m}from"../sections/preset-runtime.js";import{ThemeRuntime as a}from"../sections/theme-runtime.js";import{TransformersRuntime as u}from"../sections/transformers-runtime.js";import{ConfiguratorModelRuntime as c}from"./configurator-model-runtime.js";import{ConfiguratorStatesRuntime as f}from"./states-runtime.js";export const ConfiguratorRuntime=(p,g,R,j,l,d,x)=>{let v=c(p.configurator,g,x),S=s(p.configurator,g,R,"configuratorExpressionRuntime",l,x);return S.ok?{ok:!0,runtime:t({modelRuntime:v,componentOptics:n(g,{components:p.configurator.components,referenceScope:"configuratorRuntime/componentOptics",modelRuntime:v,code:x}),presetRuntime:m(g,{referenceScope:"configuratorRuntime/presetRuntime",presets:p.configurator.presets.presets}),statesRuntime:f(p,g),expressionRuntime:S.runtime,themeRuntime:a(p,g),transformersRuntime:u(p,g,j),assistantRuntime:r(p,g),actionsRuntime:o(p.configurator.actions,g),migrationRuntime:i(g,{referenceScope:"configuratorRuntime/migrationRuntime",resolvedVersions:p.configurator.resolvedVersions,latestEntities:v.entities,migrationModules:d}),factoryDataRuntime:e(g,{referenceScope:"configuratorRuntime/factoryDataRuntime",invariants:p.configurator.invariants,defaults:p.configurator.defaults,aliases:v.aliases,entities:v.entities})})}:{ok:!1,missingExpressions:S.missing}};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { ComponentEntry, ComponentImplementation } from '../../../parse-application-files/spec/index.js';
|
|
2
2
|
import type { AdminModelRuntime } from '../admin-runtime/admin-model-runtime.js';
|
|
3
3
|
import type { ConfiguratorModelRuntime } from '../configurator-runtime/configurator-model-runtime.js';
|
|
4
|
+
import { type SpecCodeMap } from '../spec-code/index.js';
|
|
4
5
|
import type { ComponentOptic } from './component-optic.js';
|
|
5
6
|
export declare const buildSdkOptic: (entry: ComponentEntry, impl: ComponentImplementation & {
|
|
6
7
|
readonly kind: 'sdk';
|
|
7
|
-
}, aliasMap: Record<string, readonly string[]>, configuratorModel: AdminModelRuntime | ConfiguratorModelRuntime) => ComponentOptic;
|
|
8
|
+
}, aliasMap: Record<string, readonly string[]>, configuratorModel: AdminModelRuntime | ConfiguratorModelRuntime, code: SpecCodeMap | undefined) => ComponentOptic;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Branded as e}from"@salsita-ai/common/utils";import{DomainComponentOpticBuilder as t,adminSidebarComponent as a,attributeSelectionComponent as i,componentsByName as r,composedOfComponent as n,navigationPageComponent as o,navigationPanelListComponent as d,referenceComponent as c}from"#package/domain";import*as m from"#package/domain";import{FILTER_CRITERION_KEYS as s,isSdkCodeRef as l}from"../../../core/index.js";let
|
|
1
|
+
import{Branded as e}from"@salsita-ai/common/utils";import{DomainComponentOpticBuilder as t,adminSidebarComponent as a,attributeSelectionComponent as i,componentsByName as r,composedOfComponent as n,navigationPageComponent as o,navigationPanelListComponent as d,referenceComponent as c}from"#package/domain";import*as m from"#package/domain";import{FILTER_CRITERION_KEYS as s,isSdkCodeRef as l}from"../../../core/index.js";import{specCodeComponentKey as g,specCodeFilterId as p}from"../../runtime-spec/index.js";import{resolveSpecCode as R}from"../spec-code/index.js";let A=new Map([["reference",c],["composedOf",n],["adminSidebar",a],["attributeSelection",i],["navigationPage",o],["navigationPanelList",d]]),f={createAdminCustomPageRead:m.createAdminCustomPageRead,createAdminCustomSidebarRead:m.createAdminCustomSidebarRead,createAdminDataPageRead:m.createAdminDataPageRead,createAdminDataTableSidebarRead:m.createAdminDataTableSidebarRead,createAdminNavigationPanelRead:m.createAdminNavigationPanelRead,createAdminPresetCategoryPageRead:m.createAdminPresetCategoryPageRead,createAdminPresetCategorySelectionRead:m.createAdminPresetCategorySelectionRead,createAdminPresetCategorySelectionWrite:m.createAdminPresetCategorySelectionWrite,createAdminPresetCategorySidebarRead:m.createAdminPresetCategorySidebarRead,createAdminPresetListPageRead:m.createAdminPresetListPageRead,createAdminPresetSidebarRead:m.createAdminPresetSidebarRead,createAdminRecipeCollectionPageRead:m.createAdminRecipeCollectionPageRead,createAdminRecipeSidebarRead:m.createAdminRecipeSidebarRead},u=(e,t)=>{let a=f[e.sdkFunction]??m[e.sdkFunction];if("function"!=typeof a)throw Error(`SDK factory function "${e.sdkFunction}" not found. Make sure it is exported from the package.`);return a(...e.params.map(e=>{if(l(e)){let a=t.entities[e.$codeRef]??t.aliasReflections[e.$codeRef];if(!a)throw Error(`Reflection "${e.$codeRef}" not found in ModelRuntime. This is a bug — the target was validated at parse time.`);return a}return e}))};export const buildSdkOptic=(a,i,n,o,d)=>{let c=t.from(n),m=r.get(a.componentName)??A.get(a.componentName);if(!m)throw Error(`SDK component "${a.componentName}" not found. This is a bug — the component was validated at parse time.`);let l=c.withComponent(m,a.instanceName,!0),f=a.isAlias?l.withAlias(String(a.typeOrAlias)):l.withEntity(String(a.typeOrAlias)),P=g(String(a.typeOrAlias),String(a.instanceName),a.componentName);for(let[e,t]of i.filters.items.entries()){if("root"===t.kind){let e=t.target,a=t=>t[e];f=f.withFilter(a);continue}let a={};for(let i of s){let r=t[i];void 0!==r&&("dynamic"===r.kind?a[i]=e=>e[r.target]:"eval"===r.kind?a[i]=R(d,p(P,e,i,r.code),r.code):a[i]=r.value)}f=f.withGradualFilter(a)}let S=u(i.readFactory,o),y=u(i.writeFactory,o),b=f.attach(S,y);return e({typeOrAlias:String(a.typeOrAlias),componentName:a.componentName,instanceName:String(a.instanceName),optic:b})};
|
package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type ComponentEntry, type ComponentImplementation } from '../../../parse-application-files/spec/index.js';
|
|
2
2
|
import type { AdminModelRuntime } from '../admin-runtime/admin-model-runtime.js';
|
|
3
3
|
import type { ConfiguratorModelRuntime } from '../configurator-runtime/configurator-model-runtime.js';
|
|
4
|
+
import { type SpecCodeMap } from '../spec-code/index.js';
|
|
4
5
|
import type { ComponentOptic } from './component-optic.js';
|
|
5
6
|
export declare const buildUserBoundOptic: (entry: ComponentEntry, impl: ComponentImplementation & {
|
|
6
7
|
readonly kind: 'userBound';
|
|
7
|
-
}, model: AdminModelRuntime | ConfiguratorModelRuntime) => ComponentOptic | undefined;
|
|
8
|
+
}, model: AdminModelRuntime | ConfiguratorModelRuntime, code: SpecCodeMap | undefined) => ComponentOptic | undefined;
|
package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{match as e}from"ts-pattern";import{Branded as t}from"@salsita-ai/common/utils";import{DomainComponentOpticBuilder as i,assertBoolean as n,assertNumber as r,assertString as o,componentsByName as a}from"#package/domain";import{
|
|
1
|
+
import{match as e}from"ts-pattern";import{Branded as t}from"@salsita-ai/common/utils";import{DomainComponentOpticBuilder as i,assertBoolean as n,assertNumber as r,assertString as o,componentsByName as a}from"#package/domain";import{specCodeComponentKey as s,specCodeFilterId as l}from"../../runtime-spec/index.js";import{resolveSpecCode as m}from"../spec-code/index.js";import{generateMemoEvalPlanRuntime as d}from"./generate-memo-eval-plan-runtime.js";let p=(e,t,i)=>{if("dynamic"===e.kind){let t=e.target;return e=>e[t]}if("eval"===e.kind){let n=l(i.componentKey,i.branch,t,e.code);return m(i.code,n,e.code)}return e.value},c=(e,t)=>{let i={};for(let[n,r]of Object.entries(e))"kind"!==n&&void 0!==r&&(i[n]=p(r,n,t));return i},f={assertString:o,assertNumber:r,assertBoolean:n},h=(e,t)=>{let i=t.commonTypeReflections[e]??t.entities[e]??t.aliasReflections[e];if(!i)throw Error(`Reflection "${e}" not found in ModelRuntime for write assertion. This is a bug — the type was resolved at parse time.`);return i},u=(e,t)=>{let i=t.entities[e]??t.aliasReflections[e];if(!i)throw Error(`Entity reflection "${e}" not found in ModelRuntime for write assertion. This is a bug — the type was resolved at parse time.`);return i},w=(t,i,n)=>e(t).with({kind:"primitive"},({assertFn:e})=>typeof i==("assertNumber"===e?"number":"assertBoolean"===e?"boolean":"string")).with({kind:"declaredType"},({typeName:e})=>h(e,n).is(i)).with({kind:"declaredTypeId"},({referencedType:e})=>u(e,n).isId(i)).with({kind:"literal"},({value:e})=>i===e).with({kind:"anyOf"},({assertions:e})=>e.some(e=>w(e,i,n))).with({kind:"none"},()=>!0).exhaustive(),y=(t,i,n)=>{e(t).with({kind:"primitive"},({assertFn:e})=>{f[e](i)}).with({kind:"declaredType"},({typeName:e})=>{h(e,n).assert(i)}).with({kind:"declaredTypeId"},({referencedType:e})=>{u(e,n).assertId(i)}).with({kind:"literal"},e=>{if(!w(e,i,n))throw Error(`Expected value to match its declared schema but got ${i}`)}).with({kind:"anyOf"},e=>{if(!w(e,i,n))throw Error(`Expected value to match one of its declared schemas but got ${i}`)}).with({kind:"none"},()=>{}).exhaustive()};export const buildUserBoundOptic=(e,n,r,o)=>{let l,m=(l=r.aliases,i.from(l)),p=a.get(e.componentName);if(!p)return void console.warn(`[ComponentOptic] Unknown component: ${e.componentName}`);let f=m.withComponent(p,e.instanceName,!0),h=e.isAlias?f.withAlias(String(e.typeOrAlias)):f.withEntity(String(e.typeOrAlias)),u=s(String(e.typeOrAlias),String(e.instanceName),e.componentName);for(let[e,t]of n.filters.items.entries()){if("root"===t.kind){let e=t.target,i=t=>t[e];h=h.withFilter(i);continue}h=h.withGradualFilter(c(t,{componentKey:u,branch:e,code:o}))}let w=d(n.plan,u,o),k="composite"===n.implementation.kind?n.implementation.writeBindings:[],g=k.length>0?e=>{let t={};for(let i of k)y(i.assertion,e[i.propKey],r),t[i.entityField]=e[i.propKey];return t}:()=>({}),v=h.attach(w,g);return t({typeOrAlias:String(e.typeOrAlias),componentName:e.componentName,instanceName:String(e.instanceName),optic:v})};
|
|
@@ -4,6 +4,7 @@ import type { RuntimeReferenceStore } from '../../../caching/index.js';
|
|
|
4
4
|
import type { ComponentEntry } from '../../../parse-application-files/spec/index.js';
|
|
5
5
|
import type { AdminModelRuntime } from '../admin-runtime/admin-model-runtime.js';
|
|
6
6
|
import type { ConfiguratorModelRuntime } from '../configurator-runtime/configurator-model-runtime.js';
|
|
7
|
+
import type { SpecCodeMap } from '../spec-code/index.js';
|
|
7
8
|
/** A component optic of any project, for any component type. */
|
|
8
9
|
export type AnyComponentOptic = DomainComponentOptic<any, any, any, any, any, any, SystemComponentTypeConstraint>;
|
|
9
10
|
/** A single built component optic with its identifying metadata. */
|
|
@@ -22,6 +23,8 @@ interface ComponentOpticsProps {
|
|
|
22
23
|
readonly referenceScope: string;
|
|
23
24
|
readonly components: readonly ComponentEntry[];
|
|
24
25
|
readonly modelRuntime: AdminModelRuntime | ConfiguratorModelRuntime;
|
|
26
|
+
/** The domain's map of the generated code module, which holds the entries' `$eval` code. */
|
|
27
|
+
readonly code: SpecCodeMap | undefined;
|
|
25
28
|
}
|
|
26
29
|
/**
|
|
27
30
|
* Builds component optics from the unified ComponentEntry[] on ApplicationSpec.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"lodash-es/isEqual.js";import{match as t}from"ts-pattern";import{Branded as
|
|
1
|
+
import e from"lodash-es/isEqual.js";import{match as t}from"ts-pattern";import{Branded as o}from"@salsita-ai/common/utils";import{buildSdkOptic as i}from"./build-sdk-optic.js";import{buildUserBoundOptic as n}from"./build-user-bound-optic.js";export const ComponentOptics=(t,i)=>{let n=t.createBuilder(i.referenceScope,{build:({entry:e,modelRuntime:t,code:o})=>m(e,t,o),getKey:({entry:e})=>`${e.implementation.kind}::${e.typeOrAlias}::${e.componentName}::${e.instanceName}`,compare:(t,o)=>t.modelRuntime.domainBuilder===o.modelRuntime.domainBuilder&&t.code===o.code&&e(t.entry.implementation,o.entry.implementation)}),d=[],r=new Set,l=!1;for(let e of i.components){let t={entry:e,modelRuntime:i.modelRuntime,code:i.code},o=n.build(t);o.output&&d.push(o.output),r.add(n.getKey(t)),o.changed&&(l=!0)}return n.cleanup(r)&&(l=!0),o({optics:d,changed:l})};let m=(e,o,m)=>t(e.implementation).with({kind:"userBound"},t=>n(e,t,o,m)).with({kind:"sdk"},t=>i(e,t,o.aliases,o,m)).exhaustive();
|
|
@@ -2,7 +2,8 @@ import { Branded } from '@salsita-ai/common/utils';
|
|
|
2
2
|
import type { DomainEntity, Expression as DomainExpression, Invariant as DomainInvariant } from '#package/domain';
|
|
3
3
|
import type { RuntimeReferenceStore } from '../../../caching/index.js';
|
|
4
4
|
import type { Expressions } from '../../../parse-application-files/index.js';
|
|
5
|
-
import type
|
|
5
|
+
import { type RuntimeModelVersion } from '../../runtime-spec/index.js';
|
|
6
|
+
import type { SpecCodeMap } from '../spec-code/index.js';
|
|
6
7
|
type RuntimeData = Record<string, unknown>;
|
|
7
8
|
type RuntimeEntity = DomainEntity<string>;
|
|
8
9
|
type AnyExpression = DomainExpression<RuntimeEntity, RuntimeEntity, RuntimeData, RuntimeData, RuntimeData, RuntimeEntity, unknown>;
|
|
@@ -41,7 +42,8 @@ interface ExpressionRuntimeSpec {
|
|
|
41
42
|
* - `user` — uses the dynamically imported impl from `src/expressions/*.ts`
|
|
42
43
|
* - `value` — evaluates the parsed {@link MemoEvalPlan}; stabilized per
|
|
43
44
|
* {@link canonicalEnhancedJsonValueKey} so identical values reuse the same
|
|
44
|
-
* evaluator across rebuilds.
|
|
45
|
+
* evaluator across rebuilds. Its `$eval` code comes from `code`, the domain's map of the generated
|
|
46
|
+
* code module, when that holds it.
|
|
45
47
|
*/
|
|
46
|
-
export declare const ExpressionRuntime: (spec: ExpressionRuntimeSpec, referenceStore: RuntimeReferenceStore, implementations: ExpressionImplementations, referenceScopePrefix: string, invariantImplementations
|
|
48
|
+
export declare const ExpressionRuntime: (spec: ExpressionRuntimeSpec, referenceStore: RuntimeReferenceStore, implementations: ExpressionImplementations, referenceScopePrefix: string, invariantImplementations: InvariantImplementations | undefined, code: SpecCodeMap | undefined) => ExpressionRuntimeResult;
|
|
47
49
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"lodash-es/isEqual.js";import{Branded as t}from"@salsita-ai/common/utils";import{createRelationFactory as i}from"#package/domain";import{canonicalEnhancedJsonValueKey as n,isSdkExpressionImplementation as a}from"../../../core/index.js";import{
|
|
1
|
+
import e from"lodash-es/isEqual.js";import{Branded as t}from"@salsita-ai/common/utils";import{createRelationFactory as i}from"#package/domain";import{canonicalEnhancedJsonValueKey as n,isSdkExpressionImplementation as a}from"../../../core/index.js";import{specCodeExpressionKey as r}from"../../runtime-spec/index.js";import{generateMemoEvalPlanRuntime as l}from"./generate-memo-eval-plan-runtime.js";let o={},s=["0-1","1-1","0-N","1-N"],p={relation:(e,t)=>{let n=t[0];if(!("object"==typeof n&&null!==n&&"kind"in n&&"target"in n&&"string"==typeof n.target&&"cardinality"in n&&s.includes(n.cardinality)&&("allOfType"===n.kind||("direct"===n.kind||"indirect"===n.kind)&&"field"in n&&"string"==typeof n.field)))throw Error("Cannot create the relation expression because its parameter is not a relation declaration. The application spec is inconsistent; rebuild it from a valid relations declaration.");return i(e.aliasMap)(n)},violations:(e,t)=>{let i=t[0];if("object"!=typeof i||null===i||!("entityType"in i)||"string"!=typeof i.entityType)throw Error("Cannot create the violations expression because its entityType parameter is missing. The application spec is inconsistent; rebuild it from a valid invariants declaration.");let n=i.entityType,a=Object.entries(e.invariantImplementations).flatMap(([t,i])=>{let a=e.aliasMap[t];return t===n||a?.includes(n)?i:[]});return{origin:{name:"$violations",typeOrAlias:n},evaluate:(e,t,i)=>a.flatMap(n=>n.evaluate(e,t,i)),meta:{}}}},m=e=>{let t=l(e.plan,r(e.entityOrAlias,e.name),e.code);return{origin:{name:e.name,typeOrAlias:e.entityOrAlias},evaluate:(e,i,n)=>t(n.domain.get$Entity(e,i),i,n),meta:{}}},d=e=>({...(0,p[e.kind])({aliasMap:e.aliasMap,invariantImplementations:e.invariantImplementations},e.params),origin:{name:e.name,typeOrAlias:e.entityOrAlias}});export const ExpressionRuntime=(i,r,l,s,p=o,u)=>{let c={};for(let[e,t]of i.latestModel.aliases)c[String(e)]=t.map(String);let f=r.createBuilder(`${s}/sdk`,{build:d,getKey:e=>`sdk::${e.entityOrAlias}::${e.name}`,compare:(t,i)=>t.kind===i.kind&&e(t.params,i.params)&&e(t.aliasMap,i.aliasMap)&&("violations"!==i.kind||t.invariantImplementations===i.invariantImplementations)}),y=r.createBuilder(`${s}/user`,{build:e=>e.impl,getKey:e=>`user::${e.entityType}::${e.name}`,compare:(e,t)=>e.impl===t.impl}),g=r.createBuilder(`${s}/value`,{build:m,getKey:e=>`value::${e.entityOrAlias}::${e.name}`,compare:(e,t)=>e.valueKey===t.valueKey&&e.code===t.code}),v={},S=!1,k=new Set,b=new Set,O=new Set;for(let[e,t]of i.expressions.expressions)for(let[,i]of t){let t=c[String(e)]??[String(e)];if(a(i.implementation)){let n={entityOrAlias:String(e),name:String(i.name),kind:i.implementation.kind,params:i.implementation.params,aliasMap:c,invariantImplementations:p},a=f.build(n);for(let e of(a.changed&&(S=!0),k.add(f.getKey(n)),t))v[e]||(v[e]={}),v[e][String(i.name)]=a.output;continue}if("value"===i.implementation.kind){let a=i.implementation.value,r={entityOrAlias:String(e),name:String(i.name),valueKey:n(a),plan:i.implementation.plan,code:u},l=g.build(r);for(let e of(l.changed&&(S=!0),O.add(g.getKey(r)),t))v[e]||(v[e]={}),v[e][String(i.name)]=l.output;continue}}for(let[e,t]of Object.entries(l))for(let[i,n]of Object.entries(t)){let t={entityType:e,name:i,impl:n},a=y.build(t);a.changed&&(S=!0),b.add(y.getKey(t)),v[e]||(v[e]={}),v[e][i]=a.output}f.cleanup(k)&&(S=!0),y.cleanup(b)&&(S=!0),g.cleanup(O)&&(S=!0);let h=[];for(let[e,t]of i.expressions.entityExpressions)for(let n of t.shapeGroups){let t=i.expressions.expressions.get(n);if(t)for(let[i]of t)v[String(e)]?.[String(i)]||h.push({entityType:String(e),exprName:String(i)})}return h.length>0?{ok:!1,missing:h}:{ok:!0,runtime:t({merged:v,changed:S})}};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { SelfAccessor } from '../../../core/index.js';
|
|
2
2
|
import type { MemoEvalPlan } from '../../../parse-application-files/spec/index.js';
|
|
3
|
+
import { type SpecCodeMap } from '../spec-code/index.js';
|
|
3
4
|
/**
|
|
4
5
|
* Runtime counterpart to
|
|
5
6
|
* {@link ../../code/templates/domain-spec/generate-memo-eval-plan-code#generateMemoEvalPlanCode | generateMemoEvalPlanCode}.
|
|
@@ -13,17 +14,20 @@ import type { MemoEvalPlan } from '../../../parse-application-files/spec/index.j
|
|
|
13
14
|
* - With deps: wraps the per-dep resolution in `memoEval` so equal dep arrays
|
|
14
15
|
* short-circuit to the cached body, matching codegen semantics exactly.
|
|
15
16
|
*
|
|
16
|
-
* Each `$eval` dep is
|
|
17
|
-
*
|
|
17
|
+
* Each `$eval` dep is the closure the generated code module holds under its spec code id
|
|
18
|
+
* (`<key>#<n>`, `key` naming the expression or component the plan belongs to), or its text
|
|
19
|
+
* compiled with `new Function` when there is no such closure; each `$target` dep reads
|
|
20
|
+
* `self[target]` verbatim. `$msg` markers inside the
|
|
18
21
|
* template lower to `{ id?, message }` descriptors for i18n consumers.
|
|
19
22
|
*/
|
|
20
23
|
type MemoEvalPlanRuntimeReader = (self: SelfAccessor, state?: unknown, ctx?: unknown) => unknown;
|
|
21
|
-
export declare const generateMemoEvalPlanRuntime: (plan: MemoEvalPlan) => MemoEvalPlanRuntimeReader;
|
|
24
|
+
export declare const generateMemoEvalPlanRuntime: (plan: MemoEvalPlan, key: string, code: SpecCodeMap | undefined) => MemoEvalPlanRuntimeReader;
|
|
22
25
|
/**
|
|
23
26
|
* Runtime counterpart to
|
|
24
27
|
* {@link ../../code/templates/domain-spec/generate-static-value-code#generateStaticValueCode | generateStaticValueCode}:
|
|
25
28
|
* evaluates a self-free plan once to the plain value a module-level constant holds. Plans that read
|
|
26
|
-
* `self` need an entity instance and are rejected.
|
|
29
|
+
* `self` need an entity instance and are rejected. `key` and `code` resolve its `$eval` code as in
|
|
30
|
+
* {@link generateMemoEvalPlanRuntime}.
|
|
27
31
|
*/
|
|
28
|
-
export declare const evaluateStaticMemoEvalPlan: (plan: MemoEvalPlan) => unknown;
|
|
32
|
+
export declare const evaluateStaticMemoEvalPlan: (plan: MemoEvalPlan, key: string, code: SpecCodeMap | undefined) => unknown;
|
|
29
33
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{memoEval as e}from"#package/domain";import{createMessageDescriptor as t}from"../../../core/index.js";let
|
|
1
|
+
import{memoEval as e}from"#package/domain";import{createMessageDescriptor as t}from"../../../core/index.js";import{specCodeEvalIds as r}from"../../runtime-spec/index.js";import{resolveSpecCode as a}from"../spec-code/index.js";let n=(e,r)=>{if("literal"===e.kind)return e.value;if("slot"===e.kind)return r[e.depIndex];if("msg"===e.kind)return t(e.marker);if("array"===e.kind)return e.items.map(e=>n(e,r));let a={};for(let[t,l]of e.entries)a[t]=n(l,r);return a};export const generateMemoEvalPlanRuntime=(t,l,i)=>{if(0===t.deps.length){let e=n(t.template,[]);return()=>e}let o=r(t,l),s=t.deps.map((e,t)=>{let r=o[t];return"eval"===e.kind&&void 0!==r?a(i,r,e.code):void 0});return e(e=>t.deps.map((t,r)=>"eval"===t.kind?s[r](e):Reflect.get(e,t.target)),(...e)=>n(t.template,e))};export const evaluateStaticMemoEvalPlan=(e,t,l)=>{if(e.usesSelf)throw Error("Cannot evaluate a plan that uses self as a static value. Filter self-dependent plans before evaluating constants.");let i=r(e,t),o=e.deps.map((e,t)=>{if("read"===e.kind)throw Error(`Cannot evaluate the self-dependent read "${e.target}" as a static value. Filter self-dependent plans before evaluating constants.`);return a(l,i[t],e.code)()});return n(e.template,o)};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { ExpressionName, Expressions, MemoEvalPlan } from '../../../parse-application-files/index.js';
|
|
2
|
+
import type { SpecCodeMap } from '../spec-code/index.js';
|
|
2
3
|
/** The self-free `constants:` plans declared on one entity or alias, or `undefined` when it has none. */
|
|
3
4
|
export declare const findReflectionConstants: (expressions: Expressions, entityOrAlias: string) => ReadonlyMap<ExpressionName, MemoEvalPlan> | undefined;
|
|
4
5
|
/**
|
|
5
6
|
* Runtime counterpart of the constants literal codegen passes to an enhanced reflection: the
|
|
6
7
|
* entity's or alias's self-free `constants:` values evaluated once to plain values, keyed by name.
|
|
8
|
+
* Their `$eval` code comes from `code` when the generated code module holds it.
|
|
7
9
|
*/
|
|
8
|
-
export declare const evaluateReflectionConstants: (expressions: Expressions, entityOrAlias: string) => Readonly<Record<string, unknown>>;
|
|
10
|
+
export declare const evaluateReflectionConstants: (expressions: Expressions, entityOrAlias: string, code: SpecCodeMap | undefined) => Readonly<Record<string, unknown>>;
|
package/dist/application-spec/generate-application/runtime/sections/reflection-constants-runtime.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{specCodeExpressionKey as t}from"../../runtime-spec/index.js";import{evaluateStaticMemoEvalPlan as n}from"./generate-memo-eval-plan-runtime.js";export const findReflectionConstants=(t,n)=>{for(let[e,o]of t.constants)if(String(e)===n)return o};export const evaluateReflectionConstants=(e,o,r)=>{let i=findReflectionConstants(e,o);return i?Object.fromEntries([...i].map(([e,i])=>[String(e),n(i,t(o,String(e)),r)])):{}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./resolve-spec-code.js";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SelfAccessor } from '../../../core/index.js';
|
|
2
|
+
import type { SpecCodeId } from '../../runtime-spec/index.js';
|
|
3
|
+
import type { SpecCodeMap } from './spec-code-module.js';
|
|
4
|
+
/**
|
|
5
|
+
* A piece of YAML code ready to run: it takes the `$` view of the entity it runs on, or nothing when
|
|
6
|
+
* the code does not read `self` (a constant).
|
|
7
|
+
*/
|
|
8
|
+
export type ResolvedSpecCode = (self?: SelfAccessor) => unknown;
|
|
9
|
+
/**
|
|
10
|
+
* The function for one piece of YAML code: the closure the generated code module holds under `id`,
|
|
11
|
+
* or the text compiled with `new Function` when there is no module (the editor, which rebuilds from
|
|
12
|
+
* YAML it has no generated module for) or the module has no such id.
|
|
13
|
+
*
|
|
14
|
+
* The module must come from the same generation as the spec. An id carries a hash of its code, so a
|
|
15
|
+
* module from another generation does not hold the ids of code that changed since: such code is
|
|
16
|
+
* compiled from the spec's text, never run from an old closure.
|
|
17
|
+
*/
|
|
18
|
+
export declare const resolveSpecCode: (code: SpecCodeMap | undefined, id: SpecCodeId, source: string) => ResolvedSpecCode;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const resolveSpecCode=(e,o,r)=>{let t=e?.[o];return void 0!==t?t:Function("self",`return (${r})`)};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { SpecCodeId } from '../../runtime-spec/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* One closure of the generated `.phoenix/spec-code.ts`. Each closure there is typed by the entity it
|
|
4
|
+
* runs on, so the map accepts any parameter type; the runtime calls every closure with the entity's
|
|
5
|
+
* `$` view, or with nothing when the code does not read `self`.
|
|
6
|
+
*/
|
|
7
|
+
export type SpecCode = (self: never) => unknown;
|
|
8
|
+
/** The closures of one domain, keyed by spec code id. */
|
|
9
|
+
export type SpecCodeMap = Readonly<Record<SpecCodeId, SpecCode>>;
|
|
10
|
+
/**
|
|
11
|
+
* The generated `.phoenix/spec-code.ts` module: the code written in YAML, one map per domain. The
|
|
12
|
+
* runtime looks code up here by id and compiles the text only for an id the module does not hold.
|
|
13
|
+
*/
|
|
14
|
+
export interface SpecCodeModule {
|
|
15
|
+
readonly configurator: SpecCodeMap;
|
|
16
|
+
readonly admin: SpecCodeMap;
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export*from"./runtime-spec.js";export*from"./encoded-runtime-spec.js";export*from"./encode-runtime-spec.js";export*from"./decode-runtime-spec.js";
|
|
1
|
+
export*from"./runtime-spec.js";export*from"./encoded-runtime-spec.js";export*from"./encode-runtime-spec.js";export*from"./decode-runtime-spec.js";export*from"./spec-code-id.js";
|