@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.
@@ -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
+ };
@@ -0,0 +1,2 @@
1
+
2
+ export { }
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
+ }