,
+> {
+ // 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,
+ ): unknown;
+}
+
+export type ErrorRequestHandler<
+ P = ParamsDictionary,
+ ResBody = any,
+ ReqBody = any,
+ ReqQuery = ParsedQs,
+ LocalsObj extends Record = Record,
+> = (
+ err: any,
+ req: Request,
+ res: Response,
+ next: NextFunction,
+) => unknown;
+
+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}`
+>;
+
+// dprint-ignore
+export type RouteParameters = Route extends string
+ ? Route extends `${infer Required}{${infer Optional}}${infer Next}`
+ ? ParseRouteParameters & Partial> & RouteParameters
+ : ParseRouteParameters
+ : ParamsFlatDictionary;
+
+type ParseRouteParameters = string extends Route ? ParamsDictionary
+ : Route extends `${string}:${infer Rest}` ?
+ & (
+ GetRouteParameter extends never ? ParamsDictionary
+ : { [P in GetRouteParameter]: string }
+ )
+ & (Rest extends `${GetRouteParameter}${infer Next}` ? RouteParameters : unknown)
+ : Route extends `${string}*${infer Rest}` ?
+ & (
+ GetRouteParameter extends never ? ParamsDictionary
+ : { [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 | RegExp,
+ 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 | RegExp,
+ 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`, then `req.params`
+ * will only contains strings, in which case you should use `ParamsFlatDictionary` instead.
+ *
+ * @example
+ * app.get('/user/:id', (req, res) => res.send(req.params.id)); // implicitly `ParamsDictionary`, parameter is string
+ * app.get('/user/*id', (req, res) => res.send(req.params.id)); // implicitly `ParamsDictionary`, parameter is string[]
+ * app.get(/user\/(?.*)/, (req, res) => res.send(req.params.id)); // implicitly `ParamsFlatDictionary`, parameter is string
+ * app.get(/user\/(.*)/, (req, res) => res.send(req.params[0])); // implicitly `ParamsFlatDictionary`, parameter is string
+ */
+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: "mount", 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/ViNotes-Backend-TS/node_modules/@types/express-serve-static-core/package.json b/ViNotes-Backend-TS/node_modules/@types/express-serve-static-core/package.json
new file mode 100644
index 000000000..b49be3c62
--- /dev/null
+++ b/ViNotes-Backend-TS/node_modules/@types/express-serve-static-core/package.json
@@ -0,0 +1,51 @@
+{
+ "name": "@types/express-serve-static-core",
+ "version": "5.1.1",
+ "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": "b337510882ad267c3072f527a983b751462ec3050b22918b97b8e5a2b6bf3656",
+ "typeScriptVersion": "5.2"
+}
\ No newline at end of file
diff --git a/ViNotes-Backend-TS/node_modules/@types/express/LICENSE b/ViNotes-Backend-TS/node_modules/@types/express/LICENSE
new file mode 100644
index 000000000..9e841e7a2
--- /dev/null
+++ b/ViNotes-Backend-TS/node_modules/@types/express/LICENSE
@@ -0,0 +1,21 @@
+ 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/ViNotes-Backend-TS/node_modules/@types/express/README.md b/ViNotes-Backend-TS/node_modules/@types/express/README.md
new file mode 100644
index 000000000..f8d12cfdf
--- /dev/null
+++ b/ViNotes-Backend-TS/node_modules/@types/express/README.md
@@ -0,0 +1,15 @@
+# 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: Mon, 01 Dec 2025 20:34:48 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/ViNotes-Backend-TS/node_modules/@types/express/index.d.ts b/ViNotes-Backend-TS/node_modules/@types/express/index.d.ts
new file mode 100644
index 000000000..f18dccb50
--- /dev/null
+++ b/ViNotes-Backend-TS/node_modules/@types/express/index.d.ts
@@ -0,0 +1,122 @@
+/* =================== USAGE ===================
+
+ import express = require("express");
+ var app = express();
+
+ =============================================== */
+
+///
+///
+
+import bodyParser = require("body-parser");
+import * as core from "express-serve-static-core";
+import serveStatic = require("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/ViNotes-Backend-TS/node_modules/@types/express/package.json b/ViNotes-Backend-TS/node_modules/@types/express/package.json
new file mode 100644
index 000000000..8dc7d3bb3
--- /dev/null
+++ b/ViNotes-Backend-TS/node_modules/@types/express/package.json
@@ -0,0 +1,45 @@
+{
+ "name": "@types/express",
+ "version": "5.0.6",
+ "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": "^2"
+ },
+ "peerDependencies": {},
+ "typesPublisherContentHash": "d4b85097ff826bcd411f53fe4b61bcdfa304d54cc0efb8e64b184f65d149d2f8",
+ "typeScriptVersion": "5.2"
+}
\ No newline at end of file
diff --git a/ViNotes-Backend-TS/node_modules/@types/http-errors/LICENSE b/ViNotes-Backend-TS/node_modules/@types/http-errors/LICENSE
new file mode 100644
index 000000000..9e841e7a2
--- /dev/null
+++ b/ViNotes-Backend-TS/node_modules/@types/http-errors/LICENSE
@@ -0,0 +1,21 @@
+ 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/ViNotes-Backend-TS/node_modules/@types/http-errors/README.md b/ViNotes-Backend-TS/node_modules/@types/http-errors/README.md
new file mode 100644
index 000000000..d64e3dc91
--- /dev/null
+++ b/ViNotes-Backend-TS/node_modules/@types/http-errors/README.md
@@ -0,0 +1,15 @@
+# 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/ViNotes-Backend-TS/node_modules/@types/http-errors/index.d.ts b/ViNotes-Backend-TS/node_modules/@types/http-errors/index.d.ts
new file mode 100644
index 000000000..e7fb2a8da
--- /dev/null
+++ b/ViNotes-Backend-TS/node_modules/@types/http-errors/index.d.ts
@@ -0,0 +1,77 @@
+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/ViNotes-Backend-TS/node_modules/@types/http-errors/package.json b/ViNotes-Backend-TS/node_modules/@types/http-errors/package.json
new file mode 100644
index 000000000..91d49cfc9
--- /dev/null
+++ b/ViNotes-Backend-TS/node_modules/@types/http-errors/package.json
@@ -0,0 +1,36 @@
+{
+ "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/ViNotes-Backend-TS/node_modules/@types/node/LICENSE b/ViNotes-Backend-TS/node_modules/@types/node/LICENSE
new file mode 100644
index 000000000..9e841e7a2
--- /dev/null
+++ b/ViNotes-Backend-TS/node_modules/@types/node/LICENSE
@@ -0,0 +1,21 @@
+ 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/ViNotes-Backend-TS/node_modules/@types/node/README.md b/ViNotes-Backend-TS/node_modules/@types/node/README.md
new file mode 100644
index 000000000..13019549e
--- /dev/null
+++ b/ViNotes-Backend-TS/node_modules/@types/node/README.md
@@ -0,0 +1,15 @@
+# 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, 07 May 2026 22:21:35 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), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [David Junger](https://github.com/touffy), [Mohsen Azimi](https://github.com/mohsen1), [Nikita Galkin](https://github.com/galkin), [Sebastian Silbermann](https://github.com/eps1lon), [Wilco Bakker](https://github.com/WilcoBakker), [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), [René](https://github.com/Renegade334), and [Yagiz Nizipli](https://github.com/anonrig).
diff --git a/ViNotes-Backend-TS/node_modules/@types/node/assert.d.ts b/ViNotes-Backend-TS/node_modules/@types/node/assert.d.ts
new file mode 100644
index 000000000..c4cc77e43
--- /dev/null
+++ b/ViNotes-Backend-TS/node_modules/@types/node/assert.d.ts
@@ -0,0 +1,950 @@
+declare module "node:assert" {
+ import strict = require("node:assert/strict");
+ /**
+ * An alias of {@link assert.ok}.
+ * @since v0.5.9
+ * @param value The input that is checked for being truthy.
+ */
+ function assert(value: unknown, message?: string | Error): asserts value;
+ const kOptions: unique symbol;
+ namespace assert {
+ type AssertMethodNames =
+ | "deepEqual"
+ | "deepStrictEqual"
+ | "doesNotMatch"
+ | "doesNotReject"
+ | "doesNotThrow"
+ | "equal"
+ | "fail"
+ | "ifError"
+ | "match"
+ | "notDeepEqual"
+ | "notDeepStrictEqual"
+ | "notEqual"
+ | "notStrictEqual"
+ | "ok"
+ | "partialDeepStrictEqual"
+ | "rejects"
+ | "strictEqual"
+ | "throws";
+ interface AssertOptions {
+ /**
+ * If set to `'full'`, shows the full diff in assertion errors.
+ * @default 'simple'
+ */
+ diff?: "simple" | "full" | undefined;
+ /**
+ * If set to `true`, non-strict methods behave like their
+ * corresponding strict methods.
+ * @default true
+ */
+ strict?: boolean | undefined;
+ /**
+ * If set to `true`, skips prototype and constructor
+ * comparison in deep equality checks.
+ * @since v24.9.0
+ * @default false
+ */
+ skipPrototype?: boolean | undefined;
+ }
+ interface Assert extends Pick {
+ readonly [kOptions]: AssertOptions & { strict: false };
+ }
+ interface AssertStrict extends Pick {
+ readonly [kOptions]: AssertOptions & { strict: true };
+ }
+ /**
+ * The `Assert` class allows creating independent assertion instances with custom options.
+ * @since v24.6.0
+ */
+ var Assert: {
+ /**
+ * Creates a new assertion instance. The `diff` option controls the verbosity of diffs in assertion error messages.
+ *
+ * ```js
+ * const { Assert } = require('node:assert');
+ * const assertInstance = new Assert({ diff: 'full' });
+ * assertInstance.deepStrictEqual({ a: 1 }, { a: 2 });
+ * // Shows a full diff in the error message.
+ * ```
+ *
+ * **Important**: When destructuring assertion methods from an `Assert` instance,
+ * the methods lose their connection to the instance's configuration options (such
+ * as `diff`, `strict`, and `skipPrototype` settings).
+ * The destructured methods will fall back to default behavior instead.
+ *
+ * ```js
+ * const myAssert = new Assert({ diff: 'full' });
+ *
+ * // This works as expected - uses 'full' diff
+ * myAssert.strictEqual({ a: 1 }, { b: { c: 1 } });
+ *
+ * // This loses the 'full' diff setting - falls back to default 'simple' diff
+ * const { strictEqual } = myAssert;
+ * strictEqual({ a: 1 }, { b: { c: 1 } });
+ * ```
+ *
+ * The `skipPrototype` option affects all deep equality methods:
+ *
+ * ```js
+ * class Foo {
+ * constructor(a) {
+ * this.a = a;
+ * }
+ * }
+ *
+ * class Bar {
+ * constructor(a) {
+ * this.a = a;
+ * }
+ * }
+ *
+ * const foo = new Foo(1);
+ * const bar = new Bar(1);
+ *
+ * // Default behavior - fails due to different constructors
+ * const assert1 = new Assert();
+ * assert1.deepStrictEqual(foo, bar); // AssertionError
+ *
+ * // Skip prototype comparison - passes if properties are equal
+ * const assert2 = new Assert({ skipPrototype: true });
+ * assert2.deepStrictEqual(foo, bar); // OK
+ * ```
+ *
+ * When destructured, methods lose access to the instance's `this` context and revert to default assertion behavior
+ * (diff: 'simple', non-strict mode).
+ * To maintain custom options when using destructured methods, avoid
+ * destructuring and call methods directly on the instance.
+ * @since v24.6.0
+ */
+ new(
+ options?: AssertOptions & { strict?: true | undefined },
+ ): AssertStrict;
+ new(
+ options: AssertOptions,
+ ): Assert;
+ };
+ interface AssertionErrorOptions {
+ /**
+ * If provided, the error message is set to this value.
+ */
+ message?: string | undefined;
+ /**
+ * The `actual` property on the error instance.
+ */
+ actual?: unknown;
+ /**
+ * The `expected` property on the error instance.
+ */
+ expected?: unknown;
+ /**
+ * The `operator` property on the error instance.
+ */
+ operator?: string | undefined;
+ /**
+ * If provided, the generated stack trace omits frames before this function.
+ */
+ stackStartFn?: Function | undefined;
+ /**
+ * If set to `'full'`, shows the full diff in assertion errors.
+ * @default 'simple'
+ */
+ diff?: "simple" | "full" | undefined;
+ }
+ /**
+ * 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 {
+ constructor(options: AssertionErrorOptions);
+ /**
+ * 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;
+ /**
+ * 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";
+ /**
+ * Set to the passed in operator value.
+ */
+ operator: string;
+ }
+ 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
+ * ```
+ * @since v0.1.21
+ * @param [message='Failed']
+ */
+ function fail(message?: string | Error): 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(2 + 2 > 5);;
+ * // AssertionError: The expression evaluated to a falsy value:
+ * //
+ * // assert(2 + 2 > 5)
+ * ```
+ * @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-v25.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-v25.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