corepack/tests/recordRequests.js

56 lines
1.5 KiB
JavaScript

"use strict";
const fs = require(`node:fs`);
const path = require(`node:path`);
const v8 = require(`node:v8`);
const nock = require(`nock`);
const getNockFile = () =>
path.join(
__dirname,
`nock`,
`${process.env.NOCK_FILE_NAME}-${process.env.RUN_CLI_ID}.dat`,
);
const ACCEPTED_HEADERS = new Set([`Content-Type`, `Content-Length`]);
function filterHeaders(headers) {
if (!Array.isArray(headers)) return headers;
const filtered = [];
for (let t = 0; t < headers.length; t += 2)
if (ACCEPTED_HEADERS.has(headers[t].toLowerCase()))
filtered.push(headers[t], headers[t + 1]);
return filtered;
}
switch (process.env.NOCK_ENV || ``) {
case `record`:
nock.recorder.rec({
// eslint-disable-next-line @typescript-eslint/naming-convention
dont_print: true,
// eslint-disable-next-line @typescript-eslint/naming-convention
output_objects: true,
});
process.on(`exit`, () => {
const nockCallObjects = nock.recorder.play();
for (const req of nockCallObjects)
if (typeof req !== `string`)
req.rawHeaders = filterHeaders(req.rawHeaders);
const serialized = v8.serialize(nockCallObjects);
fs.mkdirSync(path.dirname(getNockFile()), {recursive: true});
fs.writeFileSync(getNockFile(), serialized);
});
break;
case `replay`: {
const data = fs.readFileSync(getNockFile());
const nockCallObjects = v8.deserialize(data);
nock.define(nockCallObjects);
break;
}
default:
}