jsdom-configurable-resource-loader
Version:
A JSDOM ResourceLoader with configuration options to whitelist and blacklist resources.
90 lines (86 loc) • 8.89 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var index_exports = {};
__export(index_exports, {
ConfigurableResourceLoader: () => ConfigurableResourceLoader
});
module.exports = __toCommonJS(index_exports);
// src/configurable-resource-loader.ts
var import_jsdom = require("jsdom");
// src/url-matches.ts
function urlMatches(url, matcher) {
switch (typeof matcher) {
case "string":
if (matcher === "") {
throw new Error(
`Invalid matcher: Tried to match '${url}' against a blank string.`
);
}
return url === matcher;
default:
if (isBlankRegExp(matcher)) {
throw new Error(
`Invalid matcher: Tried to match '${url}' against a blank RegExp.`
);
}
return matcher.test(url);
}
}
var isBlankRegExp = (re) => {
return re.source === new RegExp("").source;
};
// src/configurable-resource-loader.ts
var ConfigurableResourceLoader = class _ConfigurableResourceLoader extends import_jsdom.ResourceLoader {
constructor(options) {
super(
_ConfigurableResourceLoader.strictlyResourceLoaderConstructorOptions(
options
)
);
this.options = options != null ? options : { whitelist: [] };
}
static strictlyResourceLoaderConstructorOptions(options) {
if (options === void 0) {
return void 0;
}
const { strictSSL, proxy, userAgent } = options;
return { strictSSL, proxy, userAgent };
}
fetch(url, options) {
if ("blacklist" in this.options) {
if (this.options.blacklist.some((forbidden) => urlMatches(url, forbidden))) {
return null;
}
if (!("whitelist" in this.options)) {
return super.fetch(url, options);
}
}
if ("whitelist" in this.options && (this.options.whitelist.length === 0 || this.options.whitelist.some((allowed) => urlMatches(url, allowed)))) {
return super.fetch(url, options);
} else {
return null;
}
}
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
ConfigurableResourceLoader
});
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9jb25maWd1cmFibGUtcmVzb3VyY2UtbG9hZGVyLnRzIiwgIi4uL3NyYy91cmwtbWF0Y2hlcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IHsgQ29uZmlndXJhYmxlUmVzb3VyY2VMb2FkZXIgfSBmcm9tICcuL2NvbmZpZ3VyYWJsZS1yZXNvdXJjZS1sb2FkZXInO1xyXG5leHBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZVJlc291cmNlTG9hZGVyT3B0aW9ucyB9IGZyb20gJy4vY29uZmlndXJhYmxlLXJlc291cmNlLWxvYWRlcic7XHJcbmV4cG9ydCB0eXBlIHsgTWF0Y2hlciB9IGZyb20gJy4vdXJsLW1hdGNoZXMnO1xyXG4iLCAiaW1wb3J0IHtcclxuICBSZXNvdXJjZUxvYWRlcixcclxuICB0eXBlIFJlc291cmNlTG9hZGVyQ29uc3RydWN0b3JPcHRpb25zLFxyXG4gIHR5cGUgRmV0Y2hPcHRpb25zLFxyXG4gIHR5cGUgQWJvcnRhYmxlUHJvbWlzZSxcclxufSBmcm9tICdqc2RvbSc7XHJcbmltcG9ydCB7IE1hdGNoZXIsIHVybE1hdGNoZXMgfSBmcm9tICcuL3VybC1tYXRjaGVzJztcclxuXHJcbnR5cGUgTmV3T3B0aW9ucyA9XHJcbiAgfCB7XHJcbiAgICAgIHdoaXRlbGlzdDogTWF0Y2hlcltdO1xyXG4gICAgfVxyXG4gIHwge1xyXG4gICAgICBibGFja2xpc3Q6IE1hdGNoZXJbXTtcclxuICAgIH1cclxuICB8IHtcclxuICAgICAgd2hpdGVsaXN0OiBNYXRjaGVyW107XHJcbiAgICAgIGJsYWNrbGlzdDogTWF0Y2hlcltdO1xyXG4gICAgfTtcclxuXHJcbmV4cG9ydCB0eXBlIENvbmZpZ3VyYWJsZVJlc291cmNlTG9hZGVyT3B0aW9ucyA9XHJcbiAgUmVzb3VyY2VMb2FkZXJDb25zdHJ1Y3Rvck9wdGlvbnMgJiBOZXdPcHRpb25zO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYWJsZVJlc291cmNlTG9hZGVyIGV4dGVuZHMgUmVzb3VyY2VMb2FkZXIge1xyXG4gIG9wdGlvbnM6IENvbmZpZ3VyYWJsZVJlc291cmNlTG9hZGVyT3B0aW9ucztcclxuXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENvbmZpZ3VyYWJsZVJlc291cmNlTG9hZGVyT3B0aW9ucykge1xyXG4gICAgc3VwZXIoXHJcbiAgICAgIENvbmZpZ3VyYWJsZVJlc291cmNlTG9hZGVyLnN0cmljdGx5UmVzb3VyY2VMb2FkZXJDb25zdHJ1Y3Rvck9wdGlvbnMoXHJcbiAgICAgICAgb3B0aW9uc1xyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA/PyB7IHdoaXRlbGlzdDogW10gfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHN0cmljdGx5UmVzb3VyY2VMb2FkZXJDb25zdHJ1Y3Rvck9wdGlvbnMoXHJcbiAgICBvcHRpb25zPzogQ29uZmlndXJhYmxlUmVzb3VyY2VMb2FkZXJPcHRpb25zXHJcbiAgKTpcclxuICAgIHwgT21pdDxcclxuICAgICAgICBDb25maWd1cmFibGVSZXNvdXJjZUxvYWRlck9wdGlvbnMsXHJcbiAgICAgICAga2V5b2YgTmV3T3B0aW9uc1xyXG4gICAgICA+XHJcbiAgICB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgeyBzdHJpY3RTU0wsIHByb3h5LCB1c2VyQWdlbnQgfSA9IG9wdGlvbnM7XHJcbiAgICByZXR1cm4geyBzdHJpY3RTU0wsIHByb3h5LCB1c2VyQWdlbnQgfTtcclxuICB9XHJcblxyXG4gIGZldGNoKHVybDogc3RyaW5nLCBvcHRpb25zOiBGZXRjaE9wdGlvbnMpOiBBYm9ydGFibGVQcm9taXNlPEJ1ZmZlcj4gfCBudWxsIHtcclxuICAgIGlmICgnYmxhY2tsaXN0JyBpbiB0aGlzLm9wdGlvbnMpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5ibGFja2xpc3Quc29tZSgoZm9yYmlkZGVuKSA9PiB1cmxNYXRjaGVzKHVybCwgZm9yYmlkZGVuKSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCEoJ3doaXRlbGlzdCcgaW4gdGhpcy5vcHRpb25zKSkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5mZXRjaCh1cmwsIG9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAnd2hpdGVsaXN0JyBpbiB0aGlzLm9wdGlvbnMgJiZcclxuICAgICAgKHRoaXMub3B0aW9ucy53aGl0ZWxpc3QubGVuZ3RoID09PSAwIHx8XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLndoaXRlbGlzdC5zb21lKChhbGxvd2VkKSA9PiB1cmxNYXRjaGVzKHVybCwgYWxsb3dlZCkpKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBzdXBlci5mZXRjaCh1cmwsIG9wdGlvbnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsICJleHBvcnQgdHlwZSBNYXRjaGVyID0gc3RyaW5nIHwgUmVnRXhwO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVybE1hdGNoZXModXJsOiBzdHJpbmcsIG1hdGNoZXI6IE1hdGNoZXIpOiBib29sZWFuIHtcclxuICBzd2l0Y2ggKHR5cGVvZiBtYXRjaGVyKSB7XHJcbiAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICBpZiAobWF0Y2hlciA9PT0gJycpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBgSW52YWxpZCBtYXRjaGVyOiBUcmllZCB0byBtYXRjaCAnJHt1cmx9JyBhZ2FpbnN0IGEgYmxhbmsgc3RyaW5nLmBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB1cmwgPT09IG1hdGNoZXI7XHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICBpZiAoaXNCbGFua1JlZ0V4cChtYXRjaGVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBJbnZhbGlkIG1hdGNoZXI6IFRyaWVkIHRvIG1hdGNoICcke3VybH0nIGFnYWluc3QgYSBibGFuayBSZWdFeHAuYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG1hdGNoZXIudGVzdCh1cmwpO1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaXNCbGFua1JlZ0V4cCA9IChyZTogUmVnRXhwKTogYm9vbGVhbiA9PiB7XHJcbiAgLy8gQXBwYXJlbnRseSwgbmV3IFJlZ0V4cCgnJykuc291cmNlIGRvZXMgbm90IHJldHVybiBcIlwiLCBpdCByZXR1cm5zIFwiKD86KVwiXHJcbiAgLy8gSSdtIG5vdCBzdXJlIGlmIHRoaXMgaXMgc3ViamVjdCB0byBjaGFuZ2UsIHNvIHRoaXNcclxuICAvLyBmZWx0IGxpa2UgdGhlIHNhZmVzdCB3YXkgdG8gY2hlY2sgaWYgYSByZWdleCB3YXMgYnVpbHQgd2l0aCBhIGJsYW5rIHBhdHRlcm46XHJcbiAgcmV0dXJuIHJlLnNvdXJjZSA9PT0gbmV3IFJlZ0V4cCgnJykuc291cmNlO1xyXG59O1xyXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBLG1CQUtPOzs7QUNIQSxTQUFTLFdBQVcsS0FBYSxTQUEyQjtBQUNqRSxVQUFRLE9BQU8sU0FBUztBQUFBLElBQ3RCLEtBQUs7QUFDSCxVQUFJLFlBQVksSUFBSTtBQUNsQixjQUFNLElBQUk7QUFBQSxVQUNSLG9DQUFvQyxHQUFHO0FBQUEsUUFDekM7QUFBQSxNQUNGO0FBQ0EsYUFBTyxRQUFRO0FBQUEsSUFDakI7QUFDRSxVQUFJLGNBQWMsT0FBTyxHQUFHO0FBQzFCLGNBQU0sSUFBSTtBQUFBLFVBQ1Isb0NBQW9DLEdBQUc7QUFBQSxRQUN6QztBQUFBLE1BQ0Y7QUFDQSxhQUFPLFFBQVEsS0FBSyxHQUFHO0FBQUEsRUFDM0I7QUFDRjtBQUVBLElBQU0sZ0JBQWdCLENBQUMsT0FBd0I7QUFJN0MsU0FBTyxHQUFHLFdBQVcsSUFBSSxPQUFPLEVBQUUsRUFBRTtBQUN0Qzs7O0FESE8sSUFBTSw2QkFBTixNQUFNLG9DQUFtQyw0QkFBZTtBQUFBLEVBRzdELFlBQVksU0FBNkM7QUFDdkQ7QUFBQSxNQUNFLDRCQUEyQjtBQUFBLFFBQ3pCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxTQUFLLFVBQVUsNEJBQVcsRUFBRSxXQUFXLENBQUMsRUFBRTtBQUFBLEVBQzVDO0FBQUEsRUFFQSxPQUFlLHlDQUNiLFNBTVk7QUFDWixRQUFJLFlBQVksUUFBVztBQUN6QixhQUFPO0FBQUEsSUFDVDtBQUVBLFVBQU0sRUFBRSxXQUFXLE9BQU8sVUFBVSxJQUFJO0FBQ3hDLFdBQU8sRUFBRSxXQUFXLE9BQU8sVUFBVTtBQUFBLEVBQ3ZDO0FBQUEsRUFFQSxNQUFNLEtBQWEsU0FBd0Q7QUFDekUsUUFBSSxlQUFlLEtBQUssU0FBUztBQUMvQixVQUNFLEtBQUssUUFBUSxVQUFVLEtBQUssQ0FBQyxjQUFjLFdBQVcsS0FBSyxTQUFTLENBQUMsR0FDckU7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQUNBLFVBQUksRUFBRSxlQUFlLEtBQUssVUFBVTtBQUNsQyxlQUFPLE1BQU0sTUFBTSxLQUFLLE9BQU87QUFBQSxNQUNqQztBQUFBLElBQ0Y7QUFFQSxRQUNFLGVBQWUsS0FBSyxZQUNuQixLQUFLLFFBQVEsVUFBVSxXQUFXLEtBQ2pDLEtBQUssUUFBUSxVQUFVLEtBQUssQ0FBQyxZQUFZLFdBQVcsS0FBSyxPQUFPLENBQUMsSUFDbkU7QUFDQSxhQUFPLE1BQU0sTUFBTSxLQUFLLE9BQU87QUFBQSxJQUNqQyxPQUFPO0FBQ0wsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==