@web-widget/vue2 0.1.2 → 0.2.0-beta1

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.
@@ -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,6 +207,17 @@ 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 = () => {
@@ -214,38 +227,27 @@ var defineVueRender = ({
214
227
  return (0, import_server_helpers.defineRender)(async (context, component, props) => {
215
228
  const shellTag = "web-widget.shell";
216
229
  const state = onPrefetchData ? await onPrefetchData(context, component, props) : void 0;
217
- const mergedProps = state ? Object.assign(state, props) : props;
230
+ const mergedProps = state ? Object.assign({}, state, props) : props;
218
231
  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", {
232
+ const app = new import_vue2.default(__spreadValues({
233
+ render: (h2) => h2(shellTag, {}, [
234
+ h2(component, {
232
235
  attrs: {
233
- as: "state",
234
- type: "application/json"
236
+ "data-vue2root": "true"
235
237
  },
236
- domProps: {
237
- innerHTML: stateStringify
238
- }
238
+ props: mergedProps
239
239
  })
240
- ]);
241
- } else {
242
- render2 = (h2) => h2(shellTag, shellTagVNodeData, [h2(component, vNodeData)]);
243
- }
244
- const app = new import_vue2.default(__spreadValues({
245
- render: render2
240
+ ])
246
241
  }, onBeforeCreateApp(context, component, mergedProps)));
247
242
  onCreatedApp(app, context, component, mergedProps);
248
- return import_node_stream.Readable.toWeb ? import_node_stream.Readable.toWeb(renderer.renderToStream(app)) : renderer.renderToString(app);
243
+ const result = __FEATURE_STREAM__ && import_node_stream.Readable.toWeb ? import_node_stream.Readable.toWeb(renderer.renderToStream(app)) : await renderer.renderToString(app);
244
+ if (state) {
245
+ const json = htmlEscapeJsonString(JSON.stringify(state));
246
+ const script = `<script as="state" type="application/json">${json}</script>`;
247
+ return typeof result === "string" ? result + script : appendStringToReadableStream(result, script);
248
+ } else {
249
+ return result;
250
+ }
249
251
  });
250
252
  };
251
253
  var render = defineVueRender();
@@ -33,6 +33,7 @@ var __objRest = (source, exclude) => {
33
33
  // src/server.ts
34
34
  import { defineRender } from "@web-widget/schema/server-helpers";
35
35
  import { Readable } from "stream";
36
+ import { TransformStream } from "stream/web";
36
37
  import Vue from "vue";
37
38
  import { createRenderer } from "vue-server-renderer";
38
39
  export * from "@web-widget/schema/server-helpers";
@@ -159,6 +160,7 @@ function defineWebWidget(loader, options) {
159
160
  }
160
161
 
161
162
  // src/server.ts
163
+ var __FEATURE_STREAM__ = false;
162
164
  var ESCAPE_LOOKUP = {
163
165
  ">": "\\u003e",
164
166
  "<": "\\u003c",
@@ -169,6 +171,17 @@ var ESCAPE_REGEX = /[><\u2028\u2029]/g;
169
171
  function htmlEscapeJsonString(str) {
170
172
  return str.replace(ESCAPE_REGEX, (match) => ESCAPE_LOOKUP[match]);
171
173
  }
174
+ function appendStringToReadableStream(stream, text) {
175
+ const encoder = new TextEncoder();
176
+ const uint8Array = encoder.encode(text);
177
+ return stream.pipeThrough(
178
+ new TransformStream({
179
+ flush(controller) {
180
+ controller.enqueue(uint8Array);
181
+ }
182
+ })
183
+ );
184
+ }
172
185
  var defineVueRender = ({
173
186
  onBeforeCreateApp = () => ({}),
174
187
  onCreatedApp = () => {
@@ -178,38 +191,27 @@ var defineVueRender = ({
178
191
  return defineRender(async (context, component, props) => {
179
192
  const shellTag = "web-widget.shell";
180
193
  const state = onPrefetchData ? await onPrefetchData(context, component, props) : void 0;
181
- const mergedProps = state ? Object.assign(state, props) : props;
194
+ const mergedProps = state ? Object.assign({}, state, props) : props;
182
195
  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", {
196
+ const app = new Vue(__spreadValues({
197
+ render: (h2) => h2(shellTag, {}, [
198
+ h2(component, {
196
199
  attrs: {
197
- as: "state",
198
- type: "application/json"
200
+ "data-vue2root": "true"
199
201
  },
200
- domProps: {
201
- innerHTML: stateStringify
202
- }
202
+ props: mergedProps
203
203
  })
204
- ]);
205
- } else {
206
- render2 = (h2) => h2(shellTag, shellTagVNodeData, [h2(component, vNodeData)]);
207
- }
208
- const app = new Vue(__spreadValues({
209
- render: render2
204
+ ])
210
205
  }, onBeforeCreateApp(context, component, mergedProps)));
211
206
  onCreatedApp(app, context, component, mergedProps);
212
- return Readable.toWeb ? Readable.toWeb(renderer.renderToStream(app)) : renderer.renderToString(app);
207
+ const result = __FEATURE_STREAM__ && Readable.toWeb ? Readable.toWeb(renderer.renderToStream(app)) : await renderer.renderToString(app);
208
+ if (state) {
209
+ const json = htmlEscapeJsonString(JSON.stringify(state));
210
+ const script = `<script as="state" type="application/json">${json}</script>`;
211
+ return typeof result === "string" ? result + script : appendStringToReadableStream(result, script);
212
+ } else {
213
+ return result;
214
+ }
213
215
  });
214
216
  };
215
217
  var render = defineVueRender();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@web-widget/vue2",
3
- "version": "0.1.2",
3
+ "version": "0.2.0-beta1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {