@makeswift/runtime 0.26.4 → 0.26.5
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/dist/cjs/api/client.js +252 -0
- package/dist/cjs/api/client.js.map +1 -0
- package/dist/cjs/api-handler/handlers/manifest.js +1 -1
- package/dist/cjs/api-handler/handlers/webhook/diff-projection.js +62 -0
- package/dist/cjs/api-handler/handlers/webhook/diff-projection.js.map +1 -0
- package/dist/cjs/builder/serialization.js +78 -0
- package/dist/cjs/builder/serialization.js.map +1 -0
- package/dist/cjs/client/index.js +3 -3
- package/dist/cjs/controls/serialization/base/index.js +78 -0
- package/dist/cjs/controls/serialization/base/index.js.map +1 -0
- package/dist/cjs/controls/serialization/base/visitor.js +59 -0
- package/dist/cjs/controls/serialization/base/visitor.js.map +1 -0
- package/dist/cjs/controls/serialization/index.js +55 -0
- package/dist/cjs/controls/serialization/index.js.map +1 -0
- package/dist/cjs/controls/serialization/message-port/function-serialization.js +79 -0
- package/dist/cjs/controls/serialization/message-port/function-serialization.js.map +1 -0
- package/dist/cjs/controls/serialization/message-port/index.js +25 -0
- package/dist/cjs/controls/serialization/message-port/index.js.map +1 -0
- package/dist/cjs/controls/serialization/message-port/visitor.js +48 -0
- package/dist/cjs/controls/serialization/message-port/visitor.js.map +1 -0
- package/dist/cjs/next/api-handler/config/pages-router.js +1 -1
- package/dist/cjs/next/api-handler/config/pages-router.js.map +1 -1
- package/dist/cjs/next/fetch.js +30 -0
- package/dist/cjs/next/fetch.js.map +1 -0
- package/dist/cjs/next/runtime.js +35 -0
- package/dist/cjs/next/runtime.js.map +1 -0
- package/dist/cjs/next/testing/react-runtime.js +29 -0
- package/dist/cjs/next/testing/react-runtime.js.map +1 -0
- package/dist/cjs/prop-controllers/serialization.js +355 -0
- package/dist/cjs/prop-controllers/serialization.js.map +1 -0
- package/dist/cjs/runtimes/react/components/GoogleFontLink.js +55 -0
- package/dist/cjs/runtimes/react/components/GoogleFontLink.js.map +1 -0
- package/dist/cjs/runtimes/react/components/MakeswiftFonts.js +33 -0
- package/dist/cjs/runtimes/react/components/MakeswiftFonts.js.map +1 -0
- package/dist/cjs/runtimes/react/hooks/use-async-effect.js +55 -0
- package/dist/cjs/runtimes/react/hooks/use-async-effect.js.map +1 -0
- package/dist/cjs/runtimes/react/hooks/use-current-breakpoint.js +39 -0
- package/dist/cjs/runtimes/react/hooks/use-current-breakpoint.js.map +1 -0
- package/dist/cjs/runtimes/react/hooks/use-is-read-only.js +33 -0
- package/dist/cjs/runtimes/react/hooks/use-is-read-only.js.map +1 -0
- package/dist/cjs/runtimes/react/lib/resolved-style-to-css.js +59 -0
- package/dist/cjs/runtimes/react/lib/resolved-style-to-css.js.map +1 -0
- package/dist/cjs/runtimes/react/testing/react-runtime.js +33 -0
- package/dist/cjs/runtimes/react/testing/react-runtime.js.map +1 -0
- package/dist/cjs/runtimes/react/utils/google-fonts-url.js +49 -0
- package/dist/cjs/runtimes/react/utils/google-fonts-url.js.map +1 -0
- package/dist/cjs/state/actions/internal/index.js +34 -0
- package/dist/cjs/state/actions/internal/index.js.map +1 -0
- package/dist/cjs/state/actions/internal/read-only-actions.js +195 -0
- package/dist/cjs/state/actions/internal/read-only-actions.js.map +1 -0
- package/dist/cjs/state/actions/internal/read-write-actions.js +76 -0
- package/dist/cjs/state/actions/internal/read-write-actions.js.map +1 -0
- package/dist/cjs/state/builder-api/api.js +17 -0
- package/dist/cjs/state/builder-api/api.js.map +1 -0
- package/dist/cjs/state/builder-api/navigation-listener.js +110 -0
- package/dist/cjs/state/builder-api/navigation-listener.js.map +1 -0
- package/dist/cjs/state/middleware/makeswift-api-client-sync.js +37 -0
- package/dist/cjs/state/middleware/makeswift-api-client-sync.js.map +1 -0
- package/dist/cjs/state/middleware/read-only-element-tree.js +52 -0
- package/dist/cjs/state/middleware/read-only-element-tree.js.map +1 -0
- package/dist/cjs/state/middleware/read-write/builder-api/element-size.js +40 -0
- package/dist/cjs/state/middleware/read-write/builder-api/element-size.js.map +1 -0
- package/dist/cjs/state/middleware/read-write/builder-api/index.js +85 -0
- package/dist/cjs/state/middleware/read-write/builder-api/index.js.map +1 -0
- package/dist/cjs/state/middleware/read-write/builder-api/initialize-connection.js +281 -0
- package/dist/cjs/state/middleware/read-write/builder-api/initialize-connection.js.map +1 -0
- package/dist/cjs/state/middleware/read-write/index.js +40 -0
- package/dist/cjs/state/middleware/read-write/index.js.map +1 -0
- package/dist/cjs/state/middleware/read-write/measure-box-models.js +71 -0
- package/dist/cjs/state/middleware/read-write/measure-box-models.js.map +1 -0
- package/dist/cjs/state/middleware/read-write/prop-controller-handles.js +114 -0
- package/dist/cjs/state/middleware/read-write/prop-controller-handles.js.map +1 -0
- package/dist/cjs/state/middleware/read-write/update-element-tree.js +59 -0
- package/dist/cjs/state/middleware/read-write/update-element-tree.js.map +1 -0
- package/dist/cjs/state/mixins/breakpoint-watch.js +72 -0
- package/dist/cjs/state/mixins/breakpoint-watch.js.map +1 -0
- package/dist/cjs/state/modules/is-read-only.js +50 -0
- package/dist/cjs/state/modules/is-read-only.js.map +1 -0
- package/dist/cjs/state/modules/locale.js +50 -0
- package/dist/cjs/state/modules/locale.js.map +1 -0
- package/dist/cjs/state/modules/read-write/box-models.js +144 -0
- package/dist/cjs/state/modules/read-write/box-models.js.map +1 -0
- package/dist/cjs/state/modules/read-write/element-imperative-handles.js +61 -0
- package/dist/cjs/state/modules/read-write/element-imperative-handles.js.map +1 -0
- package/dist/cjs/state/modules/read-write/pointer.js +48 -0
- package/dist/cjs/state/modules/read-write/pointer.js.map +1 -0
- package/dist/cjs/state/modules/read-write/read-write-documents.js +98 -0
- package/dist/cjs/state/modules/read-write/read-write-documents.js.map +1 -0
- package/dist/cjs/state/modules/site-version.js +47 -0
- package/dist/cjs/state/modules/site-version.js.map +1 -0
- package/dist/cjs/state/ops/copy-element-tree.js +67 -0
- package/dist/cjs/state/ops/copy-element-tree.js.map +1 -0
- package/dist/cjs/state/ops/merge-element.js +73 -0
- package/dist/cjs/state/ops/merge-element.js.map +1 -0
- package/dist/cjs/state/read-only-state.js +231 -0
- package/dist/cjs/state/read-only-state.js.map +1 -0
- package/dist/cjs/state/read-write-state.js +128 -0
- package/dist/cjs/state/read-write-state.js.map +1 -0
- package/dist/cjs/state/store.js +219 -0
- package/dist/cjs/state/store.js.map +1 -0
- package/dist/cjs/state/unified-state.js +17 -0
- package/dist/cjs/state/unified-state.js.map +1 -0
- package/dist/cjs/translations/index.js +32 -0
- package/dist/cjs/translations/index.js.map +1 -0
- package/dist/cjs/utils/deferred.js +39 -0
- package/dist/cjs/utils/deferred.js.map +1 -0
- package/dist/cjs/utils/ref-counted-map.js +120 -0
- package/dist/cjs/utils/ref-counted-map.js.map +1 -0
- package/dist/esm/api/client.js +219 -0
- package/dist/esm/api/client.js.map +1 -0
- package/dist/esm/api-handler/handlers/manifest.js +1 -1
- package/dist/esm/api-handler/handlers/webhook/diff-projection.js +38 -0
- package/dist/esm/api-handler/handlers/webhook/diff-projection.js.map +1 -0
- package/dist/esm/builder/serialization.js +59 -0
- package/dist/esm/builder/serialization.js.map +1 -0
- package/dist/esm/client/index.js +3 -3
- package/dist/esm/controls/serialization/base/index.js +78 -0
- package/dist/esm/controls/serialization/base/index.js.map +1 -0
- package/dist/esm/controls/serialization/base/visitor.js +39 -0
- package/dist/esm/controls/serialization/base/visitor.js.map +1 -0
- package/dist/esm/controls/serialization/index.js +30 -0
- package/dist/esm/controls/serialization/index.js.map +1 -0
- package/dist/esm/controls/serialization/message-port/function-serialization.js +52 -0
- package/dist/esm/controls/serialization/message-port/function-serialization.js.map +1 -0
- package/dist/esm/controls/serialization/message-port/index.js +3 -0
- package/dist/esm/controls/serialization/message-port/index.js.map +1 -0
- package/dist/esm/controls/serialization/message-port/visitor.js +24 -0
- package/dist/esm/controls/serialization/message-port/visitor.js.map +1 -0
- package/dist/esm/next/api-handler/config/pages-router.js +1 -1
- package/dist/esm/next/api-handler/config/pages-router.js.map +1 -1
- package/dist/esm/next/fetch.js +6 -0
- package/dist/esm/next/fetch.js.map +1 -0
- package/dist/esm/next/runtime.js +11 -0
- package/dist/esm/next/runtime.js.map +1 -0
- package/dist/esm/next/testing/react-runtime.js +5 -0
- package/dist/esm/next/testing/react-runtime.js.map +1 -0
- package/dist/esm/prop-controllers/serialization.js +338 -0
- package/dist/esm/prop-controllers/serialization.js.map +1 -0
- package/dist/esm/runtimes/react/components/GoogleFontLink.js +35 -0
- package/dist/esm/runtimes/react/components/GoogleFontLink.js.map +1 -0
- package/dist/esm/runtimes/react/components/MakeswiftFonts.js +9 -0
- package/dist/esm/runtimes/react/components/MakeswiftFonts.js.map +1 -0
- package/dist/esm/runtimes/react/hooks/use-async-effect.js +31 -0
- package/dist/esm/runtimes/react/hooks/use-async-effect.js.map +1 -0
- package/dist/esm/runtimes/react/hooks/use-current-breakpoint.js +15 -0
- package/dist/esm/runtimes/react/hooks/use-current-breakpoint.js.map +1 -0
- package/dist/esm/runtimes/react/hooks/use-is-read-only.js +9 -0
- package/dist/esm/runtimes/react/hooks/use-is-read-only.js.map +1 -0
- package/dist/esm/runtimes/react/lib/resolved-style-to-css.js +38 -0
- package/dist/esm/runtimes/react/lib/resolved-style-to-css.js.map +1 -0
- package/dist/esm/runtimes/react/testing/react-runtime.js +9 -0
- package/dist/esm/runtimes/react/testing/react-runtime.js.map +1 -0
- package/dist/esm/runtimes/react/utils/google-fonts-url.js +23 -0
- package/dist/esm/runtimes/react/utils/google-fonts-url.js.map +1 -0
- package/dist/esm/state/actions/internal/index.js +10 -0
- package/dist/esm/state/actions/internal/index.js.map +1 -0
- package/dist/esm/state/actions/internal/read-only-actions.js +153 -0
- package/dist/esm/state/actions/internal/read-only-actions.js.map +1 -0
- package/dist/esm/state/actions/internal/read-write-actions.js +46 -0
- package/dist/esm/state/actions/internal/read-write-actions.js.map +1 -0
- package/dist/esm/state/builder-api/api.js +1 -0
- package/dist/esm/state/builder-api/api.js.map +1 -0
- package/dist/esm/state/builder-api/navigation-listener.js +86 -0
- package/dist/esm/state/builder-api/navigation-listener.js.map +1 -0
- package/dist/esm/state/middleware/makeswift-api-client-sync.js +13 -0
- package/dist/esm/state/middleware/makeswift-api-client-sync.js.map +1 -0
- package/dist/esm/state/middleware/read-only-element-tree.js +28 -0
- package/dist/esm/state/middleware/read-only-element-tree.js.map +1 -0
- package/dist/esm/state/middleware/read-write/builder-api/element-size.js +16 -0
- package/dist/esm/state/middleware/read-write/builder-api/element-size.js.map +1 -0
- package/dist/esm/state/middleware/read-write/builder-api/index.js +61 -0
- package/dist/esm/state/middleware/read-write/builder-api/index.js.map +1 -0
- package/dist/esm/state/middleware/read-write/builder-api/initialize-connection.js +254 -0
- package/dist/esm/state/middleware/read-write/builder-api/initialize-connection.js.map +1 -0
- package/dist/esm/state/middleware/read-write/index.js +16 -0
- package/dist/esm/state/middleware/read-write/index.js.map +1 -0
- package/dist/esm/state/middleware/read-write/measure-box-models.js +37 -0
- package/dist/esm/state/middleware/read-write/measure-box-models.js.map +1 -0
- package/dist/esm/state/middleware/read-write/prop-controller-handles.js +80 -0
- package/dist/esm/state/middleware/read-write/prop-controller-handles.js.map +1 -0
- package/dist/esm/state/middleware/read-write/update-element-tree.js +35 -0
- package/dist/esm/state/middleware/read-write/update-element-tree.js.map +1 -0
- package/dist/esm/state/mixins/breakpoint-watch.js +48 -0
- package/dist/esm/state/mixins/breakpoint-watch.js.map +1 -0
- package/dist/esm/state/modules/is-read-only.js +24 -0
- package/dist/esm/state/modules/is-read-only.js.map +1 -0
- package/dist/esm/state/modules/locale.js +24 -0
- package/dist/esm/state/modules/locale.js.map +1 -0
- package/dist/esm/state/modules/read-write/box-models.js +114 -0
- package/dist/esm/state/modules/read-write/box-models.js.map +1 -0
- package/dist/esm/state/modules/read-write/element-imperative-handles.js +36 -0
- package/dist/esm/state/modules/read-write/element-imperative-handles.js.map +1 -0
- package/dist/esm/state/modules/read-write/pointer.js +23 -0
- package/dist/esm/state/modules/read-write/pointer.js.map +1 -0
- package/dist/esm/state/modules/read-write/read-write-documents.js +60 -0
- package/dist/esm/state/modules/read-write/read-write-documents.js.map +1 -0
- package/dist/esm/state/modules/site-version.js +21 -0
- package/dist/esm/state/modules/site-version.js.map +1 -0
- package/dist/esm/state/ops/copy-element-tree.js +37 -0
- package/dist/esm/state/ops/copy-element-tree.js.map +1 -0
- package/dist/esm/state/ops/merge-element.js +39 -0
- package/dist/esm/state/ops/merge-element.js.map +1 -0
- package/dist/esm/state/read-only-state.js +176 -0
- package/dist/esm/state/read-only-state.js.map +1 -0
- package/dist/esm/state/read-write-state.js +82 -0
- package/dist/esm/state/read-write-state.js.map +1 -0
- package/dist/esm/state/store.js +188 -0
- package/dist/esm/state/store.js.map +1 -0
- package/dist/esm/state/unified-state.js +1 -0
- package/dist/esm/state/unified-state.js.map +1 -0
- package/dist/esm/translations/index.js +7 -0
- package/dist/esm/translations/index.js.map +1 -0
- package/dist/esm/utils/deferred.js +15 -0
- package/dist/esm/utils/deferred.js.map +1 -0
- package/dist/esm/utils/ref-counted-map.js +96 -0
- package/dist/esm/utils/ref-counted-map.js.map +1 -0
- package/dist/types/api/client.d.ts +81 -0
- package/dist/types/api/client.d.ts.map +1 -0
- package/dist/types/api-handler/handlers/webhook/diff-projection.d.ts +201 -0
- package/dist/types/api-handler/handlers/webhook/diff-projection.d.ts.map +1 -0
- package/dist/types/builder/serialization.d.ts +23 -0
- package/dist/types/builder/serialization.d.ts.map +1 -0
- package/dist/types/builder/serialization.test.d.ts +2 -0
- package/dist/types/builder/serialization.test.d.ts.map +1 -0
- package/dist/types/client/tests/client.get-component-snapshots.test.d.ts +2 -0
- package/dist/types/client/tests/client.get-component-snapshots.test.d.ts.map +1 -0
- package/dist/types/client/tests/client.get-fonts.test.d.ts +2 -0
- package/dist/types/client/tests/client.get-fonts.test.d.ts.map +1 -0
- package/dist/types/client/tests/client.introspect-many.test.d.ts +2 -0
- package/dist/types/client/tests/client.introspect-many.test.d.ts.map +1 -0
- package/dist/types/components/hooks/__tests__/useMediaQuery.test.d.ts +3 -0
- package/dist/types/components/hooks/__tests__/useMediaQuery.test.d.ts.map +1 -0
- package/dist/types/controls/serialization/base/index.d.ts +10 -0
- package/dist/types/controls/serialization/base/index.d.ts.map +1 -0
- package/dist/types/controls/serialization/base/visitor.d.ts +7 -0
- package/dist/types/controls/serialization/base/visitor.d.ts.map +1 -0
- package/dist/types/controls/serialization/index.d.ts +10 -0
- package/dist/types/controls/serialization/index.d.ts.map +1 -0
- package/dist/types/controls/serialization/message-port/function-serialization.d.ts +16 -0
- package/dist/types/controls/serialization/message-port/function-serialization.d.ts.map +1 -0
- package/dist/types/controls/serialization/message-port/function-serialization.test.d.ts +2 -0
- package/dist/types/controls/serialization/message-port/function-serialization.test.d.ts.map +1 -0
- package/dist/types/controls/serialization/message-port/index.d.ts +3 -0
- package/dist/types/controls/serialization/message-port/index.d.ts.map +1 -0
- package/dist/types/controls/serialization/message-port/visitor.d.ts +7 -0
- package/dist/types/controls/serialization/message-port/visitor.d.ts.map +1 -0
- package/dist/types/next/api-handler/config/pages-router.test.d.ts +2 -0
- package/dist/types/next/api-handler/config/pages-router.test.d.ts.map +1 -0
- package/dist/types/next/components/tests/controls/code-control.test.d.ts +2 -0
- package/dist/types/next/components/tests/controls/code-control.test.d.ts.map +1 -0
- package/dist/types/next/fetch.d.ts +3 -0
- package/dist/types/next/fetch.d.ts.map +1 -0
- package/dist/types/next/runtime.d.ts +10 -0
- package/dist/types/next/runtime.d.ts.map +1 -0
- package/dist/types/next/testing/react-runtime.d.ts +2 -0
- package/dist/types/next/testing/react-runtime.d.ts.map +1 -0
- package/dist/types/prop-controllers/serialization.d.ts +228 -0
- package/dist/types/prop-controllers/serialization.d.ts.map +1 -0
- package/dist/types/runtimes/react/components/GoogleFontLink.d.ts +14 -0
- package/dist/types/runtimes/react/components/GoogleFontLink.d.ts.map +1 -0
- package/dist/types/runtimes/react/components/MakeswiftFonts.d.ts +7 -0
- package/dist/types/runtimes/react/components/MakeswiftFonts.d.ts.map +1 -0
- package/dist/types/runtimes/react/hooks/__tests__/use-async-effect.test.d.ts +2 -0
- package/dist/types/runtimes/react/hooks/__tests__/use-async-effect.test.d.ts.map +1 -0
- package/dist/types/runtimes/react/hooks/use-async-effect.d.ts +3 -0
- package/dist/types/runtimes/react/hooks/use-async-effect.d.ts.map +1 -0
- package/dist/types/runtimes/react/hooks/use-current-breakpoint.d.ts +3 -0
- package/dist/types/runtimes/react/hooks/use-current-breakpoint.d.ts.map +1 -0
- package/dist/types/runtimes/react/hooks/use-is-read-only.d.ts +2 -0
- package/dist/types/runtimes/react/hooks/use-is-read-only.d.ts.map +1 -0
- package/dist/types/runtimes/react/lib/resolved-style-to-css.d.ts +4 -0
- package/dist/types/runtimes/react/lib/resolved-style-to-css.d.ts.map +1 -0
- package/dist/types/runtimes/react/testing/react-runtime.d.ts +6 -0
- package/dist/types/runtimes/react/testing/react-runtime.d.ts.map +1 -0
- package/dist/types/runtimes/react/utils/google-fonts-url.d.ts +6 -0
- package/dist/types/runtimes/react/utils/google-fonts-url.d.ts.map +1 -0
- package/dist/types/state/__tests__/fixtures/serialized-descriptors-from-builder.d.ts +5 -0
- package/dist/types/state/__tests__/fixtures/serialized-descriptors-from-builder.d.ts.map +1 -0
- package/dist/types/state/__tests__/fixtures/translatable-content-sample.d.ts +3 -0
- package/dist/types/state/__tests__/fixtures/translatable-content-sample.d.ts.map +1 -0
- package/dist/types/state/__tests__/get-translatable-content.test.d.ts +2 -0
- package/dist/types/state/__tests__/get-translatable-content.test.d.ts.map +1 -0
- package/dist/types/state/__tests__/merge-element.test.d.ts +2 -0
- package/dist/types/state/__tests__/merge-element.test.d.ts.map +1 -0
- package/dist/types/state/__tests__/store.read-write-state.test.d.ts +2 -0
- package/dist/types/state/__tests__/store.read-write-state.test.d.ts.map +1 -0
- package/dist/types/state/__tests__/test-store.d.ts +31 -0
- package/dist/types/state/__tests__/test-store.d.ts.map +1 -0
- package/dist/types/state/actions/internal/index.d.ts +29 -0
- package/dist/types/state/actions/internal/index.d.ts.map +1 -0
- package/dist/types/state/actions/internal/read-only-actions.d.ts +171 -0
- package/dist/types/state/actions/internal/read-only-actions.d.ts.map +1 -0
- package/dist/types/state/actions/internal/read-write-actions.d.ts +53 -0
- package/dist/types/state/actions/internal/read-write-actions.d.ts.map +1 -0
- package/dist/types/state/builder-api/api.d.ts +9 -0
- package/dist/types/state/builder-api/api.d.ts.map +1 -0
- package/dist/types/state/builder-api/navigation-listener.d.ts +3 -0
- package/dist/types/state/builder-api/navigation-listener.d.ts.map +1 -0
- package/dist/types/state/middleware/makeswift-api-client-sync.d.ts +5 -0
- package/dist/types/state/middleware/makeswift-api-client-sync.d.ts.map +1 -0
- package/dist/types/state/middleware/read-only-element-tree.d.ts +4 -0
- package/dist/types/state/middleware/read-only-element-tree.d.ts.map +1 -0
- package/dist/types/state/middleware/read-write/builder-api/element-size.d.ts +12 -0
- package/dist/types/state/middleware/read-write/builder-api/element-size.d.ts.map +1 -0
- package/dist/types/state/middleware/read-write/builder-api/index.d.ts +5 -0
- package/dist/types/state/middleware/read-write/builder-api/index.d.ts.map +1 -0
- package/dist/types/state/middleware/read-write/builder-api/initialize-connection.d.ts +6 -0
- package/dist/types/state/middleware/read-write/builder-api/initialize-connection.d.ts.map +1 -0
- package/dist/types/state/middleware/read-write/index.d.ts +5 -0
- package/dist/types/state/middleware/read-write/index.d.ts.map +1 -0
- package/dist/types/state/middleware/read-write/measure-box-models.d.ts +4 -0
- package/dist/types/state/middleware/read-write/measure-box-models.d.ts.map +1 -0
- package/dist/types/state/middleware/read-write/prop-controller-handles.d.ts +4 -0
- package/dist/types/state/middleware/read-write/prop-controller-handles.d.ts.map +1 -0
- package/dist/types/state/middleware/read-write/update-element-tree.d.ts +4 -0
- package/dist/types/state/middleware/read-write/update-element-tree.d.ts.map +1 -0
- package/dist/types/state/mixins/breakpoint-watch.d.ts +11 -0
- package/dist/types/state/mixins/breakpoint-watch.d.ts.map +1 -0
- package/dist/types/state/modules/is-read-only.d.ts +6 -0
- package/dist/types/state/modules/is-read-only.d.ts.map +1 -0
- package/dist/types/state/modules/locale.d.ts +6 -0
- package/dist/types/state/modules/locale.d.ts.map +1 -0
- package/dist/types/state/modules/read-write/box-models.d.ts +26 -0
- package/dist/types/state/modules/read-write/box-models.d.ts.map +1 -0
- package/dist/types/state/modules/read-write/element-imperative-handles.d.ts +6 -0
- package/dist/types/state/modules/read-write/element-imperative-handles.d.ts.map +1 -0
- package/dist/types/state/modules/read-write/pointer.d.ts +11 -0
- package/dist/types/state/modules/read-write/pointer.d.ts.map +1 -0
- package/dist/types/state/modules/read-write/read-write-documents.d.ts +14 -0
- package/dist/types/state/modules/read-write/read-write-documents.d.ts.map +1 -0
- package/dist/types/state/modules/site-version.d.ts +7 -0
- package/dist/types/state/modules/site-version.d.ts.map +1 -0
- package/dist/types/state/ops/copy-element-tree.d.ts +37 -0
- package/dist/types/state/ops/copy-element-tree.d.ts.map +1 -0
- package/dist/types/state/ops/merge-element.d.ts +4 -0
- package/dist/types/state/ops/merge-element.d.ts.map +1 -0
- package/dist/types/state/read-only-state.d.ts +131 -0
- package/dist/types/state/read-only-state.d.ts.map +1 -0
- package/dist/types/state/read-write-state.d.ts +62 -0
- package/dist/types/state/read-write-state.d.ts.map +1 -0
- package/dist/types/state/store.d.ts +86 -0
- package/dist/types/state/store.d.ts.map +1 -0
- package/dist/types/state/unified-state.d.ts +9 -0
- package/dist/types/state/unified-state.d.ts.map +1 -0
- package/dist/types/translations/index.d.ts +6 -0
- package/dist/types/translations/index.d.ts.map +1 -0
- package/dist/types/utils/__tests__/ref-counted-map.test.d.ts +2 -0
- package/dist/types/utils/__tests__/ref-counted-map.test.d.ts.map +1 -0
- package/dist/types/utils/deferred.d.ts +7 -0
- package/dist/types/utils/deferred.d.ts.map +1 -0
- package/dist/types/utils/ref-counted-map.d.ts +32 -0
- package/dist/types/utils/ref-counted-map.d.ts.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { combineReducers } from "@reduxjs/toolkit";
|
|
2
|
+
import * as Documents from "./modules/read-write/read-write-documents";
|
|
3
|
+
import * as BoxModels from "./modules/read-write/box-models";
|
|
4
|
+
import * as Pointer from "./modules/read-write/pointer";
|
|
5
|
+
import * as ElementImperativeHandles from "./modules/read-write/element-imperative-handles";
|
|
6
|
+
import * as ReadOnlyState from "./read-only-state";
|
|
7
|
+
import { createBox, getBox, parse } from "./modules/read-write/box-models";
|
|
8
|
+
const reducers = {
|
|
9
|
+
...ReadOnlyState.reducers,
|
|
10
|
+
documents: Documents.reducer,
|
|
11
|
+
boxModels: BoxModels.reducer,
|
|
12
|
+
pointer: Pointer.reducer,
|
|
13
|
+
elementImperativeHandles: ElementImperativeHandles.reducer
|
|
14
|
+
};
|
|
15
|
+
function createRootReducer() {
|
|
16
|
+
return combineReducers(reducers);
|
|
17
|
+
}
|
|
18
|
+
function getDocumentsStateSlice(state) {
|
|
19
|
+
return state.documents;
|
|
20
|
+
}
|
|
21
|
+
function getDocuments(state) {
|
|
22
|
+
return Documents.getDocuments(getDocumentsStateSlice(state));
|
|
23
|
+
}
|
|
24
|
+
function getDocument(state, documentKey) {
|
|
25
|
+
return Documents.getDocument(getDocumentsStateSlice(state), documentKey);
|
|
26
|
+
}
|
|
27
|
+
function getBoxModelsStateSlice(state) {
|
|
28
|
+
return state.boxModels;
|
|
29
|
+
}
|
|
30
|
+
function getMeasurables(state) {
|
|
31
|
+
return BoxModels.getMeasurables(getBoxModelsStateSlice(state));
|
|
32
|
+
}
|
|
33
|
+
function getBoxModels(state) {
|
|
34
|
+
return BoxModels.getBoxModels(getBoxModelsStateSlice(state));
|
|
35
|
+
}
|
|
36
|
+
function getBoxModel(state, documentKey, elementKey) {
|
|
37
|
+
return BoxModels.getBoxModel(getBoxModelsStateSlice(state), documentKey, elementKey);
|
|
38
|
+
}
|
|
39
|
+
function getPointer(state) {
|
|
40
|
+
return Pointer.getPointer(state.pointer);
|
|
41
|
+
}
|
|
42
|
+
function getElementImperativeHandles(state) {
|
|
43
|
+
return ElementImperativeHandles.getElementImperativeHandles(state.elementImperativeHandles);
|
|
44
|
+
}
|
|
45
|
+
function getElementImperativeHandlesContainingElement(state, element) {
|
|
46
|
+
const elementImperativeHandles = getElementImperativeHandles(state);
|
|
47
|
+
const filteredElementImperativeHandles = /* @__PURE__ */ new Map();
|
|
48
|
+
for (const [documentKey, byElementKey] of elementImperativeHandles) {
|
|
49
|
+
const filteredByElementKey = /* @__PURE__ */ new Map();
|
|
50
|
+
for (const [elementKey, elementImperativeHandle] of byElementKey) {
|
|
51
|
+
const handleElement = elementImperativeHandle.getDomNode();
|
|
52
|
+
if (handleElement?.contains(element)) {
|
|
53
|
+
filteredByElementKey.set(elementKey, elementImperativeHandle);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (filteredByElementKey.size > 0) {
|
|
57
|
+
filteredElementImperativeHandles.set(documentKey, filteredByElementKey);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return filteredElementImperativeHandles;
|
|
61
|
+
}
|
|
62
|
+
function setupBuilderProxy(builderProxy) {
|
|
63
|
+
return (dispatch) => {
|
|
64
|
+
return builderProxy.setup({ onHostAction: (action) => dispatch(action) });
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export {
|
|
68
|
+
createBox,
|
|
69
|
+
createRootReducer,
|
|
70
|
+
getBox,
|
|
71
|
+
getBoxModel,
|
|
72
|
+
getBoxModels,
|
|
73
|
+
getDocument,
|
|
74
|
+
getDocuments,
|
|
75
|
+
getElementImperativeHandles,
|
|
76
|
+
getElementImperativeHandlesContainingElement,
|
|
77
|
+
getMeasurables,
|
|
78
|
+
getPointer,
|
|
79
|
+
parse,
|
|
80
|
+
setupBuilderProxy
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=read-write-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/state/read-write-state.ts"],"sourcesContent":["import { combineReducers, type ThunkAction, type ThunkDispatch } from '@reduxjs/toolkit'\n\nimport * as Documents from './modules/read-write/read-write-documents'\nimport * as BoxModels from './modules/read-write/box-models'\nimport * as Pointer from './modules/read-write/pointer'\nimport * as ElementImperativeHandles from './modules/read-write/element-imperative-handles'\n\nimport { type Action } from './actions'\n\nimport { ElementImperativeHandle } from '../runtimes/react/element-imperative-handle'\n\nimport { BuilderAPIProxy } from './builder-api/proxy'\nimport * as ReadOnlyState from './read-only-state'\n\nexport type { Operation } from './modules/read-write/read-write-documents'\nexport type { BoxModelHandle } from './modules/read-write/box-models'\nexport { createBox, getBox, parse } from './modules/read-write/box-models'\n\nconst reducers = {\n ...ReadOnlyState.reducers,\n documents: Documents.reducer,\n boxModels: BoxModels.reducer,\n pointer: Pointer.reducer,\n elementImperativeHandles: ElementImperativeHandles.reducer,\n}\n\nexport function createRootReducer() {\n return combineReducers(reducers)\n}\n\nexport type State = Omit<ReadOnlyState.State, 'documents'> & {\n documents: Documents.State\n boxModels: BoxModels.State\n pointer: Pointer.State\n elementImperativeHandles: ElementImperativeHandles.State\n}\n\nexport type Dispatch = ThunkDispatch<State, unknown, Action>\n\nfunction getDocumentsStateSlice(state: State): Documents.State {\n return state.documents\n}\n\nexport function getDocuments(state: State): Documents.State {\n return Documents.getDocuments(getDocumentsStateSlice(state))\n}\n\nexport function getDocument(state: State, documentKey: string): Documents.Document | null {\n return Documents.getDocument(getDocumentsStateSlice(state), documentKey)\n}\n\nfunction getBoxModelsStateSlice(state: State): BoxModels.State {\n return state.boxModels\n}\n\nexport function getMeasurables(state: State): Map<string, Map<string, BoxModels.Measurable>> {\n return BoxModels.getMeasurables(getBoxModelsStateSlice(state))\n}\n\nexport function getBoxModels(state: State): Map<string, Map<string, BoxModels.BoxDisplayModel>> {\n return BoxModels.getBoxModels(getBoxModelsStateSlice(state))\n}\n\nexport function getBoxModel(\n state: State,\n documentKey: string,\n elementKey: string,\n): BoxModels.BoxDisplayModel | null {\n return BoxModels.getBoxModel(getBoxModelsStateSlice(state), documentKey, elementKey)\n}\n\nexport function getPointer(state: State): Pointer.Point | null {\n return Pointer.getPointer(state.pointer)\n}\n\nexport function getElementImperativeHandles(\n state: State,\n): Map<string, Map<string, ElementImperativeHandle>> {\n return ElementImperativeHandles.getElementImperativeHandles(state.elementImperativeHandles)\n}\n\nexport function getElementImperativeHandlesContainingElement(\n state: State,\n element: Element,\n): Map<string, Map<string, ElementImperativeHandle>> {\n const elementImperativeHandles = getElementImperativeHandles(state)\n const filteredElementImperativeHandles = new Map<string, Map<string, ElementImperativeHandle>>()\n\n for (const [documentKey, byElementKey] of elementImperativeHandles) {\n const filteredByElementKey = new Map<string, ElementImperativeHandle>()\n\n for (const [elementKey, elementImperativeHandle] of byElementKey) {\n const handleElement = elementImperativeHandle.getDomNode()\n\n if (handleElement?.contains(element)) {\n filteredByElementKey.set(elementKey, elementImperativeHandle)\n }\n }\n\n if (filteredByElementKey.size > 0) {\n filteredElementImperativeHandles.set(documentKey, filteredByElementKey)\n }\n }\n\n return filteredElementImperativeHandles\n}\n\nexport function setupBuilderProxy(\n builderProxy: BuilderAPIProxy,\n): ThunkAction<VoidFunction, State, unknown, Action> {\n return dispatch => {\n return builderProxy.setup({ onHostAction: action => dispatch(action) })\n }\n}\n"],"mappings":"AAAA,SAAS,uBAA6D;AAEtE,YAAY,eAAe;AAC3B,YAAY,eAAe;AAC3B,YAAY,aAAa;AACzB,YAAY,8BAA8B;AAO1C,YAAY,mBAAmB;AAI/B,SAAS,WAAW,QAAQ,aAAa;AAEzC,MAAM,WAAW;AAAA,EACf,GAAG,cAAc;AAAA,EACjB,WAAW,UAAU;AAAA,EACrB,WAAW,UAAU;AAAA,EACrB,SAAS,QAAQ;AAAA,EACjB,0BAA0B,yBAAyB;AACrD;AAEO,SAAS,oBAAoB;AAClC,SAAO,gBAAgB,QAAQ;AACjC;AAWA,SAAS,uBAAuB,OAA+B;AAC7D,SAAO,MAAM;AACf;AAEO,SAAS,aAAa,OAA+B;AAC1D,SAAO,UAAU,aAAa,uBAAuB,KAAK,CAAC;AAC7D;AAEO,SAAS,YAAY,OAAc,aAAgD;AACxF,SAAO,UAAU,YAAY,uBAAuB,KAAK,GAAG,WAAW;AACzE;AAEA,SAAS,uBAAuB,OAA+B;AAC7D,SAAO,MAAM;AACf;AAEO,SAAS,eAAe,OAA8D;AAC3F,SAAO,UAAU,eAAe,uBAAuB,KAAK,CAAC;AAC/D;AAEO,SAAS,aAAa,OAAmE;AAC9F,SAAO,UAAU,aAAa,uBAAuB,KAAK,CAAC;AAC7D;AAEO,SAAS,YACd,OACA,aACA,YACkC;AAClC,SAAO,UAAU,YAAY,uBAAuB,KAAK,GAAG,aAAa,UAAU;AACrF;AAEO,SAAS,WAAW,OAAoC;AAC7D,SAAO,QAAQ,WAAW,MAAM,OAAO;AACzC;AAEO,SAAS,4BACd,OACmD;AACnD,SAAO,yBAAyB,4BAA4B,MAAM,wBAAwB;AAC5F;AAEO,SAAS,6CACd,OACA,SACmD;AACnD,QAAM,2BAA2B,4BAA4B,KAAK;AAClE,QAAM,mCAAmC,oBAAI,IAAkD;AAE/F,aAAW,CAAC,aAAa,YAAY,KAAK,0BAA0B;AAClE,UAAM,uBAAuB,oBAAI,IAAqC;AAEtE,eAAW,CAAC,YAAY,uBAAuB,KAAK,cAAc;AAChE,YAAM,gBAAgB,wBAAwB,WAAW;AAEzD,UAAI,eAAe,SAAS,OAAO,GAAG;AACpC,6BAAqB,IAAI,YAAY,uBAAuB;AAAA,MAC9D;AAAA,IACF;AAEA,QAAI,qBAAqB,OAAO,GAAG;AACjC,uCAAiC,IAAI,aAAa,oBAAoB;AAAA,IACxE;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,kBACd,cACmD;AACnD,SAAO,cAAY;AACjB,WAAO,aAAa,MAAM,EAAE,cAAc,YAAU,SAAS,MAAM,EAAE,CAAC;AAAA,EACxE;AACF;","names":[]}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Tuple,
|
|
3
|
+
configureStore as configureReduxStore,
|
|
4
|
+
combineReducers,
|
|
5
|
+
compose
|
|
6
|
+
} from "@reduxjs/toolkit";
|
|
7
|
+
import { actionMiddleware, middlewareOptions, devToolsConfig } from "./toolkit";
|
|
8
|
+
import { BuilderActionTypes } from "./builder-api/actions";
|
|
9
|
+
import { HostActionTypes } from "./host-api";
|
|
10
|
+
import * as Breakpoints from "./modules/breakpoints";
|
|
11
|
+
import { readOnlyElementTreeMiddleware } from "./middleware/read-only-element-tree";
|
|
12
|
+
import { makeswiftApiClientSyncMiddleware } from "./middleware/makeswift-api-client-sync";
|
|
13
|
+
import { breakpointWatchMixin } from "./mixins/breakpoint-watch";
|
|
14
|
+
import * as ReadOnlyState from "./read-only-state";
|
|
15
|
+
const configureStore = ({
|
|
16
|
+
name,
|
|
17
|
+
preloadedState,
|
|
18
|
+
enhancers,
|
|
19
|
+
middleware
|
|
20
|
+
}) => {
|
|
21
|
+
const store = configureReduxStore({
|
|
22
|
+
reducer: combineReducers(ReadOnlyState.reducers),
|
|
23
|
+
preloadedState,
|
|
24
|
+
middleware: (getDefaultMiddleware) => getDefaultMiddleware(middlewareOptions).concat([
|
|
25
|
+
readOnlyElementTreeMiddleware(),
|
|
26
|
+
...middleware ? middleware() : []
|
|
27
|
+
]),
|
|
28
|
+
enhancers: (getDefaultEnhancers) => getDefaultEnhancers().concat(enhancers()),
|
|
29
|
+
devTools: devToolsConfig({
|
|
30
|
+
name: `${name} (${(/* @__PURE__ */ new Date()).toISOString()})`,
|
|
31
|
+
actionsDenylist: [
|
|
32
|
+
HostActionTypes.BUILDER_POINTER_MOVE,
|
|
33
|
+
BuilderActionTypes.HANDLE_POINTER_MOVE,
|
|
34
|
+
BuilderActionTypes.ELEMENT_FROM_POINT_CHANGE
|
|
35
|
+
]
|
|
36
|
+
})
|
|
37
|
+
});
|
|
38
|
+
return store;
|
|
39
|
+
};
|
|
40
|
+
function configureProtoStore({
|
|
41
|
+
name,
|
|
42
|
+
breakpoints
|
|
43
|
+
}) {
|
|
44
|
+
return configureStore({
|
|
45
|
+
name,
|
|
46
|
+
preloadedState: {
|
|
47
|
+
breakpoints: Breakpoints.getInitialState(breakpoints)
|
|
48
|
+
},
|
|
49
|
+
enhancers: () => new Tuple()
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function conditionalReadWriteMiddleware(middlewareRef) {
|
|
53
|
+
let readWriteActionBuffer = [];
|
|
54
|
+
let middlewares = null;
|
|
55
|
+
let enhancedDispatch = null;
|
|
56
|
+
return actionMiddleware(({ dispatch, getState }) => (next) => {
|
|
57
|
+
return (action) => {
|
|
58
|
+
const state = getState();
|
|
59
|
+
if (middlewareRef.current == null) {
|
|
60
|
+
if (!state.isReadOnly) {
|
|
61
|
+
readWriteActionBuffer.push(action);
|
|
62
|
+
}
|
|
63
|
+
return next(action);
|
|
64
|
+
}
|
|
65
|
+
if (state.isReadOnly) {
|
|
66
|
+
console.error("Read-write state mismatch", {
|
|
67
|
+
isReadOnly: state.isReadOnly,
|
|
68
|
+
middlewareRef: middlewareRef.current,
|
|
69
|
+
siteVersion: state.siteVersion
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
if (enhancedDispatch == null || middlewares !== middlewareRef.current) {
|
|
73
|
+
middlewares = middlewareRef.current;
|
|
74
|
+
const middlewareApi = { dispatch, getState };
|
|
75
|
+
enhancedDispatch = compose(...middlewares.map((mw) => mw(middlewareApi)))(next);
|
|
76
|
+
}
|
|
77
|
+
if (readWriteActionBuffer.length > 0) {
|
|
78
|
+
const readWriteActions = [...readWriteActionBuffer];
|
|
79
|
+
readWriteActionBuffer = [];
|
|
80
|
+
for (const bufferedAction of readWriteActions) {
|
|
81
|
+
enhancedDispatch(bufferedAction);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return enhancedDispatch(action);
|
|
85
|
+
};
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function withMixin(mixin) {
|
|
89
|
+
return (next) => (reducer, preloadedState) => ({
|
|
90
|
+
...next(reducer, preloadedState),
|
|
91
|
+
...mixin
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
function configureReadWriteStore({
|
|
95
|
+
name,
|
|
96
|
+
appOrigin,
|
|
97
|
+
hostApiClient,
|
|
98
|
+
preloadedState
|
|
99
|
+
}) {
|
|
100
|
+
const readWriteMiddlewareRef = {
|
|
101
|
+
current: null
|
|
102
|
+
};
|
|
103
|
+
let refCount = 0;
|
|
104
|
+
let readWriteCleanup = null;
|
|
105
|
+
let readWriteSetupPromise = null;
|
|
106
|
+
const loadReadWriteState = async () => {
|
|
107
|
+
if (readWriteCleanup != null) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (readWriteSetupPromise != null) {
|
|
111
|
+
await readWriteSetupPromise;
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
readWriteSetupPromise = (async () => {
|
|
115
|
+
const { BuilderAPIProxy } = await import("./builder-api/proxy");
|
|
116
|
+
const { createRootReducer, setupBuilderProxy } = await import("./read-write-state");
|
|
117
|
+
const { createReadWriteMiddleware } = await import("./middleware/read-write");
|
|
118
|
+
if (readWriteMiddlewareRef.current != null) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
store.replaceReducer(createRootReducer());
|
|
122
|
+
const builderProxy = new BuilderAPIProxy({ appOrigin });
|
|
123
|
+
readWriteMiddlewareRef.current = createReadWriteMiddleware({ builderProxy });
|
|
124
|
+
const dispatch = store.dispatch;
|
|
125
|
+
const builderProxyCleanup = dispatch(setupBuilderProxy(builderProxy));
|
|
126
|
+
readWriteCleanup = () => {
|
|
127
|
+
readWriteMiddlewareRef.current = null;
|
|
128
|
+
builderProxyCleanup();
|
|
129
|
+
};
|
|
130
|
+
})();
|
|
131
|
+
try {
|
|
132
|
+
await readWriteSetupPromise;
|
|
133
|
+
} finally {
|
|
134
|
+
readWriteSetupPromise = null;
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
const store = configureStore({
|
|
138
|
+
name,
|
|
139
|
+
preloadedState,
|
|
140
|
+
middleware: () => [
|
|
141
|
+
makeswiftApiClientSyncMiddleware(hostApiClient),
|
|
142
|
+
conditionalReadWriteMiddleware(readWriteMiddlewareRef)
|
|
143
|
+
],
|
|
144
|
+
enhancers: () => new Tuple(
|
|
145
|
+
withMixin(
|
|
146
|
+
breakpointWatchMixin({
|
|
147
|
+
dispatch: (...args) => store.dispatch(...args),
|
|
148
|
+
getState: () => store.getState(),
|
|
149
|
+
subscribe: (listener) => store.subscribe(listener)
|
|
150
|
+
})
|
|
151
|
+
),
|
|
152
|
+
withMixin({
|
|
153
|
+
hostApiClient,
|
|
154
|
+
loadReadWriteStateIfNeeded: async () => {
|
|
155
|
+
const { isReadOnly } = store.getState();
|
|
156
|
+
if (isReadOnly) {
|
|
157
|
+
if (refCount > 0) {
|
|
158
|
+
console.error("Read-write state mismatch", { isReadOnly, refCount });
|
|
159
|
+
}
|
|
160
|
+
return () => {
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
await loadReadWriteState();
|
|
164
|
+
refCount += 1;
|
|
165
|
+
let didCleanup = false;
|
|
166
|
+
return () => {
|
|
167
|
+
if (didCleanup) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
didCleanup = true;
|
|
171
|
+
refCount -= 1;
|
|
172
|
+
if (refCount === 0 && readWriteCleanup != null) {
|
|
173
|
+
readWriteCleanup();
|
|
174
|
+
readWriteCleanup = null;
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
})
|
|
179
|
+
)
|
|
180
|
+
});
|
|
181
|
+
return store;
|
|
182
|
+
}
|
|
183
|
+
export {
|
|
184
|
+
conditionalReadWriteMiddleware,
|
|
185
|
+
configureProtoStore,
|
|
186
|
+
configureReadWriteStore
|
|
187
|
+
};
|
|
188
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/state/store.ts"],"sourcesContent":["import {\n type Middleware,\n type StoreEnhancer,\n type MiddlewareAPI,\n Tuple,\n configureStore as configureReduxStore,\n combineReducers,\n compose,\n} from '@reduxjs/toolkit'\n\nimport { MakeswiftHostApiClient } from '../api/client'\n\nimport { actionMiddleware, middlewareOptions, devToolsConfig } from './toolkit'\nimport { BuilderActionTypes } from './builder-api/actions'\nimport { HostActionTypes } from './host-api'\n\nimport * as Breakpoints from './modules/breakpoints'\n\nimport { readOnlyElementTreeMiddleware } from './middleware/read-only-element-tree'\nimport { makeswiftApiClientSyncMiddleware } from './middleware/makeswift-api-client-sync'\nimport { type BreakpointWatch, breakpointWatchMixin } from './mixins/breakpoint-watch'\n\nimport { type Action } from './actions'\n\nimport { type State as ReadWriteState } from './read-write-state'\nimport * as ReadOnlyState from './read-only-state'\nimport {\n type State,\n type Dispatch,\n type ReadOnlyReducer,\n type ReadWriteDispatch,\n} from './unified-state'\n\nexport { type State } from './unified-state'\n\nconst configureStore = <Items extends readonly StoreEnhancer[] = []>({\n name,\n preloadedState,\n enhancers,\n middleware,\n}: {\n name: string\n preloadedState: Partial<State>\n enhancers: () => Tuple<Items>\n middleware?: () => Middleware[]\n}) => {\n const store = configureReduxStore({\n reducer: combineReducers(ReadOnlyState.reducers),\n preloadedState,\n\n middleware: getDefaultMiddleware =>\n getDefaultMiddleware(middlewareOptions).concat([\n readOnlyElementTreeMiddleware(),\n ...(middleware ? middleware() : []),\n ]),\n\n enhancers: getDefaultEnhancers => getDefaultEnhancers().concat(enhancers()),\n\n devTools: devToolsConfig({\n name: `${name} (${new Date().toISOString()})`,\n actionsDenylist: [\n HostActionTypes.BUILDER_POINTER_MOVE,\n BuilderActionTypes.HANDLE_POINTER_MOVE,\n BuilderActionTypes.ELEMENT_FROM_POINT_CHANGE,\n ],\n }),\n })\n\n return store\n}\n\nexport function configureProtoStore({\n name,\n breakpoints,\n}: {\n name: string\n breakpoints: Breakpoints.Breakpoints | undefined\n}) {\n return configureStore({\n name,\n preloadedState: {\n breakpoints: Breakpoints.getInitialState(breakpoints),\n },\n enhancers: () => new Tuple(),\n })\n}\n\nexport type ProtoStore = ReturnType<typeof configureProtoStore>\n\ntype ReadWriteMiddleware = ReturnType<\n typeof import('./middleware/read-write').createReadWriteMiddleware\n>\n\ntype ReadWriteMiddlewareRef = {\n current: ReadWriteMiddleware | null\n}\n\nexport function conditionalReadWriteMiddleware(\n middlewareRef: ReadWriteMiddlewareRef,\n): Middleware<Dispatch, State, Dispatch> {\n let readWriteActionBuffer: Action[] = []\n let middlewares: ReadWriteMiddleware | null = null\n let enhancedDispatch: Dispatch | null = null\n\n return actionMiddleware(({ dispatch, getState }) => next => {\n return (action: Action) => {\n const state = getState()\n\n if (middlewareRef.current == null) {\n if (!state.isReadOnly) {\n // because switching to the read-write state is an asynchronous operation,\n // we need to buffer all actions dispatched after the isReadOnly state is\n // set to false but before the read-write middleware is installed\n readWriteActionBuffer.push(action)\n }\n\n return next(action)\n }\n\n if (state.isReadOnly) {\n console.error('Read-write state mismatch', {\n isReadOnly: state.isReadOnly,\n middlewareRef: middlewareRef.current,\n siteVersion: state.siteVersion,\n })\n }\n\n // build and cache the enhanced dispatch chain when read-write middleware is installed\n if (enhancedDispatch == null || middlewares !== middlewareRef.current) {\n middlewares = middlewareRef.current\n\n const middlewareApi = { dispatch, getState } as MiddlewareAPI<\n ReadWriteDispatch,\n ReadWriteState\n >\n\n enhancedDispatch = compose<Dispatch>(...middlewares.map(mw => mw(middlewareApi)))(next)\n }\n\n // dispatch buffered actions, if any\n if (readWriteActionBuffer.length > 0) {\n const readWriteActions = [...readWriteActionBuffer]\n readWriteActionBuffer = []\n\n // Note that we're rerunning the actions through the entire middleware chain,\n // including the read-only middleware and the reducers, some of which have\n // already processed these actions once. This is safe to do because actions that\n // are run as part of page initialization are idempotent.\n for (const bufferedAction of readWriteActions) {\n enhancedDispatch(bufferedAction)\n }\n }\n\n return enhancedDispatch(action)\n }\n })\n}\n\nexport interface ReadWriteStateMixin {\n readonly hostApiClient: MakeswiftHostApiClient\n\n loadReadWriteStateIfNeeded(): Promise<() => void>\n}\n\nfunction withMixin<M extends {}>(mixin: M): StoreEnhancer<M> {\n return next => (reducer, preloadedState?) => ({\n ...next(reducer, preloadedState),\n ...mixin,\n })\n}\n\nexport function configureReadWriteStore({\n name,\n appOrigin,\n hostApiClient,\n preloadedState,\n}: {\n name: string\n appOrigin: string\n hostApiClient: MakeswiftHostApiClient\n preloadedState: Partial<State>\n}) {\n const readWriteMiddlewareRef: ReadWriteMiddlewareRef = {\n current: null,\n }\n\n let refCount = 0\n let readWriteCleanup: (() => void) | null = null\n let readWriteSetupPromise: Promise<void> | null = null\n\n const loadReadWriteState = async (): Promise<void> => {\n if (readWriteCleanup != null) {\n return\n }\n\n if (readWriteSetupPromise != null) {\n await readWriteSetupPromise\n return\n }\n\n readWriteSetupPromise = (async () => {\n // import all the modules needed for read-write mode before proceeding with\n // the setup to avoid race conditions when `setup` is called concurrently\n // in two different page regions\n const { BuilderAPIProxy } = await import('./builder-api/proxy')\n const { createRootReducer, setupBuilderProxy } = await import('./read-write-state')\n const { createReadWriteMiddleware } = await import('./middleware/read-write')\n\n // IMPORTANT: only synchronous code after this point\n\n // with all modules imported, check if another concurrent setup already\n // initialized the read-write middleware\n if (readWriteMiddlewareRef.current != null) {\n return\n }\n\n store.replaceReducer(createRootReducer() as ReadOnlyReducer)\n\n const builderProxy = new BuilderAPIProxy({ appOrigin })\n readWriteMiddlewareRef.current = createReadWriteMiddleware({ builderProxy })\n\n const dispatch = store.dispatch as ReadWriteDispatch\n const builderProxyCleanup = dispatch(setupBuilderProxy(builderProxy))\n\n readWriteCleanup = () => {\n readWriteMiddlewareRef.current = null\n builderProxyCleanup()\n }\n })()\n\n try {\n await readWriteSetupPromise\n } finally {\n readWriteSetupPromise = null\n }\n }\n\n const store = configureStore({\n name,\n preloadedState,\n\n middleware: () => [\n makeswiftApiClientSyncMiddleware(hostApiClient),\n conditionalReadWriteMiddleware(readWriteMiddlewareRef),\n ],\n\n enhancers: () =>\n new Tuple(\n withMixin<BreakpointWatch>(\n breakpointWatchMixin({\n dispatch: (...args: Parameters<Dispatch>) => store.dispatch(...args),\n getState: (): State => store.getState(),\n subscribe: (listener): VoidFunction => store.subscribe(listener),\n }),\n ),\n\n withMixin<ReadWriteStateMixin>({\n hostApiClient,\n loadReadWriteStateIfNeeded: async () => {\n const { isReadOnly } = store.getState()\n\n if (isReadOnly) {\n if (refCount > 0) {\n console.error('Read-write state mismatch', { isReadOnly, refCount })\n }\n\n return () => {}\n }\n\n await loadReadWriteState()\n refCount += 1\n\n let didCleanup = false\n return () => {\n if (didCleanup) {\n return\n }\n\n didCleanup = true\n refCount -= 1\n if (refCount === 0 && readWriteCleanup != null) {\n readWriteCleanup()\n readWriteCleanup = null\n }\n }\n },\n }),\n ),\n })\n\n return store\n}\n\nexport type Store = ReturnType<typeof configureReadWriteStore>\n"],"mappings":"AAAA;AAAA,EAIE;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,OACK;AAIP,SAAS,kBAAkB,mBAAmB,sBAAsB;AACpE,SAAS,0BAA0B;AACnC,SAAS,uBAAuB;AAEhC,YAAY,iBAAiB;AAE7B,SAAS,qCAAqC;AAC9C,SAAS,wCAAwC;AACjD,SAA+B,4BAA4B;AAK3D,YAAY,mBAAmB;AAU/B,MAAM,iBAAiB,CAA8C;AAAA,EACnE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKM;AACJ,QAAM,QAAQ,oBAAoB;AAAA,IAChC,SAAS,gBAAgB,cAAc,QAAQ;AAAA,IAC/C;AAAA,IAEA,YAAY,0BACV,qBAAqB,iBAAiB,EAAE,OAAO;AAAA,MAC7C,8BAA8B;AAAA,MAC9B,GAAI,aAAa,WAAW,IAAI,CAAC;AAAA,IACnC,CAAC;AAAA,IAEH,WAAW,yBAAuB,oBAAoB,EAAE,OAAO,UAAU,CAAC;AAAA,IAE1E,UAAU,eAAe;AAAA,MACvB,MAAM,GAAG,IAAI,MAAK,oBAAI,KAAK,GAAE,YAAY,CAAC;AAAA,MAC1C,iBAAiB;AAAA,QACf,gBAAgB;AAAA,QAChB,mBAAmB;AAAA,QACnB,mBAAmB;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,SAAO;AACT;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AACF,GAGG;AACD,SAAO,eAAe;AAAA,IACpB;AAAA,IACA,gBAAgB;AAAA,MACd,aAAa,YAAY,gBAAgB,WAAW;AAAA,IACtD;AAAA,IACA,WAAW,MAAM,IAAI,MAAM;AAAA,EAC7B,CAAC;AACH;AAYO,SAAS,+BACd,eACuC;AACvC,MAAI,wBAAkC,CAAC;AACvC,MAAI,cAA0C;AAC9C,MAAI,mBAAoC;AAExC,SAAO,iBAAiB,CAAC,EAAE,UAAU,SAAS,MAAM,UAAQ;AAC1D,WAAO,CAAC,WAAmB;AACzB,YAAM,QAAQ,SAAS;AAEvB,UAAI,cAAc,WAAW,MAAM;AACjC,YAAI,CAAC,MAAM,YAAY;AAIrB,gCAAsB,KAAK,MAAM;AAAA,QACnC;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAEA,UAAI,MAAM,YAAY;AACpB,gBAAQ,MAAM,6BAA6B;AAAA,UACzC,YAAY,MAAM;AAAA,UAClB,eAAe,cAAc;AAAA,UAC7B,aAAa,MAAM;AAAA,QACrB,CAAC;AAAA,MACH;AAGA,UAAI,oBAAoB,QAAQ,gBAAgB,cAAc,SAAS;AACrE,sBAAc,cAAc;AAE5B,cAAM,gBAAgB,EAAE,UAAU,SAAS;AAK3C,2BAAmB,QAAkB,GAAG,YAAY,IAAI,QAAM,GAAG,aAAa,CAAC,CAAC,EAAE,IAAI;AAAA,MACxF;AAGA,UAAI,sBAAsB,SAAS,GAAG;AACpC,cAAM,mBAAmB,CAAC,GAAG,qBAAqB;AAClD,gCAAwB,CAAC;AAMzB,mBAAW,kBAAkB,kBAAkB;AAC7C,2BAAiB,cAAc;AAAA,QACjC;AAAA,MACF;AAEA,aAAO,iBAAiB,MAAM;AAAA,IAChC;AAAA,EACF,CAAC;AACH;AAQA,SAAS,UAAwB,OAA4B;AAC3D,SAAO,UAAQ,CAAC,SAAS,oBAAqB;AAAA,IAC5C,GAAG,KAAK,SAAS,cAAc;AAAA,IAC/B,GAAG;AAAA,EACL;AACF;AAEO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,yBAAiD;AAAA,IACrD,SAAS;AAAA,EACX;AAEA,MAAI,WAAW;AACf,MAAI,mBAAwC;AAC5C,MAAI,wBAA8C;AAElD,QAAM,qBAAqB,YAA2B;AACpD,QAAI,oBAAoB,MAAM;AAC5B;AAAA,IACF;AAEA,QAAI,yBAAyB,MAAM;AACjC,YAAM;AACN;AAAA,IACF;AAEA,6BAAyB,YAAY;AAInC,YAAM,EAAE,gBAAgB,IAAI,MAAM,OAAO,qBAAqB;AAC9D,YAAM,EAAE,mBAAmB,kBAAkB,IAAI,MAAM,OAAO,oBAAoB;AAClF,YAAM,EAAE,0BAA0B,IAAI,MAAM,OAAO,yBAAyB;AAM5E,UAAI,uBAAuB,WAAW,MAAM;AAC1C;AAAA,MACF;AAEA,YAAM,eAAe,kBAAkB,CAAoB;AAE3D,YAAM,eAAe,IAAI,gBAAgB,EAAE,UAAU,CAAC;AACtD,6BAAuB,UAAU,0BAA0B,EAAE,aAAa,CAAC;AAE3E,YAAM,WAAW,MAAM;AACvB,YAAM,sBAAsB,SAAS,kBAAkB,YAAY,CAAC;AAEpE,yBAAmB,MAAM;AACvB,+BAAuB,UAAU;AACjC,4BAAoB;AAAA,MACtB;AAAA,IACF,GAAG;AAEH,QAAI;AACF,YAAM;AAAA,IACR,UAAE;AACA,8BAAwB;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,QAAQ,eAAe;AAAA,IAC3B;AAAA,IACA;AAAA,IAEA,YAAY,MAAM;AAAA,MAChB,iCAAiC,aAAa;AAAA,MAC9C,+BAA+B,sBAAsB;AAAA,IACvD;AAAA,IAEA,WAAW,MACT,IAAI;AAAA,MACF;AAAA,QACE,qBAAqB;AAAA,UACnB,UAAU,IAAI,SAA+B,MAAM,SAAS,GAAG,IAAI;AAAA,UACnE,UAAU,MAAa,MAAM,SAAS;AAAA,UACtC,WAAW,CAAC,aAA2B,MAAM,UAAU,QAAQ;AAAA,QACjE,CAAC;AAAA,MACH;AAAA,MAEA,UAA+B;AAAA,QAC7B;AAAA,QACA,4BAA4B,YAAY;AACtC,gBAAM,EAAE,WAAW,IAAI,MAAM,SAAS;AAEtC,cAAI,YAAY;AACd,gBAAI,WAAW,GAAG;AAChB,sBAAQ,MAAM,6BAA6B,EAAE,YAAY,SAAS,CAAC;AAAA,YACrE;AAEA,mBAAO,MAAM;AAAA,YAAC;AAAA,UAChB;AAEA,gBAAM,mBAAmB;AACzB,sBAAY;AAEZ,cAAI,aAAa;AACjB,iBAAO,MAAM;AACX,gBAAI,YAAY;AACd;AAAA,YACF;AAEA,yBAAa;AACb,wBAAY;AACZ,gBAAI,aAAa,KAAK,oBAAoB,MAAM;AAC9C,+BAAiB;AACjB,iCAAmB;AAAA,YACrB;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACJ,CAAC;AAED,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=unified-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/translations/index.ts"],"sourcesContent":["export { getTranslatableContent } from '../state/translations/get'\nexport { mergeTranslatedContent } from '../state/translations/merge'\nexport type { DescriptorsByComponentType, DescriptorsByProp } from '../state/modules/prop-controllers'\nexport type { ElementData, Data, Element } from '../state/read-only-state'\nexport type { TranslationDto } from '@makeswift/controls'\n"],"mappings":"AAAA,SAAS,8BAA8B;AACvC,SAAS,8BAA8B;","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
function createDeferred() {
|
|
2
|
+
let resolve = () => {
|
|
3
|
+
};
|
|
4
|
+
let reject = () => {
|
|
5
|
+
};
|
|
6
|
+
const promise = new Promise((resolveFn, rejectFn) => {
|
|
7
|
+
resolve = resolveFn;
|
|
8
|
+
reject = rejectFn;
|
|
9
|
+
});
|
|
10
|
+
return { promise, resolve, reject };
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
createDeferred
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=deferred.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/deferred.ts"],"sourcesContent":["export type Deferred<T> = {\n promise: Promise<T>\n resolve: (value: T) => void\n reject: (reason?: unknown) => void\n}\n\nexport function createDeferred<T>(): Deferred<T> {\n let resolve: (value: T) => void = () => {}\n let reject: (reason?: unknown) => void = () => {}\n\n const promise = new Promise<T>((resolveFn, rejectFn) => {\n resolve = resolveFn\n reject = rejectFn\n })\n\n return { promise, resolve, reject }\n}\n"],"mappings":"AAMO,SAAS,iBAAiC;AAC/C,MAAI,UAA8B,MAAM;AAAA,EAAC;AACzC,MAAI,SAAqC,MAAM;AAAA,EAAC;AAEhD,QAAM,UAAU,IAAI,QAAW,CAAC,WAAW,aAAa;AACtD,cAAU;AACV,aAAS;AAAA,EACX,CAAC;AAED,SAAO,EAAE,SAAS,SAAS,OAAO;AACpC;","names":[]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
const TTLCheck = {
|
|
2
|
+
ON_GET: 1 << 0,
|
|
3
|
+
ON_RETAIN: 1 << 1,
|
|
4
|
+
ON_RELEASE: 1 << 2
|
|
5
|
+
};
|
|
6
|
+
class RefCountedMap {
|
|
7
|
+
map = /* @__PURE__ */ new Map();
|
|
8
|
+
unownedEntryTtlMs;
|
|
9
|
+
ttlCheck;
|
|
10
|
+
static TTLCheck = TTLCheck;
|
|
11
|
+
constructor({
|
|
12
|
+
unownedEntryTtlMs,
|
|
13
|
+
ttlCheck = TTLCheck.ON_GET | TTLCheck.ON_RETAIN | TTLCheck.ON_RELEASE
|
|
14
|
+
}) {
|
|
15
|
+
this.unownedEntryTtlMs = unownedEntryTtlMs;
|
|
16
|
+
this.ttlCheck = ttlCheck;
|
|
17
|
+
}
|
|
18
|
+
get size() {
|
|
19
|
+
return this.map.size;
|
|
20
|
+
}
|
|
21
|
+
get(key) {
|
|
22
|
+
return this.map.get(key)?.value;
|
|
23
|
+
}
|
|
24
|
+
getOrCreate(key, init) {
|
|
25
|
+
try {
|
|
26
|
+
const existing = this.map.get(key);
|
|
27
|
+
if (existing) {
|
|
28
|
+
if (isUnowned(existing))
|
|
29
|
+
existing.accessedAt = Date.now();
|
|
30
|
+
return existing.value;
|
|
31
|
+
}
|
|
32
|
+
const value = init();
|
|
33
|
+
this.map.set(key, { value, count: void 0, accessedAt: Date.now() });
|
|
34
|
+
return value;
|
|
35
|
+
} finally {
|
|
36
|
+
if (this.ttlCheck & TTLCheck.ON_GET)
|
|
37
|
+
this.removeExpired();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Returns true on transition from unowned to owned
|
|
42
|
+
*/
|
|
43
|
+
retain(key, value) {
|
|
44
|
+
try {
|
|
45
|
+
const existing = this.map.get(key);
|
|
46
|
+
if (existing == null) {
|
|
47
|
+
this.map.set(key, { value, count: 1 });
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
if (existing.value === value) {
|
|
51
|
+
existing.count = (existing.count ?? 0) + 1;
|
|
52
|
+
return existing.count === 1;
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
} finally {
|
|
56
|
+
if (this.ttlCheck & TTLCheck.ON_RETAIN)
|
|
57
|
+
this.removeExpired();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Returns true on transition from owned to unowned
|
|
62
|
+
*/
|
|
63
|
+
release(key, value) {
|
|
64
|
+
try {
|
|
65
|
+
const existing = this.map.get(key);
|
|
66
|
+
if (existing == null)
|
|
67
|
+
return false;
|
|
68
|
+
if (isUnowned(existing))
|
|
69
|
+
return false;
|
|
70
|
+
if (existing.value !== value)
|
|
71
|
+
return false;
|
|
72
|
+
if (existing.count === 1) {
|
|
73
|
+
this.map.delete(key);
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
existing.count -= 1;
|
|
77
|
+
return false;
|
|
78
|
+
} finally {
|
|
79
|
+
if (this.ttlCheck & TTLCheck.ON_RELEASE)
|
|
80
|
+
this.removeExpired();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
removeExpired() {
|
|
84
|
+
const now = Date.now();
|
|
85
|
+
const isExpired = (entry) => isUnowned(entry) && now - entry.accessedAt > this.unownedEntryTtlMs;
|
|
86
|
+
this.map.forEach((entry, key) => {
|
|
87
|
+
if (isExpired(entry))
|
|
88
|
+
this.map.delete(key);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const isUnowned = (entry) => entry.count === void 0;
|
|
93
|
+
export {
|
|
94
|
+
RefCountedMap
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=ref-counted-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/ref-counted-map.ts"],"sourcesContent":["type RefCountedMapEntry<V> = {\n value: V\n count: number\n}\n\ntype UnownedMapEntry<V> = {\n value: V\n count: undefined\n accessedAt: number\n}\n\ntype MapEntry<V> = RefCountedMapEntry<V> | UnownedMapEntry<V>\n\nconst TTLCheck = {\n ON_GET: 1 << 0,\n ON_RETAIN: 1 << 1,\n ON_RELEASE: 1 << 2,\n} as const\n\n/**\n * Ref-counted map with explicit retention semantics. Entries are unowned by default and may be evicted after their\n * TTL unless explicitly retained. This provides TTL-based caching for unowned entries, while allowing consumers to\n * opt into stronger lifetime control via explicit retention.\n */\nexport class RefCountedMap<K, V> {\n private readonly map = new Map<K, MapEntry<V>>()\n private readonly unownedEntryTtlMs: number\n private readonly ttlCheck: number\n\n static readonly TTLCheck = TTLCheck\n\n constructor({\n unownedEntryTtlMs,\n ttlCheck = TTLCheck.ON_GET | TTLCheck.ON_RETAIN | TTLCheck.ON_RELEASE,\n }: {\n unownedEntryTtlMs: number\n ttlCheck?: number\n }) {\n this.unownedEntryTtlMs = unownedEntryTtlMs\n this.ttlCheck = ttlCheck\n }\n\n get size(): number {\n return this.map.size\n }\n\n get(key: K): V | undefined {\n return this.map.get(key)?.value\n }\n\n getOrCreate(key: K, init: () => V): V {\n try {\n const existing = this.map.get(key)\n\n if (existing) {\n if (isUnowned(existing)) existing.accessedAt = Date.now()\n return existing.value\n }\n\n const value = init()\n this.map.set(key, { value, count: undefined, accessedAt: Date.now() })\n return value\n } finally {\n if (this.ttlCheck & TTLCheck.ON_GET) this.removeExpired()\n }\n }\n\n /**\n * Returns true on transition from unowned to owned\n */\n retain(key: K, value: V): boolean {\n try {\n const existing = this.map.get(key)\n\n if (existing == null) {\n this.map.set(key, { value, count: 1 })\n return true\n }\n\n // `retain` might be called on a unowned entry that has already been evicted from the map due to TTL expiration\n // *and* possibly replaced by a new unowned entry with the same key; handle this gracefully\n if (existing.value === value) {\n existing.count = (existing.count ?? 0) + 1\n return existing.count === 1\n }\n\n return false\n } finally {\n if (this.ttlCheck & TTLCheck.ON_RETAIN) this.removeExpired()\n }\n }\n\n /**\n * Returns true on transition from owned to unowned\n */\n release(key: K, value: V): boolean {\n try {\n const existing = this.map.get(key)\n\n // `release` might be called on an entry that remained unowned due being superseded by a new entry with the same\n // key after TTL expiration of the original entry; handle this gracefully\n if (existing == null) return false\n if (isUnowned(existing)) return false\n if (existing.value !== value) return false\n\n if (existing.count === 1) {\n this.map.delete(key)\n return true\n }\n\n existing.count -= 1\n return false\n } finally {\n if (this.ttlCheck & TTLCheck.ON_RELEASE) this.removeExpired()\n }\n }\n\n private removeExpired(): void {\n const now = Date.now()\n const isExpired = (entry: MapEntry<V>): boolean =>\n isUnowned(entry) && now - entry.accessedAt > this.unownedEntryTtlMs\n\n this.map.forEach((entry, key) => {\n if (isExpired(entry)) this.map.delete(key)\n })\n }\n}\n\nconst isUnowned = <V>(entry: MapEntry<V>): entry is UnownedMapEntry<V> => entry.count === undefined\n"],"mappings":"AAaA,MAAM,WAAW;AAAA,EACf,QAAQ,KAAK;AAAA,EACb,WAAW,KAAK;AAAA,EAChB,YAAY,KAAK;AACnB;AAOO,MAAM,cAAoB;AAAA,EACd,MAAM,oBAAI,IAAoB;AAAA,EAC9B;AAAA,EACA;AAAA,EAEjB,OAAgB,WAAW;AAAA,EAE3B,YAAY;AAAA,IACV;AAAA,IACA,WAAW,SAAS,SAAS,SAAS,YAAY,SAAS;AAAA,EAC7D,GAGG;AACD,SAAK,oBAAoB;AACzB,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EAEA,IAAI,KAAuB;AACzB,WAAO,KAAK,IAAI,IAAI,GAAG,GAAG;AAAA,EAC5B;AAAA,EAEA,YAAY,KAAQ,MAAkB;AACpC,QAAI;AACF,YAAM,WAAW,KAAK,IAAI,IAAI,GAAG;AAEjC,UAAI,UAAU;AACZ,YAAI,UAAU,QAAQ;AAAG,mBAAS,aAAa,KAAK,IAAI;AACxD,eAAO,SAAS;AAAA,MAClB;AAEA,YAAM,QAAQ,KAAK;AACnB,WAAK,IAAI,IAAI,KAAK,EAAE,OAAO,OAAO,QAAW,YAAY,KAAK,IAAI,EAAE,CAAC;AACrE,aAAO;AAAA,IACT,UAAE;AACA,UAAI,KAAK,WAAW,SAAS;AAAQ,aAAK,cAAc;AAAA,IAC1D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,KAAQ,OAAmB;AAChC,QAAI;AACF,YAAM,WAAW,KAAK,IAAI,IAAI,GAAG;AAEjC,UAAI,YAAY,MAAM;AACpB,aAAK,IAAI,IAAI,KAAK,EAAE,OAAO,OAAO,EAAE,CAAC;AACrC,eAAO;AAAA,MACT;AAIA,UAAI,SAAS,UAAU,OAAO;AAC5B,iBAAS,SAAS,SAAS,SAAS,KAAK;AACzC,eAAO,SAAS,UAAU;AAAA,MAC5B;AAEA,aAAO;AAAA,IACT,UAAE;AACA,UAAI,KAAK,WAAW,SAAS;AAAW,aAAK,cAAc;AAAA,IAC7D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,KAAQ,OAAmB;AACjC,QAAI;AACF,YAAM,WAAW,KAAK,IAAI,IAAI,GAAG;AAIjC,UAAI,YAAY;AAAM,eAAO;AAC7B,UAAI,UAAU,QAAQ;AAAG,eAAO;AAChC,UAAI,SAAS,UAAU;AAAO,eAAO;AAErC,UAAI,SAAS,UAAU,GAAG;AACxB,aAAK,IAAI,OAAO,GAAG;AACnB,eAAO;AAAA,MACT;AAEA,eAAS,SAAS;AAClB,aAAO;AAAA,IACT,UAAE;AACA,UAAI,KAAK,WAAW,SAAS;AAAY,aAAK,cAAc;AAAA,IAC9D;AAAA,EACF;AAAA,EAEQ,gBAAsB;AAC5B,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,YAAY,CAAC,UACjB,UAAU,KAAK,KAAK,MAAM,MAAM,aAAa,KAAK;AAEpD,SAAK,IAAI,QAAQ,CAAC,OAAO,QAAQ;AAC/B,UAAI,UAAU,KAAK;AAAG,aAAK,IAAI,OAAO,GAAG;AAAA,IAC3C,CAAC;AAAA,EACH;AACF;AAEA,MAAM,YAAY,CAAI,UAAoD,MAAM,UAAU;","names":[]}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { type FetchableValue } from '@makeswift/controls';
|
|
2
|
+
import * as MakeswiftApiClient from '../state/makeswift-api-client';
|
|
3
|
+
import { APIResourceType, File, GlobalElement, LocalizedGlobalElement, Page, PagePathnameSlice, Site, Snippet, Swatch, Table, Typography } from './types';
|
|
4
|
+
import { GraphQLClient } from './graphql/client';
|
|
5
|
+
export type CacheData = MakeswiftApiClient.SerializedState;
|
|
6
|
+
export declare const CacheData: {
|
|
7
|
+
empty(): CacheData;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* NOTE(miguel): This "client" is used to fetch Makeswift API resources needed for the host. For
|
|
11
|
+
* example, swatches, files, typographies, etc. Ideally it's internal to the runtime and is only
|
|
12
|
+
* used by controls to transform API references to API resources.
|
|
13
|
+
*
|
|
14
|
+
* Moreover, its use should be reserved for the builder only, since for live pages all Makeswift
|
|
15
|
+
* API resources should be embedded in the "page snapshot". In the builder, this client serves the
|
|
16
|
+
* purpose of sending requests for API resources and keeping a cache so that changes that happen in
|
|
17
|
+
* the builder, like modifying a swatch, can be sent via `postMessage` to the host and the cache can
|
|
18
|
+
* immediately update the value and re-render.
|
|
19
|
+
*
|
|
20
|
+
* Furthermore, the API resources requested shouldn't be requested directly from the Makeswift API
|
|
21
|
+
* as that would require those resources to not be authenticated since the requests come from the
|
|
22
|
+
* browser when running the host. Instead, the requests should go to the host directly, at the
|
|
23
|
+
* Makeswift API endpoint (i.g., `/api/makeswift/[...makeswift]` dynamic route) where the host's
|
|
24
|
+
* API key can be used, securely, in the server. For this reason, this client should really be a
|
|
25
|
+
* client of the host's API, not Makeswift's, intended to build and continuously maintain a realtime
|
|
26
|
+
* snapshot for use in the builder, not the lives pages.
|
|
27
|
+
*/
|
|
28
|
+
export declare class MakeswiftHostApiClient {
|
|
29
|
+
graphqlClient: GraphQLClient;
|
|
30
|
+
makeswiftApiClient: MakeswiftApiClient.Store;
|
|
31
|
+
subscribe: MakeswiftApiClient.Store['subscribe'];
|
|
32
|
+
fetch: MakeswiftApiClient.HttpFetch;
|
|
33
|
+
constructor({ uri, fetch, preloadedState, }: {
|
|
34
|
+
uri: string;
|
|
35
|
+
fetch: MakeswiftApiClient.HttpFetch;
|
|
36
|
+
preloadedState: Partial<MakeswiftApiClient.State>;
|
|
37
|
+
});
|
|
38
|
+
readSwatch(swatchId: string): Swatch | null;
|
|
39
|
+
fetchSwatch(swatchId: string): Promise<Swatch | null>;
|
|
40
|
+
resolveSwatch(swatchId: string | undefined): FetchableValue<Swatch | null>;
|
|
41
|
+
readFile(fileId: string): File | null;
|
|
42
|
+
fetchFile(fileId: string): Promise<File | null>;
|
|
43
|
+
resolveFile(fileId: string | undefined): FetchableValue<File | null>;
|
|
44
|
+
readTypography(typographyId: string): Typography | null;
|
|
45
|
+
fetchTypography(typographyId: string): Promise<Typography | null>;
|
|
46
|
+
resolveTypography(typographyId: string | undefined): FetchableValue<Typography | null>;
|
|
47
|
+
readGlobalElement(globalElementId: string): GlobalElement | null;
|
|
48
|
+
fetchGlobalElement(globalElementId: string): Promise<GlobalElement | null>;
|
|
49
|
+
readLocalizedGlobalElement({ globalElementId, locale, }: {
|
|
50
|
+
globalElementId: string;
|
|
51
|
+
locale: string;
|
|
52
|
+
}): LocalizedGlobalElement | null;
|
|
53
|
+
fetchLocalizedGlobalElement({ globalElementId, locale, }: {
|
|
54
|
+
globalElementId: string;
|
|
55
|
+
locale: string;
|
|
56
|
+
}): Promise<LocalizedGlobalElement | null>;
|
|
57
|
+
readPagePathnameSlice({ pageId, locale, }: {
|
|
58
|
+
pageId: string;
|
|
59
|
+
locale: string | null;
|
|
60
|
+
}): PagePathnameSlice | null;
|
|
61
|
+
fetchPagePathnameSlice({ pageId, locale, }: {
|
|
62
|
+
pageId: string;
|
|
63
|
+
locale: string | null;
|
|
64
|
+
}): Promise<PagePathnameSlice | null>;
|
|
65
|
+
resolvePagePathnameSlice({ pageId, locale, }: {
|
|
66
|
+
pageId: string | undefined;
|
|
67
|
+
locale: string | null;
|
|
68
|
+
}): FetchableValue<PagePathnameSlice | null>;
|
|
69
|
+
resolveResource<R>(type: APIResourceType, { id, read, fetch, }: {
|
|
70
|
+
id: string | undefined;
|
|
71
|
+
read: (id: string) => R | null;
|
|
72
|
+
fetch: (id: string) => Promise<R | null>;
|
|
73
|
+
}): FetchableValue<R | null>;
|
|
74
|
+
readTable(tableId: string): Table | null;
|
|
75
|
+
fetchTable(tableId: string): Promise<Table | null>;
|
|
76
|
+
createTableRecord(tableId: string, columns: any): Promise<void>;
|
|
77
|
+
readSite(siteId: string): Site | null;
|
|
78
|
+
readPage(pageId: string): Page | null;
|
|
79
|
+
readSnippet(snippetId: string): Snippet | null;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/api/client.ts"],"names":[],"mappings":"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"}
|