@web/dev-server-legacy
Version:
Plugin for legacy browsers in @web/dev-server
48 lines • 1.6 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.findJsScripts = void 0;
const valid_url_1 = require("valid-url");
const dom5_1 = require("@web/dev-server-core/dist/dom5");
function isDeferred(script) {
return (0, dom5_1.getAttribute)(script, 'type') === 'module' || (0, dom5_1.hasAttribute)(script, 'defer');
}
function isAsync(script) {
return (0, dom5_1.hasAttribute)(script, 'async');
}
function sortByLoadingPriority(a, b) {
if (isAsync(a)) {
return 0;
}
const aDeferred = isDeferred(a);
const bDeferred = isDeferred(b);
if (aDeferred && bDeferred) {
return 0;
}
if (aDeferred) {
return 1;
}
if (bDeferred) {
return -1;
}
return 0;
}
function findJsScripts(document) {
const allScripts = (0, dom5_1.queryAll)(document, dom5_1.predicates.hasTagName('script'));
return allScripts
.filter(script => {
var _a;
const inline = !(0, dom5_1.hasAttribute)(script, 'src');
const type = (0, dom5_1.getAttribute)(script, 'type');
// we don't handle scripts which import from a URL (ex. a CDN)
if (!inline && (0, valid_url_1.isUri)((_a = (0, dom5_1.getAttribute)(script, 'src')) !== null && _a !== void 0 ? _a : '')) {
return false;
}
if (!type || ['application/javascript', 'text/javascript', 'module'].includes(type)) {
return true;
}
return false;
})
.sort(sortByLoadingPriority);
}
exports.findJsScripts = findJsScripts;
//# sourceMappingURL=findJsScripts.js.map
;