,
-> {
- // tslint:disable-next-line callable-types (This is extended from and can't extend from a type alias in ts<2.2)
- (
- req: Request,
- res: Response,
- next: NextFunction,
- ): void | Promise;
-}
-
-export type ErrorRequestHandler<
- P = ParamsDictionary,
- ResBody = any,
- ReqBody = any,
- ReqQuery = ParsedQs,
- LocalsObj extends Record = Record,
-> = (
- err: any,
- req: Request,
- res: Response,
- next: NextFunction,
-) => void | Promise;
-
-export type PathParams = string | RegExp | Array;
-
-export type RequestHandlerParams<
- P = ParamsDictionary,
- ResBody = any,
- ReqBody = any,
- ReqQuery = ParsedQs,
- LocalsObj extends Record = Record,
-> =
- | RequestHandler
- | ErrorRequestHandler
- | Array | ErrorRequestHandler>;
-
-type RemoveTail = S extends `${infer P}${Tail}` ? P : S;
-type GetRouteParameter = RemoveTail<
- RemoveTail, `-${string}`>,
- `.${string}`
->;
-
-// prettier-ignore
-export type RouteParameters = Route extends `${infer Required}{${infer Optional}}${infer Next}`
- ? ParseRouteParameters & Partial> & RouteParameters
- : ParseRouteParameters;
-
-type ParseRouteParameters = string extends Route ? ParamsDictionary
- : Route extends `${string}(${string}` ? ParamsDictionary // TODO: handling for regex parameters
- : Route extends `${string}:${infer Rest}` ?
- & (
- GetRouteParameter extends never ? ParamsDictionary
- : GetRouteParameter extends `${infer ParamName}?` ? { [P in ParamName]?: string } // TODO: Remove old `?` handling when Express 5 is promoted to "latest"
- : { [P in GetRouteParameter]: string }
- )
- & (Rest extends `${GetRouteParameter}${infer Next}` ? RouteParameters : unknown)
- : {};
-
-/* eslint-disable @definitelytyped/no-unnecessary-generics */
-export interface IRouterMatcher<
- T,
- Method extends "all" | "get" | "post" | "put" | "delete" | "patch" | "options" | "head" = any,
-> {
- <
- Route extends string,
- P = RouteParameters,
- ResBody = any,
- ReqBody = any,
- ReqQuery = ParsedQs,
- LocalsObj extends Record = Record,
- >(
- // (it's used as the default type parameter for P)
- path: Route,
- // (This generic is meant to be passed explicitly.)
- ...handlers: Array>
- ): T;
- <
- Path extends string,
- P = RouteParameters,
- ResBody = any,
- ReqBody = any,
- ReqQuery = ParsedQs,
- LocalsObj extends Record = Record,
- >(
- // (it's used as the default type parameter for P)
- path: Path,
- // (This generic is meant to be passed explicitly.)
- ...handlers: Array>
- ): T;
- <
- P = ParamsDictionary,
- ResBody = any,
- ReqBody = any,
- ReqQuery = ParsedQs,
- LocalsObj extends Record = Record,
- >(
- path: PathParams,
- // (This generic is meant to be passed explicitly.)
- ...handlers: Array>
- ): T;
- <
- P = ParamsDictionary,
- ResBody = any,
- ReqBody = any,
- ReqQuery = ParsedQs,
- LocalsObj extends Record = Record,
- >(
- path: PathParams,
- // (This generic is meant to be passed explicitly.)
- ...handlers: Array>
- ): T;
- (path: PathParams, subApplication: Application): T;
-}
-
-export interface IRouterHandler {
- (...handlers: Array>>): T;
- (...handlers: Array>>): T;
- <
- P = RouteParameters,
- ResBody = any,
- ReqBody = any,
- ReqQuery = ParsedQs,
- LocalsObj extends Record = Record,
- >(
- // (This generic is meant to be passed explicitly.)
- // eslint-disable-next-line @definitelytyped/no-unnecessary-generics
- ...handlers: Array>
- ): T;
- <
- P = RouteParameters,
- ResBody = any,
- ReqBody = any,
- ReqQuery = ParsedQs,
- LocalsObj extends Record = Record,
- >(
- // (This generic is meant to be passed explicitly.)
- // eslint-disable-next-line @definitelytyped/no-unnecessary-generics
- ...handlers: Array>
- ): T;
- <
- P = ParamsDictionary,
- ResBody = any,
- ReqBody = any,
- ReqQuery = ParsedQs,
- LocalsObj extends Record = Record,
- >(
- // (This generic is meant to be passed explicitly.)
- // eslint-disable-next-line @definitelytyped/no-unnecessary-generics
- ...handlers: Array>
- ): T;
- <
- P = ParamsDictionary,
- ResBody = any,
- ReqBody = any,
- ReqQuery = ParsedQs,
- LocalsObj extends Record = Record,
- >(
- // (This generic is meant to be passed explicitly.)
- // eslint-disable-next-line @definitelytyped/no-unnecessary-generics
- ...handlers: Array>
- ): T;
-}
-/* eslint-enable @definitelytyped/no-unnecessary-generics */
-
-export interface IRouter extends RequestHandler {
- /**
- * Map the given param placeholder `name`(s) to the given callback(s).
- *
- * Parameter mapping is used to provide pre-conditions to routes
- * which use normalized placeholders. For example a _:user_id_ parameter
- * could automatically load a user's information from the database without
- * any additional code,
- *
- * The callback uses the samesignature as middleware, the only differencing
- * being that the value of the placeholder is passed, in this case the _id_
- * of the user. Once the `next()` function is invoked, just like middleware
- * it will continue on to execute the route, or subsequent parameter functions.
- *
- * app.param('user_id', function(req, res, next, id){
- * User.find(id, function(err, user){
- * if (err) {
- * next(err);
- * } else if (user) {
- * req.user = user;
- * next();
- * } else {
- * next(new Error('failed to load user'));
- * }
- * });
- * });
- */
- param(name: string, handler: RequestParamHandler): this;
-
- /**
- * Special-cased "all" method, applying the given route `path`,
- * middleware, and callback to _every_ HTTP method.
- */
- all: IRouterMatcher;
- get: IRouterMatcher;
- post: IRouterMatcher;
- put: IRouterMatcher;
- delete: IRouterMatcher;
- patch: IRouterMatcher;
- options: IRouterMatcher;
- head: IRouterMatcher;
-
- checkout: IRouterMatcher;
- connect: IRouterMatcher;
- copy: IRouterMatcher;
- lock: IRouterMatcher;
- merge: IRouterMatcher;
- mkactivity: IRouterMatcher;
- mkcol: IRouterMatcher;
- move: IRouterMatcher;
- "m-search": IRouterMatcher;
- notify: IRouterMatcher;
- propfind: IRouterMatcher;
- proppatch: IRouterMatcher;
- purge: IRouterMatcher;
- report: IRouterMatcher;
- search: IRouterMatcher;
- subscribe: IRouterMatcher;
- trace: IRouterMatcher;
- unlock: IRouterMatcher;
- unsubscribe: IRouterMatcher;
- link: IRouterMatcher;
- unlink: IRouterMatcher;
-
- use: IRouterHandler & IRouterMatcher;
-
- route(prefix: T): IRoute;
- route(prefix: PathParams): IRoute;
- /**
- * Stack of configured routes
- */
- stack: ILayer[];
-}
-
-export interface ILayer {
- route?: IRoute;
- name: string | "";
- params?: Record;
- keys: string[];
- path?: string;
- method: string;
- regexp: RegExp;
- handle: (req: Request, res: Response, next: NextFunction) => any;
-}
-
-export interface IRoute {
- path: string;
- stack: ILayer[];
- all: IRouterHandler;
- get: IRouterHandler;
- post: IRouterHandler;
- put: IRouterHandler;
- delete: IRouterHandler;
- patch: IRouterHandler;
- options: IRouterHandler;
- head: IRouterHandler;
-
- checkout: IRouterHandler;
- copy: IRouterHandler;
- lock: IRouterHandler;
- merge: IRouterHandler;
- mkactivity: IRouterHandler;
- mkcol: IRouterHandler;
- move: IRouterHandler;
- "m-search": IRouterHandler;
- notify: IRouterHandler;
- purge: IRouterHandler;
- report: IRouterHandler;
- search: IRouterHandler;
- subscribe: IRouterHandler;
- trace: IRouterHandler;
- unlock: IRouterHandler;
- unsubscribe: IRouterHandler;
-}
-
-export interface Router extends IRouter {}
-
-/**
- * Options passed down into `res.cookie`
- * @link https://expressjs.com/en/api.html#res.cookie
- */
-export interface CookieOptions {
- /** Convenient option for setting the expiry time relative to the current time in **milliseconds**. */
- maxAge?: number | undefined;
- /** Indicates if the cookie should be signed. */
- signed?: boolean | undefined;
- /** Expiry date of the cookie in GMT. If not specified (undefined), creates a session cookie. */
- expires?: Date | undefined;
- /** Flags the cookie to be accessible only by the web server. */
- httpOnly?: boolean | undefined;
- /** Path for the cookie. Defaults to “/”. */
- path?: string | undefined;
- /** Domain name for the cookie. Defaults to the domain name of the app. */
- domain?: string | undefined;
- /** Marks the cookie to be used with HTTPS only. */
- secure?: boolean | undefined;
- /** A synchronous function used for cookie value encoding. Defaults to encodeURIComponent. */
- encode?: ((val: string) => string) | undefined;
- /**
- * Value of the “SameSite” Set-Cookie attribute.
- * @link https://tools.ietf.org/html/draft-ietf-httpbis-cookie-same-site-00#section-4.1.1.
- */
- sameSite?: boolean | "lax" | "strict" | "none" | undefined;
- /**
- * Value of the “Priority” Set-Cookie attribute.
- * @link https://datatracker.ietf.org/doc/html/draft-west-cookie-priority-00#section-4.3
- */
- priority?: "low" | "medium" | "high";
- /** Marks the cookie to use partioned storage. */
- partitioned?: boolean | undefined;
-}
-
-export interface ByteRange {
- start: number;
- end: number;
-}
-
-export interface RequestRanges extends RangeParserRanges {}
-
-export type Errback = (err: Error) => void;
-
-/**
- * @param P For most requests, this should be `ParamsDictionary`, but if you're
- * using this in a route handler for a route that uses a `RegExp` or a wildcard
- * `string` path (e.g. `'/user/*'`), then `req.params` will be an array, in
- * which case you should use `ParamsArray` instead.
- *
- * @see https://expressjs.com/en/api.html#req.params
- *
- * @example
- * app.get('/user/:id', (req, res) => res.send(req.params.id)); // implicitly `ParamsDictionary`
- * app.get(/user\/(.*)/, (req, res) => res.send(req.params[0]));
- * app.get('/user/*', (req, res) => res.send(req.params[0]));
- */
-export interface Request<
- P = ParamsDictionary,
- ResBody = any,
- ReqBody = any,
- ReqQuery = ParsedQs,
- LocalsObj extends Record = Record,
-> extends http.IncomingMessage, Express.Request {
- /**
- * Return request header.
- *
- * The `Referrer` header field is special-cased,
- * both `Referrer` and `Referer` are interchangeable.
- *
- * Examples:
- *
- * req.get('Content-Type');
- * // => "text/plain"
- *
- * req.get('content-type');
- * // => "text/plain"
- *
- * req.get('Something');
- * // => undefined
- *
- * Aliased as `req.header()`.
- */
- get(name: "set-cookie"): string[] | undefined;
- get(name: string): string | undefined;
-
- header(name: "set-cookie"): string[] | undefined;
- header(name: string): string | undefined;
-
- /**
- * Check if the given `type(s)` is acceptable, returning
- * the best match when true, otherwise `undefined`, in which
- * case you should respond with 406 "Not Acceptable".
- *
- * The `type` value may be a single mime type string
- * such as "application/json", the extension name
- * such as "json", a comma-delimted list such as "json, html, text/plain",
- * or an array `["json", "html", "text/plain"]`. When a list
- * or array is given the _best_ match, if any is returned.
- *
- * Examples:
- *
- * // Accept: text/html
- * req.accepts('html');
- * // => "html"
- *
- * // Accept: text/*, application/json
- * req.accepts('html');
- * // => "html"
- * req.accepts('text/html');
- * // => "text/html"
- * req.accepts('json, text');
- * // => "json"
- * req.accepts('application/json');
- * // => "application/json"
- *
- * // Accept: text/*, application/json
- * req.accepts('image/png');
- * req.accepts('png');
- * // => false
- *
- * // Accept: text/*;q=.5, application/json
- * req.accepts(['html', 'json']);
- * req.accepts('html, json');
- * // => "json"
- */
- accepts(): string[];
- accepts(type: string): string | false;
- accepts(type: string[]): string | false;
- accepts(...type: string[]): string | false;
-
- /**
- * Returns the first accepted charset of the specified character sets,
- * based on the request's Accept-Charset HTTP header field.
- * If none of the specified charsets is accepted, returns false.
- *
- * For more information, or if you have issues or concerns, see accepts.
- */
- acceptsCharsets(): string[];
- acceptsCharsets(charset: string): string | false;
- acceptsCharsets(charset: string[]): string | false;
- acceptsCharsets(...charset: string[]): string | false;
-
- /**
- * Returns the first accepted encoding of the specified encodings,
- * based on the request's Accept-Encoding HTTP header field.
- * If none of the specified encodings is accepted, returns false.
- *
- * For more information, or if you have issues or concerns, see accepts.
- */
- acceptsEncodings(): string[];
- acceptsEncodings(encoding: string): string | false;
- acceptsEncodings(encoding: string[]): string | false;
- acceptsEncodings(...encoding: string[]): string | false;
-
- /**
- * Returns the first accepted language of the specified languages,
- * based on the request's Accept-Language HTTP header field.
- * If none of the specified languages is accepted, returns false.
- *
- * For more information, or if you have issues or concerns, see accepts.
- */
- acceptsLanguages(): string[];
- acceptsLanguages(lang: string): string | false;
- acceptsLanguages(lang: string[]): string | false;
- acceptsLanguages(...lang: string[]): string | false;
-
- /**
- * Parse Range header field, capping to the given `size`.
- *
- * Unspecified ranges such as "0-" require knowledge of your resource length. In
- * the case of a byte range this is of course the total number of bytes.
- * If the Range header field is not given `undefined` is returned.
- * If the Range header field is given, return value is a result of range-parser.
- * See more ./types/range-parser/index.d.ts
- *
- * NOTE: remember that ranges are inclusive, so for example "Range: users=0-3"
- * should respond with 4 users when available, not 3.
- */
- range(size: number, options?: RangeParserOptions): RangeParserRanges | RangeParserResult | undefined;
-
- /**
- * Return an array of Accepted media types
- * ordered from highest quality to lowest.
- */
- accepted: MediaType[];
-
- /**
- * Check if the incoming request contains the "Content-Type"
- * header field, and it contains the give mime `type`.
- *
- * Examples:
- *
- * // With Content-Type: text/html; charset=utf-8
- * req.is('html');
- * req.is('text/html');
- * req.is('text/*');
- * // => true
- *
- * // When Content-Type is application/json
- * req.is('json');
- * req.is('application/json');
- * req.is('application/*');
- * // => true
- *
- * req.is('html');
- * // => false
- */
- is(type: string | string[]): string | false | null;
-
- /**
- * Return the protocol string "http" or "https"
- * when requested with TLS. When the "trust proxy"
- * setting is enabled the "X-Forwarded-Proto" header
- * field will be trusted. If you're running behind
- * a reverse proxy that supplies https for you this
- * may be enabled.
- */
- readonly protocol: string;
-
- /**
- * Short-hand for:
- *
- * req.protocol == 'https'
- */
- readonly secure: boolean;
-
- /**
- * Return the remote address, or when
- * "trust proxy" is `true` return
- * the upstream addr.
- *
- * Value may be undefined if the `req.socket` is destroyed
- * (for example, if the client disconnected).
- */
- readonly ip: string | undefined;
-
- /**
- * When "trust proxy" is `true`, parse
- * the "X-Forwarded-For" ip address list.
- *
- * For example if the value were "client, proxy1, proxy2"
- * you would receive the array `["client", "proxy1", "proxy2"]`
- * where "proxy2" is the furthest down-stream.
- */
- readonly ips: string[];
-
- /**
- * Return subdomains as an array.
- *
- * Subdomains are the dot-separated parts of the host before the main domain of
- * the app. By default, the domain of the app is assumed to be the last two
- * parts of the host. This can be changed by setting "subdomain offset".
- *
- * For example, if the domain is "tobi.ferrets.example.com":
- * If "subdomain offset" is not set, req.subdomains is `["ferrets", "tobi"]`.
- * If "subdomain offset" is 3, req.subdomains is `["tobi"]`.
- */
- readonly subdomains: string[];
-
- /**
- * Short-hand for `url.parse(req.url).pathname`.
- */
- readonly path: string;
-
- /**
- * Contains the hostname derived from the `Host` HTTP header.
- */
- readonly hostname: string;
-
- /**
- * Contains the host derived from the `Host` HTTP header.
- */
- readonly host: string;
-
- /**
- * Check if the request is fresh, aka
- * Last-Modified and/or the ETag
- * still match.
- */
- readonly fresh: boolean;
-
- /**
- * Check if the request is stale, aka
- * "Last-Modified" and / or the "ETag" for the
- * resource has changed.
- */
- readonly stale: boolean;
-
- /**
- * Check if the request was an _XMLHttpRequest_.
- */
- readonly xhr: boolean;
-
- // body: { username: string; password: string; remember: boolean; title: string; };
- body: ReqBody;
-
- // cookies: { string; remember: boolean; };
- cookies: any;
-
- method: string;
-
- params: P;
-
- query: ReqQuery;
-
- route: any;
-
- signedCookies: any;
-
- originalUrl: string;
-
- url: string;
-
- baseUrl: string;
-
- app: Application;
-
- /**
- * After middleware.init executed, Request will contain res and next properties
- * See: express/lib/middleware/init.js
- */
- res?: Response | undefined;
- next?: NextFunction | undefined;
-}
-
-export interface MediaType {
- value: string;
- quality: number;
- type: string;
- subtype: string;
-}
-
-export type Send> = (body?: ResBody) => T;
-
-export interface SendFileOptions extends SendOptions {
- /** Object containing HTTP headers to serve with the file. */
- headers?: Record;
-}
-
-export interface DownloadOptions extends SendOptions {
- /** Object containing HTTP headers to serve with the file. The header `Content-Disposition` will be overridden by the filename argument. */
- headers?: Record;
-}
-
-export interface Response<
- ResBody = any,
- LocalsObj extends Record = Record,
- StatusCode extends number = number,
-> extends http.ServerResponse, Express.Response {
- /**
- * Set status `code`.
- */
- status(code: StatusCode): this;
-
- /**
- * Set the response HTTP status code to `statusCode` and send its string representation as the response body.
- * @link http://expressjs.com/4x/api.html#res.sendStatus
- *
- * Examples:
- *
- * res.sendStatus(200); // equivalent to res.status(200).send('OK')
- * res.sendStatus(403); // equivalent to res.status(403).send('Forbidden')
- * res.sendStatus(404); // equivalent to res.status(404).send('Not Found')
- * res.sendStatus(500); // equivalent to res.status(500).send('Internal Server Error')
- */
- sendStatus(code: StatusCode): this;
-
- /**
- * Set Link header field with the given `links`.
- *
- * Examples:
- *
- * res.links({
- * next: 'http://api.example.com/users?page=2',
- * last: 'http://api.example.com/users?page=5'
- * });
- */
- links(links: any): this;
-
- /**
- * Send a response.
- *
- * Examples:
- *
- * res.send(new Buffer('wahoo'));
- * res.send({ some: 'json' });
- * res.send('some html
');
- * res.status(404).send('Sorry, cant find that');
- */
- send: Send;
-
- /**
- * Send JSON response.
- *
- * Examples:
- *
- * res.json(null);
- * res.json({ user: 'tj' });
- * res.status(500).json('oh noes!');
- * res.status(404).json('I dont have that');
- */
- json: Send;
-
- /**
- * Send JSON response with JSONP callback support.
- *
- * Examples:
- *
- * res.jsonp(null);
- * res.jsonp({ user: 'tj' });
- * res.status(500).jsonp('oh noes!');
- * res.status(404).jsonp('I dont have that');
- */
- jsonp: Send;
-
- /**
- * Transfer the file at the given `path`.
- *
- * Automatically sets the _Content-Type_ response header field.
- * The callback `fn(err)` is invoked when the transfer is complete
- * or when an error occurs. Be sure to check `res.headersSent`
- * if you wish to attempt responding, as the header and some data
- * may have already been transferred.
- *
- * Options:
- *
- * - `maxAge` defaulting to 0 (can be string converted by `ms`)
- * - `root` root directory for relative filenames
- * - `headers` object of headers to serve with file
- * - `dotfiles` serve dotfiles, defaulting to false; can be `"allow"` to send them
- *
- * Other options are passed along to `send`.
- *
- * Examples:
- *
- * The following example illustrates how `res.sendFile()` may
- * be used as an alternative for the `static()` middleware for
- * dynamic situations. The code backing `res.sendFile()` is actually
- * the same code, so HTTP cache support etc is identical.
- *
- * app.get('/user/:uid/photos/:file', function(req, res){
- * var uid = req.params.uid
- * , file = req.params.file;
- *
- * req.user.mayViewFilesFrom(uid, function(yes){
- * if (yes) {
- * res.sendFile('/uploads/' + uid + '/' + file);
- * } else {
- * res.send(403, 'Sorry! you cant see that.');
- * }
- * });
- * });
- *
- * @api public
- */
- sendFile(path: string, fn?: Errback): void;
- sendFile(path: string, options: SendFileOptions, fn?: Errback): void;
-
- /**
- * Transfer the file at the given `path` as an attachment.
- *
- * Optionally providing an alternate attachment `filename`,
- * and optional callback `fn(err)`. The callback is invoked
- * when the data transfer is complete, or when an error has
- * ocurred. Be sure to check `res.headersSent` if you plan to respond.
- *
- * The optional options argument passes through to the underlying
- * res.sendFile() call, and takes the exact same parameters.
- *
- * This method uses `res.sendFile()`.
- */
- download(path: string, fn?: Errback): void;
- download(path: string, filename: string, fn?: Errback): void;
- download(path: string, filename: string, options: DownloadOptions, fn?: Errback): void;
-
- /**
- * Set _Content-Type_ response header with `type` through `mime.lookup()`
- * when it does not contain "/", or set the Content-Type to `type` otherwise.
- *
- * Examples:
- *
- * res.type('.html');
- * res.type('html');
- * res.type('json');
- * res.type('application/json');
- * res.type('png');
- */
- contentType(type: string): this;
-
- /**
- * Set _Content-Type_ response header with `type` through `mime.lookup()`
- * when it does not contain "/", or set the Content-Type to `type` otherwise.
- *
- * Examples:
- *
- * res.type('.html');
- * res.type('html');
- * res.type('json');
- * res.type('application/json');
- * res.type('png');
- */
- type(type: string): this;
-
- /**
- * Respond to the Acceptable formats using an `obj`
- * of mime-type callbacks.
- *
- * This method uses `req.accepted`, an array of
- * acceptable types ordered by their quality values.
- * When "Accept" is not present the _first_ callback
- * is invoked, otherwise the first match is used. When
- * no match is performed the server responds with
- * 406 "Not Acceptable".
- *
- * Content-Type is set for you, however if you choose
- * you may alter this within the callback using `res.type()`
- * or `res.set('Content-Type', ...)`.
- *
- * res.format({
- * 'text/plain': function(){
- * res.send('hey');
- * },
- *
- * 'text/html': function(){
- * res.send('hey
');
- * },
- *
- * 'appliation/json': function(){
- * res.send({ message: 'hey' });
- * }
- * });
- *
- * In addition to canonicalized MIME types you may
- * also use extnames mapped to these types:
- *
- * res.format({
- * text: function(){
- * res.send('hey');
- * },
- *
- * html: function(){
- * res.send('hey
');
- * },
- *
- * json: function(){
- * res.send({ message: 'hey' });
- * }
- * });
- *
- * By default Express passes an `Error`
- * with a `.status` of 406 to `next(err)`
- * if a match is not made. If you provide
- * a `.default` callback it will be invoked
- * instead.
- */
- format(obj: any): this;
-
- /**
- * Set _Content-Disposition_ header to _attachment_ with optional `filename`.
- */
- attachment(filename?: string): this;
-
- /**
- * Set header `field` to `val`, or pass
- * an object of header fields.
- *
- * Examples:
- *
- * res.set('Foo', ['bar', 'baz']);
- * res.set('Accept', 'application/json');
- * res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' });
- *
- * Aliased as `res.header()`.
- */
- set(field: any): this;
- set(field: string, value?: string | string[]): this;
-
- header(field: any): this;
- header(field: string, value?: string | string[]): this;
-
- // Property indicating if HTTP headers has been sent for the response.
- headersSent: boolean;
-
- /** Get value for header `field`. */
- get(field: string): string | undefined;
-
- /** Clear cookie `name`. */
- clearCookie(name: string, options?: CookieOptions): this;
-
- /**
- * Set cookie `name` to `val`, with the given `options`.
- *
- * Options:
- *
- * - `maxAge` max-age in milliseconds, converted to `expires`
- * - `signed` sign the cookie
- * - `path` defaults to "/"
- *
- * Examples:
- *
- * // "Remember Me" for 15 minutes
- * res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });
- *
- * // save as above
- * res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true })
- */
- cookie(name: string, val: string, options: CookieOptions): this;
- cookie(name: string, val: any, options: CookieOptions): this;
- cookie(name: string, val: any): this;
-
- /**
- * Set the location header to `url`.
- *
- * Examples:
- *
- * res.location('/foo/bar').;
- * res.location('http://example.com');
- * res.location('../login'); // /blog/post/1 -> /blog/login
- *
- * Mounting:
- *
- * When an application is mounted and `res.location()`
- * is given a path that does _not_ lead with "/" it becomes
- * relative to the mount-point. For example if the application
- * is mounted at "/blog", the following would become "/blog/login".
- *
- * res.location('login');
- *
- * While the leading slash would result in a location of "/login":
- *
- * res.location('/login');
- */
- location(url: string): this;
-
- /**
- * Redirect to the given `url` with optional response `status`
- * defaulting to 302.
- *
- * The resulting `url` is determined by `res.location()`, so
- * it will play nicely with mounted apps, relative paths, etc.
- *
- * Examples:
- *
- * res.redirect('/foo/bar');
- * res.redirect('http://example.com');
- * res.redirect(301, 'http://example.com');
- * res.redirect('../login'); // /blog/post/1 -> /blog/login
- */
- redirect(url: string): void;
- redirect(status: number, url: string): void;
-
- /**
- * Render `view` with the given `options` and optional callback `fn`.
- * When a callback function is given a response will _not_ be made
- * automatically, otherwise a response of _200_ and _text/html_ is given.
- *
- * Options:
- *
- * - `cache` boolean hinting to the engine it should cache
- * - `filename` filename of the view being rendered
- */
- render(view: string, options?: object, callback?: (err: Error, html: string) => void): void;
- render(view: string, callback?: (err: Error, html: string) => void): void;
-
- locals: LocalsObj & Locals;
-
- charset: string;
-
- /**
- * Adds the field to the Vary response header, if it is not there already.
- * Examples:
- *
- * res.vary('User-Agent').render('docs');
- */
- vary(field: string): this;
-
- app: Application;
-
- /**
- * Appends the specified value to the HTTP response header field.
- * If the header is not already set, it creates the header with the specified value.
- * The value parameter can be a string or an array.
- *
- * Note: calling res.set() after res.append() will reset the previously-set header value.
- *
- * @since 4.11.0
- */
- append(field: string, value?: string[] | string): this;
-
- /**
- * After middleware.init executed, Response will contain req property
- * See: express/lib/middleware/init.js
- */
- req: Request;
-}
-
-export interface Handler extends RequestHandler {}
-
-export type RequestParamHandler = (req: Request, res: Response, next: NextFunction, value: any, name: string) => any;
-
-export type ApplicationRequestHandler =
- & IRouterHandler
- & IRouterMatcher
- & ((...handlers: RequestHandlerParams[]) => T);
-
-export interface Application<
- LocalsObj extends Record = Record,
-> extends EventEmitter, IRouter, Express.Application {
- /**
- * Express instance itself is a request handler, which could be invoked without
- * third argument.
- */
- (req: Request | http.IncomingMessage, res: Response | http.ServerResponse): any;
-
- /**
- * Initialize the server.
- *
- * - setup default configuration
- * - setup default middleware
- * - setup route reflection methods
- */
- init(): void;
-
- /**
- * Initialize application configuration.
- */
- defaultConfiguration(): void;
-
- /**
- * Register the given template engine callback `fn`
- * as `ext`.
- *
- * By default will `require()` the engine based on the
- * file extension. For example if you try to render
- * a "foo.jade" file Express will invoke the following internally:
- *
- * app.engine('jade', require('jade').__express);
- *
- * For engines that do not provide `.__express` out of the box,
- * or if you wish to "map" a different extension to the template engine
- * you may use this method. For example mapping the EJS template engine to
- * ".html" files:
- *
- * app.engine('html', require('ejs').renderFile);
- *
- * In this case EJS provides a `.renderFile()` method with
- * the same signature that Express expects: `(path, options, callback)`,
- * though note that it aliases this method as `ejs.__express` internally
- * so if you're using ".ejs" extensions you dont need to do anything.
- *
- * Some template engines do not follow this convention, the
- * [Consolidate.js](https://github.com/visionmedia/consolidate.js)
- * library was created to map all of node's popular template
- * engines to follow this convention, thus allowing them to
- * work seamlessly within Express.
- */
- engine(
- ext: string,
- fn: (path: string, options: object, callback: (e: any, rendered?: string) => void) => void,
- ): this;
-
- /**
- * Assign `setting` to `val`, or return `setting`'s value.
- *
- * app.set('foo', 'bar');
- * app.get('foo');
- * // => "bar"
- * app.set('foo', ['bar', 'baz']);
- * app.get('foo');
- * // => ["bar", "baz"]
- *
- * Mounted servers inherit their parent server's settings.
- */
- set(setting: string, val: any): this;
- get: ((name: string) => any) & IRouterMatcher;
-
- param(name: string | string[], handler: RequestParamHandler): this;
-
- /**
- * Return the app's absolute pathname
- * based on the parent(s) that have
- * mounted it.
- *
- * For example if the application was
- * mounted as "/admin", which itself
- * was mounted as "/blog" then the
- * return value would be "/blog/admin".
- */
- path(): string;
-
- /**
- * Check if `setting` is enabled (truthy).
- *
- * app.enabled('foo')
- * // => false
- *
- * app.enable('foo')
- * app.enabled('foo')
- * // => true
- */
- enabled(setting: string): boolean;
-
- /**
- * Check if `setting` is disabled.
- *
- * app.disabled('foo')
- * // => true
- *
- * app.enable('foo')
- * app.disabled('foo')
- * // => false
- */
- disabled(setting: string): boolean;
-
- /** Enable `setting`. */
- enable(setting: string): this;
-
- /** Disable `setting`. */
- disable(setting: string): this;
-
- /**
- * Render the given view `name` name with `options`
- * and a callback accepting an error and the
- * rendered template string.
- *
- * Example:
- *
- * app.render('email', { name: 'Tobi' }, function(err, html){
- * // ...
- * })
- */
- render(name: string, options?: object, callback?: (err: Error, html: string) => void): void;
- render(name: string, callback: (err: Error, html: string) => void): void;
-
- /**
- * Listen for connections.
- *
- * A node `http.Server` is returned, with this
- * application (which is a `Function`) as its
- * callback. If you wish to create both an HTTP
- * and HTTPS server you may do so with the "http"
- * and "https" modules as shown here:
- *
- * var http = require('http')
- * , https = require('https')
- * , express = require('express')
- * , app = express();
- *
- * http.createServer(app).listen(80);
- * https.createServer({ ... }, app).listen(443);
- */
- listen(port: number, hostname: string, backlog: number, callback?: (error?: Error) => void): http.Server;
- listen(port: number, hostname: string, callback?: (error?: Error) => void): http.Server;
- listen(port: number, callback?: (error?: Error) => void): http.Server;
- listen(callback?: (error?: Error) => void): http.Server;
- listen(path: string, callback?: (error?: Error) => void): http.Server;
- listen(handle: any, listeningListener?: (error?: Error) => void): http.Server;
-
- router: Router;
-
- settings: any;
-
- resource: any;
-
- map: any;
-
- locals: LocalsObj & Locals;
-
- /**
- * The app.routes object houses all of the routes defined mapped by the
- * associated HTTP verb. This object may be used for introspection
- * capabilities, for example Express uses this internally not only for
- * routing but to provide default OPTIONS behaviour unless app.options()
- * is used. Your application or framework may also remove routes by
- * simply by removing them from this object.
- */
- routes: any;
-
- /**
- * Used to get all registered routes in Express Application
- */
- _router: any;
-
- use: ApplicationRequestHandler;
-
- /**
- * The mount event is fired on a sub-app, when it is mounted on a parent app.
- * The parent app is passed to the callback function.
- *
- * NOTE:
- * Sub-apps will:
- * - Not inherit the value of settings that have a default value. You must set the value in the sub-app.
- * - Inherit the value of settings with no default value.
- */
- on: (event: string, callback: (parent: Application) => void) => this;
-
- /**
- * The app.mountpath property contains one or more path patterns on which a sub-app was mounted.
- */
- mountpath: string | string[];
-}
-
-export interface Express extends Application {
- request: Request;
- response: Response;
-}
diff --git a/backend/node_modules/@types/express-serve-static-core/package.json b/backend/node_modules/@types/express-serve-static-core/package.json
deleted file mode 100644
index b7ddef6..0000000
--- a/backend/node_modules/@types/express-serve-static-core/package.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "name": "@types/express-serve-static-core",
- "version": "5.0.6",
- "description": "TypeScript definitions for express-serve-static-core",
- "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/express-serve-static-core",
- "license": "MIT",
- "contributors": [
- {
- "name": "Boris Yankov",
- "githubUsername": "borisyankov",
- "url": "https://github.com/borisyankov"
- },
- {
- "name": "Satana Charuwichitratana",
- "githubUsername": "micksatana",
- "url": "https://github.com/micksatana"
- },
- {
- "name": "Jose Luis Leon",
- "githubUsername": "JoseLion",
- "url": "https://github.com/JoseLion"
- },
- {
- "name": "David Stephens",
- "githubUsername": "dwrss",
- "url": "https://github.com/dwrss"
- },
- {
- "name": "Shin Ando",
- "githubUsername": "andoshin11",
- "url": "https://github.com/andoshin11"
- }
- ],
- "main": "",
- "types": "index.d.ts",
- "repository": {
- "type": "git",
- "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
- "directory": "types/express-serve-static-core"
- },
- "scripts": {},
- "dependencies": {
- "@types/node": "*",
- "@types/qs": "*",
- "@types/range-parser": "*",
- "@types/send": "*"
- },
- "peerDependencies": {},
- "typesPublisherContentHash": "44d5cdf58e5ee1073bddfbf6110c8e09cc6e0712ad27c9ed54d367643bee193b",
- "typeScriptVersion": "5.0"
-}
\ No newline at end of file
diff --git a/backend/node_modules/@types/express/LICENSE b/backend/node_modules/@types/express/LICENSE
deleted file mode 100644
index 9e841e7..0000000
--- a/backend/node_modules/@types/express/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
- MIT License
-
- Copyright (c) Microsoft Corporation.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE
diff --git a/backend/node_modules/@types/express/README.md b/backend/node_modules/@types/express/README.md
deleted file mode 100644
index e22b7a2..0000000
--- a/backend/node_modules/@types/express/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Installation
-> `npm install --save @types/express`
-
-# Summary
-This package contains type definitions for express (http://expressjs.com).
-
-# Details
-Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/express.
-
-### Additional Details
- * Last updated: Sat, 07 Jun 2025 02:15:25 GMT
- * Dependencies: [@types/body-parser](https://npmjs.com/package/@types/body-parser), [@types/express-serve-static-core](https://npmjs.com/package/@types/express-serve-static-core), [@types/serve-static](https://npmjs.com/package/@types/serve-static)
-
-# Credits
-These definitions were written by [Boris Yankov](https://github.com/borisyankov), [Puneet Arora](https://github.com/puneetar), [Dylan Frankland](https://github.com/dfrankland), and [Sebastian Beltran](https://github.com/bjohansebas).
diff --git a/backend/node_modules/@types/express/index.d.ts b/backend/node_modules/@types/express/index.d.ts
deleted file mode 100644
index 1c36585..0000000
--- a/backend/node_modules/@types/express/index.d.ts
+++ /dev/null
@@ -1,122 +0,0 @@
-/* =================== USAGE ===================
-
- import express = require("express");
- var app = express();
-
- =============================================== */
-
-///
-///
-
-import * as bodyParser from "body-parser";
-import * as core from "express-serve-static-core";
-import * as serveStatic from "serve-static";
-
-/**
- * Creates an Express application. The express() function is a top-level function exported by the express module.
- */
-declare function e(): core.Express;
-
-declare namespace e {
- /**
- * This is a built-in middleware function in Express. It parses incoming requests with JSON payloads and is based on body-parser.
- * @since 4.16.0
- */
- var json: typeof bodyParser.json;
-
- /**
- * This is a built-in middleware function in Express. It parses incoming requests with Buffer payloads and is based on body-parser.
- * @since 4.17.0
- */
- var raw: typeof bodyParser.raw;
-
- /**
- * This is a built-in middleware function in Express. It parses incoming requests with text payloads and is based on body-parser.
- * @since 4.17.0
- */
- var text: typeof bodyParser.text;
-
- /**
- * These are the exposed prototypes.
- */
- var application: Application;
- var request: Request;
- var response: Response;
-
- /**
- * This is a built-in middleware function in Express. It serves static files and is based on serve-static.
- */
- var static: serveStatic.RequestHandlerConstructor;
-
- /**
- * This is a built-in middleware function in Express. It parses incoming requests with urlencoded payloads and is based on body-parser.
- * @since 4.16.0
- */
- var urlencoded: typeof bodyParser.urlencoded;
-
- export function Router(options?: RouterOptions): core.Router;
-
- interface RouterOptions {
- /**
- * Enable case sensitivity.
- */
- caseSensitive?: boolean | undefined;
-
- /**
- * Preserve the req.params values from the parent router.
- * If the parent and the child have conflicting param names, the child’s value take precedence.
- *
- * @default false
- * @since 4.5.0
- */
- mergeParams?: boolean | undefined;
-
- /**
- * Enable strict routing.
- */
- strict?: boolean | undefined;
- }
-
- interface Application extends core.Application {}
- interface CookieOptions extends core.CookieOptions {}
- interface Errback extends core.Errback {}
- interface ErrorRequestHandler<
- P = core.ParamsDictionary,
- ResBody = any,
- ReqBody = any,
- ReqQuery = core.Query,
- Locals extends Record = Record,
- > extends core.ErrorRequestHandler {}
- interface Express extends core.Express {}
- interface Handler extends core.Handler {}
- interface IRoute extends core.IRoute {}
- interface IRouter extends core.IRouter {}
- interface IRouterHandler extends core.IRouterHandler {}
- interface IRouterMatcher extends core.IRouterMatcher {}
- interface MediaType extends core.MediaType {}
- interface NextFunction extends core.NextFunction {}
- interface Locals extends core.Locals {}
- interface Request<
- P = core.ParamsDictionary,
- ResBody = any,
- ReqBody = any,
- ReqQuery = core.Query,
- Locals extends Record = Record,
- > extends core.Request {}
- interface RequestHandler<
- P = core.ParamsDictionary,
- ResBody = any,
- ReqBody = any,
- ReqQuery = core.Query,
- Locals extends Record = Record,
- > extends core.RequestHandler {}
- interface RequestParamHandler extends core.RequestParamHandler {}
- interface Response<
- ResBody = any,
- Locals extends Record = Record,
- > extends core.Response {}
- interface Router extends core.Router {}
- interface Send extends core.Send {}
-}
-
-export = e;
diff --git a/backend/node_modules/@types/express/package.json b/backend/node_modules/@types/express/package.json
deleted file mode 100644
index 7ba2e52..0000000
--- a/backend/node_modules/@types/express/package.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "name": "@types/express",
- "version": "5.0.3",
- "description": "TypeScript definitions for express",
- "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/express",
- "license": "MIT",
- "contributors": [
- {
- "name": "Boris Yankov",
- "githubUsername": "borisyankov",
- "url": "https://github.com/borisyankov"
- },
- {
- "name": "Puneet Arora",
- "githubUsername": "puneetar",
- "url": "https://github.com/puneetar"
- },
- {
- "name": "Dylan Frankland",
- "githubUsername": "dfrankland",
- "url": "https://github.com/dfrankland"
- },
- {
- "name": "Sebastian Beltran",
- "githubUsername": "bjohansebas",
- "url": "https://github.com/bjohansebas"
- }
- ],
- "main": "",
- "types": "index.d.ts",
- "repository": {
- "type": "git",
- "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
- "directory": "types/express"
- },
- "scripts": {},
- "dependencies": {
- "@types/body-parser": "*",
- "@types/express-serve-static-core": "^5.0.0",
- "@types/serve-static": "*"
- },
- "peerDependencies": {},
- "typesPublisherContentHash": "50a15d13b8596ea6054e9e404451e427c71c41ab505b7dc01a72b122e2ee16f6",
- "typeScriptVersion": "5.1"
-}
\ No newline at end of file
diff --git a/backend/node_modules/@types/http-errors/LICENSE b/backend/node_modules/@types/http-errors/LICENSE
deleted file mode 100644
index 9e841e7..0000000
--- a/backend/node_modules/@types/http-errors/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
- MIT License
-
- Copyright (c) Microsoft Corporation.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE
diff --git a/backend/node_modules/@types/http-errors/README.md b/backend/node_modules/@types/http-errors/README.md
deleted file mode 100644
index d64e3dc..0000000
--- a/backend/node_modules/@types/http-errors/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Installation
-> `npm install --save @types/http-errors`
-
-# Summary
-This package contains type definitions for http-errors (https://github.com/jshttp/http-errors).
-
-# Details
-Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/http-errors.
-
-### Additional Details
- * Last updated: Sat, 07 Jun 2025 02:15:25 GMT
- * Dependencies: none
-
-# Credits
-These definitions were written by [Tanguy Krotoff](https://github.com/tkrotoff), [BendingBender](https://github.com/BendingBender), and [Sebastian Beltran](https://github.com/bjohansebas).
diff --git a/backend/node_modules/@types/http-errors/index.d.ts b/backend/node_modules/@types/http-errors/index.d.ts
deleted file mode 100644
index e7fb2a8..0000000
--- a/backend/node_modules/@types/http-errors/index.d.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-export = createHttpError;
-
-declare const createHttpError: createHttpError.CreateHttpError & createHttpError.NamedConstructors & {
- isHttpError: createHttpError.IsHttpError;
-};
-
-declare namespace createHttpError {
- interface HttpError extends Error {
- status: N;
- statusCode: N;
- expose: boolean;
- headers?: {
- [key: string]: string;
- } | undefined;
- [key: string]: any;
- }
-
- type UnknownError = Error | string | { [key: string]: any };
-
- interface HttpErrorConstructor {
- (msg?: string): HttpError;
- new(msg?: string): HttpError;
- }
-
- interface CreateHttpError {
- (arg: N, ...rest: UnknownError[]): HttpError;
- (...rest: UnknownError[]): HttpError;
- }
-
- type IsHttpError = (error: unknown) => error is HttpError;
-
- type NamedConstructors =
- & {
- HttpError: HttpErrorConstructor;
- }
- & Record<"BadRequest" | "400", HttpErrorConstructor<400>>
- & Record<"Unauthorized" | "401", HttpErrorConstructor<401>>
- & Record<"PaymentRequired" | "402", HttpErrorConstructor<402>>
- & Record<"Forbidden" | "403", HttpErrorConstructor<403>>
- & Record<"NotFound" | "404", HttpErrorConstructor<404>>
- & Record<"MethodNotAllowed" | "405", HttpErrorConstructor<405>>
- & Record<"NotAcceptable" | "406", HttpErrorConstructor<406>>
- & Record<"ProxyAuthenticationRequired" | "407", HttpErrorConstructor<407>>
- & Record<"RequestTimeout" | "408", HttpErrorConstructor<408>>
- & Record<"Conflict" | "409", HttpErrorConstructor<409>>
- & Record<"Gone" | "410", HttpErrorConstructor<410>>
- & Record<"LengthRequired" | "411", HttpErrorConstructor<411>>
- & Record<"PreconditionFailed" | "412", HttpErrorConstructor<412>>
- & Record<"PayloadTooLarge" | "413", HttpErrorConstructor<413>>
- & Record<"URITooLong" | "414", HttpErrorConstructor<414>>
- & Record<"UnsupportedMediaType" | "415", HttpErrorConstructor<415>>
- & Record<"RangeNotSatisfiable" | "416", HttpErrorConstructor<416>>
- & Record<"ExpectationFailed" | "417", HttpErrorConstructor<417>>
- & Record<"ImATeapot" | "418", HttpErrorConstructor<418>>
- & Record<"MisdirectedRequest" | "421", HttpErrorConstructor<421>>
- & Record<"UnprocessableEntity" | "422", HttpErrorConstructor<422>>
- & Record<"Locked" | "423", HttpErrorConstructor<423>>
- & Record<"FailedDependency" | "424", HttpErrorConstructor<424>>
- & Record<"TooEarly" | "425", HttpErrorConstructor<425>>
- & Record<"UpgradeRequired" | "426", HttpErrorConstructor<426>>
- & Record<"PreconditionRequired" | "428", HttpErrorConstructor<428>>
- & Record<"TooManyRequests" | "429", HttpErrorConstructor<429>>
- & Record<"RequestHeaderFieldsTooLarge" | "431", HttpErrorConstructor<431>>
- & Record<"UnavailableForLegalReasons" | "451", HttpErrorConstructor<451>>
- & Record<"InternalServerError" | "500", HttpErrorConstructor<500>>
- & Record<"NotImplemented" | "501", HttpErrorConstructor<501>>
- & Record<"BadGateway" | "502", HttpErrorConstructor<502>>
- & Record<"ServiceUnavailable" | "503", HttpErrorConstructor<503>>
- & Record<"GatewayTimeout" | "504", HttpErrorConstructor<504>>
- & Record<"HTTPVersionNotSupported" | "505", HttpErrorConstructor<505>>
- & Record<"VariantAlsoNegotiates" | "506", HttpErrorConstructor<506>>
- & Record<"InsufficientStorage" | "507", HttpErrorConstructor<507>>
- & Record<"LoopDetected" | "508", HttpErrorConstructor<508>>
- & Record<"BandwidthLimitExceeded" | "509", HttpErrorConstructor<509>>
- & Record<"NotExtended" | "510", HttpErrorConstructor<510>>
- & Record<"NetworkAuthenticationRequire" | "511", HttpErrorConstructor<511>>;
-}
diff --git a/backend/node_modules/@types/http-errors/package.json b/backend/node_modules/@types/http-errors/package.json
deleted file mode 100644
index 91d49cf..0000000
--- a/backend/node_modules/@types/http-errors/package.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "name": "@types/http-errors",
- "version": "2.0.5",
- "description": "TypeScript definitions for http-errors",
- "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/http-errors",
- "license": "MIT",
- "contributors": [
- {
- "name": "Tanguy Krotoff",
- "githubUsername": "tkrotoff",
- "url": "https://github.com/tkrotoff"
- },
- {
- "name": "BendingBender",
- "githubUsername": "BendingBender",
- "url": "https://github.com/BendingBender"
- },
- {
- "name": "Sebastian Beltran",
- "githubUsername": "bjohansebas",
- "url": "https://github.com/bjohansebas"
- }
- ],
- "main": "",
- "types": "index.d.ts",
- "repository": {
- "type": "git",
- "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
- "directory": "types/http-errors"
- },
- "scripts": {},
- "dependencies": {},
- "peerDependencies": {},
- "typesPublisherContentHash": "621b9125a6493a2fa928b9150e335cb57429fb00e3bc0257426f1173903f7a4a",
- "typeScriptVersion": "5.1"
-}
\ No newline at end of file
diff --git a/backend/node_modules/@types/mime/LICENSE b/backend/node_modules/@types/mime/LICENSE
deleted file mode 100644
index 9e841e7..0000000
--- a/backend/node_modules/@types/mime/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
- MIT License
-
- Copyright (c) Microsoft Corporation.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE
diff --git a/backend/node_modules/@types/mime/Mime.d.ts b/backend/node_modules/@types/mime/Mime.d.ts
deleted file mode 100644
index a516bd4..0000000
--- a/backend/node_modules/@types/mime/Mime.d.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { TypeMap } from "./index";
-
-export default class Mime {
- constructor(mimes: TypeMap);
-
- lookup(path: string, fallback?: string): string;
- extension(mime: string): string | undefined;
- load(filepath: string): void;
- define(mimes: TypeMap): void;
-}
diff --git a/backend/node_modules/@types/mime/README.md b/backend/node_modules/@types/mime/README.md
deleted file mode 100644
index ab21c24..0000000
--- a/backend/node_modules/@types/mime/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Installation
-> `npm install --save @types/mime`
-
-# Summary
-This package contains type definitions for mime (https://github.com/broofa/node-mime).
-
-# Details
-Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/mime/v1.
-
-### Additional Details
- * Last updated: Tue, 07 Nov 2023 20:08:00 GMT
- * Dependencies: none
-
-# Credits
-These definitions were written by [Jeff Goddard](https://github.com/jedigo), and [Daniel Hritzkiv](https://github.com/dhritzkiv).
diff --git a/backend/node_modules/@types/mime/index.d.ts b/backend/node_modules/@types/mime/index.d.ts
deleted file mode 100644
index 93e8259..0000000
--- a/backend/node_modules/@types/mime/index.d.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-// Originally imported from: https://github.com/soywiz/typescript-node-definitions/mime.d.ts
-
-export as namespace mime;
-
-export interface TypeMap {
- [key: string]: string[];
-}
-
-/**
- * Look up a mime type based on extension.
- *
- * If not found, uses the fallback argument if provided, and otherwise
- * uses `default_type`.
- */
-export function lookup(path: string, fallback?: string): string;
-/**
- * Return a file extensions associated with a mime type.
- */
-export function extension(mime: string): string | undefined;
-/**
- * Load an Apache2-style ".types" file.
- */
-export function load(filepath: string): void;
-export function define(mimes: TypeMap): void;
-
-export interface Charsets {
- lookup(mime: string, fallback: string): string;
-}
-
-export const charsets: Charsets;
-export const default_type: string;
diff --git a/backend/node_modules/@types/mime/lite.d.ts b/backend/node_modules/@types/mime/lite.d.ts
deleted file mode 100644
index ffebaec..0000000
--- a/backend/node_modules/@types/mime/lite.d.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { default as Mime } from "./Mime";
-
-declare const mimelite: Mime;
-
-export as namespace mimelite;
-
-export = mimelite;
diff --git a/backend/node_modules/@types/mime/package.json b/backend/node_modules/@types/mime/package.json
deleted file mode 100644
index 98a29ff..0000000
--- a/backend/node_modules/@types/mime/package.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "name": "@types/mime",
- "version": "1.3.5",
- "description": "TypeScript definitions for mime",
- "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/mime",
- "license": "MIT",
- "contributors": [
- {
- "name": "Jeff Goddard",
- "githubUsername": "jedigo",
- "url": "https://github.com/jedigo"
- },
- {
- "name": "Daniel Hritzkiv",
- "githubUsername": "dhritzkiv",
- "url": "https://github.com/dhritzkiv"
- }
- ],
- "main": "",
- "types": "index.d.ts",
- "repository": {
- "type": "git",
- "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
- "directory": "types/mime"
- },
- "scripts": {},
- "dependencies": {},
- "typesPublisherContentHash": "2ad7ee9a549e6721825e733c6a1a7e8bee0ca7ba93d9ab922c8f4558def52d77",
- "typeScriptVersion": "4.5"
-}
\ No newline at end of file
diff --git a/backend/node_modules/@types/node/LICENSE b/backend/node_modules/@types/node/LICENSE
deleted file mode 100644
index 9e841e7..0000000
--- a/backend/node_modules/@types/node/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
- MIT License
-
- Copyright (c) Microsoft Corporation.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE
diff --git a/backend/node_modules/@types/node/README.md b/backend/node_modules/@types/node/README.md
deleted file mode 100644
index 20b2c27..0000000
--- a/backend/node_modules/@types/node/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Installation
-> `npm install --save @types/node`
-
-# Summary
-This package contains type definitions for node (https://nodejs.org/).
-
-# Details
-Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node.
-
-### Additional Details
- * Last updated: Thu, 05 Jun 2025 18:56:28 GMT
- * Dependencies: [undici-types](https://npmjs.com/package/undici-types)
-
-# Credits
-These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [Alberto Schiabel](https://github.com/jkomyno), [Alvis HT Tang](https://github.com/alvis), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [Chigozirim C.](https://github.com/smac89), [David Junger](https://github.com/touffy), [Deividas Bakanas](https://github.com/DeividasBakanas), [Eugene Y. Q. Shen](https://github.com/eyqs), [Hannes Magnusson](https://github.com/Hannes-Magnusson-CK), [Huw](https://github.com/hoo29), [Kelvin Jin](https://github.com/kjin), [Klaus Meinhardt](https://github.com/ajafff), [Lishude](https://github.com/islishude), [Mariusz Wiktorczyk](https://github.com/mwiktorczyk), [Mohsen Azimi](https://github.com/mohsen1), [Nikita Galkin](https://github.com/galkin), [Parambir Singh](https://github.com/parambirs), [Sebastian Silbermann](https://github.com/eps1lon), [Thomas den Hollander](https://github.com/ThomasdenH), [Wilco Bakker](https://github.com/WilcoBakker), [wwwy3y3](https://github.com/wwwy3y3), [Samuel Ainsworth](https://github.com/samuela), [Kyle Uehlein](https://github.com/kuehlein), [Thanik Bhongbhibhat](https://github.com/bhongy), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU), [wafuwafu13](https://github.com/wafuwafu13), [Matteo Collina](https://github.com/mcollina), [Dmitry Semigradsky](https://github.com/Semigradsky), and [René](https://github.com/Renegade334).
diff --git a/backend/node_modules/@types/node/assert.d.ts b/backend/node_modules/@types/node/assert.d.ts
deleted file mode 100644
index c340ef6..0000000
--- a/backend/node_modules/@types/node/assert.d.ts
+++ /dev/null
@@ -1,1054 +0,0 @@
-/**
- * The `node:assert` module provides a set of assertion functions for verifying
- * invariants.
- * @see [source](https://github.com/nodejs/node/blob/v22.x/lib/assert.js)
- */
-declare module "assert" {
- /**
- * An alias of {@link ok}.
- * @since v0.5.9
- * @param value The input that is checked for being truthy.
- */
- function assert(value: unknown, message?: string | Error): asserts value;
- namespace assert {
- /**
- * Indicates the failure of an assertion. All errors thrown by the `node:assert` module will be instances of the `AssertionError` class.
- */
- class AssertionError extends Error {
- /**
- * Set to the `actual` argument for methods such as {@link assert.strictEqual()}.
- */
- actual: unknown;
- /**
- * Set to the `expected` argument for methods such as {@link assert.strictEqual()}.
- */
- expected: unknown;
- /**
- * Set to the passed in operator value.
- */
- operator: string;
- /**
- * Indicates if the message was auto-generated (`true`) or not.
- */
- generatedMessage: boolean;
- /**
- * Value is always `ERR_ASSERTION` to show that the error is an assertion error.
- */
- code: "ERR_ASSERTION";
- constructor(options?: {
- /** If provided, the error message is set to this value. */
- message?: string | undefined;
- /** The `actual` property on the error instance. */
- actual?: unknown | undefined;
- /** The `expected` property on the error instance. */
- expected?: unknown | undefined;
- /** The `operator` property on the error instance. */
- operator?: string | undefined;
- /** If provided, the generated stack trace omits frames before this function. */
- // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
- stackStartFn?: Function | undefined;
- });
- }
- /**
- * This feature is deprecated and will be removed in a future version.
- * Please consider using alternatives such as the `mock` helper function.
- * @since v14.2.0, v12.19.0
- * @deprecated Deprecated
- */
- class CallTracker {
- /**
- * The wrapper function is expected to be called exactly `exact` times. If the
- * function has not been called exactly `exact` times when `tracker.verify()` is called, then `tracker.verify()` will throw an
- * error.
- *
- * ```js
- * import assert from 'node:assert';
- *
- * // Creates call tracker.
- * const tracker = new assert.CallTracker();
- *
- * function func() {}
- *
- * // Returns a function that wraps func() that must be called exact times
- * // before tracker.verify().
- * const callsfunc = tracker.calls(func);
- * ```
- * @since v14.2.0, v12.19.0
- * @param [fn='A no-op function']
- * @param [exact=1]
- * @return A function that wraps `fn`.
- */
- calls(exact?: number): () => void;
- calls any>(fn?: Func, exact?: number): Func;
- /**
- * Example:
- *
- * ```js
- * import assert from 'node:assert';
- *
- * const tracker = new assert.CallTracker();
- *
- * function func() {}
- * const callsfunc = tracker.calls(func);
- * callsfunc(1, 2, 3);
- *
- * assert.deepStrictEqual(tracker.getCalls(callsfunc),
- * [{ thisArg: undefined, arguments: [1, 2, 3] }]);
- * ```
- * @since v18.8.0, v16.18.0
- * @return An array with all the calls to a tracked function.
- */
- getCalls(fn: Function): CallTrackerCall[];
- /**
- * The arrays contains information about the expected and actual number of calls of
- * the functions that have not been called the expected number of times.
- *
- * ```js
- * import assert from 'node:assert';
- *
- * // Creates call tracker.
- * const tracker = new assert.CallTracker();
- *
- * function func() {}
- *
- * // Returns a function that wraps func() that must be called exact times
- * // before tracker.verify().
- * const callsfunc = tracker.calls(func, 2);
- *
- * // Returns an array containing information on callsfunc()
- * console.log(tracker.report());
- * // [
- * // {
- * // message: 'Expected the func function to be executed 2 time(s) but was
- * // executed 0 time(s).',
- * // actual: 0,
- * // expected: 2,
- * // operator: 'func',
- * // stack: stack trace
- * // }
- * // ]
- * ```
- * @since v14.2.0, v12.19.0
- * @return An array of objects containing information about the wrapper functions returned by {@link tracker.calls()}.
- */
- report(): CallTrackerReportInformation[];
- /**
- * Reset calls of the call tracker. If a tracked function is passed as an argument, the calls will be reset for it.
- * If no arguments are passed, all tracked functions will be reset.
- *
- * ```js
- * import assert from 'node:assert';
- *
- * const tracker = new assert.CallTracker();
- *
- * function func() {}
- * const callsfunc = tracker.calls(func);
- *
- * callsfunc();
- * // Tracker was called once
- * assert.strictEqual(tracker.getCalls(callsfunc).length, 1);
- *
- * tracker.reset(callsfunc);
- * assert.strictEqual(tracker.getCalls(callsfunc).length, 0);
- * ```
- * @since v18.8.0, v16.18.0
- * @param fn a tracked function to reset.
- */
- reset(fn?: Function): void;
- /**
- * Iterates through the list of functions passed to {@link tracker.calls()} and will throw an error for functions that
- * have not been called the expected number of times.
- *
- * ```js
- * import assert from 'node:assert';
- *
- * // Creates call tracker.
- * const tracker = new assert.CallTracker();
- *
- * function func() {}
- *
- * // Returns a function that wraps func() that must be called exact times
- * // before tracker.verify().
- * const callsfunc = tracker.calls(func, 2);
- *
- * callsfunc();
- *
- * // Will throw an error since callsfunc() was only called once.
- * tracker.verify();
- * ```
- * @since v14.2.0, v12.19.0
- */
- verify(): void;
- }
- interface CallTrackerCall {
- thisArg: object;
- arguments: unknown[];
- }
- interface CallTrackerReportInformation {
- message: string;
- /** The actual number of times the function was called. */
- actual: number;
- /** The number of times the function was expected to be called. */
- expected: number;
- /** The name of the function that is wrapped. */
- operator: string;
- /** A stack trace of the function. */
- stack: object;
- }
- type AssertPredicate = RegExp | (new() => object) | ((thrown: unknown) => boolean) | object | Error;
- /**
- * Throws an `AssertionError` with the provided error message or a default
- * error message. If the `message` parameter is an instance of an `Error` then
- * it will be thrown instead of the `AssertionError`.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.fail();
- * // AssertionError [ERR_ASSERTION]: Failed
- *
- * assert.fail('boom');
- * // AssertionError [ERR_ASSERTION]: boom
- *
- * assert.fail(new TypeError('need array'));
- * // TypeError: need array
- * ```
- *
- * Using `assert.fail()` with more than two arguments is possible but deprecated.
- * See below for further details.
- * @since v0.1.21
- * @param [message='Failed']
- */
- function fail(message?: string | Error): never;
- /** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */
- function fail(
- actual: unknown,
- expected: unknown,
- message?: string | Error,
- operator?: string,
- // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
- stackStartFn?: Function,
- ): never;
- /**
- * Tests if `value` is truthy. It is equivalent to `assert.equal(!!value, true, message)`.
- *
- * If `value` is not truthy, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is `undefined`, a default
- * error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`.
- * If no arguments are passed in at all `message` will be set to the string:`` 'No value argument passed to `assert.ok()`' ``.
- *
- * Be aware that in the `repl` the error message will be different to the one
- * thrown in a file! See below for further details.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.ok(true);
- * // OK
- * assert.ok(1);
- * // OK
- *
- * assert.ok();
- * // AssertionError: No value argument passed to `assert.ok()`
- *
- * assert.ok(false, 'it\'s false');
- * // AssertionError: it's false
- *
- * // In the repl:
- * assert.ok(typeof 123 === 'string');
- * // AssertionError: false == true
- *
- * // In a file (e.g. test.js):
- * assert.ok(typeof 123 === 'string');
- * // AssertionError: The expression evaluated to a falsy value:
- * //
- * // assert.ok(typeof 123 === 'string')
- *
- * assert.ok(false);
- * // AssertionError: The expression evaluated to a falsy value:
- * //
- * // assert.ok(false)
- *
- * assert.ok(0);
- * // AssertionError: The expression evaluated to a falsy value:
- * //
- * // assert.ok(0)
- * ```
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * // Using `assert()` works the same:
- * assert(0);
- * // AssertionError: The expression evaluated to a falsy value:
- * //
- * // assert(0)
- * ```
- * @since v0.1.21
- */
- function ok(value: unknown, message?: string | Error): asserts value;
- /**
- * **Strict assertion mode**
- *
- * An alias of {@link strictEqual}.
- *
- * **Legacy assertion mode**
- *
- * > Stability: 3 - Legacy: Use {@link strictEqual} instead.
- *
- * Tests shallow, coercive equality between the `actual` and `expected` parameters
- * using the [`==` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality). `NaN` is specially handled
- * and treated as being identical if both sides are `NaN`.
- *
- * ```js
- * import assert from 'node:assert';
- *
- * assert.equal(1, 1);
- * // OK, 1 == 1
- * assert.equal(1, '1');
- * // OK, 1 == '1'
- * assert.equal(NaN, NaN);
- * // OK
- *
- * assert.equal(1, 2);
- * // AssertionError: 1 == 2
- * assert.equal({ a: { b: 1 } }, { a: { b: 1 } });
- * // AssertionError: { a: { b: 1 } } == { a: { b: 1 } }
- * ```
- *
- * If the values are not equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default
- * error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`.
- * @since v0.1.21
- */
- function equal(actual: unknown, expected: unknown, message?: string | Error): void;
- /**
- * **Strict assertion mode**
- *
- * An alias of {@link notStrictEqual}.
- *
- * **Legacy assertion mode**
- *
- * > Stability: 3 - Legacy: Use {@link notStrictEqual} instead.
- *
- * Tests shallow, coercive inequality with the [`!=` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Inequality). `NaN` is
- * specially handled and treated as being identical if both sides are `NaN`.
- *
- * ```js
- * import assert from 'node:assert';
- *
- * assert.notEqual(1, 2);
- * // OK
- *
- * assert.notEqual(1, 1);
- * // AssertionError: 1 != 1
- *
- * assert.notEqual(1, '1');
- * // AssertionError: 1 != '1'
- * ```
- *
- * If the values are equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default error
- * message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`.
- * @since v0.1.21
- */
- function notEqual(actual: unknown, expected: unknown, message?: string | Error): void;
- /**
- * **Strict assertion mode**
- *
- * An alias of {@link deepStrictEqual}.
- *
- * **Legacy assertion mode**
- *
- * > Stability: 3 - Legacy: Use {@link deepStrictEqual} instead.
- *
- * Tests for deep equality between the `actual` and `expected` parameters. Consider
- * using {@link deepStrictEqual} instead. {@link deepEqual} can have
- * surprising results.
- *
- * _Deep equality_ means that the enumerable "own" properties of child objects
- * are also recursively evaluated by the following rules.
- * @since v0.1.21
- */
- function deepEqual(actual: unknown, expected: unknown, message?: string | Error): void;
- /**
- * **Strict assertion mode**
- *
- * An alias of {@link notDeepStrictEqual}.
- *
- * **Legacy assertion mode**
- *
- * > Stability: 3 - Legacy: Use {@link notDeepStrictEqual} instead.
- *
- * Tests for any deep inequality. Opposite of {@link deepEqual}.
- *
- * ```js
- * import assert from 'node:assert';
- *
- * const obj1 = {
- * a: {
- * b: 1,
- * },
- * };
- * const obj2 = {
- * a: {
- * b: 2,
- * },
- * };
- * const obj3 = {
- * a: {
- * b: 1,
- * },
- * };
- * const obj4 = { __proto__: obj1 };
- *
- * assert.notDeepEqual(obj1, obj1);
- * // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }
- *
- * assert.notDeepEqual(obj1, obj2);
- * // OK
- *
- * assert.notDeepEqual(obj1, obj3);
- * // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }
- *
- * assert.notDeepEqual(obj1, obj4);
- * // OK
- * ```
- *
- * If the values are deeply equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default
- * error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown
- * instead of the `AssertionError`.
- * @since v0.1.21
- */
- function notDeepEqual(actual: unknown, expected: unknown, message?: string | Error): void;
- /**
- * Tests strict equality between the `actual` and `expected` parameters as
- * determined by [`Object.is()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.strictEqual(1, 2);
- * // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal:
- * //
- * // 1 !== 2
- *
- * assert.strictEqual(1, 1);
- * // OK
- *
- * assert.strictEqual('Hello foobar', 'Hello World!');
- * // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal:
- * // + actual - expected
- * //
- * // + 'Hello foobar'
- * // - 'Hello World!'
- * // ^
- *
- * const apples = 1;
- * const oranges = 2;
- * assert.strictEqual(apples, oranges, `apples ${apples} !== oranges ${oranges}`);
- * // AssertionError [ERR_ASSERTION]: apples 1 !== oranges 2
- *
- * assert.strictEqual(1, '1', new TypeError('Inputs are not identical'));
- * // TypeError: Inputs are not identical
- * ```
- *
- * If the values are not strictly equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a
- * default error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown
- * instead of the `AssertionError`.
- * @since v0.1.21
- */
- function strictEqual(actual: unknown, expected: T, message?: string | Error): asserts actual is T;
- /**
- * Tests strict inequality between the `actual` and `expected` parameters as
- * determined by [`Object.is()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.notStrictEqual(1, 2);
- * // OK
- *
- * assert.notStrictEqual(1, 1);
- * // AssertionError [ERR_ASSERTION]: Expected "actual" to be strictly unequal to:
- * //
- * // 1
- *
- * assert.notStrictEqual(1, '1');
- * // OK
- * ```
- *
- * If the values are strictly equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a
- * default error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown
- * instead of the `AssertionError`.
- * @since v0.1.21
- */
- function notStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void;
- /**
- * Tests for deep equality between the `actual` and `expected` parameters.
- * "Deep" equality means that the enumerable "own" properties of child objects
- * are recursively evaluated also by the following rules.
- * @since v1.2.0
- */
- function deepStrictEqual(actual: unknown, expected: T, message?: string | Error): asserts actual is T;
- /**
- * Tests for deep strict inequality. Opposite of {@link deepStrictEqual}.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.notDeepStrictEqual({ a: 1 }, { a: '1' });
- * // OK
- * ```
- *
- * If the values are deeply and strictly equal, an `AssertionError` is thrown
- * with a `message` property set equal to the value of the `message` parameter. If
- * the `message` parameter is undefined, a default error message is assigned. If
- * the `message` parameter is an instance of an `Error` then it will be thrown
- * instead of the `AssertionError`.
- * @since v1.2.0
- */
- function notDeepStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void;
- /**
- * Expects the function `fn` to throw an error.
- *
- * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
- * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function,
- * a validation object where each property will be tested for strict deep equality,
- * or an instance of error where each property will be tested for strict deep
- * equality including the non-enumerable `message` and `name` properties. When
- * using an object, it is also possible to use a regular expression, when
- * validating against a string property. See below for examples.
- *
- * If specified, `message` will be appended to the message provided by the `AssertionError` if the `fn` call fails to throw or in case the error validation
- * fails.
- *
- * Custom validation object/error instance:
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * const err = new TypeError('Wrong value');
- * err.code = 404;
- * err.foo = 'bar';
- * err.info = {
- * nested: true,
- * baz: 'text',
- * };
- * err.reg = /abc/i;
- *
- * assert.throws(
- * () => {
- * throw err;
- * },
- * {
- * name: 'TypeError',
- * message: 'Wrong value',
- * info: {
- * nested: true,
- * baz: 'text',
- * },
- * // Only properties on the validation object will be tested for.
- * // Using nested objects requires all properties to be present. Otherwise
- * // the validation is going to fail.
- * },
- * );
- *
- * // Using regular expressions to validate error properties:
- * assert.throws(
- * () => {
- * throw err;
- * },
- * {
- * // The `name` and `message` properties are strings and using regular
- * // expressions on those will match against the string. If they fail, an
- * // error is thrown.
- * name: /^TypeError$/,
- * message: /Wrong/,
- * foo: 'bar',
- * info: {
- * nested: true,
- * // It is not possible to use regular expressions for nested properties!
- * baz: 'text',
- * },
- * // The `reg` property contains a regular expression and only if the
- * // validation object contains an identical regular expression, it is going
- * // to pass.
- * reg: /abc/i,
- * },
- * );
- *
- * // Fails due to the different `message` and `name` properties:
- * assert.throws(
- * () => {
- * const otherErr = new Error('Not found');
- * // Copy all enumerable properties from `err` to `otherErr`.
- * for (const [key, value] of Object.entries(err)) {
- * otherErr[key] = value;
- * }
- * throw otherErr;
- * },
- * // The error's `message` and `name` properties will also be checked when using
- * // an error as validation object.
- * err,
- * );
- * ```
- *
- * Validate instanceof using constructor:
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.throws(
- * () => {
- * throw new Error('Wrong value');
- * },
- * Error,
- * );
- * ```
- *
- * Validate error message using [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions):
- *
- * Using a regular expression runs `.toString` on the error object, and will
- * therefore also include the error name.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.throws(
- * () => {
- * throw new Error('Wrong value');
- * },
- * /^Error: Wrong value$/,
- * );
- * ```
- *
- * Custom error validation:
- *
- * The function must return `true` to indicate all internal validations passed.
- * It will otherwise fail with an `AssertionError`.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.throws(
- * () => {
- * throw new Error('Wrong value');
- * },
- * (err) => {
- * assert(err instanceof Error);
- * assert(/value/.test(err));
- * // Avoid returning anything from validation functions besides `true`.
- * // Otherwise, it's not clear what part of the validation failed. Instead,
- * // throw an error about the specific validation that failed (as done in this
- * // example) and add as much helpful debugging information to that error as
- * // possible.
- * return true;
- * },
- * 'unexpected error',
- * );
- * ```
- *
- * `error` cannot be a string. If a string is provided as the second
- * argument, then `error` is assumed to be omitted and the string will be used for `message` instead. This can lead to easy-to-miss mistakes. Using the same
- * message as the thrown error message is going to result in an `ERR_AMBIGUOUS_ARGUMENT` error. Please read the example below carefully if using
- * a string as the second argument gets considered:
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * function throwingFirst() {
- * throw new Error('First');
- * }
- *
- * function throwingSecond() {
- * throw new Error('Second');
- * }
- *
- * function notThrowing() {}
- *
- * // The second argument is a string and the input function threw an Error.
- * // The first case will not throw as it does not match for the error message
- * // thrown by the input function!
- * assert.throws(throwingFirst, 'Second');
- * // In the next example the message has no benefit over the message from the
- * // error and since it is not clear if the user intended to actually match
- * // against the error message, Node.js throws an `ERR_AMBIGUOUS_ARGUMENT` error.
- * assert.throws(throwingSecond, 'Second');
- * // TypeError [ERR_AMBIGUOUS_ARGUMENT]
- *
- * // The string is only used (as message) in case the function does not throw:
- * assert.throws(notThrowing, 'Second');
- * // AssertionError [ERR_ASSERTION]: Missing expected exception: Second
- *
- * // If it was intended to match for the error message do this instead:
- * // It does not throw because the error messages match.
- * assert.throws(throwingSecond, /Second$/);
- *
- * // If the error message does not match, an AssertionError is thrown.
- * assert.throws(throwingFirst, /Second$/);
- * // AssertionError [ERR_ASSERTION]
- * ```
- *
- * Due to the confusing error-prone notation, avoid a string as the second
- * argument.
- * @since v0.1.21
- */
- function throws(block: () => unknown, message?: string | Error): void;
- function throws(block: () => unknown, error: AssertPredicate, message?: string | Error): void;
- /**
- * Asserts that the function `fn` does not throw an error.
- *
- * Using `assert.doesNotThrow()` is actually not useful because there
- * is no benefit in catching an error and then rethrowing it. Instead, consider
- * adding a comment next to the specific code path that should not throw and keep
- * error messages as expressive as possible.
- *
- * When `assert.doesNotThrow()` is called, it will immediately call the `fn` function.
- *
- * If an error is thrown and it is the same type as that specified by the `error` parameter, then an `AssertionError` is thrown. If the error is of a
- * different type, or if the `error` parameter is undefined, the error is
- * propagated back to the caller.
- *
- * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
- * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), or a validation
- * function. See {@link throws} for more details.
- *
- * The following, for instance, will throw the `TypeError` because there is no
- * matching error type in the assertion:
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.doesNotThrow(
- * () => {
- * throw new TypeError('Wrong value');
- * },
- * SyntaxError,
- * );
- * ```
- *
- * However, the following will result in an `AssertionError` with the message
- * 'Got unwanted exception...':
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.doesNotThrow(
- * () => {
- * throw new TypeError('Wrong value');
- * },
- * TypeError,
- * );
- * ```
- *
- * If an `AssertionError` is thrown and a value is provided for the `message` parameter, the value of `message` will be appended to the `AssertionError` message:
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.doesNotThrow(
- * () => {
- * throw new TypeError('Wrong value');
- * },
- * /Wrong value/,
- * 'Whoops',
- * );
- * // Throws: AssertionError: Got unwanted exception: Whoops
- * ```
- * @since v0.1.21
- */
- function doesNotThrow(block: () => unknown, message?: string | Error): void;
- function doesNotThrow(block: () => unknown, error: AssertPredicate, message?: string | Error): void;
- /**
- * Throws `value` if `value` is not `undefined` or `null`. This is useful when
- * testing the `error` argument in callbacks. The stack trace contains all frames
- * from the error passed to `ifError()` including the potential new frames for `ifError()` itself.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.ifError(null);
- * // OK
- * assert.ifError(0);
- * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 0
- * assert.ifError('error');
- * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 'error'
- * assert.ifError(new Error());
- * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: Error
- *
- * // Create some random error frames.
- * let err;
- * (function errorFrame() {
- * err = new Error('test error');
- * })();
- *
- * (function ifErrorFrame() {
- * assert.ifError(err);
- * })();
- * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: test error
- * // at ifErrorFrame
- * // at errorFrame
- * ```
- * @since v0.1.97
- */
- function ifError(value: unknown): asserts value is null | undefined;
- /**
- * Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately
- * calls the function and awaits the returned promise to complete. It will then
- * check that the promise is rejected.
- *
- * If `asyncFn` is a function and it throws an error synchronously, `assert.rejects()` will return a rejected `Promise` with that error. If the
- * function does not return a promise, `assert.rejects()` will return a rejected `Promise` with an [ERR_INVALID_RETURN_VALUE](https://nodejs.org/docs/latest-v22.x/api/errors.html#err_invalid_return_value)
- * error. In both cases the error handler is skipped.
- *
- * Besides the async nature to await the completion behaves identically to {@link throws}.
- *
- * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
- * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function,
- * an object where each property will be tested for, or an instance of error where
- * each property will be tested for including the non-enumerable `message` and `name` properties.
- *
- * If specified, `message` will be the message provided by the `{@link AssertionError}` if the `asyncFn` fails to reject.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * await assert.rejects(
- * async () => {
- * throw new TypeError('Wrong value');
- * },
- * {
- * name: 'TypeError',
- * message: 'Wrong value',
- * },
- * );
- * ```
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * await assert.rejects(
- * async () => {
- * throw new TypeError('Wrong value');
- * },
- * (err) => {
- * assert.strictEqual(err.name, 'TypeError');
- * assert.strictEqual(err.message, 'Wrong value');
- * return true;
- * },
- * );
- * ```
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.rejects(
- * Promise.reject(new Error('Wrong value')),
- * Error,
- * ).then(() => {
- * // ...
- * });
- * ```
- *
- * `error` cannot be a string. If a string is provided as the second argument, then `error` is assumed to
- * be omitted and the string will be used for `message` instead. This can lead to easy-to-miss mistakes. Please read the
- * example in {@link throws} carefully if using a string as the second argument gets considered.
- * @since v10.0.0
- */
- function rejects(block: (() => Promise) | Promise, message?: string | Error): Promise;
- function rejects(
- block: (() => Promise) | Promise,
- error: AssertPredicate,
- message?: string | Error,
- ): Promise;
- /**
- * Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately
- * calls the function and awaits the returned promise to complete. It will then
- * check that the promise is not rejected.
- *
- * If `asyncFn` is a function and it throws an error synchronously, `assert.doesNotReject()` will return a rejected `Promise` with that error. If
- * the function does not return a promise, `assert.doesNotReject()` will return a
- * rejected `Promise` with an [ERR_INVALID_RETURN_VALUE](https://nodejs.org/docs/latest-v22.x/api/errors.html#err_invalid_return_value) error. In both cases
- * the error handler is skipped.
- *
- * Using `assert.doesNotReject()` is actually not useful because there is little
- * benefit in catching a rejection and then rejecting it again. Instead, consider
- * adding a comment next to the specific code path that should not reject and keep
- * error messages as expressive as possible.
- *
- * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
- * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), or a validation
- * function. See {@link throws} for more details.
- *
- * Besides the async nature to await the completion behaves identically to {@link doesNotThrow}.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * await assert.doesNotReject(
- * async () => {
- * throw new TypeError('Wrong value');
- * },
- * SyntaxError,
- * );
- * ```
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.doesNotReject(Promise.reject(new TypeError('Wrong value')))
- * .then(() => {
- * // ...
- * });
- * ```
- * @since v10.0.0
- */
- function doesNotReject(
- block: (() => Promise) | Promise,
- message?: string | Error,
- ): Promise;
- function doesNotReject(
- block: (() => Promise