@aikidosec/firewall
Version:
Zen by Aikido is an embedded Web Application Firewall that autonomously protects Node.js apps against common and critical attacks
50 lines (49 loc) • 1.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.VersionedPackage = void 0;
class VersionedPackage {
constructor(range) {
this.range = range;
this.requireInterceptors = [];
this.requireFileInterceptors = new Map();
if (!this.range) {
throw new Error("Version range is required");
}
}
getRange() {
return this.range;
}
onRequire(interceptor) {
if (typeof interceptor !== "function") {
throw new Error("Interceptor must be a function");
}
this.requireInterceptors.push(interceptor);
return this;
}
onFileRequire(relativePath, interceptor) {
if (relativePath.length === 0) {
throw new Error("Relative path must not be empty");
}
if (this.requireFileInterceptors.has(relativePath)) {
throw new Error(`Interceptor for ${relativePath} already exists`);
}
if (relativePath.startsWith("/")) {
throw new Error("Absolute paths are not allowed for require file interceptors");
}
if (relativePath.includes("..")) {
throw new Error("Relative paths with '..' are not allowed for require file interceptors");
}
if (relativePath.startsWith("./")) {
relativePath = relativePath.slice(2);
}
this.requireFileInterceptors.set(relativePath, interceptor);
return this;
}
getRequireInterceptors() {
return this.requireInterceptors;
}
getRequireFileInterceptor(relativePath) {
return this.requireFileInterceptors.get(relativePath);
}
}
exports.VersionedPackage = VersionedPackage;