@tanstack/vue-router 1.158.1 → 1.159.3
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.
|
@@ -3,6 +3,7 @@ import * as Vue from "vue";
|
|
|
3
3
|
import { renderToString, pipeToWebWritable } from "vue/server-renderer";
|
|
4
4
|
import { isbot } from "isbot";
|
|
5
5
|
import { transformReadableStreamWithRouter } from "@tanstack/router-core/ssr/server";
|
|
6
|
+
import { FastResponse } from "srvx";
|
|
6
7
|
function prependDoctype(readable) {
|
|
7
8
|
const encoder = new TextEncoder();
|
|
8
9
|
let sentDoctype = false;
|
|
@@ -47,7 +48,7 @@ const renderRouterToStream = async ({
|
|
|
47
48
|
} else if (htmlOpenIndex !== -1) {
|
|
48
49
|
fullHtml = fullHtml.slice(htmlOpenIndex);
|
|
49
50
|
}
|
|
50
|
-
return new
|
|
51
|
+
return new FastResponse(`<!DOCTYPE html>${fullHtml}`, {
|
|
51
52
|
status: router.state.statusCode,
|
|
52
53
|
headers: responseHeaders
|
|
53
54
|
});
|
|
@@ -59,7 +60,7 @@ const renderRouterToStream = async ({
|
|
|
59
60
|
pipeToWebWritable(app, {}, writable);
|
|
60
61
|
const doctypedStream = prependDoctype(readable);
|
|
61
62
|
const responseStream = transformReadableStreamWithRouter(router, doctypedStream);
|
|
62
|
-
return new
|
|
63
|
+
return new FastResponse(responseStream, {
|
|
63
64
|
status: router.state.statusCode,
|
|
64
65
|
headers: responseHeaders
|
|
65
66
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderRouterToStream.js","sources":["../../../src/ssr/renderRouterToStream.tsx"],"sourcesContent":["import { ReadableStream as NodeReadableStream } from 'node:stream/web'\nimport * as Vue from 'vue'\nimport { pipeToWebWritable, renderToString } from 'vue/server-renderer'\nimport { isbot } from 'isbot'\nimport { transformReadableStreamWithRouter } from '@tanstack/router-core/ssr/server'\nimport type { AnyRouter } from '@tanstack/router-core'\nimport type { Component } from 'vue'\nimport type { ReadableStream } from 'node:stream/web'\n\nfunction prependDoctype(\n readable: globalThis.ReadableStream,\n): NodeReadableStream<Uint8Array> {\n const encoder = new TextEncoder()\n let sentDoctype = false\n\n return new NodeReadableStream<Uint8Array>({\n start(controller) {\n const reader = readable.getReader()\n\n async function pump(): Promise<void> {\n const { done, value } = await reader.read()\n if (done) {\n controller.close()\n return\n }\n\n if (!sentDoctype) {\n sentDoctype = true\n controller.enqueue(encoder.encode('<!DOCTYPE html>'))\n }\n controller.enqueue(value)\n return pump()\n }\n\n pump().catch((err) => controller.error(err))\n },\n })\n}\n\nexport const renderRouterToStream = async ({\n request,\n router,\n responseHeaders,\n App,\n}: {\n request: Request\n router: AnyRouter\n responseHeaders: Headers\n App: Component\n}) => {\n const app = Vue.createSSRApp(App, { router })\n\n if (isbot(request.headers.get('User-Agent'))) {\n let fullHtml = await renderToString(app)\n\n const htmlOpenIndex = fullHtml.indexOf('<html')\n const htmlCloseIndex = fullHtml.indexOf('</html>')\n\n if (htmlOpenIndex !== -1 && htmlCloseIndex !== -1) {\n fullHtml = fullHtml.slice(htmlOpenIndex, htmlCloseIndex + 7)\n } else if (htmlOpenIndex !== -1) {\n fullHtml = fullHtml.slice(htmlOpenIndex)\n }\n\n return new
|
|
1
|
+
{"version":3,"file":"renderRouterToStream.js","sources":["../../../src/ssr/renderRouterToStream.tsx"],"sourcesContent":["import { ReadableStream as NodeReadableStream } from 'node:stream/web'\nimport * as Vue from 'vue'\nimport { pipeToWebWritable, renderToString } from 'vue/server-renderer'\nimport { isbot } from 'isbot'\nimport { transformReadableStreamWithRouter } from '@tanstack/router-core/ssr/server'\nimport { FastResponse } from 'srvx'\nimport type { AnyRouter } from '@tanstack/router-core'\nimport type { Component } from 'vue'\nimport type { ReadableStream } from 'node:stream/web'\n\nfunction prependDoctype(\n readable: globalThis.ReadableStream,\n): NodeReadableStream<Uint8Array> {\n const encoder = new TextEncoder()\n let sentDoctype = false\n\n return new NodeReadableStream<Uint8Array>({\n start(controller) {\n const reader = readable.getReader()\n\n async function pump(): Promise<void> {\n const { done, value } = await reader.read()\n if (done) {\n controller.close()\n return\n }\n\n if (!sentDoctype) {\n sentDoctype = true\n controller.enqueue(encoder.encode('<!DOCTYPE html>'))\n }\n controller.enqueue(value)\n return pump()\n }\n\n pump().catch((err) => controller.error(err))\n },\n })\n}\n\nexport const renderRouterToStream = async ({\n request,\n router,\n responseHeaders,\n App,\n}: {\n request: Request\n router: AnyRouter\n responseHeaders: Headers\n App: Component\n}) => {\n const app = Vue.createSSRApp(App, { router })\n\n if (isbot(request.headers.get('User-Agent'))) {\n let fullHtml = await renderToString(app)\n\n const htmlOpenIndex = fullHtml.indexOf('<html')\n const htmlCloseIndex = fullHtml.indexOf('</html>')\n\n if (htmlOpenIndex !== -1 && htmlCloseIndex !== -1) {\n fullHtml = fullHtml.slice(htmlOpenIndex, htmlCloseIndex + 7)\n } else if (htmlOpenIndex !== -1) {\n fullHtml = fullHtml.slice(htmlOpenIndex)\n }\n\n return new FastResponse(`<!DOCTYPE html>${fullHtml}`, {\n status: router.state.statusCode,\n headers: responseHeaders,\n })\n }\n\n const { writable, readable } = new TransformStream()\n\n pipeToWebWritable(app, {}, writable)\n\n const doctypedStream = prependDoctype(readable)\n const responseStream = transformReadableStreamWithRouter(\n router,\n doctypedStream as unknown as ReadableStream,\n )\n\n return new FastResponse(responseStream as any, {\n status: router.state.statusCode,\n headers: responseHeaders,\n })\n}\n"],"names":["prependDoctype","readable","encoder","TextEncoder","sentDoctype","NodeReadableStream","start","controller","reader","getReader","pump","done","value","read","close","enqueue","encode","catch","err","error","renderRouterToStream","request","router","responseHeaders","App","app","Vue","createSSRApp","isbot","headers","get","fullHtml","renderToString","htmlOpenIndex","indexOf","htmlCloseIndex","slice","FastResponse","status","state","statusCode","writable","TransformStream","pipeToWebWritable","doctypedStream","responseStream","transformReadableStreamWithRouter"],"mappings":";;;;;;AAUA,SAASA,eACPC,UACgC;AAChC,QAAMC,UAAU,IAAIC,YAAW;AAC/B,MAAIC,cAAc;AAElB,SAAO,IAAIC,eAA+B;AAAA,IACxCC,MAAMC,YAAY;AAChB,YAAMC,SAASP,SAASQ,UAAS;AAEjC,qBAAeC,OAAsB;AACnC,cAAM;AAAA,UAAEC;AAAAA,UAAMC;AAAAA,QAAM,IAAI,MAAMJ,OAAOK,KAAI;AACzC,YAAIF,MAAM;AACRJ,qBAAWO,MAAK;AAChB;AAAA,QACF;AAEA,YAAI,CAACV,aAAa;AAChBA,wBAAc;AACdG,qBAAWQ,QAAQb,QAAQc,OAAO,iBAAiB,CAAC;AAAA,QACtD;AACAT,mBAAWQ,QAAQH,KAAK;AACxB,eAAOF,KAAI;AAAA,MACb;AAEAA,WAAI,EAAGO,MAAOC,SAAQX,WAAWY,MAAMD,GAAG,CAAC;AAAA,IAC7C;AAAA,EACF,CAAC;AACH;AAEO,MAAME,uBAAuB,OAAO;AAAA,EACzCC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAMF,MAAM;AACJ,QAAMC,MAAMC,IAAIC,aAAaH,KAAK;AAAA,IAAEF;AAAAA,EAAO,CAAC;AAE5C,MAAIM,MAAMP,QAAQQ,QAAQC,IAAI,YAAY,CAAC,GAAG;AAC5C,QAAIC,WAAW,MAAMC,eAAeP,GAAG;AAEvC,UAAMQ,gBAAgBF,SAASG,QAAQ,OAAO;AAC9C,UAAMC,iBAAiBJ,SAASG,QAAQ,SAAS;AAEjD,QAAID,kBAAkB,MAAME,mBAAmB,IAAI;AACjDJ,iBAAWA,SAASK,MAAMH,eAAeE,iBAAiB,CAAC;AAAA,IAC7D,WAAWF,kBAAkB,IAAI;AAC/BF,iBAAWA,SAASK,MAAMH,aAAa;AAAA,IACzC;AAEA,WAAO,IAAII,aAAa,kBAAkBN,QAAQ,IAAI;AAAA,MACpDO,QAAQhB,OAAOiB,MAAMC;AAAAA,MACrBX,SAASN;AAAAA,IACX,CAAC;AAAA,EACH;AAEA,QAAM;AAAA,IAAEkB;AAAAA,IAAUxC;AAAAA,EAAS,IAAI,IAAIyC,gBAAe;AAElDC,oBAAkBlB,KAAK,CAAA,GAAIgB,QAAQ;AAEnC,QAAMG,iBAAiB5C,eAAeC,QAAQ;AAC9C,QAAM4C,iBAAiBC,kCACrBxB,QACAsB,cACF;AAEA,SAAO,IAAIP,aAAaQ,gBAAuB;AAAA,IAC7CP,QAAQhB,OAAOiB,MAAMC;AAAAA,IACrBX,SAASN;AAAAA,EACX,CAAC;AACH;"}
|
|
@@ -3,6 +3,7 @@ import * as Vue from 'vue';
|
|
|
3
3
|
import { pipeToWebWritable, renderToString } from 'vue/server-renderer';
|
|
4
4
|
import { isbot } from 'isbot';
|
|
5
5
|
import { transformReadableStreamWithRouter } from '@tanstack/router-core/ssr/server';
|
|
6
|
+
import { FastResponse } from 'srvx';
|
|
6
7
|
function prependDoctype(readable) {
|
|
7
8
|
const encoder = new TextEncoder();
|
|
8
9
|
let sentDoctype = false;
|
|
@@ -38,7 +39,7 @@ export const renderRouterToStream = async ({ request, router, responseHeaders, A
|
|
|
38
39
|
else if (htmlOpenIndex !== -1) {
|
|
39
40
|
fullHtml = fullHtml.slice(htmlOpenIndex);
|
|
40
41
|
}
|
|
41
|
-
return new
|
|
42
|
+
return new FastResponse(`<!DOCTYPE html>${fullHtml}`, {
|
|
42
43
|
status: router.state.statusCode,
|
|
43
44
|
headers: responseHeaders,
|
|
44
45
|
});
|
|
@@ -47,7 +48,7 @@ export const renderRouterToStream = async ({ request, router, responseHeaders, A
|
|
|
47
48
|
pipeToWebWritable(app, {}, writable);
|
|
48
49
|
const doctypedStream = prependDoctype(readable);
|
|
49
50
|
const responseStream = transformReadableStreamWithRouter(router, doctypedStream);
|
|
50
|
-
return new
|
|
51
|
+
return new FastResponse(responseStream, {
|
|
51
52
|
status: router.state.statusCode,
|
|
52
53
|
headers: responseHeaders,
|
|
53
54
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderRouterToStream.jsx","sourceRoot":"","sources":["../../../src/ssr/renderRouterToStream.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACvE,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"renderRouterToStream.jsx","sourceRoot":"","sources":["../../../src/ssr/renderRouterToStream.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/vue-router",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.159.3",
|
|
4
4
|
"description": "Modern and scalable routing for Vue applications",
|
|
5
5
|
"author": "Tanner Linsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -61,10 +61,11 @@
|
|
|
61
61
|
"@vue/runtime-dom": "^3.5.25",
|
|
62
62
|
"isbot": "^5.1.22",
|
|
63
63
|
"jsesc": "^3.0.2",
|
|
64
|
+
"srvx": "^0.11.2",
|
|
64
65
|
"tiny-invariant": "^1.3.3",
|
|
65
66
|
"tiny-warning": "^1.0.3",
|
|
66
67
|
"@tanstack/history": "1.154.14",
|
|
67
|
-
"@tanstack/router-core": "1.158.
|
|
68
|
+
"@tanstack/router-core": "1.158.4"
|
|
68
69
|
},
|
|
69
70
|
"devDependencies": {
|
|
70
71
|
"@testing-library/jest-dom": "^6.6.3",
|
|
@@ -3,6 +3,7 @@ import * as Vue from 'vue'
|
|
|
3
3
|
import { pipeToWebWritable, renderToString } from 'vue/server-renderer'
|
|
4
4
|
import { isbot } from 'isbot'
|
|
5
5
|
import { transformReadableStreamWithRouter } from '@tanstack/router-core/ssr/server'
|
|
6
|
+
import { FastResponse } from 'srvx'
|
|
6
7
|
import type { AnyRouter } from '@tanstack/router-core'
|
|
7
8
|
import type { Component } from 'vue'
|
|
8
9
|
import type { ReadableStream } from 'node:stream/web'
|
|
@@ -62,7 +63,7 @@ export const renderRouterToStream = async ({
|
|
|
62
63
|
fullHtml = fullHtml.slice(htmlOpenIndex)
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
return new
|
|
66
|
+
return new FastResponse(`<!DOCTYPE html>${fullHtml}`, {
|
|
66
67
|
status: router.state.statusCode,
|
|
67
68
|
headers: responseHeaders,
|
|
68
69
|
})
|
|
@@ -78,7 +79,7 @@ export const renderRouterToStream = async ({
|
|
|
78
79
|
doctypedStream as unknown as ReadableStream,
|
|
79
80
|
)
|
|
80
81
|
|
|
81
|
-
return new
|
|
82
|
+
return new FastResponse(responseStream as any, {
|
|
82
83
|
status: router.state.statusCode,
|
|
83
84
|
headers: responseHeaders,
|
|
84
85
|
})
|