@web-widget/vue2 3.0.0-beta.2 → 3.0.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,103 @@
1
+ // src/components.ts
2
+ import { WebWidgetRenderer } from "@web-widget/web-widget";
3
+ import Vue, { h, defineComponent, useAttrs, getCurrentInstance } from "vue";
4
+ var globalConfigInitialized = false;
5
+ function ensureGlobalVueConfig() {
6
+ if (globalConfigInitialized) return;
7
+ globalConfigInitialized = true;
8
+ if (!Vue.config.ignoredElements.includes("web-widget")) {
9
+ Vue.config.ignoredElements.push("web-widget");
10
+ }
11
+ const prevWarnHandler = Vue.config.warnHandler;
12
+ Vue.config.warnHandler = (msg, _vm, trace) => {
13
+ if (msg.includes(`[object Promise]`)) {
14
+ return;
15
+ }
16
+ if (prevWarnHandler) {
17
+ prevWarnHandler.call(null, msg, _vm, trace);
18
+ } else {
19
+ console.error("[Vue warn]: ".concat(msg).concat(trace));
20
+ }
21
+ };
22
+ }
23
+ function createWidgetAdapter(renderChildren) {
24
+ return (loader, options = {}) => {
25
+ if (!loader) {
26
+ throw new TypeError(`Missing loader.`);
27
+ }
28
+ ensureGlobalVueConfig();
29
+ return defineComponent({
30
+ name: "VueWidget",
31
+ inheritAttrs: false,
32
+ props: {
33
+ widget: {
34
+ type: Object,
35
+ default: () => ({})
36
+ }
37
+ },
38
+ async serverPrefetch() {
39
+ const lightChildrenHTML = renderChildren ? await renderChildren(this.$lightChildren) : "";
40
+ const widget = this.$widget;
41
+ this.$innerHTML = await widget.renderInnerHTMLToString({
42
+ children: lightChildrenHTML
43
+ });
44
+ },
45
+ setup(props, { slots }) {
46
+ if (props.widget && "fallback" in props.widget) {
47
+ throw new TypeError(
48
+ `fallback is not supported in Vue2 (no Suspense).`
49
+ );
50
+ }
51
+ const { id, loading = options.loading } = props.widget;
52
+ const renderOptions = {
53
+ ...options,
54
+ clientOnly: props.widget.clientOnly,
55
+ id,
56
+ loading: loading != null ? loading : options.loading,
57
+ serverOnly: props.widget.serverOnly
58
+ };
59
+ const attrs = { ...useAttrs() };
60
+ const slot = typeof attrs.slot === "string" ? attrs.slot : void 0;
61
+ delete attrs.slot;
62
+ const rendererOptions = {
63
+ ...renderOptions,
64
+ data: attrs,
65
+ root: options.root,
66
+ slot
67
+ };
68
+ const widget = new WebWidgetRenderer(loader, rendererOptions);
69
+ const lightChildren = Object.entries(slots).flatMap(
70
+ ([name, render]) => render ? render().map((node) => {
71
+ var _a, _b, _c, _d, _e;
72
+ if (name !== "default") {
73
+ (_a = node.data) != null ? _a : node.data = {};
74
+ (_c = (_b = node.data).attrs) != null ? _c : _b.attrs = {};
75
+ (_e = (_d = node.data.attrs).slot) != null ? _e : _d.slot = name;
76
+ }
77
+ return node;
78
+ }) : []
79
+ );
80
+ const instance = getCurrentInstance();
81
+ instance.proxy.$widget = widget;
82
+ instance.proxy.$lightChildren = lightChildren;
83
+ return () => {
84
+ const activeWidget = instance.proxy.$widget;
85
+ const innerHTML = instance.proxy.$innerHTML;
86
+ const children = renderChildren ? void 0 : lightChildren.length ? lightChildren : void 0;
87
+ return h(
88
+ activeWidget.localName,
89
+ {
90
+ attrs: activeWidget.attributes,
91
+ ...innerHTML !== void 0 ? { domProps: { innerHTML } } : null
92
+ },
93
+ children
94
+ );
95
+ };
96
+ }
97
+ });
98
+ };
99
+ }
100
+
101
+ export {
102
+ createWidgetAdapter
103
+ };
@@ -0,0 +1,45 @@
1
+ import { WidgetContainerProps, WidgetContainerOptions, WidgetHostProps, ExtractWidgetProps, WidgetModuleLoader } from '@web-widget/schema';
2
+ import Vue, { DefineComponent, Component } from 'vue';
3
+ import { SerializableValue } from '@web-widget/helpers';
4
+
5
+ /**
6
+ * A Vue2 component wrapping a widget, with props `T` plus container config.
7
+ */
8
+ type VueWidgetComponent<T = unknown> = DefineComponent<T & WidgetHostProps & {
9
+ widget?: Vue2WidgetContainerProps;
10
+ }>;
11
+ type DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;
12
+ type Vue2WidgetContainerProps = DistributiveOmit<WidgetContainerProps, 'fallback'>;
13
+ /**
14
+ * Container function (AdapterModule contract).
15
+ *
16
+ * Wraps a widget module loader into a Vue2 component with best-effort
17
+ * props type inference from the source module's default export.
18
+ */
19
+ interface Vue2WidgetFactory {
20
+ <M>(loader: () => Promise<M>, options?: WidgetContainerOptions): VueWidgetComponent<ExtractWidgetProps<M>>;
21
+ <Props>(loader: WidgetModuleLoader, options?: WidgetContainerOptions): VueWidgetComponent<Props>;
22
+ }
23
+
24
+ interface SerializableObject {
25
+ [key: string]: SerializableValue;
26
+ }
27
+ interface CreateVueRenderOptions {
28
+ onBeforeCreateApp?: (context: {
29
+ container?: Element | DocumentFragment;
30
+ data: any;
31
+ progressive?: boolean;
32
+ recovering?: boolean;
33
+ }, component: Component, props: any) => Promise<any>;
34
+ onCreatedApp?: (app: Vue, context: {
35
+ data: any;
36
+ }, component: Component, props: any) => Promise<void>;
37
+ /**@deprecated*/
38
+ onPrefetchData?: (context: {
39
+ data: any;
40
+ }, component: Component,
41
+ /**@deprecated*/
42
+ props: any) => Promise<SerializableObject>;
43
+ }
44
+
45
+ export type { CreateVueRenderOptions as C, Vue2WidgetFactory as V, Vue2WidgetContainerProps as a, VueWidgetComponent as b };
@@ -1,13 +1,14 @@
1
1
  import * as _web_widget_schema from '@web-widget/schema';
