@web-widget/react 0.0.4 → 0.0.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.
@@ -1,26 +1,6 @@
1
1
  import { PluginPass } from '@babel/core';
2
2
  import { Visitor } from '@babel/traverse';
3
3
 
4
- /**
5
- * This adds web-widget source path to JSX tags.
6
- *
7
- * == JSX Literals ==
8
- *
9
- * import MyComponent from "../widgets/my-component.jsx";
10
- * ...
11
- * <MyComponent as="web-widget" title="My component" />
12
- *
13
- * becomes:
14
- *
15
- * import { defineWebWidget } from "@web-widget/react/web-widget";
16
- * const MyComponent = defineWebWidget(() => import("../widgets/my-component.jsx"), "/routes/", {
17
- * name: "MyComponent",
18
- * recovering: true
19
- * });
20
- * ...
21
- * <MyComponent title="My component" />
22
- */
23
-
24
4
  type Config = {
25
5
  base: string;
26
6
  root: string;
@@ -1,9 +1,17 @@
1
+ // src/babel-plugin.ts
2
+ import { dirname, join, relative } from "path";
3
+
4
+ // src/web-widget.tsx
5
+ import { Suspense, createElement, lazy } from "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+ var ASSET_PLACEHOLDER = "asset://";
8
+
1
9
  // src/babel-plugin.ts
2
10
  import { addNamed } from "@babel/helper-module-imports";
3
11
  import { declare } from "@babel/helper-plugin-utils";
4
12
  import { types as t } from "@babel/core";
5
13
  var TAGNAME = "web-widget";
6
- function createWebWidgetVariableDeclaration(definer, component, source, base, options) {
14
+ function createWebWidgetVariableDeclaration(definer, component, source, options) {
7
15
  const getType = (object) => Object.prototype.toString.call(object).slice(8, -1).toLocaleLowerCase();
8
16
  return t.variableDeclaration("const", [
9
17
  t.variableDeclarator(
@@ -13,7 +21,6 @@ function createWebWidgetVariableDeclaration(definer, component, source, base, op
13
21
  [],
14
22
  t.callExpression(t.import(), [t.stringLiteral(source)])
15
23
  ),
16
- t.stringLiteral(base),
17
24
  t.objectExpression(
18
25
  Object.keys(options).map((key) => {
19
26
  const value = options[key];
@@ -95,13 +102,6 @@ var babel_plugin_default = declare((api) => {
95
102
  container.openingElement.attributes = container.openingElement.attributes.filter(
96
103
  (attr) => attr !== widgetAttr && attr !== loadingAttr
97
104
  );
98
- const options = {
99
- name: container.openingElement.name.name,
100
- recovering: config.isServer && mode !== "client"
101
- };
102
- if (loadingAttr && loadingAttr.value && t.isStringLiteral(loadingAttr.value)) {
103
- options.loading = loadingAttr.value.value;
104
- }
105
105
  const importDeclaration = binding.path.parent;
106
106
  const source = importDeclaration.source.value;
107
107
  const importName = addNamed(
@@ -109,13 +109,20 @@ var babel_plugin_default = declare((api) => {
109
109
  "defineWebWidget",
110
110
  "@web-widget/react"
111
111
  );
112
- const base = config.base;
112
+ const options = {
113
+ // base: config.base,
114
+ import: ASSET_PLACEHOLDER + relative(config.root, join(dirname(state.filename), source)),
115
+ name: container.openingElement.name.name,
116
+ recovering: config.isServer && mode !== "client"
117
+ };
118
+ if (loadingAttr && loadingAttr.value && t.isStringLiteral(loadingAttr.value)) {
119
+ options.loading = loadingAttr.value.value;
120
+ }
113
121
  binding.path.parentPath?.replaceWith(
114
122
  createWebWidgetVariableDeclaration(
115
123
  importName.name,
116
124
  container.openingElement.name.name,
117
125
  source,
118
- base,
119
126
  options
120
127
  )
121
128
  );
@@ -1,6 +1,6 @@
1
1
  import * as _web_widget_schema from '@web-widget/schema';
2
2
  export * from '@web-widget/schema/client-helpers';
3
- export { C as ClientOptions, D as DefineWebWidgetOptions, W as WebWidget, b as WebWidgetClient, a as WebWidgetClientProps, c as WebWidgetProps, _ as __ENV__, W as default, e as defineClient, f as defineClientOnly, d as defineWebWidget, r as renderServerWidget } from './web-widget-ec342172.js';
3
+ export { A as ASSET_PLACEHOLDER, C as ClientOptions, D as DefineWebWidgetOptions, W as WebWidget, b as WebWidgetClient, a as WebWidgetClientProps, c as WebWidgetProps, _ as __ENV__, W as default, e as defineClient, f as defineClientOnly, d as defineWebWidget, r as renderServerWidget } from './web-widget-67fd682e.js';
4
4
  import 'react/jsx-runtime';
5
5
  import 'react';
6
6
 
@@ -89,9 +89,6 @@ function WebWidget({
89
89
  name,
90
90
  recovering
91
91
  }) {
92
- if (!base) {
93
- throw new Error(`Missing base`);
94
- }
95
92
  if (children) {
96
93
  throw new Error(`No support for 'children'`);
97
94
  }
@@ -124,8 +121,15 @@ function WebWidget({
124
121
  });
125
122
  return /* @__PURE__ */ jsx(Suspense, { fallback, children: /* @__PURE__ */ jsx(WebWidgetClientFactory, {}) });
126
123
  }
127
- function defineWebWidget(loader, base, { loading, name, recovering = true } = {}) {
128
- const url = getFilename(loader);
124
+ var ASSET_PLACEHOLDER = "asset://";
125
+ function defineWebWidget(loader, {
126
+ base,
127
+ import: url,
128
+ loading,
129
+ name,
130
+ recovering = true
131
+ }) {
132
+ const clientImport = url && !url.startsWith(ASSET_PLACEHOLDER) ? url : getFilename(loader);
129
133
  return function WebWidgetFactory({
130
134
  children,
131
135
  fallback,
@@ -138,7 +142,7 @@ function defineWebWidget(loader, base, { loading, name, recovering = true } = {}
138
142
  base,
139
143
  data,
140
144
  fallback,
141
- import: url,
145
+ import: clientImport,
142
146
  loader,
143
147
  loading,
144
148
  name,
@@ -149,15 +153,17 @@ function defineWebWidget(loader, base, { loading, name, recovering = true } = {}
149
153
  );
150
154
  };
151
155
  }
152
- function defineClient(loader, base, { loading, name } = {}) {
153
- return defineWebWidget(loader, base, {
156
+ function defineClient(loader, { base, loading, name } = {}) {
157
+ return defineWebWidget(loader, {
158
+ base,
154
159
  loading,
155
160
  name,
156
161
  recovering: true
157
162
  });
158
163
  }
159
- function defineClientOnly(loader, base, { loading, name } = {}) {
160
- return defineWebWidget(loader, base, {
164
+ function defineClientOnly(loader, { base, loading, name } = {}) {
165
+ return defineWebWidget(loader, {
166
+ base,
161
167
  loading,
162
168
  name,
163
169
  recovering: false
@@ -200,6 +206,7 @@ var render = defineRender(async (context, component, props) => {
200
206
  };
201
207
  });
202
208
  export {
209
+ ASSET_PLACEHOLDER,
203
210
  WebWidget,
204
211
  WebWidgetClient,
205
212
  __ENV__,
@@ -1,6 +1,6 @@
1
1
  import * as _web_widget_schema from '@web-widget/schema';
2
2
  export * from '@web-widget/schema/server-helpers';
3
- export { C as ClientOptions, D as DefineWebWidgetOptions, W as WebWidget, b as WebWidgetClient, a as WebWidgetClientProps, c as WebWidgetProps, _ as __ENV__, W as default, e as defineClient, f as defineClientOnly, d as defineWebWidget, r as renderServerWidget } from './web-widget-ec342172.js';
3
+ export { A as ASSET_PLACEHOLDER, C as ClientOptions, D as DefineWebWidgetOptions, W as WebWidget, b as WebWidgetClient, a as WebWidgetClientProps, c as WebWidgetProps, _ as __ENV__, W as default, e as defineClient, f as defineClientOnly, d as defineWebWidget, r as renderServerWidget } from './web-widget-67fd682e.js';
4
4
  import 'react/jsx-runtime';
5
5
  import 'react';
6
6
 
@@ -89,9 +89,6 @@ function WebWidget({
89
89
  name,
90
90
  recovering
91
91
  }) {
92
- if (!base) {
93
- throw new Error(`Missing base`);
94
- }
95
92
  if (children) {
96
93
  throw new Error(`No support for 'children'`);
97
94
  }
@@ -124,8 +121,15 @@ function WebWidget({
124
121
  });
125
122
  return /* @__PURE__ */ jsx(Suspense, { fallback, children: /* @__PURE__ */ jsx(WebWidgetClientFactory, {}) });
126
123
  }
127
- function defineWebWidget(loader, base, { loading, name, recovering = true } = {}) {
128
- const url = getFilename(loader);
124
+ var ASSET_PLACEHOLDER = "asset://";
125
+ function defineWebWidget(loader, {
126
+ base,
127
+ import: url,
128
+ loading,
129
+ name,
130
+ recovering = true
131
+ }) {
132
+ const clientImport = url && !url.startsWith(ASSET_PLACEHOLDER) ? url : getFilename(loader);
129
133
  return function WebWidgetFactory({
130
134
  children,
131
135
  fallback,
@@ -138,7 +142,7 @@ function defineWebWidget(loader, base, { loading, name, recovering = true } = {}
138
142
  base,
139
143
  data,
140
144
  fallback,
141
- import: url,
145
+ import: clientImport,
142
146
  loader,
143
147
  loading,
144
148
  name,
@@ -149,15 +153,17 @@ function defineWebWidget(loader, base, { loading, name, recovering = true } = {}
149
153
  );
150
154
  };
151
155
  }
152
- function defineClient(loader, base, { loading, name } = {}) {
153
- return defineWebWidget(loader, base, {
156
+ function defineClient(loader, { base, loading, name } = {}) {
157
+ return defineWebWidget(loader, {
158
+ base,
154
159
  loading,
155
160
  name,
156
161
  recovering: true
157
162
  });
158
163
  }
159
- function defineClientOnly(loader, base, { loading, name } = {}) {
160
- return defineWebWidget(loader, base, {
164
+ function defineClientOnly(loader, { base, loading, name } = {}) {
165
+ return defineWebWidget(loader, {
166
+ base,
161
167
  loading,
162
168
  name,
163
169
  recovering: false
@@ -182,6 +188,7 @@ var render = defineRender(async (context, component, props) => {
182
188
  return ReactDOMServer.renderToReadableStream(vnode);
183
189
  });
184
190
  export {
191
+ ASSET_PLACEHOLDER,
185
192
  WebWidget,
186
193
  WebWidgetClient,
187
194
  __ENV__,
@@ -14,7 +14,7 @@ type JSONProps = {
14
14
  };
15
15
  type Loader = () => Promise<WidgetModule>;
16
16
  interface WebWidgetClientProps {
17
- base: string;
17
+ base?: string;
18
18
  data: JSONProps;
19
19
  import: string;
20
20
  innerHTML?: string;
@@ -26,7 +26,7 @@ declare function WebWidgetClient({ base, data, import: url, innerHTML, loading,
26
26
  dangerouslySetInnerHTML: {
27
27
  __html: string;
28
28
  };
29
- base: string;
29
+ base: string | undefined;
30
30
  data: string;
31
31
  import: string;
32
32
  loading: string | undefined;
@@ -45,16 +45,20 @@ type WebWidgetFactoryProps = JSONProps & {
45
45
  fallback?: ReactNode;
46
46
  };
47
47
  interface DefineWebWidgetOptions {
48
+ base?: string;
49
+ import?: string;
48
50
  loading?: string;
49
51
  name?: string;
50
52
  recovering?: boolean;
51
53
  }
52
- declare function defineWebWidget(loader: Loader, base: string, { loading, name, recovering }?: DefineWebWidgetOptions): ({ children, fallback, ...data }: WebWidgetFactoryProps) => react_jsx_runtime.JSX.Element;
54
+ declare const ASSET_PLACEHOLDER = "asset://";
55
+ declare function defineWebWidget(loader: Loader, { base, import: url, loading, name, recovering, }: DefineWebWidgetOptions): ({ children, fallback, ...data }: WebWidgetFactoryProps) => react_jsx_runtime.JSX.Element;
53
56
  interface ClientOptions {
57
+ base?: string;
54
58
  loading?: "lazy";
55
59
  name?: string;
56
60
  }
57
- declare function defineClient(loader: Loader, base: string, { loading, name }?: ClientOptions): ({ children, fallback, ...data }: WebWidgetFactoryProps) => react_jsx_runtime.JSX.Element;
58
- declare function defineClientOnly(loader: Loader, base: string, { loading, name }?: ClientOptions): ({ children, fallback, ...data }: WebWidgetFactoryProps) => react_jsx_runtime.JSX.Element;
61
+ declare function defineClient(loader: Loader, { base, loading, name }?: ClientOptions): ({ children, fallback, ...data }: WebWidgetFactoryProps) => react_jsx_runtime.JSX.Element;
62
+ declare function defineClientOnly(loader: Loader, { base, loading, name }?: ClientOptions): ({ children, fallback, ...data }: WebWidgetFactoryProps) => react_jsx_runtime.JSX.Element;
59
63
 
60
- export { ClientOptions as C, DefineWebWidgetOptions as D, WebWidget as W, __ENV__ as _, WebWidgetClientProps as a, WebWidgetClient as b, WebWidgetProps as c, defineWebWidget as d, defineClient as e, defineClientOnly as f, renderServerWidget as r };
64
+ export { ASSET_PLACEHOLDER as A, ClientOptions as C, DefineWebWidgetOptions as D, WebWidget as W, __ENV__ as _, WebWidgetClientProps as a, WebWidgetClient as b, WebWidgetProps as c, defineWebWidget as d, defineClient as e, defineClientOnly as f, renderServerWidget as r };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@web-widget/react",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {