serverless-offline-edge-lambda
Version:
A plugin for the Serverless Framework that simulates the behavior of AWS CloudFront Edge Lambdas while developing offline.
99 lines • 3.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CloudFrontHeadersHelper = exports.setHeader = exports.initializeKey = exports.normalizeKey = exports.toHttpHeaders = exports.hasHeader = exports.getHeaders = exports.getHeader = exports.addHeader = void 0;
function addHeader(key, value, headers) {
const normalized = normalizeKey(key);
const newHeaders = Object.assign({ [normalized]: [] }, headers);
newHeaders[normalized].push({ key, value });
return newHeaders;
}
exports.addHeader = addHeader;
function getHeader(key, headers) {
const subheaders = getHeaders(key, headers);
if (!subheaders || subheaders.length === 0) {
return null;
}
return subheaders[0];
}
exports.getHeader = getHeader;
function getHeaders(key, headers) {
const normalized = normalizeKey(key);
if (!(normalized in headers)) {
return null;
}
return headers[normalized].map(header => header.value);
}
exports.getHeaders = getHeaders;
function hasHeader(key, headers) {
const subheaders = getHeaders(key, headers);
return (subheaders !== null && subheaders.length > 0);
}
exports.hasHeader = hasHeader;
function toHttpHeaders(headers) {
return Object.entries(headers)
.reduce((acc, [key, subheaders]) => {
acc.push({
key,
value: subheaders.map(sh => sh.value)
});
return acc;
}, []);
}
exports.toHttpHeaders = toHttpHeaders;
function normalizeKey(key) {
return key.toLowerCase();
}
exports.normalizeKey = normalizeKey;
function initializeKey(key, headers) {
const normalized = normalizeKey(key);
if (!headers[normalized] || headers[normalized].length === 0) {
headers[normalized] = [];
}
}
exports.initializeKey = initializeKey;
function setHeader(key, value, headers) {
const normalized = normalizeKey(key);
const newHeaders = Object.assign(Object.assign({}, headers), { [normalized]: [] });
newHeaders[normalized].push({ key, value });
return newHeaders;
}
exports.setHeader = setHeader;
class CloudFrontHeadersHelper {
constructor(headers = {}) {
this.headers = headers;
}
getHeader(key) {
return getHeader(key, this.headers);
}
getHeaders(key) {
return getHeaders(key, this.headers);
}
addHeader(key, value) {
this.headers = addHeader(key, value, this.headers);
}
hasHeader(key) {
return hasHeader(key, this.headers);
}
setHeader(key, value) {
this.headers = setHeader(key, value, this.headers);
}
asHttpHeaders() {
return toHttpHeaders(this.headers);
}
asCloudFrontHeaders() {
return this.headers;
}
static from(headers) {
const cfHeaders = Object.entries(headers)
.reduce((acc, [key, value]) => {
acc[key.toLowerCase()] = [{
key,
value: value
}];
return acc;
}, {});
return new CloudFrontHeadersHelper(cfHeaders);
}
}
exports.CloudFrontHeadersHelper = CloudFrontHeadersHelper;
//# sourceMappingURL=cloudfront-headers.js.map