@web-widget/vue2 3.0.0-beta.3 → 3.0.0-beta.6
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/chunk-37GMCFVQ.js +103 -0
- package/dist/types-BWQUJEPi.d.ts +45 -0
- package/dist/vue2.adapter.client.d.ts +5 -4
- package/dist/vue2.adapter.client.js +17 -16
- package/dist/vue2.adapter.server.d.ts +5 -4
- package/dist/vue2.adapter.server.js +16 -5
- package/dist/vue2.d.ts +3 -3
- package/dist/vue2.transform.d.ts +11 -0
- package/dist/vue2.transform.js +13 -0
- package/package.json +13 -24
- package/dist/chunk-B5NQMGE5.js +0 -76
- package/dist/types-DSyp4jjz.d.ts +0 -60
|
@@ -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
|
-
|
|
3
|
-
} from "./chunk-
|
|
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(
|
|
17
|
-
if ("innerHTML" in
|
|
18
|
-
|
|
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
|
|
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 (!
|
|
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
|
|
41
|
+
const context = { data, recovering, container };
|
|
41
42
|
return {
|
|
42
43
|
async mount() {
|
|
43
|
-
let ssrRoot =
|
|
44
|
+
let ssrRoot = container;
|
|
44
45
|
let mergedProps = data;
|
|
45
46
|
if (recovering) {
|
|
46
47
|
const vue2ssrAttrSelector = `[data-server-rendered="true"]`;
|
|
47
|
-
const root =
|
|
48
|
-
const state =
|
|
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
|
-
|
|
83
|
+
container.appendChild(app.$mount().$el);
|
|
83
84
|
}
|
|
84
85
|
if (loading) {
|
|
85
86
|
recovering = false;
|
|
86
|
-
clearContainerContent(
|
|
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(
|
|
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
|
-
|
|
3
|
-
} from "./chunk-
|
|
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(
|
|
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 `
|
|
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 `
|
|
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 `
|
|
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,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.
|
|
4
|
+
"version": "3.0.0-beta.6",
|
|
5
5
|
"homepage": "https://github.com/web-widget/web-widget#readme",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -13,15 +13,17 @@
|
|
|
13
13
|
},
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@web-widget/helpers": "3.0.0-beta.
|
|
17
|
-
"@web-widget/schema": "3.0.0-beta.
|
|
18
|
-
"@web-widget/
|
|
19
|
-
"@web-widget/
|
|
16
|
+
"@web-widget/helpers": "3.0.0-beta.6",
|
|
17
|
+
"@web-widget/schema": "3.0.0-beta.6",
|
|
18
|
+
"@web-widget/web-widget": "3.0.0-beta.6",
|
|
19
|
+
"@web-widget/react": "3.0.0-beta.6"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/node": "^22.2.0",
|
|
23
|
+
"happy-dom": "14.12.3",
|
|
23
24
|
"tsup": "^8.3.4",
|
|
24
25
|
"typescript": "^5.9.3",
|
|
26
|
+
"vitest": "^4.1.6",
|
|
25
27
|
"vue": "^2.7.16",
|
|
26
28
|
"vue-server-renderer": "^2.7.16"
|
|
27
29
|
},
|
|
@@ -30,6 +32,10 @@
|
|
|
30
32
|
"types": "./dist/vue2.d.ts",
|
|
31
33
|
"default": "./dist/vue2.js"
|
|
32
34
|
},
|
|
35
|
+
"./transform": {
|
|
36
|
+
"types": "./dist/vue2.transform.d.ts",
|
|
37
|
+
"default": "./dist/vue2.transform.js"
|
|
38
|
+
},
|
|
33
39
|
"./adapter": {
|
|
34
40
|
"worker": {
|
|
35
41
|
"types": "./dist/vue2.adapter.server.d.ts",
|
|
@@ -45,24 +51,6 @@
|
|
|
45
51
|
}
|
|
46
52
|
}
|
|
47
53
|
},
|
|
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
54
|
"files": [
|
|
67
55
|
"dist"
|
|
68
56
|
],
|
|
@@ -81,6 +69,7 @@
|
|
|
81
69
|
"clean:node": "rm -rf node_modules",
|
|
82
70
|
"dev": "pnpm exec tsup --watch",
|
|
83
71
|
"lint": "eslint src",
|
|
84
|
-
"prebuild": "pnpm run clean:build"
|
|
72
|
+
"prebuild": "pnpm run clean:build",
|
|
73
|
+
"test": "vitest run"
|
|
85
74
|
}
|
|
86
75
|
}
|
package/dist/chunk-B5NQMGE5.js
DELETED
|
@@ -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
|
-
};
|
package/dist/types-DSyp4jjz.d.ts
DELETED
|
@@ -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 };
|