one
Version:
One is a new React Framework that makes Vite serve both native and web.
174 lines (173 loc) • 5.89 kB
JavaScript
var MAX_MODULES = 500;
var TIMEOUT_MS = 5e3;
function collectImports(source, base) {
var out = [];
var add = function (spec) {
if (!/^[./]|^https?:/.test(spec)) return;
try {
out.push(new URL(spec, base).href);
} catch (unused) {}
};
var _iteratorNormalCompletion = true,
_didIteratorError = false,
_iteratorError = void 0;
try {
for (var _iterator = source.matchAll(/(?:^|[\s;}])(?:import|export)[^'"]{0,300}?from\s*["']([^"']+)["']/g)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var m = _step.value;
add(m[1]);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var _iteratorNormalCompletion1 = true,
_didIteratorError1 = false,
_iteratorError1 = void 0;
try {
for (var _iterator1 = source.matchAll(/\bimport\s*\(\s*["']([^"']+)["']\s*\)/g)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
var m1 = _step1.value;
add(m1[1]);
}
} catch (err) {
_didIteratorError1 = true;
_iteratorError1 = err;
} finally {
try {
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
_iterator1.return();
}
} finally {
if (_didIteratorError1) {
throw _iteratorError1;
}
}
}
var _iteratorNormalCompletion2 = true,
_didIteratorError2 = false,
_iteratorError2 = void 0;
try {
for (var _iterator2 = source.matchAll(/(?:^|[\s;}])import\s*["']([^"']+)["']/g)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var m2 = _step2.value;
add(m2[1]);
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
return out;
}
async function findBlockedModule(entryUrl) {
var deadline = Date.now() + TIMEOUT_MS;
var seen = /* @__PURE__ */new Set();
var frontier = [new URL(entryUrl, window.location.href).href];
while (frontier.length && seen.size < MAX_MODULES && Date.now() < deadline) {
var batch = frontier.filter(function (url) {
return !seen.has(url);
}).slice(0, 32);
if (!batch.length) break;
frontier = frontier.slice(batch.length);
var results = await Promise.all(batch.map(async function (url) {
var _res_headers_get;
seen.add(url);
var res;
try {
res = await fetch(url);
} catch (unused) {
return {
url,
blocked: true,
imports: []
};
}
if (!res.ok) return {
url,
blocked: false,
imports: []
};
var type = (_res_headers_get = res.headers.get("content-type")) !== null && _res_headers_get !== void 0 ? _res_headers_get : "";
if (!type.includes("javascript")) return {
url,
blocked: false,
imports: []
};
return {
url,
blocked: false,
imports: collectImports(await res.text(), url)
};
}));
var _iteratorNormalCompletion = true,
_didIteratorError = false,
_iteratorError = void 0;
try {
for (var _iterator = results[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var result = _step.value;
if (result.blocked) return result.url;
var _iteratorNormalCompletion1 = true,
_didIteratorError1 = false,
_iteratorError1 = void 0;
try {
for (var _iterator1 = result.imports[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
var next = _step1.value;
if (!seen.has(next)) frontier.push(next);
}
} catch (err) {
_didIteratorError1 = true;
_iteratorError1 = err;
} finally {
try {
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
_iterator1.return();
}
} finally {
if (_didIteratorError1) {
throw _iteratorError1;
}
}
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
}
return null;
}
async function diagnoseRouteLoadFailure(routeId, routeUrl) {
var blocked = await findBlockedModule(routeUrl);
if (!blocked) return null;
var path = blocked.replace(window.location.origin, "");
return [`Route "${routeId}" failed to load because this browser refused to fetch ${path}`, ``, `That request never reached the dev server, so a content blocker or privacy`, `extension is blocking it. In dev the module URL is the source path, and a`, `path containing a word like "analytics", "pageview" or "track" matches the`, `tracking rules those blockers ship.`, ``, `Rename the file or the directory so its path no longer matches, or allow`, `${window.location.origin} in the blocker.`].join("\n");
}
export { diagnoseRouteLoadFailure, findBlockedModule };
//# sourceMappingURL=diagnoseRouteLoadFailure.native.js.map