@picked/client 0.0.1-dev.1788925875333 → 0.0.1-next.1
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 -0
- package/dist/cjs/index.js +1 -4
- package/dist/cjs/plugins/create-experience/index.js +1 -1
- package/dist/cjs/plugins/experience-browserstorage-plugin/index.js +1 -0
- package/dist/cjs/plugins/history-browserstorage-plugin/index.js +1 -0
- package/dist/cjs/plugins/responses-browserstorage-plugin/index.js +1 -0
- package/dist/cjs/plugins/responses-indexeddb-plugin/index.js +1 -0
- package/dist/cjs/plugins/shopify/index.js +1 -0
- package/dist/cjs/plugins/single-page-app/index.js +1 -1
- package/dist/cjs/plugins/window-object/index.js +1 -1
- package/dist/cjs/server/index.js +1 -1
- package/dist/esm/index.js +733 -1814
- package/dist/esm/plugins/create-experience/index.js +398 -490
- package/dist/esm/plugins/experience-browserstorage-plugin/index.js +38 -0
- package/dist/esm/plugins/history-browserstorage-plugin/index.js +26 -0
- package/dist/esm/plugins/responses-browserstorage-plugin/index.js +36 -0
- package/dist/esm/plugins/responses-indexeddb-plugin/index.js +101 -0
- package/dist/esm/plugins/shopify/index.js +59 -0
- package/dist/esm/plugins/single-page-app/index.js +35 -31
- package/dist/esm/plugins/window-object/index.js +9 -9
- package/dist/esm/server/index.js +89 -141
- package/dist/experience-instance-6ZKZS7dF.cjs +1 -0
- package/dist/experience-instance-BA0EXYg5.js +712 -0
- package/dist/id-BKIWbSTy.cjs +1 -0
- package/dist/id-BW-g3y32.js +6 -0
- package/dist/logger-BsmHUUw1.cjs +1 -0
- package/dist/logger-C9a75KZn.js +5 -0
- package/dist/object-BbFTsGh3.cjs +1 -0
- package/dist/object-JwZ58NOH.js +28 -0
- package/dist/storage-BPJwmlva.cjs +1 -0
- package/dist/storage-D87xFySf.js +85 -0
- package/dist/supports-BvrzQAVk.js +79 -0
- package/dist/supports-C0y3-V5V.cjs +1 -0
- package/dist/types/client.d.ts +23 -119
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/entities/component/component.d.ts +6 -45
- package/dist/types/entities/component/component.d.ts.map +1 -1
- package/dist/types/entities/experience/experience.d.ts +99 -152
- package/dist/types/entities/experience/experience.d.ts.map +1 -1
- package/dist/types/entities/experience-instance/experience-instance.d.ts +113 -83
- package/dist/types/entities/experience-instance/experience-instance.d.ts.map +1 -1
- package/dist/types/entities/feature/feature.d.ts +8 -118
- package/dist/types/entities/feature/feature.d.ts.map +1 -1
- package/dist/types/entities/field/field.d.ts +64 -96
- package/dist/types/entities/field/field.d.ts.map +1 -1
- package/dist/types/entities/framework/framework.d.ts +7 -32
- package/dist/types/entities/framework/framework.d.ts.map +1 -1
- package/dist/types/entities/history/history.d.ts +6 -6
- package/dist/types/entities/history/history.d.ts.map +1 -1
- package/dist/types/entities/plugin/plugin.d.ts +2 -41
- package/dist/types/entities/plugin/plugin.d.ts.map +1 -1
- package/dist/types/entities/predicate/predicate.d.ts +7 -30
- package/dist/types/entities/predicate/predicate.d.ts.map +1 -1
- package/dist/types/entities/project/project.d.ts +9 -0
- package/dist/types/entities/project/project.d.ts.map +1 -0
- package/dist/types/entities/response/response.d.ts +21 -57
- package/dist/types/entities/response/response.d.ts.map +1 -1
- package/dist/types/exports.d.ts +4 -22
- package/dist/types/exports.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -12
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/logic-engine.d.ts +11 -13
- package/dist/types/logic-engine.d.ts.map +1 -1
- package/dist/types/picked.d.ts +184 -381
- package/dist/types/picked.d.ts.map +1 -1
- package/dist/types/ping.d.ts +10 -0
- package/dist/types/ping.d.ts.map +1 -0
- package/dist/types/plugins/create-experience/create-experience.d.ts +44 -119
- package/dist/types/plugins/create-experience/create-experience.d.ts.map +1 -1
- package/dist/types/plugins/create-experience/index.d.ts +2 -2
- package/dist/types/plugins/create-experience/index.d.ts.map +1 -1
- package/dist/types/plugins/create-experience/plugin.d.ts +2 -3
- package/dist/types/plugins/create-experience/plugin.d.ts.map +1 -1
- package/dist/types/plugins/create-experience/serialization.d.ts.map +1 -1
- package/dist/types/plugins/experience-browserstorage-plugin/index.d.ts.map +1 -0
- package/dist/types/plugins/experience-browserstorage-plugin/plugin.d.ts +6 -0
- package/dist/types/plugins/experience-browserstorage-plugin/plugin.d.ts.map +1 -0
- package/dist/types/plugins/history-browserstorage-plugin/index.d.ts.map +1 -0
- package/dist/types/plugins/{history-browser-storage → history-browserstorage-plugin}/plugin.d.ts +1 -2
- package/dist/types/plugins/history-browserstorage-plugin/plugin.d.ts.map +1 -0
- package/dist/types/plugins/responses-browserstorage-plugin/index.d.ts.map +1 -0
- package/dist/types/plugins/responses-browserstorage-plugin/plugin.d.ts +6 -0
- package/dist/types/plugins/responses-browserstorage-plugin/plugin.d.ts.map +1 -0
- package/dist/types/plugins/responses-indexeddb-plugin/index.d.ts.map +1 -0
- package/dist/types/plugins/responses-indexeddb-plugin/plugin.d.ts +3 -0
- package/dist/types/plugins/responses-indexeddb-plugin/plugin.d.ts.map +1 -0
- package/dist/types/plugins/shopify/index.d.ts +2 -0
- package/dist/types/plugins/shopify/index.d.ts.map +1 -0
- package/dist/types/plugins/shopify/plugin.d.ts +3 -0
- package/dist/types/plugins/shopify/plugin.d.ts.map +1 -0
- package/dist/types/plugins/shopify/shopify.d.ts +28 -0
- package/dist/types/plugins/shopify/shopify.d.ts.map +1 -0
- package/dist/types/plugins/single-page-app/plugin.d.ts +2 -2
- package/dist/types/plugins/single-page-app/plugin.d.ts.map +1 -1
- package/dist/types/plugins/window-object/plugin.d.ts +2 -2
- package/dist/types/server/index.d.ts +3 -18
- package/dist/types/server/index.d.ts.map +1 -1
- package/dist/types/utils/dom.d.ts +6 -4
- package/dist/types/utils/dom.d.ts.map +1 -1
- package/dist/types/utils/events.d.ts +38 -83
- package/dist/types/utils/events.d.ts.map +1 -1
- package/dist/types/utils/global-obj.d.ts +2 -1
- package/dist/types/utils/global-obj.d.ts.map +1 -1
- package/dist/types/utils/id.d.ts.map +1 -1
- package/dist/types/utils/indexed-db.d.ts +1 -2
- package/dist/types/utils/indexed-db.d.ts.map +1 -1
- package/dist/types/utils/logger.d.ts +1 -2
- package/dist/types/utils/logger.d.ts.map +1 -1
- package/dist/types/utils/node-tree/get-next-node-from-conditional.d.ts +3 -0
- package/dist/types/utils/node-tree/get-next-node-from-conditional.d.ts.map +1 -0
- package/dist/types/utils/node-tree/get-next-node.d.ts +1 -1
- package/dist/types/utils/node-tree/get-next-node.d.ts.map +1 -1
- package/dist/types/utils/node-tree/get-origin-node.d.ts +1 -1
- package/dist/types/utils/node-tree/get-origin-node.d.ts.map +1 -1
- package/dist/types/utils/node-tree/min-max-steps-to-leaf.d.ts +1 -1
- package/dist/types/utils/node-tree/min-max-steps-to-leaf.d.ts.map +1 -1
- package/dist/types/utils/node-tree/min-max-steps-to-origin.d.ts +1 -1
- package/dist/types/utils/node-tree/min-max-steps-to-origin.d.ts.map +1 -1
- package/dist/types/utils/node-tree/next-reachable-step-nodes.d.ts +1 -1
- package/dist/types/utils/node-tree/next-reachable-step-nodes.d.ts.map +1 -1
- package/dist/types/utils/nodes.d.ts +2 -3
- package/dist/types/utils/nodes.d.ts.map +1 -1
- package/dist/types/utils/object.d.ts +8 -0
- package/dist/types/utils/object.d.ts.map +1 -1
- package/dist/types/utils/rules-logic.d.ts +3 -33
- package/dist/types/utils/rules-logic.d.ts.map +1 -1
- package/dist/types/utils/search-params.d.ts.map +1 -1
- package/dist/types/utils/state-snaphot.d.ts +16 -0
- package/dist/types/utils/state-snaphot.d.ts.map +1 -0
- package/dist/types/utils/storage.d.ts +11 -374
- package/dist/types/utils/storage.d.ts.map +1 -1
- package/dist/types/utils/supports.d.ts +0 -87
- package/dist/types/utils/supports.d.ts.map +1 -1
- package/package.json +49 -182
- package/dist/.tsbuildinfo +0 -1
- package/dist/api-DbMJli3H.js +0 -22
- package/dist/api-qiqq8lgz.cjs +0 -1
- package/dist/cjs/form/index.js +0 -1
- package/dist/cjs/plugins/dom-observer/index.js +0 -1
- package/dist/cjs/plugins/dynamic-experiences/index.js +0 -1
- package/dist/cjs/plugins/experience-browser-storage/index.js +0 -1
- package/dist/cjs/plugins/history-browser-storage/index.js +0 -1
- package/dist/cjs/plugins/responses-browser-storage/index.js +0 -1
- package/dist/cjs/plugins/responses-indexeddb/index.js +0 -1
- package/dist/cjs/plugins/telemetry/index.js +0 -1
- package/dist/cjs/plugins/web-components/index.js +0 -1
- package/dist/cjs/preview/index.js +0 -1
- package/dist/docs/_root.css +0 -101
- package/dist/docs/explanation/conditions-and-the-logic-engine.md +0 -94
- package/dist/docs/explanation/content-references.md +0 -99
- package/dist/docs/explanation/feature-flag-allocation.md +0 -218
- package/dist/docs/explanation/how-picked-works.md +0 -124
- package/dist/docs/explanation/how-pickedql-works.md +0 -76
- package/dist/docs/explanation/pages-and-flows.md +0 -64
- package/dist/docs/explanation/the-content-model.md +0 -87
- package/dist/docs/explanation/the-two-apis.md +0 -68
- package/dist/docs/explanation/why-server-side-rendering.md +0 -76
- package/dist/docs/explanation/workspaces-and-versions.md +0 -71
- package/dist/docs/how-to/add-a-step-field-or-action.md +0 -43
- package/dist/docs/how-to/analytics/index.md +0 -316
- package/dist/docs/how-to/archive-or-delete-a-workspace.md +0 -46
- package/dist/docs/how-to/authenticate-the-cli.md +0 -97
- package/dist/docs/how-to/authenticate-with-a-magic-link.md +0 -40
- package/dist/docs/how-to/authenticate-with-a-password.md +0 -51
- package/dist/docs/how-to/authenticate-with-an-api-key.md +0 -51
- package/dist/docs/how-to/authenticate-with-oauth.md +0 -40
- package/dist/docs/how-to/build-a-flow.md +0 -83
- package/dist/docs/how-to/connect-the-mcp-server.md +0 -38
- package/dist/docs/how-to/create-a-content-entry.md +0 -48
- package/dist/docs/how-to/create-a-project.md +0 -29
- package/dist/docs/how-to/create-an-experience.md +0 -42
- package/dist/docs/how-to/create-and-revoke-an-api-key.md +0 -42
- package/dist/docs/how-to/debug-with-the-chrome-extension.md +0 -57
- package/dist/docs/how-to/define-a-page-layout.md +0 -46
- package/dist/docs/how-to/fill-and-publish-a-page.md +0 -66
- package/dist/docs/how-to/install-the-gtm-template.md +0 -84
- package/dist/docs/how-to/install-the-sdk.md +0 -93
- package/dist/docs/how-to/install-the-vite-plugin.md +0 -69
- package/dist/docs/how-to/invite-and-remove-members.md +0 -34
- package/dist/docs/how-to/point-one-entry-at-another.md +0 -61
- package/dist/docs/how-to/preview-a-workspace.md +0 -28
- package/dist/docs/how-to/publish-a-workspace.md +0 -30
- package/dist/docs/how-to/read-a-feature-flag.md +0 -113
- package/dist/docs/how-to/read-a-referenced-entry.md +0 -109
- package/dist/docs/how-to/register-a-component.md +0 -55
- package/dist/docs/how-to/register-an-action-handler.md +0 -67
- package/dist/docs/how-to/render-a-step-form.md +0 -131
- package/dist/docs/how-to/render-an-unpublished-preview.md +0 -41
- package/dist/docs/how-to/reuse-a-section.md +0 -53
- package/dist/docs/how-to/reuse-a-step-field-or-action.md +0 -28
- package/dist/docs/how-to/roll-back-a-published-version.md +0 -26
- package/dist/docs/how-to/run-an-ab-test.md +0 -49
- package/dist/docs/how-to/run-code-on-a-form-submission.md +0 -125
- package/dist/docs/how-to/server-render-a-page.md +0 -81
- package/dist/docs/how-to/set-a-content-security-policy.md +0 -32
- package/dist/docs/how-to/set-up-mfa.md +0 -69
- package/dist/docs/how-to/switch-workspaces.md +0 -122
- package/dist/docs/how-to/upload-and-use-an-asset.mdx +0 -73
- package/dist/docs/how-to/validate-a-field.md +0 -52
- package/dist/docs/how-to/write-a-condition.md +0 -45
- package/dist/docs/how-to/write-a-predicate.md +0 -60
- package/dist/docs/index.md +0 -59
- package/dist/docs/reference/dashboard/actions.mdx +0 -53
- package/dist/docs/reference/dashboard/api-keys.mdx +0 -38
- package/dist/docs/reference/dashboard/conditions.mdx +0 -42
- package/dist/docs/reference/dashboard/content/asset-library.mdx +0 -63
- package/dist/docs/reference/dashboard/content/blocks.mdx +0 -57
- package/dist/docs/reference/dashboard/content/content-entries.mdx +0 -95
- package/dist/docs/reference/dashboard/content/models.mdx +0 -108
- package/dist/docs/reference/dashboard/content/pages.mdx +0 -61
- package/dist/docs/reference/dashboard/experiences.mdx +0 -51
- package/dist/docs/reference/dashboard/features.mdx +0 -154
- package/dist/docs/reference/dashboard/fields.mdx +0 -106
- package/dist/docs/reference/dashboard/flow-builder/canvas.mdx +0 -58
- package/dist/docs/reference/dashboard/flow-builder/condition-builder.md +0 -57
- package/dist/docs/reference/dashboard/flow-builder/keyboard-shortcuts.md +0 -72
- package/dist/docs/reference/dashboard/flow-builder/nodes.md +0 -63
- package/dist/docs/reference/dashboard/projects.mdx +0 -44
- package/dist/docs/reference/dashboard/reports.mdx +0 -43
- package/dist/docs/reference/dashboard/steps.mdx +0 -37
- package/dist/docs/reference/dashboard/team-management.md +0 -29
- package/dist/docs/reference/dashboard/workspace-versioning.mdx +0 -30
- package/dist/docs/reference/dashboard/workspaces.mdx +0 -76
- package/dist/docs/reference/delivery-api/experience-content.md +0 -152
- package/dist/docs/reference/delivery-api/index.md +0 -45
- package/dist/docs/reference/delivery-api/preview-caching-crawling.md +0 -79
- package/dist/docs/reference/delivery-api/project-config.md +0 -65
- package/dist/docs/reference/delivery-api/workspace-schema.md +0 -85
- package/dist/docs/reference/glossary.md +0 -181
- package/dist/docs/reference/management-api/authentication.md +0 -74
- package/dist/docs/reference/management-api/authorization-and-scopes.md +0 -285
- package/dist/docs/reference/management-api/error-handling.md +0 -233
- package/dist/docs/reference/management-api/pagination.md +0 -192
- package/dist/docs/reference/pickedql/data-sources.md +0 -174
- package/dist/docs/reference/pickedql/dimensions.md +0 -103
- package/dist/docs/reference/pickedql/filtering.md +0 -64
- package/dist/docs/reference/pickedql/index.md +0 -18
- package/dist/docs/reference/pickedql/schema.md +0 -172
- package/dist/docs/reference/pickedql/virtual-functions.md +0 -248
- package/dist/docs/reference/sdk/actions.md +0 -30
- package/dist/docs/reference/sdk/analytics-events.md +0 -445
- package/dist/docs/reference/sdk/conditions.md +0 -147
- package/dist/docs/reference/sdk/content-security-policy.md +0 -21
- package/dist/docs/reference/sdk/content.md +0 -213
- package/dist/docs/reference/sdk/experiences.md +0 -51
- package/dist/docs/reference/sdk/features.md +0 -256
- package/dist/docs/reference/sdk/fields.md +0 -255
- package/dist/docs/reference/sdk/index.md +0 -68
- package/dist/docs/reference/sdk/plugins/create-experience.md +0 -123
- package/dist/docs/reference/sdk/plugins/dynamic-experiences.md +0 -74
- package/dist/docs/reference/sdk/plugins/index.md +0 -29
- package/dist/docs/reference/sdk/plugins/window-object.md +0 -25
- package/dist/docs/reference/sdk/predicates.md +0 -43
- package/dist/docs/reference/sdk/ssr/index.md +0 -33
- package/dist/docs/reference/sdk/ssr/rendering-and-hydration.md +0 -103
- package/dist/docs/reference/sdk/ssr/serialize.md +0 -80
- package/dist/docs/reference/sdk/ssr/slots-and-placements.md +0 -59
- package/dist/docs/reference/sdk/steps.md +0 -86
- package/dist/docs/reference/sdk/type-generation.md +0 -196
- package/dist/docs/reference/tools/chrome-extension.md +0 -16
- package/dist/docs/reference/tools/cli.md +0 -146
- package/dist/docs/reference/tools/image-optimisation-service.md +0 -104
- package/dist/docs/reference/tools/mcp.md +0 -90
- package/dist/docs/reference/tools/vite-plugin.md +0 -163
- package/dist/docs/tutorials/first-api-call.md +0 -228
- package/dist/docs/tutorials/first-experience-in-the-dashboard.mdx +0 -143
- package/dist/docs/tutorials/first-experience.mdx +0 -254
- package/dist/docs/tutorials/first-server-rendered-page.mdx +0 -186
- package/dist/dom-BqcToNL0.js +0 -82
- package/dist/dom-DlLH3FxV.cjs +0 -1
- package/dist/emit-D-tLiWL1.cjs +0 -1
- package/dist/emit-Ds2EG7CB.js +0 -14
- package/dist/esm/form/index.js +0 -565
- package/dist/esm/plugins/dom-observer/index.js +0 -87
- package/dist/esm/plugins/dynamic-experiences/index.js +0 -5
- package/dist/esm/plugins/experience-browser-storage/index.js +0 -38
- package/dist/esm/plugins/history-browser-storage/index.js +0 -26
- package/dist/esm/plugins/responses-browser-storage/index.js +0 -71
- package/dist/esm/plugins/responses-indexeddb/index.js +0 -89
- package/dist/esm/plugins/telemetry/index.js +0 -100
- package/dist/esm/plugins/web-components/index.js +0 -19
- package/dist/esm/preview/index.js +0 -2
- package/dist/experience-instance-DGk11d8a.js +0 -563
- package/dist/experience-instance-Dej3P1sE.cjs +0 -1
- package/dist/id-Bo4RBeOs.js +0 -4
- package/dist/id-Js-62re-.cjs +0 -1
- package/dist/inert-script-report-B_bMPRzp.js +0 -18
- package/dist/inert-script-report-ijRHPtcY.cjs +0 -1
- package/dist/logger-CSTvAyyB.cjs +0 -1
- package/dist/logger-DMN6TxJJ.js +0 -4
- package/dist/object-BUDGxEqy.js +0 -25
- package/dist/object-CIkt7Fkr.cjs +0 -1
- package/dist/plugin-BcLaCLm1.cjs +0 -1
- package/dist/plugin-De_BJSwE.js +0 -194
- package/dist/preview-channel-CSr96XAo.js +0 -98
- package/dist/preview-channel-Cx0e6fye.cjs +0 -1
- package/dist/protocol-Bb_vpLKE.cjs +0 -1
- package/dist/protocol-C5KkkiZc.js +0 -84
- package/dist/provider-C_9u0yGJ.cjs +0 -1
- package/dist/provider-ovM-CBX_.js +0 -98
- package/dist/registry-C1t8l3t9.cjs +0 -1
- package/dist/registry-CXZv0uLg.js +0 -18
- package/dist/rules-logic-CGZIYgAI.cjs +0 -1
- package/dist/rules-logic-HesIUCu6.js +0 -13
- package/dist/storage-1MW3-_As.js +0 -103
- package/dist/storage-DUw9UJ2h.cjs +0 -1
- package/dist/supports-CO9bJGNl.js +0 -92
- package/dist/supports-DBzjGaWD.cjs +0 -1
- package/dist/types/data-source/api.d.ts +0 -60
- package/dist/types/data-source/api.d.ts.map +0 -1
- package/dist/types/data-source/provider.d.ts +0 -103
- package/dist/types/data-source/provider.d.ts.map +0 -1
- package/dist/types/data-source/registry.d.ts +0 -26
- package/dist/types/data-source/registry.d.ts.map +0 -1
- package/dist/types/data-source/request-observer.d.ts +0 -62
- package/dist/types/data-source/request-observer.d.ts.map +0 -1
- package/dist/types/data-source/virtual-data.d.ts +0 -19
- package/dist/types/data-source/virtual-data.d.ts.map +0 -1
- package/dist/types/entities/action/action.d.ts +0 -85
- package/dist/types/entities/action/action.d.ts.map +0 -1
- package/dist/types/entities/component/lazyComponent.d.ts +0 -11
- package/dist/types/entities/component/lazyComponent.d.ts.map +0 -1
- package/dist/types/entities/condition/condition.d.ts +0 -29
- package/dist/types/entities/condition/condition.d.ts.map +0 -1
- package/dist/types/entities/content/content.d.ts +0 -53
- package/dist/types/entities/content/content.d.ts.map +0 -1
- package/dist/types/entities/content/reference.d.ts +0 -101
- package/dist/types/entities/content/reference.d.ts.map +0 -1
- package/dist/types/entities/field/policies.d.ts +0 -35
- package/dist/types/entities/field/policies.d.ts.map +0 -1
- package/dist/types/entities/response/response-validation.d.ts +0 -75
- package/dist/types/entities/response/response-validation.d.ts.map +0 -1
- package/dist/types/entities/session/session.d.ts +0 -46
- package/dist/types/entities/session/session.d.ts.map +0 -1
- package/dist/types/entities/step/step.d.ts +0 -56
- package/dist/types/entities/step/step.d.ts.map +0 -1
- package/dist/types/form/build-responses.d.ts +0 -18
- package/dist/types/form/build-responses.d.ts.map +0 -1
- package/dist/types/form/create-field-evaluator.d.ts +0 -28
- package/dist/types/form/create-field-evaluator.d.ts.map +0 -1
- package/dist/types/form/create-field-validation.d.ts +0 -60
- package/dist/types/form/create-field-validation.d.ts.map +0 -1
- package/dist/types/form/create-form.d.ts +0 -153
- package/dist/types/form/create-form.d.ts.map +0 -1
- package/dist/types/form/create-submit-pipeline.d.ts +0 -116
- package/dist/types/form/create-submit-pipeline.d.ts.map +0 -1
- package/dist/types/form/get-step-fields.d.ts +0 -19
- package/dist/types/form/get-step-fields.d.ts.map +0 -1
- package/dist/types/form/index.d.ts +0 -11
- package/dist/types/form/index.d.ts.map +0 -1
- package/dist/types/lifecycle/condition-selection.d.ts +0 -146
- package/dist/types/lifecycle/condition-selection.d.ts.map +0 -1
- package/dist/types/lifecycle/lifecycle.d.ts +0 -48
- package/dist/types/lifecycle/lifecycle.d.ts.map +0 -1
- package/dist/types/lifecycle/rules-logic.d.ts +0 -25
- package/dist/types/lifecycle/rules-logic.d.ts.map +0 -1
- package/dist/types/lifecycle/state-snapshot.d.ts +0 -38
- package/dist/types/lifecycle/state-snapshot.d.ts.map +0 -1
- package/dist/types/plugins/dom-observer/index.d.ts +0 -3
- package/dist/types/plugins/dom-observer/index.d.ts.map +0 -1
- package/dist/types/plugins/dom-observer/plugin.d.ts +0 -50
- package/dist/types/plugins/dom-observer/plugin.d.ts.map +0 -1
- package/dist/types/plugins/dynamic-experiences/hash.d.ts +0 -105
- package/dist/types/plugins/dynamic-experiences/hash.d.ts.map +0 -1
- package/dist/types/plugins/dynamic-experiences/index.d.ts +0 -7
- package/dist/types/plugins/dynamic-experiences/index.d.ts.map +0 -1
- package/dist/types/plugins/dynamic-experiences/plugin.d.ts +0 -49
- package/dist/types/plugins/dynamic-experiences/plugin.d.ts.map +0 -1
- package/dist/types/plugins/dynamic-experiences/types.d.ts +0 -45
- package/dist/types/plugins/dynamic-experiences/types.d.ts.map +0 -1
- package/dist/types/plugins/experience-browser-storage/index.d.ts.map +0 -1
- package/dist/types/plugins/experience-browser-storage/plugin.d.ts +0 -7
- package/dist/types/plugins/experience-browser-storage/plugin.d.ts.map +0 -1
- package/dist/types/plugins/history-browser-storage/index.d.ts.map +0 -1
- package/dist/types/plugins/history-browser-storage/plugin.d.ts.map +0 -1
- package/dist/types/plugins/responses-browser-storage/index.d.ts.map +0 -1
- package/dist/types/plugins/responses-browser-storage/plugin.d.ts +0 -18
- package/dist/types/plugins/responses-browser-storage/plugin.d.ts.map +0 -1
- package/dist/types/plugins/responses-indexeddb/index.d.ts.map +0 -1
- package/dist/types/plugins/responses-indexeddb/plugin.d.ts +0 -3
- package/dist/types/plugins/responses-indexeddb/plugin.d.ts.map +0 -1
- package/dist/types/plugins/telemetry/emit.d.ts +0 -18
- package/dist/types/plugins/telemetry/emit.d.ts.map +0 -1
- package/dist/types/plugins/telemetry/index.d.ts +0 -4
- package/dist/types/plugins/telemetry/index.d.ts.map +0 -1
- package/dist/types/plugins/telemetry/plugin-summary.d.ts +0 -10
- package/dist/types/plugins/telemetry/plugin-summary.d.ts.map +0 -1
- package/dist/types/plugins/telemetry/plugin.d.ts +0 -45
- package/dist/types/plugins/telemetry/plugin.d.ts.map +0 -1
- package/dist/types/plugins/web-components/index.d.ts +0 -2
- package/dist/types/plugins/web-components/index.d.ts.map +0 -1
- package/dist/types/plugins/web-components/plugin.d.ts +0 -4
- package/dist/types/plugins/web-components/plugin.d.ts.map +0 -1
- package/dist/types/preview/index.d.ts +0 -18
- package/dist/types/preview/index.d.ts.map +0 -1
- package/dist/types/preview-bridge/index.d.ts +0 -14
- package/dist/types/preview-bridge/index.d.ts.map +0 -1
- package/dist/types/preview-channel.d.ts +0 -16
- package/dist/types/preview-channel.d.ts.map +0 -1
- package/dist/types/preview-receiver/apply-ops.d.ts +0 -32
- package/dist/types/preview-receiver/apply-ops.d.ts.map +0 -1
- package/dist/types/preview-receiver/index.d.ts +0 -32
- package/dist/types/preview-receiver/index.d.ts.map +0 -1
- package/dist/types/preview-receiver/protocol.d.ts +0 -69
- package/dist/types/preview-receiver/protocol.d.ts.map +0 -1
- package/dist/types/schema-registry.d.ts +0 -206
- package/dist/types/schema-registry.d.ts.map +0 -1
- package/dist/types/server/serialize.d.ts +0 -87
- package/dist/types/server/serialize.d.ts.map +0 -1
- package/dist/types/typed-content.d.ts +0 -17
- package/dist/types/typed-content.d.ts.map +0 -1
- package/dist/types/utils/client-telemetry.d.ts +0 -25
- package/dist/types/utils/client-telemetry.d.ts.map +0 -1
- package/dist/types/utils/content-path.d.ts +0 -37
- package/dist/types/utils/content-path.d.ts.map +0 -1
- package/dist/types/utils/html-asset-value.d.ts +0 -20
- package/dist/types/utils/html-asset-value.d.ts.map +0 -1
- package/dist/types/utils/inert-script-report.d.ts +0 -40
- package/dist/types/utils/inert-script-report.d.ts.map +0 -1
- package/dist/types/utils/node-tree/get-next-node-from-action.d.ts +0 -25
- package/dist/types/utils/node-tree/get-next-node-from-action.d.ts.map +0 -1
- package/dist/types/utils/node-tree/get-next-node-from-condition.d.ts +0 -17
- package/dist/types/utils/node-tree/get-next-node-from-condition.d.ts.map +0 -1
- package/dist/types/utils/picked-config.d.ts +0 -39
- package/dist/types/utils/picked-config.d.ts.map +0 -1
- package/dist/types/utils/preview-session.d.ts +0 -12
- package/dist/types/utils/preview-session.d.ts.map +0 -1
- package/dist/types/utils/rehydrate-scripts.d.ts +0 -50
- package/dist/types/utils/rehydrate-scripts.d.ts.map +0 -1
- package/dist/types/utils/render-string.d.ts +0 -24
- package/dist/types/utils/render-string.d.ts.map +0 -1
- package/dist/types/utils/user-timing.d.ts +0 -21
- package/dist/types/utils/user-timing.d.ts.map +0 -1
- package/dist/version-BvLZaTMC.cjs +0 -1
- package/dist/version-VvasRUfR.js +0 -256
- /package/dist/types/plugins/{experience-browser-storage → experience-browserstorage-plugin}/index.d.ts +0 -0
- /package/dist/types/plugins/{history-browser-storage → history-browserstorage-plugin}/index.d.ts +0 -0
- /package/dist/types/plugins/{responses-browser-storage → responses-browserstorage-plugin}/index.d.ts +0 -0
- /package/dist/types/plugins/{responses-indexeddb → responses-indexeddb-plugin}/index.d.ts +0 -0
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/** @file Submit pipeline for form instances — manages lifecycle, validation, and navigation. */
|
|
2
|
-
import { type Event, type EventCallable, type Store } from 'effector';
|
|
3
|
-
import type { ExperienceInstance } from '../entities/experience-instance/experience-instance';
|
|
4
|
-
import type { ExperienceStep } from '../entities/step/step';
|
|
5
|
-
import type { Field } from '../entities/field/field';
|
|
6
|
-
import type { ValidationError } from '../entities/response/response';
|
|
7
|
-
import type { Picked } from '../picked';
|
|
8
|
-
import type { FieldValueFor } from '../schema-registry';
|
|
9
|
-
export type SubmitEventWithCurrentTarget = SubmitEvent & {
|
|
10
|
-
currentTarget: EventTarget & HTMLFormElement;
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Callback fired after a successful commit, receiving the committed `data` keyed by
|
|
14
|
-
* the step's field ids.
|
|
15
|
-
*
|
|
16
|
-
* The `data` value type is a schema-typed *view* over runtime-`FieldValue` data — the
|
|
17
|
-
* same soundness posture as `getField`/`getByFieldKey`. The registry narrows each field
|
|
18
|
-
* id to its declared value type, but the values are not runtime-validated against it. The
|
|
19
|
-
* default `TFieldIds = string` resolves to `Record<string, FieldValue>`, so untyped
|
|
20
|
-
* consumers keep the broad value type.
|
|
21
|
-
*/
|
|
22
|
-
export type SuccessCallback<TFieldIds extends string = string> = (options: {
|
|
23
|
-
data: {
|
|
24
|
-
[P in TFieldIds]: FieldValueFor<P>;
|
|
25
|
-
};
|
|
26
|
-
stopNavigation: EventCallable<void>;
|
|
27
|
-
}) => void | Promise<void>;
|
|
28
|
-
export type ErrorCallback = (errors: ValidationError[]) => void | Promise<void>;
|
|
29
|
-
/**
|
|
30
|
-
* Callback fired before commit, receiving the parsed `data` keyed by the step's field
|
|
31
|
-
* ids and optionally returning a transformed copy.
|
|
32
|
-
*
|
|
33
|
-
* The `data` value type is a schema-typed *view* over runtime-`FieldValue` data — the
|
|
34
|
-
* same soundness posture as `getField`/`getByFieldKey`. The registry narrows each field
|
|
35
|
-
* id to its declared value type, but the values are not runtime-validated against it. The
|
|
36
|
-
* default `TFieldIds = string` resolves to `Record<string, FieldValue>`, so untyped
|
|
37
|
-
* consumers keep the broad value type.
|
|
38
|
-
*/
|
|
39
|
-
export type SubmitCallback<TFieldIds extends string = string> = (data: {
|
|
40
|
-
[P in TFieldIds]: FieldValueFor<P>;
|
|
41
|
-
}) => {
|
|
42
|
-
[P in TFieldIds]: FieldValueFor<P>;
|
|
43
|
-
} | void | Promise<{
|
|
44
|
-
[P in TFieldIds]: FieldValueFor<P>;
|
|
45
|
-
} | void>;
|
|
46
|
-
/**
|
|
47
|
-
* Latest-wins submit callback slots accepted by the framework adapters.
|
|
48
|
-
*
|
|
49
|
-
* Declared here so `@picked/react` and `@picked/svelte` share one shape rather
|
|
50
|
-
* than each defining its own. Passing callbacks as options is the recommended
|
|
51
|
-
* style in both adapters: the callbacks arrive as arguments, so there is no
|
|
52
|
-
* registration lifecycle for a consumer to get wrong, and re-rendering with a new
|
|
53
|
-
* inline function simply replaces the previous one.
|
|
54
|
-
*
|
|
55
|
-
* @example createForm(id, title, keys, { onSuccess: ({ data }) => track(data) })
|
|
56
|
-
*/
|
|
57
|
-
export interface FormCallbackOptions<TFieldKeys extends string = string> {
|
|
58
|
-
onBeforeSubmit?: SubmitCallback<TFieldKeys>;
|
|
59
|
-
onSuccess?: SuccessCallback<TFieldKeys>;
|
|
60
|
-
onError?: ErrorCallback;
|
|
61
|
-
}
|
|
62
|
-
export interface SubmitPipelineConfig {
|
|
63
|
-
client: Picked;
|
|
64
|
-
experienceInstance: ExperienceInstance;
|
|
65
|
-
formId: string;
|
|
66
|
-
title: Store<string>;
|
|
67
|
-
stepStore: Store<ExperienceStep | null>;
|
|
68
|
-
fieldsStore: Store<Field[]>;
|
|
69
|
-
goToNextStep: EventCallable<void>;
|
|
70
|
-
}
|
|
71
|
-
export interface SubmitPipeline {
|
|
72
|
-
submitEvent: EventCallable<SubmitEventWithCurrentTarget>;
|
|
73
|
-
isFormSubmitting: Store<boolean>;
|
|
74
|
-
onBeforeSubmit: (callback: SubmitCallback) => () => void;
|
|
75
|
-
onSuccess: (callback: SuccessCallback) => () => void;
|
|
76
|
-
onError: (callback: ErrorCallback) => () => void;
|
|
77
|
-
/**
|
|
78
|
-
* Fired when a submit attempt starts — callers use this to clear validation state.
|
|
79
|
-
* Separating this from `submitEvent` keeps the pipeline decoupled from the
|
|
80
|
-
* validation module's internal stores.
|
|
81
|
-
*/
|
|
82
|
-
submitStarted: Event<void>;
|
|
83
|
-
/**
|
|
84
|
-
* Fired when commit returns validation errors — callers write these to
|
|
85
|
-
* `fieldErrorsStore` in the validation module.
|
|
86
|
-
*/
|
|
87
|
-
validationErrorsReceived: Event<ValidationError[]>;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Creates the submit pipeline for a form instance.
|
|
91
|
-
*
|
|
92
|
-
* Manages the full lifecycle of a form submission, including emitting event bus
|
|
93
|
-
* calls, running data-transform callbacks, committing responses, running
|
|
94
|
-
* success/error callbacks, and navigating to the next step.
|
|
95
|
-
*
|
|
96
|
-
* Returns coordination events (`submitStarted`, `validationErrorsReceived`) that the
|
|
97
|
-
* caller wires to the validation module to keep validation state in sync without
|
|
98
|
-
* the pipeline needing direct access to validation stores.
|
|
99
|
-
*
|
|
100
|
-
* @param {SubmitPipelineConfig} config - The submit pipeline configuration.
|
|
101
|
-
* @param {Picked} config.client - The Picked client instance.
|
|
102
|
-
* @param {ExperienceInstance} config.experienceInstance - The experience instance.
|
|
103
|
-
* @param {string} config.formId - The form identifier.
|
|
104
|
-
* @param {Store<string>} config.title - Store containing the form title.
|
|
105
|
-
* @param {Store<ExperienceStep | null>} config.stepStore - Store containing the current step.
|
|
106
|
-
* @param {Store<Field[]>} config.fieldsStore - Store containing the form fields.
|
|
107
|
-
* @param {EventCallable<void>} config.goToNextStep - Event to trigger navigation to the next step.
|
|
108
|
-
* @returns {SubmitPipeline} The submit pipeline with events, stores, and callback registration.
|
|
109
|
-
* @example
|
|
110
|
-
* ```ts
|
|
111
|
-
* const pipeline = createSubmitPipeline(config)
|
|
112
|
-
* pipeline.onSuccess(({ data }) => console.log(data))
|
|
113
|
-
* ```
|
|
114
|
-
*/
|
|
115
|
-
export declare function createSubmitPipeline({ client, experienceInstance, formId, title, stepStore, fieldsStore, goToNextStep, }: SubmitPipelineConfig): SubmitPipeline;
|
|
116
|
-
//# sourceMappingURL=create-submit-pipeline.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-submit-pipeline.d.ts","sourceRoot":"","sources":["../../../src/form/create-submit-pipeline.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,OAAO,EAOL,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,KAAK,EACX,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qDAAqD,CAAA;AAC7F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAc,MAAM,yBAAyB,CAAA;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAiBvD,MAAM,MAAM,4BAA4B,GAAG,WAAW,GAAG;IACvD,aAAa,EAAE,WAAW,GAAG,eAAe,CAAA;CAC7C,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,eAAe,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;IACzE,IAAI,EAAE;SAAG,CAAC,IAAI,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC;KAAE,CAAA;IAC5C,cAAc,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;CACpC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAE1B,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAE/E;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE;KACpE,CAAC,IAAI,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC;CACnC,KACG;KAAG,CAAC,IAAI,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC;CAAE,GACtC,IAAI,GACJ,OAAO,CAAC;KAAG,CAAC,IAAI,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC;CAAE,GAAG,IAAI,CAAC,CAAA;AAE1D;;;;;;;;;;GAUG;AACH,MAAM,WAAW,mBAAmB,CAAC,UAAU,SAAS,MAAM,GAAG,MAAM;IACrE,cAAc,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAA;IAC3C,SAAS,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAA;IACvC,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB;AA0FD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,EAAE,kBAAkB,CAAA;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IACpB,SAAS,EAAE,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IACvC,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;IAC3B,YAAY,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,aAAa,CAAC,4BAA4B,CAAC,CAAA;IACxD,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAChC,cAAc,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,MAAM,IAAI,CAAA;IACxD,SAAS,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,MAAM,IAAI,CAAA;IACpD,OAAO,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,MAAM,IAAI,CAAA;IAChD;;;;OAIG;IACH,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAC1B;;;OAGG;IACH,wBAAwB,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAA;CACnD;AAyED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,kBAAkB,EAClB,MAAM,EACN,KAAK,EACL,SAAS,EACT,WAAW,EACX,YAAY,GACb,EAAE,oBAAoB,GAAG,cAAc,CAoRvC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/** @file Step field evaluation — resolves field and option visibility conditions. */
|
|
2
|
-
import type { Field } from '../entities/field/field';
|
|
3
|
-
import type { Picked } from '../picked';
|
|
4
|
-
import { evaluateRuleLogic } from '../utils/rules-logic';
|
|
5
|
-
/**
|
|
6
|
-
* Evaluates field and option conditions, returning only the fields that should be visible.
|
|
7
|
-
*
|
|
8
|
-
* @template T
|
|
9
|
-
* @param {Picked} client - The Picked client instance for condition evaluation.
|
|
10
|
-
* @param {T[]} fields - The fields to filter by their conditions.
|
|
11
|
-
* @param {Parameters<typeof evaluateRuleLogic>[2]} [context] - Optional context object passed to the rule evaluator.
|
|
12
|
-
* @returns {Promise<T[]>} The filtered array of visible fields with conditional options resolved.
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* const visibleFields = await getStepFields(client, step.fields, { cartTotal: 50 })
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
export declare function getStepFields<T extends Field>(client: Picked, fields: T[], context?: Parameters<typeof evaluateRuleLogic>[2]): Promise<T[]>;
|
|
19
|
-
//# sourceMappingURL=get-step-fields.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-step-fields.d.ts","sourceRoot":"","sources":["../../../src/form/get-step-fields.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AA8CxD;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAAC,CAAC,SAAS,KAAK,EACjD,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,CAAC,EAAE,EACX,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAChD,OAAO,CAAC,CAAC,EAAE,CAAC,CAoDd"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/** @file Public surface of `@picked/client/form`. */
|
|
2
|
-
export { buildResponsesFromFormData } from './build-responses';
|
|
3
|
-
export { getStepFields } from './get-step-fields';
|
|
4
|
-
export { createFieldEvaluator } from './create-field-evaluator';
|
|
5
|
-
export { createFieldValidation } from './create-field-validation';
|
|
6
|
-
export type { FieldValidation } from './create-field-validation';
|
|
7
|
-
export { createSubmitPipeline } from './create-submit-pipeline';
|
|
8
|
-
export type { SubmitPipelineConfig, SubmitPipeline, SubmitEventWithCurrentTarget, SuccessCallback, ErrorCallback, SubmitCallback, FormCallbackOptions, } from './create-submit-pipeline';
|
|
9
|
-
export { createForm, getEventValue } from './create-form';
|
|
10
|
-
export type { CreateFormDeps, FormField, FormInstance } from './create-form';
|
|
11
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/form/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAC/D,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,4BAA4B,EAC5B,eAAe,EACf,aAAa,EACb,cAAc,EACd,mBAAmB,GACpB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AACzD,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Memoized condition evaluator plus a reactive condition-results store.
|
|
3
|
-
*
|
|
4
|
-
* The results store is keyed by a stable, key-order-independent hash of the rule, so the
|
|
5
|
-
* server's selection (`serialize`) and the client's hydration share results without
|
|
6
|
-
* re-evaluating. A cache hit reads synchronously (driving SSR render and the first
|
|
7
|
-
* client paint); a miss evaluates asynchronously and writes the result back, which
|
|
8
|
-
* propagates reactively to subscribers. Conditions that reference an action are exempt from the
|
|
9
|
-
* cache: they re-evaluate on every call so the action's side effect runs each time.
|
|
10
|
-
*/
|
|
11
|
-
import { type Store } from 'effector';
|
|
12
|
-
import type { Condition } from '../entities/condition/condition';
|
|
13
|
-
import type { LogicObject, LogicRule, LogicValue } from '../logic-engine';
|
|
14
|
-
import type { Picked } from '../picked';
|
|
15
|
-
/** A condition rule that may be json-logic, a raw logic value, or unset. */
|
|
16
|
-
type ConditionRule = LogicRule | LogicValue | undefined;
|
|
17
|
-
/**
|
|
18
|
-
* Produces a stable, key-order-independent string hash of a logic rule for use as a cache key.
|
|
19
|
-
*
|
|
20
|
-
* Object keys are sorted recursively, arrays preserve their order, and `undefined` is
|
|
21
|
-
* normalised to `null`. Equivalent rules with reordered keys hash identically; rules that
|
|
22
|
-
* differ in any value or array order hash differently.
|
|
23
|
-
*
|
|
24
|
-
* @param {ConditionRule} rule - The rule to hash.
|
|
25
|
-
* @returns {string} A deterministic string key for the rule.
|
|
26
|
-
* @example
|
|
27
|
-
* hashRule({ '==': [1, 1] }) // '{"==":[1,1]}'
|
|
28
|
-
*/
|
|
29
|
-
export declare function hashRule(rule: ConditionRule): string;
|
|
30
|
-
/**
|
|
31
|
-
* Reactive store of memoized condition-evaluation results, keyed by rule hash.
|
|
32
|
-
*/
|
|
33
|
-
export interface ConditionResults {
|
|
34
|
-
/** Reactive store mapping rule hashes to their boolean evaluation result. */
|
|
35
|
-
store: Store<Record<string, boolean>>;
|
|
36
|
-
/** Writes a single hash-to-result entry into the store. */
|
|
37
|
-
set: (payload: {
|
|
38
|
-
hash: string;
|
|
39
|
-
result: boolean;
|
|
40
|
-
}) => void;
|
|
41
|
-
/** Bulk-seeds the store from a snapshot of hash-to-result entries, such as the server snapshot. */
|
|
42
|
-
seed: (results: Record<string, boolean>) => void;
|
|
43
|
-
/** Synchronously reads the current result for a key, or `undefined` when absent. */
|
|
44
|
-
peek: (hash: string) => boolean | undefined;
|
|
45
|
-
/** Clears every stored result (for example between server `serialize` calls on a reused client). */
|
|
46
|
-
reset: () => void;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Creates a reactive condition-results store keyed by rule hash, mirroring the entity-index
|
|
50
|
-
* factory pattern.
|
|
51
|
-
*
|
|
52
|
-
* @returns {ConditionResults} A condition-results store with set, seed, peek, and reset.
|
|
53
|
-
* @example
|
|
54
|
-
* const results = createConditionResults()
|
|
55
|
-
* results.set({ hash: 'h1', result: true })
|
|
56
|
-
* results.peek('h1') // true
|
|
57
|
-
*/
|
|
58
|
-
export declare function createConditionResults(): ConditionResults;
|
|
59
|
-
/**
|
|
60
|
-
* Determines whether a rule references an action anywhere in its tree.
|
|
61
|
-
*
|
|
62
|
-
* Actions are injected into the evaluation context under the `actions` namespace and invoked via
|
|
63
|
-
* `{ invoke: [{ var: 'actions.<key>' }] }`. Because actions have side effects, a rule that
|
|
64
|
-
* references one cannot be memoised: its result must be re-resolved on every evaluation so the
|
|
65
|
-
* side effect re-runs.
|
|
66
|
-
*
|
|
67
|
-
* @param {unknown} value - The rule fragment to inspect.
|
|
68
|
-
* @returns {boolean} True when the fragment references the `actions` namespace anywhere.
|
|
69
|
-
* @example
|
|
70
|
-
* ruleReferencesAction({ invoke: [{ var: 'actions.track' }] }) // true
|
|
71
|
-
*/
|
|
72
|
-
export declare function ruleReferencesAction(value: unknown): boolean;
|
|
73
|
-
/**
|
|
74
|
-
* Extracts the keys of every composed condition reference (`{ var: 'conditions.<key>' }`) found
|
|
75
|
-
* anywhere in a rule tree.
|
|
76
|
-
*
|
|
77
|
-
* @param {unknown} value - The rule fragment to inspect.
|
|
78
|
-
* @returns {string[]} The referenced condition keys (duplicates possible; callers dedupe).
|
|
79
|
-
* @example
|
|
80
|
-
* extractConditionKeys({ invoke: [{ var: 'conditions.is-home' }] }) // ['is-home']
|
|
81
|
-
*/
|
|
82
|
-
export declare function extractConditionKeys(value: unknown): string[];
|
|
83
|
-
/**
|
|
84
|
-
* Determines whether a rule references an action directly, or transitively through composed
|
|
85
|
-
* condition references by walking into each referenced condition's logic. Rules that reach an action
|
|
86
|
-
* must bypass the result cache so the action's side effect re-runs on every evaluation.
|
|
87
|
-
*
|
|
88
|
-
* @param {unknown} value - The rule fragment to inspect.
|
|
89
|
-
* @param {Record<string, Condition>} conditionsByKey - All available conditions indexed by key.
|
|
90
|
-
* @param {Set<string>} [visited] - Condition keys already inspected; guards against reference cycles.
|
|
91
|
-
* @returns {boolean} True when an action is reachable directly or through a composed condition.
|
|
92
|
-
* @example
|
|
93
|
-
* ruleReferencesActionDeep({ invoke: [{ var: 'conditions.b' }] }, conditionsByKey)
|
|
94
|
-
*/
|
|
95
|
-
export declare function ruleReferencesActionDeep(value: unknown, conditionsByKey: Record<string, Condition>, visited?: Set<string>): boolean;
|
|
96
|
-
/**
|
|
97
|
-
* Evaluates a condition rule with memoization against the client's `conditionResults` store.
|
|
98
|
-
*
|
|
99
|
-
* Every rule (including `undefined`/`null`, empty, and boolean gates) is hashed and its result
|
|
100
|
-
* cached, so callers can read it synchronously via `conditionResults.peek(hashRule(rule))` (which
|
|
101
|
-
* `<ExperienceSlot>` relies on for slot selection, such as an experience with no condition). A cache hit
|
|
102
|
-
* returns the stored value; a miss resolves the gate (evaluating non-empty logic rules via
|
|
103
|
-
* `evaluateRuleLogic`), writes the result back to the store (propagating reactively), and returns it.
|
|
104
|
-
*
|
|
105
|
-
* Rules that reference an action (a `var` under the `actions` namespace) are never read from or
|
|
106
|
-
* written to the cache: actions have side effects that must re-run on every evaluation, so caching
|
|
107
|
-
* their result would suppress those effects.
|
|
108
|
-
*
|
|
109
|
-
* @param {Picked} client - The Picked client providing the evaluation context and results store.
|
|
110
|
-
* @param {ConditionRule} rule - The condition rule to evaluate.
|
|
111
|
-
* @param {object} [options] - Optional evaluation options.
|
|
112
|
-
* @param {LogicObject} [options.context] - Context overrides merged into the evaluation (e.g. URL location).
|
|
113
|
-
* @returns {Promise<boolean>} Whether the condition resolves truthy.
|
|
114
|
-
* @example
|
|
115
|
-
* const active = await evaluateConditionMemo(client, { '==': [1, 1] })
|
|
116
|
-
*/
|
|
117
|
-
export declare function evaluateConditionMemo(client: Picked, rule: ConditionRule, options?: {
|
|
118
|
-
context?: LogicObject;
|
|
119
|
-
}): Promise<boolean>;
|
|
120
|
-
/**
|
|
121
|
-
* Determines whether an experience is active by AND-ing the optional client precondition, the
|
|
122
|
-
* optional client condition, and the experience's own condition through the memoized evaluator.
|
|
123
|
-
*
|
|
124
|
-
* This is the DOM-free analogue of `shouldInitialiseFx` used for slot-based and server-side
|
|
125
|
-
* selection: each unset gate is treated as passing.
|
|
126
|
-
*
|
|
127
|
-
* @param {Picked} client - The Picked client providing the evaluation context and results store.
|
|
128
|
-
* @param {object} experience - The experience to test.
|
|
129
|
-
* @param {LogicRule | LogicValue} [experience.condition] - The experience's decision logic.
|
|
130
|
-
* @param {object} [options] - Optional gate inputs.
|
|
131
|
-
* @param {LogicObject} [options.context] - Context overrides merged into every evaluation.
|
|
132
|
-
* @param {LogicRule | LogicValue} [options.precondition] - The client-level precondition gate.
|
|
133
|
-
* @param {LogicRule | LogicValue} [options.condition] - The client-level condition gate.
|
|
134
|
-
* @returns {Promise<boolean>} Whether the experience is active for the given context.
|
|
135
|
-
* @example
|
|
136
|
-
* const active = await isExperienceActive(client, { condition: exp.condition }, { context })
|
|
137
|
-
*/
|
|
138
|
-
export declare function isExperienceActive(client: Picked, experience: {
|
|
139
|
-
condition?: LogicRule | LogicValue;
|
|
140
|
-
}, options?: {
|
|
141
|
-
context?: LogicObject;
|
|
142
|
-
precondition?: LogicRule | LogicValue;
|
|
143
|
-
condition?: LogicRule | LogicValue;
|
|
144
|
-
}): Promise<boolean>;
|
|
145
|
-
export {};
|
|
146
|
-
//# sourceMappingURL=condition-selection.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"condition-selection.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/condition-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAA2B,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAOvC,4EAA4E;AAC5E,KAAK,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAA;AA6CvD;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6EAA6E;IAC7E,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACrC,2DAA2D;IAC3D,GAAG,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IACzD,mGAAmG;IACnG,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAChD,oFAAoF;IACpF,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAA;IAC3C,oGAAoG;IACpG,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAmFD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD;AAoDD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAe5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAgB7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAC1C,OAAO,GAAE,GAAG,CAAC,MAAM,CAAa,GAC/B,OAAO,CAqBT;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,aAAa,EACnB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,WAAW,CAAA;CAAE,GAClC,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE;IAAE,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;CAAE,EAClD,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,YAAY,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;IACrC,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;CACnC,GACA,OAAO,CAAC,OAAO,CAAC,CAYlB"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/** @file Lifecycle module — owns the SDK start chain as an effector event graph. */
|
|
2
|
-
import { type Effect, type EventCallable, type StoreWritable } from 'effector';
|
|
3
|
-
import type { Picked } from '../picked';
|
|
4
|
-
import type { LogicRule } from '../logic-engine';
|
|
5
|
-
/** Discrete stages of the SDK lifecycle. */
|
|
6
|
-
export type LifecycleStage = 'idle' | 'starting' | 'ready' | 'failed';
|
|
7
|
-
/** A logic-engine gate rule, a literal boolean override, or `undefined` to indicate no gate is configured. */
|
|
8
|
-
type GateConfig = LogicRule | boolean | undefined;
|
|
9
|
-
/** Public effector units exposed by the lifecycle module. */
|
|
10
|
-
interface Lifecycle {
|
|
11
|
-
/** Public trigger — fires the start chain. `await allSettled(start, { scope })` resolves once the chain has fully settled. */
|
|
12
|
-
start: EventCallable<void>;
|
|
13
|
-
/** Reactive store of the readiness flag. */
|
|
14
|
-
readyStore: StoreWritable<boolean>;
|
|
15
|
-
/** Reactive store of the precondition-gate result (`undefined` until `start` is fired). */
|
|
16
|
-
preconditionPassedStore: StoreWritable<boolean | undefined>;
|
|
17
|
-
/** Reactive store of the condition-gate result (`undefined` until `start` is fired). */
|
|
18
|
-
conditionPassedStore: StoreWritable<boolean | undefined>;
|
|
19
|
-
/** Reactive store of the current lifecycle stage. */
|
|
20
|
-
lifecycleStageStore: StoreWritable<LifecycleStage>;
|
|
21
|
-
/** Event — registers a plugin onStart hook effect. */
|
|
22
|
-
registerPluginStartHook: EventCallable<Effect<void, void, Error>>;
|
|
23
|
-
/** Event — sets the precondition gate rule (called once during construction). */
|
|
24
|
-
setPrecondition: EventCallable<GateConfig>;
|
|
25
|
-
/** Event — sets the condition gate rule (called once during construction). */
|
|
26
|
-
setCondition: EventCallable<GateConfig>;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Creates the lifecycle module for a Picked client. Owns the start chain as an effector
|
|
30
|
-
* event graph: `start` triggers a fan-out of effects (plugin hooks, domInteractive)
|
|
31
|
-
* whose `.done` events drive the next phases via `sample`.
|
|
32
|
-
*
|
|
33
|
-
* @param {object} params - Factory params.
|
|
34
|
-
* @param {Picked} params.client - The Picked client instance.
|
|
35
|
-
* @returns {Lifecycle} The lifecycle module exposing public events and read-only reactive stores.
|
|
36
|
-
* @example
|
|
37
|
-
* ```typescript
|
|
38
|
-
* const lifecycle = createLifecycle({ client })
|
|
39
|
-
* lifecycle.setPrecondition(myRule)
|
|
40
|
-
* lifecycle.start()
|
|
41
|
-
* await allSettled(lifecycle.start, { scope })
|
|
42
|
-
* ```
|
|
43
|
-
*/
|
|
44
|
-
export declare function createLifecycle(params: {
|
|
45
|
-
client: Picked;
|
|
46
|
-
}): Lifecycle;
|
|
47
|
-
export {};
|
|
48
|
-
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/lifecycle.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,EAOL,KAAK,MAAM,EACX,KAAK,aAAa,EAElB,KAAK,aAAa,EACnB,MAAM,UAAU,CAAA;AAEjB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAMhD,4CAA4C;AAC5C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAA;AAErE,8GAA8G;AAC9G,KAAK,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;AAEjD,6DAA6D;AAC7D,UAAU,SAAS;IACjB,8HAA8H;IAC9H,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;IAE1B,4CAA4C;IAC5C,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAClC,2FAA2F;IAC3F,uBAAuB,EAAE,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;IAC3D,wFAAwF;IACxF,oBAAoB,EAAE,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;IACxD,qDAAqD;IACrD,mBAAmB,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAElD,sDAAsD;IACtD,uBAAuB,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IAEjE,iFAAiF;IACjF,eAAe,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IAC1C,8EAA8E;IAC9E,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CACxC;AAuOD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAErE"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/** @file Effector effect that evaluates a json-logic rule against the client's reactive state. */
|
|
2
|
-
import { type Effect } from 'effector';
|
|
3
|
-
import type { LogicObject, LogicRule } from '../logic-engine';
|
|
4
|
-
import type { Picked } from '../picked';
|
|
5
|
-
/** Parameters for `evaluateRuleLogicFx` — the rule to evaluate and an optional context override. */
|
|
6
|
-
export interface EvaluateRuleLogicParams {
|
|
7
|
-
rule: LogicRule;
|
|
8
|
-
context?: LogicObject;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Creates an effector effect that evaluates a json-logic rule against the client's reactive state. The effect uses `attach({ source })` so all reads are scope-aware and reactive — no `.getState()` calls.
|
|
12
|
-
*
|
|
13
|
-
* @param {object} params - Factory params.
|
|
14
|
-
* @param {Picked} params.client - The Picked client instance whose stores back the evaluation context.
|
|
15
|
-
* @returns {Effect<EvaluateRuleLogicParams, unknown, Error>} An effect that evaluates a rule and resolves to the result.
|
|
16
|
-
* @example
|
|
17
|
-
* ```typescript
|
|
18
|
-
* const evaluateRuleLogicFx = createEvaluateRuleLogicFx({ client })
|
|
19
|
-
* const result = await evaluateRuleLogicFx({ rule: someRule, context: { extra: 'data' } })
|
|
20
|
-
* ```
|
|
21
|
-
*/
|
|
22
|
-
export declare function createEvaluateRuleLogicFx(params: {
|
|
23
|
-
client: Picked;
|
|
24
|
-
}): Effect<EvaluateRuleLogicParams, unknown, Error>;
|
|
25
|
-
//# sourceMappingURL=rules-logic.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rules-logic.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/rules-logic.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAG9C,OAAO,KAAK,EAAgB,WAAW,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAA;AAEvF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAEvC,oGAAoG;AACpG,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,CAAC,EAAE,WAAW,CAAA;CACtB;AAyID;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,MAAM,EAAE,MAAM,CAAA;CACf,GAAG,MAAM,CAAC,uBAAuB,EAAE,OAAO,EAAE,KAAK,CAAC,CAElD"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/** @file State snapshot store — derives an immutable `StateSnapshot` from the client's reactive entity stores via `combine`. */
|
|
2
|
-
import { type Store } from 'effector';
|
|
3
|
-
import type { Picked } from '../picked';
|
|
4
|
-
import type { Field, FieldValue } from '../entities/field/field';
|
|
5
|
-
/** Immutable snapshot of the current client state, suitable for passing to user-supplied predicates, actions, and rule evaluators. */
|
|
6
|
-
export interface StateSnapshot {
|
|
7
|
-
client: Picked;
|
|
8
|
-
location?: Window['location'];
|
|
9
|
-
document?: Window['document'];
|
|
10
|
-
sessionStorage?: Window['sessionStorage'];
|
|
11
|
-
localStorage?: Window['localStorage'];
|
|
12
|
-
responses: {
|
|
13
|
-
fieldKey: string;
|
|
14
|
-
value: FieldValue | undefined;
|
|
15
|
-
}[];
|
|
16
|
-
fields: Field[];
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Creates a reactive store that always reflects the current client state — responses, fields, browser globals, and the client reference.
|
|
20
|
-
*
|
|
21
|
-
* Consumers reading the snapshot inside an effect should use `attach({ source: stateSnapshotStore })` rather than `.getState()` so reads remain scope-aware and reactive.
|
|
22
|
-
*
|
|
23
|
-
* @param {object} params - Factory params.
|
|
24
|
-
* @param {Picked} params.client - The Picked client instance to derive the snapshot from.
|
|
25
|
-
* @returns {Store<StateSnapshot>} A derived store of the current state snapshot.
|
|
26
|
-
* @example
|
|
27
|
-
* ```typescript
|
|
28
|
-
* const stateSnapshotStore = createStateSnapshotStore({ client })
|
|
29
|
-
* const evaluateFx = attach({
|
|
30
|
-
* source: stateSnapshotStore,
|
|
31
|
-
* effect: (snapshot, rule) => evaluate(snapshot, rule),
|
|
32
|
-
* })
|
|
33
|
-
* ```
|
|
34
|
-
*/
|
|
35
|
-
export declare function createStateSnapshotStore(params: {
|
|
36
|
-
client: Picked;
|
|
37
|
-
}): Store<StateSnapshot>;
|
|
38
|
-
//# sourceMappingURL=state-snapshot.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state-snapshot.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/state-snapshot.ts"],"names":[],"mappings":"AAAA,gIAAgI;AAChI,OAAO,EAAW,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AAE9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEhE,sIAAsI;AACtI,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAA;IACrC,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM,CAAA;QAChB,KAAK,EAAE,UAAU,GAAG,SAAS,CAAA;KAC9B,EAAE,CAAA;IACH,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB;AA4BD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,aAAa,CAAC,CAEzF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dom-observer/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import type { Plugin } from '../../entities/plugin/plugin';
|
|
2
|
-
/**
|
|
3
|
-
* Watches the document for `childList` mutations and reconciles experiences
|
|
4
|
-
* whose declared target selectors match newly added DOM subtrees. Each
|
|
5
|
-
* matching experience runs through its per-experience `shouldInitialiseFx`,
|
|
6
|
-
* and on `true` is handed to its `initialiseFx(undefined)`.
|
|
7
|
-
*
|
|
8
|
-
* Scope: lazy-mounted target hosts that arrive after the initial bulk init
|
|
9
|
-
* in `picked.ts`. Route-driven re-initialisation (decisionLogic depending
|
|
10
|
-
* on `location.pathname`, lifecycle event re-fires, plugin start hooks)
|
|
11
|
-
* is the responsibility of `singlePageAppPlugin`, which calls
|
|
12
|
-
* `client.start()` on history events. Pair the two plugins to cover both.
|
|
13
|
-
*
|
|
14
|
-
* Pipeline:
|
|
15
|
-
* - Each experience's `configStore.watch()` pushes its trimmed selectors
|
|
16
|
-
* into a reactive `Store<Map<id, string[]>>`. Empty / whitespace-only
|
|
17
|
-
* selectors are filtered out.
|
|
18
|
-
* - A single `MutationObserver` collects `Element` instances from
|
|
19
|
-
* `childList.addedNodes` across one animation frame, then fires a
|
|
20
|
-
* single `mutationObserved` event carrying the collected elements.
|
|
21
|
-
* - `sample` filters registered experiences to those whose selectors
|
|
22
|
-
* match at least one added element via `el.matches` or
|
|
23
|
-
* `el.querySelector`. Malformed selectors are skipped per-experience
|
|
24
|
-
* without poisoning the rest of the batch. The matched array is
|
|
25
|
-
* routed straight into `reconcileMatchedFx` via `sample.target`.
|
|
26
|
-
* - `reconcileMatchedFx` invokes each experience's
|
|
27
|
-
* `shouldInitialiseFx`, and on `true` its `initialiseFx(undefined)`.
|
|
28
|
-
* `initialiseFx` is idempotent: tagged target elements are skipped
|
|
29
|
-
* on subsequent passes.
|
|
30
|
-
*
|
|
31
|
-
* Setup is deferred until `document.body` is parsed, so SDKs loaded from
|
|
32
|
-
* `<head>` without `defer` (the standard Shopify-theme / GTM-template
|
|
33
|
-
* pattern) still install once the body becomes available.
|
|
34
|
-
*
|
|
35
|
-
* No-ops outside browser environments and on partial-DOM runtimes that
|
|
36
|
-
* lack `MutationObserver` or `requestAnimationFrame`. `MutationObserver`
|
|
37
|
-
* does not cross shadow root or iframe boundaries, so experiences whose
|
|
38
|
-
* target lives inside a shadow tree or a cross-origin frame are not
|
|
39
|
-
* reconciled by this plugin.
|
|
40
|
-
*
|
|
41
|
-
* @returns {Plugin} The plugin.
|
|
42
|
-
* @example
|
|
43
|
-
* ```typescript
|
|
44
|
-
* createClient({
|
|
45
|
-
* plugins: [domObserverPlugin()]
|
|
46
|
-
* })
|
|
47
|
-
* ```
|
|
48
|
-
*/
|
|
49
|
-
export declare const domObserverPlugin: () => Plugin;
|
|
50
|
-
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dom-observer/plugin.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAK1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAiBpC,CAAA"}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
/** @file Deterministic, independent per-feature bucket allocation for A/B testing. */
|
|
2
|
-
/**
|
|
3
|
-
* FNV-1a 32-bit hash.
|
|
4
|
-
* Deterministic, fast, well-distributed for short strings.
|
|
5
|
-
*
|
|
6
|
-
* @param {string} input - String to hash.
|
|
7
|
-
* @returns {number} Unsigned 32-bit hash.
|
|
8
|
-
* @example
|
|
9
|
-
* ```typescript
|
|
10
|
-
* fnv1a32('sess_1:winter-sale')
|
|
11
|
-
* ```
|
|
12
|
-
*/
|
|
13
|
-
export declare function fnv1a32(input: string): number;
|
|
14
|
-
/**
|
|
15
|
-
* Deterministic dice roll for A/B testing.
|
|
16
|
-
*
|
|
17
|
-
* Returns a value 0–99 that is stable for a given session and feature. Seeding
|
|
18
|
-
* on the feature as well as the session keeps flags independent of one another:
|
|
19
|
-
* two flags at weight 50 each take half of sessions, and a quarter of sessions
|
|
20
|
-
* land in both. Independence rests on the avalanche in {@link fmix32}, not on
|
|
21
|
-
* the seed alone.
|
|
22
|
-
*
|
|
23
|
-
* The feature version keys the stored bucket rather than the roll, so
|
|
24
|
-
* publishing a new version re-runs `decide` against the current weight and an
|
|
25
|
-
* unchanged weight keeps the same audience.
|
|
26
|
-
*
|
|
27
|
-
* This is the boolean path's input. A multi-variant feature does not roll once
|
|
28
|
-
* and look the result up; {@link allocateVariant} scores each arm on its own
|
|
29
|
-
* seed. One roll per feature is still what keeps features independent of one
|
|
30
|
-
* another, per ADR-0018.
|
|
31
|
-
*
|
|
32
|
-
* @param {string} sessionId - Current session id, stable across page loads.
|
|
33
|
-
* @param {string} featureId - Feature the roll is for.
|
|
34
|
-
* @returns {number} A value in the range 0 to 99.
|
|
35
|
-
* @example
|
|
36
|
-
* ```typescript
|
|
37
|
-
* const diceRoll = featureDiceRoll('sess_1', 'winter-sale')
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
export declare function featureDiceRoll(sessionId: string, featureId: string): number;
|
|
41
|
-
/**
|
|
42
|
-
* Whether the given dice roll falls within the feature's weight.
|
|
43
|
-
*
|
|
44
|
-
* Widening a weight admits sessions the narrower weight excluded and never
|
|
45
|
-
* evicts one already inside, so a rollout can ratchet up without re-bucketing
|
|
46
|
-
* anyone. The roll is per feature, so this describes one feature's own weight
|
|
47
|
-
* changing over time; two features at the same weight overlap by chance.
|
|
48
|
-
*
|
|
49
|
-
* @param {number} diceRoll - Roll from {@link featureDiceRoll}, 0–99.
|
|
50
|
-
* @param {number} weight - Feature weight, 0–100.
|
|
51
|
-
* @returns {boolean} Whether the session is allocated to the feature.
|
|
52
|
-
* @example
|
|
53
|
-
* ```typescript
|
|
54
|
-
* isAllocated(42, 50) // true
|
|
55
|
-
* ```
|
|
56
|
-
*/
|
|
57
|
-
export declare function isAllocated(diceRoll: number, weight: number): boolean;
|
|
58
|
-
/** The fields {@link allocateVariant} needs from an arm. */
|
|
59
|
-
export interface AllocatableVariant {
|
|
60
|
-
key: string;
|
|
61
|
-
weight: number;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Picks the arm a session lands in, scoring each arm independently.
|
|
65
|
-
*
|
|
66
|
-
* Each arm is hashed on its own key and scored against its own weight, and the
|
|
67
|
-
* highest score wins. An arm's score therefore depends on nothing but the
|
|
68
|
-
* session, the feature and that arm's own weight, which is what gives the two
|
|
69
|
-
* properties an author is entitled to assume:
|
|
70
|
-
*
|
|
71
|
-
* - Editing one arm's weight moves sessions only into or out of that arm. Two
|
|
72
|
-
* arms the author did not touch never trade sessions with each other.
|
|
73
|
-
* - Widening an arm only admits sessions and never evicts one already inside,
|
|
74
|
-
* the same ratchet {@link isAllocated} gives the boolean path. Narrowing is
|
|
75
|
-
* its mirror.
|
|
76
|
-
*
|
|
77
|
-
* Neither holds for cumulative ranges, where an arm's interval depends on every
|
|
78
|
-
* arm ordered before it, so a boundary shift upstream drags unrelated arms
|
|
79
|
-
* across it.
|
|
80
|
-
*
|
|
81
|
-
* Scores are compared, never summed, so the result is invariant under scaling
|
|
82
|
-
* every weight by the same factor: `1:1:2` and `10:10:20` allocate identically.
|
|
83
|
-
* Ties break on the key so that the arms' arrival order cannot matter — nothing
|
|
84
|
-
* in the delivery pipeline promises one.
|
|
85
|
-
*
|
|
86
|
-
* The chosen arm is returned whole rather than by key, so a caller reading its
|
|
87
|
-
* value needs no second lookup — and cannot resolve a duplicate key to a
|
|
88
|
-
* different arm than the one scored.
|
|
89
|
-
*
|
|
90
|
-
* @template T
|
|
91
|
-
* @param {string} sessionId - Current session id, stable across page loads.
|
|
92
|
-
* @param {string} featureKey - Feature being allocated.
|
|
93
|
-
* @param {readonly T[]} variants - The feature's arms, in any order.
|
|
94
|
-
* @returns {T | null} The chosen arm, or null when the set decides nobody.
|
|
95
|
-
* @example
|
|
96
|
-
* ```typescript
|
|
97
|
-
* // 'hero-b' takes three sessions in four; 'false' takes the fourth.
|
|
98
|
-
* allocateVariant('sess_1', 'hero', [
|
|
99
|
-
* { key: 'hero-b', weight: 3 },
|
|
100
|
-
* { key: 'false', weight: 1 },
|
|
101
|
-
* ])
|
|
102
|
-
* ```
|
|
103
|
-
*/
|
|
104
|
-
export declare function allocateVariant<T extends AllocatableVariant>(sessionId: string, featureKey: string, variants: readonly T[]): T | null;
|
|
105
|
-
//# sourceMappingURL=hash.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dynamic-experiences/hash.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAY7C;AA8BD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAUrE;AAED,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf;AA4CD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,kBAAkB,EAC1D,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,SAAS,CAAC,EAAE,GACrB,CAAC,GAAG,IAAI,CAmBV"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/** @file Public exports for the dynamic-experiences plugin (project config + per-experience content resolution). */
|
|
2
|
-
export { dynamicExperiencesPlugin, fetchExperienceContent, fetchProject } from './plugin';
|
|
3
|
-
export { createClientHeaders, fetchSchema } from '@picked/delivery-api-client';
|
|
4
|
-
export { registerPickedBundle } from '../../data-source/registry';
|
|
5
|
-
export type * from './types';
|
|
6
|
-
export type { ApiExperienceStep, ContentBlob, ExperienceContentResponse, FetchProjectOptions, ProjectConfig, ProjectConfigExperience, ProjectConfigFeature, ProjectConfigNode, } from '@picked/delivery-api-client';
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dynamic-experiences/index.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGzF,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAI9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AACjE,mBAAmB,SAAS,CAAA;AAI5B,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EACb,uBAAuB,EACvB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,6BAA6B,CAAA"}
|