@n1k1t/mock-server
Version:
The ultimate toolkit to intercept, transform, and simulate HTTP/WS traffic with type-safe expectations
106 lines • 4.05 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.RequestContextSnapshot = void 0;
const rfdc_1 = __importDefault(require("rfdc"));
const lodash_1 = __importDefault(require("lodash"));
const clone = (0, rfdc_1.default)();
class RequestContextSnapshot {
constructor(provided) {
this.provided = provided;
this.transport = this.provided.transport;
this.flags = this.provided.flags;
this.storage = this.provided.storage;
this.cache = this.provided.cache ?? { isEnabled: false };
this.state = this.provided.state ?? {};
this.incoming = this.provided.incoming;
this.outgoing = this.provided.outgoing;
this.messages = this.provided.messages ?? [];
/** Expectation schema overrides */
this.overrides = this.provided.overrides;
this.forwarded = this.provided.forwarded;
this.error = this.provided.error;
this.container = this.provided.container;
this.seed = this.provided.seed;
}
assign(payload) {
return Object.assign(this, payload);
}
pick(keys) {
return lodash_1.default.pick(this, keys);
}
omit(keys) {
return lodash_1.default.omit(this, keys);
}
unset(keys) {
keys.forEach((key) => lodash_1.default.unset(this, key));
return this;
}
clone() {
return RequestContextSnapshot.build({
...lodash_1.default.omit(this, ['incoming', 'outgoing']),
incoming: Object.assign(clone(lodash_1.default.omit(this.incoming, ['stream', 'raw'])), {
stream: this.incoming.stream,
raw: {
data: this.incoming.raw.data?.subarray(),
},
}),
outgoing: Object.assign(clone(lodash_1.default.omit(this.outgoing, ['stream', 'raw'])), {
stream: this.outgoing.stream,
raw: {
data: this.outgoing.raw.data?.subarray(),
},
}),
});
}
toPlain() {
return {
transport: this.transport,
flags: this.flags,
error: this.error,
overrides: this.overrides,
state: this.state,
cache: this.cache,
seed: this.seed,
container: this.container?.toPlain(),
messages: this.messages.map((message) => message.toPlain()),
incoming: lodash_1.default.omit(this.incoming, ['stream', 'raw']),
outgoing: lodash_1.default.omit(this.outgoing, ['stream', 'raw']),
...(this.forwarded && {
forwarded: {
schema: this.forwarded.schema,
incoming: lodash_1.default.omit(this.forwarded.incoming, ['raw']),
...(this.forwarded.outgoing && {
outgoing: lodash_1.default.omit(this.forwarded.outgoing, ['raw']),
}),
messages: this.forwarded.messages?.map((message) => message.toPlain()),
},
}),
};
}
toCache() {
const outoging = this.forwarded?.outgoing ?? {
type: 'plain',
status: 200,
headers: {},
raw: {},
};
return {
messages: (this.forwarded?.messages ?? [])
.filter((message) => message.direction === 'outgoing')
.map((message) => message.toCache()),
outgoing: Object.assign(lodash_1.default.omit(outoging, ['stream', 'raw']), {
raw: {
data: outoging.raw.data?.toString('base64'),
},
}),
};
}
static build(configuration) {
return new RequestContextSnapshot(configuration);
}
}
exports.RequestContextSnapshot = RequestContextSnapshot;
//# sourceMappingURL=snapshot.js.map