UNPKG

jsdom-configurable-resource-loader

Version:

A JSDOM ResourceLoader with configuration options to whitelist and blacklist resources.

90 lines (86 loc) 8.89 kB
"use strict"; 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==