2
+ export { WidgetContainerOptions } from '@web-widget/schema';
3
+ import { C as CreateVueRenderOptions, V as Vue2WidgetFactory } from './types-BWQUJEPi.js';
4
+ export { a as Vue2WidgetContainerProps, b as VueWidgetComponent } from './types-BWQUJEPi.js';
2
5
  import { Component } from 'vue';
3
- import { C as CreateVueRenderOptions } from './types-DSyp4jjz.js';
4
- export { D as DefineWebWidgetOptions, V as VueWidgetComponent, W as WidgetContainerConfig, c as container } from './types-DSyp4jjz.js';
5
6
  export { asReactWidget, toReact } from './vue2.js';
6
- import '@web-widget/web-widget';
7
7
  import '@web-widget/helpers';
8
8
  import 'vue/types/options';
9
9
  import '@web-widget/react/adapter';
10
10
 
11
+ declare const widget: Vue2WidgetFactory;
11
12
  type EnhancedComponent = Component & {
12
13
  __name?: string;
13
14
  };
@@ -16,4 +17,4 @@ declare const createVueRender: ({ onBeforeCreateApp, onCreatedApp, onPrefetchDat
16
17
  declare const defineVueRender: ({ onBeforeCreateApp, onCreatedApp, onPrefetchData, }?: CreateVueRenderOptions) => _web_widget_schema.ClientRender<EnhancedComponent, unknown, _web_widget_schema.ClientRenderOptions, void | _web_widget_schema.ClientRenderResult<unknown>>;
17
18
  declare const render: _web_widget_schema.ClientRender<EnhancedComponent, unknown, _web_widget_schema.ClientRenderOptions, void | _web_widget_schema.ClientRenderResult<unknown>>;
18
19
 
19
- export { createVueRender, defineVueRender, render };
20
+ export { Vue2WidgetFactory, createVueRender, defineVueRender, render, widget };
@@ -1,6 +1,6 @@
1
1
  import {
2
- container
3
- } from "./chunk-B5NQMGE5.js";
2
+ createWidgetAdapter
3
+ } from "./chunk-37GMCFVQ.js";
4
4
  import {
5
5
  asReactWidget,
6
6
  toReact
@@ -10,12 +10,13 @@ import {
10
10
  import { defineClientRender } from "@web-widget/helpers";
11
11
  import { cacheProviderIsLoading } from "@web-widget/helpers/cache";
12
12
  import Vue from "vue";
13
+ var widget = createWidgetAdapter();
13
14
  function sanitizeComponentName(name) {
14
15
  return name.replace("@", "-");
15
16
  }
16
- function clearContainerContent(container2) {
17
- if ("innerHTML" in container2) {
18
- container2.innerHTML = "";
17
+ function clearContainerContent(container) {
18
+ if ("innerHTML" in container) {
19
+ container.innerHTML = "";
19
20
  }
20
21
  }
21
22
  var createVueRender = ({
@@ -25,27 +26,27 @@ var createVueRender = ({
25
26
  onPrefetchData
26
27
  } = {}) => {
27
28
  return defineClientRender(
28
- async (component, data, { recovering, container: container2 }) => {
29
+ async (component, data, { recovering, container }) => {
29
30
  data = data != null ? data : {};
30
31
  if (!component) {
31
32
  throw new TypeError(`Missing component.`);
32
33
  }
33
- if (!container2) {
34
+ if (!container) {
34
35
  throw new Error(`Missing container.`);
35
36
  }
36
37
  if (component.__name) {
37
38
  component.__name = sanitizeComponentName(component.__name);
38
39
  }
39
40
  let app;
40
- const context = { data, recovering, container: container2 };
41
+ const context = { data, recovering, container };
41
42
  return {
42
43
  async mount() {
43
- let ssrRoot = container2;
44
+ let ssrRoot = container;
44
45
  let mergedProps = data;
45
46
  if (recovering) {
46
47
  const vue2ssrAttrSelector = `[data-server-rendered="true"]`;
47
- const root = container2.querySelector(vue2ssrAttrSelector) || container2.firstElementChild;
48
- const state = container2.querySelector(
48
+ const root = container.querySelector(vue2ssrAttrSelector) || container.firstElementChild;
49
+ const state = container.querySelector(
49
50
  "script[as=state]"
50
51
  );
51
52
  const stateContent = state ? JSON.parse(state.textContent) : onPrefetchData ? await onPrefetchData(context, component, data) : void 0;
@@ -79,17 +80,17 @@ var createVueRender = ({
79
80
  if (recovering) {
80
81
  app.$mount(ssrRoot, recovering);
81
82
  } else {
82
- container2.appendChild(app.$mount().$el);
83
+ container.appendChild(app.$mount().$el);
83
84
  }
84
85
  if (loading) {
85
86
  recovering = false;
86
- clearContainerContent(container2);
87
+ clearContainerContent(container);
87
88
  throw loading;
88
89
  }
89
90
  },
90
91
  async unmount() {
91
92
  app == null ? void 0 : app.$destroy();
92
- clearContainerContent(container2);
93
+ clearContainerContent(container);
93
94
  app = null;
94
95
  }
95
96
  };
@@ -100,9 +101,9 @@ var defineVueRender = createVueRender;
100
101
  var render = createVueRender();
101
102
  export {
102
103
  asReactWidget,
103
- container,
104
104
  createVueRender,
105
105
  defineVueRender,
106
106
  render,
107
- toReact
107
+ toReact,
108
+ widget
108
109
  };
@@ -1,13 +1,14 @@
1
1
  import * as _web_widget_schema from '@web-widget/schema';
2
+ export { WidgetContainerOptions } from '@web-widget/schema';
3
+ import { C as CreateVueRenderOptions, V as Vue2WidgetFactory } from './types-BWQUJEPi.js';
4
+ export { a as Vue2WidgetContainerProps, b as VueWidgetComponent } from './types-BWQUJEPi.js';
2
5
  import { Component } from 'vue';
3
- import { C as CreateVueRenderOptions } from './types-DSyp4jjz.js';
4
- export { D as DefineWebWidgetOptions, V as VueWidgetComponent, W as WidgetContainerConfig, c as container } from './types-DSyp4jjz.js';
5
6
  export { asReactWidget, toReact } from './vue2.js';
6
- import '@web-widget/web-widget';
7
7
  import '@web-widget/helpers';
8
8
  import 'vue/types/options';
9
9
  import '@web-widget/react/adapter';
10
10
 
11
+ declare const widget: Vue2WidgetFactory;
11
12
  type BuildedComponent = Component & {
12
13
  __name?: string;
13
14
  };
@@ -16,4 +17,4 @@ declare const createVueRender: ({ onBeforeCreateApp, onCreatedApp, onPrefetchDat
16
17
  declare const defineVueRender: ({ onBeforeCreateApp, onCreatedApp, onPrefetchData, }?: CreateVueRenderOptions) => _web_widget_schema.ServerRender<BuildedComponent, unknown, _web_widget_schema.ServerRenderOptions, _web_widget_schema.ServerRenderResult>;
17
18
  declare const render: _web_widget_schema.ServerRender<BuildedComponent, unknown, _web_widget_schema.ServerRenderOptions, _web_widget_schema.ServerRenderResult>;
18
19
 
19
- export { createVueRender, defineVueRender, render };
20
+ export { Vue2WidgetFactory, createVueRender, defineVueRender, render, widget };
@@ -1,6 +1,6 @@
1
1
  import {
2
- container
3
- } from "./chunk-B5NQMGE5.js";
2
+ createWidgetAdapter
3
+ } from "./chunk-37GMCFVQ.js";
4
4
  import {
5
5
  asReactWidget,
6
6
  toReact
@@ -11,6 +11,15 @@ import { defineServerRender } from "@web-widget/helpers";
11
11
  import { escapeJson } from "@web-widget/helpers/purify";
12
12
  import Vue from "vue";
13
13
  import { createRenderer } from "vue-server-renderer";
14
+ var widget = createWidgetAdapter(async (children) => {
15
+ if (!children.length) return "";
16
+ const renderer = createRenderer();
17
+ return (await Promise.all(
18
+ children.map(
19
+ (node) => renderer.renderToString(new Vue({ render: () => node }))
20
+ )
21
+ )).join("");
22
+ });
14
23
  function sanitizeComponentName(name) {
15
24
  return name.replace("@", "-");
16
25
  }
@@ -41,7 +50,9 @@ var createVueRender = ({
41
50
  });
42
51
  await onCreatedApp(app, context, component, mergedProps);
43
52
  if (progressive) {
44
- console.warn(`Vue2 does not support progressive rendering.`);
53
+ console.warn(
54
+ `Vue 2 does not support progressive server rendering; falling back to buffered rendering.`
55
+ );
45
56
  }
46
57
  const ssrContext = {};
47
58
  const result = await renderer.renderToString(app, ssrContext);
@@ -60,9 +71,9 @@ var defineVueRender = createVueRender;
60
71
  var render = createVueRender();
61
72
  export {
62
73
  asReactWidget,
63
- container,
64
74
  createVueRender,
65
75
  defineVueRender,
66
76
  render,
67
- toReact
77
+ toReact,
78
+ widget
68
79
  };
package/dist/vue2.d.ts CHANGED
@@ -5,15 +5,15 @@ import { ReactWidgetComponent } from '@web-widget/react/adapter';
5
5
  /**
6
6
  * Adapt Vue component types to React widget component types.
7
7
  *
8
- * @deprecated Use `container()` from `@web-widget/react/adapter` instead.
8
+ * @deprecated Use `widget()` from `@web-widget/react/adapter` instead.
9
9
  * The build tool automatically infers props types for both static imports
10
- * and explicit `container(() => import(...))` calls.
10
+ * and explicit `widget(() => import(...))` calls.
11
11
  *
12
12
  * This is a type-level cast only — the actual cross-framework rendering
13
13
  * is handled by the `@widget` system.
14
14
  */
15
15
  declare function asReactWidget<T extends DefaultProps>(component: Component<never, never, never, T, never>): ReactWidgetComponent<Omit<T, keyof ComponentPublicInstance | "$route" | "$router">>;
16
- /** @deprecated Use `container()` from `@web-widget/react/adapter` instead. */
16
+ /** @deprecated Use `widget()` from `@web-widget/react/adapter` instead. */
17
17
  declare const toReact: typeof asReactWidget;
18
18
 
19
19
  export { asReactWidget, toReact };
@@ -0,0 +1,11 @@
1
+ declare const _default: {
2
+ name: string;
3
+ extensions: string[];
4
+ adapter: string;
5
+ deriveExports: {
6
+ name: string;
7
+ default: string;
8
+ }[];
9
+ };
10
+
11
+ export { _default as default };
@@ -0,0 +1,13 @@
1
+ // src/transform.ts
2
+ var transform_default = {
3
+ name: "vue2",
4
+ extensions: [".vue"],
5
+ adapter: "@web-widget/vue2/adapter",
6
+ deriveExports: [
7
+ { name: "handler", default: "{GET({render}){return render()}}" },
8
+ { name: "meta", default: "{}" }
9
+ ]
10
+ };
11
+ export {
12
+ transform_default as default
13
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@web-widget/vue2",
3
3
  "description": "Vue2 adapter",
4
- "version": "3.0.0-beta.2",
4
+ "version": "3.0.0-beta.5",
5
5
  "homepage": "https://github.com/web-widget/web-widget#readme",
6
6
  "repository": {
7
7
  "type": "git",
@@ -13,56 +13,49 @@
13
13
  },
14
14
  "license": "MIT",
15
15
  "dependencies": {
16
- "@web-widget/helpers": "3.0.0-beta.2",
17
- "@web-widget/schema": "3.0.0-beta.2",
18
- "@web-widget/web-widget": "3.0.0-beta.2",
19
- "@web-widget/react": "3.0.0-beta.2"
16
+ "@web-widget/helpers": "workspace:*",
17
+ "@web-widget/schema": "workspace:*",
18
+ "@web-widget/web-widget": "workspace:*",
19
+ "@web-widget/react": "workspace:*"
20
20
  },
21
21
  "devDependencies": {
22
- "@types/node": "^22.2.0",
23
- "tsup": "^8.3.4",
24
- "typescript": "^5.9.3",
22
+ "@types/node": "catalog:",
23
+ "happy-dom": "14.12.3",
24
+ "tsup": "catalog:",
25
+ "typescript": "catalog:",
26
+ "vitest": "catalog:",
25
27
  "vue": "^2.7.16",
26
28
  "vue-server-renderer": "^2.7.16"
27
29
  },
28
30
  "exports": {
29
31
  ".": {
30
32
  "types": "./dist/vue2.d.ts",
33
+ "development": "./src/index.ts",
31
34
  "default": "./dist/vue2.js"
32
35
  },
36
+ "./transform": {
37
+ "types": "./dist/vue2.transform.d.ts",
38
+ "development": "./src/transform.ts",
39
+ "default": "./dist/vue2.transform.js"
40
+ },
33
41
  "./adapter": {
34
42
  "worker": {
35
43
  "types": "./dist/vue2.adapter.server.d.ts",
44
+ "development": "./src/adapter.server.ts",
36
45
  "default": "./dist/vue2.adapter.server.js"
37
46
  },
38
47
  "browser": {
39
48
  "types": "./dist/vue2.adapter.client.d.ts",
49
+ "development": "./src/adapter.client.ts",
40
50
  "default": "./dist/vue2.adapter.client.js"
41
51
  },
42
52
  "default": {
43
53
  "types": "./dist/vue2.adapter.server.d.ts",
54
+ "development": "./src/adapter.server.ts",
44
55
  "default": "./dist/vue2.adapter.server.js"
45
56
  }
46
57
  }
47
58
  },
48
- "webWidgetAdapter": {
49
- "version": "1.0.0",
50
- "name": "vue2",
51
- "extensions": [
52
- ".vue"
53
- ],
54
- "adapter": "./adapter",
55
- "deriveExports": [
56
- {
57
- "name": "handler",
58
- "default": "{GET({render}){return render()}}"
59
- },
60
- {
61
- "name": "meta",
62
- "default": "{}"
63
- }
64
- ]
65
- },
66
59
  "files": [
67
60
  "dist"
68
61
  ],
@@ -71,16 +64,41 @@
71
64
  "vue-server-renderer": "^2.7.16"
72
65
  },
73
66
  "publishConfig": {
74
- "access": "public"
67
+ "access": "public",
68
+ "exports": {
69
+ ".": {
70
+ "types": "./dist/vue2.d.ts",
71
+ "default": "./dist/vue2.js"
72
+ },
73
+ "./transform": {
74
+ "types": "./dist/vue2.transform.d.ts",
75
+ "default": "./dist/vue2.transform.js"
76
+ },
77
+ "./adapter": {
78
+ "worker": {
79
+ "types": "./dist/vue2.adapter.server.d.ts",
80
+ "default": "./dist/vue2.adapter.server.js"
81
+ },
82
+ "browser": {
83
+ "types": "./dist/vue2.adapter.client.d.ts",
84
+ "default": "./dist/vue2.adapter.client.js"
85
+ },
86
+ "default": {
87
+ "types": "./dist/vue2.adapter.server.d.ts",
88
+ "default": "./dist/vue2.adapter.server.js"
89
+ }
90
+ }
91
+ }
75
92
  },
76
- "sideEffects": false,
77
- "type": "module",
78
93
  "scripts": {
79
94
  "build": "pnpm exec tsup",
80
95
  "clean:build": "rm -rf dist",
81
96
  "clean:node": "rm -rf node_modules",
82
97
  "dev": "pnpm exec tsup --watch",
83
98
  "lint": "eslint src",
84
- "prebuild": "pnpm run clean:build"
85
- }
86
- }
99
+ "prebuild": "pnpm run clean:build",
100
+ "test": "vitest run"
101
+ },
102
+ "sideEffects": false,
103
+ "type": "module"
104
+ }
@@ -1,76 +0,0 @@
1
- // src/components.ts
2
- import { WebWidgetRenderer } from "@web-widget/web-widget";
3
- import Vue, { h, defineComponent, useAttrs, getCurrentInstance } from "vue";
4
- var globalConfigInitialized = false;
5
- function ensureGlobalVueConfig() {
6
- if (globalConfigInitialized) return;
7
- globalConfigInitialized = true;
8
- Vue.config.ignoredElements = ["web-widget"];
9
- const prevWarnHandler = Vue.config.warnHandler;
10
- Vue.config.warnHandler = (msg, _vm, trace) => {
11
- if (msg.includes(`[object Promise]`)) {
12
- return;
13
- }
14
- if (prevWarnHandler) {
15
- prevWarnHandler.call(null, msg, _vm, trace);
16
- } else {
17
- console.error("[Vue warn]: ".concat(msg).concat(trace));
18
- }
19
- };
20
- }
21
- function container(loader, options = {}) {
22
- if (!loader) {
23
- throw new TypeError(`Missing loader.`);
24
- }
25
- ensureGlobalVueConfig();
26
- return defineComponent({
27
- name: "VueWidget",
28
- inheritAttrs: false,
29
- props: {
30
- widget: {
31
- type: Object,
32
- default: () => ({})
33
- }
34
- },
35
- async serverPrefetch() {
36
- const widget = this.$widget;
37
- this.$innerHTML = await widget.renderInnerHTMLToString();
38
- },
39
- setup(props, { slots }) {
40
- var _a, _b;
41
- if (Object.keys(slots).length > 0) {
42
- throw new TypeError(`Slot not supported.`);
43
- }
44
- if (props.widget && "fallback" in props.widget) {
45
- throw new TypeError(`fallback is not supported in Vue2 (no Suspense).`);
46
- }
47
- const {
48
- loading = (_a = options.loading) != null ? _a : "lazy",
49
- serverOnly,
50
- clientOnly
51
- } = props.widget;
52
- const renderStage = serverOnly ? "server" : clientOnly ? "client" : options.renderStage;
53
- const data = useAttrs();
54
- const widget = new WebWidgetRenderer(loader, {
55
- ...options,
56
- data,
57
- loading,
58
- renderStage,
59
- renderTarget: (_b = options.renderTarget) != null ? _b : "light"
60
- });
61
- const instance = getCurrentInstance();
62
- instance.proxy.$widget = widget;
63
- return () => {
64
- const innerHTML = instance.proxy.$innerHTML;
65
- return h(widget.localName, {
66
- attrs: widget.attributes,
67
- domProps: { innerHTML }
68
- });
69
- };
70
- }
71
- });
72
- }
73
-
74
- export {
75
- container
76
- };
@@ -1,60 +0,0 @@
1
- import { WebWidgetRendererOptions, Loader } from '@web-widget/web-widget';
2
- import { ExtractWidgetProps } from '@web-widget/schema';
3
- import Vue, { DefineComponent, Component } from 'vue';
4
- import { SerializableValue } from '@web-widget/helpers';
5
-
6
- /**
7
- * A Vue2 component wrapping a widget, with props `T` plus container config.
8
- */
9
- type VueWidgetComponent<T = unknown> = DefineComponent<{
10
- widget?: WidgetContainerConfig;
11
- }> & {
12
- attrs: T;
13
- };
14
- interface DefineWebWidgetOptions {
15
- base?: WebWidgetRendererOptions['base'];
16
- import?: WebWidgetRendererOptions['import'];
17
- loading?: WebWidgetRendererOptions['loading'];
18
- name?: WebWidgetRendererOptions['name'];
19
- renderStage?: WebWidgetRendererOptions['renderStage'];
20
- renderTarget?: WebWidgetRendererOptions['renderTarget'];
21
- }
22
- interface WidgetContainerConfig {
23
- /** Client-side module loading strategy */
24
- loading?: WebWidgetRendererOptions['loading'];
25
- /** Widget renders only on the server, not mounted on the client. Mutually exclusive with `clientOnly`. */
26
- serverOnly?: true;
27
- /** Widget renders only on the client, producing no server HTML. Mutually exclusive with `serverOnly`. */
28
- clientOnly?: true;
29
- }
30
- /**
31
- * Container function (WebWidgetAdapter protocol).
32
- *
33
- * Wraps a widget module loader into a Vue2 component with best-effort
34
- * props type inference from the source module's default export.
35
- */
36
- declare function container<M>(loader: () => Promise<M>, options?: DefineWebWidgetOptions): VueWidgetComponent<ExtractWidgetProps<M>>;
37
- declare function container<Props>(loader: Loader, options?: DefineWebWidgetOptions): VueWidgetComponent<Props>;
38
-
39
- interface SerializableObject {
40
- [key: string]: SerializableValue;
41
- }
42
- interface CreateVueRenderOptions {
43
- onBeforeCreateApp?: (context: {
44
- container?: Element | DocumentFragment;
45
- data: any;
46
- progressive?: boolean;
47
- recovering?: boolean;
48
- }, component: Component, props: any) => Promise<any>;
49
- onCreatedApp?: (app: Vue, context: {
50
- data: any;
51
- }, component: Component, props: any) => Promise<void>;
52
- /**@deprecated*/
53
- onPrefetchData?: (context: {
54
- data: any;
55
- }, component: Component,
56
- /**@deprecated*/
57
- props: any) => Promise<SerializableObject>;
58
- }
59
-
60
- export { type CreateVueRenderOptions as C, type DefineWebWidgetOptions as D, type VueWidgetComponent as V, type WidgetContainerConfig as W, container as c };