remote-components 0.4.4 → 0.4.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.
- package/dist/{chunk-76W64VJG.cjs → chunk-7OD5S534.cjs} +6 -6
- package/dist/{chunk-QNPKWDSY.js → chunk-MJ2KYXGR.js} +2 -2
- package/dist/{chunk-2VLOQRNR.js → chunk-NZM2SI6U.js} +2 -2
- package/dist/{chunk-3XXIKTRR.js → chunk-O4A6CJGI.js} +3 -3
- package/dist/{chunk-CELPDJVY.cjs → chunk-PNASFKWA.cjs} +7 -7
- package/dist/{chunk-7X64ZGV5.js → chunk-PT3R275L.js} +41 -25
- package/dist/chunk-PT3R275L.js.map +1 -0
- package/dist/{chunk-5GPOQVC3.cjs → chunk-TWO3XB6H.cjs} +10 -10
- package/dist/{chunk-7ZQ7SWZM.cjs → chunk-W5FSHVWU.cjs} +41 -25
- package/dist/chunk-W5FSHVWU.cjs.map +1 -0
- package/dist/config/nextjs.cjs +37 -9
- package/dist/config/nextjs.cjs.map +1 -1
- package/dist/config/nextjs.d.ts +14 -1
- package/dist/config/nextjs.js +31 -3
- package/dist/config/nextjs.js.map +1 -1
- package/dist/host/html.cjs +13 -13
- package/dist/host/html.js +5 -5
- package/dist/host/nextjs/app/client-only.cjs +6 -6
- package/dist/host/nextjs/app/client-only.js +4 -4
- package/dist/host/react.cjs +5 -5
- package/dist/host/react.js +4 -4
- package/dist/internal/runtime/turbopack/chunk-loader.cjs +39 -23
- package/dist/internal/runtime/turbopack/chunk-loader.cjs.map +1 -1
- package/dist/internal/runtime/turbopack/chunk-loader.js +39 -23
- package/dist/internal/runtime/turbopack/chunk-loader.js.map +1 -1
- package/dist/internal/runtime/turbopack/patterns.cjs +1 -1
- package/dist/internal/runtime/turbopack/patterns.cjs.map +1 -1
- package/dist/internal/runtime/turbopack/patterns.js +1 -1
- package/dist/internal/runtime/turbopack/patterns.js.map +1 -1
- package/dist/{turbopack-ABJOQO3J.js → turbopack-55EJDSUT.js} +3 -3
- package/dist/{turbopack-L7JU77FH.cjs → turbopack-Q6KJAEOX.cjs} +8 -8
- package/dist/{webpack-V4ZH7KA2.js → webpack-AQ34DAJZ.js} +2 -2
- package/dist/{webpack-2QRFGZIF.cjs → webpack-FWUNUWLF.cjs} +5 -5
- package/package.json +1 -1
- package/dist/chunk-7X64ZGV5.js.map +0 -1
- package/dist/chunk-7ZQ7SWZM.cjs.map +0 -1
- /package/dist/{chunk-76W64VJG.cjs.map → chunk-7OD5S534.cjs.map} +0 -0
- /package/dist/{chunk-QNPKWDSY.js.map → chunk-MJ2KYXGR.js.map} +0 -0
- /package/dist/{chunk-2VLOQRNR.js.map → chunk-NZM2SI6U.js.map} +0 -0
- /package/dist/{chunk-3XXIKTRR.js.map → chunk-O4A6CJGI.js.map} +0 -0
- /package/dist/{chunk-CELPDJVY.cjs.map → chunk-PNASFKWA.cjs.map} +0 -0
- /package/dist/{chunk-5GPOQVC3.cjs.map → chunk-TWO3XB6H.cjs.map} +0 -0
- /package/dist/{turbopack-ABJOQO3J.js.map → turbopack-55EJDSUT.js.map} +0 -0
- /package/dist/{turbopack-L7JU77FH.cjs.map → turbopack-Q6KJAEOX.cjs.map} +0 -0
- /package/dist/{webpack-V4ZH7KA2.js.map → webpack-AQ34DAJZ.js.map} +0 -0
- /package/dist/{webpack-2QRFGZIF.cjs.map → webpack-FWUNUWLF.cjs.map} +0 -0
|
@@ -44,9 +44,28 @@ function loadChunkWithScope(scope, chunkId) {
|
|
|
44
44
|
}
|
|
45
45
|
ns.chunkCache[url] = new Promise((resolve, reject) => {
|
|
46
46
|
fetch(resolvedUrl).then((res) => res.text()).then((code) => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
if (/importScripts\(\.\.\.self\.TURBOPACK_NEXT_CHUNK_URLS/.test(code)) {
|
|
48
|
+
const preloadLinks = document.querySelectorAll(
|
|
49
|
+
`link[rel="preload"][href="${new URL(url).pathname}"]`
|
|
50
|
+
);
|
|
51
|
+
preloadLinks.forEach((preloadLink) => preloadLink.remove());
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const hasTurbopackLegacyGlobal = TURBOPACK_GLOBAL_RE.test(code);
|
|
55
|
+
const customGlobalProp = `TURBOPACK_remote_chunk_loading_global_${scope.name}`;
|
|
56
|
+
const hasCustomGlobal = code.includes(customGlobalProp);
|
|
57
|
+
const isTurbopackChunk = hasTurbopackLegacyGlobal || hasCustomGlobal;
|
|
58
|
+
if (isTurbopackChunk) {
|
|
59
|
+
logDebug(
|
|
60
|
+
"ChunkLoader",
|
|
61
|
+
hasCustomGlobal && !hasTurbopackLegacyGlobal ? `Chunk "${url}" uses build-time chunkLoadingGlobal "${customGlobalProp}" \u2014 skipping runtime TURBOPACK rename.` : `Chunk "${url}" uses legacy globalThis.TURBOPACK \u2014 applying runtime rename for scope "${scope.scopedName}".`
|
|
62
|
+
);
|
|
63
|
+
return handleTurbopackChunk(
|
|
64
|
+
code,
|
|
65
|
+
scope,
|
|
66
|
+
url,
|
|
67
|
+
hasTurbopackLegacyGlobal
|
|
68
|
+
);
|
|
50
69
|
}
|
|
51
70
|
}).then(resolve).catch((error) => {
|
|
52
71
|
const isProxied = isProxiedUrl(resolvedUrl);
|
|
@@ -77,36 +96,34 @@ function createChunkDispatcher() {
|
|
|
77
96
|
return loadChunkWithScope(scope, chunkId);
|
|
78
97
|
};
|
|
79
98
|
}
|
|
80
|
-
async function handleTurbopackChunk(code, scope, url) {
|
|
81
|
-
if (/importScripts\(\.\.\.self.TURBOPACK_NEXT_CHUNK_URLS/.test(code)) {
|
|
82
|
-
const preloadLinks = document.querySelectorAll(
|
|
83
|
-
`link[rel="preload"][href="${new URL(url).pathname}"]`
|
|
84
|
-
);
|
|
85
|
-
preloadLinks.forEach((preloadLink) => preloadLink.remove());
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
99
|
+
async function handleTurbopackChunk(code, scope, url, renameTurbopackGlobal) {
|
|
88
100
|
const self = globalThis;
|
|
89
|
-
const { globalKey } = scope;
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
101
|
+
const { globalKey, name } = scope;
|
|
102
|
+
const globalProp = renameTurbopackGlobal ? `TURBOPACK_${globalKey}` : `TURBOPACK_remote_chunk_loading_global_${name}`;
|
|
103
|
+
let transformedCode = code;
|
|
104
|
+
if (renameTurbopackGlobal) {
|
|
105
|
+
transformedCode = transformedCode.replace(
|
|
106
|
+
/globalThis\[\s*["']TURBOPACK["']\s*\]/g,
|
|
107
|
+
`globalThis["TURBOPACK_${globalKey}"]`
|
|
108
|
+
).replace(
|
|
109
|
+
/self\[\s*["']TURBOPACK["']\s*\]/g,
|
|
110
|
+
`self["TURBOPACK_${globalKey}"]`
|
|
111
|
+
).replace(/globalThis\.TURBOPACK/g, `globalThis.TURBOPACK_${globalKey}`).replace(/self\.TURBOPACK(?!_)/g, `self.TURBOPACK_${globalKey}`).replace(/TURBOPACK_CHUNK_LISTS/g, `TURBOPACK_${globalKey}_CHUNK_LISTS`);
|
|
112
|
+
}
|
|
113
|
+
transformedCode = transformedCode.replace(
|
|
97
114
|
/TURBOPACK_WORKER_LOCATION/g,
|
|
98
115
|
`TURBOPACK_WORKER_LOCATION_${globalKey}`
|
|
99
116
|
).replace(
|
|
100
117
|
/TURBOPACK_NEXT_CHUNK_URLS/g,
|
|
101
118
|
`TURBOPACK_NEXT_CHUNK_URLS_${globalKey}`
|
|
102
|
-
).replace(
|
|
119
|
+
).replace(
|
|
103
120
|
/TURBOPACK_CHUNK_UPDATE_LISTENERS/g,
|
|
104
121
|
`TURBOPACK_CHUNK_UPDATE_LISTENERS_${globalKey}`
|
|
105
122
|
).replace(/__next_require__/g, `__${globalKey}_next_require__`).replace(
|
|
106
123
|
/\/\/# sourceMappingURL=(?<name>.+)(?<optional>\._)?\.js\.map/g,
|
|
107
124
|
`//# sourceMappingURL=${new URL(".", new URL(url, scope.url)).href}$1$2.js.map`
|
|
108
125
|
);
|
|
109
|
-
if (!self[
|
|
126
|
+
if (!self[globalProp]) {
|
|
110
127
|
const wrapPush = (target) => {
|
|
111
128
|
const originalPush = target.push;
|
|
112
129
|
if (typeof originalPush !== "function")
|
|
@@ -125,7 +142,6 @@ async function handleTurbopackChunk(code, scope, url) {
|
|
|
125
142
|
};
|
|
126
143
|
return target;
|
|
127
144
|
};
|
|
128
|
-
const globalProp = `TURBOPACK_${globalKey}`;
|
|
129
145
|
let currentValue = wrapPush([]);
|
|
130
146
|
Object.defineProperty(self, globalProp, {
|
|
131
147
|
get() {
|
|
@@ -166,7 +182,7 @@ async function handleTurbopackChunk(code, scope, url) {
|
|
|
166
182
|
};
|
|
167
183
|
document.head.appendChild(script);
|
|
168
184
|
});
|
|
169
|
-
const chunkLists = self[
|
|
185
|
+
const chunkLists = self[`${globalProp}_CHUNK_LISTS`];
|
|
170
186
|
const loadChunkPromises = [];
|
|
171
187
|
while (chunkLists?.length) {
|
|
172
188
|
const { chunks } = chunkLists.shift() ?? { chunks: [] };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/runtime/turbopack/chunk-loader.ts"],"sourcesContent":["import { RUNTIME_WEBPACK } from '#internal/runtime/constants';\nimport { getNamespace } from '#internal/runtime/namespace';\nimport { collapseDoubleSlashes } from '#internal/runtime/patterns';\nimport type { GlobalScope } from '#internal/runtime/types';\nimport { isProxiedUrl } from '#internal/runtime/url/protected-rc-fallback';\nimport {\n failedProxiedAssetError,\n RemoteComponentsError,\n} from '#internal/utils/error';\nimport {\n logDebug,\n logWarn,\n warnCrossOriginFetchError,\n} from '#internal/utils/logger';\nimport { TURBOPACK_GLOBAL_RE } from './patterns';\nimport {\n formatRemoteId,\n getScope,\n parseRemoteId,\n type RemoteScope,\n} from './remote-scope';\n\n/**\n * Loads a chunk using a specific scope. All state (base URL, proxy callback,\n * TURBOPACK global key) comes from the scope — no global lookups needed.\n *\n * This is the primary chunk loader called directly from:\n * - setupRemoteScope (initial chunks)\n * - TurbopackContext.l (module-level chunk loading)\n * - handleTurbopackChunk (CHUNK_LIST additional chunks)\n *\n * The global chunk dedup cache is keyed by absolute URL, so different origins\n * naturally get separate cache entries even when sharing a bundle name.\n */\nexport function loadChunkWithScope(\n scope: RemoteScope,\n chunkId: string,\n): Promise<unknown> | undefined {\n logDebug(\n 'ChunkLoader',\n `loadChunkWithScope: \"${chunkId}\" (scope: \"${scope.scopedName}\")`,\n );\n const self = globalThis as GlobalScope;\n const ns = getNamespace();\n\n const { bundle, path, prefix } = parseRemoteId(chunkId);\n\n // Skip webpack runtime chunks\n const remoteRuntime = self.__remote_webpack_require__?.[bundle ?? 'default']\n ? self.__remote_webpack_require__[bundle ?? 'default']?.type || 'webpack'\n : scope.runtime;\n if (remoteRuntime === RUNTIME_WEBPACK) {\n return Promise.resolve(undefined);\n }\n\n const rawPath = path ? collapseDoubleSlashes(`${prefix}${path}`) : '/';\n const url = new URL(rawPath, scope.url).href;\n\n if (url.endsWith('.css')) {\n return;\n }\n\n if (ns.chunkCache[url]) {\n logDebug('ChunkLoader', `Cache hit for \"${chunkId}\" (url=\"${url}\")`);\n return ns.chunkCache[url];\n }\n\n const resolvedUrl = scope.resolveClientUrl?.(url) ?? url;\n if (resolvedUrl !== url) {\n logDebug('ChunkLoader', `Proxied chunk URL: \"${url}\" → \"${resolvedUrl}\"`);\n }\n\n ns.chunkCache[url] = new Promise((resolve, reject) => {\n fetch(resolvedUrl)\n .then((res) => res.text())\n .then((code) => {\n const hasTurbopack = TURBOPACK_GLOBAL_RE.test(code);\n if (hasTurbopack) {\n return handleTurbopackChunk(code, scope, url);\n }\n // Chunk doesn't contain Turbopack globals — nothing to process\n })\n .then(resolve)\n .catch((error) => {\n const isProxied = isProxiedUrl(resolvedUrl);\n if (isProxied) {\n reject(failedProxiedAssetError('chunk', url, resolvedUrl));\n } else {\n warnCrossOriginFetchError('ChunkLoader', url);\n reject(error);\n }\n });\n });\n\n return ns.chunkCache[url];\n}\n\n/**\n * Creates the global `__webpack_chunk_load__` dispatcher.\n * This is a thin wrapper called only by external code (React's RSC runtime).\n * It parses the chunkId, resolves the correct scope, and delegates to\n * `loadChunkWithScope`.\n */\nexport function createChunkDispatcher(): (\n chunkId: string,\n scriptBundle?: string,\n) => Promise<unknown> | undefined {\n return function __chunk_dispatcher__(chunkId: string, scriptBundle?: string) {\n logDebug('ChunkDispatcher', `Dispatching chunk: \"${chunkId}\"`);\n\n const { bundle } = parseRemoteId(chunkId);\n const bundleName = bundle || scriptBundle || 'default';\n\n // Works with both the scoped name (Next.js hosts with server-side\n // rewriting) and the plain bundle name (static/HTML hosts).\n const scope = getScope(bundleName);\n\n logDebug(\n 'ChunkDispatcher',\n `Scope resolution: bundle=\"${bundleName}\", scope=${scope?.scopedName ?? 'null'}`,\n );\n\n if (!scope) {\n logWarn('ChunkDispatcher', `No scope found for bundle \"${bundleName}\"`);\n return Promise.resolve(undefined);\n }\n\n return loadChunkWithScope(scope, chunkId);\n };\n}\n\n/**\n * Handles Turbopack chunk loading by transforming the chunk code to isolate\n * global variables per bundle and dynamically loading the transformed script.\n * Receives scope directly — no global state lookups needed.\n */\nasync function handleTurbopackChunk(\n code: string,\n scope: RemoteScope,\n url: string,\n): Promise<void> {\n // skip this chunk as it is not needed for remote components\n if (/importScripts\\(\\.\\.\\.self.TURBOPACK_NEXT_CHUNK_URLS/.test(code)) {\n const preloadLinks = document.querySelectorAll(\n `link[rel=\"preload\"][href=\"${new URL(url).pathname}\"]`,\n );\n preloadLinks.forEach((preloadLink) => preloadLink.remove());\n return;\n }\n\n const self = globalThis as GlobalScope;\n const { globalKey } = scope;\n\n // replace global variables with scope-specific ones to prevent collisions\n // between multiple remote component bundles\n const transformedCode = code\n .replace(\n /globalThis\\[\\s*[\"']TURBOPACK[\"']\\s*\\]/g,\n `globalThis[\"TURBOPACK_${globalKey}\"]`,\n )\n .replace(\n /self\\[\\s*[\"']TURBOPACK[\"']\\s*\\]/g,\n `self[\"TURBOPACK_${globalKey}\"]`,\n )\n .replace(/globalThis\\.TURBOPACK/g, `globalThis.TURBOPACK_${globalKey}`)\n .replace(/self\\.TURBOPACK(?!_)/g, `self.TURBOPACK_${globalKey}`)\n .replace(\n /TURBOPACK_WORKER_LOCATION/g,\n `TURBOPACK_WORKER_LOCATION_${globalKey}`,\n )\n .replace(\n /TURBOPACK_NEXT_CHUNK_URLS/g,\n `TURBOPACK_NEXT_CHUNK_URLS_${globalKey}`,\n )\n .replace(/TURBOPACK_CHUNK_LISTS/g, `TURBOPACK_CHUNK_LISTS_${globalKey}`)\n .replace(\n /TURBOPACK_CHUNK_UPDATE_LISTENERS/g,\n `TURBOPACK_CHUNK_UPDATE_LISTENERS_${globalKey}`,\n )\n .replace(/__next_require__/g, `__${globalKey}_next_require__`)\n .replace(\n /\\/\\/# sourceMappingURL=(?<name>.+)(?<optional>\\._)?\\.js\\.map/g,\n `//# sourceMappingURL=${new URL('.', new URL(url, scope.url)).href}$1$2.js.map`,\n );\n\n // Initialize TURBOPACK bundle as a real Array with a push interceptor.\n // Must be a true Array instance so Next.js 15.x turbopack runtimes whose\n // module-system IIFE guards with `Array.isArray(globalThis.TURBOPACK)`\n // don't bail out after we rewrite the global name.\n //\n // The interceptor captures module entries into scope.turbopackModules —\n // a flat array we control. We use Object.defineProperty to intercept\n // when the turbopack runtime replaces the global with a deferred-loading\n // dispatcher (canary builds), wrapping the replacement's push too.\n //\n // The scope is reused across loads of different components from the same\n // remote (see setupRemoteScope), so subsequent loads accumulate into\n // the same turbopackModules array. Chunk cache deduplication means\n // handleTurbopackChunk only runs once per unique chunk URL — all captured\n // modules remain available for any component that needs them.\n if (!self[`TURBOPACK_${globalKey}`]) {\n const wrapPush = <T extends { push?: (...args: unknown[]) => unknown }>(\n target: T,\n ): T => {\n const originalPush = target.push;\n if (typeof originalPush !== 'function') return target;\n target.push = (...items: unknown[]) => {\n for (const item of items) {\n if (Array.isArray(item)) {\n for (const entry of item) {\n scope.turbopackModules.push(entry);\n }\n } else {\n scope.turbopackModules.push(item);\n }\n }\n return originalPush.apply(target, items);\n };\n return target;\n };\n\n const globalProp = `TURBOPACK_${globalKey}`;\n let currentValue: unknown = wrapPush([] as unknown[]);\n Object.defineProperty(self, globalProp, {\n get() {\n return currentValue;\n },\n set(newValue: unknown) {\n // When the turbopack runtime replaces the array with a dispatcher,\n // wrap the new object's push so we keep capturing module entries.\n if (newValue && typeof newValue === 'object') {\n wrapPush(newValue as { push?: (...args: unknown[]) => unknown });\n }\n currentValue = newValue;\n },\n configurable: true,\n enumerable: true,\n });\n }\n\n // load the script dynamically using a Blob URL\n await new Promise<void>((scriptResolve, scriptReject) => {\n const blob = new Blob([transformedCode], {\n type: 'application/javascript; charset=UTF-8',\n });\n const scriptUrl = URL.createObjectURL(blob);\n const script = document.createElement('script');\n script.setAttribute('data-turbopack-src', url);\n script.src = scriptUrl;\n script.async = true;\n script.onload = () => {\n URL.revokeObjectURL(scriptUrl);\n scriptResolve(undefined);\n script.remove();\n };\n script.onerror = () => {\n URL.revokeObjectURL(scriptUrl);\n scriptReject(\n new RemoteComponentsError(\n `Failed to load <script src=\"${script.src}\"> for Remote Component. Check the URL is correct.`,\n ),\n );\n script.remove();\n };\n document.head.appendChild(script);\n });\n\n // process any additional chunks that were registered during script execution\n // These CHUNK_LIST chunks load directly via scope — no global dispatch needed.\n const chunkLists = self[`TURBOPACK_${globalKey}_CHUNK_LISTS`] as\n | { chunks: string[] }[]\n | undefined;\n const loadChunkPromises: (Promise<unknown> | undefined)[] = [];\n while (chunkLists?.length) {\n const { chunks } = chunkLists.shift() ?? { chunks: [] };\n if (chunks.length > 0) {\n for (const id of chunks) {\n const baseUrl = url.slice(0, url.indexOf('/_next'));\n const chunkLoadResult = loadChunkWithScope(\n scope,\n formatRemoteId(scope, `${baseUrl}/_next/${id}`),\n );\n if (chunkLoadResult) {\n loadChunkPromises.push(chunkLoadResult);\n }\n }\n }\n }\n if (loadChunkPromises.length > 0) {\n await Promise.all(loadChunkPromises);\n }\n}\n"],"mappings":"AAAA,SAAS,uBAAuB;AAChC,SAAS,oBAAoB;AAC7B,SAAS,6BAA6B;AAEtC,SAAS,oBAAoB;AAC7B;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,2BAA2B;AACpC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAcA,SAAS,mBACd,OACA,SAC8B;AAC9B;AAAA,IACE;AAAA,IACA,wBAAwB,qBAAqB,MAAM;AAAA,EACrD;AACA,QAAM,OAAO;AACb,QAAM,KAAK,aAAa;AAExB,QAAM,EAAE,QAAQ,MAAM,OAAO,IAAI,cAAc,OAAO;AAGtD,QAAM,gBAAgB,KAAK,6BAA6B,UAAU,SAAS,IACvE,KAAK,2BAA2B,UAAU,SAAS,GAAG,QAAQ,YAC9D,MAAM;AACV,MAAI,kBAAkB,iBAAiB;AACrC,WAAO,QAAQ,QAAQ,MAAS;AAAA,EAClC;AAEA,QAAM,UAAU,OAAO,sBAAsB,GAAG,SAAS,MAAM,IAAI;AACnE,QAAM,MAAM,IAAI,IAAI,SAAS,MAAM,GAAG,EAAE;AAExC,MAAI,IAAI,SAAS,MAAM,GAAG;AACxB;AAAA,EACF;AAEA,MAAI,GAAG,WAAW,GAAG,GAAG;AACtB,aAAS,eAAe,kBAAkB,kBAAkB,OAAO;AACnE,WAAO,GAAG,WAAW,GAAG;AAAA,EAC1B;AAEA,QAAM,cAAc,MAAM,mBAAmB,GAAG,KAAK;AACrD,MAAI,gBAAgB,KAAK;AACvB,aAAS,eAAe,uBAAuB,gBAAW,cAAc;AAAA,EAC1E;AAEA,KAAG,WAAW,GAAG,IAAI,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpD,UAAM,WAAW,EACd,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EACxB,KAAK,CAAC,SAAS;AACd,YAAM,eAAe,oBAAoB,KAAK,IAAI;AAClD,UAAI,cAAc;AAChB,eAAO,qBAAqB,MAAM,OAAO,GAAG;AAAA,MAC9C;AAAA,IAEF,CAAC,EACA,KAAK,OAAO,EACZ,MAAM,CAAC,UAAU;AAChB,YAAM,YAAY,aAAa,WAAW;AAC1C,UAAI,WAAW;AACb,eAAO,wBAAwB,SAAS,KAAK,WAAW,CAAC;AAAA,MAC3D,OAAO;AACL,kCAA0B,eAAe,GAAG;AAC5C,eAAO,KAAK;AAAA,MACd;AAAA,IACF,CAAC;AAAA,EACL,CAAC;AAED,SAAO,GAAG,WAAW,GAAG;AAC1B;AAQO,SAAS,wBAGkB;AAChC,SAAO,SAAS,qBAAqB,SAAiB,cAAuB;AAC3E,aAAS,mBAAmB,uBAAuB,UAAU;AAE7D,UAAM,EAAE,OAAO,IAAI,cAAc,OAAO;AACxC,UAAM,aAAa,UAAU,gBAAgB;AAI7C,UAAM,QAAQ,SAAS,UAAU;AAEjC;AAAA,MACE;AAAA,MACA,6BAA6B,sBAAsB,OAAO,cAAc;AAAA,IAC1E;AAEA,QAAI,CAAC,OAAO;AACV,cAAQ,mBAAmB,8BAA8B,aAAa;AACtE,aAAO,QAAQ,QAAQ,MAAS;AAAA,IAClC;AAEA,WAAO,mBAAmB,OAAO,OAAO;AAAA,EAC1C;AACF;AAOA,eAAe,qBACb,MACA,OACA,KACe;AAEf,MAAI,sDAAsD,KAAK,IAAI,GAAG;AACpE,UAAM,eAAe,SAAS;AAAA,MAC5B,6BAA6B,IAAI,IAAI,GAAG,EAAE;AAAA,IAC5C;AACA,iBAAa,QAAQ,CAAC,gBAAgB,YAAY,OAAO,CAAC;AAC1D;AAAA,EACF;AAEA,QAAM,OAAO;AACb,QAAM,EAAE,UAAU,IAAI;AAItB,QAAM,kBAAkB,KACrB;AAAA,IACC;AAAA,IACA,yBAAyB;AAAA,EAC3B,EACC;AAAA,IACC;AAAA,IACA,mBAAmB;AAAA,EACrB,EACC,QAAQ,0BAA0B,wBAAwB,WAAW,EACrE,QAAQ,yBAAyB,kBAAkB,WAAW,EAC9D;AAAA,IACC;AAAA,IACA,6BAA6B;AAAA,EAC/B,EACC;AAAA,IACC;AAAA,IACA,6BAA6B;AAAA,EAC/B,EACC,QAAQ,0BAA0B,yBAAyB,WAAW,EACtE;AAAA,IACC;AAAA,IACA,oCAAoC;AAAA,EACtC,EACC,QAAQ,qBAAqB,KAAK,0BAA0B,EAC5D;AAAA,IACC;AAAA,IACA,wBAAwB,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,MAAM,GAAG,CAAC,EAAE;AAAA,EAChE;AAiBF,MAAI,CAAC,KAAK,aAAa,WAAW,GAAG;AACnC,UAAM,WAAW,CACf,WACM;AACN,YAAM,eAAe,OAAO;AAC5B,UAAI,OAAO,iBAAiB;AAAY,eAAO;AAC/C,aAAO,OAAO,IAAI,UAAqB;AACrC,mBAAW,QAAQ,OAAO;AACxB,cAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,uBAAW,SAAS,MAAM;AACxB,oBAAM,iBAAiB,KAAK,KAAK;AAAA,YACnC;AAAA,UACF,OAAO;AACL,kBAAM,iBAAiB,KAAK,IAAI;AAAA,UAClC;AAAA,QACF;AACA,eAAO,aAAa,MAAM,QAAQ,KAAK;AAAA,MACzC;AACA,aAAO;AAAA,IACT;AAEA,UAAM,aAAa,aAAa;AAChC,QAAI,eAAwB,SAAS,CAAC,CAAc;AACpD,WAAO,eAAe,MAAM,YAAY;AAAA,MACtC,MAAM;AACJ,eAAO;AAAA,MACT;AAAA,MACA,IAAI,UAAmB;AAGrB,YAAI,YAAY,OAAO,aAAa,UAAU;AAC5C,mBAAS,QAAsD;AAAA,QACjE;AACA,uBAAe;AAAA,MACjB;AAAA,MACA,cAAc;AAAA,MACd,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAGA,QAAM,IAAI,QAAc,CAAC,eAAe,iBAAiB;AACvD,UAAM,OAAO,IAAI,KAAK,CAAC,eAAe,GAAG;AAAA,MACvC,MAAM;AAAA,IACR,CAAC;AACD,UAAM,YAAY,IAAI,gBAAgB,IAAI;AAC1C,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,aAAa,sBAAsB,GAAG;AAC7C,WAAO,MAAM;AACb,WAAO,QAAQ;AACf,WAAO,SAAS,MAAM;AACpB,UAAI,gBAAgB,SAAS;AAC7B,oBAAc,MAAS;AACvB,aAAO,OAAO;AAAA,IAChB;AACA,WAAO,UAAU,MAAM;AACrB,UAAI,gBAAgB,SAAS;AAC7B;AAAA,QACE,IAAI;AAAA,UACF,+BAA+B,OAAO;AAAA,QACxC;AAAA,MACF;AACA,aAAO,OAAO;AAAA,IAChB;AACA,aAAS,KAAK,YAAY,MAAM;AAAA,EAClC,CAAC;AAID,QAAM,aAAa,KAAK,aAAa,uBAAuB;AAG5D,QAAM,oBAAsD,CAAC;AAC7D,SAAO,YAAY,QAAQ;AACzB,UAAM,EAAE,OAAO,IAAI,WAAW,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE;AACtD,QAAI,OAAO,SAAS,GAAG;AACrB,iBAAW,MAAM,QAAQ;AACvB,cAAM,UAAU,IAAI,MAAM,GAAG,IAAI,QAAQ,QAAQ,CAAC;AAClD,cAAM,kBAAkB;AAAA,UACtB;AAAA,UACA,eAAe,OAAO,GAAG,iBAAiB,IAAI;AAAA,QAChD;AACA,YAAI,iBAAiB;AACnB,4BAAkB,KAAK,eAAe;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,MAAI,kBAAkB,SAAS,GAAG;AAChC,UAAM,QAAQ,IAAI,iBAAiB;AAAA,EACrC;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/runtime/turbopack/chunk-loader.ts"],"sourcesContent":["import { RUNTIME_WEBPACK } from '#internal/runtime/constants';\nimport { getNamespace } from '#internal/runtime/namespace';\nimport { collapseDoubleSlashes } from '#internal/runtime/patterns';\nimport type { GlobalScope } from '#internal/runtime/types';\nimport { isProxiedUrl } from '#internal/runtime/url/protected-rc-fallback';\nimport {\n failedProxiedAssetError,\n RemoteComponentsError,\n} from '#internal/utils/error';\nimport {\n logDebug,\n logWarn,\n warnCrossOriginFetchError,\n} from '#internal/utils/logger';\nimport { TURBOPACK_GLOBAL_RE } from './patterns';\nimport {\n formatRemoteId,\n getScope,\n parseRemoteId,\n type RemoteScope,\n} from './remote-scope';\n\n/**\n * Loads a chunk using a specific scope. All state (base URL, proxy callback,\n * TURBOPACK global key) comes from the scope — no global lookups needed.\n *\n * This is the primary chunk loader called directly from:\n * - setupRemoteScope (initial chunks)\n * - TurbopackContext.l (module-level chunk loading)\n * - handleTurbopackChunk (CHUNK_LIST additional chunks)\n *\n * The global chunk dedup cache is keyed by absolute URL, so different origins\n * naturally get separate cache entries even when sharing a bundle name.\n */\nexport function loadChunkWithScope(\n scope: RemoteScope,\n chunkId: string,\n): Promise<unknown> | undefined {\n logDebug(\n 'ChunkLoader',\n `loadChunkWithScope: \"${chunkId}\" (scope: \"${scope.scopedName}\")`,\n );\n const self = globalThis as GlobalScope;\n const ns = getNamespace();\n\n const { bundle, path, prefix } = parseRemoteId(chunkId);\n\n // Skip webpack runtime chunks\n const remoteRuntime = self.__remote_webpack_require__?.[bundle ?? 'default']\n ? self.__remote_webpack_require__[bundle ?? 'default']?.type || 'webpack'\n : scope.runtime;\n if (remoteRuntime === RUNTIME_WEBPACK) {\n return Promise.resolve(undefined);\n }\n\n const rawPath = path ? collapseDoubleSlashes(`${prefix}${path}`) : '/';\n const url = new URL(rawPath, scope.url).href;\n\n if (url.endsWith('.css')) {\n return;\n }\n\n if (ns.chunkCache[url]) {\n logDebug('ChunkLoader', `Cache hit for \"${chunkId}\" (url=\"${url}\")`);\n return ns.chunkCache[url];\n }\n\n const resolvedUrl = scope.resolveClientUrl?.(url) ?? url;\n if (resolvedUrl !== url) {\n logDebug('ChunkLoader', `Proxied chunk URL: \"${url}\" → \"${resolvedUrl}\"`);\n }\n\n ns.chunkCache[url] = new Promise((resolve, reject) => {\n fetch(resolvedUrl)\n .then((res) => res.text())\n .then((code) => {\n // Worker chunks reference self.TURBOPACK_NEXT_CHUNK_URLS and must be\n // skipped before Turbopack detection — they are not loadable as scripts.\n // Check this first so the detection below doesn't need to account for it.\n if (/importScripts\\(\\.\\.\\.self\\.TURBOPACK_NEXT_CHUNK_URLS/.test(code)) {\n const preloadLinks = document.querySelectorAll(\n `link[rel=\"preload\"][href=\"${new URL(url).pathname}\"]`,\n );\n preloadLinks.forEach((preloadLink) => preloadLink.remove());\n return;\n }\n\n const hasTurbopackLegacyGlobal = TURBOPACK_GLOBAL_RE.test(code);\n // When chunkLoadingGlobal is configured at build time, chunks use the\n // custom scoped name instead of the shared TURBOPACK global, so\n // TURBOPACK_GLOBAL_RE won't match — detect via the custom name instead.\n // The config sets \"TURBOPACK_remote_chunk_loading_global_<name>\" which\n // Next.js leaves unchanged (it only auto-prefixes values that don't\n // already start with \"TURBOPACK_\"). Chunks emit bracket notation:\n // globalThis[\"TURBOPACK_remote_chunk_loading_global_<name>\"].\n const customGlobalProp = `TURBOPACK_remote_chunk_loading_global_${scope.name}`;\n const hasCustomGlobal = code.includes(customGlobalProp);\n const isTurbopackChunk = hasTurbopackLegacyGlobal || hasCustomGlobal;\n if (isTurbopackChunk) {\n logDebug(\n 'ChunkLoader',\n hasCustomGlobal && !hasTurbopackLegacyGlobal\n ? `Chunk \"${url}\" uses build-time chunkLoadingGlobal \"${customGlobalProp}\" — skipping runtime TURBOPACK rename.`\n : `Chunk \"${url}\" uses legacy globalThis.TURBOPACK — applying runtime rename for scope \"${scope.scopedName}\".`,\n );\n return handleTurbopackChunk(\n code,\n scope,\n url,\n hasTurbopackLegacyGlobal,\n );\n }\n // Chunk doesn't contain Turbopack globals — nothing to process\n })\n .then(resolve)\n .catch((error) => {\n const isProxied = isProxiedUrl(resolvedUrl);\n if (isProxied) {\n reject(failedProxiedAssetError('chunk', url, resolvedUrl));\n } else {\n warnCrossOriginFetchError('ChunkLoader', url);\n reject(error);\n }\n });\n });\n\n return ns.chunkCache[url];\n}\n\n/**\n * Creates the global `__webpack_chunk_load__` dispatcher.\n * This is a thin wrapper called only by external code (React's RSC runtime).\n * It parses the chunkId, resolves the correct scope, and delegates to\n * `loadChunkWithScope`.\n */\nexport function createChunkDispatcher(): (\n chunkId: string,\n scriptBundle?: string,\n) => Promise<unknown> | undefined {\n return function __chunk_dispatcher__(chunkId: string, scriptBundle?: string) {\n logDebug('ChunkDispatcher', `Dispatching chunk: \"${chunkId}\"`);\n\n const { bundle } = parseRemoteId(chunkId);\n const bundleName = bundle || scriptBundle || 'default';\n\n // Works with both the scoped name (Next.js hosts with server-side\n // rewriting) and the plain bundle name (static/HTML hosts).\n const scope = getScope(bundleName);\n\n logDebug(\n 'ChunkDispatcher',\n `Scope resolution: bundle=\"${bundleName}\", scope=${scope?.scopedName ?? 'null'}`,\n );\n\n if (!scope) {\n logWarn('ChunkDispatcher', `No scope found for bundle \"${bundleName}\"`);\n return Promise.resolve(undefined);\n }\n\n return loadChunkWithScope(scope, chunkId);\n };\n}\n\n/**\n * Handles Turbopack chunk loading by transforming the chunk code to isolate\n * global variables per bundle and dynamically loading the transformed script.\n * Receives scope directly — no global state lookups needed.\n *\n * `renameTurbopackGlobal` is true when chunks use the shared\n * `globalThis.TURBOPACK` name and must be renamed at runtime. When\n * `chunkLoadingGlobal` is configured at build time, chunks already use a\n * unique scoped name so those renames are skipped — only the remaining\n * hardcoded globals (WORKER_LOCATION, NEXT_CHUNK_URLS, CHUNK_UPDATE_LISTENERS,\n * etc.) still need renaming.\n */\nasync function handleTurbopackChunk(\n code: string,\n scope: RemoteScope,\n url: string,\n renameTurbopackGlobal: boolean,\n): Promise<void> {\n const self = globalThis as GlobalScope;\n const { globalKey, name } = scope;\n\n // When chunkLoadingGlobal is configured at build time, chunks already use a\n // unique name — no runtime rename needed for those four patterns. Otherwise\n // the shared globalThis.TURBOPACK must be renamed here.\n // For new-style chunks the prop matches exactly what config sets:\n // \"TURBOPACK_remote_chunk_loading_global_<name>\".\n const globalProp = renameTurbopackGlobal\n ? `TURBOPACK_${globalKey}`\n : `TURBOPACK_remote_chunk_loading_global_${name}`;\n\n let transformedCode = code;\n if (renameTurbopackGlobal) {\n // Legacy chunks use the shared globalThis.TURBOPACK name. Rename it and\n // the CHUNK_LISTS global (which Turbopack derives as \"{global}_CHUNK_LISTS\")\n // to per-scope names so multiple remotes don't collide.\n transformedCode = transformedCode\n .replace(\n /globalThis\\[\\s*[\"']TURBOPACK[\"']\\s*\\]/g,\n `globalThis[\"TURBOPACK_${globalKey}\"]`,\n )\n .replace(\n /self\\[\\s*[\"']TURBOPACK[\"']\\s*\\]/g,\n `self[\"TURBOPACK_${globalKey}\"]`,\n )\n .replace(/globalThis\\.TURBOPACK/g, `globalThis.TURBOPACK_${globalKey}`)\n .replace(/self\\.TURBOPACK(?!_)/g, `self.TURBOPACK_${globalKey}`)\n .replace(/TURBOPACK_CHUNK_LISTS/g, `TURBOPACK_${globalKey}_CHUNK_LISTS`);\n }\n // These globals are hardcoded in the Turbopack runtime JS (not derived from\n // chunkLoadingGlobal) so they need renaming for both legacy and new-style chunks.\n transformedCode = transformedCode\n .replace(\n /TURBOPACK_WORKER_LOCATION/g,\n `TURBOPACK_WORKER_LOCATION_${globalKey}`,\n )\n .replace(\n /TURBOPACK_NEXT_CHUNK_URLS/g,\n `TURBOPACK_NEXT_CHUNK_URLS_${globalKey}`,\n )\n .replace(\n /TURBOPACK_CHUNK_UPDATE_LISTENERS/g,\n `TURBOPACK_CHUNK_UPDATE_LISTENERS_${globalKey}`,\n )\n .replace(/__next_require__/g, `__${globalKey}_next_require__`)\n .replace(\n /\\/\\/# sourceMappingURL=(?<name>.+)(?<optional>\\._)?\\.js\\.map/g,\n `//# sourceMappingURL=${new URL('.', new URL(url, scope.url)).href}$1$2.js.map`,\n );\n\n // Initialize TURBOPACK bundle as a real Array with a push interceptor.\n // Must be a true Array instance so Next.js 15.x turbopack runtimes whose\n // module-system IIFE guards with `Array.isArray(globalThis.TURBOPACK)`\n // don't bail out after we rewrite the global name.\n //\n // The interceptor captures module entries into scope.turbopackModules —\n // a flat array we control. We use Object.defineProperty to intercept\n // when the turbopack runtime replaces the global with a deferred-loading\n // dispatcher (canary builds), wrapping the replacement's push too.\n //\n // The scope is reused across loads of different components from the same\n // remote (see setupRemoteScope), so subsequent loads accumulate into\n // the same turbopackModules array. Chunk cache deduplication means\n // handleTurbopackChunk only runs once per unique chunk URL — all captured\n // modules remain available for any component that needs them.\n if (!self[globalProp]) {\n const wrapPush = <T extends { push?: (...args: unknown[]) => unknown }>(\n target: T,\n ): T => {\n const originalPush = target.push;\n if (typeof originalPush !== 'function') return target;\n target.push = (...items: unknown[]) => {\n for (const item of items) {\n if (Array.isArray(item)) {\n for (const entry of item) {\n scope.turbopackModules.push(entry);\n }\n } else {\n scope.turbopackModules.push(item);\n }\n }\n return originalPush.apply(target, items);\n };\n return target;\n };\n\n let currentValue: unknown = wrapPush([] as unknown[]);\n Object.defineProperty(self, globalProp, {\n get() {\n return currentValue;\n },\n set(newValue: unknown) {\n // When the turbopack runtime replaces the array with a dispatcher,\n // wrap the new object's push so we keep capturing module entries.\n if (newValue && typeof newValue === 'object') {\n wrapPush(newValue as { push?: (...args: unknown[]) => unknown });\n }\n currentValue = newValue;\n },\n configurable: true,\n enumerable: true,\n });\n }\n\n // load the script dynamically using a Blob URL\n await new Promise<void>((scriptResolve, scriptReject) => {\n const blob = new Blob([transformedCode], {\n type: 'application/javascript; charset=UTF-8',\n });\n const scriptUrl = URL.createObjectURL(blob);\n const script = document.createElement('script');\n script.setAttribute('data-turbopack-src', url);\n script.src = scriptUrl;\n script.async = true;\n script.onload = () => {\n URL.revokeObjectURL(scriptUrl);\n scriptResolve(undefined);\n script.remove();\n };\n script.onerror = () => {\n URL.revokeObjectURL(scriptUrl);\n scriptReject(\n new RemoteComponentsError(\n `Failed to load <script src=\"${script.src}\"> for Remote Component. Check the URL is correct.`,\n ),\n );\n script.remove();\n };\n document.head.appendChild(script);\n });\n\n // process any additional chunks that were registered during script execution\n // These CHUNK_LIST chunks load directly via scope — no global dispatch needed.\n // For new-style chunks the list global is \"${globalProp}_CHUNK_LISTS\"; for\n // legacy it was renamed to \"TURBOPACK_${globalKey}_CHUNK_LISTS\" by the\n // transform above. Both cases are covered by reading from \"${globalProp}_CHUNK_LISTS\".\n const chunkLists = self[`${globalProp}_CHUNK_LISTS`] as\n | { chunks: string[] }[]\n | undefined;\n const loadChunkPromises: (Promise<unknown> | undefined)[] = [];\n while (chunkLists?.length) {\n const { chunks } = chunkLists.shift() ?? { chunks: [] };\n if (chunks.length > 0) {\n for (const id of chunks) {\n const baseUrl = url.slice(0, url.indexOf('/_next'));\n const chunkLoadResult = loadChunkWithScope(\n scope,\n formatRemoteId(scope, `${baseUrl}/_next/${id}`),\n );\n if (chunkLoadResult) {\n loadChunkPromises.push(chunkLoadResult);\n }\n }\n }\n }\n if (loadChunkPromises.length > 0) {\n await Promise.all(loadChunkPromises);\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -56,7 +56,7 @@ const ASYNC_MODULE_LOADER_RE = new RegExp(
|
|
|
56
56
|
const ASYNC_MODULE_CALLBACK_RE = new RegExp(
|
|
57
57
|
`(?:parentImport|[a-z])\\((?<sharedModuleId>${MODULE_ID_PATTERN})\\)`
|
|
58
58
|
);
|
|
59
|
-
const TURBOPACK_GLOBAL_RE = /(?:globalThis|self)\s*(?:\.TURBOPACK|\[\s*["']TURBOPACK["']\s*\])/;
|
|
59
|
+
const TURBOPACK_GLOBAL_RE = /(?:globalThis|self)\s*(?:\.TURBOPACK(?![_\w])|\[\s*["']TURBOPACK["']\s*\])/;
|
|
60
60
|
// Annotate the CommonJS export names for ESM import in node:
|
|
61
61
|
0 && (module.exports = {
|
|
62
62
|
ASYNC_MODULE_CALLBACK_RE,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/runtime/turbopack/patterns.ts"],"sourcesContent":["/**\n * Regex patterns for parsing Turbopack's minified and development code.\n *\n * Turbopack outputs different variable names in dev vs production builds:\n * - Development: __turbopack_context__, parentImport, chunk, self\n * - Minified: e, t, etc.\n *\n * Module IDs are numeric in Next.js 16+ (e.g. `984803`) but full string paths in\n * Next.js 15.x dev mode (e.g. `\"[project]/.../react/index.js [app-client] (ecmascript)\"`).\n * ID-capturing patterns match `\"quoted string\"|digits` via the shared\n * `MODULE_ID_PATTERN` fragment. Use `extractGroup()` to both match and strip quotes\n * in one step.\n */\n\n/**\n * Reusable fragment that matches a turbopack module ID: either a\n * quoted string, a plain integer, or an integer in scientific notation\n * (e.g. `35e3`, which production minifiers emit for `35000`).\n */\nconst MODULE_ID_PATTERN = '\"[^\"]+\"|[0-9]+e[0-9]+|[0-9]+';\n\n/** Strips surrounding double-quotes from a captured regex value. */\nfunction stripQuotes(value: string): string {\n if (value.startsWith('\"') && value.endsWith('\"')) {\n return value.slice(1, -1);\n }\n return value;\n}\n\n/**\n * Normalizes a captured module ID. Production minifiers may emit numeric\n * IDs in scientific notation (e.g. `35e3`) but the runtime registers them\n * under their canonical integer form (`35000`), so we canonicalize here\n * before any lookups.\n */\nexport function normalizeModuleId(value: string): string {\n if (/^[0-9]+e[0-9]+$/.test(value)) {\n return String(Number(value));\n }\n return value;\n}\n\n/**\n * Runs a regex against `input` and returns the named capture group with\n * quotes stripped and numeric IDs normalized, or `undefined` if there's\n * no match.\n */\nexport function extractGroup(\n re: RegExp,\n input: string,\n group: string,\n): string | undefined {\n const raw = re.exec(input)?.groups?.[group];\n if (!raw) return undefined;\n return normalizeModuleId(stripQuotes(raw));\n}\n\n/**\n * Matches: self.TURBOPACK_REMOTE_SHARED or e.TURBOPACK_REMOTE_SHARED\n *\n * @example\n * // Development:\n * \"self.TURBOPACK_REMOTE_SHARED=await __turbopack_context__.A(984803)\"\n *\n * // Minified:\n * \"e.TURBOPACK_REMOTE_SHARED=await e.A(984803)\"\n */\nexport const REMOTE_SHARED_MARKER_RE =\n /(?:self|[a-z])\\.TURBOPACK_REMOTE_SHARED/;\n\n/**\n * Extracts the module ID from a TURBOPACK_REMOTE_SHARED assignment.\n *\n * Captures:\n * - `sharedModuleId`: The module ID (may be quoted for string paths).\n *\n * @example\n * // Next.js 16:\n * \"self.TURBOPACK_REMOTE_SHARED=await __turbopack_context__.A(984803)\"\n * // -> sharedModuleId = \"984803\"\n *\n * // Next.js 15.x (string IDs, spaces around `=`):\n * 'self.TURBOPACK_REMOTE_SHARED = await __turbopack_context__.A(\"[project]/...app-remote.tsx [app-client] (ecmascript, async loader)\")'\n * // -> sharedModuleId = \"[project]/...app-remote.tsx [app-client] (ecmascript, async loader)\"\n *\n * // Minified:\n * \"t.TURBOPACK_REMOTE_SHARED=await e.A(123456)\"\n * // -> sharedModuleId = \"123456\"\n */\nexport const REMOTE_SHARED_ASSIGNMENT_RE = new RegExp(\n `\\\\.TURBOPACK_REMOTE_SHARED\\\\s*=\\\\s*await (?:__turbopack_context__|[a-z])\\\\.A\\\\((?<sharedModuleId>${MODULE_ID_PATTERN})\\\\)`,\n);\n\n/**\n * Matches async module loader calls: ctx.A(moduleId)\n *\n * Captures:\n * - `asyncSharedModuleId`: The module ID (may be quoted).\n *\n * @example\n * // Next.js 16:\n * \"() => __turbopack_context__.A(460400)\"\n * // -> asyncSharedModuleId = \"460400\"\n *\n * // Next.js 15.x:\n * '() => __turbopack_context__.A(\"[project]/.../react/index.js [app-client] (ecmascript, async loader)\")'\n * // -> asyncSharedModuleId = \"[project]/.../react/index.js [app-client] (ecmascript, async loader)\"\n *\n * // Minified:\n * \"() => e.A(460400)\"\n * // -> asyncSharedModuleId = \"460400\"\n */\nexport const ASYNC_MODULE_LOADER_RE = new RegExp(\n `(?:__turbopack_context__|[a-z])\\\\.A\\\\((?<asyncSharedModuleId>${MODULE_ID_PATTERN})\\\\)`,\n);\n\n/**\n * Extracts the final module ID from an async module `.v()` callback.\n * The callback always ends by calling its argument (parentImport / single-letter\n * variable) with the real module ID. This matches that final call regardless of\n * surrounding structure (whitespace, `return` statements, block vs expression bodies).\n *\n * Handles both Promise.resolve (no extra chunks) and Promise.all (with chunks).\n *\n * Captures:\n * - `sharedModuleId`: The module ID (may be quoted).\n *\n * @example\n * // Next.js 16 minified (Promise.resolve):\n * \"e=>{e.v(e=>Promise.resolve().then(()=>e(633334)))}\"\n * // -> sharedModuleId = \"633334\"\n *\n * // Next.js 16 minified (Promise.all):\n * \"e=>{e.v(t=>Promise.all([\\\"chunk.js\\\"].map(t=>e.l(t))).then(()=>t(633334)))}\"\n * // -> sharedModuleId = \"633334\"\n *\n * // Next.js 15.x development (multi-line):\n * '(__turbopack_context__) => {\\n__turbopack_context__.v((parentImport) => {\\n return Promise.resolve().then(() => {\\n return parentImport(\"[project]/.../react/index.js [app-client] (ecmascript)\");\\n });\\n});\\n}'\n * // -> sharedModuleId = \"[project]/.../react/index.js [app-client] (ecmascript)\"\n */\nexport const ASYNC_MODULE_CALLBACK_RE = new RegExp(\n `(?:parentImport|[a-z])\\\\((?<sharedModuleId>${MODULE_ID_PATTERN})\\\\)`,\n);\n\n/**\n * Detects Turbopack runtime global usage in a chunk.\n *\n * Matches either dot-notation or bracket-notation access off `globalThis` or `self`:\n * - globalThis.TURBOPACK / self.TURBOPACK\n * - globalThis[\"TURBOPACK\"] / self['TURBOPACK'] (whitespace tolerated)\n */\nexport const TURBOPACK_GLOBAL_RE =\n /(?:globalThis|self)\\s*(?:\\.TURBOPACK|\\[\\s*[\"']TURBOPACK[\"']\\s*\\])/;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBA,MAAM,oBAAoB;AAG1B,SAAS,YAAY,OAAuB;AAC1C,MAAI,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,GAAG;AAChD,WAAO,MAAM,MAAM,GAAG,EAAE;AAAA,EAC1B;AACA,SAAO;AACT;AAQO,SAAS,kBAAkB,OAAuB;AACvD,MAAI,kBAAkB,KAAK,KAAK,GAAG;AACjC,WAAO,OAAO,OAAO,KAAK,CAAC;AAAA,EAC7B;AACA,SAAO;AACT;AAOO,SAAS,aACd,IACA,OACA,OACoB;AACpB,QAAM,MAAM,GAAG,KAAK,KAAK,GAAG,SAAS,KAAK;AAC1C,MAAI,CAAC;AAAK,WAAO;AACjB,SAAO,kBAAkB,YAAY,GAAG,CAAC;AAC3C;AAYO,MAAM,0BACX;AAqBK,MAAM,8BAA8B,IAAI;AAAA,EAC7C,oGAAoG;AACtG;AAqBO,MAAM,yBAAyB,IAAI;AAAA,EACxC,gEAAgE;AAClE;AA0BO,MAAM,2BAA2B,IAAI;AAAA,EAC1C,8CAA8C;AAChD;AASO,MAAM,sBACX;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/runtime/turbopack/patterns.ts"],"sourcesContent":["/**\n * Regex patterns for parsing Turbopack's minified and development code.\n *\n * Turbopack outputs different variable names in dev vs production builds:\n * - Development: __turbopack_context__, parentImport, chunk, self\n * - Minified: e, t, etc.\n *\n * Module IDs are numeric in Next.js 16+ (e.g. `984803`) but full string paths in\n * Next.js 15.x dev mode (e.g. `\"[project]/.../react/index.js [app-client] (ecmascript)\"`).\n * ID-capturing patterns match `\"quoted string\"|digits` via the shared\n * `MODULE_ID_PATTERN` fragment. Use `extractGroup()` to both match and strip quotes\n * in one step.\n */\n\n/**\n * Reusable fragment that matches a turbopack module ID: either a\n * quoted string, a plain integer, or an integer in scientific notation\n * (e.g. `35e3`, which production minifiers emit for `35000`).\n */\nconst MODULE_ID_PATTERN = '\"[^\"]+\"|[0-9]+e[0-9]+|[0-9]+';\n\n/** Strips surrounding double-quotes from a captured regex value. */\nfunction stripQuotes(value: string): string {\n if (value.startsWith('\"') && value.endsWith('\"')) {\n return value.slice(1, -1);\n }\n return value;\n}\n\n/**\n * Normalizes a captured module ID. Production minifiers may emit numeric\n * IDs in scientific notation (e.g. `35e3`) but the runtime registers them\n * under their canonical integer form (`35000`), so we canonicalize here\n * before any lookups.\n */\nexport function normalizeModuleId(value: string): string {\n if (/^[0-9]+e[0-9]+$/.test(value)) {\n return String(Number(value));\n }\n return value;\n}\n\n/**\n * Runs a regex against `input` and returns the named capture group with\n * quotes stripped and numeric IDs normalized, or `undefined` if there's\n * no match.\n */\nexport function extractGroup(\n re: RegExp,\n input: string,\n group: string,\n): string | undefined {\n const raw = re.exec(input)?.groups?.[group];\n if (!raw) return undefined;\n return normalizeModuleId(stripQuotes(raw));\n}\n\n/**\n * Matches: self.TURBOPACK_REMOTE_SHARED or e.TURBOPACK_REMOTE_SHARED\n *\n * @example\n * // Development:\n * \"self.TURBOPACK_REMOTE_SHARED=await __turbopack_context__.A(984803)\"\n *\n * // Minified:\n * \"e.TURBOPACK_REMOTE_SHARED=await e.A(984803)\"\n */\nexport const REMOTE_SHARED_MARKER_RE =\n /(?:self|[a-z])\\.TURBOPACK_REMOTE_SHARED/;\n\n/**\n * Extracts the module ID from a TURBOPACK_REMOTE_SHARED assignment.\n *\n * Captures:\n * - `sharedModuleId`: The module ID (may be quoted for string paths).\n *\n * @example\n * // Next.js 16:\n * \"self.TURBOPACK_REMOTE_SHARED=await __turbopack_context__.A(984803)\"\n * // -> sharedModuleId = \"984803\"\n *\n * // Next.js 15.x (string IDs, spaces around `=`):\n * 'self.TURBOPACK_REMOTE_SHARED = await __turbopack_context__.A(\"[project]/...app-remote.tsx [app-client] (ecmascript, async loader)\")'\n * // -> sharedModuleId = \"[project]/...app-remote.tsx [app-client] (ecmascript, async loader)\"\n *\n * // Minified:\n * \"t.TURBOPACK_REMOTE_SHARED=await e.A(123456)\"\n * // -> sharedModuleId = \"123456\"\n */\nexport const REMOTE_SHARED_ASSIGNMENT_RE = new RegExp(\n `\\\\.TURBOPACK_REMOTE_SHARED\\\\s*=\\\\s*await (?:__turbopack_context__|[a-z])\\\\.A\\\\((?<sharedModuleId>${MODULE_ID_PATTERN})\\\\)`,\n);\n\n/**\n * Matches async module loader calls: ctx.A(moduleId)\n *\n * Captures:\n * - `asyncSharedModuleId`: The module ID (may be quoted).\n *\n * @example\n * // Next.js 16:\n * \"() => __turbopack_context__.A(460400)\"\n * // -> asyncSharedModuleId = \"460400\"\n *\n * // Next.js 15.x:\n * '() => __turbopack_context__.A(\"[project]/.../react/index.js [app-client] (ecmascript, async loader)\")'\n * // -> asyncSharedModuleId = \"[project]/.../react/index.js [app-client] (ecmascript, async loader)\"\n *\n * // Minified:\n * \"() => e.A(460400)\"\n * // -> asyncSharedModuleId = \"460400\"\n */\nexport const ASYNC_MODULE_LOADER_RE = new RegExp(\n `(?:__turbopack_context__|[a-z])\\\\.A\\\\((?<asyncSharedModuleId>${MODULE_ID_PATTERN})\\\\)`,\n);\n\n/**\n * Extracts the final module ID from an async module `.v()` callback.\n * The callback always ends by calling its argument (parentImport / single-letter\n * variable) with the real module ID. This matches that final call regardless of\n * surrounding structure (whitespace, `return` statements, block vs expression bodies).\n *\n * Handles both Promise.resolve (no extra chunks) and Promise.all (with chunks).\n *\n * Captures:\n * - `sharedModuleId`: The module ID (may be quoted).\n *\n * @example\n * // Next.js 16 minified (Promise.resolve):\n * \"e=>{e.v(e=>Promise.resolve().then(()=>e(633334)))}\"\n * // -> sharedModuleId = \"633334\"\n *\n * // Next.js 16 minified (Promise.all):\n * \"e=>{e.v(t=>Promise.all([\\\"chunk.js\\\"].map(t=>e.l(t))).then(()=>t(633334)))}\"\n * // -> sharedModuleId = \"633334\"\n *\n * // Next.js 15.x development (multi-line):\n * '(__turbopack_context__) => {\\n__turbopack_context__.v((parentImport) => {\\n return Promise.resolve().then(() => {\\n return parentImport(\"[project]/.../react/index.js [app-client] (ecmascript)\");\\n });\\n});\\n}'\n * // -> sharedModuleId = \"[project]/.../react/index.js [app-client] (ecmascript)\"\n */\nexport const ASYNC_MODULE_CALLBACK_RE = new RegExp(\n `(?:parentImport|[a-z])\\\\((?<sharedModuleId>${MODULE_ID_PATTERN})\\\\)`,\n);\n\n/**\n * Detects Turbopack runtime global usage in a chunk.\n *\n * Matches either dot-notation or bracket-notation access off `globalThis` or `self`:\n * - globalThis.TURBOPACK / self.TURBOPACK\n * - globalThis[\"TURBOPACK\"] / self['TURBOPACK'] (whitespace tolerated)\n */\nexport const TURBOPACK_GLOBAL_RE =\n /(?:globalThis|self)\\s*(?:\\.TURBOPACK(?![_\\w])|\\[\\s*[\"']TURBOPACK[\"']\\s*\\])/;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBA,MAAM,oBAAoB;AAG1B,SAAS,YAAY,OAAuB;AAC1C,MAAI,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,GAAG;AAChD,WAAO,MAAM,MAAM,GAAG,EAAE;AAAA,EAC1B;AACA,SAAO;AACT;AAQO,SAAS,kBAAkB,OAAuB;AACvD,MAAI,kBAAkB,KAAK,KAAK,GAAG;AACjC,WAAO,OAAO,OAAO,KAAK,CAAC;AAAA,EAC7B;AACA,SAAO;AACT;AAOO,SAAS,aACd,IACA,OACA,OACoB;AACpB,QAAM,MAAM,GAAG,KAAK,KAAK,GAAG,SAAS,KAAK;AAC1C,MAAI,CAAC;AAAK,WAAO;AACjB,SAAO,kBAAkB,YAAY,GAAG,CAAC;AAC3C;AAYO,MAAM,0BACX;AAqBK,MAAM,8BAA8B,IAAI;AAAA,EAC7C,oGAAoG;AACtG;AAqBO,MAAM,yBAAyB,IAAI;AAAA,EACxC,gEAAgE;AAClE;AA0BO,MAAM,2BAA2B,IAAI;AAAA,EAC1C,8CAA8C;AAChD;AASO,MAAM,sBACX;","names":[]}
|
|
@@ -27,7 +27,7 @@ const ASYNC_MODULE_LOADER_RE = new RegExp(
|
|
|
27
27
|
const ASYNC_MODULE_CALLBACK_RE = new RegExp(
|
|
28
28
|
`(?:parentImport|[a-z])\\((?<sharedModuleId>${MODULE_ID_PATTERN})\\)`
|
|
29
29
|
);
|
|
30
|
-
const TURBOPACK_GLOBAL_RE = /(?:globalThis|self)\s*(?:\.TURBOPACK|\[\s*["']TURBOPACK["']\s*\])/;
|
|
30
|
+
const TURBOPACK_GLOBAL_RE = /(?:globalThis|self)\s*(?:\.TURBOPACK(?![_\w])|\[\s*["']TURBOPACK["']\s*\])/;
|
|
31
31
|
export {
|
|
32
32
|
ASYNC_MODULE_CALLBACK_RE,
|
|
33
33
|
ASYNC_MODULE_LOADER_RE,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/runtime/turbopack/patterns.ts"],"sourcesContent":["/**\n * Regex patterns for parsing Turbopack's minified and development code.\n *\n * Turbopack outputs different variable names in dev vs production builds:\n * - Development: __turbopack_context__, parentImport, chunk, self\n * - Minified: e, t, etc.\n *\n * Module IDs are numeric in Next.js 16+ (e.g. `984803`) but full string paths in\n * Next.js 15.x dev mode (e.g. `\"[project]/.../react/index.js [app-client] (ecmascript)\"`).\n * ID-capturing patterns match `\"quoted string\"|digits` via the shared\n * `MODULE_ID_PATTERN` fragment. Use `extractGroup()` to both match and strip quotes\n * in one step.\n */\n\n/**\n * Reusable fragment that matches a turbopack module ID: either a\n * quoted string, a plain integer, or an integer in scientific notation\n * (e.g. `35e3`, which production minifiers emit for `35000`).\n */\nconst MODULE_ID_PATTERN = '\"[^\"]+\"|[0-9]+e[0-9]+|[0-9]+';\n\n/** Strips surrounding double-quotes from a captured regex value. */\nfunction stripQuotes(value: string): string {\n if (value.startsWith('\"') && value.endsWith('\"')) {\n return value.slice(1, -1);\n }\n return value;\n}\n\n/**\n * Normalizes a captured module ID. Production minifiers may emit numeric\n * IDs in scientific notation (e.g. `35e3`) but the runtime registers them\n * under their canonical integer form (`35000`), so we canonicalize here\n * before any lookups.\n */\nexport function normalizeModuleId(value: string): string {\n if (/^[0-9]+e[0-9]+$/.test(value)) {\n return String(Number(value));\n }\n return value;\n}\n\n/**\n * Runs a regex against `input` and returns the named capture group with\n * quotes stripped and numeric IDs normalized, or `undefined` if there's\n * no match.\n */\nexport function extractGroup(\n re: RegExp,\n input: string,\n group: string,\n): string | undefined {\n const raw = re.exec(input)?.groups?.[group];\n if (!raw) return undefined;\n return normalizeModuleId(stripQuotes(raw));\n}\n\n/**\n * Matches: self.TURBOPACK_REMOTE_SHARED or e.TURBOPACK_REMOTE_SHARED\n *\n * @example\n * // Development:\n * \"self.TURBOPACK_REMOTE_SHARED=await __turbopack_context__.A(984803)\"\n *\n * // Minified:\n * \"e.TURBOPACK_REMOTE_SHARED=await e.A(984803)\"\n */\nexport const REMOTE_SHARED_MARKER_RE =\n /(?:self|[a-z])\\.TURBOPACK_REMOTE_SHARED/;\n\n/**\n * Extracts the module ID from a TURBOPACK_REMOTE_SHARED assignment.\n *\n * Captures:\n * - `sharedModuleId`: The module ID (may be quoted for string paths).\n *\n * @example\n * // Next.js 16:\n * \"self.TURBOPACK_REMOTE_SHARED=await __turbopack_context__.A(984803)\"\n * // -> sharedModuleId = \"984803\"\n *\n * // Next.js 15.x (string IDs, spaces around `=`):\n * 'self.TURBOPACK_REMOTE_SHARED = await __turbopack_context__.A(\"[project]/...app-remote.tsx [app-client] (ecmascript, async loader)\")'\n * // -> sharedModuleId = \"[project]/...app-remote.tsx [app-client] (ecmascript, async loader)\"\n *\n * // Minified:\n * \"t.TURBOPACK_REMOTE_SHARED=await e.A(123456)\"\n * // -> sharedModuleId = \"123456\"\n */\nexport const REMOTE_SHARED_ASSIGNMENT_RE = new RegExp(\n `\\\\.TURBOPACK_REMOTE_SHARED\\\\s*=\\\\s*await (?:__turbopack_context__|[a-z])\\\\.A\\\\((?<sharedModuleId>${MODULE_ID_PATTERN})\\\\)`,\n);\n\n/**\n * Matches async module loader calls: ctx.A(moduleId)\n *\n * Captures:\n * - `asyncSharedModuleId`: The module ID (may be quoted).\n *\n * @example\n * // Next.js 16:\n * \"() => __turbopack_context__.A(460400)\"\n * // -> asyncSharedModuleId = \"460400\"\n *\n * // Next.js 15.x:\n * '() => __turbopack_context__.A(\"[project]/.../react/index.js [app-client] (ecmascript, async loader)\")'\n * // -> asyncSharedModuleId = \"[project]/.../react/index.js [app-client] (ecmascript, async loader)\"\n *\n * // Minified:\n * \"() => e.A(460400)\"\n * // -> asyncSharedModuleId = \"460400\"\n */\nexport const ASYNC_MODULE_LOADER_RE = new RegExp(\n `(?:__turbopack_context__|[a-z])\\\\.A\\\\((?<asyncSharedModuleId>${MODULE_ID_PATTERN})\\\\)`,\n);\n\n/**\n * Extracts the final module ID from an async module `.v()` callback.\n * The callback always ends by calling its argument (parentImport / single-letter\n * variable) with the real module ID. This matches that final call regardless of\n * surrounding structure (whitespace, `return` statements, block vs expression bodies).\n *\n * Handles both Promise.resolve (no extra chunks) and Promise.all (with chunks).\n *\n * Captures:\n * - `sharedModuleId`: The module ID (may be quoted).\n *\n * @example\n * // Next.js 16 minified (Promise.resolve):\n * \"e=>{e.v(e=>Promise.resolve().then(()=>e(633334)))}\"\n * // -> sharedModuleId = \"633334\"\n *\n * // Next.js 16 minified (Promise.all):\n * \"e=>{e.v(t=>Promise.all([\\\"chunk.js\\\"].map(t=>e.l(t))).then(()=>t(633334)))}\"\n * // -> sharedModuleId = \"633334\"\n *\n * // Next.js 15.x development (multi-line):\n * '(__turbopack_context__) => {\\n__turbopack_context__.v((parentImport) => {\\n return Promise.resolve().then(() => {\\n return parentImport(\"[project]/.../react/index.js [app-client] (ecmascript)\");\\n });\\n});\\n}'\n * // -> sharedModuleId = \"[project]/.../react/index.js [app-client] (ecmascript)\"\n */\nexport const ASYNC_MODULE_CALLBACK_RE = new RegExp(\n `(?:parentImport|[a-z])\\\\((?<sharedModuleId>${MODULE_ID_PATTERN})\\\\)`,\n);\n\n/**\n * Detects Turbopack runtime global usage in a chunk.\n *\n * Matches either dot-notation or bracket-notation access off `globalThis` or `self`:\n * - globalThis.TURBOPACK / self.TURBOPACK\n * - globalThis[\"TURBOPACK\"] / self['TURBOPACK'] (whitespace tolerated)\n */\nexport const TURBOPACK_GLOBAL_RE =\n /(?:globalThis|self)\\s*(?:\\.TURBOPACK|\\[\\s*[\"']TURBOPACK[\"']\\s*\\])/;\n"],"mappings":"AAmBA,MAAM,oBAAoB;AAG1B,SAAS,YAAY,OAAuB;AAC1C,MAAI,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,GAAG;AAChD,WAAO,MAAM,MAAM,GAAG,EAAE;AAAA,EAC1B;AACA,SAAO;AACT;AAQO,SAAS,kBAAkB,OAAuB;AACvD,MAAI,kBAAkB,KAAK,KAAK,GAAG;AACjC,WAAO,OAAO,OAAO,KAAK,CAAC;AAAA,EAC7B;AACA,SAAO;AACT;AAOO,SAAS,aACd,IACA,OACA,OACoB;AACpB,QAAM,MAAM,GAAG,KAAK,KAAK,GAAG,SAAS,KAAK;AAC1C,MAAI,CAAC;AAAK,WAAO;AACjB,SAAO,kBAAkB,YAAY,GAAG,CAAC;AAC3C;AAYO,MAAM,0BACX;AAqBK,MAAM,8BAA8B,IAAI;AAAA,EAC7C,oGAAoG;AACtG;AAqBO,MAAM,yBAAyB,IAAI;AAAA,EACxC,gEAAgE;AAClE;AA0BO,MAAM,2BAA2B,IAAI;AAAA,EAC1C,8CAA8C;AAChD;AASO,MAAM,sBACX;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/runtime/turbopack/patterns.ts"],"sourcesContent":["/**\n * Regex patterns for parsing Turbopack's minified and development code.\n *\n * Turbopack outputs different variable names in dev vs production builds:\n * - Development: __turbopack_context__, parentImport, chunk, self\n * - Minified: e, t, etc.\n *\n * Module IDs are numeric in Next.js 16+ (e.g. `984803`) but full string paths in\n * Next.js 15.x dev mode (e.g. `\"[project]/.../react/index.js [app-client] (ecmascript)\"`).\n * ID-capturing patterns match `\"quoted string\"|digits` via the shared\n * `MODULE_ID_PATTERN` fragment. Use `extractGroup()` to both match and strip quotes\n * in one step.\n */\n\n/**\n * Reusable fragment that matches a turbopack module ID: either a\n * quoted string, a plain integer, or an integer in scientific notation\n * (e.g. `35e3`, which production minifiers emit for `35000`).\n */\nconst MODULE_ID_PATTERN = '\"[^\"]+\"|[0-9]+e[0-9]+|[0-9]+';\n\n/** Strips surrounding double-quotes from a captured regex value. */\nfunction stripQuotes(value: string): string {\n if (value.startsWith('\"') && value.endsWith('\"')) {\n return value.slice(1, -1);\n }\n return value;\n}\n\n/**\n * Normalizes a captured module ID. Production minifiers may emit numeric\n * IDs in scientific notation (e.g. `35e3`) but the runtime registers them\n * under their canonical integer form (`35000`), so we canonicalize here\n * before any lookups.\n */\nexport function normalizeModuleId(value: string): string {\n if (/^[0-9]+e[0-9]+$/.test(value)) {\n return String(Number(value));\n }\n return value;\n}\n\n/**\n * Runs a regex against `input` and returns the named capture group with\n * quotes stripped and numeric IDs normalized, or `undefined` if there's\n * no match.\n */\nexport function extractGroup(\n re: RegExp,\n input: string,\n group: string,\n): string | undefined {\n const raw = re.exec(input)?.groups?.[group];\n if (!raw) return undefined;\n return normalizeModuleId(stripQuotes(raw));\n}\n\n/**\n * Matches: self.TURBOPACK_REMOTE_SHARED or e.TURBOPACK_REMOTE_SHARED\n *\n * @example\n * // Development:\n * \"self.TURBOPACK_REMOTE_SHARED=await __turbopack_context__.A(984803)\"\n *\n * // Minified:\n * \"e.TURBOPACK_REMOTE_SHARED=await e.A(984803)\"\n */\nexport const REMOTE_SHARED_MARKER_RE =\n /(?:self|[a-z])\\.TURBOPACK_REMOTE_SHARED/;\n\n/**\n * Extracts the module ID from a TURBOPACK_REMOTE_SHARED assignment.\n *\n * Captures:\n * - `sharedModuleId`: The module ID (may be quoted for string paths).\n *\n * @example\n * // Next.js 16:\n * \"self.TURBOPACK_REMOTE_SHARED=await __turbopack_context__.A(984803)\"\n * // -> sharedModuleId = \"984803\"\n *\n * // Next.js 15.x (string IDs, spaces around `=`):\n * 'self.TURBOPACK_REMOTE_SHARED = await __turbopack_context__.A(\"[project]/...app-remote.tsx [app-client] (ecmascript, async loader)\")'\n * // -> sharedModuleId = \"[project]/...app-remote.tsx [app-client] (ecmascript, async loader)\"\n *\n * // Minified:\n * \"t.TURBOPACK_REMOTE_SHARED=await e.A(123456)\"\n * // -> sharedModuleId = \"123456\"\n */\nexport const REMOTE_SHARED_ASSIGNMENT_RE = new RegExp(\n `\\\\.TURBOPACK_REMOTE_SHARED\\\\s*=\\\\s*await (?:__turbopack_context__|[a-z])\\\\.A\\\\((?<sharedModuleId>${MODULE_ID_PATTERN})\\\\)`,\n);\n\n/**\n * Matches async module loader calls: ctx.A(moduleId)\n *\n * Captures:\n * - `asyncSharedModuleId`: The module ID (may be quoted).\n *\n * @example\n * // Next.js 16:\n * \"() => __turbopack_context__.A(460400)\"\n * // -> asyncSharedModuleId = \"460400\"\n *\n * // Next.js 15.x:\n * '() => __turbopack_context__.A(\"[project]/.../react/index.js [app-client] (ecmascript, async loader)\")'\n * // -> asyncSharedModuleId = \"[project]/.../react/index.js [app-client] (ecmascript, async loader)\"\n *\n * // Minified:\n * \"() => e.A(460400)\"\n * // -> asyncSharedModuleId = \"460400\"\n */\nexport const ASYNC_MODULE_LOADER_RE = new RegExp(\n `(?:__turbopack_context__|[a-z])\\\\.A\\\\((?<asyncSharedModuleId>${MODULE_ID_PATTERN})\\\\)`,\n);\n\n/**\n * Extracts the final module ID from an async module `.v()` callback.\n * The callback always ends by calling its argument (parentImport / single-letter\n * variable) with the real module ID. This matches that final call regardless of\n * surrounding structure (whitespace, `return` statements, block vs expression bodies).\n *\n * Handles both Promise.resolve (no extra chunks) and Promise.all (with chunks).\n *\n * Captures:\n * - `sharedModuleId`: The module ID (may be quoted).\n *\n * @example\n * // Next.js 16 minified (Promise.resolve):\n * \"e=>{e.v(e=>Promise.resolve().then(()=>e(633334)))}\"\n * // -> sharedModuleId = \"633334\"\n *\n * // Next.js 16 minified (Promise.all):\n * \"e=>{e.v(t=>Promise.all([\\\"chunk.js\\\"].map(t=>e.l(t))).then(()=>t(633334)))}\"\n * // -> sharedModuleId = \"633334\"\n *\n * // Next.js 15.x development (multi-line):\n * '(__turbopack_context__) => {\\n__turbopack_context__.v((parentImport) => {\\n return Promise.resolve().then(() => {\\n return parentImport(\"[project]/.../react/index.js [app-client] (ecmascript)\");\\n });\\n});\\n}'\n * // -> sharedModuleId = \"[project]/.../react/index.js [app-client] (ecmascript)\"\n */\nexport const ASYNC_MODULE_CALLBACK_RE = new RegExp(\n `(?:parentImport|[a-z])\\\\((?<sharedModuleId>${MODULE_ID_PATTERN})\\\\)`,\n);\n\n/**\n * Detects Turbopack runtime global usage in a chunk.\n *\n * Matches either dot-notation or bracket-notation access off `globalThis` or `self`:\n * - globalThis.TURBOPACK / self.TURBOPACK\n * - globalThis[\"TURBOPACK\"] / self['TURBOPACK'] (whitespace tolerated)\n */\nexport const TURBOPACK_GLOBAL_RE =\n /(?:globalThis|self)\\s*(?:\\.TURBOPACK(?![_\\w])|\\[\\s*[\"']TURBOPACK[\"']\\s*\\])/;\n"],"mappings":"AAmBA,MAAM,oBAAoB;AAG1B,SAAS,YAAY,OAAuB;AAC1C,MAAI,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,GAAG;AAChD,WAAO,MAAM,MAAM,GAAG,EAAE;AAAA,EAC1B;AACA,SAAO;AACT;AAQO,SAAS,kBAAkB,OAAuB;AACvD,MAAI,kBAAkB,KAAK,KAAK,GAAG;AACjC,WAAO,OAAO,OAAO,KAAK,CAAC;AAAA,EAC7B;AACA,SAAO;AACT;AAOO,SAAS,aACd,IACA,OACA,OACoB;AACpB,QAAM,MAAM,GAAG,KAAK,KAAK,GAAG,SAAS,KAAK;AAC1C,MAAI,CAAC;AAAK,WAAO;AACjB,SAAO,kBAAkB,YAAY,GAAG,CAAC;AAC3C;AAYO,MAAM,0BACX;AAqBK,MAAM,8BAA8B,IAAI;AAAA,EAC7C,oGAAoG;AACtG;AAqBO,MAAM,yBAAyB,IAAI;AAAA,EACxC,gEAAgE;AAClE;AA0BO,MAAM,2BAA2B,IAAI;AAAA,EAC1C,8CAA8C;AAChD;AASO,MAAM,sBACX;","names":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
setupRemoteScope
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NZM2SI6U.js";
|
|
4
4
|
import {
|
|
5
5
|
applySharedModules,
|
|
6
6
|
initializeSharedModules,
|
|
7
7
|
nextClientPagesLoader
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-PT3R275L.js";
|
|
9
9
|
import {
|
|
10
10
|
buildCoreShared,
|
|
11
11
|
buildHostShared
|
|
@@ -53,4 +53,4 @@ async function turbopackRuntime(url, bundle, shared, remoteShared, resolveClient
|
|
|
53
53
|
export {
|
|
54
54
|
turbopackRuntime
|
|
55
55
|
};
|
|
56
|
-
//# sourceMappingURL=turbopack-
|
|
56
|
+
//# sourceMappingURL=turbopack-55EJDSUT.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunk7OD5S534cjs = require('./chunk-7OD5S534.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var _chunkW5FSHVWUcjs = require('./chunk-W5FSHVWU.cjs');
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
@@ -22,12 +22,12 @@ async function turbopackRuntime(url, bundle, shared, remoteShared, resolveClient
|
|
|
22
22
|
const hostShared = _chunkI7VKDF3Ecjs.buildHostShared.call(void 0, shared, resolveClientUrl, {
|
|
23
23
|
includeRemoteComponentShared: true
|
|
24
24
|
});
|
|
25
|
-
await
|
|
25
|
+
await _chunk7OD5S534cjs.setupRemoteScope.call(void 0, "turbopack", [], url, bundle, resolveClientUrl);
|
|
26
26
|
const {
|
|
27
27
|
default: { createFromReadableStream }
|
|
28
28
|
} = await Promise.resolve().then(() => _interopRequireWildcard(require("react-server-dom-webpack/client.browser")));
|
|
29
29
|
async function preloadScripts(scripts, __) {
|
|
30
|
-
const scope = await
|
|
30
|
+
const scope = await _chunk7OD5S534cjs.setupRemoteScope.call(void 0,
|
|
31
31
|
"turbopack",
|
|
32
32
|
scripts.map((script) => ({
|
|
33
33
|
src: script.getAttribute("src") || script.getAttribute("data-src") || script.src
|
|
@@ -36,7 +36,7 @@ async function turbopackRuntime(url, bundle, shared, remoteShared, resolveClient
|
|
|
36
36
|
bundle,
|
|
37
37
|
resolveClientUrl
|
|
38
38
|
);
|
|
39
|
-
await
|
|
39
|
+
await _chunkW5FSHVWUcjs.initializeSharedModules.call(void 0,
|
|
40
40
|
scope,
|
|
41
41
|
_chunkI7VKDF3Ecjs.buildCoreShared.call(void 0, hostShared),
|
|
42
42
|
_nullishCoalesce(remoteShared, () => ( {}))
|
|
@@ -45,12 +45,12 @@ async function turbopackRuntime(url, bundle, shared, remoteShared, resolveClient
|
|
|
45
45
|
return {
|
|
46
46
|
self,
|
|
47
47
|
createFromReadableStream,
|
|
48
|
-
applySharedModules:
|
|
49
|
-
nextClientPagesLoader:
|
|
48
|
+
applySharedModules: _chunkW5FSHVWUcjs.applySharedModules,
|
|
49
|
+
nextClientPagesLoader: _chunkW5FSHVWUcjs.nextClientPagesLoader,
|
|
50
50
|
preloadScripts
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
exports.turbopackRuntime = turbopackRuntime;
|
|
56
|
-
//# sourceMappingURL=turbopack-
|
|
56
|
+
//# sourceMappingURL=turbopack-Q6KJAEOX.cjs.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
applySharedModules,
|
|
6
6
|
nextClientPagesLoader
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-PT3R275L.js";
|
|
8
8
|
import {
|
|
9
9
|
NEXT_BUNDLE_PATH_RE,
|
|
10
10
|
buildHostShared,
|
|
@@ -90,4 +90,4 @@ async function webpackRuntime(bundle, shared, remoteShared, resolveClientUrl) {
|
|
|
90
90
|
export {
|
|
91
91
|
webpackRuntime
|
|
92
92
|
};
|
|
93
|
-
//# sourceMappingURL=webpack-
|
|
93
|
+
//# sourceMappingURL=webpack-AQ34DAJZ.js.map
|
|
@@ -4,7 +4,7 @@ var _chunk4MLJE6UPcjs = require('./chunk-4MLJE6UP.cjs');
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkW5FSHVWUcjs = require('./chunk-W5FSHVWU.cjs');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
@@ -77,17 +77,17 @@ async function webpackRuntime(bundle, shared, remoteShared, resolveClientUrl) {
|
|
|
77
77
|
},
|
|
78
78
|
"WebpackRuntime"
|
|
79
79
|
);
|
|
80
|
-
|
|
80
|
+
_chunkW5FSHVWUcjs.applySharedModules.call(void 0, remoteBundle, resolve);
|
|
81
81
|
}
|
|
82
82
|
return {
|
|
83
83
|
self,
|
|
84
84
|
createFromReadableStream,
|
|
85
|
-
applySharedModules:
|
|
86
|
-
nextClientPagesLoader:
|
|
85
|
+
applySharedModules: _chunkW5FSHVWUcjs.applySharedModules,
|
|
86
|
+
nextClientPagesLoader: _chunkW5FSHVWUcjs.nextClientPagesLoader,
|
|
87
87
|
preloadScripts
|
|
88
88
|
};
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
|
|
92
92
|
exports.webpackRuntime = webpackRuntime;
|
|
93
|
-
//# sourceMappingURL=webpack-
|
|
93
|
+
//# sourceMappingURL=webpack-FWUNUWLF.cjs.map
|