@web-widget/solid 3.0.0-beta.2
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-35N5BM2J.js +61 -0
- package/dist/components-BfyNPS03.d.ts +22 -0
- package/dist/solid.adapter.client.d.ts +8 -0
- package/dist/solid.adapter.client.js +36 -0
- package/dist/solid.adapter.server.d.ts +8 -0
- package/dist/solid.adapter.server.js +45 -0
- package/dist/solid.d.ts +2 -0
- package/dist/solid.js +0 -0
- package/package.json +63 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// src/components.ts
|
|
2
|
+
import {
|
|
3
|
+
ErrorBoundary,
|
|
4
|
+
Suspense,
|
|
5
|
+
createComponent,
|
|
6
|
+
createResource,
|
|
7
|
+
splitProps
|
|
8
|
+
} from "solid-js";
|
|
9
|
+
import { Dynamic } from "solid-js/web";
|
|
10
|
+
import { WebWidgetRenderer } from "@web-widget/web-widget";
|
|
11
|
+
function resolveFallback(fallback) {
|
|
12
|
+
var _a;
|
|
13
|
+
if (fallback !== null && typeof fallback === "object" && ("pending" in fallback || "error" in fallback)) {
|
|
14
|
+
return {
|
|
15
|
+
pending: fallback.pending,
|
|
16
|
+
error: (_a = fallback.error) != null ? _a : fallback.pending
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
return { pending: fallback, error: fallback };
|
|
20
|
+
}
|
|
21
|
+
function container(loader, options = {}) {
|
|
22
|
+
return (props) => {
|
|
23
|
+
var _a, _b, _c, _d;
|
|
24
|
+
const [local, data] = splitProps(props, ["children", "widget"]);
|
|
25
|
+
if (local.children) throw new TypeError("Children not supported.");
|
|
26
|
+
const widget = (_a = local.widget) != null ? _a : {};
|
|
27
|
+
const fallback = resolveFallback(widget.fallback);
|
|
28
|
+
const renderStage = widget.serverOnly ? "server" : widget.clientOnly ? "client" : options.renderStage;
|
|
29
|
+
const renderer = new WebWidgetRenderer(loader, {
|
|
30
|
+
...options,
|
|
31
|
+
children: "",
|
|
32
|
+
data,
|
|
33
|
+
loading: (_c = (_b = widget.loading) != null ? _b : options.loading) != null ? _c : "lazy",
|
|
34
|
+
renderStage,
|
|
35
|
+
renderTarget: (_d = options.renderTarget) != null ? _d : "light"
|
|
36
|
+
});
|
|
37
|
+
const [html] = createResource(() => renderer.renderInnerHTMLToString());
|
|
38
|
+
const content = () => createComponent(Dynamic, {
|
|
39
|
+
component: renderer.localName,
|
|
40
|
+
...renderer.attributes,
|
|
41
|
+
get innerHTML() {
|
|
42
|
+
return html();
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
return createComponent(ErrorBoundary, {
|
|
46
|
+
fallback: () => fallback.error,
|
|
47
|
+
get children() {
|
|
48
|
+
return createComponent(Suspense, {
|
|
49
|
+
fallback: fallback.pending,
|
|
50
|
+
get children() {
|
|
51
|
+
return content();
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export {
|
|
60
|
+
container
|
|
61
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Component, JSX } from 'solid-js';
|
|
2
|
+
import { WebWidgetRendererOptions, Loader } from '@web-widget/web-widget';
|
|
3
|
+
import { ExtractWidgetProps } from '@web-widget/schema';
|
|
4
|
+
|
|
5
|
+
type DefineWebWidgetOptions = Partial<Pick<WebWidgetRendererOptions, 'base' | 'import' | 'loading' | 'name' | 'renderStage' | 'renderTarget'>>;
|
|
6
|
+
interface WidgetContainerConfig {
|
|
7
|
+
fallback?: JSX.Element | {
|
|
8
|
+
pending?: JSX.Element;
|
|
9
|
+
error?: JSX.Element;
|
|
10
|
+
};
|
|
11
|
+
loading?: WebWidgetRendererOptions['loading'];
|
|
12
|
+
serverOnly?: true;
|
|
13
|
+
clientOnly?: true;
|
|
14
|
+
}
|
|
15
|
+
type SolidWidgetComponent<T = unknown> = Component<T & {
|
|
16
|
+
children?: JSX.Element;
|
|
17
|
+
widget?: WidgetContainerConfig;
|
|
18
|
+
}>;
|
|
19
|
+
declare function container<M>(loader: () => Promise<M>, options?: DefineWebWidgetOptions): SolidWidgetComponent<ExtractWidgetProps<M>>;
|
|
20
|
+
declare function container<Props>(loader: Loader, options?: DefineWebWidgetOptions): SolidWidgetComponent<Props>;
|
|
21
|
+
|
|
22
|
+
export { type DefineWebWidgetOptions as D, type SolidWidgetComponent as S, type WidgetContainerConfig as W, container as c };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as _web_widget_schema from '@web-widget/schema';
|
|
2
|
+
import { Component } from 'solid-js';
|
|
3
|
+
export { D as DefineWebWidgetOptions, S as SolidWidgetComponent, W as WidgetContainerConfig, c as container } from './components-BfyNPS03.js';
|
|
4
|
+
import '@web-widget/web-widget';
|
|
5
|
+
|
|
6
|
+
declare const render: _web_widget_schema.ClientRender<Component<any>, unknown, _web_widget_schema.ClientRenderOptions, void | _web_widget_schema.ClientRenderResult<unknown>>;
|
|
7
|
+
|
|
8
|
+
export { render };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import {
|
|
2
|
+
container
|
|
3
|
+
} from "./chunk-35N5BM2J.js";
|
|
4
|
+
|
|
5
|
+
// src/adapter.client.ts
|
|
6
|
+
import { defineClientRender } from "@web-widget/helpers";
|
|
7
|
+
import { createComponent } from "solid-js";
|
|
8
|
+
import { hydrate, render as renderComponent } from "solid-js/web";
|
|
9
|
+
var render = defineClientRender(
|
|
10
|
+
async (component, data, { container: container2, recovering }) => {
|
|
11
|
+
if (!component) throw new TypeError("Missing component.");
|
|
12
|
+
if (!container2) throw new Error("Missing container.");
|
|
13
|
+
let dispose;
|
|
14
|
+
return {
|
|
15
|
+
mount() {
|
|
16
|
+
const view = () => createComponent(component, data != null ? data : {});
|
|
17
|
+
const isIsolatedWidget = container2 instanceof Element && container2.hasAttribute("recovering") && container2.hasAttribute("import");
|
|
18
|
+
const canHydrate = recovering && !isIsolatedWidget && Reflect.has(globalThis, "_$HY");
|
|
19
|
+
if (canHydrate) {
|
|
20
|
+
dispose = hydrate(view, container2);
|
|
21
|
+
} else {
|
|
22
|
+
container2.replaceChildren();
|
|
23
|
+
dispose = renderComponent(view, container2);
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
unmount() {
|
|
27
|
+
dispose == null ? void 0 : dispose();
|
|
28
|
+
dispose = void 0;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
export {
|
|
34
|
+
container,
|
|
35
|
+
render
|
|
36
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as _web_widget_schema from '@web-widget/schema';
|
|
2
|
+
import { Component } from 'solid-js';
|
|
3
|
+
export { D as DefineWebWidgetOptions, S as SolidWidgetComponent, W as WidgetContainerConfig, c as container } from './components-BfyNPS03.js';
|
|
4
|
+
import '@web-widget/web-widget';
|
|
5
|
+
|
|
6
|
+
declare const render: _web_widget_schema.ServerRender<Component<any>, unknown, _web_widget_schema.ServerRenderOptions, _web_widget_schema.ServerRenderResult>;
|
|
7
|
+
|
|
8
|
+
export { render };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {
|
|
2
|
+
container
|
|
3
|
+
} from "./chunk-35N5BM2J.js";
|
|
4
|
+
|
|
5
|
+
// src/adapter.server.ts
|
|
6
|
+
import { defineServerRender } from "@web-widget/helpers";
|
|
7
|
+
import { createComponent } from "solid-js";
|
|
8
|
+
import { renderToStream, renderToStringAsync } from "solid-js/web";
|
|
9
|
+
var HYDRATION_SCRIPT_FALLBACK = [
|
|
10
|
+
"<script>",
|
|
11
|
+
'window._$HY||(e=>{let t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")?e:t(e.host&&e.host.nodeType?e.host:e.parentNode));',
|
|
12
|
+
'["click","input"].forEach(o=>document.addEventListener(o,o=>{if(!e.events)return;let s=t(o.composedPath&&o.composedPath()[0]||o.target);',
|
|
13
|
+
"s&&!e.completed.has(s)&&e.events.push([s,o])}))})(_$HY={events:[],completed:new WeakSet,r:{},fe(){}});",
|
|
14
|
+
"</script><!--xs-->"
|
|
15
|
+
].join("");
|
|
16
|
+
var render = defineServerRender(
|
|
17
|
+
async (component, data, { progressive }) => {
|
|
18
|
+
if (!component) throw new TypeError("Missing component.");
|
|
19
|
+
const view = () => createComponent(component, data != null ? data : {});
|
|
20
|
+
if (!progressive) {
|
|
21
|
+
return HYDRATION_SCRIPT_FALLBACK + await renderToStringAsync(view);
|
|
22
|
+
}
|
|
23
|
+
return new ReadableStream({
|
|
24
|
+
start(controller) {
|
|
25
|
+
let shellPending = true;
|
|
26
|
+
const writable = {
|
|
27
|
+
write(chunk) {
|
|
28
|
+
controller.enqueue(
|
|
29
|
+
shellPending ? HYDRATION_SCRIPT_FALLBACK + chunk : chunk
|
|
30
|
+
);
|
|
31
|
+
shellPending = false;
|
|
32
|
+
},
|
|
33
|
+
end() {
|
|
34
|
+
controller.close();
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
renderToStream(view).pipe(writable);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
export {
|
|
43
|
+
container,
|
|
44
|
+
render
|
|
45
|
+
};
|
package/dist/solid.d.ts
ADDED
package/dist/solid.js
ADDED
|
File without changes
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@web-widget/solid",
|
|
3
|
+
"description": "Solid adapter",
|
|
4
|
+
"version": "3.0.0-beta.2",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"@web-widget/schema": "3.0.0-beta.2",
|
|
10
|
+
"@web-widget/web-widget": "3.0.0-beta.2",
|
|
11
|
+
"@web-widget/helpers": "3.0.0-beta.2"
|
|
12
|
+
},
|
|
13
|
+
"peerDependencies": {
|
|
14
|
+
"solid-js": "^1.9.0"
|
|
15
|
+
},
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"solid-js": "^1.9.14",
|
|
18
|
+
"tsup": "^8.3.4",
|
|
19
|
+
"typescript": "^5.9.3"
|
|
20
|
+
},
|
|
21
|
+
"exports": {
|
|
22
|
+
".": {
|
|
23
|
+
"types": "./dist/solid.d.ts",
|
|
24
|
+
"development": "./src/index.ts",
|
|
25
|
+
"default": "./dist/solid.js"
|
|
26
|
+
},
|
|
27
|
+
"./adapter": {
|
|
28
|
+
"worker": {
|
|
29
|
+
"types": "./dist/solid.adapter.server.d.ts",
|
|
30
|
+
"development": "./src/adapter.server.ts",
|
|
31
|
+
"default": "./dist/solid.adapter.server.js"
|
|
32
|
+
},
|
|
33
|
+
"browser": {
|
|
34
|
+
"types": "./dist/solid.adapter.client.d.ts",
|
|
35
|
+
"development": "./src/adapter.client.ts",
|
|
36
|
+
"default": "./dist/solid.adapter.client.js"
|
|
37
|
+
},
|
|
38
|
+
"default": {
|
|
39
|
+
"types": "./dist/solid.adapter.server.d.ts",
|
|
40
|
+
"development": "./src/adapter.server.ts",
|
|
41
|
+
"default": "./dist/solid.adapter.server.js"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"webWidgetAdapter": {
|
|
46
|
+
"version": "1.0.0",
|
|
47
|
+
"name": "solid",
|
|
48
|
+
"extensions": [
|
|
49
|
+
".tsx",
|
|
50
|
+
".jsx"
|
|
51
|
+
],
|
|
52
|
+
"adapter": "./adapter"
|
|
53
|
+
},
|
|
54
|
+
"files": [
|
|
55
|
+
"dist"
|
|
56
|
+
],
|
|
57
|
+
"scripts": {
|
|
58
|
+
"build": "pnpm exec tsup",
|
|
59
|
+
"clean:build": "rm -rf dist",
|
|
60
|
+
"clean:node": "rm -rf node_modules",
|
|
61
|
+
"lint": "eslint src"
|
|
62
|
+
}
|
|
63
|
+
}
|