@web-widget/vue2 0.2.0 → 0.2.1

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.
@@ -145,7 +145,7 @@ interface DefineVueRenderOptions {
145
145
  onPrefetchData?: (context: RenderContext, component: Component, props: ComponentProps) => Promise<JSONProps>;
146
146
  }
147
147
 
148
- declare const defineVueRender: ({ onBeforeCreateApp, onCreatedApp, onPrefetchData, }?: DefineVueRenderOptions) => (context: _web_widget_schema.ClientWidgetRenderContext<unknown> | _web_widget_schema.ClientRouteRenderContext<unknown, Record<string, string>>) => Promise<void | {
148
+ declare const defineVueRender: ({ onBeforeCreateApp, onCreatedApp, onPrefetchData, }?: DefineVueRenderOptions) => (context: _web_widget_schema.ClientWidgetRenderContext<unknown> | _web_widget_schema.ClientRouteRenderContext<unknown, Record<string, string>>, renderOptions: any) => Promise<void | {
149
149
  mount?: (() => void | Promise<void>) | undefined;
150
150
  unmount?: (() => void | Promise<void>) | undefined;
151
151
  update?: (({ data }: {
@@ -158,7 +158,7 @@ declare const defineVueRender: ({ onBeforeCreateApp, onCreatedApp, onPrefetchDat
158
158
  data: Record<string, any>;
159
159
  }) => void | Promise<void>) | undefined;
160
160
  }>;
161
- declare const render: (context: _web_widget_schema.ClientWidgetRenderContext<unknown> | _web_widget_schema.ClientRouteRenderContext<unknown, Record<string, string>>) => Promise<void | {
161
+ declare const render: (context: _web_widget_schema.ClientWidgetRenderContext<unknown> | _web_widget_schema.ClientRouteRenderContext<unknown, Record<string, string>>, renderOptions: any) => Promise<void | {
162
162
  mount?: (() => void | Promise<void>) | undefined;
163
163
  unmount?: (() => void | Promise<void>) | undefined;
164
164
  update?: (({ data }: {
@@ -31,8 +31,11 @@ var __objRest = (source, exclude) => {
31
31
  };
32
32
 
33
33
  // src/client.ts
34
+ import {
35
+ defineRender,
36
+ getComponentDescriptor
37
+ } from "@web-widget/schema/client-helpers";
34
38
  import Vue from "vue";
35
- import { defineRender as defineRenderHelper } from "@web-widget/schema/client-helpers";
36
39
  export * from "@web-widget/schema/client-helpers";
37
40
 
38
41
  // src/web-widget.ts
@@ -163,7 +166,9 @@ var defineVueRender = ({
163
166
  },
164
167
  onPrefetchData
165
168
  } = {}) => {
166
- return defineRenderHelper(async (context, component, props) => {
169
+ return defineRender(async (context) => {
170
+ const componentDescriptor = getComponentDescriptor(context);
171
+ const { component, props } = componentDescriptor;
167
172
  if (!context.container) {
168
173
  throw new Error(`Container required.`);
169
174
  }
@@ -69,6 +69,7 @@ __export(server_exports, {
69
69
  module.exports = __toCommonJS(server_exports);
70
70
  var import_server_helpers = require("@web-widget/schema/server-helpers");
71
71
  var import_node_stream = require("stream");
72
+ var import_web = require("stream/web");
72
73
  var import_vue2 = __toESM(require("vue"), 1);
73
74
  var import_vue_server_renderer = require("vue-server-renderer");
74
75
  __reExport(server_exports, require("@web-widget/schema/server-helpers"), module.exports);
@@ -195,6 +196,7 @@ function defineWebWidget(loader, options) {
195
196
  }
196
197
 
197
198
  // src/server.ts
199
+ var __FEATURE_STREAM__ = false;
198
200
  var ESCAPE_LOOKUP = {
199
201
  ">": "\\u003e",
200
202
  "<": "\\u003c",
@@ -205,47 +207,49 @@ var ESCAPE_REGEX = /[><\u2028\u2029]/g;
205
207
  function htmlEscapeJsonString(str) {
206
208
  return str.replace(ESCAPE_REGEX, (match) => ESCAPE_LOOKUP[match]);
207
209
  }
210
+ function appendStringToReadableStream(stream, text) {
211
+ const encoder = new TextEncoder();
212
+ const uint8Array = encoder.encode(text);
213
+ return stream.pipeThrough(
214
+ new import_web.TransformStream({
215
+ flush(controller) {
216
+ controller.enqueue(uint8Array);
217
+ }
218
+ })
219
+ );
220
+ }
208
221
  var defineVueRender = ({
209
222
  onBeforeCreateApp = () => ({}),
210
223
  onCreatedApp = () => {
211
224
  },
212
225
  onPrefetchData
213
226
  } = {}) => {
214
- return (0, import_server_helpers.defineRender)(async (context, component, props) => {
227
+ return (0, import_server_helpers.defineRender)(async (context) => {
228
+ const componentDescriptor = (0, import_server_helpers.getComponentDescriptor)(context);
229
+ const { component, props } = componentDescriptor;
215
230
  const shellTag = "web-widget.shell";
216
231
  const state = onPrefetchData ? await onPrefetchData(context, component, props) : void 0;
217
232
  const mergedProps = state ? Object.assign({}, state, props) : props;
218
233
  const renderer = (0, import_vue_server_renderer.createRenderer)();
219
- const vNodeData = {
220
- attrs: {
221
- "data-vue2root": "true"
222
- },
223
- props: mergedProps
224
- };
225
- const shellTagVNodeData = {};
226
- let render2;
227
- if (state) {
228
- const stateStringify = htmlEscapeJsonString(JSON.stringify(state));
229
- render2 = (h2) => h2(shellTag, shellTagVNodeData, [
230
- h2(component, vNodeData),
231
- h2("script", {
234
+ const app = new import_vue2.default(__spreadValues({
235
+ render: (h2) => h2(shellTag, {}, [
236
+ h2(component, {
232
237
  attrs: {
233
- as: "state",
234
- type: "application/json"
238
+ "data-vue2root": "true"
235
239
  },
236
- domProps: {
237
- innerHTML: stateStringify
238
- }
240
+ props: mergedProps
239
241
  })
240
- ]);
241
- } else {
242
- render2 = (h2) => h2(shellTag, shellTagVNodeData, [h2(component, vNodeData)]);
243
- }
244
- const app = new import_vue2.default(__spreadValues({
245
- render: render2
242
+ ])
246
243
  }, onBeforeCreateApp(context, component, mergedProps)));
247
244
  onCreatedApp(app, context, component, mergedProps);
248
- return import_node_stream.Readable.toWeb ? import_node_stream.Readable.toWeb(renderer.renderToStream(app)) : renderer.renderToString(app);
245
+ const result = __FEATURE_STREAM__ && import_node_stream.Readable.toWeb ? import_node_stream.Readable.toWeb(renderer.renderToStream(app)) : await renderer.renderToString(app);
246
+ if (state) {
247
+ const json = htmlEscapeJsonString(JSON.stringify(state));
248
+ const script = `<script as="state" type="application/json">${json}</script>`;
249
+ return typeof result === "string" ? result + script : appendStringToReadableStream(result, script);
250
+ } else {
251
+ return result;
252
+ }
249
253
  });
250
254
  };
251
255
  var render = defineVueRender();
@@ -145,7 +145,7 @@ interface DefineVueRenderOptions {
145
145
  onPrefetchData?: (context: RenderContext, component: Component, props: ComponentProps) => Promise<JSONProps>;
146
146
  }
147
147
 
148
- declare const defineVueRender: ({ onBeforeCreateApp, onCreatedApp, onPrefetchData, }?: DefineVueRenderOptions) => (context: _web_widget_schema.ServerWidgetRenderContext<unknown> | _web_widget_schema.ServerRouteRenderContext<unknown, Record<string, string>>) => Promise<string | ReadableStream<any>>;
149
- declare const render: (context: _web_widget_schema.ServerWidgetRenderContext<unknown> | _web_widget_schema.ServerRouteRenderContext<unknown, Record<string, string>>) => Promise<string | ReadableStream<any>>;
148
+ declare const defineVueRender: ({ onBeforeCreateApp, onCreatedApp, onPrefetchData, }?: DefineVueRenderOptions) => (context: _web_widget_schema.ServerWidgetRenderContext<unknown> | _web_widget_schema.ServerRouteRenderContext<unknown, Record<string, string>>, renderOptions: any) => Promise<string | ReadableStream<any> | ReadableStream<any>>;
149
+ declare const render: (context: _web_widget_schema.ServerWidgetRenderContext<unknown> | _web_widget_schema.ServerRouteRenderContext<unknown, Record<string, string>>, renderOptions: any) => Promise<string | ReadableStream<any> | ReadableStream<any>>;
150
150
 
151
151
  export { DefineWebWidgetOptions, WebWidget, __ENV__, defineVueRender, defineWebWidget, render };
@@ -31,8 +31,12 @@ var __objRest = (source, exclude) => {
31
31
  };
32
32
 
33
33
  // src/server.ts
34
- import { defineRender } from "@web-widget/schema/server-helpers";
34
+ import {
35
+ defineRender,
36
+ getComponentDescriptor
37
+ } from "@web-widget/schema/server-helpers";
35
38
  import { Readable } from "stream";
39
+ import { TransformStream } from "stream/web";
36
40
  import Vue from "vue";
37
41
  import { createRenderer } from "vue-server-renderer";
38
42
  export * from "@web-widget/schema/server-helpers";
@@ -159,6 +163,7 @@ function defineWebWidget(loader, options) {
159
163
  }
160
164
 
161
165
  // src/server.ts
166
+ var __FEATURE_STREAM__ = false;
162
167
  var ESCAPE_LOOKUP = {
163
168
  ">": "\\u003e",
164
169
  "<": "\\u003c",
@@ -169,47 +174,49 @@ var ESCAPE_REGEX = /[><\u2028\u2029]/g;
169
174
  function htmlEscapeJsonString(str) {
170
175
  return str.replace(ESCAPE_REGEX, (match) => ESCAPE_LOOKUP[match]);
171
176
  }
177
+ function appendStringToReadableStream(stream, text) {
178
+ const encoder = new TextEncoder();
179
+ const uint8Array = encoder.encode(text);
180
+ return stream.pipeThrough(
181
+ new TransformStream({
182
+ flush(controller) {
183
+ controller.enqueue(uint8Array);
184
+ }
185
+ })
186
+ );
187
+ }
172
188
  var defineVueRender = ({
173
189
  onBeforeCreateApp = () => ({}),
174
190
  onCreatedApp = () => {
175
191
  },
176
192
  onPrefetchData
177
193
  } = {}) => {
178
- return defineRender(async (context, component, props) => {
194
+ return defineRender(async (context) => {
195
+ const componentDescriptor = getComponentDescriptor(context);
196
+ const { component, props } = componentDescriptor;
179
197
  const shellTag = "web-widget.shell";
180
198
  const state = onPrefetchData ? await onPrefetchData(context, component, props) : void 0;
181
199
  const mergedProps = state ? Object.assign({}, state, props) : props;
182
200
  const renderer = createRenderer();
183
- const vNodeData = {
184
- attrs: {
185
- "data-vue2root": "true"
186
- },
187
- props: mergedProps
188
- };
189
- const shellTagVNodeData = {};
190
- let render2;
191
- if (state) {
192
- const stateStringify = htmlEscapeJsonString(JSON.stringify(state));
193
- render2 = (h2) => h2(shellTag, shellTagVNodeData, [
194
- h2(component, vNodeData),
195
- h2("script", {
201
+ const app = new Vue(__spreadValues({
202
+ render: (h2) => h2(shellTag, {}, [
203
+ h2(component, {
196
204
  attrs: {
197
- as: "state",
198
- type: "application/json"
205
+ "data-vue2root": "true"
199
206
  },
200
- domProps: {
201
- innerHTML: stateStringify
202
- }
207
+ props: mergedProps
203
208
  })
204
- ]);
205
- } else {
206
- render2 = (h2) => h2(shellTag, shellTagVNodeData, [h2(component, vNodeData)]);
207
- }
208
- const app = new Vue(__spreadValues({
209
- render: render2
209
+ ])
210
210
  }, onBeforeCreateApp(context, component, mergedProps)));
211
211
  onCreatedApp(app, context, component, mergedProps);
212
- return Readable.toWeb ? Readable.toWeb(renderer.renderToStream(app)) : renderer.renderToString(app);
212
+ const result = __FEATURE_STREAM__ && Readable.toWeb ? Readable.toWeb(renderer.renderToStream(app)) : await renderer.renderToString(app);
213
+ if (state) {
214
+ const json = htmlEscapeJsonString(JSON.stringify(state));
215
+ const script = `<script as="state" type="application/json">${json}</script>`;
216
+ return typeof result === "string" ? result + script : appendStringToReadableStream(result, script);
217
+ } else {
218
+ return result;
219
+ }
213
220
  });
214
221
  };
215
222
  var render = defineVueRender();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@web-widget/vue2",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -24,9 +24,9 @@
24
24
  "dist"
25
25
  ],
26
26
  "dependencies": {
27
- "@web-widget/vite": "1.1.0",
28
- "@web-widget/schema": "0.0.10",
29
- "@web-widget/web-widget": "1.0.0-alpha.10",
27
+ "@web-widget/vite": "2.0.1",
28
+ "@web-widget/schema": "0.1.1",
29
+ "@web-widget/web-widget": "1.0.0",
30
30
  "vue": "^2.7.14",
31
31
  "vue-server-renderer": "^2.7.14"
32
32
  },