UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

1 lines • 6.1 kB
{"version":3,"file":"diagnoseRouteLoadFailure.js","names":[],"sources":["esm/router/diagnoseRouteLoadFailure.js"],"sourcesContent":["const MAX_MODULES = 500;\nconst TIMEOUT_MS = 5e3;\nfunction collectImports(source, base) {\n const out = [];\n const add = (spec) => {\n if (!/^[./]|^https?:/.test(spec)) return;\n try {\n out.push(new URL(spec, base).href);\n } catch {\n }\n };\n for (const m of source.matchAll(\n /(?:^|[\\s;}])(?:import|export)[^'\"]{0,300}?from\\s*[\"']([^\"']+)[\"']/g\n ))\n add(m[1]);\n for (const m of source.matchAll(/\\bimport\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g)) add(m[1]);\n for (const m of source.matchAll(/(?:^|[\\s;}])import\\s*[\"']([^\"']+)[\"']/g)) add(m[1]);\n return out;\n}\nasync function findRouteLoadFault(entryUrl) {\n const deadline = Date.now() + TIMEOUT_MS;\n const importers = /* @__PURE__ */ new Map();\n const entry = new URL(entryUrl, window.location.href).href;\n importers.set(entry, null);\n let frontier = [entry];\n let visited = 0;\n while (frontier.length && visited < MAX_MODULES && Date.now() < deadline) {\n const batch = frontier.slice(0, 32);\n frontier = frontier.slice(batch.length);\n visited += batch.length;\n const results = await Promise.all(\n batch.map(async (url) => {\n let res;\n try {\n res = await fetch(url);\n } catch {\n return { url, fault: \"unreachable\", imports: [] };\n }\n if (res.status === 404) return { url, fault: \"missing\", imports: [] };\n if (!res.ok) return { url, fault: null, imports: [] };\n const type = res.headers.get(\"content-type\") ?? \"\";\n if (!type.includes(\"javascript\")) return { url, fault: null, imports: [] };\n return { url, fault: null, imports: collectImports(await res.text(), url) };\n })\n );\n for (const result of results) {\n if (result.fault === \"missing\") {\n const importer = importers.get(result.url) ?? null;\n if (importer?.includes(\"/node_modules/\")) continue;\n return { kind: \"missing\", url: result.url, importer };\n }\n if (result.fault === \"unreachable\") {\n const serverAnswers = await fetch(window.location.href, { method: \"HEAD\" }).then(\n () => true,\n () => false\n );\n return serverAnswers ? { kind: \"blocked\", url: result.url } : null;\n }\n for (const next of result.imports) {\n if (importers.has(next)) continue;\n importers.set(next, result.url);\n frontier.push(next);\n }\n }\n }\n return null;\n}\nasync function diagnoseRouteLoadFailure(routeId, routeUrl) {\n const fault = await findRouteLoadFault(routeUrl);\n if (!fault) return null;\n const toPath = (url) => url.replace(window.location.origin, \"\");\n const path = toPath(fault.url);\n if (fault.kind === \"missing\") {\n return [\n `Route \"${routeId}\" failed to load because ${path} does not exist (the dev server answered 404).`,\n ``,\n fault.importer ? `${toPath(fault.importer)} imports it. Create the file or remove the import.` : `Create the file or remove the import.`\n ].join(\"\\n\");\n }\n return [\n `Route \"${routeId}\" failed to load because this browser refused to fetch ${path}`,\n ``,\n `That request never reached the dev server, so a content blocker or privacy`,\n `extension is blocking it. In dev the module URL is the source path, and a`,\n `path containing a word like \"analytics\", \"pageview\" or \"track\" matches the`,\n `tracking rules those blockers ship.`,\n ``,\n `Rename the file or the directory so its path no longer matches, or allow`,\n `${window.location.origin} in the blocker.`\n ].join(\"\\n\");\n}\nexport {\n diagnoseRouteLoadFailure,\n findRouteLoadFault\n};\n//# sourceMappingURL=diagnoseRouteLoadFailure.js.map\n"],"mappings":"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"}