@makeswift/runtime 0.27.1 → 0.27.3
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/api-resources-client.js +160 -0
- package/dist/cjs/api/api-resources-client.js.map +1 -0
- package/dist/cjs/api/react.js +256 -0
- package/dist/cjs/api/react.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/box-model.js +33 -0
- package/dist/cjs/box-model.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/components/builtin/index.js +84 -0
- package/dist/cjs/components/builtin/index.js.map +1 -0
- package/dist/cjs/components/index.js +25 -0
- package/dist/cjs/components/index.js.map +1 -0
- package/dist/cjs/controls/rich-text-v2/translation.js +187 -0
- package/dist/cjs/controls/rich-text-v2/translation.js.map +1 -0
- 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/core/index.js +57 -0
- package/dist/cjs/core/index.js.map +1 -0
- package/dist/cjs/next/api-handler/config/app-router.js +10 -1
- package/dist/cjs/next/api-handler/config/app-router.js.map +1 -1
- 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/prop-controllers/index.js +48 -0
- package/dist/cjs/prop-controllers/index.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/react.js +40 -0
- package/dist/cjs/react.js.map +1 -0
- package/dist/cjs/runtimes/react/components/LiveProvider.js +50 -0
- package/dist/cjs/runtimes/react/components/LiveProvider.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/components/PreviewProvider.js +57 -0
- package/dist/cjs/runtimes/react/components/PreviewProvider.js.map +1 -0
- package/dist/cjs/runtimes/react/components/hooks/use-builder-connection-ping.js +67 -0
- package/dist/cjs/runtimes/react/components/hooks/use-builder-connection-ping.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-preview.js +33 -0
- package/dist/cjs/runtimes/react/hooks/use-is-preview.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/resource-resolver.js +52 -0
- package/dist/cjs/runtimes/react/resource-resolver.js.map +1 -0
- package/dist/cjs/state/actions/internal.js +205 -0
- package/dist/cjs/state/actions/internal.js.map +1 -0
- package/dist/cjs/state/actions.js +423 -0
- package/dist/cjs/state/actions.js.map +1 -0
- package/dist/cjs/state/api-client/client-store.js +81 -0
- package/dist/cjs/state/api-client/client-store.js.map +1 -0
- package/dist/cjs/state/api-client/fetch-api-resource.js +125 -0
- package/dist/cjs/state/api-client/fetch-api-resource.js.map +1 -0
- package/dist/cjs/state/api-client/state.js +89 -0
- package/dist/cjs/state/api-client/state.js.map +1 -0
- package/dist/cjs/state/api-client/store.js +36 -0
- package/dist/cjs/state/api-client/store.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/mixins/breakpoint-watch.js +72 -0
- package/dist/cjs/state/mixins/breakpoint-watch.js.map +1 -0
- package/dist/cjs/state/mixins/setup-teardown.js +35 -0
- package/dist/cjs/state/mixins/setup-teardown.js.map +1 -0
- package/dist/cjs/state/modules/box-models.js +127 -0
- package/dist/cjs/state/modules/box-models.js.map +1 -0
- package/dist/cjs/state/modules/element-imperative-handles.js +60 -0
- package/dist/cjs/state/modules/element-imperative-handles.js.map +1 -0
- package/dist/cjs/state/modules/is-preview.js +47 -0
- package/dist/cjs/state/modules/is-preview.js.map +1 -0
- package/dist/cjs/state/modules/pointer.js +47 -0
- package/dist/cjs/state/modules/pointer.js.map +1 -0
- package/dist/cjs/state/modules/read-write-documents.js +98 -0
- package/dist/cjs/state/modules/read-write-documents.js.map +1 -0
- package/dist/cjs/state/react-builder-preview.js +610 -0
- package/dist/cjs/state/react-builder-preview.js.map +1 -0
- package/dist/cjs/state/react-page.js +355 -0
- package/dist/cjs/state/react-page.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/api-resources-client.js +127 -0
- package/dist/esm/api/api-resources-client.js.map +1 -0
- package/dist/esm/api/react.js +223 -0
- package/dist/esm/api/react.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/box-model.js +7 -0
- package/dist/esm/box-model.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/components/builtin/index.js +34 -0
- package/dist/esm/components/builtin/index.js.map +1 -0
- package/dist/esm/components/index.js +3 -0
- package/dist/esm/components/index.js.map +1 -0
- package/dist/esm/controls/rich-text-v2/translation.js +152 -0
- package/dist/esm/controls/rich-text-v2/translation.js.map +1 -0
- 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/core/index.js +35 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/next/api-handler/config/app-router.js +10 -1
- package/dist/esm/next/api-handler/config/app-router.js.map +1 -1
- 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/prop-controllers/index.js +11 -0
- package/dist/esm/prop-controllers/index.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/react.js +11 -0
- package/dist/esm/react.js.map +1 -0
- package/dist/esm/runtimes/react/components/LiveProvider.js +20 -0
- package/dist/esm/runtimes/react/components/LiveProvider.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/components/PreviewProvider.js +27 -0
- package/dist/esm/runtimes/react/components/PreviewProvider.js.map +1 -0
- package/dist/esm/runtimes/react/components/hooks/use-builder-connection-ping.js +43 -0
- package/dist/esm/runtimes/react/components/hooks/use-builder-connection-ping.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-preview.js +9 -0
- package/dist/esm/runtimes/react/hooks/use-is-preview.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/resource-resolver.js +28 -0
- package/dist/esm/runtimes/react/resource-resolver.js.map +1 -0
- package/dist/esm/state/actions/internal.js +162 -0
- package/dist/esm/state/actions/internal.js.map +1 -0
- package/dist/esm/state/actions.js +349 -0
- package/dist/esm/state/actions.js.map +1 -0
- package/dist/esm/state/api-client/client-store.js +49 -0
- package/dist/esm/state/api-client/client-store.js.map +1 -0
- package/dist/esm/state/api-client/fetch-api-resource.js +93 -0
- package/dist/esm/state/api-client/fetch-api-resource.js.map +1 -0
- package/dist/esm/state/api-client/state.js +52 -0
- package/dist/esm/state/api-client/state.js.map +1 -0
- package/dist/esm/state/api-client/store.js +12 -0
- package/dist/esm/state/api-client/store.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/mixins/breakpoint-watch.js +48 -0
- package/dist/esm/state/mixins/breakpoint-watch.js.map +1 -0
- package/dist/esm/state/mixins/setup-teardown.js +11 -0
- package/dist/esm/state/mixins/setup-teardown.js.map +1 -0
- package/dist/esm/state/modules/box-models.js +98 -0
- package/dist/esm/state/modules/box-models.js.map +1 -0
- package/dist/esm/state/modules/element-imperative-handles.js +35 -0
- package/dist/esm/state/modules/element-imperative-handles.js.map +1 -0
- package/dist/esm/state/modules/is-preview.js +21 -0
- package/dist/esm/state/modules/is-preview.js.map +1 -0
- package/dist/esm/state/modules/pointer.js +22 -0
- package/dist/esm/state/modules/pointer.js.map +1 -0
- package/dist/esm/state/modules/read-write-documents.js +60 -0
- package/dist/esm/state/modules/read-write-documents.js.map +1 -0
- package/dist/esm/state/react-builder-preview.js +590 -0
- package/dist/esm/state/react-builder-preview.js.map +1 -0
- package/dist/esm/state/react-page.js +319 -0
- package/dist/esm/state/react-page.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/api-resources-client.d.ts +57 -0
- package/dist/types/api/api-resources-client.d.ts.map +1 -0
- package/dist/types/api/react.d.ts +82 -0
- package/dist/types/api/react.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/box-model.d.ts +3 -0
- package/dist/types/box-model.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.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/builtin/index.d.ts +17 -0
- package/dist/types/components/builtin/index.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/components/index.d.ts +3 -0
- package/dist/types/components/index.d.ts.map +1 -0
- package/dist/types/controls/rich-text-v2/translation.d.ts +6 -0
- package/dist/types/controls/rich-text-v2/translation.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/core/index.d.ts +2 -0
- package/dist/types/core/index.d.ts.map +1 -0
- package/dist/types/next/api-handler/config/app-router.d.ts.map +1 -1
- 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/components/tests/makeswift-component-rendering.test.d.ts +3 -0
- package/dist/types/next/components/tests/makeswift-component-rendering.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/prop-controllers/index.d.ts +8 -0
- package/dist/types/prop-controllers/index.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/react.d.ts +4 -0
- package/dist/types/react.d.ts.map +1 -0
- package/dist/types/runtimes/react/components/LiveProvider.d.ts +3 -0
- package/dist/types/runtimes/react/components/LiveProvider.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/components/PreviewProvider.d.ts +3 -0
- package/dist/types/runtimes/react/components/PreviewProvider.d.ts.map +1 -0
- package/dist/types/runtimes/react/components/hooks/use-builder-connection-ping.d.ts +4 -0
- package/dist/types/runtimes/react/components/hooks/use-builder-connection-ping.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-preview.d.ts +2 -0
- package/dist/types/runtimes/react/hooks/use-is-preview.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/resource-resolver.d.ts +10 -0
- package/dist/types/runtimes/react/resource-resolver.d.ts.map +1 -0
- package/dist/types/state/__tests__/react-page.test.d.ts +2 -0
- package/dist/types/state/__tests__/react-page.test.d.ts.map +1 -0
- package/dist/types/state/actions/internal.d.ts +181 -0
- package/dist/types/state/actions/internal.d.ts.map +1 -0
- package/dist/types/state/actions.d.ts +461 -0
- package/dist/types/state/actions.d.ts.map +1 -0
- package/dist/types/state/api-client/client-store.d.ts +6 -0
- package/dist/types/state/api-client/client-store.d.ts.map +1 -0
- package/dist/types/state/api-client/fetch-api-resource.d.ts +11 -0
- package/dist/types/state/api-client/fetch-api-resource.d.ts.map +1 -0
- package/dist/types/state/api-client/state.d.ts +30 -0
- package/dist/types/state/api-client/state.d.ts.map +1 -0
- package/dist/types/state/api-client/store.d.ts +18 -0
- package/dist/types/state/api-client/store.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/mixins/breakpoint-watch.d.ts +11 -0
- package/dist/types/state/mixins/breakpoint-watch.d.ts.map +1 -0
- package/dist/types/state/mixins/setup-teardown.d.ts +7 -0
- package/dist/types/state/mixins/setup-teardown.d.ts.map +1 -0
- package/dist/types/state/modules/box-models.d.ts +23 -0
- package/dist/types/state/modules/box-models.d.ts.map +1 -0
- package/dist/types/state/modules/element-imperative-handles.d.ts +7 -0
- package/dist/types/state/modules/element-imperative-handles.d.ts.map +1 -0
- package/dist/types/state/modules/is-preview.d.ts +6 -0
- package/dist/types/state/modules/is-preview.d.ts.map +1 -0
- package/dist/types/state/modules/pointer.d.ts +12 -0
- package/dist/types/state/modules/pointer.d.ts.map +1 -0
- package/dist/types/state/modules/read-write-documents.d.ts +14 -0
- package/dist/types/state/modules/read-write-documents.d.ts.map +1 -0
- package/dist/types/state/react-builder-preview.d.ts +110 -0
- package/dist/types/state/react-builder-preview.d.ts.map +1 -0
- package/dist/types/state/react-page.d.ts +149 -0
- package/dist/types/state/react-page.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/ref-counted-map.d.ts +32 -0
- package/dist/types/utils/ref-counted-map.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import escapeHtml from "escape-html";
|
|
2
|
+
import { Editor, Node, Text, Transforms, createEditor } from "slate";
|
|
3
|
+
import { jsx } from "slate-hyperscript";
|
|
4
|
+
import { parseFragment } from "parse5";
|
|
5
|
+
import { Slate } from "@makeswift/controls";
|
|
6
|
+
import { BlockType, InlineType } from "../../slate/types";
|
|
7
|
+
function createEditorWithPlugins(plugins) {
|
|
8
|
+
return plugins.reduceRight(
|
|
9
|
+
(editor, plugin) => plugin?.withPlugin?.(editor) ?? editor,
|
|
10
|
+
createEditor()
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
function pathToString(path) {
|
|
14
|
+
return path.join(":");
|
|
15
|
+
}
|
|
16
|
+
function stringToPath(s) {
|
|
17
|
+
return s.split(":").map((a) => parseInt(a));
|
|
18
|
+
}
|
|
19
|
+
function getDescendantTranslatableData(descendant, path) {
|
|
20
|
+
if (Text.isText(descendant)) {
|
|
21
|
+
return {};
|
|
22
|
+
}
|
|
23
|
+
if (Slate.isList(descendant) || Slate.isListItem(descendant)) {
|
|
24
|
+
return descendant.children.reduce(
|
|
25
|
+
(acc, d, j) => ({ ...acc, ...getDescendantTranslatableData(d, [...path, j]) }),
|
|
26
|
+
{}
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
const text = getInlineOrTextTranslatableData(descendant);
|
|
30
|
+
if (text == null)
|
|
31
|
+
return {};
|
|
32
|
+
return { [pathToString(path)]: text };
|
|
33
|
+
}
|
|
34
|
+
function getInlineOrTextTranslatableData(descendant, path = []) {
|
|
35
|
+
if (Text.isText(descendant)) {
|
|
36
|
+
let string = escapeHtml(descendant.text);
|
|
37
|
+
if (string === "")
|
|
38
|
+
return null;
|
|
39
|
+
if (descendant.typography === void 0)
|
|
40
|
+
return string;
|
|
41
|
+
return `<span key="${pathToString(path)}">${string}</span>`;
|
|
42
|
+
}
|
|
43
|
+
const children = descendant.children.map((child, i) => getInlineOrTextTranslatableData(child, [...path, i])).join("");
|
|
44
|
+
if (children === "")
|
|
45
|
+
return null;
|
|
46
|
+
switch (descendant.type) {
|
|
47
|
+
case InlineType.Link:
|
|
48
|
+
return `<a key="${pathToString(path)}">${children}</a>`;
|
|
49
|
+
case InlineType.SuperScript:
|
|
50
|
+
return `<sup key="${pathToString(path)}">${children}</sup>`;
|
|
51
|
+
case InlineType.SubScript:
|
|
52
|
+
return `<sub key="${pathToString(path)}">${children}</sub>`;
|
|
53
|
+
case InlineType.Code:
|
|
54
|
+
return `<code key="${pathToString(path)}">${children}</code>`;
|
|
55
|
+
default:
|
|
56
|
+
return children;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function getTranslatableData(nodes, plugins) {
|
|
60
|
+
const editor = createEditorWithPlugins(plugins);
|
|
61
|
+
editor.children = nodes;
|
|
62
|
+
editor.typographyNormalizationDirection = "up";
|
|
63
|
+
Editor.normalize(editor, { force: true });
|
|
64
|
+
return editor.children.reduce(
|
|
65
|
+
(acc, descendant, i) => ({
|
|
66
|
+
...acc,
|
|
67
|
+
...getDescendantTranslatableData(descendant, [i])
|
|
68
|
+
}),
|
|
69
|
+
{}
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
function deserializeTranslationHtmlString(el, translationKey) {
|
|
73
|
+
if (el.nodeName === "#document-fragment") {
|
|
74
|
+
const children = Array.from(el.childNodes).map((element) => deserializeTranslationHtmlString(element)).flat();
|
|
75
|
+
if (children.length === 0) {
|
|
76
|
+
children.push(jsx("text", {}, ""));
|
|
77
|
+
}
|
|
78
|
+
return children;
|
|
79
|
+
}
|
|
80
|
+
if (el.nodeName === "#text" && "value" in el) {
|
|
81
|
+
return [jsx("text", { translationKey: translationKey ?? void 0 }, el.value)];
|
|
82
|
+
}
|
|
83
|
+
if ("namespaceURI" in el) {
|
|
84
|
+
const translationKey2 = el.attrs.find((a) => a.name === "key")?.value ?? void 0;
|
|
85
|
+
const children = Array.from(el.childNodes).map((element) => deserializeTranslationHtmlString(element, translationKey2)).flat();
|
|
86
|
+
if (children.length === 0) {
|
|
87
|
+
children.push(jsx("text", {}, ""));
|
|
88
|
+
}
|
|
89
|
+
switch (el.nodeName) {
|
|
90
|
+
case "code":
|
|
91
|
+
return [jsx("element", { type: InlineType.Code, translationKey: translationKey2 }, children)];
|
|
92
|
+
case "sub":
|
|
93
|
+
return [jsx("element", { type: InlineType.SubScript, translationKey: translationKey2 }, children)];
|
|
94
|
+
case "sup":
|
|
95
|
+
return [jsx("element", { type: InlineType.SuperScript, translationKey: translationKey2 }, children)];
|
|
96
|
+
case "a":
|
|
97
|
+
return [jsx("element", { type: InlineType.Link, translationKey: translationKey2 }, children)];
|
|
98
|
+
default:
|
|
99
|
+
return children;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
104
|
+
function mergeTranslatedNodes(nodes, translatedData, plugins) {
|
|
105
|
+
const sourceEditor = createEditorWithPlugins(plugins);
|
|
106
|
+
const targetEditor = createEditorWithPlugins(plugins);
|
|
107
|
+
sourceEditor.children = nodes;
|
|
108
|
+
sourceEditor.typographyNormalizationDirection = "up";
|
|
109
|
+
Editor.normalize(sourceEditor, { force: true });
|
|
110
|
+
Object.entries(translatedData).reverse().forEach(([blockStringPath, htmlString]) => {
|
|
111
|
+
const blockPath = stringToPath(blockStringPath);
|
|
112
|
+
if (blockPath.length === 0)
|
|
113
|
+
return;
|
|
114
|
+
const html = parseFragment(htmlString);
|
|
115
|
+
const inlineDescendants = deserializeTranslationHtmlString(html);
|
|
116
|
+
targetEditor.children = [{ type: BlockType.Default, children: inlineDescendants }];
|
|
117
|
+
targetEditor.typographyNormalizationDirection = "neutral";
|
|
118
|
+
Editor.normalize(targetEditor, { force: true });
|
|
119
|
+
for (const [descendant, absolutePathToTargetNode] of Node.descendants(targetEditor)) {
|
|
120
|
+
if (!Text.isText(descendant) && !Slate.isInline(descendant) || descendant.translationKey == null || descendant.translationKey === "") {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
const relativePathToSourceNode = stringToPath(descendant.translationKey);
|
|
124
|
+
const absolutePathToSourceNode = [...blockPath, ...relativePathToSourceNode];
|
|
125
|
+
const [sourceNode] = Editor.node(sourceEditor, absolutePathToSourceNode);
|
|
126
|
+
if (Text.isText(sourceNode) && Text.isText(descendant)) {
|
|
127
|
+
const { translationKey, text, ...rest } = sourceNode;
|
|
128
|
+
Transforms.setNodes(targetEditor, rest, { at: absolutePathToTargetNode });
|
|
129
|
+
Transforms.unsetNodes(targetEditor, "translationKey", { at: absolutePathToTargetNode });
|
|
130
|
+
} else if (Slate.isInline(sourceNode) && Slate.isInline(descendant)) {
|
|
131
|
+
const { translationKey, children, ...rest } = sourceNode;
|
|
132
|
+
Transforms.setNodes(targetEditor, rest, { at: absolutePathToTargetNode });
|
|
133
|
+
Transforms.unsetNodes(targetEditor, "translationKey", { at: absolutePathToTargetNode });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const translatedChildren = targetEditor.children.at(0)?.children;
|
|
137
|
+
Editor.withoutNormalizing(sourceEditor, () => {
|
|
138
|
+
Array.from(Node.children(sourceEditor, blockPath)).reverse().forEach(([_, path]) => {
|
|
139
|
+
Transforms.removeNodes(sourceEditor, { at: path });
|
|
140
|
+
});
|
|
141
|
+
Transforms.insertNodes(sourceEditor, translatedChildren, { at: [...blockPath, 0] });
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
sourceEditor.typographyNormalizationDirection = "down";
|
|
145
|
+
Editor.normalize(sourceEditor, { force: true });
|
|
146
|
+
return sourceEditor.children;
|
|
147
|
+
}
|
|
148
|
+
export {
|
|
149
|
+
getTranslatableData,
|
|
150
|
+
mergeTranslatedNodes
|
|
151
|
+
};
|
|
152
|
+
//# sourceMappingURL=translation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/controls/rich-text-v2/translation.ts"],"sourcesContent":["import escapeHtml from 'escape-html'\nimport { Descendant, Editor, Element, Node, Text, Transforms, createEditor } from 'slate'\nimport { jsx } from 'slate-hyperscript'\nimport { parseFragment } from 'parse5'\nimport { ChildNode, DocumentFragment } from 'parse5/dist/tree-adapters/default'\n\nimport { type TranslationDto, Slate } from '@makeswift/controls'\n\nimport { RichTextV2Plugin } from './plugin'\nimport { type MakeswiftEditor, BlockType, InlineType } from '../../slate/types'\n\nfunction createEditorWithPlugins(plugins: RichTextV2Plugin[]): MakeswiftEditor {\n return plugins.reduceRight(\n (editor, plugin) => plugin?.withPlugin?.(editor) ?? editor,\n createEditor(),\n )\n}\n\nfunction pathToString(path: number[]): string {\n return path.join(':')\n}\n\nfunction stringToPath(s: string): number[] {\n return s.split(':').map(a => parseInt(a))\n}\n\nfunction getDescendantTranslatableData(descendant: Descendant, path: number[]): TranslationDto {\n if (Text.isText(descendant)) {\n return {}\n }\n\n if (Slate.isList(descendant) || Slate.isListItem(descendant)) {\n return descendant.children.reduce(\n (acc, d, j) => ({ ...acc, ...getDescendantTranslatableData(d, [...path, j]) }),\n {},\n )\n }\n\n const text = getInlineOrTextTranslatableData(descendant)\n if (text == null) return {}\n\n return { [pathToString(path)]: text }\n}\n\nfunction getInlineOrTextTranslatableData(\n descendant: Descendant,\n path: number[] = [],\n): string | null {\n if (Text.isText(descendant)) {\n let string = escapeHtml(descendant.text)\n\n if (string === '') return null\n\n if (descendant.typography === undefined) return string\n\n return `<span key=\"${pathToString(path)}\">${string}</span>`\n }\n\n const children = descendant.children\n .map((child: Descendant, i: number) => getInlineOrTextTranslatableData(child, [...path, i]))\n .join('')\n\n if (children === '') return null\n\n switch (descendant.type) {\n case InlineType.Link:\n return `<a key=\"${pathToString(path)}\">${children}</a>`\n\n case InlineType.SuperScript:\n return `<sup key=\"${pathToString(path)}\">${children}</sup>`\n\n case InlineType.SubScript:\n return `<sub key=\"${pathToString(path)}\">${children}</sub>`\n\n case InlineType.Code:\n return `<code key=\"${pathToString(path)}\">${children}</code>`\n\n default:\n return children\n }\n}\n\nexport type RichTextTranslationDto = Record<string, string>\n\nexport function getTranslatableData(\n nodes: Slate.Descendant[],\n plugins: RichTextV2Plugin[],\n): RichTextTranslationDto {\n const editor = createEditorWithPlugins(plugins)\n\n editor.children = nodes\n editor.typographyNormalizationDirection = 'up'\n Editor.normalize(editor, { force: true })\n\n return editor.children.reduce(\n (acc, descendant: Descendant, i) => ({\n ...acc,\n ...getDescendantTranslatableData(descendant, [i]),\n }),\n {},\n )\n}\n\nfunction deserializeTranslationHtmlString(\n el: ChildNode | DocumentFragment,\n translationKey?: string,\n): Descendant[] {\n if (el.nodeName === '#document-fragment') {\n const children = Array.from(el.childNodes)\n .map(element => deserializeTranslationHtmlString(element))\n .flat()\n\n if (children.length === 0) {\n children.push(jsx('text', {}, ''))\n }\n\n return children\n }\n\n if (el.nodeName === '#text' && 'value' in el) {\n return [jsx('text', { translationKey: translationKey ?? undefined }, el.value)]\n }\n\n if ('namespaceURI' in el) {\n const translationKey = el.attrs.find(a => a.name === 'key')?.value ?? undefined\n const children = Array.from(el.childNodes)\n .map(element => deserializeTranslationHtmlString(element, translationKey))\n .flat()\n\n if (children.length === 0) {\n children.push(jsx('text', {}, ''))\n }\n\n switch (el.nodeName) {\n case 'code':\n return [jsx('element', { type: InlineType.Code, translationKey }, children)]\n\n case 'sub':\n return [jsx('element', { type: InlineType.SubScript, translationKey }, children)]\n\n case 'sup':\n return [jsx('element', { type: InlineType.SuperScript, translationKey }, children)]\n\n case 'a':\n return [jsx('element', { type: InlineType.Link, translationKey }, children)]\n\n default:\n return children\n }\n }\n\n return []\n}\n\nexport function mergeTranslatedNodes(\n nodes: Slate.Descendant[],\n translatedData: RichTextTranslationDto,\n plugins: RichTextV2Plugin[],\n): Slate.Descendant[] {\n const sourceEditor = createEditorWithPlugins(plugins)\n const targetEditor = createEditorWithPlugins(plugins)\n\n sourceEditor.children = nodes\n sourceEditor.typographyNormalizationDirection = 'up'\n Editor.normalize(sourceEditor, { force: true })\n\n Object.entries(translatedData)\n .reverse()\n .forEach(([blockStringPath, htmlString]) => {\n const blockPath = stringToPath(blockStringPath)\n if (blockPath.length === 0) return\n\n const html = parseFragment(htmlString)\n const inlineDescendants = deserializeTranslationHtmlString(html)\n\n targetEditor.children = [{ type: BlockType.Default, children: inlineDescendants }]\n\n targetEditor.typographyNormalizationDirection = 'neutral'\n Editor.normalize(targetEditor, { force: true })\n\n for (const [descendant, absolutePathToTargetNode] of Node.descendants(targetEditor)) {\n if (\n (!Text.isText(descendant) && !Slate.isInline(descendant)) ||\n descendant.translationKey == null ||\n descendant.translationKey === ''\n ) {\n continue\n }\n\n const relativePathToSourceNode = stringToPath(descendant.translationKey)\n\n const absolutePathToSourceNode = [...blockPath, ...relativePathToSourceNode]\n\n const [sourceNode] = Editor.node(sourceEditor, absolutePathToSourceNode)\n\n if (Text.isText(sourceNode) && Text.isText(descendant)) {\n const { translationKey, text, ...rest } = sourceNode\n Transforms.setNodes(targetEditor, rest, { at: absolutePathToTargetNode })\n Transforms.unsetNodes(targetEditor, 'translationKey', { at: absolutePathToTargetNode })\n } else if (Slate.isInline(sourceNode) && Slate.isInline(descendant)) {\n const { translationKey, children, ...rest } = sourceNode\n Transforms.setNodes(targetEditor, rest, { at: absolutePathToTargetNode })\n Transforms.unsetNodes(targetEditor, 'translationKey', { at: absolutePathToTargetNode })\n }\n }\n const translatedChildren = (targetEditor.children.at(0) as Element)?.children\n\n Editor.withoutNormalizing(sourceEditor, () => {\n Array.from(Node.children(sourceEditor, blockPath))\n .reverse()\n .forEach(([_, path]) => {\n Transforms.removeNodes(sourceEditor, { at: path })\n })\n\n Transforms.insertNodes(sourceEditor, translatedChildren, { at: [...blockPath, 0] })\n })\n })\n\n sourceEditor.typographyNormalizationDirection = 'down'\n Editor.normalize(sourceEditor, { force: true })\n\n return sourceEditor.children\n}\n"],"mappings":"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","names":["translationKey"]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ShapeV2Definition,
|
|
3
|
+
deserializeRecord
|
|
4
|
+
} from "@makeswift/controls";
|
|
5
|
+
import {
|
|
6
|
+
CheckboxDefinition,
|
|
7
|
+
CodeDefinition,
|
|
8
|
+
ColorDefinition,
|
|
9
|
+
ComboboxDefinition,
|
|
10
|
+
FontDefinition,
|
|
11
|
+
GroupDefinition,
|
|
12
|
+
IconRadioGroupDefinition,
|
|
13
|
+
ImageDefinition,
|
|
14
|
+
LinkDefinition,
|
|
15
|
+
ListDefinition,
|
|
16
|
+
NumberDefinition,
|
|
17
|
+
RichTextV1Definition,
|
|
18
|
+
RichTextV2Definition,
|
|
19
|
+
SelectDefinition,
|
|
20
|
+
ShapeDefinition,
|
|
21
|
+
SliderDefinition,
|
|
22
|
+
SlotDefinition,
|
|
23
|
+
StyleDefinition,
|
|
24
|
+
StyleV2Definition,
|
|
25
|
+
TextAreaDefinition,
|
|
26
|
+
TextInputDefinition,
|
|
27
|
+
unstable_TypographyDefinition
|
|
28
|
+
} from "../../index";
|
|
29
|
+
function serializeControls(controls, visitor) {
|
|
30
|
+
return Object.entries(controls).reduce(
|
|
31
|
+
(acc, [key, control]) => {
|
|
32
|
+
return { ...acc, [key]: control.accept(visitor) };
|
|
33
|
+
},
|
|
34
|
+
{}
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
function deserializeControl(serializedControl, options) {
|
|
38
|
+
const plugins = options?.plugins ?? [];
|
|
39
|
+
return deserializeUnifiedControlDef(deserializeRecord(serializedControl, plugins));
|
|
40
|
+
}
|
|
41
|
+
function deserializeUnifiedControlDef(record) {
|
|
42
|
+
const deserializeMethod = {
|
|
43
|
+
[CheckboxDefinition.type]: CheckboxDefinition.deserialize,
|
|
44
|
+
[CodeDefinition.type]: CodeDefinition.deserialize,
|
|
45
|
+
[ColorDefinition.type]: ColorDefinition.deserialize,
|
|
46
|
+
[ComboboxDefinition.type]: ComboboxDefinition.deserialize,
|
|
47
|
+
[FontDefinition.type]: FontDefinition.deserialize,
|
|
48
|
+
[GroupDefinition.type]: (record2) => GroupDefinition.deserialize(record2, deserializeUnifiedControlDef),
|
|
49
|
+
[IconRadioGroupDefinition.type]: IconRadioGroupDefinition.deserialize,
|
|
50
|
+
[ImageDefinition.type]: ImageDefinition.deserialize,
|
|
51
|
+
[LinkDefinition.type]: LinkDefinition.deserialize,
|
|
52
|
+
[ListDefinition.type]: (record2) => ListDefinition.deserialize(record2, deserializeUnifiedControlDef),
|
|
53
|
+
[NumberDefinition.type]: NumberDefinition.deserialize,
|
|
54
|
+
[RichTextV1Definition.type]: RichTextV1Definition.deserialize,
|
|
55
|
+
[RichTextV2Definition.type]: (record2) => RichTextV2Definition.deserialize(record2, deserializeUnifiedControlDef),
|
|
56
|
+
[SelectDefinition.type]: SelectDefinition.deserialize,
|
|
57
|
+
[ShapeDefinition.type]: (record2) => ShapeDefinition.deserialize(record2, deserializeUnifiedControlDef),
|
|
58
|
+
[SliderDefinition.type]: SliderDefinition.deserialize,
|
|
59
|
+
[ShapeV2Definition.type]: (record2) => ShapeV2Definition.deserialize(record2, deserializeUnifiedControlDef),
|
|
60
|
+
[SlotDefinition.type]: SlotDefinition.deserialize,
|
|
61
|
+
[StyleDefinition.type]: StyleDefinition.deserialize,
|
|
62
|
+
[StyleV2Definition.type]: (record2) => StyleV2Definition.deserialize(record2, deserializeUnifiedControlDef),
|
|
63
|
+
[TextAreaDefinition.type]: TextAreaDefinition.deserialize,
|
|
64
|
+
[TextInputDefinition.type]: TextInputDefinition.deserialize,
|
|
65
|
+
[unstable_TypographyDefinition.type]: unstable_TypographyDefinition.deserialize
|
|
66
|
+
};
|
|
67
|
+
const deserialize = deserializeMethod[record.type] ?? null;
|
|
68
|
+
if (deserialize == null) {
|
|
69
|
+
throw new Error(`Unknown control type: ${record.type}`);
|
|
70
|
+
}
|
|
71
|
+
return deserialize(record);
|
|
72
|
+
}
|
|
73
|
+
export {
|
|
74
|
+
deserializeControl,
|
|
75
|
+
deserializeUnifiedControlDef,
|
|
76
|
+
serializeControls
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/controls/serialization/base/index.ts"],"sourcesContent":["import {\n ControlDefinition,\n type SerializedRecord,\n type DeserializedRecord,\n ShapeV2Definition,\n DeserializationPlugin,\n deserializeRecord,\n} from '@makeswift/controls'\n\nimport {\n CheckboxDefinition,\n CodeDefinition,\n ColorDefinition,\n ComboboxDefinition,\n FontDefinition,\n GroupDefinition,\n IconRadioGroupDefinition,\n ImageDefinition,\n LinkDefinition,\n ListDefinition,\n NumberDefinition,\n RichTextV1Definition,\n RichTextV2Definition,\n SelectDefinition,\n ShapeDefinition,\n SliderDefinition,\n SlotDefinition,\n StyleDefinition,\n StyleV2Definition,\n TextAreaDefinition,\n TextInputDefinition,\n unstable_TypographyDefinition,\n} from '../../index'\n\nimport { BaseControlSerializationVisitor } from './visitor'\n\nexport { type SerializedRecord, type DeserializedRecord } from '@makeswift/controls'\n\nexport function serializeControls(\n controls: Record<string, ControlDefinition>,\n visitor: BaseControlSerializationVisitor,\n): Record<string, SerializedRecord> {\n return Object.entries(controls).reduce<Record<string, SerializedRecord>>(\n (acc, [key, control]) => {\n return { ...acc, [key]: control.accept(visitor) }\n },\n {},\n )\n}\n\nexport type DeserializeControlOptions = {\n plugins: DeserializationPlugin<any>[]\n}\n\nexport function deserializeControl(\n serializedControl: SerializedRecord,\n options: DeserializeControlOptions,\n): ControlDefinition {\n const plugins = options?.plugins ?? []\n\n return deserializeUnifiedControlDef(deserializeRecord(serializedControl, plugins))\n}\n\nexport function deserializeUnifiedControlDef(record: DeserializedRecord): ControlDefinition {\n type DeserializeMethod = (data: DeserializedRecord) => ControlDefinition\n const deserializeMethod: Record<string, DeserializeMethod> = {\n [CheckboxDefinition.type]: CheckboxDefinition.deserialize,\n [CodeDefinition.type]: CodeDefinition.deserialize,\n [ColorDefinition.type]: ColorDefinition.deserialize,\n [ComboboxDefinition.type]: ComboboxDefinition.deserialize,\n [FontDefinition.type]: FontDefinition.deserialize,\n [GroupDefinition.type]: record =>\n GroupDefinition.deserialize(record, deserializeUnifiedControlDef),\n [IconRadioGroupDefinition.type]: IconRadioGroupDefinition.deserialize,\n [ImageDefinition.type]: ImageDefinition.deserialize,\n [LinkDefinition.type]: LinkDefinition.deserialize,\n [ListDefinition.type]: record =>\n ListDefinition.deserialize(record, deserializeUnifiedControlDef),\n [NumberDefinition.type]: NumberDefinition.deserialize,\n [RichTextV1Definition.type]: RichTextV1Definition.deserialize,\n [RichTextV2Definition.type]: record =>\n RichTextV2Definition.deserialize(record, deserializeUnifiedControlDef),\n [SelectDefinition.type]: SelectDefinition.deserialize,\n [ShapeDefinition.type]: record =>\n ShapeDefinition.deserialize(record, deserializeUnifiedControlDef),\n [SliderDefinition.type]: SliderDefinition.deserialize,\n [ShapeV2Definition.type]: record =>\n ShapeV2Definition.deserialize(record, deserializeUnifiedControlDef),\n [SlotDefinition.type]: SlotDefinition.deserialize,\n [StyleDefinition.type]: StyleDefinition.deserialize,\n [StyleV2Definition.type]: record =>\n StyleV2Definition.deserialize(record, deserializeUnifiedControlDef),\n [TextAreaDefinition.type]: TextAreaDefinition.deserialize,\n [TextInputDefinition.type]: TextInputDefinition.deserialize,\n [unstable_TypographyDefinition.type]: unstable_TypographyDefinition.deserialize,\n } as const\n\n const deserialize = deserializeMethod[record.type] ?? null\n if (deserialize == null) {\n throw new Error(`Unknown control type: ${record.type}`)\n }\n\n return deserialize(record)\n}\n"],"mappings":"AAAA;AAAA,EAIE;AAAA,EAEA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAMA,SAAS,kBACd,UACA,SACkC;AAClC,SAAO,OAAO,QAAQ,QAAQ,EAAE;AAAA,IAC9B,CAAC,KAAK,CAAC,KAAK,OAAO,MAAM;AACvB,aAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,QAAQ,OAAO,OAAO,EAAE;AAAA,IAClD;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAMO,SAAS,mBACd,mBACA,SACmB;AACnB,QAAM,UAAU,SAAS,WAAW,CAAC;AAErC,SAAO,6BAA6B,kBAAkB,mBAAmB,OAAO,CAAC;AACnF;AAEO,SAAS,6BAA6B,QAA+C;AAE1F,QAAM,oBAAuD;AAAA,IAC3D,CAAC,mBAAmB,IAAI,GAAG,mBAAmB;AAAA,IAC9C,CAAC,eAAe,IAAI,GAAG,eAAe;AAAA,IACtC,CAAC,gBAAgB,IAAI,GAAG,gBAAgB;AAAA,IACxC,CAAC,mBAAmB,IAAI,GAAG,mBAAmB;AAAA,IAC9C,CAAC,eAAe,IAAI,GAAG,eAAe;AAAA,IACtC,CAAC,gBAAgB,IAAI,GAAG,CAAAA,YACtB,gBAAgB,YAAYA,SAAQ,4BAA4B;AAAA,IAClE,CAAC,yBAAyB,IAAI,GAAG,yBAAyB;AAAA,IAC1D,CAAC,gBAAgB,IAAI,GAAG,gBAAgB;AAAA,IACxC,CAAC,eAAe,IAAI,GAAG,eAAe;AAAA,IACtC,CAAC,eAAe,IAAI,GAAG,CAAAA,YACrB,eAAe,YAAYA,SAAQ,4BAA4B;AAAA,IACjE,CAAC,iBAAiB,IAAI,GAAG,iBAAiB;AAAA,IAC1C,CAAC,qBAAqB,IAAI,GAAG,qBAAqB;AAAA,IAClD,CAAC,qBAAqB,IAAI,GAAG,CAAAA,YAC3B,qBAAqB,YAAYA,SAAQ,4BAA4B;AAAA,IACvE,CAAC,iBAAiB,IAAI,GAAG,iBAAiB;AAAA,IAC1C,CAAC,gBAAgB,IAAI,GAAG,CAAAA,YACtB,gBAAgB,YAAYA,SAAQ,4BAA4B;AAAA,IAClE,CAAC,iBAAiB,IAAI,GAAG,iBAAiB;AAAA,IAC1C,CAAC,kBAAkB,IAAI,GAAG,CAAAA,YACxB,kBAAkB,YAAYA,SAAQ,4BAA4B;AAAA,IACpE,CAAC,eAAe,IAAI,GAAG,eAAe;AAAA,IACtC,CAAC,gBAAgB,IAAI,GAAG,gBAAgB;AAAA,IACxC,CAAC,kBAAkB,IAAI,GAAG,CAAAA,YACxB,kBAAkB,YAAYA,SAAQ,4BAA4B;AAAA,IACpE,CAAC,mBAAmB,IAAI,GAAG,mBAAmB;AAAA,IAC9C,CAAC,oBAAoB,IAAI,GAAG,oBAAoB;AAAA,IAChD,CAAC,8BAA8B,IAAI,GAAG,8BAA8B;AAAA,EACtE;AAEA,QAAM,cAAc,kBAAkB,OAAO,IAAI,KAAK;AACtD,MAAI,eAAe,MAAM;AACvB,UAAM,IAAI,MAAM,yBAAyB,OAAO,IAAI,EAAE;AAAA,EACxD;AAEA,SAAO,YAAY,MAAM;AAC3B;","names":["record"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ControlDefinition,
|
|
3
|
+
serializeObject,
|
|
4
|
+
ControlSerializationVisitor
|
|
5
|
+
} from "@makeswift/controls";
|
|
6
|
+
import { RichTextV2Definition } from "../../rich-text-v2";
|
|
7
|
+
class BaseControlSerializationVisitor extends ControlSerializationVisitor {
|
|
8
|
+
constructor(plugins) {
|
|
9
|
+
const serializeDefinitionPlugin = {
|
|
10
|
+
match: (val) => val instanceof ControlDefinition,
|
|
11
|
+
serialize: (val) => val.accept(this)
|
|
12
|
+
};
|
|
13
|
+
super([serializeDefinitionPlugin, ...plugins]);
|
|
14
|
+
}
|
|
15
|
+
visitRichTextV2(def) {
|
|
16
|
+
const { plugins, ...config } = def.config;
|
|
17
|
+
const pluginDefs = plugins.map(
|
|
18
|
+
({ control }) => control ? {
|
|
19
|
+
control: {
|
|
20
|
+
definition: control.definition,
|
|
21
|
+
// FIXME: remove getValue/onChange stubs once we released a version of the builder
|
|
22
|
+
// built against the runtime where these can be optional
|
|
23
|
+
getValue: () => void 0,
|
|
24
|
+
onChange: () => {
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
} : {}
|
|
28
|
+
);
|
|
29
|
+
const serialized = serializeObject(
|
|
30
|
+
{ config: { ...config, plugins: pluginDefs } },
|
|
31
|
+
this.serializationPlugins
|
|
32
|
+
);
|
|
33
|
+
return { ...serialized, type: RichTextV2Definition.type };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
BaseControlSerializationVisitor
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=visitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/controls/serialization/base/visitor.ts"],"sourcesContent":["import {\n ControlDefinition,\n SerializedRecord,\n serializeObject,\n SerializationPlugin,\n ControlSerializationVisitor,\n} from '@makeswift/controls'\n\nimport { RichTextV2Definition } from '../../rich-text-v2'\n\nexport class BaseControlSerializationVisitor extends ControlSerializationVisitor {\n constructor(plugins: SerializationPlugin<any>[]) {\n const serializeDefinitionPlugin: SerializationPlugin<ControlDefinition> = {\n match: (val: unknown) => val instanceof ControlDefinition,\n serialize: (val: ControlDefinition) => val.accept(this),\n }\n\n super([serializeDefinitionPlugin, ...plugins])\n }\n\n visitRichTextV2(def: RichTextV2Definition): SerializedRecord {\n const { plugins, ...config } = def.config\n\n // serialize only the plugin control definition, if any\n const pluginDefs = plugins.map(({ control }) =>\n control\n ? {\n control: {\n definition: control.definition,\n // FIXME: remove getValue/onChange stubs once we released a version of the builder\n // built against the runtime where these can be optional\n getValue: () => undefined,\n onChange: () => {},\n },\n }\n : {},\n )\n\n const serialized = serializeObject(\n { config: { ...config, plugins: pluginDefs } },\n this.serializationPlugins,\n ) as SerializedRecord\n\n return { ...serialized, type: RichTextV2Definition.type }\n }\n}\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EAEA;AAAA,EAEA;AAAA,OACK;AAEP,SAAS,4BAA4B;AAE9B,MAAM,wCAAwC,4BAA4B;AAAA,EAC/E,YAAY,SAAqC;AAC/C,UAAM,4BAAoE;AAAA,MACxE,OAAO,CAAC,QAAiB,eAAe;AAAA,MACxC,WAAW,CAAC,QAA2B,IAAI,OAAO,IAAI;AAAA,IACxD;AAEA,UAAM,CAAC,2BAA2B,GAAG,OAAO,CAAC;AAAA,EAC/C;AAAA,EAEA,gBAAgB,KAA6C;AAC3D,UAAM,EAAE,SAAS,GAAG,OAAO,IAAI,IAAI;AAGnC,UAAM,aAAa,QAAQ;AAAA,MAAI,CAAC,EAAE,QAAQ,MACxC,UACI;AAAA,QACE,SAAS;AAAA,UACP,YAAY,QAAQ;AAAA;AAAA;AAAA,UAGpB,UAAU,MAAM;AAAA,UAChB,UAAU,MAAM;AAAA,UAAC;AAAA,QACnB;AAAA,MACF,IACA,CAAC;AAAA,IACP;AAEA,UAAM,aAAa;AAAA,MACjB,EAAE,QAAQ,EAAE,GAAG,QAAQ,SAAS,WAAW,EAAE;AAAA,MAC7C,KAAK;AAAA,IACP;AAEA,WAAO,EAAE,GAAG,YAAY,MAAM,qBAAqB,KAAK;AAAA,EAC1D;AACF;","names":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
function isSerializedRecord(r) {
|
|
2
|
+
return r != null && typeof r === "object" && "type" in r && typeof r.type === "string";
|
|
3
|
+
}
|
|
4
|
+
function deserializeControlRecords(serializedControls, deserialize, { onError, plugins } = {}) {
|
|
5
|
+
return Object.entries(serializedControls).reduce(
|
|
6
|
+
(deserializedControls, [key, serializedControl]) => {
|
|
7
|
+
try {
|
|
8
|
+
if (!isSerializedRecord(serializedControl)) {
|
|
9
|
+
throw new Error(
|
|
10
|
+
`Expected serialized control data, got ${JSON.stringify(serializedControl)}`
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
const deserializedControl = deserialize(serializedControl, { plugins });
|
|
14
|
+
return { ...deserializedControls, [key]: deserializedControl };
|
|
15
|
+
} catch (err) {
|
|
16
|
+
const error = err instanceof Error ? new Error(`Could not deserialize control for "${key}": ${err.message}`, {
|
|
17
|
+
cause: err
|
|
18
|
+
}) : new Error(`Could not deserialize control for "${key}", unknown error: ${err}`);
|
|
19
|
+
onError?.(error, { key, serializedControl });
|
|
20
|
+
return deserializedControls;
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
{}
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
deserializeControlRecords,
|
|
28
|
+
isSerializedRecord
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/controls/serialization/index.ts"],"sourcesContent":["import { type SerializedRecord, type DeserializeControlOptions } from './base'\n\nexport function isSerializedRecord(r: unknown): r is SerializedRecord {\n return r != null && typeof r === 'object' && 'type' in r && typeof r.type === 'string'\n}\n\nexport type DeserializeControlRecordsOptions = {\n onError?: (err: Error, context: { key: string; serializedControl: unknown }) => void\n} & Partial<Pick<DeserializeControlOptions, 'plugins'>>\n\nexport function deserializeControlRecords<T>(\n serializedControls: Record<string, unknown>,\n deserialize: (\n serializedControl: SerializedRecord,\n options?: Partial<DeserializeControlOptions>,\n ) => T,\n { onError, plugins }: DeserializeControlRecordsOptions = {},\n): Record<string, T> {\n return Object.entries(serializedControls).reduce<Record<string, T>>(\n (deserializedControls, [key, serializedControl]) => {\n try {\n if (!isSerializedRecord(serializedControl)) {\n throw new Error(\n `Expected serialized control data, got ${JSON.stringify(serializedControl)}`,\n )\n }\n const deserializedControl = deserialize(serializedControl, { plugins })\n return { ...deserializedControls, [key]: deserializedControl }\n } catch (err: unknown) {\n const error =\n err instanceof Error\n ? new Error(`Could not deserialize control for \"${key}\": ${err.message}`, {\n cause: err,\n })\n : new Error(`Could not deserialize control for \"${key}\", unknown error: ${err}`)\n\n onError?.(error, { key, serializedControl })\n\n return deserializedControls\n }\n },\n {},\n )\n}\n"],"mappings":"AAEO,SAAS,mBAAmB,GAAmC;AACpE,SAAO,KAAK,QAAQ,OAAO,MAAM,YAAY,UAAU,KAAK,OAAO,EAAE,SAAS;AAChF;AAMO,SAAS,0BACd,oBACA,aAIA,EAAE,SAAS,QAAQ,IAAsC,CAAC,GACvC;AACnB,SAAO,OAAO,QAAQ,kBAAkB,EAAE;AAAA,IACxC,CAAC,sBAAsB,CAAC,KAAK,iBAAiB,MAAM;AAClD,UAAI;AACF,YAAI,CAAC,mBAAmB,iBAAiB,GAAG;AAC1C,gBAAM,IAAI;AAAA,YACR,yCAAyC,KAAK,UAAU,iBAAiB,CAAC;AAAA,UAC5E;AAAA,QACF;AACA,cAAM,sBAAsB,YAAY,mBAAmB,EAAE,QAAQ,CAAC;AACtE,eAAO,EAAE,GAAG,sBAAsB,CAAC,GAAG,GAAG,oBAAoB;AAAA,MAC/D,SAAS,KAAc;AACrB,cAAM,QACJ,eAAe,QACX,IAAI,MAAM,sCAAsC,GAAG,MAAM,IAAI,OAAO,IAAI;AAAA,UACtE,OAAO;AAAA,QACT,CAAC,IACD,IAAI,MAAM,sCAAsC,GAAG,qBAAqB,GAAG,EAAE;AAEnF,kBAAU,OAAO,EAAE,KAAK,kBAAkB,CAAC;AAE3C,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
function isSerializedFunction(value) {
|
|
2
|
+
return value instanceof MessagePort;
|
|
3
|
+
}
|
|
4
|
+
function serializeFunction(func) {
|
|
5
|
+
const messageChannel = new MessageChannel();
|
|
6
|
+
messageChannel.port1.onmessage = ({ data: [callId, args] }) => {
|
|
7
|
+
Promise.resolve().then(() => func.apply(null, args)).then((result) => messageChannel.port1.postMessage([callId, result]));
|
|
8
|
+
};
|
|
9
|
+
return messageChannel.port2;
|
|
10
|
+
}
|
|
11
|
+
function onmessageHandler() {
|
|
12
|
+
let nextCallId = 0;
|
|
13
|
+
const calls = /* @__PURE__ */ new Map();
|
|
14
|
+
const result = ({ data: [callId, result2] }) => {
|
|
15
|
+
calls.get(callId)?.(result2);
|
|
16
|
+
calls.delete(callId);
|
|
17
|
+
};
|
|
18
|
+
result.newCall = (resolve) => {
|
|
19
|
+
const callId = nextCallId++;
|
|
20
|
+
calls.set(callId, resolve);
|
|
21
|
+
return callId;
|
|
22
|
+
};
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
function deserializeFunction(serializedFunction) {
|
|
26
|
+
if (serializedFunction.onmessage == null) {
|
|
27
|
+
serializedFunction.onmessage = onmessageHandler();
|
|
28
|
+
}
|
|
29
|
+
return function deserializedFunction(...args) {
|
|
30
|
+
return new Promise((resolve) => {
|
|
31
|
+
const { newCall } = serializedFunction.onmessage;
|
|
32
|
+
if (newCall == null) {
|
|
33
|
+
throw new Error(
|
|
34
|
+
`Deserialized function call failed: 'onmessage' handler is missing 'newCall' method`
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
const callId = newCall(resolve);
|
|
38
|
+
serializedFunction.postMessage([callId, args]);
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const functionDeserializationPlugin = {
|
|
43
|
+
match: isSerializedFunction,
|
|
44
|
+
deserialize: (value) => deserializeFunction(value)
|
|
45
|
+
};
|
|
46
|
+
export {
|
|
47
|
+
deserializeFunction,
|
|
48
|
+
functionDeserializationPlugin,
|
|
49
|
+
isSerializedFunction,
|
|
50
|
+
serializeFunction
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=function-serialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/controls/serialization/message-port/function-serialization.ts"],"sourcesContent":["import {\n DeserializationPlugin,\n type AnyFunction,\n type SerializedFunctionReturnType,\n type DeserializedFunction,\n} from '@makeswift/controls'\n\nexport { type DeserializedFunction } from '@makeswift/controls'\n\ndeclare const SerializedFunctionTag: unique symbol\n\ntype ResolveCallPromise<T extends AnyFunction> = (value: SerializedFunctionReturnType<T>) => void\n\ntype OnMessageHandler<T extends AnyFunction> = MessagePort['onmessage'] & {\n newCall?(resolve: ResolveCallPromise<T>): number\n}\n\nexport type SerializedFunction<T extends AnyFunction> = MessagePort & {\n onmessage: OnMessageHandler<T>\n readonly [SerializedFunctionTag]: T\n}\n\nexport function isSerializedFunction(value: any): value is SerializedFunction<AnyFunction> {\n return value instanceof MessagePort\n}\n\ntype CallID = number\n\nexport function serializeFunction<T extends AnyFunction>(func: T): SerializedFunction<T> {\n type CallMessageEvent = MessageEvent<[CallID, Parameters<T>]>\n\n const messageChannel = new MessageChannel()\n\n messageChannel.port1.onmessage = ({ data: [callId, args] }: CallMessageEvent) => {\n Promise.resolve()\n .then(() => func.apply(null, args))\n .then(result => messageChannel.port1.postMessage([callId, result]))\n }\n\n return messageChannel.port2 as SerializedFunction<T>\n}\n\nfunction onmessageHandler<T extends AnyFunction>(): OnMessageHandler<T> {\n type ResultMessageEvent = MessageEvent<[CallID, SerializedFunctionReturnType<T>]>\n let nextCallId = 0\n const calls = new Map<CallID, ResolveCallPromise<T>>()\n\n const result: OnMessageHandler<T> = ({ data: [callId, result] }: ResultMessageEvent) => {\n calls.get(callId)?.(result)\n calls.delete(callId)\n }\n\n result.newCall = (resolve: ResolveCallPromise<T>) => {\n const callId = nextCallId++\n calls.set(callId, resolve)\n return callId\n }\n\n return result\n}\n\nexport function deserializeFunction<T extends AnyFunction>(\n serializedFunction: SerializedFunction<T>,\n): DeserializedFunction<T> {\n if (serializedFunction.onmessage == null) {\n serializedFunction.onmessage = onmessageHandler<T>()\n }\n\n return function deserializedFunction(...args) {\n return new Promise(resolve => {\n const { newCall } = serializedFunction.onmessage\n if (newCall == null) {\n throw new Error(\n `Deserialized function call failed: 'onmessage' handler is missing 'newCall' method`,\n )\n }\n\n const callId = newCall(resolve)\n serializedFunction.postMessage([callId, args])\n })\n }\n}\n\nexport const functionDeserializationPlugin: DeserializationPlugin<\n SerializedFunction<AnyFunction>,\n DeserializedFunction<AnyFunction>\n> = {\n match: isSerializedFunction,\n deserialize: value => deserializeFunction(value),\n}\n"],"mappings":"AAsBO,SAAS,qBAAqB,OAAsD;AACzF,SAAO,iBAAiB;AAC1B;AAIO,SAAS,kBAAyC,MAAgC;AAGvF,QAAM,iBAAiB,IAAI,eAAe;AAE1C,iBAAe,MAAM,YAAY,CAAC,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,MAAwB;AAC/E,YAAQ,QAAQ,EACb,KAAK,MAAM,KAAK,MAAM,MAAM,IAAI,CAAC,EACjC,KAAK,YAAU,eAAe,MAAM,YAAY,CAAC,QAAQ,MAAM,CAAC,CAAC;AAAA,EACtE;AAEA,SAAO,eAAe;AACxB;AAEA,SAAS,mBAA+D;AAEtE,MAAI,aAAa;AACjB,QAAM,QAAQ,oBAAI,IAAmC;AAErD,QAAM,SAA8B,CAAC,EAAE,MAAM,CAAC,QAAQA,OAAM,EAAE,MAA0B;AACtF,UAAM,IAAI,MAAM,IAAIA,OAAM;AAC1B,UAAM,OAAO,MAAM;AAAA,EACrB;AAEA,SAAO,UAAU,CAAC,YAAmC;AACnD,UAAM,SAAS;AACf,UAAM,IAAI,QAAQ,OAAO;AACzB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,oBACd,oBACyB;AACzB,MAAI,mBAAmB,aAAa,MAAM;AACxC,uBAAmB,YAAY,iBAAoB;AAAA,EACrD;AAEA,SAAO,SAAS,wBAAwB,MAAM;AAC5C,WAAO,IAAI,QAAQ,aAAW;AAC5B,YAAM,EAAE,QAAQ,IAAI,mBAAmB;AACvC,UAAI,WAAW,MAAM;AACnB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,YAAM,SAAS,QAAQ,OAAO;AAC9B,yBAAmB,YAAY,CAAC,QAAQ,IAAI,CAAC;AAAA,IAC/C,CAAC;AAAA,EACH;AACF;AAEO,MAAM,gCAGT;AAAA,EACF,OAAO;AAAA,EACP,aAAa,WAAS,oBAAoB,KAAK;AACjD;","names":["result"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/controls/serialization/message-port/index.ts"],"sourcesContent":["export * from './function-serialization'\nexport * from './visitor'\n"],"mappings":"AAAA,cAAc;AACd,cAAc;","names":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { isFunction } from "@makeswift/controls";
|
|
2
|
+
import { BaseControlSerializationVisitor } from "../base/visitor";
|
|
3
|
+
import { serializeFunction } from "./function-serialization";
|
|
4
|
+
class ClientMessagePortSerializationVisitor extends BaseControlSerializationVisitor {
|
|
5
|
+
transferables = [];
|
|
6
|
+
constructor() {
|
|
7
|
+
const serializeFunctionPlugin = {
|
|
8
|
+
match: isFunction,
|
|
9
|
+
serialize: (val) => {
|
|
10
|
+
const r = serializeFunction(val);
|
|
11
|
+
this.transferables.push(r);
|
|
12
|
+
return r;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
super([serializeFunctionPlugin]);
|
|
16
|
+
}
|
|
17
|
+
getTransferables() {
|
|
18
|
+
return [...this.transferables];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
ClientMessagePortSerializationVisitor
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=visitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/controls/serialization/message-port/visitor.ts"],"sourcesContent":["import { AnyFunction, SerializationPlugin, isFunction } from '@makeswift/controls'\n\nimport { BaseControlSerializationVisitor } from '../base/visitor'\nimport { serializeFunction } from './function-serialization'\n\nexport class ClientMessagePortSerializationVisitor extends BaseControlSerializationVisitor {\n private transferables: Transferable[] = []\n\n constructor() {\n const serializeFunctionPlugin: SerializationPlugin<AnyFunction> = {\n match: isFunction,\n serialize: (val: AnyFunction) => {\n const r = serializeFunction(val)\n this.transferables.push(r)\n return r\n },\n }\n\n super([serializeFunctionPlugin])\n }\n\n getTransferables(): Transferable[] {\n return [...this.transferables]\n }\n}\n"],"mappings":"AAAA,SAA2C,kBAAkB;AAE7D,SAAS,uCAAuC;AAChD,SAAS,yBAAyB;AAE3B,MAAM,8CAA8C,gCAAgC;AAAA,EACjF,gBAAgC,CAAC;AAAA,EAEzC,cAAc;AACZ,UAAM,0BAA4D;AAAA,MAChE,OAAO;AAAA,MACP,WAAW,CAAC,QAAqB;AAC/B,cAAM,IAAI,kBAAkB,GAAG;AAC/B,aAAK,cAAc,KAAK,CAAC;AACzB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,CAAC,uBAAuB,CAAC;AAAA,EACjC;AAAA,EAEA,mBAAmC;AACjC,WAAO,CAAC,GAAG,KAAK,aAAa;AAAA,EAC/B;AACF;","names":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ControlDefinition,
|
|
3
|
+
ControlInstance,
|
|
4
|
+
DefaultControlInstance,
|
|
5
|
+
ShapeV2Control,
|
|
6
|
+
getBaseBreakpoint,
|
|
7
|
+
getBreakpoint,
|
|
8
|
+
findBreakpointOverride,
|
|
9
|
+
findNextFallback,
|
|
10
|
+
mergeOrCoalesceFallbacks,
|
|
11
|
+
mergeResponsiveValues,
|
|
12
|
+
shallowMergeFallbacks,
|
|
13
|
+
getViewportStyle,
|
|
14
|
+
replaceResourceIfNeeded,
|
|
15
|
+
shouldRemoveResource,
|
|
16
|
+
ContextResource
|
|
17
|
+
} from "@makeswift/controls";
|
|
18
|
+
export {
|
|
19
|
+
ContextResource,
|
|
20
|
+
ControlDefinition,
|
|
21
|
+
ControlInstance,
|
|
22
|
+
DefaultControlInstance,
|
|
23
|
+
ShapeV2Control,
|
|
24
|
+
findBreakpointOverride,
|
|
25
|
+
findNextFallback,
|
|
26
|
+
getBaseBreakpoint,
|
|
27
|
+
getBreakpoint,
|
|
28
|
+
getViewportStyle,
|
|
29
|
+
mergeOrCoalesceFallbacks,
|
|
30
|
+
mergeResponsiveValues,
|
|
31
|
+
replaceResourceIfNeeded,
|
|
32
|
+
shallowMergeFallbacks,
|
|
33
|
+
shouldRemoveResource
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/index.ts"],"sourcesContent":["export {\n type Breakpoint,\n type BreakpointId,\n type Breakpoints,\n type ConfigType,\n type Data,\n type DataType,\n type DeviceOverride,\n type FallbackStrategy,\n type ValueType,\n type ResolvedValueType,\n type ResponsiveValue,\n type ControlMessage,\n type ReplacementContext,\n type SendMessageType,\n ControlDefinition,\n ControlInstance,\n DefaultControlInstance,\n ShapeV2Control,\n getBaseBreakpoint,\n getBreakpoint,\n findBreakpointOverride,\n findNextFallback,\n mergeOrCoalesceFallbacks,\n mergeResponsiveValues,\n shallowMergeFallbacks,\n getViewportStyle,\n replaceResourceIfNeeded,\n shouldRemoveResource,\n ContextResource,\n} from '@makeswift/controls'\n"],"mappings":"AAAA;AAAA,EAeE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
|
|
@@ -28,13 +28,22 @@ async function config({
|
|
|
28
28
|
},
|
|
29
29
|
customRoutes: async (route) => {
|
|
30
30
|
if (route === "/redirect-preview") {
|
|
31
|
-
const request = req instanceof NextRequest ? req :
|
|
31
|
+
const request = req instanceof NextRequest ? req : requestToNextRequest(req);
|
|
32
32
|
return { res: await appRouterRedirectPreviewHandler(request, context, client) };
|
|
33
33
|
}
|
|
34
34
|
return null;
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
|
+
const requestToNextRequest = (req) => {
|
|
39
|
+
const hasBody = req.method !== "GET" && req.method !== "HEAD";
|
|
40
|
+
return new NextRequest(req.url, {
|
|
41
|
+
method: req.method,
|
|
42
|
+
headers: req.headers,
|
|
43
|
+
signal: req.signal,
|
|
44
|
+
...hasBody && { body: req.body, duplex: "half" }
|
|
45
|
+
});
|
|
46
|
+
};
|
|
38
47
|
export {
|
|
39
48
|
argsPattern,
|
|
40
49
|
config
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/next/api-handler/config/app-router.ts"],"sourcesContent":["import { P } from 'ts-pattern'\nimport { revalidatePath, revalidateTag } from 'next/cache'\nimport { NextRequest } from 'next/server'\n\nimport { MAKESWIFT_CACHE_TAG } from '../../cache'\nimport { type ApiResponse } from '../../../api-handler/request-response'\n\nimport { appRouterRedirectPreviewHandler } from '../handlers/app-router-redirect-preview'\nimport { MAKESWIFT_SITE_VERSION_COOKIE, PRERENDER_BYPASS_COOKIE } from '../preview'\n\nimport { validateApiRoute, type ApiHandlerConfig } from './base'\nimport { MakeswiftClient } from '../../../client'\n\ntype Params = { [key: string]: string | string[] }\ntype Context = { params: Promise<Params> }\n\n// In older versions of Next (prior to 15.5.0), the inbound request is typed as\n// a `NextRequest`, but requests received at runtime fail the `instanceof\n// NextRequest` check. In newer versions of Next, requests are correctly typed\n// as `NextRequest`. To maintain compatibility across all Next.js versions, we\n// match against both.\nexport type ApiHandlerArgs = [NextRequest | Request, Context]\nexport const argsPattern = [\n P.union(P.instanceOf(Request), P.instanceOf(NextRequest)),\n P.any,\n] as const\n\nexport async function config({\n req,\n context,\n client,\n}: {\n req: NextRequest | Request\n context: Context\n client: MakeswiftClient\n}): Promise<ApiHandlerConfig> {\n return {\n req,\n route: validateApiRoute(await context.params),\n previewCookieNames: [PRERENDER_BYPASS_COOKIE, MAKESWIFT_SITE_VERSION_COOKIE],\n sendResponse: async (res: ApiResponse): Promise<Response | void> => res,\n revalidationHandler: async (path?: string): Promise<void> => {\n if (path != null) {\n revalidatePath(path)\n } else {\n revalidateTag(MAKESWIFT_CACHE_TAG)\n }\n },\n customRoutes: async (route: string) => {\n if (route === '/redirect-preview') {\n // Convert any Request to NextRequest,
|
|
1
|
+
{"version":3,"sources":["../../../../../src/next/api-handler/config/app-router.ts"],"sourcesContent":["import { P } from 'ts-pattern'\nimport { revalidatePath, revalidateTag } from 'next/cache'\nimport { NextRequest } from 'next/server'\n\nimport { MAKESWIFT_CACHE_TAG } from '../../cache'\nimport { type ApiResponse } from '../../../api-handler/request-response'\n\nimport { appRouterRedirectPreviewHandler } from '../handlers/app-router-redirect-preview'\nimport { MAKESWIFT_SITE_VERSION_COOKIE, PRERENDER_BYPASS_COOKIE } from '../preview'\n\nimport { validateApiRoute, type ApiHandlerConfig } from './base'\nimport { MakeswiftClient } from '../../../client'\n\ntype Params = { [key: string]: string | string[] }\ntype Context = { params: Promise<Params> }\n\n// In older versions of Next (prior to 15.5.0), the inbound request is typed as\n// a `NextRequest`, but requests received at runtime fail the `instanceof\n// NextRequest` check. In newer versions of Next, requests are correctly typed\n// as `NextRequest`. To maintain compatibility across all Next.js versions, we\n// match against both.\nexport type ApiHandlerArgs = [NextRequest | Request, Context]\nexport const argsPattern = [\n P.union(P.instanceOf(Request), P.instanceOf(NextRequest)),\n P.any,\n] as const\n\nexport async function config({\n req,\n context,\n client,\n}: {\n req: NextRequest | Request\n context: Context\n client: MakeswiftClient\n}): Promise<ApiHandlerConfig> {\n return {\n req,\n route: validateApiRoute(await context.params),\n previewCookieNames: [PRERENDER_BYPASS_COOKIE, MAKESWIFT_SITE_VERSION_COOKIE],\n sendResponse: async (res: ApiResponse): Promise<Response | void> => res,\n revalidationHandler: async (path?: string): Promise<void> => {\n if (path != null) {\n revalidatePath(path)\n } else {\n revalidateTag(MAKESWIFT_CACHE_TAG)\n }\n },\n customRoutes: async (route: string) => {\n if (route === '/redirect-preview') {\n // Convert any `Request` to `NextRequest` for consumption by the `appRouterRedirectPreviewHandler` call below\n const request = req instanceof NextRequest ? req : requestToNextRequest(req)\n return { res: await appRouterRedirectPreviewHandler(request, context, client) }\n }\n\n return null\n },\n }\n}\n\nconst requestToNextRequest = (req: Request): NextRequest => {\n // Because we're supporting multiple versions of Next.js, we have to account for two issues here:\n //\n // 1. https://github.com/vercel/next.js/issues/52967 for Next prior to v13.4.17 (see\n // https://github.com/vercel/next.js/commit/e1133cf0970e80d8f88e6c3516881780703eb7f5\n // and https://github.com/vercel/next.js/commit/af97755e3c62a6b786b98b98ef8e91bf3d595957),\n // which requires us to pass two arguments to the `NextRequest` constructor in order to\n // fully copy the request\n //\n // 2. https://github.com/better-auth/better-auth/issues/8194#issuecomment-3975332346 for Next 16\n // when running on Node.js 24+, which prevents us from simply passing the original request\n // as the second argument to the `NextRequest` constructor, thus the manual copying of the\n // relevant server-side properties\n\n const hasBody = req.method !== 'GET' && req.method !== 'HEAD'\n\n return new NextRequest(req.url, {\n method: req.method,\n headers: req.headers,\n signal: req.signal,\n ...(hasBody && { body: req.body, duplex: 'half' }),\n })\n}\n"],"mappings":"AAAA,SAAS,SAAS;AAClB,SAAS,gBAAgB,qBAAqB;AAC9C,SAAS,mBAAmB;AAE5B,SAAS,2BAA2B;AAGpC,SAAS,uCAAuC;AAChD,SAAS,+BAA+B,+BAA+B;AAEvE,SAAS,wBAA+C;AAYjD,MAAM,cAAc;AAAA,EACzB,EAAE,MAAM,EAAE,WAAW,OAAO,GAAG,EAAE,WAAW,WAAW,CAAC;AAAA,EACxD,EAAE;AACJ;AAEA,eAAsB,OAAO;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACF,GAI8B;AAC5B,SAAO;AAAA,IACL;AAAA,IACA,OAAO,iBAAiB,MAAM,QAAQ,MAAM;AAAA,IAC5C,oBAAoB,CAAC,yBAAyB,6BAA6B;AAAA,IAC3E,cAAc,OAAO,QAA+C;AAAA,IACpE,qBAAqB,OAAO,SAAiC;AAC3D,UAAI,QAAQ,MAAM;AAChB,uBAAe,IAAI;AAAA,MACrB,OAAO;AACL,sBAAc,mBAAmB;AAAA,MACnC;AAAA,IACF;AAAA,IACA,cAAc,OAAO,UAAkB;AACrC,UAAI,UAAU,qBAAqB;AAEjC,cAAM,UAAU,eAAe,cAAc,MAAM,qBAAqB,GAAG;AAC3E,eAAO,EAAE,KAAK,MAAM,gCAAgC,SAAS,SAAS,MAAM,EAAE;AAAA,MAChF;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,MAAM,uBAAuB,CAAC,QAA8B;AAc1D,QAAM,UAAU,IAAI,WAAW,SAAS,IAAI,WAAW;AAEvD,SAAO,IAAI,YAAY,IAAI,KAAK;AAAA,IAC9B,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI;AAAA,IACb,QAAQ,IAAI;AAAA,IACZ,GAAI,WAAW,EAAE,MAAM,IAAI,MAAM,QAAQ,OAAO;AAAA,EAClD,CAAC;AACH;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/next/api-handler/config/pages-router.ts"],"sourcesContent":["import { P } from 'ts-pattern'\nimport { NextApiRequest, NextApiResponse } from 'next'\n\nimport { type ApiResponse } from '../../../api-handler/request-response'\nimport { toApiRequest, pipeResponseTo } from '../../../api-handler/node-request-response'\n\nimport { pagesRouterRedirectPreviewHandler } from '../handlers/pages-router-redirect-preview'\nimport { PRERENDER_BYPASS_COOKIE, PREVIEW_DATA_COOKIE } from '../preview'\n\nimport { validateApiRoute, type ApiHandlerConfig } from './base'\nimport { MakeswiftClient } from '../../../client'\n\nexport type ApiHandlerArgs = [NextApiRequest, NextApiResponse]\nexport const argsPattern = [P.any, P.any] as const\n\nexport async function config({\n req,\n res,\n client,\n}: {\n req: NextApiRequest\n res: NextApiResponse\n client: MakeswiftClient\n}): Promise<ApiHandlerConfig> {\n return {\n req: toApiRequest(req),\n route: validateApiRoute(await apiRequestParams(req)),\n previewCookieNames: [PRERENDER_BYPASS_COOKIE, PREVIEW_DATA_COOKIE],\n\n sendResponse: (apiResponse: ApiResponse): Promise<Response | void> =>\n pipeResponseTo(apiResponse, res),\n\n revalidationHandler: async (path?: string): Promise<void> => {\n if (path != null) {\n res.revalidate(path)\n } else {\n // No-op, Pages Router does not support tag-based revalidation\n }\n },\n\n customRoutes: async (route: string) => {\n if (route === '/redirect-preview') {\n return { res: await pagesRouterRedirectPreviewHandler(req, res, client) }\n }\n\n return null\n },\n }\n}\n\nfunction apiRequestParams(request: NextApiRequest): Promise<NextApiRequest['query']> {\n // `NextApiRequest.query` prop became async in Next.js 15, but it's not reflected in the type definition;\n // force-casting it to a `Promise` manually\n return Promise.resolve(request.query)\n}\n"],"mappings":"AAAA,SAAS,SAAS;AAIlB,SAAS,cAAc,sBAAsB;AAE7C,SAAS,yCAAyC;AAClD,SAAS,yBAAyB,2BAA2B;AAE7D,SAAS,wBAA+C;AAIjD,MAAM,cAAc,CAAC,EAAE,KAAK,EAAE,GAAG;AAExC,eAAsB,OAAO;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACF,GAI8B;AAC5B,SAAO;AAAA,IACL,KAAK,aAAa,GAAG;AAAA,IACrB,OAAO,iBAAiB,MAAM,iBAAiB,GAAG,CAAC;AAAA,IACnD,oBAAoB,CAAC,yBAAyB,mBAAmB;AAAA,IAEjE,cAAc,CAAC,gBACb,eAAe,aAAa,GAAG;AAAA,IAEjC,qBAAqB,OAAO,SAAiC;AAC3D,UAAI,QAAQ,MAAM;AAChB,
|
|
1
|
+
{"version":3,"sources":["../../../../../src/next/api-handler/config/pages-router.ts"],"sourcesContent":["import { P } from 'ts-pattern'\nimport { NextApiRequest, NextApiResponse } from 'next'\n\nimport { type ApiResponse } from '../../../api-handler/request-response'\nimport { toApiRequest, pipeResponseTo } from '../../../api-handler/node-request-response'\n\nimport { pagesRouterRedirectPreviewHandler } from '../handlers/pages-router-redirect-preview'\nimport { PRERENDER_BYPASS_COOKIE, PREVIEW_DATA_COOKIE } from '../preview'\n\nimport { validateApiRoute, type ApiHandlerConfig } from './base'\nimport { MakeswiftClient } from '../../../client'\n\nexport type ApiHandlerArgs = [NextApiRequest, NextApiResponse]\nexport const argsPattern = [P.any, P.any] as const\n\nexport async function config({\n req,\n res,\n client,\n}: {\n req: NextApiRequest\n res: NextApiResponse\n client: MakeswiftClient\n}): Promise<ApiHandlerConfig> {\n return {\n req: toApiRequest(req),\n route: validateApiRoute(await apiRequestParams(req)),\n previewCookieNames: [PRERENDER_BYPASS_COOKIE, PREVIEW_DATA_COOKIE],\n\n sendResponse: (apiResponse: ApiResponse): Promise<Response | void> =>\n pipeResponseTo(apiResponse, res),\n\n revalidationHandler: async (path?: string): Promise<void> => {\n if (path != null) {\n await res.revalidate(path)\n } else {\n // No-op, Pages Router does not support tag-based revalidation\n }\n },\n\n customRoutes: async (route: string) => {\n if (route === '/redirect-preview') {\n return { res: await pagesRouterRedirectPreviewHandler(req, res, client) }\n }\n\n return null\n },\n }\n}\n\nfunction apiRequestParams(request: NextApiRequest): Promise<NextApiRequest['query']> {\n // `NextApiRequest.query` prop became async in Next.js 15, but it's not reflected in the type definition;\n // force-casting it to a `Promise` manually\n return Promise.resolve(request.query)\n}\n"],"mappings":"AAAA,SAAS,SAAS;AAIlB,SAAS,cAAc,sBAAsB;AAE7C,SAAS,yCAAyC;AAClD,SAAS,yBAAyB,2BAA2B;AAE7D,SAAS,wBAA+C;AAIjD,MAAM,cAAc,CAAC,EAAE,KAAK,EAAE,GAAG;AAExC,eAAsB,OAAO;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACF,GAI8B;AAC5B,SAAO;AAAA,IACL,KAAK,aAAa,GAAG;AAAA,IACrB,OAAO,iBAAiB,MAAM,iBAAiB,GAAG,CAAC;AAAA,IACnD,oBAAoB,CAAC,yBAAyB,mBAAmB;AAAA,IAEjE,cAAc,CAAC,gBACb,eAAe,aAAa,GAAG;AAAA,IAEjC,qBAAqB,OAAO,SAAiC;AAC3D,UAAI,QAAQ,MAAM;AAChB,cAAM,IAAI,WAAW,IAAI;AAAA,MAC3B,OAAO;AAAA,MAEP;AAAA,IACF;AAAA,IAEA,cAAc,OAAO,UAAkB;AACrC,UAAI,UAAU,qBAAqB;AACjC,eAAO,EAAE,KAAK,MAAM,kCAAkC,KAAK,KAAK,MAAM,EAAE;AAAA,MAC1E;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,SAA2D;AAGnF,SAAO,QAAQ,QAAQ,QAAQ,KAAK;AACtC;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/next/fetch.ts"],"sourcesContent":["import { type HttpFetch } from '../state/api-client/fetch-api-resource'\n\nimport { MAKESWIFT_CACHE_TAG } from './cache'\n\nexport const fetch: HttpFetch = (url, init) =>\n globalThis.fetch(url, { ...init, next: { tags: [MAKESWIFT_CACHE_TAG] } })\n"],"mappings":"AAEA,SAAS,2BAA2B;AAE7B,MAAM,QAAmB,CAAC,KAAK,SACpC,WAAW,MAAM,KAAK,EAAE,GAAG,MAAM,MAAM,EAAE,MAAM,CAAC,mBAAmB,EAAE,EAAE,CAAC;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as Props from "./descriptors";
|
|
2
|
+
import { TableFormFieldsMessageType } from "./instances";
|
|
3
|
+
import * as Introspection from "./introspection";
|
|
4
|
+
import { DELETED_PROP_CONTROLLER_TYPES } from "./deleted";
|
|
5
|
+
export {
|
|
6
|
+
DELETED_PROP_CONTROLLER_TYPES,
|
|
7
|
+
Introspection,
|
|
8
|
+
Props,
|
|
9
|
+
TableFormFieldsMessageType
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/prop-controllers/index.ts"],"sourcesContent":["export type { Device, DeviceOverride, ResponsiveValue } from '@makeswift/controls'\n\nexport type {\n Data,\n Descriptor as PropControllerDescriptor,\n DescriptorValueType as PropControllerDescriptorValueType,\n PanelDescriptor,\n PanelDescriptorType,\n PanelDescriptorValueType,\n} from './descriptors'\n\nexport * as Props from './descriptors'\nexport type { PropControllerMessage, TableFormFieldsMessage } from './instances'\nexport { TableFormFieldsMessageType } from './instances'\nexport * as Introspection from './introspection'\nexport { DELETED_PROP_CONTROLLER_TYPES } from './deleted'\n"],"mappings":"AAWA,YAAY,WAAW;AAEvB,SAAS,kCAAkC;AAC3C,YAAY,mBAAmB;AAC/B,SAAS,qCAAqC;","names":[]}
|