msw-snapshot
Version:
Transparently create an API cache for testing.
105 lines • 2.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.maskBody = maskBody;
exports.maskHeaders = maskHeaders;
exports.maskURLSearchParams = maskURLSearchParams;
exports.maskJSON = maskJSON;
exports.maskFormData = maskFormData;
/**
* Mask the specified object field.
*/
function maskBody(body, specifiers) {
if (body instanceof FormData) {
return maskFormData(body, specifiers);
}
else if (body instanceof URLSearchParams) {
return maskURLSearchParams(body, specifiers);
}
else if (typeof body === 'object' && body) {
return maskJSON(body, specifiers);
}
else if (typeof body === 'string') {
// Special support for JSON-string.
try {
return JSON.stringify(maskJSON(JSON.parse(body), specifiers));
}
catch (e) {
}
}
return body;
}
/**
* Mask specified header fields.
*/
function maskHeaders(headers, specifiers) {
const maskedHeaders = new Headers();
headers.forEach((val, key) => {
if (!specifiers.some(specifier => matchField(specifier, key))) {
maskedHeaders.append(key, val);
}
else {
maskedHeaders.append(key, '*****');
}
});
return maskedHeaders;
}
/**
* Mask specified search params.
*/
function maskURLSearchParams(searchParams, specifiers) {
const maskedSearchParams = new URLSearchParams();
searchParams.forEach((value, key) => {
if (!specifiers.some(specifier => matchField(specifier, key))) {
maskedSearchParams.append(key, value);
}
else {
maskedSearchParams.append(key, '*****');
}
});
return maskedSearchParams;
}
/**
* Mask specified search params.
*/
function maskJSON(json, specifiers) {
if (json === null || Array.isArray(json) || typeof json !== 'object') {
return json;
}
const maskedJSON = {};
for (const [key, val] of Object.entries(json)) {
if (!specifiers.some(specifier => matchField(specifier, key))) {
maskedJSON[key] = maskJSON(val, specifiers);
}
else {
maskedJSON[key] = '*****';
}
}
return maskedJSON;
}
/**
* Mask specified form data.
*/
function maskFormData(formData, specifiers) {
const maskedFormData = new FormData();
formData.forEach((value, key) => {
if (!specifiers.some(specifier => matchField(specifier, key))) {
maskedFormData.append(key, value);
}
else {
maskedFormData.append(key, '*****');
}
});
return maskedFormData;
}
/**
* Match the specified field.
*/
function matchField(specifier, field) {
if (typeof specifier === 'string') {
return specifier === field;
}
else {
return specifier.test(field);
}
}
//# sourceMappingURL=mask.js.map