diff --git a/package.json b/package.json index 320af47..9c6e15d 100644 --- a/package.json +++ b/package.json @@ -37,10 +37,24 @@ "prepare": "ts-patch install -s" }, "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "columnify": "^1.6.0", + "endent": "^2.1.0", + "express": "^4.17.2", + "express-serve-static-core": "^0.1.1", + "floggy": "^0.3.2", + "got": "^12.0.1", + "lodash": "^4.17.21", + "path-to-regexp": "^6.2.0", "tslib": "^2.3.1" }, "devDependencies": { "@prisma-labs/prettier-config": "0.1.0", + "@types/body-parser": "^1.19.2", + "@types/columnify": "^1.5.1", + "@types/express": "^4", + "@types/express-serve-static-core": "^4.17.28", + "@types/lodash": "^4", "@types/node": "17.0.13", "@typescript-eslint/eslint-plugin": "5.11.0", "@typescript-eslint/parser": "5.11.0", @@ -57,6 +71,7 @@ "prettier": "2.5.1", "ts-node": "10.5.0", "ts-patch": "2.0.1", + "type-fest": "^2.11.1", "typescript": "4.5.5", "typescript-snapshots-plugin": "1.7.0", "typescript-transform-paths": "3.3.1" diff --git a/src/client.ts b/src/client.ts new file mode 100644 index 0000000..d7d7bf0 --- /dev/null +++ b/src/client.ts @@ -0,0 +1,161 @@ +import { responseDefaults } from './server/endpoints/mock' +import { Expectation, ExpectationSettings, Scenario } from './types' +import ono from '@jsdevtools/ono' +import { deepInspect } from '~/helpers' +import columnify from 'columnify' +import endent from 'endent' +import got from 'got/dist/source' +import { merge } from 'lodash' +import { PartialDeep } from 'type-fest' + +export type ClientSettings = { + scope: string + mode: Scenario['mode'] + server: { + protocol: string + host: string + port: number + } +} + +export class Client { + constructor(settings?: PartialDeep) { + this.settings(settings ?? {}) + } + private expectations: Scenario['expectations'] = [] + + private _settings: ClientSettings = { + server: { + protocol: 'http', + host: `localhost`, + port: 9000, + }, + scope: 'default', + mode: { + name: 'fixture', + }, + } + + add(expectations: ExpectationSettings | ExpectationSettings[]) { + if (!Array.isArray(expectations)) { + expectations = [expectations] + } + + expectations.forEach((e) => + this.expectations.push({ + match: { + method: e.method ?? '*', + path: e.path ?? '*', + }, + response: e.response ?? {}, + hits: 0, + }) + ) + return this + } + + reset() { + this.expectations = [] + return this + } + + /** + * Helpers + */ + + settings(settings: PartialDeep) { + merge(this._settings, settings) + } + + async start() { + await this.setScenario() + return this + } + + async done() { + const scenario = await this.getScenario() + + if (this._settings.mode.name === 'fixture') { + const unusedExpectations = scenario.expectations.filter((expectation) => expectation.hits === 0) + + if (unusedExpectations.length > 0) { + throw new Error( + endent` + Mockapie scenario is expected to be done but is not. Mockapie expected the following requests but they never came: + + ${renderExpectations(unusedExpectations)} + ` + ) + } + } else { + if (scenario.expectations.length > 0) { + throw new Error( + endent` + Mockapie scenario is expected to be done but is not. Mockapie expected the following requests but they never came: + + ${renderExpectations(scenario.expectations)} + ` + ) + } + } + } + + /** + * Internal API + */ + + private async setScenario() { + await got + .post( + `${this._settings.server.protocol}://${this._settings.server.host}:${this._settings.server.port}/scenario/set`, + { + responseType: 'json', + json: { + scope: this._settings.scope, + scenario: { + expectations: this.expectations, + mode: this._settings.mode, + } as Scenario, + }, + } + ) + .catch((e) => { + throw ono(e, `Failed to set api mock scenario`) + }) + + return this + } + + private async getScenario() { + const res = await got + .post( + `${this._settings.server.protocol}://${this._settings.server.host}:${this._settings.server.port}/scenario/get`, + { + responseType: 'json', + json: { + scope: this._settings.scope, + }, + } + ) + .catch((e) => { + throw ono(e, `Failed to get api mock scenario`) + }) + + return res.body + } +} + +const renderExpectations = (x: Expectation[]) => { + return columnify( + x.map((_) => ({ + match: deepInspect(_.match), + response: deepInspect({ + ..._.response, + ...responseDefaults, + }), + })), + { + columnSplitter: ' ', + } + ) +} diff --git a/src/helpers.ts b/src/helpers.ts new file mode 100644 index 0000000..2c00674 --- /dev/null +++ b/src/helpers.ts @@ -0,0 +1,11 @@ +import * as Util from 'util' + +/** + * TypeScript helper to statically enforce that all cases have been handled in a switch (or similar) block. + */ +export const casesHandled = (x: never): never => { + // Should never happen, but in case it does :) + throw new Error(`All cases were not handled:\n${Util.inspect(x)}`) +} + +export const deepInspect = (x: unknown) => Util.inspect(x, { depth: 20 }) diff --git a/src/index.ts b/src/index.ts index 5bc2793..701ca2e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1 @@ -export * from '~/lib/utils' +export * as Mockapie from './index_' diff --git a/src/index_.ts b/src/index_.ts new file mode 100644 index 0000000..b10aff2 --- /dev/null +++ b/src/index_.ts @@ -0,0 +1,4 @@ +export * from './client' +export { serverLog } from './logger' +export * from './server/server' +export * from './types' diff --git a/src/logger.ts b/src/logger.ts new file mode 100644 index 0000000..4dfa747 --- /dev/null +++ b/src/logger.ts @@ -0,0 +1,3 @@ +import { log } from 'floggy' + +export const serverLog = log.child('mockapi').child('server') diff --git a/src/server/endpoints/mock.ts b/src/server/endpoints/mock.ts new file mode 100644 index 0000000..d745fa2 --- /dev/null +++ b/src/server/endpoints/mock.ts @@ -0,0 +1,229 @@ +import { Expectation, State } from '../../index_' +import { ExpectationMatchResult, ExpectationMatchSuccess, Scenario } from '../../types' +import { lookupScenario } from '../helpers' +import ono from '@jsdevtools/ono' +import { casesHandled } from '~/helpers' +import { Express } from 'express' +import { log } from 'floggy' +import { IncomingHttpHeaders } from 'http' +import { isError } from 'lodash' +import { pathToRegexp } from 'path-to-regexp' +import { inspect } from 'util' + +export const mockapieScopeHeader = `x-test-mock-api-scope` + +export type MatchableRequest = { + method: string + path: string + headers: IncomingHttpHeaders + query: any // TODO + body: any +} + +export const mockEndpoints = (app: Express, state: State) => { + app.all('*', (req, res) => { + /** + * Scope determines which set of scenarios this request is going to work with. + * + * Scope can be passed by header, or request path. + */ + const scope = + // Look in the headers + req.headers[mockapieScopeHeader] + ? (req.headers[mockapieScopeHeader] as string) + : // Look in the path + req.path.startsWith('/scope-') + ? req.path.match(/\/scope-([^/]+)/)![1]! + : // Default + 'default' + + const path = req.path.startsWith('/scope-') ? req.path.replace(/\/scope-[^/]*/, '') : req.path + + const matchableReq: MatchableRequest = { + method: req.method, + path, + headers: req.headers, + query: req.query, + body: req.body, + } + + log.trace('request', { + scope, + ...truncateBody(matchableReq), + }) + + const scenario = lookupScenario({ + index: state.scenarios, + scope, + }) + + if (isError(scenario)) { + throw ono(scenario, `Failed to get scenario. The matchable request was:\n\n${inspect(matchableReq)}`) + } + + if (scenario.expectations.length === 0) { + res.status(500) + log.error(`empty_scenario`, { + got: truncateBody(matchableReq), + }) + res.send({ + code: `empty_scenario`, + }) + return + } + + let expectation: Expectation + + if (scenario.mode.name === 'stack') { + expectation = scenario.expectations.shift()! + + if (!match(matchableReq, expectation).matches) { + res.status(500) + log.error(`no_match_next_expected_step`, { + got: matchableReq, + expected: expectation, + }) + res.send({ + code: `no_match_next_expected_step`, + got: truncateBody(matchableReq), + expected: expectation, + }) + return + } + } else if (scenario.mode.name === 'pool') { + const stepIndex = scenario.expectations.findIndex((step) => match(matchableReq, step).matches) + + if (stepIndex === -1) { + res.status(500) + log.error(`no_match_any_remaining_step`, { + got: matchableReq, + remainingSteps: scenario.expectations, + }) + res.send({ + code: `no_match_any_remaining_step`, + got: truncateBody(matchableReq), + remainingSteps: scenario.expectations, + }) + return + } + + expectation = scenario.expectations.splice(stepIndex, 1)[0]! + } else if (scenario.mode.name === 'fixture') { + const expectationFound = fixtureMatch(scenario, matchableReq) + + if (!expectationFound) { + res.status(500) + log.error(`no_match_any_step`, { + got: truncateBody(matchableReq), + steps: scenario.expectations, + }) + res.send({ + code: `no_match_any_step`, + got: truncateBody(matchableReq), + steps: scenario.expectations, + }) + return + } + + expectation = expectationFound + } else { + casesHandled(scenario.mode) + return // TODO why is TS requiring this? + } + + log.trace('expectation_hit', { + got: truncateBody(matchableReq), + response: expectation.response, + }) + + res.status(expectation.response.status ?? responseDefaults.status) + res.send(expectation.response.body) + }) +} + +export const responseDefaults = { + status: 200, +} + +const fixtureMatch = (scenario: Scenario, requestInfo: any): null | Expectation => { + const expectationMatches = scenario.expectations + .map((expectation) => [expectation, match(requestInfo, expectation)] as const) + .filter((res): res is [Expectation, ExpectationMatchSuccess] => { + return res[1].matches + }) + + const expectationFound: null | Expectation = + expectationMatches + .sort(([_, match1], [__, match2]) => { + return match1.specificity > match2.specificity ? -1 : 1 + }) + .map(([expectation]) => expectation)[0] ?? null + + if (expectationFound) { + expectationFound.hits += 1 + } + return expectationFound +} + +/** + * Truncate request info body. This is useful for very large bodies which would otherwise clog up the terminal when + * logged. + * + * @remarks In The case of GitHub actions a large log output will actually cause CI to hang based on [our + * experiences](https://prisma-company.slack.com/archives/G01R4M0GCRJ/p1623687533012400). + */ +function truncateBody(info: MatchableRequest): MatchableRequest { + const size = getBodySize(info) + + if (size && size > 100_000) { + return { + ...info, + body: `Too big to log. Had string length of: ${size}`, + } + } + + return info +} + +/** + * Get the size of an HTTP body. If cannot be determined due to JSON stringify error then returns null. + */ +function getBodySize(body: any): null | number { + if (typeof body === 'string') return body.length + + try { + return JSON.stringify(body).length + } catch (_error) { + return null + } +} + +/** + * Match request to expectation. + * + * @param req - The actual request. + * @param expectation - An expected request to match. + */ +function match(req: MatchableRequest, expectation: Expectation): ExpectationMatchResult { + /** + * Request can match on multiple criteria. The more criteria that matches, the higher the specificity. + */ + let specificity = 0 + + if (expectation.match.method !== '*') { + if (expectation.match.method.toLowerCase() !== req.method.toLowerCase()) return { matches: false } + specificity += 1 + } + + if (expectation.match.path !== '*') { + if (!pathToRegexp(expectation.match.path).exec(req.path)) return { matches: false } + // Each route param detracts from the match strength + const routeParamCount = expectation.match.path.split('/').filter((seg) => seg.startsWith(':')).length + specificity -= routeParamCount + } + + return { + matches: true, + specificity, + } +} diff --git a/src/server/endpoints/scenarioGet.ts b/src/server/endpoints/scenarioGet.ts new file mode 100644 index 0000000..c9ea999 --- /dev/null +++ b/src/server/endpoints/scenarioGet.ts @@ -0,0 +1,19 @@ +import { lookupScenario } from '../helpers' +import { State } from '../server' +import { Express } from 'express' +import { log } from 'floggy' +import { isError } from 'lodash' + +export const scenarioGetEndpoint = (app: Express, state: State) => { + app.post(`/scenario/get`, (req, res) => { + log.trace('get_scenario', req.body) + const scenario = lookupScenario({ + index: state.scenarios, + scope: req.body.scope, + }) + if (isError(scenario)) { + throw scenario + } + res.send(scenario) + }) +} diff --git a/src/server/endpoints/scenarioSet.ts b/src/server/endpoints/scenarioSet.ts new file mode 100644 index 0000000..efa967e --- /dev/null +++ b/src/server/endpoints/scenarioSet.ts @@ -0,0 +1,12 @@ +import { Scenario } from '../../types' +import { State } from '../server' +import { Express } from 'express' +import { log } from 'floggy' + +export const scenarioSetEndpoint = (app: Express, state: State) => { + app.post(`/scenario/set`, (req, res) => { + log.trace('set_scenario', req.body) + state.scenarios[req.body.scope] = req.body.scenario as Scenario + res.send() + }) +} diff --git a/src/server/helpers.ts b/src/server/helpers.ts new file mode 100644 index 0000000..36be0f4 --- /dev/null +++ b/src/server/helpers.ts @@ -0,0 +1,23 @@ +import { Scenario } from '../types' +import { inspect } from 'util' + +export const lookupScenario = ({ + index, + scope, +}: { + index: Record + scope: string +}): Error | Scenario => { + const value = index[scope] + + if (value === undefined) { + return new Error( + `The given scope "${scope}" does not exist. Maybe a typo or did you incorrectly setup your request mocks? Here is what the scenarios index looks like:\n\n${inspect( + index, + { depth: 10 } + )}` + ) + } + + return value +} diff --git a/src/server/server.ts b/src/server/server.ts new file mode 100644 index 0000000..c54b846 --- /dev/null +++ b/src/server/server.ts @@ -0,0 +1,96 @@ +import { serverLog } from '../logger' +import { Scenario } from '../types' +import { mockEndpoints } from './endpoints/mock' +import { scenarioGetEndpoint } from './endpoints/scenarioGet' +import { scenarioSetEndpoint } from './endpoints/scenarioSet' +import { json } from 'body-parser' +import express, { Express } from 'express' +import { createServer, Server } from 'http' + +export type ServerSettings = { + /** + * The port to run the Mockapie server on. + * + * @defaultValue 9000 + */ + port?: number +} + +export type Config = Required + +export type State = { + scenarios: Record +} + +export class MockapieServer { + config: Config + + constructor(settings?: ServerSettings) { + this.config = { + port: 9000, + ...settings, + } + + const state: State = { + scenarios: {}, + } + + /** + * Setup Express app + */ + + const app = express() + + // @ts-expect-error TODO + app.use(json({ limit: '200mb' })) + + /** + * Scenario API + */ + + scenarioSetEndpoint(app, state) + scenarioGetEndpoint(app, state) + + /** + * Mock API, whatever the scenarios allow! + */ + + mockEndpoints(app, state) + + app.use((error: any, _req: any, res: any, _next: any) => { + serverLog.error('uncaught_error', { + error, + }) + res.status(500).send({}) + }) + + this.app = app + this.server = createServer(this.app) + } + + private server: Server + + private app: Express + + start() { + return new Promise((res) => { + this.server.listen(this.config.port, () => { + serverLog.info('server_started', { + config: this.config, + }) + res({ + port: this.config.port, + }) + }) + }) + } + + stop() { + return new Promise((res, rej) => { + this.server.close((err) => { + if (err) return rej(err) + return res(null) + }) + }) + } +} diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..b888aef --- /dev/null +++ b/src/types.ts @@ -0,0 +1,114 @@ +import { LiteralUnion } from 'type-fest' + +export type ExpectationMatchSuccess = { + specificity: number + matches: true +} + +export type ExpectationMatchFailure = { + matches: false +} + +export type ExpectationMatchResult = ExpectationMatchFailure | ExpectationMatchSuccess + +export const HttpMethod = { + get: 'get', + post: 'post', + put: 'put', + delete: 'delete', + patch: 'patch', + options: 'options', + head: 'head', + trace: 'trace', +} as const + +export const HttpMethods = Object.values(HttpMethod) + +export type HttpMethod = keyof typeof HttpMethod + +export const isHttpMethod = (value: string): value is HttpMethod => Boolean(HttpMethods.find((_) => _ === value)) + +export const HTTPStatusCode = { + 200: 200, + 401: 401, + 403: 403, + 404: 404, + 400: 400, + 500: 500, +} as const + +export const HTTPStatusCodes = Object.values(HTTPStatusCode) + +export type HTTPStatusCode = keyof typeof HTTPStatusCode + +export type Expectation = { + /** + * Criteria a request must match for the mock response to be sent. + */ + match: { + /** + * Expect an HTTP method. + * + * The wildcard `"*"` is special and will match any method. + */ + method: '*' | HttpMethod + /** + * Expect a path following the URL host/port. + * + * The wildcard `"*"` is special and will match any path (including the lack of one). + */ + path: LiteralUnion<'*', string> + } + /** + * The mock response to send. + */ + response: { + status?: HTTPStatusCode + /** + * The body of the response. Assumed to be some kind of JSON object. + */ + body?: object + } + // TODO this should be hidden as state inside the server + /** + * How many times has this expectation been used? + */ + hits: number +} + +export type ExpectationSettings = { + method?: '*' | HttpMethod + path?: LiteralUnion<'*', string> + response?: { + status?: HTTPStatusCode + body?: object + } +} + +export type Scenario = { + expectations: Expectation[] + /** + * The mode to execute the scenario in. + */ + mode: + | { + /** + * This mode treats the expectations like fixtures. Requests can match expectations in any order and one or many times. + * + * In this mode, any expectation that was not called at least once is considered a test error. + */ + name: 'fixture' + } + | { + /** + * This mode is semi-strict. Requests must match the exact number of expectations specified but order does not matter. + */ + name: 'pool' + } + | { + /** + * This mode is strict. Requests must match the exact order and number of expectations specified. + */ + name: 'stack' + } +} diff --git a/tsconfig.json b/tsconfig.json index f730a79..520188c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -34,10 +34,9 @@ "~*": ["./src/*"] }, - // Other - // Only enable this for applications. - // Packages doing this force their consumers to. - // "esModuleInterop": true, + // Forced by columnify TODO drop that dep? + "esModuleInterop": true, + "skipLibCheck": true, // Transformer Plugins made possible by https://github.com/nonara/ts-patch "plugins": [ diff --git a/yarn.lock b/yarn.lock index 1071b0a..868840e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -63,6 +63,13 @@ __metadata: languageName: node linkType: hard +"@jsdevtools/ono@npm:^7.1.3": + version: 7.1.3 + resolution: "@jsdevtools/ono@npm:7.1.3" + checksum: 2297fcd472ba810bffe8519d2249171132844c7174f3a16634f9260761c8c78bc0428a4190b5b6d72d45673c13918ab9844d706c3ed4ef8f62ab11a2627a08ad + languageName: node + linkType: hard + "@kwsites/file-exists@npm:^1.1.1": version: 1.1.1 resolution: "@kwsites/file-exists@npm:1.1.1" @@ -363,6 +370,22 @@ __metadata: languageName: node linkType: hard +"@sindresorhus/is@npm:^4.2.0": + version: 4.4.0 + resolution: "@sindresorhus/is@npm:4.4.0" + checksum: 1d2471a75e03ce2182c3a3d014d027addeaeae1a7a2adfdb03c91cce17900b207e493db012e35ffa21808c563ce3b8e2e7c24646b3d5c27467e08bef8b0e16f0 + languageName: node + linkType: hard + +"@szmarczak/http-timer@npm:^5.0.1": + version: 5.0.1 + resolution: "@szmarczak/http-timer@npm:5.0.1" + dependencies: + defer-to-connect: ^2.0.1 + checksum: fc9cb993e808806692e4a3337c90ece0ec00c89f4b67e3652a356b89730da98bc824273a6d67ca84d5f33cd85f317dcd5ce39d8cc0a2f060145a608a7cb8ce92 + languageName: node + linkType: hard + "@tootallnate/once@npm:1": version: 1.1.2 resolution: "@tootallnate/once@npm:1.1.2" @@ -398,6 +421,44 @@ __metadata: languageName: node linkType: hard +"@types/body-parser@npm:*, @types/body-parser@npm:^1.19.2": + version: 1.19.2 + resolution: "@types/body-parser@npm:1.19.2" + dependencies: + "@types/connect": "*" + "@types/node": "*" + checksum: e17840c7d747a549f00aebe72c89313d09fbc4b632b949b2470c5cb3b1cb73863901ae84d9335b567a79ec5efcfb8a28ff8e3f36bc8748a9686756b6d5681f40 + languageName: node + linkType: hard + +"@types/cacheable-request@npm:^6.0.2": + version: 6.0.2 + resolution: "@types/cacheable-request@npm:6.0.2" + dependencies: + "@types/http-cache-semantics": "*" + "@types/keyv": "*" + "@types/node": "*" + "@types/responselike": "*" + checksum: 667d25808dbf46fe104d6f029e0281ff56058d50c7c1b9182774b3e38bb9c1124f56e4c367ba54f92dbde2d1cc573f26eb0e9748710b2822bc0fd1e5498859c6 + languageName: node + linkType: hard + +"@types/columnify@npm:^1.5.1": + version: 1.5.1 + resolution: "@types/columnify@npm:1.5.1" + checksum: b377e961e38f1f3ad96ce6832349b3a04ae3e09695ab7f16d80f456fb292686cdd32d7040481e29e38b37cee0f3add34a09d2085d11ed8cd1fd71ad031eb6798 + languageName: node + linkType: hard + +"@types/connect@npm:*": + version: 3.4.35 + resolution: "@types/connect@npm:3.4.35" + dependencies: + "@types/node": "*" + checksum: fe81351470f2d3165e8b12ce33542eef89ea893e36dd62e8f7d72566dfb7e448376ae962f9f3ea888547ce8b55a40020ca0e01d637fab5d99567673084542641 + languageName: node + linkType: hard + "@types/debug@npm:^4.1.5": version: 4.1.7 resolution: "@types/debug@npm:4.1.7" @@ -407,6 +468,36 @@ __metadata: languageName: node linkType: hard +"@types/express-serve-static-core@npm:^4.17.18, @types/express-serve-static-core@npm:^4.17.28": + version: 4.17.28 + resolution: "@types/express-serve-static-core@npm:4.17.28" + dependencies: + "@types/node": "*" + "@types/qs": "*" + "@types/range-parser": "*" + checksum: 826489811a5b371c10f02443b4ca894ffc05813bfdf2b60c224f5c18ac9a30a2e518cb9ef9fdfcaa2a1bb17f8bfa4ed1859ccdb252e879c9276271b4ee2df5a9 + languageName: node + linkType: hard + +"@types/express@npm:^4": + version: 4.17.13 + resolution: "@types/express@npm:4.17.13" + dependencies: + "@types/body-parser": "*" + "@types/express-serve-static-core": ^4.17.18 + "@types/qs": "*" + "@types/serve-static": "*" + checksum: 12a2a0e6c4b993fc0854bec665906788aea0d8ee4392389d7a98a5de1eefdd33c9e1e40a91f3afd274011119c506f7b4126acb97fae62ae20b654974d44cba12 + languageName: node + linkType: hard + +"@types/http-cache-semantics@npm:*": + version: 4.0.1 + resolution: "@types/http-cache-semantics@npm:4.0.1" + checksum: 1048aacf627829f0d5f00184e16548205cd9f964bf0841c29b36bc504509230c40bc57c39778703a1c965a6f5b416ae2cbf4c1d4589c889d2838dd9dbfccf6e9 + languageName: node + linkType: hard + "@types/json-schema@npm:^7.0.9": version: 7.0.9 resolution: "@types/json-schema@npm:7.0.9" @@ -414,6 +505,29 @@ __metadata: languageName: node linkType: hard +"@types/keyv@npm:*": + version: 3.1.3 + resolution: "@types/keyv@npm:3.1.3" + dependencies: + "@types/node": "*" + checksum: b5f8aa592cc21c16d99e69aec0976f12b893b055e4456d90148a610a6b6088e297b2ba5f38f8c8280cef006cfd8f9ec99e069905020882619dc5fc8aa46f5f27 + languageName: node + linkType: hard + +"@types/lodash@npm:^4": + version: 4.14.178 + resolution: "@types/lodash@npm:4.14.178" + checksum: a69a04a60bfc5257c3130a554b4efa0c383f0141b7b3db8ab7cf07ad2a46ea085fce66d0242da41da7e5647b133d5dfb2c15add9cbed8d7fef955e4a1e5b3128 + languageName: node + linkType: hard + +"@types/mime@npm:^1": + version: 1.3.2 + resolution: "@types/mime@npm:1.3.2" + checksum: 0493368244cced1a69cb791b485a260a422e6fcc857782e1178d1e6f219f1b161793e9f87f5fae1b219af0f50bee24fcbe733a18b4be8fdd07a38a8fb91146fd + languageName: node + linkType: hard + "@types/ms@npm:*": version: 0.7.31 resolution: "@types/ms@npm:0.7.31" @@ -451,6 +565,39 @@ __metadata: languageName: node linkType: hard +"@types/qs@npm:*": + version: 6.9.7 + resolution: "@types/qs@npm:6.9.7" + checksum: 7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba + languageName: node + linkType: hard + +"@types/range-parser@npm:*": + version: 1.2.4 + resolution: "@types/range-parser@npm:1.2.4" + checksum: b7c0dfd5080a989d6c8bb0b6750fc0933d9acabeb476da6fe71d8bdf1ab65e37c136169d84148034802f48378ab94e3c37bb4ef7656b2bec2cb9c0f8d4146a95 + languageName: node + linkType: hard + +"@types/responselike@npm:*, @types/responselike@npm:^1.0.0": + version: 1.0.0 + resolution: "@types/responselike@npm:1.0.0" + dependencies: + "@types/node": "*" + checksum: e99fc7cc6265407987b30deda54c1c24bb1478803faf6037557a774b2f034c5b097ffd65847daa87e82a61a250d919f35c3588654b0fdaa816906650f596d1b0 + languageName: node + linkType: hard + +"@types/serve-static@npm:*": + version: 1.13.10 + resolution: "@types/serve-static@npm:1.13.10" + dependencies: + "@types/mime": ^1 + "@types/node": "*" + checksum: eaca858739483e3ded254cad7d7a679dc2c8b3f52c8bb0cd845b3b7eb1984bde0371fdcb0a5c83aa12e6daf61b6beb762545021f520f08a1fe882a3fa4ea5554 + languageName: node + linkType: hard + "@typescript-eslint/eslint-plugin@npm:5.11.0": version: 5.11.0 resolution: "@typescript-eslint/eslint-plugin@npm:5.11.0" @@ -647,6 +794,16 @@ __metadata: languageName: node linkType: hard +"accepts@npm:~1.3.7": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: ~2.1.34 + negotiator: 0.6.3 + checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.1": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -866,6 +1023,13 @@ __metadata: languageName: node linkType: hard +"array-flatten@npm:1.1.1": + version: 1.1.1 + resolution: "array-flatten@npm:1.1.1" + checksum: a9925bf3512d9dce202112965de90c222cd59a4fbfce68a0951d25d965cf44642931f40aac72309c41f12df19afa010ecadceb07cfff9ccc1621e99d89ab5f3b + languageName: node + linkType: hard + "array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" @@ -1051,6 +1215,24 @@ __metadata: languageName: node linkType: hard +"body-parser@npm:1.19.1": + version: 1.19.1 + resolution: "body-parser@npm:1.19.1" + dependencies: + bytes: 3.1.1 + content-type: ~1.0.4 + debug: 2.6.9 + depd: ~1.1.2 + http-errors: 1.8.1 + iconv-lite: 0.4.24 + on-finished: ~2.3.0 + qs: 6.9.6 + raw-body: 2.4.2 + type-is: ~1.6.18 + checksum: 9197a300a6580b8723c7b6b1e22cebd5ba47cd4a6fd45c153350efcde79293869ddee8d17d95fb52724812d649d89d62775faab072608d3243a0cbb00582234e + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -1077,6 +1259,13 @@ __metadata: languageName: node linkType: hard +"bytes@npm:3.1.1": + version: 3.1.1 + resolution: "bytes@npm:3.1.1" + checksum: 949ab99a385d6acf4d2c69f1afc618615dc905936e0b0b9aa94a9e94d722baaba44d6a0851536585a0892ae4d462b5a270ccb1b04c774640742cbde5538ca328 + languageName: node + linkType: hard + "cacache@npm:^15.0.5": version: 15.3.0 resolution: "cacache@npm:15.3.0" @@ -1103,6 +1292,28 @@ __metadata: languageName: node linkType: hard +"cacheable-lookup@npm:^6.0.4": + version: 6.0.4 + resolution: "cacheable-lookup@npm:6.0.4" + checksum: 7aea70f5ea081aed12bf54fc165b9f80b580b0d210c85d55cc8fed2beaa9027fd321c1939c65dad945fe9eb207cea45442e01a48b5aa57542e125b716f022b6d + languageName: node + linkType: hard + +"cacheable-request@npm:^7.0.2": + version: 7.0.2 + resolution: "cacheable-request@npm:7.0.2" + dependencies: + clone-response: ^1.0.2 + get-stream: ^5.1.0 + http-cache-semantics: ^4.0.0 + keyv: ^4.0.0 + lowercase-keys: ^2.0.0 + normalize-url: ^6.0.1 + responselike: ^2.0.0 + checksum: 6152813982945a5c9989cb457a6c499f12edcc7ade323d2fbfd759abc860bdbd1306e08096916bb413c3c47e812f8e4c0a0cc1e112c8ce94381a960f115bc77f + languageName: node + linkType: hard + "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -1268,6 +1479,22 @@ __metadata: languageName: node linkType: hard +"clone-response@npm:^1.0.2": + version: 1.0.2 + resolution: "clone-response@npm:1.0.2" + dependencies: + mimic-response: ^1.0.0 + checksum: 2d0e61547fc66276e0903be9654ada422515f5a15741691352000d47e8c00c226061221074ce2c0064d12e975e84a8687cfd35d8b405750cb4e772f87b256eda + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd + languageName: node + linkType: hard + "code-excerpt@npm:^3.0.0": version: 3.0.0 resolution: "code-excerpt@npm:3.0.0" @@ -1326,6 +1553,16 @@ __metadata: languageName: node linkType: hard +"columnify@npm:^1.6.0": + version: 1.6.0 + resolution: "columnify@npm:1.6.0" + dependencies: + strip-ansi: ^6.0.1 + wcwidth: ^1.0.0 + checksum: 0d590023616a27bcd2135c0f6ddd6fac94543263f9995538bbe391068976e30545e5534d369737ec7c3e9db4e53e70a277462de46aeb5a36e6997b4c7559c335 + languageName: node + linkType: hard + "combined-stream@npm:^1.0.6, combined-stream@npm:~1.0.6": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" @@ -1400,6 +1637,22 @@ __metadata: languageName: node linkType: hard +"content-disposition@npm:0.5.4": + version: 0.5.4 + resolution: "content-disposition@npm:0.5.4" + dependencies: + safe-buffer: 5.2.1 + checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3 + languageName: node + linkType: hard + +"content-type@npm:~1.0.4": + version: 1.0.4 + resolution: "content-type@npm:1.0.4" + checksum: 3d93585fda985d1554eca5ebd251994327608d2e200978fdbfba21c0c679914d5faf266d17027de44b34a72c7b0745b18584ecccaa7e1fdfb6a68ac7114f12e0 + languageName: node + linkType: hard + "convert-to-spaces@npm:^1.0.1": version: 1.0.2 resolution: "convert-to-spaces@npm:1.0.2" @@ -1407,6 +1660,20 @@ __metadata: languageName: node linkType: hard +"cookie-signature@npm:1.0.6": + version: 1.0.6 + resolution: "cookie-signature@npm:1.0.6" + checksum: f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a + languageName: node + linkType: hard + +"cookie@npm:0.4.1": + version: 0.4.1 + resolution: "cookie@npm:0.4.1" + checksum: bd7c47f5d94ab70ccdfe8210cde7d725880d2fcda06d8e375afbdd82de0c8d3b73541996e9ce57d35f67f672c4ee6d60208adec06b3c5fc94cebb85196084cf8 + languageName: node + linkType: hard + "core-util-is@npm:1.0.2": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" @@ -1478,6 +1745,15 @@ __metadata: languageName: node linkType: hard +"debug@npm:2.6.9": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: 2.0.0 + checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 + languageName: node + linkType: hard + "debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2": version: 4.3.2 resolution: "debug@npm:4.3.2" @@ -1511,6 +1787,22 @@ __metadata: languageName: node linkType: hard +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: ^3.1.0 + checksum: d377cf47e02d805e283866c3f50d3d21578b779731e8c5072d6ce8c13cc31493db1c2f6784da9d1d5250822120cefa44f1deab112d5981015f2e17444b763812 + languageName: node + linkType: hard + +"dedent@npm:^0.7.0": + version: 0.7.0 + resolution: "dedent@npm:0.7.0" + checksum: 87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2 + languageName: node + linkType: hard + "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -1518,6 +1810,22 @@ __metadata: languageName: node linkType: hard +"defaults@npm:^1.0.3": + version: 1.0.3 + resolution: "defaults@npm:1.0.3" + dependencies: + clone: ^1.0.2 + checksum: 96e2112da6553d376afd5265ea7cbdb2a3b45535965d71ab8bb1da10c8126d168fdd5268799625324b368356d21ba2a7b3d4ec50961f11a47b7feb9de3d4413e + languageName: node + linkType: hard + +"defer-to-connect@npm:^2.0.1": + version: 2.0.1 + resolution: "defer-to-connect@npm:2.0.1" + checksum: 8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b + languageName: node + linkType: hard + "del@npm:^6.0.0": version: 6.0.0 resolution: "del@npm:6.0.0" @@ -1548,7 +1856,7 @@ __metadata: languageName: node linkType: hard -"depd@npm:^1.1.2": +"depd@npm:^1.1.2, depd@npm:~1.1.2": version: 1.1.2 resolution: "depd@npm:1.1.2" checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 @@ -1562,6 +1870,13 @@ __metadata: languageName: node linkType: hard +"destroy@npm:~1.0.4": + version: 1.0.4 + resolution: "destroy@npm:1.0.4" + checksum: da9ab4961dc61677c709da0c25ef01733042614453924d65636a7db37308fef8a24cd1e07172e61173d471ca175371295fbc984b0af5b2b4ff47cd57bd784c03 + languageName: node + linkType: hard + "diacritics-map@npm:^0.1.0": version: 0.1.0 resolution: "diacritics-map@npm:0.1.0" @@ -1645,6 +1960,13 @@ __metadata: languageName: node linkType: hard +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f + languageName: node + linkType: hard + "emittery@npm:^0.10.0": version: 0.10.0 resolution: "emittery@npm:0.10.0" @@ -1666,6 +1988,13 @@ __metadata: languageName: node linkType: hard +"encodeurl@npm:~1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c + languageName: node + linkType: hard + "encoding@npm:^0.1.12": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -1675,6 +2004,26 @@ __metadata: languageName: node linkType: hard +"end-of-stream@npm:^1.1.0": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: ^1.4.0 + checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + languageName: node + linkType: hard + +"endent@npm:^2.1.0": + version: 2.1.0 + resolution: "endent@npm:2.1.0" + dependencies: + dedent: ^0.7.0 + fast-json-parse: ^1.0.3 + objectorarray: ^1.0.5 + checksum: c352831088fce745a39ddbd5f87a17e073ea6556e7e96e9010d945a3f3020f836b9a84657123fa01e897db9216f4b080d950b5ded9bf3a8227f14a34efaaaf7c + languageName: node + linkType: hard + "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -1696,6 +2045,13 @@ __metadata: languageName: node linkType: hard +"escape-html@npm:~1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 + languageName: node + linkType: hard + "escape-string-regexp@npm:4.0.0, escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" @@ -1941,6 +2297,13 @@ __metadata: languageName: node linkType: hard +"etag@npm:~1.8.1": + version: 1.8.1 + resolution: "etag@npm:1.8.1" + checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff + languageName: node + linkType: hard + "exit-on-epipe@npm:~1.0.1": version: 1.0.1 resolution: "exit-on-epipe@npm:1.0.1" @@ -1957,6 +2320,51 @@ __metadata: languageName: node linkType: hard +"express-serve-static-core@npm:^0.1.1": + version: 0.1.1 + resolution: "express-serve-static-core@npm:0.1.1" + checksum: 0f387ae5c12f51b9e843ade07bd412b4a0cbe23bbd5e95e047e45f4b3e1a6aa6bee53f765b039441f93110401221ec23a533844dce3e4f118e38cda5ed3dba0a + languageName: node + linkType: hard + +"express@npm:^4.17.2": + version: 4.17.2 + resolution: "express@npm:4.17.2" + dependencies: + accepts: ~1.3.7 + array-flatten: 1.1.1 + body-parser: 1.19.1 + content-disposition: 0.5.4 + content-type: ~1.0.4 + cookie: 0.4.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: ~1.1.2 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + etag: ~1.8.1 + finalhandler: ~1.1.2 + fresh: 0.5.2 + merge-descriptors: 1.0.1 + methods: ~1.1.2 + on-finished: ~2.3.0 + parseurl: ~1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: ~2.0.7 + qs: 6.9.6 + range-parser: ~1.2.1 + safe-buffer: 5.2.1 + send: 0.17.2 + serve-static: 1.14.2 + setprototypeof: 1.2.0 + statuses: ~1.5.0 + type-is: ~1.6.18 + utils-merge: 1.0.1 + vary: ~1.1.2 + checksum: 1535d56d20e65a1a39b5f056c025dd635290a744478ac69cc47633aeb4b2ce51458f8eb4080cfb7ba47c853ba5cfd794d404cff822a25127f1556b726ec3914a + languageName: node + linkType: hard + "extend-shallow@npm:^2.0.1": version: 2.0.1 resolution: "extend-shallow@npm:2.0.1" @@ -2027,6 +2435,13 @@ __metadata: languageName: node linkType: hard +"fast-json-parse@npm:^1.0.3": + version: 1.0.3 + resolution: "fast-json-parse@npm:1.0.3" + checksum: c19117c56ec18a9aa133c8ebf450c99d1037117e47a3cb9aff91b60580ba48d0fd8484b696c26749a1b9cb4914084177b3fa9ebef72063a74dee7d9ead987603 + languageName: node + linkType: hard + "fast-json-stable-stringify@npm:^2.0.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" @@ -2091,6 +2506,21 @@ __metadata: languageName: node linkType: hard +"finalhandler@npm:~1.1.2": + version: 1.1.2 + resolution: "finalhandler@npm:1.1.2" + dependencies: + debug: 2.6.9 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + on-finished: ~2.3.0 + parseurl: ~1.3.3 + statuses: ~1.5.0 + unpipe: ~1.0.0 + checksum: 617880460c5138dd7ccfd555cb5dde4d8f170f4b31b8bd51e4b646bb2946c30f7db716428a1f2882d730d2b72afb47d1f67cc487b874cb15426f95753a88965e + languageName: node + linkType: hard + "find-up@npm:^6.0.0": version: 6.2.0 resolution: "find-up@npm:6.2.0" @@ -2118,6 +2548,19 @@ __metadata: languageName: node linkType: hard +"floggy@npm:^0.3.2": + version: 0.3.2 + resolution: "floggy@npm:0.3.2" + dependencies: + fp-ts: ^2.11.3 + kleur: ^4.1.4 + lodash: ^4.17.21 + strip-ansi: 6 + tslib: ^2.3.1 + checksum: d3e150b05875bd4ac96ef54e96de03bc137b65476be970e88668d7416ced9d9f32f6d40ba69ee7e298746b6c616a46ab5d2da650be66fbe06da36cdd5f669256 + languageName: node + linkType: hard + "for-in@npm:^1.0.2": version: 1.0.2 resolution: "for-in@npm:1.0.2" @@ -2132,6 +2575,13 @@ __metadata: languageName: node linkType: hard +"form-data-encoder@npm:1.7.1": + version: 1.7.1 + resolution: "form-data-encoder@npm:1.7.1" + checksum: a2a360d5588a70d323c12a140c3db23a503a38f0a5d141af1efad579dde9f9fff2e49e5f31f378cb4631518c1ab4a826452c92f0d2869e954b6b2d77b05613e1 + languageName: node + linkType: hard + "form-data@npm:~2.3.2": version: 2.3.3 resolution: "form-data@npm:2.3.3" @@ -2143,6 +2593,27 @@ __metadata: languageName: node linkType: hard +"forwarded@npm:0.2.0": + version: 0.2.0 + resolution: "forwarded@npm:0.2.0" + checksum: fd27e2394d8887ebd16a66ffc889dc983fbbd797d5d3f01087c020283c0f019a7d05ee85669383d8e0d216b116d720fc0cef2f6e9b7eb9f4c90c6e0bc7fd28e6 + languageName: node + linkType: hard + +"fp-ts@npm:^2.11.3": + version: 2.11.8 + resolution: "fp-ts@npm:2.11.8" + checksum: 481b824797ba59f3f5549810e8f6688b27554790d11a470ccdf4fc086a1cb4993ffb9060131b054abccca703f2776993e12f649865143e178e9b7c9e5b295ea7 + languageName: node + linkType: hard + +"fresh@npm:0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 + languageName: node + linkType: hard + "fs-extra@npm:^8.1": version: 8.1.0 resolution: "fs-extra@npm:8.1.0" @@ -2235,6 +2706,22 @@ fsevents@~2.3.2: languageName: node linkType: hard +"get-stream@npm:^5.1.0": + version: 5.2.0 + resolution: "get-stream@npm:5.2.0" + dependencies: + pump: ^3.0.0 + checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12 + languageName: node + linkType: hard + +"get-stream@npm:^6.0.1": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad + languageName: node + linkType: hard + "getpass@npm:^0.1.1": version: 0.1.7 resolution: "getpass@npm:0.1.7" @@ -2331,6 +2818,27 @@ fsevents@~2.3.2: languageName: node linkType: hard +"got@npm:^12.0.1": + version: 12.0.1 + resolution: "got@npm:12.0.1" + dependencies: + "@sindresorhus/is": ^4.2.0 + "@szmarczak/http-timer": ^5.0.1 + "@types/cacheable-request": ^6.0.2 + "@types/responselike": ^1.0.0 + cacheable-lookup: ^6.0.4 + cacheable-request: ^7.0.2 + decompress-response: ^6.0.0 + form-data-encoder: 1.7.1 + get-stream: ^6.0.1 + http2-wrapper: ^2.1.9 + lowercase-keys: ^3.0.0 + p-cancelable: ^3.0.0 + responselike: ^2.0.0 + checksum: 216ef6f1542eedeb45f1af5e868c64ced3ffdcdedf0e8c3474a528806a0f22d79d0943f97adf031c2ef90602836a9a31515dd7610edaea8f73b6e9cdf4cc39a7 + languageName: node + linkType: hard + "graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.8 resolution: "graceful-fs@npm:4.2.8" @@ -2409,13 +2917,26 @@ fsevents@~2.3.2: languageName: node linkType: hard -"http-cache-semantics@npm:^4.1.0": +"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0": version: 4.1.0 resolution: "http-cache-semantics@npm:4.1.0" checksum: 974de94a81c5474be07f269f9fd8383e92ebb5a448208223bfb39e172a9dbc26feff250192ecc23b9593b3f92098e010406b0f24bd4d588d631f80214648ed42 languageName: node linkType: hard +"http-errors@npm:1.8.1": + version: 1.8.1 + resolution: "http-errors@npm:1.8.1" + dependencies: + depd: ~1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: ">= 1.5.0 < 2" + toidentifier: 1.0.1 + checksum: d3c7e7e776fd51c0a812baff570bdf06fe49a5dc448b700ab6171b1250e4cf7db8b8f4c0b133e4bfe2451022a5790c1ca6c2cae4094dedd6ac8304a1267f91d2 + languageName: node + linkType: hard + "http-proxy-agent@npm:^4.0.1": version: 4.0.1 resolution: "http-proxy-agent@npm:4.0.1" @@ -2438,6 +2959,16 @@ fsevents@~2.3.2: languageName: node linkType: hard +"http2-wrapper@npm:^2.1.9": + version: 2.1.10 + resolution: "http2-wrapper@npm:2.1.10" + dependencies: + quick-lru: ^5.1.1 + resolve-alpn: ^1.2.0 + checksum: 54de29576081469998fe48a0de61026dc212373b7e9028fb1b3c393a0aba49610d53e4b8b35cb1d8e40e0c32925705d6c3fb7c7babf8c5ab7953c69149d0ab9d + languageName: node + linkType: hard + "https-proxy-agent@npm:^5.0.0": version: 5.0.0 resolution: "https-proxy-agent@npm:5.0.0" @@ -2457,6 +2988,15 @@ fsevents@~2.3.2: languageName: node linkType: hard +"iconv-lite@npm:0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: ">= 2.1.2 < 3" + checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 + languageName: node + linkType: hard + "iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" @@ -2542,7 +3082,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -2570,6 +3110,13 @@ fsevents@~2.3.2: languageName: node linkType: hard +"ipaddr.js@npm:1.9.1": + version: 1.9.1 + resolution: "ipaddr.js@npm:1.9.1" + checksum: f88d3825981486f5a1942414c8d77dd6674dd71c065adcfa46f578d677edcb99fda25af42675cb59db492fdf427b34a5abfcde3982da11a8fd83a500b41cfe77 + languageName: node + linkType: hard + "irregular-plurals@npm:^3.3.0": version: 3.3.0 resolution: "irregular-plurals@npm:3.3.0" @@ -2890,6 +3437,13 @@ fsevents@~2.3.2: languageName: node linkType: hard +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 + languageName: node + linkType: hard + "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -2942,6 +3496,15 @@ fsevents@~2.3.2: languageName: node linkType: hard +"keyv@npm:^4.0.0": + version: 4.1.1 + resolution: "keyv@npm:4.1.1" + dependencies: + json-buffer: 3.0.1 + checksum: b141fe29405413e7ca4ea0dfd19a48e25d909834f032aafdf4b0c6be177087cc1177b9c0ffdabd41ac8a65c13b92dcd2ec8688f540fbb458efdb9c8730bbd102 + languageName: node + linkType: hard + "kind-of@npm:^3.0.2": version: 3.2.2 resolution: "kind-of@npm:3.2.2" @@ -2958,6 +3521,13 @@ fsevents@~2.3.2: languageName: node linkType: hard +"kleur@npm:^4.1.4": + version: 4.1.4 + resolution: "kleur@npm:4.1.4" + checksum: 7f6db36e378045dec14acd3cbf0b1e59130c09e984ee8b8ce56dd2d2257cfff90389c1e8f8b19bd09dd5d241080566a814b4ccd99fdcef91f59ef93ec33c8a44 + languageName: node + linkType: hard + "lazy-cache@npm:^2.0.2": version: 2.0.2 resolution: "lazy-cache@npm:2.0.2" @@ -3038,13 +3608,27 @@ fsevents@~2.3.2: languageName: node linkType: hard -"lodash@npm:^4.17.15": +"lodash@npm:^4.17.15, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 languageName: node linkType: hard +"lowercase-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "lowercase-keys@npm:2.0.0" + checksum: 24d7ebd56ccdf15ff529ca9e08863f3c54b0b9d1edb97a3ae1af34940ae666c01a1e6d200707bce730a8ef76cb57cc10e65f245ecaaf7e6bc8639f2fb460ac23 + languageName: node + linkType: hard + +"lowercase-keys@npm:^3.0.0": + version: 3.0.0 + resolution: "lowercase-keys@npm:3.0.0" + checksum: 67a3f81409af969bc0c4ca0e76cd7d16adb1e25aa1c197229587eaf8671275c8c067cd421795dbca4c81be0098e4c426a086a05e30de8a9c587b7a13c0c7ccc5 + languageName: node + linkType: hard + "lru-cache@npm:^6.0.0": version: 6.0.0 resolution: "lru-cache@npm:6.0.0" @@ -3147,6 +3731,13 @@ fsevents@~2.3.2: languageName: node linkType: hard +"media-typer@npm:0.3.0": + version: 0.3.0 + resolution: "media-typer@npm:0.3.0" + checksum: af1b38516c28ec95d6b0826f6c8f276c58aec391f76be42aa07646b4e39d317723e869700933ca6995b056db4b09a78c92d5440dc23657e6764be5d28874bba1 + languageName: node + linkType: hard + "mem@npm:^9.0.1": version: 9.0.2 resolution: "mem@npm:9.0.2" @@ -3157,6 +3748,13 @@ fsevents@~2.3.2: languageName: node linkType: hard +"merge-descriptors@npm:1.0.1": + version: 1.0.1 + resolution: "merge-descriptors@npm:1.0.1" + checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 + languageName: node + linkType: hard + "merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" @@ -3164,6 +3762,13 @@ fsevents@~2.3.2: languageName: node linkType: hard +"methods@npm:~1.1.2": + version: 1.1.2 + resolution: "methods@npm:1.1.2" + checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a + languageName: node + linkType: hard + "micromatch@npm:^4.0.4": version: 4.0.4 resolution: "micromatch@npm:4.0.4" @@ -3181,6 +3786,13 @@ fsevents@~2.3.2: languageName: node linkType: hard +"mime-db@npm:1.51.0": + version: 1.51.0 + resolution: "mime-db@npm:1.51.0" + checksum: 613b1ac9d6e725cc24444600b124a7f1ce6c60b1baa654f39a3e260d0995a6dffc5693190217e271af7e2a5612dae19f2a73f3e316707d797a7391165f7ef423 + languageName: node + linkType: hard + "mime-types@npm:^2.1.12, mime-types@npm:~2.1.19": version: 2.1.32 resolution: "mime-types@npm:2.1.32" @@ -3190,6 +3802,24 @@ fsevents@~2.3.2: languageName: node linkType: hard +"mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": + version: 2.1.34 + resolution: "mime-types@npm:2.1.34" + dependencies: + mime-db: 1.51.0 + checksum: 67013de9e9d6799bde6d669d18785b7e18bcd212e710d3e04a4727f92f67a8ad4e74aee24be28b685adb794944814bde649119b58ee3282ffdbee58f9278d9f3 + languageName: node + linkType: hard + +"mime@npm:1.6.0": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 + languageName: node + linkType: hard + "mimic-fn@npm:^4.0.0": version: 4.0.0 resolution: "mimic-fn@npm:4.0.0" @@ -3197,6 +3827,13 @@ fsevents@~2.3.2: languageName: node linkType: hard +"mimic-response@npm:^1.0.0": + version: 1.0.1 + resolution: "mimic-response@npm:1.0.1" + checksum: 034c78753b0e622bc03c983663b1cdf66d03861050e0c8606563d149bc2b02d63f62ce4d32be4ab50d0553ae0ffe647fc34d1f5281184c6e1e8cf4d85e8d9823 + languageName: node + linkType: hard + "mimic-response@npm:^2.0.0": version: 2.1.0 resolution: "mimic-response@npm:2.1.0" @@ -3204,6 +3841,13 @@ fsevents@~2.3.2: languageName: node linkType: hard +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 25739fee32c17f433626bf19f016df9036b75b3d84a3046c7d156e72ec963dd29d7fc8a302f55a3d6c5a4ff24259676b15d915aad6480815a969ff2ec0836867 + languageName: node + linkType: hard + "minimatch@npm:^3.0.2, minimatch@npm:^3.0.4": version: 3.0.4 resolution: "minimatch@npm:3.0.4" @@ -3322,12 +3966,20 @@ fsevents@~2.3.2: version: 0.0.0-use.local resolution: "mockapie@workspace:." dependencies: + "@jsdevtools/ono": ^7.1.3 "@prisma-labs/prettier-config": 0.1.0 + "@types/body-parser": ^1.19.2 + "@types/columnify": ^1.5.1 + "@types/express": ^4 + "@types/express-serve-static-core": ^4.17.28 + "@types/lodash": ^4 "@types/node": 17.0.13 "@typescript-eslint/eslint-plugin": 5.11.0 "@typescript-eslint/parser": 5.11.0 ava: 4.0.1 + columnify: ^1.6.0 dripip: 0.10.0 + endent: ^2.1.0 eslint: 8.8.0 eslint-config-prettier: 8.3.0 eslint-plugin-deprecation: 1.3.2 @@ -3335,17 +3987,31 @@ fsevents@~2.3.2: eslint-plugin-prefer-arrow: 1.2.3 eslint-plugin-simple-import-sort: 7.0.0 eslint-plugin-tsdoc: 0.2.14 + express: ^4.17.2 + express-serve-static-core: ^0.1.1 + floggy: ^0.3.2 + got: ^12.0.1 + lodash: ^4.17.21 markdown-toc: 1.2.0 + path-to-regexp: ^6.2.0 prettier: 2.5.1 ts-node: 10.5.0 ts-patch: 2.0.1 tslib: ^2.3.1 + type-fest: ^2.11.1 typescript: 4.5.5 typescript-snapshots-plugin: 1.7.0 typescript-transform-paths: 3.3.1 languageName: unknown linkType: soft +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 + languageName: node + linkType: hard + "ms@npm:2.1.2": version: 2.1.2 resolution: "ms@npm:2.1.2" @@ -3353,7 +4019,7 @@ fsevents@~2.3.2: languageName: node linkType: hard -"ms@npm:^2.0.0, ms@npm:^2.1.3": +"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -3367,6 +4033,13 @@ fsevents@~2.3.2: languageName: node linkType: hard +"negotiator@npm:0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + "node-fetch@npm:^2.6.1": version: 2.6.2 resolution: "node-fetch@npm:2.6.2" @@ -3419,6 +4092,13 @@ fsevents@~2.3.2: languageName: node linkType: hard +"normalize-url@npm:^6.0.1": + version: 6.1.0 + resolution: "normalize-url@npm:6.1.0" + checksum: 4a4944631173e7d521d6b80e4c85ccaeceb2870f315584fa30121f505a6dfd86439c5e3fdd8cd9e0e291290c41d0c3599f0cb12ab356722ed242584c30348e50 + languageName: node + linkType: hard + "npmlog@npm:^4.1.2": version: 4.1.2 resolution: "npmlog@npm:4.1.2" @@ -3461,6 +4141,22 @@ fsevents@~2.3.2: languageName: node linkType: hard +"objectorarray@npm:^1.0.5": + version: 1.0.5 + resolution: "objectorarray@npm:1.0.5" + checksum: 8fd776aa495d113e217837f4adc1d53e63f656498237094d25f84c3e2c038b34b71d6fd85c4b60c7ae5f558790e5042426a400fae3eac35f297e11be12643a78 + languageName: node + linkType: hard + +"on-finished@npm:~2.3.0": + version: 2.3.0 + resolution: "on-finished@npm:2.3.0" + dependencies: + ee-first: 1.1.1 + checksum: 1db595bd963b0124d6fa261d18320422407b8f01dc65863840f3ddaaf7bcad5b28ff6847286703ca53f4ec19595bd67a2f1253db79fc4094911ec6aa8df1671b + languageName: node + linkType: hard + "once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -3484,6 +4180,13 @@ fsevents@~2.3.2: languageName: node linkType: hard +"p-cancelable@npm:^3.0.0": + version: 3.0.0 + resolution: "p-cancelable@npm:3.0.0" + checksum: 2b5ae34218f9c2cf7a7c18e5d9a726ef9b165ef07e6c959f6738371509e747334b5f78f3bcdeb03d8a12dcb978faf641fd87eb21486ed7d36fb823b8ddef3219 + languageName: node + linkType: hard + "p-defer@npm:^1.0.0": version: 1.0.0 resolution: "p-defer@npm:1.0.0" @@ -3585,6 +4288,13 @@ fsevents@~2.3.2: languageName: node linkType: hard +"parseurl@npm:~1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 + languageName: node + linkType: hard + "path-exists@npm:^5.0.0": version: 5.0.0 resolution: "path-exists@npm:5.0.0" @@ -3613,6 +4323,20 @@ fsevents@~2.3.2: languageName: node linkType: hard +"path-to-regexp@npm:0.1.7": + version: 0.1.7 + resolution: "path-to-regexp@npm:0.1.7" + checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce + languageName: node + linkType: hard + +"path-to-regexp@npm:^6.2.0": + version: 6.2.0 + resolution: "path-to-regexp@npm:6.2.0" + checksum: a6aca74d2d6e2e7594d812f653cf85e9cb5054d3a8d80f099722a44ef6ad22639b02078e5ea83d11db16321c3e4359e3f1ab0274fa78dad0754a6e53f630b0fc + languageName: node + linkType: hard + "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -3725,6 +4449,16 @@ fsevents@~2.3.2: languageName: node linkType: hard +"proxy-addr@npm:~2.0.7": + version: 2.0.7 + resolution: "proxy-addr@npm:2.0.7" + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + checksum: 29c6990ce9364648255454842f06f8c46fcd124d3e6d7c5066df44662de63cdc0bad032e9bf5a3d653ff72141cc7b6019873d685708ac8210c30458ad99f2b74 + languageName: node + linkType: hard + "psl@npm:^1.1.28": version: 1.8.0 resolution: "psl@npm:1.8.0" @@ -3732,6 +4466,16 @@ fsevents@~2.3.2: languageName: node linkType: hard +"pump@npm:^3.0.0": + version: 3.0.0 + resolution: "pump@npm:3.0.0" + dependencies: + end-of-stream: ^1.1.0 + once: ^1.3.1 + checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 + languageName: node + linkType: hard + "punycode@npm:^2.1.0, punycode@npm:^2.1.1": version: 2.1.1 resolution: "punycode@npm:2.1.1" @@ -3739,6 +4483,13 @@ fsevents@~2.3.2: languageName: node linkType: hard +"qs@npm:6.9.6": + version: 6.9.6 + resolution: "qs@npm:6.9.6" + checksum: cb6df402bb8a3dbefa4bd46eba0dfca427079baca923e6b8d28a03e6bfb16a5c1dcdb96e69388f9c5813ac8ff17bb8bbca22f2ecd31fe1e344a55cb531b5fabf + languageName: node + linkType: hard + "qs@npm:~6.5.2": version: 6.5.2 resolution: "qs@npm:6.5.2" @@ -3753,6 +4504,13 @@ fsevents@~2.3.2: languageName: node linkType: hard +"quick-lru@npm:^5.1.1": + version: 5.1.1 + resolution: "quick-lru@npm:5.1.1" + checksum: a516faa25574be7947969883e6068dbe4aa19e8ef8e8e0fd96cddd6d36485e9106d85c0041a27153286b0770b381328f4072aa40d3b18a19f5f7d2b78b94b5ed + languageName: node + linkType: hard + "randomatic@npm:^3.0.0": version: 3.1.1 resolution: "randomatic@npm:3.1.1" @@ -3764,6 +4522,25 @@ fsevents@~2.3.2: languageName: node linkType: hard +"range-parser@npm:~1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 + languageName: node + linkType: hard + +"raw-body@npm:2.4.2": + version: 2.4.2 + resolution: "raw-body@npm:2.4.2" + dependencies: + bytes: 3.1.1 + http-errors: 1.8.1 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + checksum: c6f8d6a75c65c0a047f888cb29efc97f60fb36e950ba2cb31fefce694f98186e844a03367920faa7dc5bffaf33df08aee0b9dd935280e366439fa6492a5b163e + languageName: node + linkType: hard + "readable-stream@npm:^2.0.6, readable-stream@npm:^2.2.2, readable-stream@npm:~2.3.6": version: 2.3.7 resolution: "readable-stream@npm:2.3.7" @@ -3876,6 +4653,13 @@ fsevents@~2.3.2: languageName: node linkType: hard +"resolve-alpn@npm:^1.2.0": + version: 1.2.1 + resolution: "resolve-alpn@npm:1.2.1" + checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0 + languageName: node + linkType: hard + "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -3939,6 +4723,15 @@ resolve@~1.19.0: languageName: node linkType: hard +"responselike@npm:^2.0.0": + version: 2.0.0 + resolution: "responselike@npm:2.0.0" + dependencies: + lowercase-keys: ^2.0.0 + checksum: 6a4d32c37d4e88678ae0a9d69fcc90aafa15b1a3eab455bd65c06af3c6c4976afc47d07a0e5a60d277ab041a465f43bf0a581e0d7ab33786e7a7741573f2e487 + languageName: node + linkType: hard + "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -3984,7 +4777,7 @@ resolve@~1.19.0: languageName: node linkType: hard -"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 @@ -3998,7 +4791,7 @@ resolve@~1.19.0: languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 @@ -4016,6 +4809,27 @@ resolve@~1.19.0: languageName: node linkType: hard +"send@npm:0.17.2": + version: 0.17.2 + resolution: "send@npm:0.17.2" + dependencies: + debug: 2.6.9 + depd: ~1.1.2 + destroy: ~1.0.4 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + etag: ~1.8.1 + fresh: 0.5.2 + http-errors: 1.8.1 + mime: 1.6.0 + ms: 2.1.3 + on-finished: ~2.3.0 + range-parser: ~1.2.1 + statuses: ~1.5.0 + checksum: c28f36deb4ccba9b8d6e6a1e472b8e7c40a1f51575bdf8f67303568cc9e71131faa3adc36fdb72611616ccad1584358bbe4c3ebf419e663ecc5de868ad3d3f03 + languageName: node + linkType: hard + "serialize-error@npm:^7.0.1": version: 7.0.1 resolution: "serialize-error@npm:7.0.1" @@ -4025,6 +4839,18 @@ resolve@~1.19.0: languageName: node linkType: hard +"serve-static@npm:1.14.2": + version: 1.14.2 + resolution: "serve-static@npm:1.14.2" + dependencies: + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + parseurl: ~1.3.3 + send: 0.17.2 + checksum: d97f3183b1dfcd8ce9c0e37e18e87fd31147ed6c8ee0b2c3a089d795e44ee851ca5061db01574f806d54f4e4b70bc694d9ca64578653514e04a28cbc97a1de05 + languageName: node + linkType: hard + "set-blocking@npm:~2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" @@ -4041,6 +4867,13 @@ resolve@~1.19.0: languageName: node linkType: hard +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89 + languageName: node + linkType: hard + "sha.js@npm:^2.4.9": version: 2.4.11 resolution: "sha.js@npm:2.4.11" @@ -4230,6 +5063,13 @@ resolve@~1.19.0: languageName: node linkType: hard +"statuses@npm:>= 1.5.0 < 2, statuses@npm:~1.5.0": + version: 1.5.0 + resolution: "statuses@npm:1.5.0" + checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c + languageName: node + linkType: hard + "string-width@npm:^1.0.1": version: 1.0.2 resolution: "string-width@npm:1.0.2" @@ -4302,6 +5142,15 @@ resolve@~1.19.0: languageName: node linkType: hard +"strip-ansi@npm:6, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + "strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": version: 3.0.1 resolution: "strip-ansi@npm:3.0.1" @@ -4329,15 +5178,6 @@ resolve@~1.19.0: languageName: node linkType: hard -"strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: ^5.0.1 - checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c - languageName: node - linkType: hard - "strip-ansi@npm:^7.0.1": version: 7.0.1 resolution: "strip-ansi@npm:7.0.1" @@ -4455,6 +5295,13 @@ resolve@~1.19.0: languageName: node linkType: hard +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 + languageName: node + linkType: hard + "toml@npm:^2.3.2": version: 2.3.6 resolution: "toml@npm:2.3.6" @@ -4592,6 +5439,23 @@ resolve@~1.19.0: languageName: node linkType: hard +"type-fest@npm:^2.11.1": + version: 2.11.1 + resolution: "type-fest@npm:2.11.1" + checksum: fcbf57ab65eafa517432ba4ec60e83e283ab88e21e3ac60d6081be515a6488de322660a86048f13ec5f0ba655092d680ced780e0cb86dd6fec59e04b4b6061b5 + languageName: node + linkType: hard + +"type-is@npm:~1.6.18": + version: 1.6.18 + resolution: "type-is@npm:1.6.18" + dependencies: + media-typer: 0.3.0 + mime-types: ~2.1.24 + checksum: 2c8e47675d55f8b4e404bcf529abdf5036c537a04c2b20177bcf78c9e3c1da69da3942b1346e6edb09e823228c0ee656ef0e033765ec39a70d496ef601a0c657 + languageName: node + linkType: hard + "typedarray-to-buffer@npm:^3.1.5": version: 3.1.5 resolution: "typedarray-to-buffer@npm:3.1.5" @@ -4678,6 +5542,13 @@ typescript@4.5.5: languageName: node linkType: hard +"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -4694,6 +5565,13 @@ typescript@4.5.5: languageName: node linkType: hard +"utils-merge@npm:1.0.1": + version: 1.0.1 + resolution: "utils-merge@npm:1.0.1" + checksum: c81095493225ecfc28add49c106ca4f09cdf56bc66731aa8dabc2edbbccb1e1bfe2de6a115e5c6a380d3ea166d1636410b62ef216bb07b3feb1cfde1d95d5080 + languageName: node + linkType: hard + "uuid@npm:^3.3.2": version: 3.4.0 resolution: "uuid@npm:3.4.0" @@ -4717,6 +5595,13 @@ typescript@4.5.5: languageName: node linkType: hard +"vary@npm:~1.1.2": + version: 1.1.2 + resolution: "vary@npm:1.1.2" + checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b + languageName: node + linkType: hard + "verror@npm:1.10.0": version: 1.10.0 resolution: "verror@npm:1.10.0" @@ -4728,6 +5613,15 @@ typescript@4.5.5: languageName: node linkType: hard +"wcwidth@npm:^1.0.0": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: ^1.0.3 + checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c + languageName: node + linkType: hard + "well-known-symbols@npm:^2.0.0": version: 2.0.0 resolution: "well-known-symbols@npm:2.0.0"