mirror of https://github.com/nodejs/corepack.git
56 lines
1.5 KiB
JavaScript
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:
|
|
}
|