adnbn 0.13.0 → 0.15.0
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/cli/builders/app/build.d.ts +7 -0
- package/dist/cli/builders/app/build.js +58 -0
- package/dist/cli/builders/app/build.js.map +1 -0
- package/dist/cli/builders/app/index.d.ts +6 -1
- package/dist/cli/builders/app/index.js +49 -14
- package/dist/cli/builders/app/index.js.map +1 -1
- package/dist/cli/builders/app/{command.d.ts → watch.d.ts} +0 -1
- package/dist/cli/builders/app/{command.js → watch.js} +1 -26
- package/dist/cli/builders/app/watch.js.map +1 -0
- package/dist/cli/builders/manifest/ManifestBase.d.ts +8 -1
- package/dist/cli/builders/manifest/ManifestBase.js +30 -0
- package/dist/cli/builders/manifest/ManifestBase.js.map +1 -1
- package/dist/cli/builders/manifest/ManifestV2.js +3 -15
- package/dist/cli/builders/manifest/ManifestV2.js.map +1 -1
- package/dist/cli/builders/manifest/ManifestV3.js +3 -15
- package/dist/cli/builders/manifest/ManifestV3.js.map +1 -1
- package/dist/cli/bundler/plugins/entrypoint/EntrypointPlugin.js +4 -0
- package/dist/cli/bundler/plugins/entrypoint/EntrypointPlugin.js.map +1 -1
- package/dist/cli/entrypoint/finder/AbstractOverrideFinder.d.ts +15 -0
- package/dist/cli/entrypoint/finder/AbstractOverrideFinder.js +20 -0
- package/dist/cli/entrypoint/finder/AbstractOverrideFinder.js.map +1 -0
- package/dist/cli/entrypoint/finder/AbstractViewFinder.d.ts +6 -1
- package/dist/cli/entrypoint/finder/AbstractViewFinder.js +15 -0
- package/dist/cli/entrypoint/finder/AbstractViewFinder.js.map +1 -1
- package/dist/cli/entrypoint/finder/BookmarksFinder.d.ts +9 -0
- package/dist/cli/entrypoint/finder/BookmarksFinder.js +18 -0
- package/dist/cli/entrypoint/finder/BookmarksFinder.js.map +1 -0
- package/dist/cli/entrypoint/finder/CommandFinder.d.ts +4 -0
- package/dist/cli/entrypoint/finder/CommandFinder.js +20 -6
- package/dist/cli/entrypoint/finder/CommandFinder.js.map +1 -1
- package/dist/cli/entrypoint/finder/HistoryFinder.d.ts +9 -0
- package/dist/cli/entrypoint/finder/HistoryFinder.js +18 -0
- package/dist/cli/entrypoint/finder/HistoryFinder.js.map +1 -0
- package/dist/cli/entrypoint/finder/NewtabFinder.d.ts +9 -0
- package/dist/cli/entrypoint/finder/NewtabFinder.js +18 -0
- package/dist/cli/entrypoint/finder/NewtabFinder.js.map +1 -0
- package/dist/cli/entrypoint/finder/OptionsFinder.d.ts +2 -2
- package/dist/cli/entrypoint/finder/OptionsFinder.js +2 -2
- package/dist/cli/entrypoint/finder/OptionsFinder.js.map +1 -1
- package/dist/cli/entrypoint/finder/PageFinder.js +1 -1
- package/dist/cli/entrypoint/finder/PageFinder.js.map +1 -1
- package/dist/cli/entrypoint/finder/PopupFinder.d.ts +2 -2
- package/dist/cli/entrypoint/finder/PopupFinder.js +2 -2
- package/dist/cli/entrypoint/finder/PopupFinder.js.map +1 -1
- package/dist/cli/entrypoint/finder/SidebarFinder.d.ts +2 -2
- package/dist/cli/entrypoint/finder/SidebarFinder.js +2 -2
- package/dist/cli/entrypoint/finder/SidebarFinder.js.map +1 -1
- package/dist/cli/entrypoint/finder/ViewCspFinder.d.ts +2 -3
- package/dist/cli/entrypoint/finder/ViewCspFinder.js.map +1 -1
- package/dist/cli/entrypoint/finder/ViewPermissionsFinder.d.ts +22 -0
- package/dist/cli/entrypoint/finder/ViewPermissionsFinder.js +43 -0
- package/dist/cli/entrypoint/finder/ViewPermissionsFinder.js.map +1 -0
- package/dist/cli/entrypoint/finder/index.d.ts +5 -0
- package/dist/cli/entrypoint/finder/index.js +50 -40
- package/dist/cli/entrypoint/finder/index.js.map +1 -1
- package/dist/cli/entrypoint/name/NameGenerator.d.ts +2 -0
- package/dist/cli/entrypoint/name/NameGenerator.js +5 -1
- package/dist/cli/entrypoint/name/NameGenerator.js.map +1 -1
- package/dist/cli/entrypoint/parser/AbstractOverrideParser.d.ts +9 -0
- package/dist/cli/entrypoint/parser/AbstractOverrideParser.js +11 -0
- package/dist/cli/entrypoint/parser/AbstractOverrideParser.js.map +1 -0
- package/dist/cli/entrypoint/parser/BackgroundParser.js +3 -6
- package/dist/cli/entrypoint/parser/BackgroundParser.js.map +1 -1
- package/dist/cli/entrypoint/parser/BookmarksParser.d.ts +5 -0
- package/dist/cli/entrypoint/parser/BookmarksParser.js +10 -0
- package/dist/cli/entrypoint/parser/BookmarksParser.js.map +1 -0
- package/dist/cli/entrypoint/parser/HistoryParser.d.ts +5 -0
- package/dist/cli/entrypoint/parser/HistoryParser.js +10 -0
- package/dist/cli/entrypoint/parser/HistoryParser.js.map +1 -0
- package/dist/cli/entrypoint/parser/NewtabParser.d.ts +5 -0
- package/dist/cli/entrypoint/parser/NewtabParser.js +10 -0
- package/dist/cli/entrypoint/parser/NewtabParser.js.map +1 -0
- package/dist/cli/entrypoint/parser/OptionsParser.js +2 -1
- package/dist/cli/entrypoint/parser/OptionsParser.js.map +1 -1
- package/dist/cli/entrypoint/parser/PopupParser.js +2 -1
- package/dist/cli/entrypoint/parser/PopupParser.js.map +1 -1
- package/dist/cli/entrypoint/parser/SidebarParser.js +2 -1
- package/dist/cli/entrypoint/parser/SidebarParser.js.map +1 -1
- package/dist/cli/entrypoint/parser/ViewCspParser.d.ts +1 -1
- package/dist/cli/entrypoint/parser/ViewParser.d.ts +1 -1243
- package/dist/cli/entrypoint/parser/ViewParser.js +2 -72
- package/dist/cli/entrypoint/parser/ViewParser.js.map +1 -1
- package/dist/cli/entrypoint/parser/index.d.ts +4 -0
- package/dist/cli/entrypoint/parser/index.js +28 -20
- package/dist/cli/entrypoint/parser/index.js.map +1 -1
- package/dist/cli/entrypoint/parser/schemas/html.d.ts +903 -0
- package/dist/cli/entrypoint/parser/schemas/html.js +64 -0
- package/dist/cli/entrypoint/parser/schemas/html.js.map +1 -0
- package/dist/cli/entrypoint/parser/schemas/permissions.d.ts +23 -0
- package/dist/cli/entrypoint/parser/schemas/permissions.js +11 -0
- package/dist/cli/entrypoint/parser/schemas/permissions.js.map +1 -0
- package/dist/cli/index.js +16 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/plugins/action.d.ts +2 -0
- package/dist/cli/plugins/action.js +13 -0
- package/dist/cli/plugins/action.js.map +1 -0
- package/dist/cli/plugins/index.d.ts +2 -0
- package/dist/cli/plugins/index.js +52 -48
- package/dist/cli/plugins/index.js.map +1 -1
- package/dist/cli/plugins/offscreen/index.js +2 -4
- package/dist/cli/plugins/offscreen/index.js.map +1 -1
- package/dist/cli/plugins/options/index.js +1 -1
- package/dist/cli/plugins/options/index.js.map +1 -1
- package/dist/cli/plugins/override/Override.d.ts +31 -0
- package/dist/cli/plugins/override/Override.js +112 -0
- package/dist/cli/plugins/override/Override.js.map +1 -0
- package/dist/cli/plugins/override/index.d.ts +2 -0
- package/dist/cli/plugins/override/index.js +48 -0
- package/dist/cli/plugins/override/index.js.map +1 -0
- package/dist/cli/plugins/popup/index.js +1 -1
- package/dist/cli/plugins/popup/index.js.map +1 -1
- package/dist/cli/plugins/sidebar/index.js +1 -2
- package/dist/cli/plugins/sidebar/index.js.map +1 -1
- package/dist/cli/plugins/style/index.js +34 -31
- package/dist/cli/plugins/style/index.js.map +1 -1
- package/dist/cli/plugins/style/rebase.d.ts +14 -0
- package/dist/cli/plugins/style/rebase.js +63 -0
- package/dist/cli/plugins/style/rebase.js.map +1 -0
- package/dist/cli/plugins/style/utils.d.ts +5 -1
- package/dist/cli/plugins/style/utils.js +21 -8
- package/dist/cli/plugins/style/utils.js.map +1 -1
- package/dist/cli/plugins/typescript/TypescriptConfig.js +2 -2
- package/dist/cli/plugins/typescript/TypescriptConfig.js.map +1 -1
- package/dist/cli/plugins/view/View.d.ts +1 -1
- package/dist/cli/plugins/view/View.js +2 -10
- package/dist/cli/plugins/view/View.js.map +1 -1
- package/dist/cli/plugins/view/index.js +10 -1
- package/dist/cli/plugins/view/index.js.map +1 -1
- package/dist/cli/resolvers/bundler.js +9 -1
- package/dist/cli/resolvers/bundler.js.map +1 -1
- package/dist/cli/resolvers/config.js +7 -1
- package/dist/cli/resolvers/config.js.map +1 -1
- package/dist/cli/utils/path.js +1 -1
- package/dist/cli/utils/path.js.map +1 -1
- package/dist/cli/virtual/index.js +14 -17
- package/dist/cli/virtual/virtual.d.ts +7 -127
- package/dist/entry/background/Builder.js +1 -1
- package/dist/entry/background/Builder.js.map +1 -1
- package/dist/entry/background/index.d.ts +1 -1
- package/dist/entry/background/index.js +3 -2
- package/dist/entry/background/index.js.map +1 -1
- package/dist/entry/background/resolvers/definition.d.ts +5 -1
- package/dist/entry/background/resolvers/definition.js +15 -4
- package/dist/entry/background/resolvers/definition.js.map +1 -1
- package/dist/entry/command/Builder.js +1 -1
- package/dist/entry/command/Builder.js.map +1 -1
- package/dist/entry/command/index.d.ts +1 -1
- package/dist/entry/command/index.js +3 -2
- package/dist/entry/command/index.js.map +1 -1
- package/dist/entry/command/resolvers/definition.d.ts +6 -2
- package/dist/entry/command/resolvers/definition.js +14 -4
- package/dist/entry/command/resolvers/definition.js.map +1 -1
- package/dist/entry/content/adapters/react/Builder.js +4 -2
- package/dist/entry/content/adapters/react/Builder.js.map +1 -1
- package/dist/entry/content/adapters/react/Node.js +11 -6
- package/dist/entry/content/adapters/react/Node.js.map +1 -1
- package/dist/entry/content/adapters/react/definition.js +3 -2
- package/dist/entry/content/adapters/react/definition.js.map +1 -1
- package/dist/entry/content/adapters/vanilla/Builder.js +2 -2
- package/dist/entry/content/adapters/vanilla/Builder.js.map +1 -1
- package/dist/entry/content/adapters/vanilla/Node.js +3 -5
- package/dist/entry/content/adapters/vanilla/Node.js.map +1 -1
- package/dist/entry/content/adapters/vanilla/definition.js +2 -2
- package/dist/entry/content/adapters/vanilla/definition.js.map +1 -1
- package/dist/entry/content/lifecycle/Builder.js +5 -9
- package/dist/entry/content/lifecycle/Builder.js.map +1 -1
- package/dist/entry/core/react.d.ts +6 -0
- package/dist/entry/core/react.js +16 -0
- package/dist/entry/core/react.js.map +1 -0
- package/dist/entry/core/render.d.ts +5 -0
- package/dist/entry/core/render.js +16 -0
- package/dist/entry/core/render.js.map +1 -0
- package/dist/entry/offscreen/Builder.d.ts +6 -7
- package/dist/entry/offscreen/Builder.js +12 -13
- package/dist/entry/offscreen/Builder.js.map +1 -1
- package/dist/entry/offscreen/TransportBuilder.d.ts +1 -1
- package/dist/entry/offscreen/TransportBuilder.js +4 -3
- package/dist/entry/offscreen/TransportBuilder.js.map +1 -1
- package/dist/entry/offscreen/index.d.ts +5 -2
- package/dist/entry/offscreen/index.js +8 -2
- package/dist/entry/offscreen/index.js.map +1 -1
- package/dist/entry/offscreen/resolvers/definition.d.ts +4 -0
- package/dist/entry/offscreen/resolvers/definition.js +8 -0
- package/dist/entry/offscreen/resolvers/definition.js.map +1 -0
- package/dist/entry/relay/Builder.d.ts +4 -3
- package/dist/entry/relay/Builder.js.map +1 -1
- package/dist/entry/relay/index.d.ts +4 -3
- package/dist/entry/relay/index.js.map +1 -1
- package/dist/entry/relay/resolvers/definition.d.ts +1 -1
- package/dist/entry/relay/resolvers/definition.js +2 -10
- package/dist/entry/relay/resolvers/definition.js.map +1 -1
- package/dist/entry/sandbox/Builder.d.ts +6 -7
- package/dist/entry/sandbox/Builder.js +8 -12
- package/dist/entry/sandbox/Builder.js.map +1 -1
- package/dist/entry/sandbox/TransportBuilder.d.ts +1 -1
- package/dist/entry/sandbox/TransportBuilder.js +4 -3
- package/dist/entry/sandbox/TransportBuilder.js.map +1 -1
- package/dist/entry/sandbox/index.d.ts +7 -2
- package/dist/entry/sandbox/index.js +10 -4
- package/dist/entry/sandbox/index.js.map +1 -1
- package/dist/entry/sandbox/resolvers/definition.d.ts +4 -0
- package/dist/entry/sandbox/resolvers/definition.js +8 -0
- package/dist/entry/sandbox/resolvers/definition.js.map +1 -0
- package/dist/entry/service/index.d.ts +1 -0
- package/dist/entry/service/index.js +3 -1
- package/dist/entry/service/index.js.map +1 -1
- package/dist/entry/service/resolvers/definition.d.ts +3 -0
- package/dist/entry/service/resolvers/definition.js +8 -0
- package/dist/entry/service/resolvers/definition.js.map +1 -0
- package/dist/entry/transport/AbstractBuilder.js +1 -1
- package/dist/entry/transport/AbstractBuilder.js.map +1 -1
- package/dist/entry/transport/resolvers/definition.d.ts +7 -5
- package/dist/entry/transport/resolvers/definition.js +15 -4
- package/dist/entry/transport/resolvers/definition.js.map +1 -1
- package/dist/entry/view/{core/Builder.d.ts → Builder.d.ts} +9 -4
- package/dist/entry/view/Builder.js +62 -0
- package/dist/entry/view/Builder.js.map +1 -0
- package/dist/entry/view/adapters/react/Builder.d.ts +6 -7
- package/dist/entry/view/adapters/react/Builder.js +20 -23
- package/dist/entry/view/adapters/react/Builder.js.map +1 -1
- package/dist/entry/view/adapters/react/definition.d.ts +2 -0
- package/dist/entry/view/adapters/react/definition.js +13 -0
- package/dist/entry/view/adapters/react/definition.js.map +1 -0
- package/dist/entry/view/adapters/react/index.d.ts +2 -1
- package/dist/entry/view/adapters/react/index.js +3 -1
- package/dist/entry/view/adapters/react/index.js.map +1 -1
- package/dist/entry/view/adapters/vanilla/Builder.d.ts +5 -6
- package/dist/entry/view/adapters/vanilla/Builder.js +14 -25
- package/dist/entry/view/adapters/vanilla/Builder.js.map +1 -1
- package/dist/entry/view/adapters/vanilla/definition.d.ts +2 -0
- package/dist/entry/view/adapters/vanilla/definition.js +9 -0
- package/dist/entry/view/adapters/vanilla/definition.js.map +1 -0
- package/dist/entry/view/adapters/vanilla/index.d.ts +2 -1
- package/dist/entry/view/adapters/vanilla/index.js +3 -1
- package/dist/entry/view/adapters/vanilla/index.js.map +1 -1
- package/dist/entry/view/{core/resolvers → resolvers}/container.d.ts +1 -1
- package/dist/entry/view/resolvers/container.js.map +1 -0
- package/dist/entry/view/resolvers/definition.d.ts +3 -0
- package/dist/entry/view/resolvers/definition.js +18 -0
- package/dist/entry/view/resolvers/definition.js.map +1 -0
- package/dist/locale/adapters/react/hooks/use-locale.js +1 -1
- package/dist/locale/adapters/react/hooks/use-locale.js.map +1 -1
- package/dist/locale/adapters/react/hooks/use-native-locale.js +1 -1
- package/dist/locale/adapters/react/hooks/use-native-locale.js.map +1 -1
- package/dist/locale/index.d.ts +1 -0
- package/dist/locale/index.js +3 -1
- package/dist/locale/index.js.map +1 -1
- package/dist/locale/{providers → observers}/ObservableLocale.js +2 -2
- package/dist/locale/observers/ObservableLocale.js.map +1 -0
- package/dist/locale/observers/index.d.ts +1 -0
- package/dist/locale/observers/index.js +5 -0
- package/dist/locale/observers/index.js.map +1 -0
- package/dist/locale/providers/index.d.ts +0 -1
- package/dist/locale/providers/index.js +1 -3
- package/dist/locale/providers/index.js.map +1 -1
- package/dist/main/config.d.ts +1 -0
- package/dist/main/config.js.map +1 -1
- package/dist/main/index.d.ts +2 -0
- package/dist/main/index.js +2 -0
- package/dist/main/index.js.map +1 -1
- package/dist/main/override.d.ts +5 -0
- package/dist/main/override.js +15 -0
- package/dist/main/override.js.map +1 -0
- package/dist/main/permissions.d.ts +1 -0
- package/dist/main/permissions.js +1 -0
- package/dist/main/relay.d.ts +1 -0
- package/dist/main/relay.js +2 -0
- package/dist/main/relay.js.map +1 -1
- package/dist/main/view.d.ts +1 -1
- package/dist/message/adapters/react/index.d.ts +1 -1
- package/dist/message/adapters/react/index.js +1 -1
- package/dist/message/adapters/react/index.js.map +1 -1
- package/dist/message/adapters/react/{useMessageHandler.js → use-message-handler.js} +6 -4
- package/dist/message/adapters/react/use-message-handler.js.map +1 -0
- package/dist/message/handlers/MapHandler.js +2 -1
- package/dist/message/handlers/MapHandler.js.map +1 -1
- package/dist/message/handlers/SingleHandler.js +2 -1
- package/dist/message/handlers/SingleHandler.js.map +1 -1
- package/dist/message/providers/Message.js +1 -1
- package/dist/message/providers/Message.js.map +1 -1
- package/dist/relay/RelayPermission.js +8 -2
- package/dist/relay/RelayPermission.js.map +1 -1
- package/dist/relay/adapters/RelayScriptingAdapter.d.ts +1 -0
- package/dist/relay/adapters/RelayScriptingAdapter.js +30 -64
- package/dist/relay/adapters/RelayScriptingAdapter.js.map +1 -1
- package/dist/relay/adapters/invoke-relay.d.ts +3 -0
- package/dist/relay/adapters/invoke-relay.js +69 -0
- package/dist/relay/adapters/invoke-relay.js.map +1 -0
- package/dist/relay/adapters/scripting-response.d.ts +12 -0
- package/dist/relay/adapters/scripting-response.js +1 -0
- package/dist/relay/adapters/scripting-response.js.map +1 -0
- package/dist/relay/result.d.ts +3 -0
- package/dist/relay/result.js +7 -0
- package/dist/relay/result.js.map +1 -1
- package/dist/types/action.d.ts +8 -0
- package/dist/types/action.js +1 -0
- package/dist/types/action.js.map +1 -0
- package/dist/types/background.d.ts +2 -8
- package/dist/types/background.js.map +1 -1
- package/dist/types/config.d.ts +17 -1
- package/dist/types/content/definition.d.ts +2 -1
- package/dist/types/entrypoint.d.ts +5 -1
- package/dist/types/entrypoint.js +3 -0
- package/dist/types/entrypoint.js.map +1 -1
- package/dist/types/manifest.d.ts +23 -2
- package/dist/types/manifest.js.map +1 -1
- package/dist/types/offscreen.d.ts +2 -2
- package/dist/types/offscreen.js.map +1 -1
- package/dist/types/options.d.ts +3 -2
- package/dist/types/override.d.ts +22 -0
- package/dist/types/override.js +1 -0
- package/dist/types/override.js.map +1 -0
- package/dist/types/page.d.ts +1 -1
- package/dist/types/permissions.d.ts +39 -0
- package/dist/types/permissions.js +1 -0
- package/dist/types/permissions.js.map +1 -0
- package/dist/types/plugin.d.ts +4 -1
- package/dist/types/popup.d.ts +5 -3
- package/dist/types/sandbox.d.ts +2 -2
- package/dist/types/sandbox.js.map +1 -1
- package/dist/types/sidebar.d.ts +5 -3
- package/dist/types/sidebar.js.map +1 -1
- package/dist/types/view/adapters/index.d.ts +2 -0
- package/dist/types/view/adapters/index.js +1 -0
- package/dist/types/view/adapters/index.js.map +1 -0
- package/dist/types/view/adapters/react.d.ts +4 -0
- package/dist/types/view/adapters/react.js +1 -0
- package/dist/types/view/adapters/react.js.map +1 -0
- package/dist/types/view/adapters/vanilla.d.ts +1 -0
- package/dist/types/view/adapters/vanilla.js +1 -0
- package/dist/types/view/adapters/vanilla.js.map +1 -0
- package/dist/types/{view.d.ts → view/common.d.ts} +2 -14
- package/dist/types/view/common.js +1 -0
- package/dist/types/view/common.js.map +1 -0
- package/dist/types/view/definition.d.ts +15 -0
- package/dist/types/view/definition.js +1 -0
- package/dist/types/view/definition.js.map +1 -0
- package/dist/types/view/index.d.ts +4 -0
- package/dist/types/view/index.js +1 -0
- package/dist/types/view/index.js.map +1 -0
- package/dist/types/view/render.d.ts +7 -0
- package/dist/types/view/render.js +1 -0
- package/dist/types/view/render.js.map +1 -0
- package/package.json +18 -31
- package/dist/cli/builders/app/command.js.map +0 -1
- package/dist/entry/background/resolvers/index.d.ts +0 -1
- package/dist/entry/background/resolvers/index.js +0 -2
- package/dist/entry/background/resolvers/index.js.map +0 -1
- package/dist/entry/command/resolvers/index.d.ts +0 -1
- package/dist/entry/command/resolvers/index.js +0 -2
- package/dist/entry/command/resolvers/index.js.map +0 -1
- package/dist/entry/content/adapters/vanilla/utils.d.ts +0 -1
- package/dist/entry/content/adapters/vanilla/utils.js +0 -7
- package/dist/entry/content/adapters/vanilla/utils.js.map +0 -1
- package/dist/entry/content/resolvers/index.d.ts +0 -6
- package/dist/entry/content/resolvers/index.js +0 -7
- package/dist/entry/content/resolvers/index.js.map +0 -1
- package/dist/entry/transport/index.d.ts +0 -1
- package/dist/entry/transport/index.js +0 -2
- package/dist/entry/transport/index.js.map +0 -1
- package/dist/entry/transport/resolvers/index.d.ts +0 -1
- package/dist/entry/transport/resolvers/index.js +0 -2
- package/dist/entry/transport/resolvers/index.js.map +0 -1
- package/dist/entry/view/adapters/react/resolvers/render.d.ts +0 -2
- package/dist/entry/view/adapters/react/resolvers/render.js +0 -11
- package/dist/entry/view/adapters/react/resolvers/render.js.map +0 -1
- package/dist/entry/view/core/Builder.js +0 -35
- package/dist/entry/view/core/Builder.js.map +0 -1
- package/dist/entry/view/core/resolvers/container.js.map +0 -1
- package/dist/entry/view/core/resolvers/definition.d.ts +0 -3
- package/dist/entry/view/core/resolvers/definition.js +0 -12
- package/dist/entry/view/core/resolvers/definition.js.map +0 -1
- package/dist/entry/view/core/resolvers/render.d.ts +0 -3
- package/dist/entry/view/core/resolvers/render.js +0 -18
- package/dist/entry/view/core/resolvers/render.js.map +0 -1
- package/dist/entry/view/index.d.ts +0 -1
- package/dist/entry/view/index.js +0 -2
- package/dist/entry/view/index.js.map +0 -1
- package/dist/locale/providers/ObservableLocale.js.map +0 -1
- package/dist/message/adapters/react/useMessageHandler.js.map +0 -1
- package/dist/types/view.js +0 -1
- package/scripts/clean-dist.js +0 -7
- package/scripts/copy-dts.js +0 -29
- package/scripts/merge-coverage.mjs +0 -12
- package/scripts/pre-commit.mjs +0 -22
- package/scripts/test-inventory.mjs +0 -38
- package/scripts/test-run.mjs +0 -25
- /package/dist/cli/virtual/{transport.d.ts → service.d.ts} +0 -0
- /package/dist/entry/view/{core/resolvers → resolvers}/container.js +0 -0
- /package/dist/locale/{providers → observers}/ObservableLocale.d.ts +0 -0
- /package/dist/{types/view.js.map → main/permissions.js.map} +0 -0
- /package/dist/message/adapters/react/{useMessageHandler.d.ts → use-message-handler.d.ts} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const
|
|
2
|
-
return
|
|
1
|
+
const isDefinitionObject = (value) => {
|
|
2
|
+
return value !== null && typeof value === "object" && value.constructor === Object;
|
|
3
3
|
};
|
|
4
4
|
const isValidCommandExecuteFunction = (execute) => {
|
|
5
5
|
return execute && typeof execute === "function";
|
|
@@ -7,9 +7,19 @@ const isValidCommandExecuteFunction = (execute) => {
|
|
|
7
7
|
const isValidCommandName = (name) => {
|
|
8
8
|
return name && typeof name === "string" && name.trim().length > 0;
|
|
9
9
|
};
|
|
10
|
+
const resolveDefinition = (module, name) => {
|
|
11
|
+
const { default: defaultDefinition, ...namedDefinition } = module;
|
|
12
|
+
let definition = namedDefinition;
|
|
13
|
+
if (isDefinitionObject(defaultDefinition)) {
|
|
14
|
+
definition = { ...definition, ...defaultDefinition };
|
|
15
|
+
} else if (isValidCommandExecuteFunction(defaultDefinition)) {
|
|
16
|
+
definition = { ...definition, execute: defaultDefinition };
|
|
17
|
+
}
|
|
18
|
+
return { ...definition, name };
|
|
19
|
+
};
|
|
10
20
|
export {
|
|
11
|
-
isValidCommandDefinition,
|
|
12
21
|
isValidCommandExecuteFunction,
|
|
13
|
-
isValidCommandName
|
|
22
|
+
isValidCommandName,
|
|
23
|
+
resolveDefinition
|
|
14
24
|
};
|
|
15
25
|
//# sourceMappingURL=definition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/entry/command/resolvers/definition.ts"],"sourcesContent":["import {CommandDefinition, CommandExecute} from \"@typing/command\";\n\
|
|
1
|
+
{"version":3,"sources":["../../../../src/entry/command/resolvers/definition.ts"],"sourcesContent":["import {CommandDefinition, CommandExecute, CommandUnresolvedDefinition} from \"@typing/command\";\n\nconst isDefinitionObject = (value: unknown): value is CommandDefinition => {\n return value !== null && typeof value === \"object\" && value.constructor === Object;\n};\n\nexport const isValidCommandExecuteFunction = (execute: any): execute is CommandExecute => {\n return execute && typeof execute === \"function\";\n};\n\nexport const isValidCommandName = (name: any): name is string => {\n return name && typeof name === \"string\" && name.trim().length > 0;\n};\n\n/**\n * Merge command exports without executing them: default options override named exports,\n * and a default function is the execute handler. The build supplies the authoritative name.\n */\nexport const resolveDefinition = (module: object, name: string): CommandUnresolvedDefinition => {\n const {default: defaultDefinition, ...namedDefinition} = module as Record<string, unknown>;\n\n let definition = namedDefinition as CommandUnresolvedDefinition;\n\n if (isDefinitionObject(defaultDefinition)) {\n definition = {...definition, ...defaultDefinition};\n } else if (isValidCommandExecuteFunction(defaultDefinition)) {\n definition = {...definition, execute: defaultDefinition};\n }\n\n return {...definition, name};\n};\n"],"mappings":"AAEA,MAAM,qBAAqB,CAAC,UAA+C;AACvE,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,gBAAgB;AAChF;AAEO,MAAM,gCAAgC,CAAC,YAA4C;AACtF,SAAO,WAAW,OAAO,YAAY;AACzC;AAEO,MAAM,qBAAqB,CAAC,SAA8B;AAC7D,SAAO,QAAQ,OAAO,SAAS,YAAY,KAAK,KAAK,EAAE,SAAS;AACpE;AAMO,MAAM,oBAAoB,CAAC,QAAgB,SAA8C;AAC5F,QAAM,EAAC,SAAS,mBAAmB,GAAG,gBAAe,IAAI;AAEzD,MAAI,aAAa;AAEjB,MAAI,mBAAmB,iBAAiB,GAAG;AACvC,iBAAa,EAAC,GAAG,YAAY,GAAG,kBAAiB;AAAA,EACrD,WAAW,8BAA8B,iBAAiB,GAAG;AACzD,iBAAa,EAAC,GAAG,YAAY,SAAS,kBAAiB;AAAA,EAC3D;AAEA,SAAO,EAAC,GAAG,YAAY,KAAI;AAC/B;","names":[]}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { createElement
|
|
1
|
+
import { createElement } from "react";
|
|
2
|
+
import { isDomRenderValue } from "./../../../../entry/core/render.js";
|
|
3
|
+
import { isReactRenderValue } from "./../../../../entry/core/react.js";
|
|
2
4
|
import ReactNode from "./Node.js";
|
|
3
5
|
import MountBuilder from "../../lifecycle/MountBuilder.js";
|
|
4
6
|
class Builder extends MountBuilder {
|
|
@@ -8,7 +10,7 @@ class Builder extends MountBuilder {
|
|
|
8
10
|
}
|
|
9
11
|
return (props) => {
|
|
10
12
|
const value = typeof render === "function" ? createElement(render, props) : render;
|
|
11
|
-
return
|
|
13
|
+
return isDomRenderValue(value) || isReactRenderValue(value) ? value : void 0;
|
|
12
14
|
};
|
|
13
15
|
}
|
|
14
16
|
createRenderer(node, render, props, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/entry/content/adapters/react/Builder.ts"],"sourcesContent":["import {createElement
|
|
1
|
+
{"version":3,"sources":["../../../../../src/entry/content/adapters/react/Builder.ts"],"sourcesContent":["import {createElement} from \"react\";\n\nimport {isDomRenderValue} from \"@entry/core/render\";\nimport {isReactRenderValue} from \"@entry/core/react\";\n\nimport ReactNode from \"./Node\";\n\nimport MountBuilder from \"../../lifecycle/MountBuilder\";\nimport type {ContentScriptRenderOptions} from \"../../lifecycle/types\";\n\nimport type {\n ContentScriptNode,\n ContentScriptIsolation,\n ContentScriptProps,\n ContentScriptRenderHandler,\n ContentScriptRenderReactComponent,\n ContentScriptRenderValue,\n} from \"@typing/content\";\n\nexport default class Builder<\n Data = unknown,\n Isolation extends `${ContentScriptIsolation}` = `${ContentScriptIsolation}`,\n> extends MountBuilder<Data, Isolation> {\n protected resolveRender(\n render?: ContentScriptRenderValue<Data> | ContentScriptRenderHandler<Data>\n ): true | ContentScriptRenderHandler<Data> | undefined {\n if (render === true || render === undefined) {\n return render;\n }\n\n return props => {\n // Functions in React entrypoints are components; React owns their invocation and hooks.\n const value =\n typeof render === \"function\"\n ? createElement(render as ContentScriptRenderReactComponent<Data>, props)\n : render;\n\n return isDomRenderValue(value) || isReactRenderValue(value) ? value : undefined;\n };\n }\n\n protected createRenderer(\n node: ContentScriptNode,\n render: ContentScriptRenderHandler<Data>,\n props: () => ContentScriptProps<Data>,\n options: ContentScriptRenderOptions\n ): ReactNode<Data> {\n return new ReactNode(node, render, props, options);\n }\n}\n"],"mappings":"AAAA,SAAQ,qBAAoB;AAE5B,SAAQ,wBAAuB;AAC/B,SAAQ,0BAAyB;AAEjC,OAAO,eAAe;AAEtB,OAAO,kBAAkB;AAYzB,MAAO,gBAGG,aAA8B;AAAA,EAC1B,cACN,QACmD;AACnD,QAAI,WAAW,QAAQ,WAAW,QAAW;AACzC,aAAO;AAAA,IACX;AAEA,WAAO,WAAS;AAEZ,YAAM,QACF,OAAO,WAAW,aACZ,cAAc,QAAmD,KAAK,IACtE;AAEV,aAAO,iBAAiB,KAAK,KAAK,mBAAmB,KAAK,IAAI,QAAQ;AAAA,IAC1E;AAAA,EACJ;AAAA,EAEU,eACN,MACA,QACA,OACA,SACe;AACf,WAAO,IAAI,UAAU,MAAM,QAAQ,OAAO,OAAO;AAAA,EACrD;AACJ;","names":[]}
|
|
@@ -1,15 +1,20 @@
|
|
|
1
|
-
import { isValidElement } from "react";
|
|
2
1
|
import { createRoot } from "react-dom/client";
|
|
2
|
+
import { isDomRenderValue, renderDomValue } from "./../../../../entry/core/render.js";
|
|
3
|
+
import { isReactRenderValue } from "./../../../../entry/core/react.js";
|
|
3
4
|
import { RenderNode } from "../../lifecycle/nodes/index.js";
|
|
4
5
|
class Node extends RenderNode {
|
|
5
6
|
root;
|
|
6
7
|
render(value, target) {
|
|
7
|
-
if (
|
|
8
|
-
|
|
8
|
+
if (isDomRenderValue(value)) {
|
|
9
|
+
renderDomValue(target, value);
|
|
10
|
+
return true;
|
|
9
11
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
if (isReactRenderValue(value)) {
|
|
13
|
+
this.root = createRoot(target);
|
|
14
|
+
this.root.render(value);
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
return false;
|
|
13
18
|
}
|
|
14
19
|
clear() {
|
|
15
20
|
const root = this.root;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/entry/content/adapters/react/Node.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../../../../src/entry/content/adapters/react/Node.ts"],"sourcesContent":["import {createRoot, type Root} from \"react-dom/client\";\n\nimport {isDomRenderValue, renderDomValue} from \"@entry/core/render\";\nimport {isReactRenderValue} from \"@entry/core/react\";\n\nimport {RenderNode} from \"../../lifecycle/nodes\";\n\nimport type {ContentScriptRenderValue} from \"@typing/content\";\n\nexport default class Node<Data = unknown> extends RenderNode<Data> {\n private root?: Root;\n\n protected render(value: ContentScriptRenderValue<Data> | undefined, target: Element): boolean {\n // Text is also iterable, so framework-independent values are checked before React nodes.\n if (isDomRenderValue(value)) {\n renderDomValue(target, value);\n\n return true;\n }\n\n if (isReactRenderValue(value)) {\n this.root = createRoot(target);\n this.root.render(value);\n\n return true;\n }\n\n return false;\n }\n\n protected clear(): void {\n const root = this.root;\n this.root = undefined;\n root?.unmount();\n }\n}\n"],"mappings":"AAAA,SAAQ,kBAA4B;AAEpC,SAAQ,kBAAkB,sBAAqB;AAC/C,SAAQ,0BAAyB;AAEjC,SAAQ,kBAAiB;AAIzB,MAAO,aAA2C,WAAiB;AAAA,EACvD;AAAA,EAEE,OAAO,OAAmD,QAA0B;AAE1F,QAAI,iBAAiB,KAAK,GAAG;AACzB,qBAAe,QAAQ,KAAK;AAE5B,aAAO;AAAA,IACX;AAEA,QAAI,mBAAmB,KAAK,GAAG;AAC3B,WAAK,OAAO,WAAW,MAAM;AAC7B,WAAK,KAAK,OAAO,KAAK;AAEtB,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AAAA,EAEU,QAAc;AACpB,UAAM,OAAO,KAAK;AAClB,SAAK,OAAO;AACZ,iCAAM;AAAA,EACV;AACJ;","names":[]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isDomRenderValue } from "./../../../../entry/core/render.js";
|
|
2
|
+
import { isReactRenderValue } from "./../../../../entry/core/react.js";
|
|
2
3
|
import { mergeDefinition } from "../../resolvers/definition.js";
|
|
3
4
|
const resolveDefinition = (module) => {
|
|
4
5
|
return mergeDefinition(
|
|
5
6
|
module,
|
|
6
|
-
(value) => typeof value === "function" ||
|
|
7
|
+
(value) => typeof value === "function" || isDomRenderValue(value) || isReactRenderValue(value)
|
|
7
8
|
);
|
|
8
9
|
};
|
|
9
10
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/entry/content/adapters/react/definition.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../../../../src/entry/content/adapters/react/definition.ts"],"sourcesContent":["import {isDomRenderValue} from \"@entry/core/render\";\nimport {isReactRenderValue} from \"@entry/core/react\";\n\nimport {mergeDefinition} from \"../../resolvers/definition\";\n\nimport type {ContentScriptDefinition} from \"@typing/content\";\n\nexport const resolveDefinition = (module: object): ContentScriptDefinition => {\n return mergeDefinition(\n module,\n value => typeof value === \"function\" || isDomRenderValue(value) || isReactRenderValue(value)\n );\n};\n"],"mappings":"AAAA,SAAQ,wBAAuB;AAC/B,SAAQ,0BAAyB;AAEjC,SAAQ,uBAAsB;AAIvB,MAAM,oBAAoB,CAAC,WAA4C;AAC1E,SAAO;AAAA,IACH;AAAA,IACA,WAAS,OAAO,UAAU,cAAc,iBAAiB,KAAK,KAAK,mBAAmB,KAAK;AAAA,EAC/F;AACJ;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { isDomRenderValue } from "./../../../../entry/core/render.js";
|
|
1
2
|
import MountBuilder from "../../lifecycle/MountBuilder.js";
|
|
2
3
|
import VanillaNode from "./Node.js";
|
|
3
|
-
import { isValidRenderValue } from "./utils.js";
|
|
4
4
|
class Builder extends MountBuilder {
|
|
5
5
|
resolveRender(render) {
|
|
6
6
|
if (render === true || render === void 0) {
|
|
@@ -8,7 +8,7 @@ class Builder extends MountBuilder {
|
|
|
8
8
|
}
|
|
9
9
|
return (props) => {
|
|
10
10
|
const resolvedRender = typeof render === "function" ? render(props) : render;
|
|
11
|
-
if (!
|
|
11
|
+
if (!isDomRenderValue(resolvedRender)) {
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
14
|
return resolvedRender;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/entry/content/adapters/vanilla/Builder.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../../../../src/entry/content/adapters/vanilla/Builder.ts"],"sourcesContent":["import {isDomRenderValue} from \"@entry/core/render\";\n\nimport MountBuilder from \"../../lifecycle/MountBuilder\";\nimport VanillaNode from \"./Node\";\nimport type {ContentScriptRenderOptions} from \"../../lifecycle/types\";\n\nimport type {\n ContentScriptNode,\n ContentScriptIsolation,\n ContentScriptProps,\n ContentScriptRenderHandler,\n ContentScriptRenderValue,\n} from \"@typing/content\";\n\nexport default class Builder<\n Data = unknown,\n Isolation extends `${ContentScriptIsolation}` = `${ContentScriptIsolation}`,\n> extends MountBuilder<Data, Isolation> {\n protected resolveRender(\n render?: ContentScriptRenderValue<Data> | ContentScriptRenderHandler<Data>\n ): true | ContentScriptRenderHandler<Data> | undefined {\n if (render === true || render === undefined) {\n return render;\n }\n\n return props => {\n const resolvedRender = typeof render === \"function\" ? render(props) : render;\n\n if (!isDomRenderValue(resolvedRender)) {\n return;\n }\n\n return resolvedRender;\n };\n }\n\n protected createRenderer(\n node: ContentScriptNode,\n render: ContentScriptRenderHandler<Data>,\n props: () => ContentScriptProps<Data>,\n options: ContentScriptRenderOptions\n ): VanillaNode<Data> {\n return new VanillaNode(node, render, props, options);\n }\n}\n"],"mappings":"AAAA,SAAQ,wBAAuB;AAE/B,OAAO,kBAAkB;AACzB,OAAO,iBAAiB;AAWxB,MAAO,gBAGG,aAA8B;AAAA,EAC1B,cACN,QACmD;AACnD,QAAI,WAAW,QAAQ,WAAW,QAAW;AACzC,aAAO;AAAA,IACX;AAEA,WAAO,WAAS;AACZ,YAAM,iBAAiB,OAAO,WAAW,aAAa,OAAO,KAAK,IAAI;AAEtE,UAAI,CAAC,iBAAiB,cAAc,GAAG;AACnC;AAAA,MACJ;AAEA,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EAEU,eACN,MACA,QACA,OACA,SACiB;AACjB,WAAO,IAAI,YAAY,MAAM,QAAQ,OAAO,OAAO;AAAA,EACvD;AACJ;","names":[]}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
+
import { isDomRenderValue, renderDomValue } from "./../../../../entry/core/render.js";
|
|
1
2
|
import { RenderNode } from "../../lifecycle/nodes/index.js";
|
|
2
3
|
class Node extends RenderNode {
|
|
3
4
|
render(value, target) {
|
|
4
|
-
if (value
|
|
5
|
-
target.appendChild(value);
|
|
6
|
-
} else if (typeof value === "string" || typeof value === "number") {
|
|
7
|
-
target.textContent = String(value);
|
|
8
|
-
} else {
|
|
5
|
+
if (!isDomRenderValue(value)) {
|
|
9
6
|
return false;
|
|
10
7
|
}
|
|
8
|
+
renderDomValue(target, value);
|
|
11
9
|
return true;
|
|
12
10
|
}
|
|
13
11
|
clear() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/entry/content/adapters/vanilla/Node.ts"],"sourcesContent":["import {RenderNode} from \"../../lifecycle/nodes\";\nimport type {ContentScriptRenderValue} from \"@typing/content\";\n\nexport default class Node<Data = unknown> extends RenderNode<Data> {\n protected render(value: ContentScriptRenderValue<Data> | undefined, target: Element): boolean {\n if (value
|
|
1
|
+
{"version":3,"sources":["../../../../../src/entry/content/adapters/vanilla/Node.ts"],"sourcesContent":["import {isDomRenderValue, renderDomValue} from \"@entry/core/render\";\n\nimport {RenderNode} from \"../../lifecycle/nodes\";\nimport type {ContentScriptRenderValue} from \"@typing/content\";\n\nexport default class Node<Data = unknown> extends RenderNode<Data> {\n protected render(value: ContentScriptRenderValue<Data> | undefined, target: Element): boolean {\n if (!isDomRenderValue(value)) {\n return false;\n }\n\n renderDomValue(target, value);\n\n return true;\n }\n\n protected clear(): void {}\n}\n"],"mappings":"AAAA,SAAQ,kBAAkB,sBAAqB;AAE/C,SAAQ,kBAAiB;AAGzB,MAAO,aAA2C,WAAiB;AAAA,EACrD,OAAO,OAAmD,QAA0B;AAC1F,QAAI,CAAC,iBAAiB,KAAK,GAAG;AAC1B,aAAO;AAAA,IACX;AAEA,mBAAe,QAAQ,KAAK;AAE5B,WAAO;AAAA,EACX;AAAA,EAEU,QAAc;AAAA,EAAC;AAC7B;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { isDomRenderValue } from "./../../../../entry/core/render.js";
|
|
1
2
|
import { mergeDefinition } from "../../resolvers/definition.js";
|
|
2
|
-
import { isValidRenderValue } from "./utils.js";
|
|
3
3
|
const resolveDefinition = (module) => {
|
|
4
|
-
return mergeDefinition(module, (value) => typeof value === "function" ||
|
|
4
|
+
return mergeDefinition(module, (value) => typeof value === "function" || isDomRenderValue(value));
|
|
5
5
|
};
|
|
6
6
|
export {
|
|
7
7
|
resolveDefinition
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/entry/content/adapters/vanilla/definition.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../../../../src/entry/content/adapters/vanilla/definition.ts"],"sourcesContent":["import {isDomRenderValue} from \"@entry/core/render\";\n\nimport {mergeDefinition} from \"../../resolvers/definition\";\n\nimport type {ContentScriptDefinition} from \"@typing/content\";\n\nexport const resolveDefinition = (module: object): ContentScriptDefinition => {\n return mergeDefinition(module, value => typeof value === \"function\" || isDomRenderValue(value));\n};\n"],"mappings":"AAAA,SAAQ,wBAAuB;AAE/B,SAAQ,uBAAsB;AAIvB,MAAM,oBAAoB,CAAC,WAA4C;AAC1E,SAAO,gBAAgB,QAAQ,WAAS,OAAO,UAAU,cAAc,iBAAiB,KAAK,CAAC;AAClG;","names":[]}
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import { isContentScriptFrameNavigation, resolveContentScriptIsolation } from "./../../../shared/content/index.js";
|
|
2
2
|
import EntrypointBuilder from "./../../../entry/core/Builder.js";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
withLocationTracking,
|
|
9
|
-
createAppendMountHandler,
|
|
10
|
-
createMutationObserverStrategy
|
|
11
|
-
} from "../resolvers/index.js";
|
|
3
|
+
import { createAnchorResolver } from "../resolvers/anchor.js";
|
|
4
|
+
import { createContainerResolver } from "../resolvers/container.js";
|
|
5
|
+
import { createAppendMountHandler } from "../resolvers/mount.js";
|
|
6
|
+
import { createTargetResolver } from "../resolvers/target.js";
|
|
7
|
+
import { createAwaitFirstStrategy, createMutationObserverStrategy, withLocationTracking } from "../resolvers/watch.js";
|
|
12
8
|
import { ManagedContext, EventEmitter } from "./context/index.js";
|
|
13
9
|
import { AttributeMarker, WeakMarker } from "./markers/index.js";
|
|
14
10
|
import { EventNode } from "./nodes/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/entry/content/lifecycle/Builder.ts"],"sourcesContent":["import {isContentScriptFrameNavigation, resolveContentScriptIsolation} from \"@shared/content\";\n\nimport EntrypointBuilder from \"@entry/core/Builder\";\n\nimport {\n createAnchorResolver,\n createAwaitFirstStrategy,\n createContainerResolver,\n createTargetResolver,\n withLocationTracking,\n createAppendMountHandler,\n createMutationObserverStrategy,\n} from \"../resolvers\";\n\nimport {ManagedContext, EventEmitter} from \"./context\";\nimport {AttributeMarker, WeakMarker} from \"./markers\";\nimport {EventNode} from \"./nodes\";\n\nimport type {ContentScriptNodeAssembly, ContentScriptCycle} from \"./types\";\n\nimport {\n ContentScriptNode,\n ContentScriptAnchor,\n ContentScriptAnchorGetter,\n ContentScriptBuilder,\n ContentScriptContainerCreator,\n ContentScriptContainerFactory,\n ContentScriptContainerOptions,\n ContentScriptContainerTag,\n ContentScriptContext,\n ContentScriptDefinition,\n ContentScriptIsolation,\n ContentScriptIsolationOptions,\n ContentScriptMarker,\n ContentScriptMarkerContract,\n ContentScriptMarkerGetter,\n ContentScriptMarkerResolver,\n ContentScriptMarkerType,\n ContentScriptMountFunction,\n ContentScriptPrepareProps,\n ContentScriptPrepareResult,\n ContentScriptOptions,\n ContentScriptRenderHandler,\n ContentScriptRenderValue,\n ContentScriptResolvedDefinition,\n ContentScriptTarget,\n ContentScriptTargetCreator,\n ContentScriptWatchStrategy,\n} from \"@typing/content\";\n\nexport default abstract class Builder<\n Data = unknown,\n Isolation extends `${ContentScriptIsolation}` = `${ContentScriptIsolation}`,\n>\n extends EntrypointBuilder\n implements ContentScriptBuilder\n{\n private cycle?: ContentScriptCycle;\n\n protected generation = 0;\n\n protected readonly definition: ContentScriptResolvedDefinition<Data>;\n\n protected readonly emitter = new EventEmitter();\n\n protected readonly context = new ManagedContext(this.emitter);\n\n protected marker: ContentScriptMarkerContract = new AttributeMarker();\n\n protected unwatch?: () => void;\n\n protected abstract createNode(\n anchor: Element,\n result: ContentScriptPrepareResult<Data> | undefined\n ): Promise<ContentScriptNodeAssembly>;\n\n protected constructor(input: ContentScriptDefinition<Data, Isolation>) {\n super();\n\n // Normalization selects the isolation at runtime; its node supplies the matching callback props.\n const definition = input as ContentScriptDefinition<Data>;\n\n this.definition = {\n ...definition,\n marker: this.resolveMarker(definition.marker),\n anchor: this.resolveAnchor(definition.anchor),\n mount: this.resolveMount(definition.mount),\n container: this.resolveContainer(definition.container),\n target: this.resolveTarget(definition.target),\n isolation: this.resolveIsolation(definition),\n render: this.resolveRender(definition.render),\n watch: this.resolveWatch(definition.watch),\n };\n }\n\n protected resolveMarker(marker: ContentScriptMarkerType | ContentScriptMarkerGetter): ContentScriptMarkerResolver {\n return async (options: ContentScriptOptions) => {\n if (typeof marker === \"function\") {\n marker = await marker(options);\n }\n\n if (!marker) {\n marker = ContentScriptMarker.Attribute;\n }\n\n if (typeof marker === \"string\") {\n switch (marker) {\n case ContentScriptMarker.Weak:\n return new WeakMarker();\n\n case ContentScriptMarker.Attribute:\n default:\n return new AttributeMarker();\n }\n }\n\n return marker;\n };\n }\n\n protected resolveAnchor(anchor?: ContentScriptAnchor | ContentScriptAnchorGetter): ContentScriptAnchorGetter {\n return createAnchorResolver(anchor);\n }\n\n protected resolveMount(mount?: ContentScriptMountFunction): ContentScriptMountFunction {\n return mount || createAppendMountHandler();\n }\n\n protected resolveContainer(\n container?: ContentScriptContainerTag | ContentScriptContainerOptions | ContentScriptContainerFactory<Data>\n ): ContentScriptContainerCreator<Data> {\n return createContainerResolver(container);\n }\n\n protected resolveTarget(target?: ContentScriptTarget<Data>): ContentScriptTargetCreator<Data> {\n return createTargetResolver(target);\n }\n\n protected resolveIsolation(definition: ContentScriptDefinition<Data>): ContentScriptIsolationOptions {\n const isolation = resolveContentScriptIsolation(definition.isolation, \"render\" in definition);\n\n if (definition.boundary !== undefined) {\n if (typeof definition.boundary !== \"function\") {\n throw new Error(\"Content script boundary must be a synchronous setup handler\");\n }\n\n if (isolation.type === \"none\") {\n throw new Error(\"Content script boundary requires Shadow DOM or an iframe\");\n }\n }\n\n if (\n definition.target !== undefined &&\n (isolation.type === \"none\" || isContentScriptFrameNavigation(isolation))\n ) {\n throw new Error(\"Content script target requires Shadow DOM or an iframe with local rendering\");\n }\n\n return isolation;\n }\n\n protected resolveRender(\n render?: ContentScriptRenderValue<Data> | ContentScriptRenderHandler<Data>\n ): true | ContentScriptRenderHandler<Data> | undefined {\n if (render === true || render === undefined) {\n return render;\n }\n\n throw new Error(\"Content script rendering requires a renderer adapter\");\n }\n\n protected resolveWatch(watch?: true | ContentScriptWatchStrategy): ContentScriptWatchStrategy {\n if (watch === undefined) {\n watch = createAwaitFirstStrategy();\n } else if (watch === true) {\n watch = createMutationObserverStrategy();\n }\n\n return withLocationTracking(watch);\n }\n\n public getContext(): ContentScriptContext {\n return this.context;\n }\n\n public async build(): Promise<void> {\n const destroying = this.destroy();\n const generation = this.generation;\n await destroying;\n\n if (generation !== this.generation) {\n return;\n }\n\n const {render, prepare, main, anchor, marker, container, boundary, target, watch, mount, ...options} =\n this.definition;\n\n await main?.(this.context, options);\n\n if (generation !== this.generation) {\n return;\n }\n\n if (\n render !== undefined ||\n prepare !== undefined ||\n isContentScriptFrameNavigation(this.definition.isolation)\n ) {\n const resolvedMarker = await marker(options);\n\n if (generation !== this.generation) {\n return;\n }\n\n this.marker = resolvedMarker;\n\n await this.requestProcessing(generation);\n\n if (generation !== this.generation) {\n return;\n }\n\n const onError = (error: unknown): void => {\n console.error(\"Content script processing on watch error\", error);\n };\n\n this.unwatch = watch(() => this.requestProcessing(generation, onError), this.context);\n }\n }\n\n public async destroy(): Promise<void> {\n this.generation++;\n this.cycle = undefined;\n\n this.unwatch?.();\n this.unwatch = undefined;\n\n try {\n this.context.clear();\n } finally {\n this.context.unwatch();\n this.marker.reset();\n }\n }\n\n protected getPrepareProps(anchor: Element): ContentScriptPrepareProps {\n const {\n anchor: _,\n marker,\n mount,\n watch,\n prepare,\n render,\n container,\n boundary,\n target,\n main,\n ...options\n } = this.definition;\n\n return {...options, anchor};\n }\n\n private requestProcessing(generation: number, onError?: (error: unknown) => void): Promise<void> {\n if (generation !== this.generation) {\n return Promise.resolve();\n }\n\n if (this.cycle?.generation === generation) {\n this.cycle.pending = true;\n\n return this.cycle.promise;\n }\n\n const cycle: ContentScriptCycle = {\n generation,\n pending: true,\n promise: Promise.resolve().then(() => this.drainProcessing(cycle)),\n };\n\n if (onError) {\n // One handler per cycle, not one suspended async callback per watch notification.\n cycle.promise = cycle.promise.catch(onError);\n }\n\n this.cycle = cycle;\n\n return cycle.promise;\n }\n\n private async drainProcessing(cycle: ContentScriptCycle): Promise<void> {\n try {\n while (cycle.pending && cycle.generation === this.generation) {\n cycle.pending = false;\n this.context.mount();\n\n if (cycle.generation !== this.generation) {\n return;\n }\n\n await this.processing(cycle.generation);\n }\n } finally {\n if (this.cycle === cycle) {\n this.cycle = undefined;\n }\n }\n }\n\n protected async processing(generation: number): Promise<void> {\n const anchor = await this.definition.anchor();\n\n if (generation !== this.generation) {\n return;\n }\n\n const anchors = this.marker\n .for(anchor)\n .unmarked()\n .filter(anchor => anchor.isConnected);\n\n const results = await Promise.allSettled(anchors.map(anchor => this.processAnchor(anchor, generation)));\n const errors = results.flatMap(result => (result.status === \"rejected\" ? [result.reason] : []));\n\n if (errors.length && generation === this.generation) {\n console.error(new AggregateError(errors, \"Content script anchor processing failed\"));\n }\n }\n\n protected async processAnchor(anchor: Element, generation: number): Promise<void> {\n const current = () => generation === this.generation && anchor.isConnected;\n const data = await this.definition.prepare?.(this.getPrepareProps(anchor));\n\n if (!current()) {\n return;\n }\n\n const assembly = await this.createNode(anchor, data);\n const node = new EventNode(assembly.node, this.emitter, assembly.renderer);\n\n if (!current()) {\n node.unmount();\n\n return;\n }\n\n // Add listeners can mount immediately, so connect the renderer before publishing the node.\n assembly.renderer?.setErrorHandler(error => this.handleRenderError(node, error, generation));\n this.context.add(node);\n\n if (generation !== this.generation) {\n return;\n }\n\n try {\n node.mount();\n\n if (!current() && !node.container?.isConnected) {\n this.context.remove(node);\n }\n } catch (error) {\n this.context.remove(node);\n throw error;\n }\n }\n\n private handleRenderError(node: ContentScriptNode, error: unknown, generation: number): void {\n if (generation !== this.generation) {\n return;\n }\n\n const errors = [error];\n\n try {\n this.context.remove(node);\n } catch (cause) {\n errors.push(cause);\n }\n\n console.error(new AggregateError(errors, \"Content script deferred mount failed\"));\n }\n}\n"],"mappings":"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","names":["anchor"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/entry/content/lifecycle/Builder.ts"],"sourcesContent":["import {isContentScriptFrameNavigation, resolveContentScriptIsolation} from \"@shared/content\";\n\nimport EntrypointBuilder from \"@entry/core/Builder\";\n\nimport {createAnchorResolver} from \"../resolvers/anchor\";\nimport {createContainerResolver} from \"../resolvers/container\";\nimport {createAppendMountHandler} from \"../resolvers/mount\";\nimport {createTargetResolver} from \"../resolvers/target\";\nimport {createAwaitFirstStrategy, createMutationObserverStrategy, withLocationTracking} from \"../resolvers/watch\";\n\nimport {ManagedContext, EventEmitter} from \"./context\";\nimport {AttributeMarker, WeakMarker} from \"./markers\";\nimport {EventNode} from \"./nodes\";\n\nimport type {ContentScriptNodeAssembly, ContentScriptCycle} from \"./types\";\n\nimport {\n ContentScriptNode,\n ContentScriptAnchor,\n ContentScriptAnchorGetter,\n ContentScriptBuilder,\n ContentScriptContainerCreator,\n ContentScriptContainerFactory,\n ContentScriptContainerOptions,\n ContentScriptContainerTag,\n ContentScriptContext,\n ContentScriptDefinition,\n ContentScriptIsolation,\n ContentScriptIsolationOptions,\n ContentScriptMarker,\n ContentScriptMarkerContract,\n ContentScriptMarkerGetter,\n ContentScriptMarkerResolver,\n ContentScriptMarkerType,\n ContentScriptMountFunction,\n ContentScriptPrepareProps,\n ContentScriptPrepareResult,\n ContentScriptOptions,\n ContentScriptRenderHandler,\n ContentScriptRenderValue,\n ContentScriptResolvedDefinition,\n ContentScriptTarget,\n ContentScriptTargetCreator,\n ContentScriptWatchStrategy,\n} from \"@typing/content\";\n\nexport default abstract class Builder<\n Data = unknown,\n Isolation extends `${ContentScriptIsolation}` = `${ContentScriptIsolation}`,\n>\n extends EntrypointBuilder\n implements ContentScriptBuilder\n{\n private cycle?: ContentScriptCycle;\n\n protected generation = 0;\n\n protected readonly definition: ContentScriptResolvedDefinition<Data>;\n\n protected readonly emitter = new EventEmitter();\n\n protected readonly context = new ManagedContext(this.emitter);\n\n protected marker: ContentScriptMarkerContract = new AttributeMarker();\n\n protected unwatch?: () => void;\n\n protected abstract createNode(\n anchor: Element,\n result: ContentScriptPrepareResult<Data> | undefined\n ): Promise<ContentScriptNodeAssembly>;\n\n protected constructor(input: ContentScriptDefinition<Data, Isolation>) {\n super();\n\n // Normalization selects the isolation at runtime; its node supplies the matching callback props.\n const definition = input as ContentScriptDefinition<Data>;\n\n this.definition = {\n ...definition,\n marker: this.resolveMarker(definition.marker),\n anchor: this.resolveAnchor(definition.anchor),\n mount: this.resolveMount(definition.mount),\n container: this.resolveContainer(definition.container),\n target: this.resolveTarget(definition.target),\n isolation: this.resolveIsolation(definition),\n render: this.resolveRender(definition.render),\n watch: this.resolveWatch(definition.watch),\n };\n }\n\n protected resolveMarker(marker: ContentScriptMarkerType | ContentScriptMarkerGetter): ContentScriptMarkerResolver {\n return async (options: ContentScriptOptions) => {\n if (typeof marker === \"function\") {\n marker = await marker(options);\n }\n\n if (!marker) {\n marker = ContentScriptMarker.Attribute;\n }\n\n if (typeof marker === \"string\") {\n switch (marker) {\n case ContentScriptMarker.Weak:\n return new WeakMarker();\n\n case ContentScriptMarker.Attribute:\n default:\n return new AttributeMarker();\n }\n }\n\n return marker;\n };\n }\n\n protected resolveAnchor(anchor?: ContentScriptAnchor | ContentScriptAnchorGetter): ContentScriptAnchorGetter {\n return createAnchorResolver(anchor);\n }\n\n protected resolveMount(mount?: ContentScriptMountFunction): ContentScriptMountFunction {\n return mount || createAppendMountHandler();\n }\n\n protected resolveContainer(\n container?: ContentScriptContainerTag | ContentScriptContainerOptions | ContentScriptContainerFactory<Data>\n ): ContentScriptContainerCreator<Data> {\n return createContainerResolver(container);\n }\n\n protected resolveTarget(target?: ContentScriptTarget<Data>): ContentScriptTargetCreator<Data> {\n return createTargetResolver(target);\n }\n\n protected resolveIsolation(definition: ContentScriptDefinition<Data>): ContentScriptIsolationOptions {\n const isolation = resolveContentScriptIsolation(definition.isolation, \"render\" in definition);\n\n if (definition.boundary !== undefined) {\n if (typeof definition.boundary !== \"function\") {\n throw new Error(\"Content script boundary must be a synchronous setup handler\");\n }\n\n if (isolation.type === \"none\") {\n throw new Error(\"Content script boundary requires Shadow DOM or an iframe\");\n }\n }\n\n if (\n definition.target !== undefined &&\n (isolation.type === \"none\" || isContentScriptFrameNavigation(isolation))\n ) {\n throw new Error(\"Content script target requires Shadow DOM or an iframe with local rendering\");\n }\n\n return isolation;\n }\n\n protected resolveRender(\n render?: ContentScriptRenderValue<Data> | ContentScriptRenderHandler<Data>\n ): true | ContentScriptRenderHandler<Data> | undefined {\n if (render === true || render === undefined) {\n return render;\n }\n\n throw new Error(\"Content script rendering requires a renderer adapter\");\n }\n\n protected resolveWatch(watch?: true | ContentScriptWatchStrategy): ContentScriptWatchStrategy {\n if (watch === undefined) {\n watch = createAwaitFirstStrategy();\n } else if (watch === true) {\n watch = createMutationObserverStrategy();\n }\n\n return withLocationTracking(watch);\n }\n\n public getContext(): ContentScriptContext {\n return this.context;\n }\n\n public async build(): Promise<void> {\n const destroying = this.destroy();\n const generation = this.generation;\n await destroying;\n\n if (generation !== this.generation) {\n return;\n }\n\n const {render, prepare, main, anchor, marker, container, boundary, target, watch, mount, ...options} =\n this.definition;\n\n await main?.(this.context, options);\n\n if (generation !== this.generation) {\n return;\n }\n\n if (\n render !== undefined ||\n prepare !== undefined ||\n isContentScriptFrameNavigation(this.definition.isolation)\n ) {\n const resolvedMarker = await marker(options);\n\n if (generation !== this.generation) {\n return;\n }\n\n this.marker = resolvedMarker;\n\n await this.requestProcessing(generation);\n\n if (generation !== this.generation) {\n return;\n }\n\n const onError = (error: unknown): void => {\n console.error(\"Content script processing on watch error\", error);\n };\n\n this.unwatch = watch(() => this.requestProcessing(generation, onError), this.context);\n }\n }\n\n public async destroy(): Promise<void> {\n this.generation++;\n this.cycle = undefined;\n\n this.unwatch?.();\n this.unwatch = undefined;\n\n try {\n this.context.clear();\n } finally {\n this.context.unwatch();\n this.marker.reset();\n }\n }\n\n protected getPrepareProps(anchor: Element): ContentScriptPrepareProps {\n const {\n anchor: _,\n marker,\n mount,\n watch,\n prepare,\n render,\n container,\n boundary,\n target,\n main,\n ...options\n } = this.definition;\n\n return {...options, anchor};\n }\n\n private requestProcessing(generation: number, onError?: (error: unknown) => void): Promise<void> {\n if (generation !== this.generation) {\n return Promise.resolve();\n }\n\n if (this.cycle?.generation === generation) {\n this.cycle.pending = true;\n\n return this.cycle.promise;\n }\n\n const cycle: ContentScriptCycle = {\n generation,\n pending: true,\n promise: Promise.resolve().then(() => this.drainProcessing(cycle)),\n };\n\n if (onError) {\n // One handler per cycle, not one suspended async callback per watch notification.\n cycle.promise = cycle.promise.catch(onError);\n }\n\n this.cycle = cycle;\n\n return cycle.promise;\n }\n\n private async drainProcessing(cycle: ContentScriptCycle): Promise<void> {\n try {\n while (cycle.pending && cycle.generation === this.generation) {\n cycle.pending = false;\n this.context.mount();\n\n if (cycle.generation !== this.generation) {\n return;\n }\n\n await this.processing(cycle.generation);\n }\n } finally {\n if (this.cycle === cycle) {\n this.cycle = undefined;\n }\n }\n }\n\n protected async processing(generation: number): Promise<void> {\n const anchor = await this.definition.anchor();\n\n if (generation !== this.generation) {\n return;\n }\n\n const anchors = this.marker\n .for(anchor)\n .unmarked()\n .filter(anchor => anchor.isConnected);\n\n const results = await Promise.allSettled(anchors.map(anchor => this.processAnchor(anchor, generation)));\n const errors = results.flatMap(result => (result.status === \"rejected\" ? [result.reason] : []));\n\n if (errors.length && generation === this.generation) {\n console.error(new AggregateError(errors, \"Content script anchor processing failed\"));\n }\n }\n\n protected async processAnchor(anchor: Element, generation: number): Promise<void> {\n const current = () => generation === this.generation && anchor.isConnected;\n const data = await this.definition.prepare?.(this.getPrepareProps(anchor));\n\n if (!current()) {\n return;\n }\n\n const assembly = await this.createNode(anchor, data);\n const node = new EventNode(assembly.node, this.emitter, assembly.renderer);\n\n if (!current()) {\n node.unmount();\n\n return;\n }\n\n // Add listeners can mount immediately, so connect the renderer before publishing the node.\n assembly.renderer?.setErrorHandler(error => this.handleRenderError(node, error, generation));\n this.context.add(node);\n\n if (generation !== this.generation) {\n return;\n }\n\n try {\n node.mount();\n\n if (!current() && !node.container?.isConnected) {\n this.context.remove(node);\n }\n } catch (error) {\n this.context.remove(node);\n throw error;\n }\n }\n\n private handleRenderError(node: ContentScriptNode, error: unknown, generation: number): void {\n if (generation !== this.generation) {\n return;\n }\n\n const errors = [error];\n\n try {\n this.context.remove(node);\n } catch (cause) {\n errors.push(cause);\n }\n\n console.error(new AggregateError(errors, \"Content script deferred mount failed\"));\n }\n}\n"],"mappings":"AAAA,SAAQ,gCAAgC,qCAAoC;AAE5E,OAAO,uBAAuB;AAE9B,SAAQ,4BAA2B;AACnC,SAAQ,+BAA8B;AACtC,SAAQ,gCAA+B;AACvC,SAAQ,4BAA2B;AACnC,SAAQ,0BAA0B,gCAAgC,4BAA2B;AAE7F,SAAQ,gBAAgB,oBAAmB;AAC3C,SAAQ,iBAAiB,kBAAiB;AAC1C,SAAQ,iBAAgB;AAIxB;AAAA,EAaI;AAAA,OAeG;AAEP,MAAO,gBAIK,kBAEZ;AAAA,EACY;AAAA,EAEE,aAAa;AAAA,EAEJ;AAAA,EAEA,UAAU,IAAI,aAAa;AAAA,EAE3B,UAAU,IAAI,eAAe,KAAK,OAAO;AAAA,EAElD,SAAsC,IAAI,gBAAgB;AAAA,EAE1D;AAAA,EAOA,YAAY,OAAiD;AACnE,UAAM;AAGN,UAAM,aAAa;AAEnB,SAAK,aAAa;AAAA,MACd,GAAG;AAAA,MACH,QAAQ,KAAK,cAAc,WAAW,MAAM;AAAA,MAC5C,QAAQ,KAAK,cAAc,WAAW,MAAM;AAAA,MAC5C,OAAO,KAAK,aAAa,WAAW,KAAK;AAAA,MACzC,WAAW,KAAK,iBAAiB,WAAW,SAAS;AAAA,MACrD,QAAQ,KAAK,cAAc,WAAW,MAAM;AAAA,MAC5C,WAAW,KAAK,iBAAiB,UAAU;AAAA,MAC3C,QAAQ,KAAK,cAAc,WAAW,MAAM;AAAA,MAC5C,OAAO,KAAK,aAAa,WAAW,KAAK;AAAA,IAC7C;AAAA,EACJ;AAAA,EAEU,cAAc,QAA0F;AAC9G,WAAO,OAAO,YAAkC;AAC5C,UAAI,OAAO,WAAW,YAAY;AAC9B,iBAAS,MAAM,OAAO,OAAO;AAAA,MACjC;AAEA,UAAI,CAAC,QAAQ;AACT,iBAAS,oBAAoB;AAAA,MACjC;AAEA,UAAI,OAAO,WAAW,UAAU;AAC5B,gBAAQ,QAAQ;AAAA,UACZ,KAAK,oBAAoB;AACrB,mBAAO,IAAI,WAAW;AAAA,UAE1B,KAAK,oBAAoB;AAAA,UACzB;AACI,mBAAO,IAAI,gBAAgB;AAAA,QACnC;AAAA,MACJ;AAEA,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EAEU,cAAc,QAAqF;AACzG,WAAO,qBAAqB,MAAM;AAAA,EACtC;AAAA,EAEU,aAAa,OAAgE;AACnF,WAAO,SAAS,yBAAyB;AAAA,EAC7C;AAAA,EAEU,iBACN,WACmC;AACnC,WAAO,wBAAwB,SAAS;AAAA,EAC5C;AAAA,EAEU,cAAc,QAAsE;AAC1F,WAAO,qBAAqB,MAAM;AAAA,EACtC;AAAA,EAEU,iBAAiB,YAA0E;AACjG,UAAM,YAAY,8BAA8B,WAAW,WAAW,YAAY,UAAU;AAE5F,QAAI,WAAW,aAAa,QAAW;AACnC,UAAI,OAAO,WAAW,aAAa,YAAY;AAC3C,cAAM,IAAI,MAAM,6DAA6D;AAAA,MACjF;AAEA,UAAI,UAAU,SAAS,QAAQ;AAC3B,cAAM,IAAI,MAAM,0DAA0D;AAAA,MAC9E;AAAA,IACJ;AAEA,QACI,WAAW,WAAW,WACrB,UAAU,SAAS,UAAU,+BAA+B,SAAS,IACxE;AACE,YAAM,IAAI,MAAM,6EAA6E;AAAA,IACjG;AAEA,WAAO;AAAA,EACX;AAAA,EAEU,cACN,QACmD;AACnD,QAAI,WAAW,QAAQ,WAAW,QAAW;AACzC,aAAO;AAAA,IACX;AAEA,UAAM,IAAI,MAAM,sDAAsD;AAAA,EAC1E;AAAA,EAEU,aAAa,OAAuE;AAC1F,QAAI,UAAU,QAAW;AACrB,cAAQ,yBAAyB;AAAA,IACrC,WAAW,UAAU,MAAM;AACvB,cAAQ,+BAA+B;AAAA,IAC3C;AAEA,WAAO,qBAAqB,KAAK;AAAA,EACrC;AAAA,EAEO,aAAmC;AACtC,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAa,QAAuB;AAChC,UAAM,aAAa,KAAK,QAAQ;AAChC,UAAM,aAAa,KAAK;AACxB,UAAM;AAEN,QAAI,eAAe,KAAK,YAAY;AAChC;AAAA,IACJ;AAEA,UAAM,EAAC,QAAQ,SAAS,MAAM,QAAQ,QAAQ,WAAW,UAAU,QAAQ,OAAO,OAAO,GAAG,QAAO,IAC/F,KAAK;AAET,WAAM,6BAAO,KAAK,SAAS;AAE3B,QAAI,eAAe,KAAK,YAAY;AAChC;AAAA,IACJ;AAEA,QACI,WAAW,UACX,YAAY,UACZ,+BAA+B,KAAK,WAAW,SAAS,GAC1D;AACE,YAAM,iBAAiB,MAAM,OAAO,OAAO;AAE3C,UAAI,eAAe,KAAK,YAAY;AAChC;AAAA,MACJ;AAEA,WAAK,SAAS;AAEd,YAAM,KAAK,kBAAkB,UAAU;AAEvC,UAAI,eAAe,KAAK,YAAY;AAChC;AAAA,MACJ;AAEA,YAAM,UAAU,CAAC,UAAyB;AACtC,gBAAQ,MAAM,4CAA4C,KAAK;AAAA,MACnE;AAEA,WAAK,UAAU,MAAM,MAAM,KAAK,kBAAkB,YAAY,OAAO,GAAG,KAAK,OAAO;AAAA,IACxF;AAAA,EACJ;AAAA,EAEA,MAAa,UAAyB;AAlO1C;AAmOQ,SAAK;AACL,SAAK,QAAQ;AAEb,eAAK,YAAL;AACA,SAAK,UAAU;AAEf,QAAI;AACA,WAAK,QAAQ,MAAM;AAAA,IACvB,UAAE;AACE,WAAK,QAAQ,QAAQ;AACrB,WAAK,OAAO,MAAM;AAAA,IACtB;AAAA,EACJ;AAAA,EAEU,gBAAgB,QAA4C;AAClE,UAAM;AAAA,MACF,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACP,IAAI,KAAK;AAET,WAAO,EAAC,GAAG,SAAS,OAAM;AAAA,EAC9B;AAAA,EAEQ,kBAAkB,YAAoB,SAAmD;AAnQrG;AAoQQ,QAAI,eAAe,KAAK,YAAY;AAChC,aAAO,QAAQ,QAAQ;AAAA,IAC3B;AAEA,UAAI,UAAK,UAAL,mBAAY,gBAAe,YAAY;AACvC,WAAK,MAAM,UAAU;AAErB,aAAO,KAAK,MAAM;AAAA,IACtB;AAEA,UAAM,QAA4B;AAAA,MAC9B;AAAA,MACA,SAAS;AAAA,MACT,SAAS,QAAQ,QAAQ,EAAE,KAAK,MAAM,KAAK,gBAAgB,KAAK,CAAC;AAAA,IACrE;AAEA,QAAI,SAAS;AAET,YAAM,UAAU,MAAM,QAAQ,MAAM,OAAO;AAAA,IAC/C;AAEA,SAAK,QAAQ;AAEb,WAAO,MAAM;AAAA,EACjB;AAAA,EAEA,MAAc,gBAAgB,OAA0C;AACpE,QAAI;AACA,aAAO,MAAM,WAAW,MAAM,eAAe,KAAK,YAAY;AAC1D,cAAM,UAAU;AAChB,aAAK,QAAQ,MAAM;AAEnB,YAAI,MAAM,eAAe,KAAK,YAAY;AACtC;AAAA,QACJ;AAEA,cAAM,KAAK,WAAW,MAAM,UAAU;AAAA,MAC1C;AAAA,IACJ,UAAE;AACE,UAAI,KAAK,UAAU,OAAO;AACtB,aAAK,QAAQ;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAgB,WAAW,YAAmC;AAC1D,UAAM,SAAS,MAAM,KAAK,WAAW,OAAO;AAE5C,QAAI,eAAe,KAAK,YAAY;AAChC;AAAA,IACJ;AAEA,UAAM,UAAU,KAAK,OAChB,IAAI,MAAM,EACV,SAAS,EACT,OAAO,CAAAA,YAAUA,QAAO,WAAW;AAExC,UAAM,UAAU,MAAM,QAAQ,WAAW,QAAQ,IAAI,CAAAA,YAAU,KAAK,cAAcA,SAAQ,UAAU,CAAC,CAAC;AACtG,UAAM,SAAS,QAAQ,QAAQ,YAAW,OAAO,WAAW,aAAa,CAAC,OAAO,MAAM,IAAI,CAAC,CAAE;AAE9F,QAAI,OAAO,UAAU,eAAe,KAAK,YAAY;AACjD,cAAQ,MAAM,IAAI,eAAe,QAAQ,yCAAyC,CAAC;AAAA,IACvF;AAAA,EACJ;AAAA,EAEA,MAAgB,cAAc,QAAiB,YAAmC;AArUtF;AAsUQ,UAAM,UAAU,MAAM,eAAe,KAAK,cAAc,OAAO;AAC/D,UAAM,OAAO,QAAM,gBAAK,YAAW,YAAhB,4BAA0B,KAAK,gBAAgB,MAAM;AAExE,QAAI,CAAC,QAAQ,GAAG;AACZ;AAAA,IACJ;AAEA,UAAM,WAAW,MAAM,KAAK,WAAW,QAAQ,IAAI;AACnD,UAAM,OAAO,IAAI,UAAU,SAAS,MAAM,KAAK,SAAS,SAAS,QAAQ;AAEzE,QAAI,CAAC,QAAQ,GAAG;AACZ,WAAK,QAAQ;AAEb;AAAA,IACJ;AAGA,mBAAS,aAAT,mBAAmB,gBAAgB,WAAS,KAAK,kBAAkB,MAAM,OAAO,UAAU;AAC1F,SAAK,QAAQ,IAAI,IAAI;AAErB,QAAI,eAAe,KAAK,YAAY;AAChC;AAAA,IACJ;AAEA,QAAI;AACA,WAAK,MAAM;AAEX,UAAI,CAAC,QAAQ,KAAK,GAAC,UAAK,cAAL,mBAAgB,cAAa;AAC5C,aAAK,QAAQ,OAAO,IAAI;AAAA,MAC5B;AAAA,IACJ,SAAS,OAAO;AACZ,WAAK,QAAQ,OAAO,IAAI;AACxB,YAAM;AAAA,IACV;AAAA,EACJ;AAAA,EAEQ,kBAAkB,MAAyB,OAAgB,YAA0B;AACzF,QAAI,eAAe,KAAK,YAAY;AAChC;AAAA,IACJ;AAEA,UAAM,SAAS,CAAC,KAAK;AAErB,QAAI;AACA,WAAK,QAAQ,OAAO,IAAI;AAAA,IAC5B,SAAS,OAAO;AACZ,aAAO,KAAK,KAAK;AAAA,IACrB;AAEA,YAAQ,MAAM,IAAI,eAAe,QAAQ,sCAAsC,CAAC;AAAA,EACpF;AACJ;","names":["anchor"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* React-only render values: elements (including fragments), portals, bigints and iterables of nodes.
|
|
4
|
+
* Text, numbers and DOM elements are framework-independent and belong to `isDomRenderValue()`.
|
|
5
|
+
*/
|
|
6
|
+
export declare const isReactRenderValue: (value: unknown) => value is ReactNode;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { isValidElement } from "react";
|
|
2
|
+
const ReactPortalType = /* @__PURE__ */ Symbol.for("react.portal");
|
|
3
|
+
const isReactRenderValue = (value) => {
|
|
4
|
+
if (isValidElement(value) || typeof value === "bigint") {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
if (typeof value !== "object" || value === null) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
const node = value;
|
|
11
|
+
return node.$$typeof === ReactPortalType || typeof node[Symbol.iterator] === "function";
|
|
12
|
+
};
|
|
13
|
+
export {
|
|
14
|
+
isReactRenderValue
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=react.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/entry/core/react.ts"],"sourcesContent":["import {isValidElement, type ReactNode} from \"react\";\n\nconst ReactPortalType = Symbol.for(\"react.portal\");\n\n/**\n * React-only render values: elements (including fragments), portals, bigints and iterables of nodes.\n * Text, numbers and DOM elements are framework-independent and belong to `isDomRenderValue()`.\n */\nexport const isReactRenderValue = (value: unknown): value is ReactNode => {\n if (isValidElement(value) || typeof value === \"bigint\") {\n return true;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const node = value as {$$typeof?: unknown; [Symbol.iterator]?: unknown};\n\n // A portal is a plain object that isValidElement() does not recognize; an iterable needs a callable iterator.\n return node.$$typeof === ReactPortalType || typeof node[Symbol.iterator] === \"function\";\n};\n"],"mappings":"AAAA,SAAQ,sBAAqC;AAE7C,MAAM,kBAAkB,uBAAO,IAAI,cAAc;AAM1C,MAAM,qBAAqB,CAAC,UAAuC;AACtE,MAAI,eAAe,KAAK,KAAK,OAAO,UAAU,UAAU;AACpD,WAAO;AAAA,EACX;AAEA,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC7C,WAAO;AAAA,EACX;AAEA,QAAM,OAAO;AAGb,SAAO,KAAK,aAAa,mBAAmB,OAAO,KAAK,OAAO,QAAQ,MAAM;AACjF;","names":[]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Render values that every adapter supports without a UI framework. */
|
|
2
|
+
export type DomRenderValue = string | number | Element;
|
|
3
|
+
export declare const isDomRenderValue: (value: unknown) => value is DomRenderValue;
|
|
4
|
+
/** Text is always inserted as text, never parsed as HTML; markup comes from elements or a UI framework. */
|
|
5
|
+
export declare const renderDomValue: (target: Element, value: DomRenderValue) => void;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const isDomRenderValue = (value) => {
|
|
2
|
+
return typeof value === "string" && value.length > 0 || typeof value === "number" || // Compare the node type, not instanceof Element: an element may come from another realm, such as an iframe.
|
|
3
|
+
typeof value === "object" && value !== null && value.nodeType === Node.ELEMENT_NODE;
|
|
4
|
+
};
|
|
5
|
+
const renderDomValue = (target, value) => {
|
|
6
|
+
if (typeof value === "object") {
|
|
7
|
+
target.appendChild(value);
|
|
8
|
+
} else {
|
|
9
|
+
target.textContent = String(value);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
export {
|
|
13
|
+
isDomRenderValue,
|
|
14
|
+
renderDomValue
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/entry/core/render.ts"],"sourcesContent":["/** Render values that every adapter supports without a UI framework. */\nexport type DomRenderValue = string | number | Element;\n\nexport const isDomRenderValue = (value: unknown): value is DomRenderValue => {\n return (\n (typeof value === \"string\" && value.length > 0) ||\n typeof value === \"number\" ||\n // Compare the node type, not instanceof Element: an element may come from another realm, such as an iframe.\n (typeof value === \"object\" && value !== null && (value as Node).nodeType === Node.ELEMENT_NODE)\n );\n};\n\n/** Text is always inserted as text, never parsed as HTML; markup comes from elements or a UI framework. */\nexport const renderDomValue = (target: Element, value: DomRenderValue): void => {\n if (typeof value === \"object\") {\n target.appendChild(value);\n } else {\n target.textContent = String(value);\n }\n};\n"],"mappings":"AAGO,MAAM,mBAAmB,CAAC,UAA4C;AACzE,SACK,OAAO,UAAU,YAAY,MAAM,SAAS,KAC7C,OAAO,UAAU;AAAA,EAEhB,OAAO,UAAU,YAAY,UAAU,QAAS,MAAe,aAAa,KAAK;AAE1F;AAGO,MAAM,iBAAiB,CAAC,QAAiB,UAAgC;AAC5E,MAAI,OAAO,UAAU,UAAU;AAC3B,WAAO,YAAY,KAAK;AAAA,EAC5B,OAAO;AACH,WAAO,cAAc,OAAO,KAAK;AAAA,EACrC;AACJ;","names":[]}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
+
import EntrypointBuilder from "../core/Builder.js";
|
|
1
2
|
import TransportBuilder from "./TransportBuilder.js";
|
|
2
|
-
import
|
|
3
|
-
import { OffscreenUnresolvedDefinition } from "../../types/offscreen.js";
|
|
3
|
+
import { OffscreenEntrypointOptions, OffscreenUnresolvedDefinition } from "../../types/offscreen.js";
|
|
4
4
|
import { TransportType } from "../../types/transport.js";
|
|
5
|
-
import { ViewBuilder } from "../../types/view.js";
|
|
6
|
-
export default class<T extends TransportType = TransportType> extends
|
|
5
|
+
import { ViewBuilder, ViewBuilderConstructor } from "../../types/view/index.js";
|
|
6
|
+
export default class Builder<T extends TransportType = TransportType> extends EntrypointBuilder {
|
|
7
7
|
protected readonly _transport: TransportBuilder<T>;
|
|
8
|
-
protected _view
|
|
9
|
-
constructor(definition: OffscreenUnresolvedDefinition<T>);
|
|
10
|
-
view(view: ViewBuilder): this;
|
|
8
|
+
protected readonly _view: ViewBuilder;
|
|
9
|
+
constructor(definition: OffscreenUnresolvedDefinition<T>, viewBuilder: ViewBuilderConstructor<OffscreenEntrypointOptions>);
|
|
11
10
|
build(): Promise<void>;
|
|
12
11
|
destroy(): Promise<void>;
|
|
13
12
|
private ready;
|
|
@@ -1,29 +1,28 @@
|
|
|
1
|
+
import EntrypointBuilder from "./../../entry/core/Builder.js";
|
|
1
2
|
import TransportBuilder from "./TransportBuilder.js";
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
import {
|
|
4
|
+
OffscreenBridgeReadyMessageType,
|
|
5
|
+
OffscreenGlobalAccess
|
|
6
|
+
} from "./../../types/offscreen.js";
|
|
7
|
+
class Builder extends EntrypointBuilder {
|
|
5
8
|
_transport;
|
|
6
9
|
_view;
|
|
7
|
-
constructor(definition) {
|
|
10
|
+
constructor(definition, viewBuilder) {
|
|
8
11
|
super();
|
|
9
12
|
this._transport = new TransportBuilder(definition);
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
this._view = view;
|
|
13
|
-
return this;
|
|
13
|
+
const { init, main, name, ...viewOptions } = definition;
|
|
14
|
+
this._view = new viewBuilder(viewOptions);
|
|
14
15
|
}
|
|
15
16
|
async build() {
|
|
16
|
-
var _a;
|
|
17
17
|
await this.destroy();
|
|
18
18
|
globalThis[OffscreenGlobalAccess] = true;
|
|
19
19
|
await this._transport.build();
|
|
20
|
-
await
|
|
20
|
+
await this._view.build();
|
|
21
21
|
this.ready();
|
|
22
22
|
}
|
|
23
23
|
async destroy() {
|
|
24
|
-
var _a;
|
|
25
24
|
await this._transport.destroy();
|
|
26
|
-
await
|
|
25
|
+
await this._view.destroy();
|
|
27
26
|
}
|
|
28
27
|
ready() {
|
|
29
28
|
if (window.parent === window) {
|
|
@@ -33,6 +32,6 @@ class Builder_default extends Builder {
|
|
|
33
32
|
}
|
|
34
33
|
}
|
|
35
34
|
export {
|
|
36
|
-
|
|
35
|
+
Builder as default
|
|
37
36
|
};
|
|
38
37
|
//# sourceMappingURL=Builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/entry/offscreen/Builder.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../../src/entry/offscreen/Builder.ts"],"sourcesContent":["import EntrypointBuilder from \"@entry/core/Builder\";\n\nimport TransportBuilder from \"./TransportBuilder\";\n\nimport {\n OffscreenBridgeReadyMessageType,\n OffscreenEntrypointOptions,\n OffscreenGlobalAccess,\n OffscreenUnresolvedDefinition,\n} from \"@typing/offscreen\";\nimport {TransportType} from \"@typing/transport\";\nimport {ViewBuilder, ViewBuilderConstructor} from \"@typing/view\";\n\nexport default class Builder<T extends TransportType = TransportType> extends EntrypointBuilder {\n protected readonly _transport: TransportBuilder<T>;\n\n protected readonly _view: ViewBuilder;\n\n constructor(\n definition: OffscreenUnresolvedDefinition<T>,\n viewBuilder: ViewBuilderConstructor<OffscreenEntrypointOptions>\n ) {\n super();\n\n this._transport = new TransportBuilder(definition);\n\n const {init, main, name, ...viewOptions} = definition;\n\n this._view = new viewBuilder(viewOptions);\n }\n\n public async build(): Promise<void> {\n await this.destroy();\n\n globalThis[OffscreenGlobalAccess] = true;\n\n await this._transport.build();\n await this._view.build();\n\n this.ready();\n }\n\n public async destroy(): Promise<void> {\n await this._transport.destroy();\n await this._view.destroy();\n }\n\n private ready(): void {\n if (window.parent === window) {\n return;\n }\n\n window.parent.postMessage({type: OffscreenBridgeReadyMessageType}, location.origin);\n }\n}\n"],"mappings":"AAAA,OAAO,uBAAuB;AAE9B,OAAO,sBAAsB;AAE7B;AAAA,EACI;AAAA,EAEA;AAAA,OAEG;AAIP,MAAO,gBAAuE,kBAAkB;AAAA,EACzE;AAAA,EAEA;AAAA,EAEnB,YACI,YACA,aACF;AACE,UAAM;AAEN,SAAK,aAAa,IAAI,iBAAiB,UAAU;AAEjD,UAAM,EAAC,MAAM,MAAM,MAAM,GAAG,YAAW,IAAI;AAE3C,SAAK,QAAQ,IAAI,YAAY,WAAW;AAAA,EAC5C;AAAA,EAEA,MAAa,QAAuB;AAChC,UAAM,KAAK,QAAQ;AAEnB,eAAW,qBAAqB,IAAI;AAEpC,UAAM,KAAK,WAAW,MAAM;AAC5B,UAAM,KAAK,MAAM,MAAM;AAEvB,SAAK,MAAM;AAAA,EACf;AAAA,EAEA,MAAa,UAAyB;AAClC,UAAM,KAAK,WAAW,QAAQ;AAC9B,UAAM,KAAK,MAAM,QAAQ;AAAA,EAC7B;AAAA,EAEQ,QAAc;AAClB,QAAI,OAAO,WAAW,QAAQ;AAC1B;AAAA,IACJ;AAEA,WAAO,OAAO,YAAY,EAAC,MAAM,gCAA+B,GAAG,SAAS,MAAM;AAAA,EACtF;AACJ;","names":[]}
|
|
@@ -2,7 +2,7 @@ import AbstractBuilder from "../transport/AbstractBuilder.js";
|
|
|
2
2
|
import { RegisterOffscreen } from "../../offscreen/providers/index.js";
|
|
3
3
|
import { OffscreenOptions, OffscreenUnresolvedDefinition } from "../../types/offscreen.js";
|
|
4
4
|
import { TransportName, TransportType } from "../../types/transport.js";
|
|
5
|
-
export default class<T extends TransportType = TransportType> extends AbstractBuilder<OffscreenOptions, T> {
|
|
5
|
+
export default class TransportBuilder<T extends TransportType = TransportType> extends AbstractBuilder<OffscreenOptions, T> {
|
|
6
6
|
constructor(definition: OffscreenUnresolvedDefinition<T>);
|
|
7
7
|
protected transport(): RegisterOffscreen<TransportName, T, [OffscreenOptions]>;
|
|
8
8
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import AbstractBuilder from "./../../entry/transport/AbstractBuilder.js";
|
|
2
2
|
import { RegisterOffscreen } from "./../../offscreen/providers/index.js";
|
|
3
|
-
class
|
|
3
|
+
class TransportBuilder extends AbstractBuilder {
|
|
4
4
|
constructor(definition) {
|
|
5
|
-
|
|
5
|
+
const { render, container, ...options } = definition;
|
|
6
|
+
super(options);
|
|
6
7
|
}
|
|
7
8
|
transport() {
|
|
8
9
|
const { name, init } = this.definition;
|
|
@@ -10,6 +11,6 @@ class TransportBuilder_default extends AbstractBuilder {
|
|
|
10
11
|
}
|
|
11
12
|
}
|
|
12
13
|
export {
|
|
13
|
-
|
|
14
|
+
TransportBuilder as default
|
|
14
15
|
};
|
|
15
16
|
//# sourceMappingURL=TransportBuilder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/entry/offscreen/TransportBuilder.ts"],"sourcesContent":["import AbstractBuilder from \"@entry/transport/AbstractBuilder\";\n\nimport {RegisterOffscreen} from \"@offscreen/providers\";\n\nimport {OffscreenOptions, OffscreenUnresolvedDefinition} from \"@typing/offscreen\";\nimport {TransportName, TransportType} from \"@typing/transport\";\n\nexport default class<T extends TransportType = TransportType> extends AbstractBuilder
|
|
1
|
+
{"version":3,"sources":["../../../src/entry/offscreen/TransportBuilder.ts"],"sourcesContent":["import AbstractBuilder from \"@entry/transport/AbstractBuilder\";\n\nimport {RegisterOffscreen} from \"@offscreen/providers\";\n\nimport {OffscreenOptions, OffscreenUnresolvedDefinition} from \"@typing/offscreen\";\nimport {TransportName, TransportType} from \"@typing/transport\";\n\nexport default class TransportBuilder<T extends TransportType = TransportType> extends AbstractBuilder<\n OffscreenOptions,\n T\n> {\n constructor(definition: OffscreenUnresolvedDefinition<T>) {\n // The view owns rendering; init and main receive only the offscreen options.\n const {render, container, ...options} = definition;\n\n super(options);\n }\n\n protected transport(): RegisterOffscreen<TransportName, T, [OffscreenOptions]> {\n const {name, init} = this.definition;\n\n return new RegisterOffscreen(name, init);\n }\n}\n"],"mappings":"AAAA,OAAO,qBAAqB;AAE5B,SAAQ,yBAAwB;AAKhC,MAAO,yBAAgF,gBAGrF;AAAA,EACE,YAAY,YAA8C;AAEtD,UAAM,EAAC,QAAQ,WAAW,GAAG,QAAO,IAAI;AAExC,UAAM,OAAO;AAAA,EACjB;AAAA,EAEU,YAAqE;AAC3E,UAAM,EAAC,MAAM,KAAI,IAAI,KAAK;AAE1B,WAAO,IAAI,kBAAkB,MAAM,IAAI;AAAA,EAC3C;AACJ;","names":[]}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import Builder from "./Builder.js";
|
|
2
|
+
import type { OffscreenEntrypointOptions, OffscreenUnresolvedDefinition } from "../../types/offscreen.js";
|
|
3
|
+
import type { TransportType } from "../../types/transport.js";
|
|
4
|
+
import type { ViewBuilderConstructor } from "../../types/view/index.js";
|
|
2
5
|
export { Builder };
|
|
3
|
-
|
|
4
|
-
export default
|
|
6
|
+
export { resolveDefinition } from "./resolvers/definition.js";
|
|
7
|
+
export default function offscreen<T extends TransportType>(definition: OffscreenUnresolvedDefinition<T>, viewBuilder: ViewBuilderConstructor<OffscreenEntrypointOptions>): void;
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import Builder from "./Builder.js";
|
|
2
|
-
|
|
2
|
+
import { resolveDefinition } from "./resolvers/definition.js";
|
|
3
|
+
function offscreen(definition, viewBuilder) {
|
|
4
|
+
new Builder(definition, viewBuilder).build().catch((error) => {
|
|
5
|
+
console.error("Failed to build offscreen: ", error);
|
|
6
|
+
});
|
|
7
|
+
}
|
|
3
8
|
export {
|
|
4
9
|
Builder,
|
|
5
|
-
|
|
10
|
+
offscreen as default,
|
|
11
|
+
resolveDefinition
|
|
6
12
|
};
|
|
7
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/entry/offscreen/index.ts"],"sourcesContent":["import Builder from \"./Builder\";\n\nexport {Builder};\n\nexport default Builder.
|
|
1
|
+
{"version":3,"sources":["../../../src/entry/offscreen/index.ts"],"sourcesContent":["import Builder from \"./Builder\";\n\nimport type {OffscreenEntrypointOptions, OffscreenUnresolvedDefinition} from \"@typing/offscreen\";\nimport type {TransportType} from \"@typing/transport\";\nimport type {ViewBuilderConstructor} from \"@typing/view\";\n\nexport {Builder};\nexport {resolveDefinition} from \"./resolvers/definition\";\n\nexport default function offscreen<T extends TransportType>(\n definition: OffscreenUnresolvedDefinition<T>,\n viewBuilder: ViewBuilderConstructor<OffscreenEntrypointOptions>\n): void {\n new Builder(definition, viewBuilder).build().catch(error => {\n console.error(\"Failed to build offscreen: \", error);\n });\n}\n"],"mappings":"AAAA,OAAO,aAAa;AAOpB,SAAQ,yBAAwB;AAEjB,SAAR,UACH,YACA,aACI;AACJ,MAAI,QAAQ,YAAY,WAAW,EAAE,MAAM,EAAE,MAAM,WAAS;AACxD,YAAQ,MAAM,+BAA+B,KAAK;AAAA,EACtD,CAAC;AACL;","names":[]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { OffscreenUnresolvedDefinition } from "../../../types/offscreen.js";
|
|
2
|
+
import type { TransportType } from "../../../types/transport.js";
|
|
3
|
+
/** A default function is the offscreen transport init; the view renders only an explicit render. */
|
|
4
|
+
export declare const resolveDefinition: <T extends TransportType = TransportType>(module: object, name: string) => OffscreenUnresolvedDefinition<T>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/entry/offscreen/resolvers/definition.ts"],"sourcesContent":["import {mergeDefinition} from \"@entry/transport/resolvers/definition\";\n\nimport type {OffscreenUnresolvedDefinition} from \"@typing/offscreen\";\nimport type {TransportType} from \"@typing/transport\";\n\n/** A default function is the offscreen transport init; the view renders only an explicit render. */\nexport const resolveDefinition = <T extends TransportType = TransportType>(\n module: object,\n name: string\n): OffscreenUnresolvedDefinition<T> => {\n return mergeDefinition(module, name) as OffscreenUnresolvedDefinition<T>;\n};\n"],"mappings":"AAAA,SAAQ,uBAAsB;AAMvB,MAAM,oBAAoB,CAC7B,QACA,SACmC;AACnC,SAAO,gBAAgB,QAAQ,IAAI;AACvC;","names":[]}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import TransportBuilder from "./TransportBuilder.js";
|
|
2
2
|
import EntrypointBuilder from "../core/Builder.js";
|
|
3
|
-
import { RelayUnresolvedDefinition } from "../../types/relay.js";
|
|
4
|
-
import { ContentScriptBuilder,
|
|
3
|
+
import { RelayDefinition, RelayUnresolvedDefinition } from "../../types/relay.js";
|
|
4
|
+
import { ContentScriptBuilder, ContentScriptBuilderConstructor, ContentScriptIsolation } from "../../types/content/index.js";
|
|
5
5
|
import { TransportType } from "../../types/transport.js";
|
|
6
6
|
export default class Builder<T extends TransportType, Data = unknown, Isolation extends `${ContentScriptIsolation}` = `${ContentScriptIsolation}`> extends EntrypointBuilder {
|
|
7
7
|
protected readonly definition: RelayUnresolvedDefinition<T, Data, Isolation>;
|
|
8
8
|
private generation;
|
|
9
9
|
protected readonly _transport: TransportBuilder<T, Data, Isolation>;
|
|
10
10
|
protected readonly _content: ContentScriptBuilder;
|
|
11
|
-
constructor(definition:
|
|
11
|
+
constructor(definition: RelayDefinition<T, Data, Isolation>, contentBuilder: ContentScriptBuilderConstructor<Data, Isolation>);
|
|
12
|
+
constructor(definition: RelayUnresolvedDefinition<T, Data, Isolation>, contentBuilder: ContentScriptBuilderConstructor<Data, Isolation>);
|
|
12
13
|
build(): Promise<void>;
|
|
13
14
|
destroy(): Promise<void>;
|
|
14
15
|
}
|