@bleedingdev/modern-js-runtime-extensions 3.8.3-ultramodern.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.
- package/LICENSE +21 -0
- package/dist/cjs/helmetCompat.js +419 -0
- package/dist/cjs/html.js +45 -0
- package/dist/cjs/index.js +83 -0
- package/dist/cjs/navigationWarmup.js +59 -0
- package/dist/cjs/node.js +143 -0
- package/dist/cjs/rendererHead.js +263 -0
- package/dist/cjs/rscHtmlStream.js +128 -0
- package/dist/cjs/safeFailure.js +125 -0
- package/dist/cjs/shellStream.js +76 -0
- package/dist/esm/helmetCompat.mjs +357 -0
- package/dist/esm/html.mjs +4 -0
- package/dist/esm/index.mjs +4 -0
- package/dist/esm/navigationWarmup.mjs +21 -0
- package/dist/esm/node.mjs +61 -0
- package/dist/esm/rendererHead.mjs +162 -0
- package/dist/esm/rscHtmlStream.mjs +86 -0
- package/dist/esm/safeFailure.mjs +78 -0
- package/dist/esm/shellStream.mjs +38 -0
- package/dist/esm-node/helmetCompat.mjs +358 -0
- package/dist/esm-node/html.mjs +5 -0
- package/dist/esm-node/index.mjs +5 -0
- package/dist/esm-node/navigationWarmup.mjs +22 -0
- package/dist/esm-node/node.mjs +62 -0
- package/dist/esm-node/rendererHead.mjs +163 -0
- package/dist/esm-node/rscHtmlStream.mjs +87 -0
- package/dist/esm-node/safeFailure.mjs +79 -0
- package/dist/esm-node/shellStream.mjs +39 -0
- package/dist/types/helmetCompat.d.ts +75 -0
- package/dist/types/html.d.ts +2 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/navigationWarmup.d.ts +8 -0
- package/dist/types/node.d.ts +11 -0
- package/dist/types/rendererHead.d.ts +17 -0
- package/dist/types/rscHtmlStream.d.ts +4 -0
- package/dist/types/safeFailure.d.ts +17 -0
- package/dist/types/shellStream.d.ts +1 -0
- package/package.json +90 -0
- package/rslib.config.mts +4 -0
- package/rstest.config.mts +7 -0
- package/src/helmetCompat.ts +628 -0
- package/src/html.ts +11 -0
- package/src/index.ts +4 -0
- package/src/navigationWarmup.ts +39 -0
- package/src/node.ts +93 -0
- package/src/rendererHead.ts +236 -0
- package/src/rscHtmlStream.ts +142 -0
- package/src/safeFailure.ts +137 -0
- package/src/shellStream.ts +53 -0
- package/tests/rendererHead.test.ts +299 -0
- package/tests/rscHtmlStream.test.ts +153 -0
- package/tests/safeFailure.test.ts +154 -0
- package/tests/shellStream.test.ts +85 -0
- package/tsconfig.json +10 -0
package/dist/cjs/node.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_modules__ = {
|
|
3
|
+
"./rendererHead" (module) {
|
|
4
|
+
module.exports = require("./rendererHead.js");
|
|
5
|
+
},
|
|
6
|
+
"node:stream" (module) {
|
|
7
|
+
module.exports = require("node:stream");
|
|
8
|
+
},
|
|
9
|
+
"node:string_decoder" (module) {
|
|
10
|
+
module.exports = require("node:string_decoder");
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
var __webpack_module_cache__ = {};
|
|
14
|
+
function __webpack_require__(moduleId) {
|
|
15
|
+
var cachedModule = __webpack_module_cache__[moduleId];
|
|
16
|
+
if (void 0 !== cachedModule) return cachedModule.exports;
|
|
17
|
+
var module = __webpack_module_cache__[moduleId] = {
|
|
18
|
+
exports: {}
|
|
19
|
+
};
|
|
20
|
+
__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
21
|
+
return module.exports;
|
|
22
|
+
}
|
|
23
|
+
(()=>{
|
|
24
|
+
__webpack_require__.n = (module)=>{
|
|
25
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
26
|
+
__webpack_require__.d(getter, {
|
|
27
|
+
a: getter
|
|
28
|
+
});
|
|
29
|
+
return getter;
|
|
30
|
+
};
|
|
31
|
+
})();
|
|
32
|
+
(()=>{
|
|
33
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
34
|
+
var define = (defs, kind)=>{
|
|
35
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
[kind]: defs[key]
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
define(getters, "get");
|
|
41
|
+
define(values, "value");
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
(()=>{
|
|
45
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
46
|
+
})();
|
|
47
|
+
(()=>{
|
|
48
|
+
__webpack_require__.r = (exports1)=>{
|
|
49
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
50
|
+
value: 'Module'
|
|
51
|
+
});
|
|
52
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
53
|
+
value: true
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
})();
|
|
57
|
+
var __webpack_exports__ = {};
|
|
58
|
+
(()=>{
|
|
59
|
+
__webpack_require__.r(__webpack_exports__);
|
|
60
|
+
var node_stream__rspack_import_0 = __webpack_require__("node:stream");
|
|
61
|
+
var node_string_decoder__rspack_import_1 = __webpack_require__("node:string_decoder");
|
|
62
|
+
var _rendererHead__rspack_import_2 = __webpack_require__("./rendererHead");
|
|
63
|
+
var __rspack_reexport = {};
|
|
64
|
+
for(const __rspack_import_key in _rendererHead__rspack_import_2)if ([
|
|
65
|
+
"default",
|
|
66
|
+
"pipeNodeHeadStream",
|
|
67
|
+
"createNodeHeadMarkerStripper",
|
|
68
|
+
"createOnceErrorReporter"
|
|
69
|
+
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_rendererHead__rspack_import_2[__rspack_import_key];
|
|
70
|
+
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
71
|
+
const toError = (reason)=>reason instanceof Error ? reason : new Error(String(reason));
|
|
72
|
+
const createNodeHeadMarkerStripper = (context, terminalMarker)=>{
|
|
73
|
+
const decoder = new node_string_decoder__rspack_import_1.StringDecoder('utf8');
|
|
74
|
+
const processor = (0, _rendererHead__rspack_import_2.createHeadChunkProcessor)(context);
|
|
75
|
+
let terminalCarry = '';
|
|
76
|
+
let sawTerminalMarker = void 0 === terminalMarker;
|
|
77
|
+
const observeTerminalMarker = (output)=>{
|
|
78
|
+
if (!sawTerminalMarker && void 0 !== terminalMarker) {
|
|
79
|
+
const observed = terminalCarry + output;
|
|
80
|
+
sawTerminalMarker = observed.includes(terminalMarker);
|
|
81
|
+
terminalCarry = observed.slice(Math.max(0, observed.length - terminalMarker.length + 1));
|
|
82
|
+
}
|
|
83
|
+
return output;
|
|
84
|
+
};
|
|
85
|
+
return new node_stream__rspack_import_0.Transform({
|
|
86
|
+
transform (chunk, _encoding, callback) {
|
|
87
|
+
try {
|
|
88
|
+
callback(null, observeTerminalMarker(processor.push(decoder.write(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)))));
|
|
89
|
+
} catch (error) {
|
|
90
|
+
callback(toError(error));
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
flush (callback) {
|
|
94
|
+
try {
|
|
95
|
+
const output = observeTerminalMarker(processor.finish(decoder.end()));
|
|
96
|
+
callback(null, sawTerminalMarker ? output : `${output}${terminalMarker}`);
|
|
97
|
+
} catch (error) {
|
|
98
|
+
callback(toError(error));
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
destroy (error, callback) {
|
|
102
|
+
try {
|
|
103
|
+
(0, _rendererHead__rspack_import_2.abortHeadRender)(context);
|
|
104
|
+
callback(error);
|
|
105
|
+
} catch (abortError) {
|
|
106
|
+
callback(error ?? toError(abortError));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
};
|
|
111
|
+
const createOnceErrorReporter = (onError)=>{
|
|
112
|
+
let reported = false;
|
|
113
|
+
return (error)=>{
|
|
114
|
+
if (!reported) {
|
|
115
|
+
reported = true;
|
|
116
|
+
onError?.(error);
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
const pipeNodeHeadStream = (options)=>{
|
|
121
|
+
const { source, destination, context, terminalMarker, onError } = options;
|
|
122
|
+
const stripper = createNodeHeadMarkerStripper(context, terminalMarker);
|
|
123
|
+
(0, node_stream__rspack_import_0.pipeline)(source, stripper, destination, (error)=>{
|
|
124
|
+
if (null !== error) onError?.(error);
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
__webpack_require__.d(__webpack_exports__, {}, {
|
|
128
|
+
createNodeHeadMarkerStripper: createNodeHeadMarkerStripper,
|
|
129
|
+
createOnceErrorReporter: createOnceErrorReporter,
|
|
130
|
+
pipeNodeHeadStream: pipeNodeHeadStream
|
|
131
|
+
});
|
|
132
|
+
})();
|
|
133
|
+
exports.createNodeHeadMarkerStripper = __webpack_exports__.createNodeHeadMarkerStripper;
|
|
134
|
+
exports.createOnceErrorReporter = __webpack_exports__.createOnceErrorReporter;
|
|
135
|
+
exports.pipeNodeHeadStream = __webpack_exports__.pipeNodeHeadStream;
|
|
136
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
137
|
+
"createNodeHeadMarkerStripper",
|
|
138
|
+
"createOnceErrorReporter",
|
|
139
|
+
"pipeNodeHeadStream"
|
|
140
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
141
|
+
Object.defineProperty(exports, '__esModule', {
|
|
142
|
+
value: true
|
|
143
|
+
});
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_modules__ = {
|
|
3
|
+
"./helmetCompat" (module) {
|
|
4
|
+
module.exports = require("./helmetCompat.js");
|
|
5
|
+
}
|
|
6
|
+
};
|
|
7
|
+
var __webpack_module_cache__ = {};
|
|
8
|
+
function __webpack_require__(moduleId) {
|
|
9
|
+
var cachedModule = __webpack_module_cache__[moduleId];
|
|
10
|
+
if (void 0 !== cachedModule) return cachedModule.exports;
|
|
11
|
+
var module = __webpack_module_cache__[moduleId] = {
|
|
12
|
+
exports: {}
|
|
13
|
+
};
|
|
14
|
+
__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
15
|
+
return module.exports;
|
|
16
|
+
}
|
|
17
|
+
(()=>{
|
|
18
|
+
__webpack_require__.n = (module)=>{
|
|
19
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
20
|
+
__webpack_require__.d(getter, {
|
|
21
|
+
a: getter
|
|
22
|
+
});
|
|
23
|
+
return getter;
|
|
24
|
+
};
|
|
25
|
+
})();
|
|
26
|
+
(()=>{
|
|
27
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
28
|
+
var define = (defs, kind)=>{
|
|
29
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
30
|
+
enumerable: true,
|
|
31
|
+
[kind]: defs[key]
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
define(getters, "get");
|
|
35
|
+
define(values, "value");
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
(()=>{
|
|
39
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
40
|
+
})();
|
|
41
|
+
(()=>{
|
|
42
|
+
__webpack_require__.r = (exports1)=>{
|
|
43
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
44
|
+
value: 'Module'
|
|
45
|
+
});
|
|
46
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
47
|
+
value: true
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
})();
|
|
51
|
+
var __webpack_exports__ = {};
|
|
52
|
+
(()=>{
|
|
53
|
+
__webpack_require__.r(__webpack_exports__);
|
|
54
|
+
var _helmetCompat__rspack_import_0 = __webpack_require__("./helmetCompat");
|
|
55
|
+
var __rspack_reexport = {};
|
|
56
|
+
for(const __rspack_import_key in _helmetCompat__rspack_import_0)if ([
|
|
57
|
+
"createWebHeadMarkerStripper",
|
|
58
|
+
"default",
|
|
59
|
+
"finishHeadRender",
|
|
60
|
+
"abortHeadRender",
|
|
61
|
+
"beginHeadRender",
|
|
62
|
+
"completeHeadRender",
|
|
63
|
+
"createHeadChunkProcessor",
|
|
64
|
+
"publishHeadRender",
|
|
65
|
+
"collectHeadRecord",
|
|
66
|
+
"collectHeadState"
|
|
67
|
+
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_helmetCompat__rspack_import_0[__rspack_import_key];
|
|
68
|
+
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
69
|
+
const MARKER_ATTRIBUTE = 'data-modern-helmet';
|
|
70
|
+
const MARKER_PREFIX = `<template ${MARKER_ATTRIBUTE}="`;
|
|
71
|
+
const MARKER_SUFFIX = '"></template>';
|
|
72
|
+
const RECORD_ID_WIDTH = 12;
|
|
73
|
+
const MARKER_LENGTH = MARKER_PREFIX.length + 1 + 36 + RECORD_ID_WIDTH + MARKER_SUFFIX.length;
|
|
74
|
+
const HEAD_STATE = Symbol('modern.rendererHead');
|
|
75
|
+
const getState = (context)=>{
|
|
76
|
+
const headContext = context;
|
|
77
|
+
let state = headContext[HEAD_STATE];
|
|
78
|
+
if (void 0 === state) {
|
|
79
|
+
state = {
|
|
80
|
+
publishedRecords: []
|
|
81
|
+
};
|
|
82
|
+
Object.defineProperty(headContext, HEAD_STATE, {
|
|
83
|
+
value: state
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return state;
|
|
87
|
+
};
|
|
88
|
+
const formatId = (value)=>value.toString(36).padStart(RECORD_ID_WIDTH, '0');
|
|
89
|
+
const createToken = (transaction)=>{
|
|
90
|
+
const token = `h${transaction.nonce}${formatId(transaction.nextRecordId)}`;
|
|
91
|
+
transaction.nextRecordId += 1;
|
|
92
|
+
return token;
|
|
93
|
+
};
|
|
94
|
+
const beginHeadRender = (context)=>{
|
|
95
|
+
const state = getState(context);
|
|
96
|
+
state.transaction = {
|
|
97
|
+
recordsByToken: new Map(),
|
|
98
|
+
committedRecords: [],
|
|
99
|
+
committedTokens: new Set(),
|
|
100
|
+
nextRecordId: 0,
|
|
101
|
+
nonce: globalThis.crypto.randomUUID(),
|
|
102
|
+
previousRecords: state.publishedRecords,
|
|
103
|
+
sealed: false
|
|
104
|
+
};
|
|
105
|
+
state.publish?.([]);
|
|
106
|
+
};
|
|
107
|
+
const collectHeadRecord = (context, createRecord, publish)=>{
|
|
108
|
+
const state = getState(context);
|
|
109
|
+
const transaction = state.transaction;
|
|
110
|
+
if (void 0 === transaction) return;
|
|
111
|
+
const hadPublisher = void 0 !== state.publish;
|
|
112
|
+
state.publish = (records)=>publish(records);
|
|
113
|
+
if (!hadPublisher) state.publish([]);
|
|
114
|
+
if (transaction.sealed) return null;
|
|
115
|
+
const token = createToken(transaction);
|
|
116
|
+
transaction.recordsByToken.set(token, createRecord());
|
|
117
|
+
return {
|
|
118
|
+
[MARKER_ATTRIBUTE]: token
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
const collectHeadState = (context, createRecord, derive, target)=>collectHeadRecord(context, createRecord, (records)=>{
|
|
122
|
+
target.helmet = derive(records);
|
|
123
|
+
});
|
|
124
|
+
const consumeMarkers = (context, html)=>{
|
|
125
|
+
const transaction = getState(context).transaction;
|
|
126
|
+
if (void 0 === transaction) return html;
|
|
127
|
+
let cursor = 0;
|
|
128
|
+
let stripped = '';
|
|
129
|
+
while(cursor < html.length){
|
|
130
|
+
const start = html.indexOf(MARKER_PREFIX, cursor);
|
|
131
|
+
if (-1 === start) {
|
|
132
|
+
stripped += html.slice(cursor);
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
const tokenStart = start + MARKER_PREFIX.length;
|
|
136
|
+
const end = html.indexOf(MARKER_SUFFIX, tokenStart);
|
|
137
|
+
if (-1 === end) {
|
|
138
|
+
stripped += html.slice(cursor);
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
const token = html.slice(tokenStart, end);
|
|
142
|
+
if (transaction.recordsByToken.has(token)) {
|
|
143
|
+
stripped += html.slice(cursor, start);
|
|
144
|
+
if (!transaction.sealed && !transaction.committedTokens.has(token)) {
|
|
145
|
+
transaction.committedTokens.add(token);
|
|
146
|
+
transaction.committedRecords.push(transaction.recordsByToken.get(token));
|
|
147
|
+
}
|
|
148
|
+
} else stripped += html.slice(cursor, end + MARKER_SUFFIX.length);
|
|
149
|
+
cursor = end + MARKER_SUFFIX.length;
|
|
150
|
+
}
|
|
151
|
+
return stripped;
|
|
152
|
+
};
|
|
153
|
+
const publish = (context)=>{
|
|
154
|
+
const state = getState(context);
|
|
155
|
+
const records = state.transaction?.committedRecords ?? [];
|
|
156
|
+
state.publishedRecords = records;
|
|
157
|
+
state.publish?.(records);
|
|
158
|
+
};
|
|
159
|
+
const publishHeadRender = (context)=>{
|
|
160
|
+
const transaction = getState(context).transaction;
|
|
161
|
+
if (void 0 !== transaction) {
|
|
162
|
+
transaction.sealed = true;
|
|
163
|
+
publish(context);
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
const finishHeadRender = (context)=>{
|
|
167
|
+
const state = getState(context);
|
|
168
|
+
if (void 0 !== state.transaction) {
|
|
169
|
+
if (!state.transaction.sealed) publish(context);
|
|
170
|
+
state.transaction = void 0;
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
const completeHeadRender = (context, html)=>{
|
|
174
|
+
const stripped = consumeMarkers(context, html);
|
|
175
|
+
finishHeadRender(context);
|
|
176
|
+
return stripped;
|
|
177
|
+
};
|
|
178
|
+
const abortHeadRender = (context)=>{
|
|
179
|
+
const state = getState(context);
|
|
180
|
+
const transaction = state.transaction;
|
|
181
|
+
if (void 0 !== transaction) {
|
|
182
|
+
state.publishedRecords = transaction.previousRecords;
|
|
183
|
+
state.publish?.(transaction.previousRecords);
|
|
184
|
+
state.transaction = void 0;
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
const findCarryStart = (input)=>{
|
|
188
|
+
const windowStart = Math.max(0, input.length - MARKER_LENGTH + 1);
|
|
189
|
+
const markerStart = input.lastIndexOf(MARKER_PREFIX);
|
|
190
|
+
if (markerStart >= windowStart && input.length - markerStart < MARKER_LENGTH) return markerStart;
|
|
191
|
+
const maxPrefixLength = Math.min(MARKER_PREFIX.length - 1, input.length);
|
|
192
|
+
for(let length = maxPrefixLength; length > 0; length -= 1)if (MARKER_PREFIX.startsWith(input.slice(-length))) return input.length - length;
|
|
193
|
+
return input.length;
|
|
194
|
+
};
|
|
195
|
+
const createHeadChunkProcessor = (context)=>{
|
|
196
|
+
let carry = '';
|
|
197
|
+
return {
|
|
198
|
+
push (chunk) {
|
|
199
|
+
const input = carry + chunk;
|
|
200
|
+
const carryStart = findCarryStart(input);
|
|
201
|
+
const output = consumeMarkers(context, input.slice(0, carryStart));
|
|
202
|
+
carry = input.slice(carryStart);
|
|
203
|
+
return output;
|
|
204
|
+
},
|
|
205
|
+
finish (chunk = '') {
|
|
206
|
+
const output = completeHeadRender(context, carry + chunk);
|
|
207
|
+
carry = '';
|
|
208
|
+
return output;
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
};
|
|
212
|
+
const createWebHeadMarkerStripper = (context)=>{
|
|
213
|
+
const decoder = new TextDecoder();
|
|
214
|
+
const encoder = new TextEncoder();
|
|
215
|
+
const processor = createHeadChunkProcessor(context);
|
|
216
|
+
return new TransformStream({
|
|
217
|
+
transform (chunk, controller) {
|
|
218
|
+
const output = processor.push(decoder.decode(chunk, {
|
|
219
|
+
stream: true
|
|
220
|
+
}));
|
|
221
|
+
if (output) controller.enqueue(encoder.encode(output));
|
|
222
|
+
},
|
|
223
|
+
flush (controller) {
|
|
224
|
+
const output = processor.finish(decoder.decode());
|
|
225
|
+
if (output) controller.enqueue(encoder.encode(output));
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
};
|
|
229
|
+
__webpack_require__.d(__webpack_exports__, {}, {
|
|
230
|
+
abortHeadRender: abortHeadRender,
|
|
231
|
+
beginHeadRender: beginHeadRender,
|
|
232
|
+
collectHeadRecord: collectHeadRecord,
|
|
233
|
+
collectHeadState: collectHeadState,
|
|
234
|
+
completeHeadRender: completeHeadRender,
|
|
235
|
+
createHeadChunkProcessor: createHeadChunkProcessor,
|
|
236
|
+
createWebHeadMarkerStripper: createWebHeadMarkerStripper,
|
|
237
|
+
finishHeadRender: finishHeadRender,
|
|
238
|
+
publishHeadRender: publishHeadRender
|
|
239
|
+
});
|
|
240
|
+
})();
|
|
241
|
+
exports.abortHeadRender = __webpack_exports__.abortHeadRender;
|
|
242
|
+
exports.beginHeadRender = __webpack_exports__.beginHeadRender;
|
|
243
|
+
exports.collectHeadRecord = __webpack_exports__.collectHeadRecord;
|
|
244
|
+
exports.collectHeadState = __webpack_exports__.collectHeadState;
|
|
245
|
+
exports.completeHeadRender = __webpack_exports__.completeHeadRender;
|
|
246
|
+
exports.createHeadChunkProcessor = __webpack_exports__.createHeadChunkProcessor;
|
|
247
|
+
exports.createWebHeadMarkerStripper = __webpack_exports__.createWebHeadMarkerStripper;
|
|
248
|
+
exports.finishHeadRender = __webpack_exports__.finishHeadRender;
|
|
249
|
+
exports.publishHeadRender = __webpack_exports__.publishHeadRender;
|
|
250
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
251
|
+
"abortHeadRender",
|
|
252
|
+
"beginHeadRender",
|
|
253
|
+
"collectHeadRecord",
|
|
254
|
+
"collectHeadState",
|
|
255
|
+
"completeHeadRender",
|
|
256
|
+
"createHeadChunkProcessor",
|
|
257
|
+
"createWebHeadMarkerStripper",
|
|
258
|
+
"finishHeadRender",
|
|
259
|
+
"publishHeadRender"
|
|
260
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
261
|
+
Object.defineProperty(exports, '__esModule', {
|
|
262
|
+
value: true
|
|
263
|
+
});
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
5
|
+
var define = (defs, kind)=>{
|
|
6
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
[kind]: defs[key]
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
define(getters, "get");
|
|
12
|
+
define(values, "value");
|
|
13
|
+
};
|
|
14
|
+
})();
|
|
15
|
+
(()=>{
|
|
16
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
17
|
+
})();
|
|
18
|
+
(()=>{
|
|
19
|
+
__webpack_require__.r = (exports1)=>{
|
|
20
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
21
|
+
value: 'Module'
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
24
|
+
value: true
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
})();
|
|
28
|
+
var __webpack_exports__ = {};
|
|
29
|
+
__webpack_require__.r(__webpack_exports__);
|
|
30
|
+
const encoder = new TextEncoder();
|
|
31
|
+
const closingTagsPattern = /<\/body>\s*<\/html>\s*$/i;
|
|
32
|
+
const closingTagsPrefixPattern = /(?:<\/body>\s*(?:<\/html>\s*|<\/h(?:t(?:m(?:l>?)?)?)?|<\/?|<)?|<\/b(?:o(?:d(?:y>?)?)?)?|<\/?|<[^>]*)$/i;
|
|
33
|
+
const RSC_HTML_CLOSING_TAIL_LIMIT = 8192;
|
|
34
|
+
function injectRSCPayload(rscStream, { injectClosingTags = true } = {}) {
|
|
35
|
+
const decoder = new TextDecoder();
|
|
36
|
+
let retainedTail = '';
|
|
37
|
+
let committedClosingBody = false;
|
|
38
|
+
let committedHtmlClose = false;
|
|
39
|
+
let committedProbe = '';
|
|
40
|
+
let flightPromise;
|
|
41
|
+
const startFlight = (controller)=>{
|
|
42
|
+
if (!flightPromise) {
|
|
43
|
+
flightPromise = writeRSCStream(rscStream, controller);
|
|
44
|
+
flightPromise.catch((error)=>controller.error(error));
|
|
45
|
+
}
|
|
46
|
+
return flightPromise;
|
|
47
|
+
};
|
|
48
|
+
const enqueueHtml = (value, controller)=>{
|
|
49
|
+
if (value) controller.enqueue(encoder.encode(value));
|
|
50
|
+
};
|
|
51
|
+
const processHtml = async (value, controller)=>{
|
|
52
|
+
if (!value) return;
|
|
53
|
+
if (committedClosingBody) {
|
|
54
|
+
const probe = committedProbe + value;
|
|
55
|
+
committedHtmlClose ||= /<\/html>/i.test(probe);
|
|
56
|
+
committedProbe = probe.slice(-6);
|
|
57
|
+
enqueueHtml(value, controller);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const html = retainedTail + value;
|
|
61
|
+
retainedTail = '';
|
|
62
|
+
const suffix = html.match(closingTagsPrefixPattern)?.[0] ?? '';
|
|
63
|
+
const prefix = suffix ? html.slice(0, -suffix.length) : html;
|
|
64
|
+
enqueueHtml(prefix, controller);
|
|
65
|
+
if (!suffix) return void startFlight(controller);
|
|
66
|
+
if (suffix.length <= RSC_HTML_CLOSING_TAIL_LIMIT) {
|
|
67
|
+
retainedTail = suffix;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
await startFlight(controller);
|
|
71
|
+
if (/<\/body>/i.test(suffix)) {
|
|
72
|
+
committedClosingBody = true;
|
|
73
|
+
committedHtmlClose = /<\/html>/i.test(suffix);
|
|
74
|
+
committedProbe = suffix.slice(-6);
|
|
75
|
+
}
|
|
76
|
+
enqueueHtml(suffix, controller);
|
|
77
|
+
};
|
|
78
|
+
return new TransformStream({
|
|
79
|
+
async transform (chunk, controller) {
|
|
80
|
+
await processHtml(decoder.decode(chunk, {
|
|
81
|
+
stream: true
|
|
82
|
+
}), controller);
|
|
83
|
+
},
|
|
84
|
+
async flush (controller) {
|
|
85
|
+
await processHtml(decoder.decode(), controller);
|
|
86
|
+
await startFlight(controller);
|
|
87
|
+
const retainedClosingTags = closingTagsPattern.test(retainedTail);
|
|
88
|
+
enqueueHtml(retainedTail, controller);
|
|
89
|
+
if (!injectClosingTags) return;
|
|
90
|
+
if (committedClosingBody) {
|
|
91
|
+
if (!committedHtmlClose) enqueueHtml('</html>', controller);
|
|
92
|
+
} else if (!retainedClosingTags) enqueueHtml('</body></html>', controller);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
async function writeRSCStream(rscStream, controller) {
|
|
97
|
+
const decoder = new TextDecoder('utf-8', {
|
|
98
|
+
fatal: true
|
|
99
|
+
});
|
|
100
|
+
for await (const chunk of rscStream)try {
|
|
101
|
+
writeChunk(JSON.stringify(decoder.decode(chunk, {
|
|
102
|
+
stream: true
|
|
103
|
+
})), controller);
|
|
104
|
+
} catch {
|
|
105
|
+
const base64 = JSON.stringify(btoa(String.fromCodePoint(...chunk)));
|
|
106
|
+
writeChunk(`Uint8Array.from(atob(${base64}), m => m.codePointAt(0))`, controller);
|
|
107
|
+
}
|
|
108
|
+
const remaining = decoder.decode();
|
|
109
|
+
if (remaining) writeChunk(JSON.stringify(remaining), controller);
|
|
110
|
+
}
|
|
111
|
+
function writeChunk(chunk, controller) {
|
|
112
|
+
const script = `(self.__FLIGHT_DATA||=[]).push(${chunk})`;
|
|
113
|
+
controller.enqueue(encoder.encode(`<script>${script.replace(/<!--/g, '<\\!--').replace(/<\/(script)/gi, '</\\$1')}</script>`));
|
|
114
|
+
}
|
|
115
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
116
|
+
injectRSCPayload: ()=>injectRSCPayload
|
|
117
|
+
}, {
|
|
118
|
+
RSC_HTML_CLOSING_TAIL_LIMIT: RSC_HTML_CLOSING_TAIL_LIMIT
|
|
119
|
+
});
|
|
120
|
+
exports.RSC_HTML_CLOSING_TAIL_LIMIT = __webpack_exports__.RSC_HTML_CLOSING_TAIL_LIMIT;
|
|
121
|
+
exports.injectRSCPayload = __webpack_exports__.injectRSCPayload;
|
|
122
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
123
|
+
"RSC_HTML_CLOSING_TAIL_LIMIT",
|
|
124
|
+
"injectRSCPayload"
|
|
125
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
126
|
+
Object.defineProperty(exports, '__esModule', {
|
|
127
|
+
value: true
|
|
128
|
+
});
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
5
|
+
var define = (defs, kind)=>{
|
|
6
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
[kind]: defs[key]
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
define(getters, "get");
|
|
12
|
+
define(values, "value");
|
|
13
|
+
};
|
|
14
|
+
})();
|
|
15
|
+
(()=>{
|
|
16
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
17
|
+
})();
|
|
18
|
+
(()=>{
|
|
19
|
+
__webpack_require__.r = (exports1)=>{
|
|
20
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
21
|
+
value: 'Module'
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
24
|
+
value: true
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
})();
|
|
28
|
+
var __webpack_exports__ = {};
|
|
29
|
+
__webpack_require__.r(__webpack_exports__);
|
|
30
|
+
const SAFE_FAILURE_MESSAGES = {
|
|
31
|
+
500: 'Internal Server Error',
|
|
32
|
+
503: 'Service Unavailable'
|
|
33
|
+
};
|
|
34
|
+
const SAFE_FAILURE_CODES = {
|
|
35
|
+
500: 'INTERNAL_SERVER_ERROR',
|
|
36
|
+
503: 'SERVICE_UNAVAILABLE'
|
|
37
|
+
};
|
|
38
|
+
const readErrorProperty = (error, key)=>{
|
|
39
|
+
if ('object' != typeof error || null === error) return;
|
|
40
|
+
try {
|
|
41
|
+
return error[key];
|
|
42
|
+
} catch {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const normalizeFailureStatus = (value)=>'number' == typeof value && Number.isInteger(value) && value >= 400 && value <= 599 ? value : void 0;
|
|
47
|
+
const normalizeDelaySeconds = (value)=>{
|
|
48
|
+
if ('number' == typeof value) {
|
|
49
|
+
const seconds = Math.ceil(value);
|
|
50
|
+
return Number.isFinite(value) && value >= 0 && Number.isSafeInteger(seconds) ? String(seconds) : void 0;
|
|
51
|
+
}
|
|
52
|
+
if ('string' == typeof value) {
|
|
53
|
+
const trimmed = value.trim();
|
|
54
|
+
if (!/^\d+$/u.test(trimmed)) return;
|
|
55
|
+
const seconds = Number(trimmed);
|
|
56
|
+
return Number.isSafeInteger(seconds) ? String(seconds) : void 0;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
const normalizeHttpDate = (value)=>{
|
|
60
|
+
try {
|
|
61
|
+
if (value instanceof Date) {
|
|
62
|
+
const timestamp = Date.prototype.getTime.call(value);
|
|
63
|
+
return Number.isFinite(timestamp) ? new Date(timestamp).toUTCString() : void 0;
|
|
64
|
+
}
|
|
65
|
+
if ('string' == typeof value) {
|
|
66
|
+
const trimmed = value.trim();
|
|
67
|
+
const timestamp = Date.parse(trimmed);
|
|
68
|
+
if (Number.isFinite(timestamp)) {
|
|
69
|
+
const canonical = new Date(timestamp).toUTCString();
|
|
70
|
+
return canonical === trimmed ? canonical : void 0;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
} catch {}
|
|
74
|
+
};
|
|
75
|
+
const normalizeRetryAfter = (value)=>normalizeDelaySeconds(value) ?? normalizeHttpDate(value);
|
|
76
|
+
const getSafeFailureStatus = (error)=>normalizeFailureStatus(readErrorProperty(error, 'status')) ?? normalizeFailureStatus(readErrorProperty(error, 'statusCode')) ?? 500;
|
|
77
|
+
const createSafeFailureHttpResult = (error)=>{
|
|
78
|
+
const status = getSafeFailureStatus(error);
|
|
79
|
+
const retryAfterMs = readErrorProperty(error, 'retryAfterMs');
|
|
80
|
+
const retryAfter = 503 === status ? normalizeRetryAfter(readErrorProperty(error, 'retryAfter')) ?? normalizeRetryAfter(readErrorProperty(error, 'retryAfterSeconds')) ?? normalizeRetryAfter('number' == typeof retryAfterMs ? retryAfterMs / 1000 : void 0) : void 0;
|
|
81
|
+
return {
|
|
82
|
+
status,
|
|
83
|
+
body: {
|
|
84
|
+
success: false,
|
|
85
|
+
error: {
|
|
86
|
+
code: SAFE_FAILURE_CODES[status] ?? 'REQUEST_FAILED',
|
|
87
|
+
message: SAFE_FAILURE_MESSAGES[status] ?? 'Request failed',
|
|
88
|
+
status
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
headers: {
|
|
92
|
+
'content-type': 'application/json; charset=utf-8',
|
|
93
|
+
...void 0 === retryAfter ? {} : {
|
|
94
|
+
'Retry-After': retryAfter
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
const createSafeJsonFailureResponse = (error)=>{
|
|
100
|
+
const result = createSafeFailureHttpResult(error);
|
|
101
|
+
return new Response(JSON.stringify(result.body), {
|
|
102
|
+
status: result.status,
|
|
103
|
+
headers: result.headers
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
const createSafeFailureResponse = createSafeJsonFailureResponse;
|
|
107
|
+
__webpack_require__.d(__webpack_exports__, {}, {
|
|
108
|
+
createSafeFailureHttpResult: createSafeFailureHttpResult,
|
|
109
|
+
createSafeFailureResponse: createSafeFailureResponse,
|
|
110
|
+
createSafeJsonFailureResponse: createSafeJsonFailureResponse,
|
|
111
|
+
getSafeFailureStatus: getSafeFailureStatus
|
|
112
|
+
});
|
|
113
|
+
exports.createSafeFailureHttpResult = __webpack_exports__.createSafeFailureHttpResult;
|
|
114
|
+
exports.createSafeFailureResponse = __webpack_exports__.createSafeFailureResponse;
|
|
115
|
+
exports.createSafeJsonFailureResponse = __webpack_exports__.createSafeJsonFailureResponse;
|
|
116
|
+
exports.getSafeFailureStatus = __webpack_exports__.getSafeFailureStatus;
|
|
117
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
118
|
+
"createSafeFailureHttpResult",
|
|
119
|
+
"createSafeFailureResponse",
|
|
120
|
+
"createSafeJsonFailureResponse",
|
|
121
|
+
"getSafeFailureStatus"
|
|
122
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
123
|
+
Object.defineProperty(exports, '__esModule', {
|
|
124
|
+
value: true
|
|
125
|
+
});
|