@sapphire/plugin-api 7.0.0-next.fc8c5ba → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +61 -0
- package/dist/cjs/index.cjs +5 -31
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +90 -108
- package/dist/cjs/lib/structures/Middleware.cjs.map +1 -1
- package/dist/cjs/lib/structures/MiddlewareStore.cjs.map +1 -1
- package/dist/cjs/lib/structures/Route.cjs +4 -9
- package/dist/cjs/lib/structures/Route.cjs.map +1 -1
- package/dist/cjs/lib/structures/RouteLoaderStrategy.cjs.map +1 -1
- package/dist/cjs/lib/structures/RouteStore.cjs.map +1 -1
- package/dist/cjs/lib/structures/api/ApiRequest.cjs +128 -4
- package/dist/cjs/lib/structures/api/ApiRequest.cjs.map +1 -1
- package/dist/cjs/lib/structures/api/ApiResponse.cjs +4 -5
- package/dist/cjs/lib/structures/api/ApiResponse.cjs.map +1 -1
- package/dist/cjs/lib/structures/api/CookieStore.cjs.map +1 -1
- package/dist/cjs/lib/structures/http/Auth.cjs.map +1 -1
- package/dist/cjs/lib/structures/http/HttpCodes.cjs.map +1 -1
- package/dist/cjs/lib/structures/http/HttpMethods.cjs +1 -0
- package/dist/cjs/lib/structures/http/HttpMethods.cjs.map +1 -1
- package/dist/cjs/lib/structures/http/Server.cjs +1 -8
- package/dist/cjs/lib/structures/http/Server.cjs.map +1 -1
- package/dist/cjs/lib/structures/router/RouterBranch.cjs.map +1 -1
- package/dist/cjs/lib/structures/router/RouterNode.cjs.map +1 -1
- package/dist/cjs/lib/structures/router/RouterRoot.cjs +11 -1
- package/dist/cjs/lib/structures/router/RouterRoot.cjs.map +1 -1
- package/dist/cjs/lib/utils/MimeType.cjs +4 -0
- package/dist/cjs/lib/utils/MimeType.cjs.map +1 -0
- package/dist/cjs/lib/utils/_body/RequestHeadersProxy.cjs +100 -0
- package/dist/cjs/lib/utils/_body/RequestHeadersProxy.cjs.map +1 -0
- package/dist/cjs/lib/utils/_body/RequestProxy.cjs +124 -0
- package/dist/cjs/lib/utils/_body/RequestProxy.cjs.map +1 -0
- package/dist/cjs/lib/utils/_body/RequestURLProxy.cjs +179 -0
- package/dist/cjs/lib/utils/_body/RequestURLProxy.cjs.map +1 -0
- package/dist/cjs/lib/utils/constants.cjs +8 -0
- package/dist/cjs/lib/utils/constants.cjs.map +1 -0
- package/dist/cjs/listeners/PluginRouteError.cjs.map +1 -1
- package/dist/cjs/listeners/PluginServerMiddlewareError.cjs.map +1 -1
- package/dist/cjs/listeners/PluginServerMiddlewareSuccess.cjs.map +1 -1
- package/dist/cjs/listeners/PluginServerRequest.cjs.map +1 -1
- package/dist/cjs/listeners/PluginServerRouterBranchMethodNotAllowed.cjs.map +1 -1
- package/dist/cjs/listeners/PluginServerRouterBranchNotFound.cjs.map +1 -1
- package/dist/cjs/listeners/PluginServerRouterFound.cjs.map +1 -1
- package/dist/cjs/listeners/_load.cjs.map +1 -1
- package/dist/cjs/middlewares/_load.cjs.map +1 -1
- package/dist/cjs/middlewares/auth.cjs.map +1 -1
- package/dist/cjs/middlewares/body.cjs +1 -17
- package/dist/cjs/middlewares/body.cjs.map +1 -1
- package/dist/cjs/middlewares/cookies.cjs.map +1 -1
- package/dist/cjs/middlewares/headers.cjs.map +1 -1
- package/dist/cjs/register.cjs +2 -3
- package/dist/cjs/register.cjs.map +1 -1
- package/dist/cjs/register.d.cts +0 -1
- package/dist/cjs/routes/_load.cjs.map +1 -1
- package/dist/cjs/routes/oauth/callback.post.cjs +1 -1
- package/dist/cjs/routes/oauth/callback.post.cjs.map +1 -1
- package/dist/cjs/routes/oauth/logout.post.cjs.map +1 -1
- package/dist/esm/index.d.mts +90 -108
- package/dist/esm/index.mjs +1 -5
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/lib/structures/Middleware.mjs.map +1 -1
- package/dist/esm/lib/structures/MiddlewareStore.mjs.map +1 -1
- package/dist/esm/lib/structures/Route.mjs +4 -9
- package/dist/esm/lib/structures/Route.mjs.map +1 -1
- package/dist/esm/lib/structures/RouteLoaderStrategy.mjs.map +1 -1
- package/dist/esm/lib/structures/RouteStore.mjs.map +1 -1
- package/dist/esm/lib/structures/api/ApiRequest.mjs +122 -5
- package/dist/esm/lib/structures/api/ApiRequest.mjs.map +1 -1
- package/dist/esm/lib/structures/api/ApiResponse.mjs +4 -5
- package/dist/esm/lib/structures/api/ApiResponse.mjs.map +1 -1
- package/dist/esm/lib/structures/api/CookieStore.mjs.map +1 -1
- package/dist/esm/lib/structures/http/Auth.mjs.map +1 -1
- package/dist/esm/lib/structures/http/HttpCodes.mjs.map +1 -1
- package/dist/esm/lib/structures/http/HttpMethods.mjs +1 -0
- package/dist/esm/lib/structures/http/HttpMethods.mjs.map +1 -1
- package/dist/esm/lib/structures/http/Server.mjs +1 -8
- package/dist/esm/lib/structures/http/Server.mjs.map +1 -1
- package/dist/esm/lib/structures/router/RouterBranch.mjs.map +1 -1
- package/dist/esm/lib/structures/router/RouterNode.mjs.map +1 -1
- package/dist/esm/lib/structures/router/RouterRoot.mjs +11 -1
- package/dist/esm/lib/structures/router/RouterRoot.mjs.map +1 -1
- package/dist/esm/lib/utils/MimeType.mjs +3 -0
- package/dist/esm/lib/utils/MimeType.mjs.map +1 -0
- package/dist/esm/lib/utils/_body/RequestHeadersProxy.mjs +95 -0
- package/dist/esm/lib/utils/_body/RequestHeadersProxy.mjs.map +1 -0
- package/dist/esm/lib/utils/_body/RequestProxy.mjs +112 -0
- package/dist/esm/lib/utils/_body/RequestProxy.mjs.map +1 -0
- package/dist/esm/lib/utils/_body/RequestURLProxy.mjs +167 -0
- package/dist/esm/lib/utils/_body/RequestURLProxy.mjs.map +1 -0
- package/dist/esm/lib/utils/constants.mjs +8 -0
- package/dist/esm/lib/utils/constants.mjs.map +1 -0
- package/dist/esm/listeners/PluginRouteError.mjs.map +1 -1
- package/dist/esm/listeners/PluginServerMiddlewareError.mjs.map +1 -1
- package/dist/esm/listeners/PluginServerMiddlewareSuccess.mjs.map +1 -1
- package/dist/esm/listeners/PluginServerRequest.mjs.map +1 -1
- package/dist/esm/listeners/PluginServerRouterBranchMethodNotAllowed.mjs.map +1 -1
- package/dist/esm/listeners/PluginServerRouterBranchNotFound.mjs.map +1 -1
- package/dist/esm/listeners/PluginServerRouterFound.mjs.map +1 -1
- package/dist/esm/listeners/_load.mjs.map +1 -1
- package/dist/esm/middlewares/_load.mjs.map +1 -1
- package/dist/esm/middlewares/auth.mjs.map +1 -1
- package/dist/esm/middlewares/body.mjs +2 -16
- package/dist/esm/middlewares/body.mjs.map +1 -1
- package/dist/esm/middlewares/cookies.mjs.map +1 -1
- package/dist/esm/middlewares/headers.mjs.map +1 -1
- package/dist/esm/register.d.mts +0 -1
- package/dist/esm/register.mjs +2 -3
- package/dist/esm/register.mjs.map +1 -1
- package/dist/esm/routes/_load.mjs.map +1 -1
- package/dist/esm/routes/oauth/callback.post.mjs +1 -1
- package/dist/esm/routes/oauth/callback.post.mjs.map +1 -1
- package/dist/esm/routes/oauth/logout.post.mjs.map +1 -1
- package/package.json +14 -12
- package/dist/cjs/lib/structures/MediaParser.cjs +0 -79
- package/dist/cjs/lib/structures/MediaParser.cjs.map +0 -1
- package/dist/cjs/lib/structures/MediaParserStore.cjs +0 -27
- package/dist/cjs/lib/structures/MediaParserStore.cjs.map +0 -1
- package/dist/cjs/lib/utils/MimeTypes.cjs +0 -26
- package/dist/cjs/lib/utils/MimeTypes.cjs.map +0 -1
- package/dist/cjs/mediaParsers/_load.cjs +0 -20
- package/dist/cjs/mediaParsers/_load.cjs.map +0 -1
- package/dist/cjs/mediaParsers/applicationFormUrlEncoded.cjs +0 -23
- package/dist/cjs/mediaParsers/applicationFormUrlEncoded.cjs.map +0 -1
- package/dist/cjs/mediaParsers/applicationJson.cjs +0 -22
- package/dist/cjs/mediaParsers/applicationJson.cjs.map +0 -1
- package/dist/cjs/mediaParsers/textPlain.cjs +0 -22
- package/dist/cjs/mediaParsers/textPlain.cjs.map +0 -1
- package/dist/esm/lib/structures/MediaParser.mjs +0 -76
- package/dist/esm/lib/structures/MediaParser.mjs.map +0 -1
- package/dist/esm/lib/structures/MediaParserStore.mjs +0 -24
- package/dist/esm/lib/structures/MediaParserStore.mjs.map +0 -1
- package/dist/esm/lib/utils/MimeTypes.mjs +0 -26
- package/dist/esm/lib/utils/MimeTypes.mjs.map +0 -1
- package/dist/esm/mediaParsers/_load.mjs +0 -17
- package/dist/esm/mediaParsers/_load.mjs.map +0 -1
- package/dist/esm/mediaParsers/applicationFormUrlEncoded.mjs +0 -20
- package/dist/esm/mediaParsers/applicationFormUrlEncoded.mjs.map +0 -1
- package/dist/esm/mediaParsers/applicationJson.mjs +0 -19
- package/dist/esm/mediaParsers/applicationJson.mjs.map +0 -1
- package/dist/esm/mediaParsers/textPlain.mjs +0 -19
- package/dist/esm/mediaParsers/textPlain.mjs.map +0 -1
|
@@ -2,7 +2,6 @@ import { __name, __publicField } from '../../../chunk-S573YWRP.mjs';
|
|
|
2
2
|
import { container } from '@sapphire/pieces';
|
|
3
3
|
import { AsyncEventEmitter } from '@vladfrangu/async_event_emitter';
|
|
4
4
|
import { createServer } from 'node:http';
|
|
5
|
-
import { MediaParserStore } from '../MediaParserStore.mjs';
|
|
6
5
|
import { MiddlewareStore } from '../MiddlewareStore.mjs';
|
|
7
6
|
import { RouteStore } from '../RouteStore.mjs';
|
|
8
7
|
import { ApiRequest } from '../api/ApiRequest.mjs';
|
|
@@ -38,11 +37,6 @@ var _Server = class _Server extends AsyncEventEmitter {
|
|
|
38
37
|
* @since 1.0.0
|
|
39
38
|
*/
|
|
40
39
|
__publicField(this, "middlewares");
|
|
41
|
-
/**
|
|
42
|
-
* The media parsers this server holds.
|
|
43
|
-
* @since 1.3.0
|
|
44
|
-
*/
|
|
45
|
-
__publicField(this, "mediaParsers");
|
|
46
40
|
/**
|
|
47
41
|
* The authentication system.
|
|
48
42
|
* @since 1.0.0
|
|
@@ -67,7 +61,6 @@ var _Server = class _Server extends AsyncEventEmitter {
|
|
|
67
61
|
});
|
|
68
62
|
this.routes = new RouteStore();
|
|
69
63
|
this.middlewares = new MiddlewareStore();
|
|
70
|
-
this.mediaParsers = new MediaParserStore();
|
|
71
64
|
this.auth = Auth.create(auth);
|
|
72
65
|
this.server.on("error", this.emit.bind(this, "error" /* Error */));
|
|
73
66
|
this.server.on("request", this.emit.bind(this, "request" /* Request */));
|
|
@@ -107,7 +100,7 @@ var _Server = class _Server extends AsyncEventEmitter {
|
|
|
107
100
|
}
|
|
108
101
|
disconnect() {
|
|
109
102
|
return new Promise((resolve, reject) => {
|
|
110
|
-
this.server.close((error) => error ?
|
|
103
|
+
this.server.close((error) => error ? reject(error) : resolve());
|
|
111
104
|
});
|
|
112
105
|
}
|
|
113
106
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/lib/structures/http/Server.ts"],"names":["ServerEvent","httpCreateServer","error"],"mappings":"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","file":"Server.mjs","sourcesContent":["import { container } from '@sapphire/pieces';\nimport { AsyncEventEmitter } from '@vladfrangu/async_event_emitter';\nimport { Server as HttpServer, createServer as httpCreateServer, type ServerOptions as HttpOptions } from 'node:http';\nimport type { ListenOptions } from 'node:net';\nimport { MediaParserStore } from '../MediaParserStore';\nimport { MiddlewareStore } from '../MiddlewareStore';\nimport type { Route } from '../Route';\nimport { RouteStore } from '../RouteStore';\nimport { ApiRequest } from '../api/ApiRequest';\nimport { ApiResponse } from '../api/ApiResponse';\nimport type { RouterBranch } from '../router/RouterBranch';\nimport { Auth, type ServerOptionsAuth } from './Auth';\n\nexport enum ServerEvent {\n\tError = 'error',\n\tRequest = 'request',\n\tRouterBranchNotFound = 'routerBranchNotFound',\n\tRouterBranchMethodNotAllowed = 'routerBranchMethodNotAllowed',\n\tRouterFound = 'routerFound',\n\tRouteError = 'routeError',\n\tMiddlewareFailure = 'middlewareFailure',\n\tMiddlewareError = 'middlewareError',\n\tMiddlewareSuccess = 'middlewareSuccess'\n}\n\nexport interface ServerEvents {\n\t[ServerEvent.Error]: [error: Error, request: ApiRequest, response: ApiResponse];\n\t[ServerEvent.Request]: [request: ApiRequest, response: ApiResponse];\n\t[ServerEvent.RouterBranchNotFound]: [request: ApiRequest, response: ApiResponse];\n\t[ServerEvent.RouterBranchMethodNotAllowed]: [request: ApiRequest, response: ApiResponse, node: RouterBranch];\n\t[ServerEvent.RouterFound]: [request: ApiRequest, response: ApiResponse];\n\t[ServerEvent.RouteError]: [error: Error, request: ApiRequest, response: ApiResponse];\n\t[ServerEvent.MiddlewareFailure]: [request: ApiRequest, response: ApiResponse];\n\t[ServerEvent.MiddlewareSuccess]: [request: Route.Request, response: Route.Response, route: Route];\n\t[ServerEvent.MiddlewareError]: [error: Error, request: ApiRequest, response: ApiResponse];\n}\n\n/**\n * @since 1.0.0\n */\nexport class Server extends AsyncEventEmitter<ServerEvents> {\n\t/**\n\t * The routes this server holds.\n\t * @since 1.0.0\n\t */\n\tpublic readonly routes: RouteStore;\n\n\t/**\n\t * The middlewares this server holds.\n\t * @since 1.0.0\n\t */\n\tpublic readonly middlewares: MiddlewareStore;\n\n\t/**\n\t * The media parsers this server holds.\n\t * @since 1.3.0\n\t */\n\tpublic readonly mediaParsers: MediaParserStore;\n\n\t/**\n\t * The authentication system.\n\t * @since 1.0.0\n\t */\n\tpublic readonly auth: Auth | null;\n\n\t/**\n\t * The http.Server instance that manages the recieved HTTP requests.\n\t * @since 1.0.0\n\t */\n\tpublic readonly server: HttpServer;\n\n\t/**\n\t * The options for this server.\n\t * @since 1.0.0\n\t */\n\tpublic readonly options: AuthLessServerOptions;\n\n\t/**\n\t * @since 1.0.0\n\t * @param options The options for this server\n\t */\n\tpublic constructor({ auth, ...options }: ServerOptions = {}) {\n\t\tsuper();\n\n\t\tcontainer.server = this;\n\n\t\tthis.options = options;\n\t\tthis.server = httpCreateServer({\n\t\t\tIncomingMessage: ApiRequest,\n\t\t\tServerResponse: ApiResponse,\n\t\t\t...(options.server ?? {})\n\t\t});\n\t\tthis.routes = new RouteStore();\n\t\tthis.middlewares = new MiddlewareStore();\n\t\tthis.mediaParsers = new MediaParserStore();\n\t\tthis.auth = Auth.create(auth);\n\t\tthis.server.on('error', this.emit.bind(this, ServerEvent.Error));\n\t\tthis.server.on('request', this.emit.bind(this, ServerEvent.Request));\n\t}\n\n\tpublic connect() {\n\t\tconst { server } = this;\n\t\tserver.listen({\n\t\t\tport: 4000,\n\t\t\t...(this.options.listenOptions ?? {})\n\t\t});\n\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tfunction listening() {\n\t\t\t\tcleanup();\n\t\t\t\tresolve();\n\t\t\t}\n\n\t\t\tfunction error(error: Error) {\n\t\t\t\tcleanup();\n\t\t\t\treject(error);\n\t\t\t}\n\n\t\t\tfunction close() {\n\t\t\t\tcleanup();\n\t\t\t\treject(new Error('Closed unexpectedly.'));\n\t\t\t}\n\n\t\t\tfunction cleanup() {\n\t\t\t\tserver.off('listening', listening);\n\t\t\t\tserver.off('error', error);\n\t\t\t\tserver.off('close', close);\n\t\t\t}\n\n\t\t\tserver.on('listening', listening);\n\t\t\tserver.on('error', error);\n\t\t\tserver.on('close', close);\n\t\t});\n\t}\n\n\tpublic disconnect() {\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tthis.server.close((error) => (error ? resolve() : reject(error)));\n\t\t});\n\t}\n}\n\n/**\n * RFC 1341 4: Defines a Content-Type's type, which follows the following structure:\n *\n * - `type` = `text` | `multipart` | `message` | `image` | `audio` | `video` | `application` | x-token\n * - `x-token` = The two characters \"X-\" followed, with no intervening white space, by any token\n * @since 1.3.0\n */\nexport type ContentTypeType = 'text' | 'multipart' | 'message' | 'image' | 'audio' | 'video' | 'application' | `X-${string}`;\n\n/**\n * RFC 1341 4: Defines a Content-Type's parameter, which follows the following structure:\n *\n * - `parameter` = `attribute` \"=\" `value`\n * - `attribute` = `token`\n * - `value` = `token` / `quoted-string`\n * - `token` = `1*<any CHAR except \"SPACE\", \"CTLs\", or \"tspecials\">`\n * - `tspecials` = `(` | `)` | `<` | `>` | `@` | `,` | `;` | `:` | `\\` | `\"` | `/` | `[` | `]` | `?` | `.` | `=`\n *\n * @note `tspecials` must be in quoted-string, to use within parameter values.\n * @note The definition of `tspecials` is the same as the RFC 822 definition of `specials` with the addition of the\n * three characters `/`, `?`, and `=`.\n * @since 1.3.0\n */\nexport type ContentTypeParameter = `; ${string}=${string}`;\n\n/**\n * RFC 1341 4: Defines the syntax for a Content-Type field without parameters, which follows the following structure:\n * `type \"/\" subtype`.\n */\nexport type MimeTypeWithoutParameters = `${ContentTypeType}/${string}`;\n\n/**\n * RFC 1341 4: Defines the syntax for a Content-Type field, which follows the following structure:\n * `type \"/\" subtype *[\";\" parameter]`.\n * @since 1.3.0\n */\nexport type MimeType = `${MimeTypeWithoutParameters}${'' | ContentTypeParameter}`;\n\n/**\n * The API options.\n * @since 1.0.0\n */\nexport interface ServerOptions {\n\t/**\n\t * The prefix for all routes, e.g. `v1/`.\n\t * @since 1.0.0\n\t * @default ''\n\t */\n\tprefix?: string;\n\n\t/**\n\t * The origin header to be set on every request at 'Access-Control-Allow-Origin'.\n\t * @since 1.0.0\n\t * @default '*'\n\t */\n\torigin?: string;\n\n\t/**\n\t * (RFC 7230 3.3.2) The maximum decimal number of octets.\n\t * @since 1.0.0\n\t * @default 1024 * 1024 * 50\n\t */\n\tmaximumBodyLength?: number;\n\n\t/**\n\t * The accepted content types for this route. If set to null, the route will accept any data.\n\t * @since 1.3.0\n\t * @default null\n\t */\n\tacceptedContentMimeTypes?: MimeTypeWithoutParameters[] | null;\n\n\t/**\n\t * The HTTP server options.\n\t * @since 1.0.0\n\t * @default {}\n\t */\n\tserver?: HttpOptions;\n\n\t/**\n\t * The HTTP listen options.\n\t * @since 1.0.0\n\t * @default { port: 4000 }\n\t */\n\tlistenOptions?: ListenOptions;\n\n\t/**\n\t * The auth options. If neither `auth` nor `auth.secret` are defined, auth-related routes and middlewares will be\n\t * automatically disabled.\n\t * @since 1.0.0\n\t * @default {}\n\t */\n\tauth?: ServerOptionsAuth;\n\n\t/**\n\t * Whether the server should connect upon being when the plugin is loaded.\n\t * @since 3.2.0\n\t * @default true\n\t */\n\tautomaticallyConnect?: boolean;\n}\n\n/**\n * The {@link ServerOptions} without {@link ServerOptions.auth}.\n * @since 1.0.0\n */\nexport type AuthLessServerOptions = Omit<ServerOptions, 'auth'>;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/structures/http/Server.ts"],"names":["ServerEvent","httpCreateServer","error"],"mappings":"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","file":"Server.mjs","sourcesContent":["import { container } from '@sapphire/pieces';\nimport { AsyncEventEmitter } from '@vladfrangu/async_event_emitter';\nimport { Server as HttpServer, createServer as httpCreateServer, type ServerOptions as HttpOptions } from 'node:http';\nimport type { ListenOptions } from 'node:net';\nimport { MiddlewareStore } from '../MiddlewareStore';\nimport type { Route } from '../Route';\nimport { RouteStore } from '../RouteStore';\nimport { ApiRequest } from '../api/ApiRequest';\nimport { ApiResponse } from '../api/ApiResponse';\nimport type { RouterBranch } from '../router/RouterBranch';\nimport { Auth, type ServerOptionsAuth } from './Auth';\n\nexport enum ServerEvent {\n\tError = 'error',\n\tRequest = 'request',\n\tRouterBranchNotFound = 'routerBranchNotFound',\n\tRouterBranchMethodNotAllowed = 'routerBranchMethodNotAllowed',\n\tRouterFound = 'routerFound',\n\tRouteError = 'routeError',\n\tMiddlewareFailure = 'middlewareFailure',\n\tMiddlewareError = 'middlewareError',\n\tMiddlewareSuccess = 'middlewareSuccess'\n}\n\nexport interface ServerEvents {\n\t[ServerEvent.Error]: [error: Error, request: ApiRequest, response: ApiResponse];\n\t[ServerEvent.Request]: [request: ApiRequest, response: ApiResponse];\n\t[ServerEvent.RouterBranchNotFound]: [request: ApiRequest, response: ApiResponse];\n\t[ServerEvent.RouterBranchMethodNotAllowed]: [request: ApiRequest, response: ApiResponse, node: RouterBranch];\n\t[ServerEvent.RouterFound]: [request: ApiRequest, response: ApiResponse];\n\t[ServerEvent.RouteError]: [error: Error, request: ApiRequest, response: ApiResponse];\n\t[ServerEvent.MiddlewareFailure]: [request: ApiRequest, response: ApiResponse];\n\t[ServerEvent.MiddlewareSuccess]: [request: Route.Request, response: Route.Response, route: Route];\n\t[ServerEvent.MiddlewareError]: [error: Error, request: ApiRequest, response: ApiResponse];\n}\n\n/**\n * @since 1.0.0\n */\nexport class Server extends AsyncEventEmitter<ServerEvents> {\n\t/**\n\t * The routes this server holds.\n\t * @since 1.0.0\n\t */\n\tpublic readonly routes: RouteStore;\n\n\t/**\n\t * The middlewares this server holds.\n\t * @since 1.0.0\n\t */\n\tpublic readonly middlewares: MiddlewareStore;\n\n\t/**\n\t * The authentication system.\n\t * @since 1.0.0\n\t */\n\tpublic readonly auth: Auth | null;\n\n\t/**\n\t * The http.Server instance that manages the recieved HTTP requests.\n\t * @since 1.0.0\n\t */\n\tpublic readonly server: HttpServer;\n\n\t/**\n\t * The options for this server.\n\t * @since 1.0.0\n\t */\n\tpublic readonly options: AuthLessServerOptions;\n\n\t/**\n\t * @since 1.0.0\n\t * @param options The options for this server\n\t */\n\tpublic constructor({ auth, ...options }: ServerOptions = {}) {\n\t\tsuper();\n\n\t\tcontainer.server = this;\n\n\t\tthis.options = options;\n\t\tthis.server = httpCreateServer({\n\t\t\tIncomingMessage: ApiRequest,\n\t\t\tServerResponse: ApiResponse,\n\t\t\t...(options.server ?? {})\n\t\t});\n\t\tthis.routes = new RouteStore();\n\t\tthis.middlewares = new MiddlewareStore();\n\t\tthis.auth = Auth.create(auth);\n\t\tthis.server.on('error', this.emit.bind(this, ServerEvent.Error));\n\t\tthis.server.on('request', this.emit.bind(this, ServerEvent.Request));\n\t}\n\n\tpublic connect() {\n\t\tconst { server } = this;\n\t\tserver.listen({\n\t\t\tport: 4000,\n\t\t\t...(this.options.listenOptions ?? {})\n\t\t});\n\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tfunction listening() {\n\t\t\t\tcleanup();\n\t\t\t\tresolve();\n\t\t\t}\n\n\t\t\tfunction error(error: Error) {\n\t\t\t\tcleanup();\n\t\t\t\treject(error);\n\t\t\t}\n\n\t\t\tfunction close() {\n\t\t\t\tcleanup();\n\t\t\t\treject(new Error('Closed unexpectedly.'));\n\t\t\t}\n\n\t\t\tfunction cleanup() {\n\t\t\t\tserver.off('listening', listening);\n\t\t\t\tserver.off('error', error);\n\t\t\t\tserver.off('close', close);\n\t\t\t}\n\n\t\t\tserver.on('listening', listening);\n\t\t\tserver.on('error', error);\n\t\t\tserver.on('close', close);\n\t\t});\n\t}\n\n\tpublic disconnect() {\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tthis.server.close((error) => (error ? reject(error) : resolve()));\n\t\t});\n\t}\n}\n\n/**\n * RFC 1341 4: Defines a Content-Type's type, which follows the following structure:\n *\n * - `type` = `text` | `multipart` | `message` | `image` | `audio` | `video` | `application` | x-token\n * - `x-token` = The two characters \"X-\" followed, with no intervening white space, by any token\n * @since 1.3.0\n */\nexport type ContentTypeType = 'text' | 'multipart' | 'message' | 'image' | 'audio' | 'video' | 'application' | `X-${string}`;\n\n/**\n * RFC 1341 4: Defines a Content-Type's parameter, which follows the following structure:\n *\n * - `parameter` = `attribute` \"=\" `value`\n * - `attribute` = `token`\n * - `value` = `token` / `quoted-string`\n * - `token` = `1*<any CHAR except \"SPACE\", \"CTLs\", or \"tspecials\">`\n * - `tspecials` = `(` | `)` | `<` | `>` | `@` | `,` | `;` | `:` | `\\` | `\"` | `/` | `[` | `]` | `?` | `.` | `=`\n *\n * @note `tspecials` must be in quoted-string, to use within parameter values.\n * @note The definition of `tspecials` is the same as the RFC 822 definition of `specials` with the addition of the\n * three characters `/`, `?`, and `=`.\n * @since 1.3.0\n */\nexport type ContentTypeParameter = `; ${string}=${string}`;\n\n/**\n * RFC 1341 4: Defines the syntax for a Content-Type field without parameters, which follows the following structure:\n * `type \"/\" subtype`.\n * @since 7.0.0\n */\nexport type GenericMimeType = `${ContentTypeType}/${string}`;\n\n/**\n * RFC 1341 4: Defines the syntax for a Content-Type field, which follows the following structure:\n * `type \"/\" subtype *[\";\" parameter]`.\n * @since 7.0.0\n */\nexport type GenericParametrizedMimeType = `${GenericMimeType}${'' | ContentTypeParameter}`;\n\n/**\n * The API options.\n * @since 1.0.0\n */\nexport interface ServerOptions {\n\t/**\n\t * The prefix for all routes, e.g. `v1/`.\n\t * @since 1.0.0\n\t * @default ''\n\t */\n\tprefix?: string;\n\n\t/**\n\t * The origin header to be set on every request at 'Access-Control-Allow-Origin'.\n\t * @since 1.0.0\n\t * @default '*'\n\t */\n\torigin?: string;\n\n\t/**\n\t * (RFC 7230 3.3.2) The maximum decimal number of octets.\n\t * @since 1.0.0\n\t * @default 1024 * 1024 * 50\n\t */\n\tmaximumBodyLength?: number;\n\n\t/**\n\t * The HTTP server options.\n\t * @since 1.0.0\n\t * @default {}\n\t */\n\tserver?: HttpOptions;\n\n\t/**\n\t * The HTTP listen options.\n\t * @since 1.0.0\n\t * @default { port: 4000 }\n\t */\n\tlistenOptions?: ListenOptions;\n\n\t/**\n\t * The auth options. If neither `auth` nor `auth.secret` are defined, auth-related routes and middlewares will be\n\t * automatically disabled.\n\t * @since 1.0.0\n\t * @default {}\n\t */\n\tauth?: ServerOptionsAuth;\n\n\t/**\n\t * Whether the server should connect upon being when the plugin is loaded.\n\t * @since 3.2.0\n\t * @default true\n\t */\n\tautomaticallyConnect?: boolean;\n}\n\n/**\n * The {@link ServerOptions} without {@link ServerOptions.auth}.\n * @since 1.0.0\n */\nexport type AuthLessServerOptions = Omit<ServerOptions, 'auth'>;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/lib/structures/router/RouterBranch.ts"],"names":["branch"],"mappings":"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","file":"RouterBranch.mjs","sourcesContent":["import { isNullish } from '@sapphire/utilities';\nimport type { Route } from '../Route';\nimport { RouterNode } from './RouterNode';\n\nexport class RouterBranch {\n\t/**\n\t * The name of the branch.\n\t */\n\tpublic readonly name: string;\n\n\t/**\n\t * Whether or not the branch is dynamic.\n\t */\n\tpublic readonly dynamic: boolean;\n\n\t/**\n\t * The parent branch, if any.\n\t */\n\tpublic readonly parent: RouterBranch | null;\n\n\t/**\n\t * The node this branch is associated with.\n\t */\n\tpublic readonly node = new RouterNode(this);\n\n\t/**\n\t * The methods supported by the branch's node or any of its children.\n\t */\n\tpublic supportedMethods: readonly string[] = [];\n\n\tprivate _staticChildren: RouterBranch[] = [];\n\tprivate _dynamicChild: RouterBranch | null = null;\n\n\tpublic constructor(name: string, dynamic: boolean, parent: RouterBranch | null) {\n\t\tthis.name = name;\n\t\tthis.dynamic = dynamic;\n\t\tthis.parent = parent;\n\t}\n\n\t/**\n\t * The path representing this branch\n\t * @version 7.0.0\n\t */\n\tpublic get path(): string {\n\t\treturn this.parent ? `${this.parent}/${this}` : `${this}`;\n\t}\n\n\t/**\n\t * The branches the branch is associated with\n\t * @version 7.0.0\n\t */\n\tpublic get children(): RouterBranch[] {\n\t\treturn this._staticChildren.concat(this._dynamicChild ?? []);\n\t}\n\n\t/**\n\t * Whether or not the branch is empty\n\t * @version 7.0.0\n\t */\n\tpublic get empty(): boolean {\n\t\treturn this._staticChildren.length === 0 && this._dynamicChild === null;\n\t}\n\n\t/**\n\t * Tries to find a branch given a path\n\t * @version 7.0.0\n\t *\n\t * @param parts The parts of a path to find a node from\n\t * @returns The branch found, or null if not found\n\t */\n\tpublic find(parts: readonly string[]): RouterBranch | null {\n\t\treturn this._find(parts, 0);\n\t}\n\n\t/**\n\t * Checks if the given name matches the branch\n\t * @version 7.0.0\n\t *\n\t * @param name The name to match\n\t * @returns Whether or not the branch matches the name\n\t */\n\tpublic matches(name: string): boolean {\n\t\treturn this.dynamic || this.name === name;\n\t}\n\n\t/**\n\t * Returns the string representation of the branch\n\t * @version 7.0.0\n\t *\n\t * @returns The string representation of the branch\n\t */\n\tpublic toString(): string {\n\t\treturn this.dynamic ? `[${this.name}]` : this.name;\n\t}\n\n\tpublic *nodes(): IterableIterator<RouterNode> {\n\t\tyield this.node;\n\t\tfor (const child of this._staticChildren) {\n\t\t\tyield* child.nodes();\n\t\t}\n\n\t\tif (this._dynamicChild) {\n\t\t\tyield* this._dynamicChild.nodes();\n\t\t}\n\t}\n\n\tprotected _add(parts: readonly string[], index: number, route: Route): RouterNode {\n\t\tconst result = this._performAdd(parts, index, route);\n\t\tthis._updateSupportedChildrenMethods();\n\t\treturn result;\n\t}\n\n\tprotected _remove(parts: readonly string[], index: number, route: Route): boolean {\n\t\tconst result = this._performRemove(parts, index, route);\n\t\tif (result) this._updateSupportedChildrenMethods();\n\t\treturn result;\n\t}\n\n\tprotected _performAdd(parts: readonly string[], index: number, route: Route): RouterNode {\n\t\tif (index >= parts.length) {\n\t\t\tfor (const method of route.methods) {\n\t\t\t\tthis.node.set(method, route);\n\t\t\t}\n\n\t\t\treturn this.node;\n\t\t}\n\n\t\tconst part = parts[index];\n\t\tconst child = this._staticChildren.find((branch) => branch.matches(part));\n\t\tif (child) {\n\t\t\treturn child._add(parts, index + 1, route);\n\t\t}\n\n\t\tif (this._dynamicChild) {\n\t\t\treturn this._dynamicChild._add(parts, index + 1, route);\n\t\t}\n\n\t\tconst dynamic = part.startsWith('[') && part.endsWith(']');\n\t\tlet branch: RouterBranch;\n\t\tif (dynamic) {\n\t\t\tbranch = new RouterBranch(part.slice(1, -1), true, this);\n\t\t\tthis._dynamicChild = branch;\n\t\t} else {\n\t\t\tbranch = new RouterBranch(part, false, this);\n\t\t\tthis._staticChildren.push(branch);\n\t\t}\n\n\t\treturn branch._add(parts, index + 1, route);\n\t}\n\n\tprotected _performRemove(parts: readonly string[], index: number, route: Route): boolean {\n\t\tif (index >= parts.length) {\n\t\t\tlet success = false;\n\t\t\tfor (const method of route.methods) {\n\t\t\t\tif (this.node.delete(method, route)) {\n\t\t\t\t\tsuccess = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn success;\n\t\t}\n\n\t\tconst part = parts[index];\n\t\tconst staticChildIndex = this._staticChildren.findIndex((branch) => branch.matches(part));\n\t\tif (staticChildIndex === -1) {\n\t\t\tconst child = this._staticChildren[index];\n\t\t\tconst removed = child._remove(parts, index + 1, route);\n\t\t\tif (removed && child.empty) {\n\t\t\t\tthis._staticChildren = this._staticChildren.filter((branch) => branch !== child);\n\t\t\t}\n\n\t\t\treturn removed;\n\t\t}\n\n\t\tif (this._dynamicChild) {\n\t\t\tconst removed = this._dynamicChild._remove(parts, index + 1, route);\n\t\t\tif (removed && this._dynamicChild.empty) {\n\t\t\t\tthis._dynamicChild = null;\n\t\t\t}\n\n\t\t\treturn removed;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprotected _find(parts: readonly string[], index: number): RouterBranch | null {\n\t\tif (index >= parts.length) return this;\n\n\t\tconst part = parts[index];\n\t\tconst child = this._staticChildren.find((branch) => branch.matches(part)) ?? this._dynamicChild;\n\n\t\t// If a child is not found, return null:\n\t\tif (isNullish(child)) return null;\n\n\t\t// Continue the search:\n\t\treturn child._find(parts, index + 1);\n\t}\n\n\tprotected _updateSupportedChildrenMethods(): void {\n\t\tconst methods = new Set(this.node.methods());\n\t\tfor (const child of this.children) {\n\t\t\tfor (const method of child.node.methods()) {\n\t\t\t\tmethods.add(method);\n\t\t\t}\n\t\t}\n\n\t\tthis.supportedMethods = [...methods];\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/structures/router/RouterBranch.ts"],"names":["branch"],"mappings":"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","file":"RouterBranch.mjs","sourcesContent":["import { isNullish } from '@sapphire/utilities';\nimport type { Route } from '../Route';\nimport { RouterNode } from './RouterNode';\n\nexport class RouterBranch {\n\t/**\n\t * The name of the branch.\n\t */\n\tpublic readonly name: string;\n\n\t/**\n\t * Whether or not the branch is dynamic.\n\t */\n\tpublic readonly dynamic: boolean;\n\n\t/**\n\t * The parent branch, if any.\n\t */\n\tpublic readonly parent: RouterBranch | null;\n\n\t/**\n\t * The node this branch is associated with.\n\t */\n\tpublic readonly node = new RouterNode(this);\n\n\t/**\n\t * The methods supported by the branch's node or any of its children.\n\t */\n\tpublic supportedMethods: readonly string[] = [];\n\n\tprivate _staticChildren: RouterBranch[] = [];\n\tprivate _dynamicChild: RouterBranch | null = null;\n\n\tpublic constructor(name: string, dynamic: boolean, parent: RouterBranch | null) {\n\t\tthis.name = name;\n\t\tthis.dynamic = dynamic;\n\t\tthis.parent = parent;\n\t}\n\n\t/**\n\t * The path representing this branch\n\t * @version 7.0.0\n\t */\n\tpublic get path(): string {\n\t\treturn this.parent ? `${this.parent}/${this}` : `${this}`;\n\t}\n\n\t/**\n\t * The branches the branch is associated with\n\t * @version 7.0.0\n\t */\n\tpublic get children(): RouterBranch[] {\n\t\treturn this._staticChildren.concat(this._dynamicChild ?? []);\n\t}\n\n\t/**\n\t * Whether or not the branch is empty\n\t * @version 7.0.0\n\t */\n\tpublic get empty(): boolean {\n\t\treturn this._staticChildren.length === 0 && this._dynamicChild === null;\n\t}\n\n\t/**\n\t * Tries to find a branch given a path\n\t * @version 7.0.0\n\t *\n\t * @param parts The parts of a path to find a node from\n\t * @returns The branch found, or null if not found\n\t */\n\tpublic find(parts: readonly string[]): RouterBranch | null {\n\t\treturn this._find(parts, 0);\n\t}\n\n\t/**\n\t * Checks if the given name matches the branch\n\t * @version 7.0.0\n\t *\n\t * @param name The name to match\n\t * @returns Whether or not the branch matches the name\n\t */\n\tpublic matches(name: string): boolean {\n\t\treturn this.dynamic || this.name === name;\n\t}\n\n\t/**\n\t * Returns the string representation of the branch\n\t * @version 7.0.0\n\t *\n\t * @returns The string representation of the branch\n\t */\n\tpublic toString(): string {\n\t\treturn this.dynamic ? `[${this.name}]` : this.name;\n\t}\n\n\tpublic *nodes(): IterableIterator<RouterNode> {\n\t\tyield this.node;\n\t\tfor (const child of this._staticChildren) {\n\t\t\tyield* child.nodes();\n\t\t}\n\n\t\tif (this._dynamicChild) {\n\t\t\tyield* this._dynamicChild.nodes();\n\t\t}\n\t}\n\n\tprotected _add(parts: readonly string[], index: number, route: Route): RouterNode {\n\t\tconst result = this._performAdd(parts, index, route);\n\t\tthis._updateSupportedChildrenMethods();\n\t\treturn result;\n\t}\n\n\tprotected _remove(parts: readonly string[], index: number, route: Route): boolean {\n\t\tconst result = this._performRemove(parts, index, route);\n\t\tif (result) this._updateSupportedChildrenMethods();\n\t\treturn result;\n\t}\n\n\tprotected _performAdd(parts: readonly string[], index: number, route: Route): RouterNode {\n\t\tif (index >= parts.length) {\n\t\t\tfor (const method of route.methods) {\n\t\t\t\tthis.node.set(method, route);\n\t\t\t}\n\n\t\t\treturn this.node;\n\t\t}\n\n\t\tconst part = parts[index];\n\t\tconst child = this._staticChildren.find((branch) => branch.matches(part));\n\t\tif (child) {\n\t\t\treturn child._add(parts, index + 1, route);\n\t\t}\n\n\t\tif (this._dynamicChild) {\n\t\t\treturn this._dynamicChild._add(parts, index + 1, route);\n\t\t}\n\n\t\tconst dynamic = part.startsWith('[') && part.endsWith(']');\n\t\tlet branch: RouterBranch;\n\t\tif (dynamic) {\n\t\t\tbranch = new RouterBranch(part.slice(1, -1), true, this);\n\t\t\tthis._dynamicChild = branch;\n\t\t} else {\n\t\t\tbranch = new RouterBranch(part, false, this);\n\t\t\tthis._staticChildren.push(branch);\n\t\t}\n\n\t\treturn branch._add(parts, index + 1, route);\n\t}\n\n\tprotected _performRemove(parts: readonly string[], index: number, route: Route): boolean {\n\t\tif (index >= parts.length) {\n\t\t\tlet success = false;\n\t\t\tfor (const method of route.methods) {\n\t\t\t\tif (this.node.delete(method, route)) {\n\t\t\t\t\tsuccess = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn success;\n\t\t}\n\n\t\tconst part = parts[index];\n\t\tconst staticChildIndex = this._staticChildren.findIndex((branch) => branch.matches(part));\n\t\tif (staticChildIndex === -1) {\n\t\t\tconst child = this._staticChildren[index];\n\t\t\tconst removed = child._remove(parts, index + 1, route);\n\t\t\tif (removed && child.empty) {\n\t\t\t\tthis._staticChildren = this._staticChildren.filter((branch) => branch !== child);\n\t\t\t}\n\n\t\t\treturn removed;\n\t\t}\n\n\t\tif (this._dynamicChild) {\n\t\t\tconst removed = this._dynamicChild._remove(parts, index + 1, route);\n\t\t\tif (removed && this._dynamicChild.empty) {\n\t\t\t\tthis._dynamicChild = null;\n\t\t\t}\n\n\t\t\treturn removed;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprotected _find(parts: readonly string[], index: number): RouterBranch | null {\n\t\tif (index >= parts.length) return this;\n\n\t\tconst part = parts[index];\n\t\tconst child = this._staticChildren.find((branch) => branch.matches(part)) ?? this._dynamicChild;\n\n\t\t// If a child is not found, return null:\n\t\tif (isNullish(child)) return null;\n\n\t\t// Continue the search:\n\t\treturn child._find(parts, index + 1);\n\t}\n\n\tprotected _updateSupportedChildrenMethods(): void {\n\t\tconst methods = new Set(this.node.methods());\n\t\tfor (const child of this.children) {\n\t\t\tfor (const method of child.node.methods()) {\n\t\t\t\tmethods.add(method);\n\t\t\t}\n\t\t}\n\n\t\tthis.supportedMethods = [...methods];\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/lib/structures/router/RouterNode.ts"],"names":[],"mappings":";;;AAAA,IAAA,QAAA
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/structures/router/RouterNode.ts"],"names":[],"mappings":";;;AAAA,IAAA,QAAA;AAKO,IAAM,WAAA,GAAN,MAAM,WAAW,CAAA;AAAA,EAWhB,YAAY,MAAsB,EAAA;AAPzC;AAAA;AAAA;AAAA,IAAgB,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AAKhB;AAAA;AAAA;AAAA,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,EAAW,IAAI,UAA8B,EAAA,CAAA;AAG5C,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AAAA;AACf,EAEA,IAAW,IAAO,GAAA;AACjB,IAAA,OAAO,KAAK,MAAO,CAAA,IAAA;AAAA;AACpB,EAEO,kBAAkB,KAAkD,EAAA;AAC1E,IAAA,MAAM,aAAqC,EAAC;AAE5C,IAAA,IAAI,SAA8B,IAAK,CAAA,MAAA;AACvC,IAAI,IAAA,KAAA,GAAQ,MAAM,MAAS,GAAA,CAAA;AAC3B,IAAG,GAAA;AACF,MAAA,IAAI,OAAO,OAAS,EAAA,UAAA,CAAW,OAAO,IAAI,CAAA,GAAI,MAAM,KAAK,CAAA;AAEzD,MAAA,MAAA,GAAS,MAAO,CAAA,MAAA;AAChB,MAAE,EAAA,KAAA;AAAA,KACM,QAAA,MAAA;AAET,IAAO,OAAA,UAAA;AAAA;AACR,EAEO,IAAI,MAAkC,EAAA;AAC5C,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA,CAAS,GAAI,CAAA,MAAM,CAAK,IAAA,IAAA;AAAA;AACrC,EAEO,GAAA,CAAI,QAAoB,KAAoB,EAAA;AAClD,IAAK,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAS,GAAI,CAAA,MAAA,EAAQ,KAAK,CAAA;AAC/B,IAAO,OAAA,IAAA;AAAA;AACR,EAEO,MAAA,CAAO,QAAoB,KAAuB,EAAA;AACxD,IAAA,MAAM,QAAW,GAAA,YAAA,CAAA,IAAA,EAAK,QAAS,CAAA,CAAA,GAAA,CAAI,MAAM,CAAA;AACzC,IAAA,IAAI,aAAa,KAAO,EAAA;AACvB,MAAK,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAS,OAAO,MAAM,CAAA;AAC3B,MAAO,OAAA,IAAA;AAAA;AAGR,IAAO,OAAA,KAAA;AAAA;AACR,EAEO,OAAwC,GAAA;AAC9C,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,UAAS,IAAK,EAAA;AAAA;AAE5B,CAAA;AA/CC,QAAA,GAAA,IAAA,OAAA,EAAA;AATuB,MAAA,CAAA,WAAA,EAAA,YAAA,CAAA;AAAjB,IAAM,UAAN,GAAA","file":"RouterNode.mjs","sourcesContent":["import { Collection } from 'discord.js';\nimport type { Route } from '../Route';\nimport type { MethodName } from '../http/HttpMethods';\nimport type { RouterBranch } from './RouterBranch';\n\nexport class RouterNode {\n\t/**\n\t * The branch containing this node.\n\t */\n\tpublic readonly parent: RouterBranch;\n\n\t/**\n\t * The methods this node supports.\n\t */\n\t#methods = new Collection<MethodName, Route>();\n\n\tpublic constructor(parent: RouterBranch) {\n\t\tthis.parent = parent;\n\t}\n\n\tpublic get path() {\n\t\treturn this.parent.path;\n\t}\n\n\tpublic extractParameters(parts: readonly string[]): Record<string, string> {\n\t\tconst parameters: Record<string, string> = {};\n\n\t\tlet branch: RouterBranch | null = this.parent;\n\t\tlet index = parts.length - 1;\n\t\tdo {\n\t\t\tif (branch.dynamic) parameters[branch.name] = parts[index];\n\n\t\t\tbranch = branch.parent;\n\t\t\t--index;\n\t\t} while (branch);\n\n\t\treturn parameters;\n\t}\n\n\tpublic get(method: MethodName): Route | null {\n\t\treturn this.#methods.get(method) ?? null;\n\t}\n\n\tpublic set(method: MethodName, route: Route): this {\n\t\tthis.#methods.set(method, route);\n\t\treturn this;\n\t}\n\n\tpublic delete(method: MethodName, route: Route): boolean {\n\t\tconst existing = this.#methods.get(method);\n\t\tif (existing === route) {\n\t\t\tthis.#methods.delete(method);\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpublic methods(): IterableIterator<MethodName> {\n\t\treturn this.#methods.keys();\n\t}\n}\n"]}
|
|
@@ -31,6 +31,17 @@ var _RouterRoot = class _RouterRoot extends RouterBranch {
|
|
|
31
31
|
toString() {
|
|
32
32
|
return "";
|
|
33
33
|
}
|
|
34
|
+
static makeRoutePathForPiece(directories, name) {
|
|
35
|
+
const parts = [];
|
|
36
|
+
for (const directory of directories) {
|
|
37
|
+
const trimmed = directory.trim();
|
|
38
|
+
if (isNullishOrEmpty(trimmed)) continue;
|
|
39
|
+
if (trimmed.startsWith("(") && trimmed.endsWith(")")) continue;
|
|
40
|
+
parts.push(trimmed);
|
|
41
|
+
}
|
|
42
|
+
parts.push(name.trim());
|
|
43
|
+
return parts.join("/");
|
|
44
|
+
}
|
|
34
45
|
static normalize(path) {
|
|
35
46
|
const parts = [];
|
|
36
47
|
if (isNullishOrEmpty(path)) return parts;
|
|
@@ -47,7 +58,6 @@ var _RouterRoot = class _RouterRoot extends RouterBranch {
|
|
|
47
58
|
}
|
|
48
59
|
if (part.length) {
|
|
49
60
|
parts.push(part);
|
|
50
|
-
part = "";
|
|
51
61
|
}
|
|
52
62
|
return parts;
|
|
53
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/lib/structures/router/RouterRoot.ts"],"names":[],"mappings":";;;;AAMO,IAAM,WAAA,GAAN,MAAM,WAAA,SAAmB,YAAa,CAAA;AAAA,EACrC,WAAc,GAAA;AACpB,IAAM,KAAA,CAAA,UAAA,EAAY,OAAO,IAAI,CAAA
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/structures/router/RouterRoot.ts"],"names":[],"mappings":";;;;AAMO,IAAM,WAAA,GAAN,MAAM,WAAA,SAAmB,YAAa,CAAA;AAAA,EACrC,WAAc,GAAA;AACpB,IAAM,KAAA,CAAA,UAAA,EAAY,OAAO,IAAI,CAAA;AAAA;AAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,IAAI,KAA0B,EAAA;AACpC,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,EAAM,GAAG,KAAK,CAAA;AAAA;AACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,OAAO,KAAuB,EAAA;AACpC,IAAA,OAAO,IAAK,CAAA,OAAA,CAAQ,KAAM,CAAA,IAAA,EAAM,GAAG,KAAK,CAAA;AAAA;AACzC;AAAA,EAGA,IAAoB,IAAe,GAAA;AAClC,IAAO,OAAA,EAAA;AAAA;AACR,EAEgB,QAAmB,GAAA;AAClC,IAAO,OAAA,EAAA;AAAA;AACR,EAEA,OAAc,qBAAsB,CAAA,WAAA,EAAgC,IAAsB,EAAA;AACzF,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,KAAA,MAAW,aAAa,WAAa,EAAA;AACpC,MAAM,MAAA,OAAA,GAAU,UAAU,IAAK,EAAA;AAG/B,MAAI,IAAA,gBAAA,CAAiB,OAAO,CAAG,EAAA;AAE/B,MAAA,IAAI,QAAQ,UAAW,CAAA,GAAG,KAAK,OAAQ,CAAA,QAAA,CAAS,GAAG,CAAG,EAAA;AAEtD,MAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA;AAGnB,IAAM,KAAA,CAAA,IAAA,CAAK,IAAK,CAAA,IAAA,EAAM,CAAA;AACtB,IAAO,OAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA;AACtB,EAEA,OAAc,UAAU,IAA2C,EAAA;AAClE,IAAA,MAAM,QAAQ,EAAC;AACf,IAAI,IAAA,gBAAA,CAAiB,IAAI,CAAA,EAAU,OAAA,KAAA;AAEnC,IAAA,IAAI,IAAO,GAAA,EAAA;AACX,IAAA,KAAA,MAAW,QAAQ,IAAM,EAAA;AACxB,MAAA,IAAI,SAAS,GAAK,EAAA;AACjB,QAAA,IAAI,KAAK,MAAQ,EAAA;AAChB,UAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,UAAO,IAAA,GAAA,EAAA;AAAA;AACR,OACM,MAAA;AACN,QAAQ,IAAA,IAAA,IAAA;AAAA;AACT;AAGD,IAAA,IAAI,KAAK,MAAQ,EAAA;AAChB,MAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA;AAGhB,IAAO,OAAA,KAAA;AAAA;AACR,EAEA,OAAc,cAAc,IAA4C,EAAA;AACvE,IAAI,IAAA,IAAA,CAAK,MAAW,KAAA,CAAA,EAAU,OAAA,IAAA;AAE9B,IAAM,MAAA,SAAA,GAAY,KAAK,MAAS,GAAA,CAAA;AAChC,IAAM,MAAA,IAAA,GAAO,KAAK,SAAS,CAAA;AAC3B,IAAM,MAAA,WAAA,GAAc,IAAK,CAAA,WAAA,CAAY,GAAG,CAAA;AACxC,IAAA,IAAI,gBAAgB,CAAM,CAAA,IAAA,WAAA,KAAgB,IAAK,CAAA,MAAA,GAAS,GAAU,OAAA,IAAA;AAElE,IAAA,OAAO,IAAK,CAAA,KAAA,CAAM,WAAc,GAAA,CAAC,EAAE,WAAY,EAAA;AAAA;AAEjD,CAAA;AApF6C,MAAA,CAAA,WAAA,EAAA,YAAA,CAAA;AAAtC,IAAM,UAAN,GAAA","file":"RouterRoot.mjs","sourcesContent":["import { isNullishOrEmpty } from '@sapphire/utilities';\nimport type { Route } from '../Route';\nimport type { MethodName } from '../http/HttpMethods';\nimport { RouterBranch } from './RouterBranch';\nimport type { RouterNode } from './RouterNode';\n\nexport class RouterRoot extends RouterBranch {\n\tpublic constructor() {\n\t\tsuper('::ROOT::', false, null);\n\t}\n\n\t/**\n\t * Adds a route to the branch\n\t *\n\t * @param route The route to add\n\t * @returns The node the route was added to\n\t */\n\tpublic add(route: Route): RouterNode {\n\t\treturn this._add(route.path, 0, route);\n\t}\n\n\t/**\n\t * Removes a route from the branch\n\t *\n\t * @param route The route to remove\n\t * @returns Whether or not the route was removed\n\t */\n\tpublic remove(route: Route): boolean {\n\t\treturn this._remove(route.path, 0, route);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/class-literal-property-style\n\tpublic override get path(): string {\n\t\treturn '';\n\t}\n\n\tpublic override toString(): string {\n\t\treturn '';\n\t}\n\n\tpublic static makeRoutePathForPiece(directories: readonly string[], name: string): string {\n\t\tconst parts: string[] = [];\n\t\tfor (const directory of directories) {\n\t\t\tconst trimmed = directory.trim();\n\n\t\t\t// If empty, skip:\n\t\t\tif (isNullishOrEmpty(trimmed)) continue;\n\t\t\t// If it's a group, skip:\n\t\t\tif (trimmed.startsWith('(') && trimmed.endsWith(')')) continue;\n\n\t\t\tparts.push(trimmed);\n\t\t}\n\n\t\tparts.push(name.trim());\n\t\treturn parts.join('/');\n\t}\n\n\tpublic static normalize(path: string | null | undefined): string[] {\n\t\tconst parts = [] as string[];\n\t\tif (isNullishOrEmpty(path)) return parts;\n\n\t\tlet part = '';\n\t\tfor (const char of path) {\n\t\t\tif (char === '/') {\n\t\t\t\tif (part.length) {\n\t\t\t\t\tparts.push(part);\n\t\t\t\t\tpart = '';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpart += char;\n\t\t\t}\n\t\t}\n\n\t\tif (part.length) {\n\t\t\tparts.push(part);\n\t\t}\n\n\t\treturn parts;\n\t}\n\n\tpublic static extractMethod(path: readonly string[]): MethodName | null {\n\t\tif (path.length === 0) return null;\n\n\t\tconst lastIndex = path.length - 1;\n\t\tconst last = path[lastIndex];\n\t\tconst methodIndex = last.lastIndexOf('.');\n\t\tif (methodIndex === -1 || methodIndex === last.length - 1) return null;\n\n\t\treturn last.slice(methodIndex + 1).toUpperCase() as MethodName;\n\t}\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"MimeType.mjs"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { __name, __publicField } from '../../../chunk-S573YWRP.mjs';
|
|
2
|
+
import { isNullishOrEmpty } from '@sapphire/utilities';
|
|
3
|
+
import { splitSetCookieString } from 'cookie-es';
|
|
4
|
+
import { NodeUtilInspectSymbol } from '../constants.mjs';
|
|
5
|
+
|
|
6
|
+
var _RequestHeadersProxy = class _RequestHeadersProxy {
|
|
7
|
+
constructor(request) {
|
|
8
|
+
__publicField(this, "request");
|
|
9
|
+
this.request = request;
|
|
10
|
+
}
|
|
11
|
+
append(name, value) {
|
|
12
|
+
const { headers } = this.request;
|
|
13
|
+
const current = headers[name];
|
|
14
|
+
if (current) {
|
|
15
|
+
if (Array.isArray(current)) {
|
|
16
|
+
current.push(value);
|
|
17
|
+
} else {
|
|
18
|
+
headers[name] = [current, value];
|
|
19
|
+
}
|
|
20
|
+
} else {
|
|
21
|
+
headers[name] = value;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
delete(name) {
|
|
25
|
+
this.request.headers[name] = void 0;
|
|
26
|
+
}
|
|
27
|
+
get(name) {
|
|
28
|
+
return normalizeValue(this.request.headers[name]);
|
|
29
|
+
}
|
|
30
|
+
has(name) {
|
|
31
|
+
return !isNullishOrEmpty(this.request.headers[name]);
|
|
32
|
+
}
|
|
33
|
+
set(name, value) {
|
|
34
|
+
this.request.headers[name] = value;
|
|
35
|
+
}
|
|
36
|
+
getSetCookie() {
|
|
37
|
+
const setCookie = this.get("set-cookie");
|
|
38
|
+
return setCookie === null ? [] : splitSetCookieString(setCookie);
|
|
39
|
+
}
|
|
40
|
+
forEach(callbackfn, thisArg) {
|
|
41
|
+
for (const [key, value] of this.entries()) {
|
|
42
|
+
callbackfn.call(thisArg, value, key, this);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
*keys() {
|
|
46
|
+
const { headers } = this.request;
|
|
47
|
+
for (const key of Object.keys(headers)) {
|
|
48
|
+
const value = headers[key];
|
|
49
|
+
if (!isNullishOrEmpty(value)) {
|
|
50
|
+
yield key;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
*values() {
|
|
55
|
+
const { headers } = this.request;
|
|
56
|
+
for (const key of Object.keys(headers)) {
|
|
57
|
+
const value = headers[key];
|
|
58
|
+
if (!isNullishOrEmpty(value)) {
|
|
59
|
+
yield normalizeValue(value);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
*entries() {
|
|
64
|
+
const { headers } = this.request;
|
|
65
|
+
for (const key of Object.keys(headers)) {
|
|
66
|
+
const value = headers[key];
|
|
67
|
+
if (!isNullishOrEmpty(value)) {
|
|
68
|
+
yield [key, normalizeValue(value)];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
[Symbol.iterator]() {
|
|
73
|
+
return this.entries();
|
|
74
|
+
}
|
|
75
|
+
// eslint-disable-next-line @typescript-eslint/class-literal-property-style
|
|
76
|
+
get [Symbol.toStringTag]() {
|
|
77
|
+
return "Headers";
|
|
78
|
+
}
|
|
79
|
+
[NodeUtilInspectSymbol]() {
|
|
80
|
+
return Object.fromEntries(this.entries());
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
__name(_RequestHeadersProxy, "RequestHeadersProxy");
|
|
84
|
+
var RequestHeadersProxy = _RequestHeadersProxy;
|
|
85
|
+
function normalizeValue(value) {
|
|
86
|
+
if (Array.isArray(value)) {
|
|
87
|
+
return value.join(", ");
|
|
88
|
+
}
|
|
89
|
+
return String(value ?? "");
|
|
90
|
+
}
|
|
91
|
+
__name(normalizeValue, "normalizeValue");
|
|
92
|
+
|
|
93
|
+
export { RequestHeadersProxy };
|
|
94
|
+
//# sourceMappingURL=RequestHeadersProxy.mjs.map
|
|
95
|
+
//# sourceMappingURL=RequestHeadersProxy.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/utils/_body/RequestHeadersProxy.ts"],"names":[],"mappings":"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","file":"RequestHeadersProxy.mjs","sourcesContent":["import { isNullishOrEmpty } from '@sapphire/utilities';\nimport { splitSetCookieString } from 'cookie-es';\nimport type { Headers, SpecIterableIterator } from 'undici';\nimport type { ApiRequest } from '../../structures/api/ApiRequest';\nimport { NodeUtilInspectSymbol } from '../constants';\n\nexport class RequestHeadersProxy implements Headers {\n\tprivate readonly request: ApiRequest;\n\n\tpublic constructor(request: ApiRequest) {\n\t\tthis.request = request;\n\t}\n\n\tpublic append(name: string, value: string): void {\n\t\tconst { headers } = this.request;\n\t\tconst current = headers[name];\n\t\tif (current) {\n\t\t\tif (Array.isArray(current)) {\n\t\t\t\tcurrent.push(value);\n\t\t\t} else {\n\t\t\t\theaders[name] = [current, value];\n\t\t\t}\n\t\t} else {\n\t\t\theaders[name] = value;\n\t\t}\n\t}\n\n\tpublic delete(name: string): void {\n\t\tthis.request.headers[name] = undefined;\n\t}\n\n\tpublic get(name: string): string | null {\n\t\treturn normalizeValue(this.request.headers[name]);\n\t}\n\n\tpublic has(name: string): boolean {\n\t\treturn !isNullishOrEmpty(this.request.headers[name]);\n\t}\n\n\tpublic set(name: string, value: string): void {\n\t\tthis.request.headers[name] = value;\n\t}\n\n\tpublic getSetCookie(): string[] {\n\t\tconst setCookie = this.get('set-cookie');\n\t\treturn setCookie === null ? [] : splitSetCookieString(setCookie);\n\t}\n\n\tpublic forEach(callbackfn: (value: string, key: string, iterable: Headers) => void, thisArg?: unknown): void {\n\t\tfor (const [key, value] of this.entries()) {\n\t\t\tcallbackfn.call(thisArg, value, key, this);\n\t\t}\n\t}\n\n\tpublic *keys(): SpecIterableIterator<string> {\n\t\tconst { headers } = this.request;\n\t\tfor (const key of Object.keys(headers)) {\n\t\t\tconst value = headers[key];\n\n\t\t\tif (!isNullishOrEmpty(value)) {\n\t\t\t\tyield key;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic *values(): SpecIterableIterator<string> {\n\t\tconst { headers } = this.request;\n\t\tfor (const key of Object.keys(headers)) {\n\t\t\tconst value = headers[key];\n\n\t\t\tif (!isNullishOrEmpty(value)) {\n\t\t\t\tyield normalizeValue(value);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic *entries(): SpecIterableIterator<[string, string]> {\n\t\tconst { headers } = this.request;\n\t\tfor (const key of Object.keys(headers)) {\n\t\t\tconst value = headers[key];\n\n\t\t\tif (!isNullishOrEmpty(value)) {\n\t\t\t\tyield [key, normalizeValue(value)];\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic [Symbol.iterator](): SpecIterableIterator<[string, string]> {\n\t\treturn this.entries();\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/class-literal-property-style\n\tpublic get [Symbol.toStringTag]() {\n\t\treturn 'Headers';\n\t}\n\n\tpublic [NodeUtilInspectSymbol]() {\n\t\treturn Object.fromEntries(this.entries());\n\t}\n}\n\nfunction normalizeValue(value: string | string[] | undefined): string {\n\tif (Array.isArray(value)) {\n\t\treturn value.join(', ');\n\t}\n\n\treturn String(value ?? '');\n}\n"]}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { __name, __publicField, __privateAdd, __privateSet, __privateGet } from '../../../chunk-S573YWRP.mjs';
|
|
2
|
+
import { isNullish, isNullishOrEmpty } from '@sapphire/utilities';
|
|
3
|
+
import { Blob } from 'node:buffer';
|
|
4
|
+
import { arrayBuffer } from 'node:stream/consumers';
|
|
5
|
+
import { ReadableStream } from 'node:stream/web';
|
|
6
|
+
import { Response } from 'undici';
|
|
7
|
+
import { RequestHeadersProxy } from './RequestHeadersProxy.mjs';
|
|
8
|
+
import { RequestURLProxy } from './RequestURLProxy.mjs';
|
|
9
|
+
|
|
10
|
+
var _request, _url, _cachedMethod, _cachedHasBody, _abortController, _bodyStream;
|
|
11
|
+
var _RequestProxy = class _RequestProxy {
|
|
12
|
+
constructor(request) {
|
|
13
|
+
__publicField(this, "cache", "default");
|
|
14
|
+
__publicField(this, "credentials", "same-origin");
|
|
15
|
+
__publicField(this, "destination", "");
|
|
16
|
+
__publicField(this, "integrity", "");
|
|
17
|
+
__publicField(this, "keepalive", false);
|
|
18
|
+
__publicField(this, "mode", "cors");
|
|
19
|
+
__publicField(this, "redirect", "follow");
|
|
20
|
+
__publicField(this, "referrer", "about:client");
|
|
21
|
+
__publicField(this, "referrerPolicy", "");
|
|
22
|
+
__publicField(this, "headers");
|
|
23
|
+
__publicField(this, "bodyUsed", false);
|
|
24
|
+
__publicField(this, "duplex", "half");
|
|
25
|
+
__privateAdd(this, _request);
|
|
26
|
+
__privateAdd(this, _url);
|
|
27
|
+
__privateAdd(this, _cachedMethod, null);
|
|
28
|
+
__privateAdd(this, _cachedHasBody, null);
|
|
29
|
+
__privateAdd(this, _abortController, null);
|
|
30
|
+
__privateAdd(this, _bodyStream, null);
|
|
31
|
+
__privateSet(this, _request, request);
|
|
32
|
+
__privateSet(this, _url, new RequestURLProxy(request));
|
|
33
|
+
this.headers = new RequestHeadersProxy(request);
|
|
34
|
+
}
|
|
35
|
+
get url() {
|
|
36
|
+
return __privateGet(this, _url).href;
|
|
37
|
+
}
|
|
38
|
+
get method() {
|
|
39
|
+
__privateGet(this, _cachedMethod) ?? __privateSet(this, _cachedMethod, __privateGet(this, _request).method?.toUpperCase() ?? "GET");
|
|
40
|
+
return __privateGet(this, _cachedMethod);
|
|
41
|
+
}
|
|
42
|
+
get signal() {
|
|
43
|
+
__privateGet(this, _abortController) ?? __privateSet(this, _abortController, new AbortController());
|
|
44
|
+
return __privateGet(this, _abortController).signal;
|
|
45
|
+
}
|
|
46
|
+
get body() {
|
|
47
|
+
if (!this.hasBody) return null;
|
|
48
|
+
__privateGet(this, _bodyStream) ?? __privateSet(this, _bodyStream, new ReadableStream({
|
|
49
|
+
start: /* @__PURE__ */ __name((controller) => {
|
|
50
|
+
__privateGet(this, _request).on("data", (chunk) => controller.enqueue(chunk)).once("error", (error) => {
|
|
51
|
+
controller.error(error);
|
|
52
|
+
__privateGet(this, _abortController)?.abort();
|
|
53
|
+
}).once("close", () => {
|
|
54
|
+
__privateGet(this, _abortController)?.abort();
|
|
55
|
+
}).once("end", () => {
|
|
56
|
+
controller.close();
|
|
57
|
+
});
|
|
58
|
+
}, "start")
|
|
59
|
+
}));
|
|
60
|
+
return __privateGet(this, _bodyStream);
|
|
61
|
+
}
|
|
62
|
+
async arrayBuffer() {
|
|
63
|
+
const { body } = this;
|
|
64
|
+
return isNullish(body) ? new ArrayBuffer(0) : arrayBuffer(body);
|
|
65
|
+
}
|
|
66
|
+
async blob() {
|
|
67
|
+
const arrayBuffer2 = await this.arrayBuffer();
|
|
68
|
+
return new Blob([arrayBuffer2], {
|
|
69
|
+
type: this.headers.get("content-type") ?? ""
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
async formData() {
|
|
73
|
+
return new Response(this.body, { headers: this.headers }).formData();
|
|
74
|
+
}
|
|
75
|
+
async json() {
|
|
76
|
+
return JSON.parse(await this.text());
|
|
77
|
+
}
|
|
78
|
+
async text() {
|
|
79
|
+
return new TextDecoder().decode(await this.arrayBuffer());
|
|
80
|
+
}
|
|
81
|
+
clone() {
|
|
82
|
+
return new _RequestProxy(__privateGet(this, _request));
|
|
83
|
+
}
|
|
84
|
+
get hasBody() {
|
|
85
|
+
if (__privateGet(this, _cachedHasBody) !== null) return __privateGet(this, _cachedHasBody);
|
|
86
|
+
const contentLengthString = this.headers.get("content-length");
|
|
87
|
+
const contentLength = isNullishOrEmpty(contentLengthString) ? 0 : Number(contentLengthString);
|
|
88
|
+
if (Number.isSafeInteger(contentLength) && contentLength > 0) {
|
|
89
|
+
__privateSet(this, _cachedHasBody, true);
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
const transferEncoding = this.headers.get("transfer-encoding");
|
|
93
|
+
if (transferEncoding?.includes("chunked")) {
|
|
94
|
+
__privateSet(this, _cachedHasBody, true);
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
__privateSet(this, _cachedHasBody, false);
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
_request = new WeakMap();
|
|
102
|
+
_url = new WeakMap();
|
|
103
|
+
_cachedMethod = new WeakMap();
|
|
104
|
+
_cachedHasBody = new WeakMap();
|
|
105
|
+
_abortController = new WeakMap();
|
|
106
|
+
_bodyStream = new WeakMap();
|
|
107
|
+
__name(_RequestProxy, "RequestProxy");
|
|
108
|
+
var RequestProxy = _RequestProxy;
|
|
109
|
+
|
|
110
|
+
export { RequestProxy };
|
|
111
|
+
//# sourceMappingURL=RequestProxy.mjs.map
|
|
112
|
+
//# sourceMappingURL=RequestProxy.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/utils/_body/RequestProxy.ts"],"names":["arrayBuffer"],"mappings":"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","file":"RequestProxy.mjs","sourcesContent":["import { isNullish, isNullishOrEmpty } from '@sapphire/utilities';\nimport { Blob } from 'node:buffer';\nimport { arrayBuffer } from 'node:stream/consumers';\nimport { ReadableStream } from 'node:stream/web';\nimport {\n\tResponse,\n\ttype FormData,\n\ttype Headers,\n\ttype ReferrerPolicy,\n\ttype Request,\n\ttype RequestCache,\n\ttype RequestCredentials,\n\ttype RequestDestination,\n\ttype RequestMode,\n\ttype RequestRedirect\n} from 'undici';\nimport type { ApiRequest } from '../../structures/api/ApiRequest';\nimport type { MethodName } from '../../structures/http/HttpMethods';\nimport { RequestHeadersProxy } from './RequestHeadersProxy';\nimport { RequestURLProxy } from './RequestURLProxy';\n\nexport class RequestProxy implements Request {\n\tpublic cache: RequestCache = 'default';\n\tpublic credentials: RequestCredentials = 'same-origin';\n\tpublic destination: RequestDestination = '';\n\tpublic integrity: string = '';\n\tpublic keepalive: boolean = false;\n\n\tpublic mode: RequestMode = 'cors';\n\tpublic redirect: RequestRedirect = 'follow';\n\tpublic referrer: string = 'about:client';\n\tpublic referrerPolicy: ReferrerPolicy = '';\n\n\tpublic headers: Headers;\n\n\tpublic bodyUsed: boolean = false;\n\tpublic duplex = 'half' as const;\n\n\treadonly #request: ApiRequest;\n\treadonly #url: RequestURLProxy;\n\t#cachedMethod: MethodName | null = null;\n\t#cachedHasBody: boolean | null = null;\n\t#abortController: AbortController | null = null;\n\t#bodyStream: ReadableStream<Uint8Array> | null = null;\n\n\tpublic constructor(request: ApiRequest) {\n\t\tthis.#request = request;\n\t\tthis.#url = new RequestURLProxy(request);\n\t\tthis.headers = new RequestHeadersProxy(request);\n\t}\n\n\tpublic get url(): string {\n\t\treturn this.#url.href;\n\t}\n\n\tpublic get method(): MethodName {\n\t\tthis.#cachedMethod ??= (this.#request.method?.toUpperCase() ?? 'GET') as MethodName;\n\t\treturn this.#cachedMethod;\n\t}\n\n\tpublic get signal(): AbortSignal {\n\t\tthis.#abortController ??= new AbortController();\n\t\treturn this.#abortController.signal;\n\t}\n\n\tpublic get body(): ReadableStream<Uint8Array> | null {\n\t\tif (!this.hasBody) return null;\n\n\t\tthis.#bodyStream ??= new ReadableStream<Uint8Array>({\n\t\t\tstart: (controller) => {\n\t\t\t\tthis.#request\n\t\t\t\t\t.on('data', (chunk) => controller.enqueue(chunk))\n\t\t\t\t\t.once('error', (error) => {\n\t\t\t\t\t\tcontroller.error(error);\n\t\t\t\t\t\tthis.#abortController?.abort();\n\t\t\t\t\t})\n\t\t\t\t\t.once('close', () => {\n\t\t\t\t\t\tthis.#abortController?.abort();\n\t\t\t\t\t})\n\t\t\t\t\t.once('end', () => {\n\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn this.#bodyStream;\n\t}\n\n\tpublic async arrayBuffer(): Promise<ArrayBuffer> {\n\t\tconst { body } = this;\n\t\treturn isNullish(body) ? new ArrayBuffer(0) : arrayBuffer(body);\n\t}\n\n\tpublic async blob(): Promise<Blob> {\n\t\tconst arrayBuffer = await this.arrayBuffer();\n\t\treturn new Blob([arrayBuffer], {\n\t\t\ttype: this.headers.get('content-type') ?? ''\n\t\t});\n\t}\n\n\tpublic async formData(): Promise<FormData> {\n\t\treturn new Response(this.body, { headers: this.headers }).formData(); // NOSONAR\n\t}\n\n\tpublic async json(): Promise<unknown> {\n\t\treturn JSON.parse(await this.text());\n\t}\n\n\tpublic async text(): Promise<string> {\n\t\treturn new TextDecoder().decode(await this.arrayBuffer());\n\t}\n\n\tpublic clone(): Request {\n\t\treturn new RequestProxy(this.#request);\n\t}\n\n\tprivate get hasBody(): boolean {\n\t\tif (this.#cachedHasBody !== null) return this.#cachedHasBody;\n\n\t\tconst contentLengthString = this.headers.get('content-length');\n\t\tconst contentLength = isNullishOrEmpty(contentLengthString) ? 0 : Number(contentLengthString);\n\t\tif (Number.isSafeInteger(contentLength) && contentLength > 0) {\n\t\t\tthis.#cachedHasBody = true;\n\t\t\treturn true;\n\t\t}\n\n\t\tconst transferEncoding = this.headers.get('transfer-encoding');\n\t\tif (transferEncoding?.includes('chunked')) {\n\t\t\tthis.#cachedHasBody = true;\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.#cachedHasBody = false;\n\t\treturn false;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { __name, __publicField, __privateAdd, __privateSet, __privateGet } from '../../../chunk-S573YWRP.mjs';
|
|
2
|
+
import { isNullishOrEmpty } from '@sapphire/utilities';
|
|
3
|
+
import { NodeUtilInspectSymbol } from '../constants.mjs';
|
|
4
|
+
|
|
5
|
+
var _protocol, _hostname, _port, _pathname, _search, _searchParams, _request;
|
|
6
|
+
var _RequestURLProxy = class _RequestURLProxy {
|
|
7
|
+
constructor(request) {
|
|
8
|
+
__publicField(this, "hash", "");
|
|
9
|
+
__publicField(this, "password", "");
|
|
10
|
+
__publicField(this, "username", "");
|
|
11
|
+
__privateAdd(this, _protocol, null);
|
|
12
|
+
__privateAdd(this, _hostname, null);
|
|
13
|
+
__privateAdd(this, _port, null);
|
|
14
|
+
__privateAdd(this, _pathname, null);
|
|
15
|
+
__privateAdd(this, _search, null);
|
|
16
|
+
__privateAdd(this, _searchParams, null);
|
|
17
|
+
__privateAdd(this, _request);
|
|
18
|
+
__privateSet(this, _request, request);
|
|
19
|
+
}
|
|
20
|
+
get host() {
|
|
21
|
+
return __privateGet(this, _request).headers.host ?? "";
|
|
22
|
+
}
|
|
23
|
+
set host(value) {
|
|
24
|
+
__privateSet(this, _hostname, null);
|
|
25
|
+
__privateSet(this, _port, null);
|
|
26
|
+
__privateGet(this, _request).headers.host = value;
|
|
27
|
+
}
|
|
28
|
+
get hostname() {
|
|
29
|
+
if (__privateGet(this, _hostname) === null) {
|
|
30
|
+
const [hostname, port] = parseHost(__privateGet(this, _request).headers.host);
|
|
31
|
+
__privateSet(this, _hostname, hostname);
|
|
32
|
+
__privateSet(this, _port, port === -1 ? "" : String(port));
|
|
33
|
+
}
|
|
34
|
+
return __privateGet(this, _hostname);
|
|
35
|
+
}
|
|
36
|
+
set hostname(value) {
|
|
37
|
+
__privateSet(this, _hostname, value);
|
|
38
|
+
}
|
|
39
|
+
get port() {
|
|
40
|
+
if (__privateGet(this, _port) === null) {
|
|
41
|
+
const [hostname, port] = parseHost(__privateGet(this, _request).headers.host);
|
|
42
|
+
__privateSet(this, _hostname, hostname);
|
|
43
|
+
__privateSet(this, _port, port === -1 ? String(__privateGet(this, _request).socket.localPort ?? "") : String(port));
|
|
44
|
+
}
|
|
45
|
+
return __privateGet(this, _port);
|
|
46
|
+
}
|
|
47
|
+
set port(value) {
|
|
48
|
+
__privateSet(this, _port, String(Number(value || "")));
|
|
49
|
+
}
|
|
50
|
+
get pathname() {
|
|
51
|
+
if (__privateGet(this, _pathname) === null) {
|
|
52
|
+
const [pathname, search] = parsePath(__privateGet(this, _request).url);
|
|
53
|
+
__privateSet(this, _pathname, pathname);
|
|
54
|
+
__privateGet(this, _search) ?? __privateSet(this, _search, search);
|
|
55
|
+
}
|
|
56
|
+
return __privateGet(this, _pathname);
|
|
57
|
+
}
|
|
58
|
+
set pathname(value) {
|
|
59
|
+
const normalized = value.startsWith("/") ? value : `/${value}`;
|
|
60
|
+
if (normalized === __privateGet(this, _pathname)) return;
|
|
61
|
+
__privateSet(this, _pathname, normalized);
|
|
62
|
+
__privateGet(this, _request).url = normalized + this.search;
|
|
63
|
+
}
|
|
64
|
+
get search() {
|
|
65
|
+
if (__privateGet(this, _search) === null) {
|
|
66
|
+
const [pathname, search] = parsePath(__privateGet(this, _request).url);
|
|
67
|
+
__privateGet(this, _pathname) ?? __privateSet(this, _pathname, pathname);
|
|
68
|
+
__privateSet(this, _search, search);
|
|
69
|
+
}
|
|
70
|
+
return __privateGet(this, _search);
|
|
71
|
+
}
|
|
72
|
+
set search(value) {
|
|
73
|
+
let normalized;
|
|
74
|
+
if (value === "?") {
|
|
75
|
+
normalized = "";
|
|
76
|
+
} else if (value && !value.startsWith("?")) {
|
|
77
|
+
normalized = `?${value}`;
|
|
78
|
+
} else {
|
|
79
|
+
normalized = value;
|
|
80
|
+
}
|
|
81
|
+
if (normalized === __privateGet(this, _search)) return;
|
|
82
|
+
__privateSet(this, _search, normalized);
|
|
83
|
+
__privateSet(this, _searchParams, null);
|
|
84
|
+
__privateGet(this, _request).url = this.pathname + normalized;
|
|
85
|
+
}
|
|
86
|
+
get searchParams() {
|
|
87
|
+
__privateGet(this, _searchParams) ?? __privateSet(this, _searchParams, new URLSearchParams(this.search));
|
|
88
|
+
return __privateGet(this, _searchParams);
|
|
89
|
+
}
|
|
90
|
+
set searchParams(value) {
|
|
91
|
+
__privateSet(this, _searchParams, value);
|
|
92
|
+
this.search = value.toString();
|
|
93
|
+
}
|
|
94
|
+
get protocol() {
|
|
95
|
+
__privateGet(this, _protocol) ?? __privateSet(this, _protocol, __privateGet(this, _request).socket.encrypted || __privateGet(this, _request).headers["x-forwarded-proto"] === "https" ? "https:" : "http:");
|
|
96
|
+
return __privateGet(this, _protocol);
|
|
97
|
+
}
|
|
98
|
+
set protocol(value) {
|
|
99
|
+
__privateSet(this, _protocol, value);
|
|
100
|
+
}
|
|
101
|
+
get origin() {
|
|
102
|
+
return `${this.protocol}//${this.host}`;
|
|
103
|
+
}
|
|
104
|
+
set origin(_value) {
|
|
105
|
+
}
|
|
106
|
+
get href() {
|
|
107
|
+
return `${this.protocol}//${this.host}${this.pathname}${this.search}`;
|
|
108
|
+
}
|
|
109
|
+
set href(value) {
|
|
110
|
+
const url = new URL(value);
|
|
111
|
+
__privateSet(this, _protocol, url.protocol);
|
|
112
|
+
this.username = url.username;
|
|
113
|
+
this.password = url.password;
|
|
114
|
+
__privateSet(this, _hostname, url.hostname);
|
|
115
|
+
__privateSet(this, _port, url.port);
|
|
116
|
+
__privateSet(this, _pathname, url.pathname);
|
|
117
|
+
__privateSet(this, _search, url.search);
|
|
118
|
+
this.hash = url.hash;
|
|
119
|
+
}
|
|
120
|
+
toString() {
|
|
121
|
+
return this.href;
|
|
122
|
+
}
|
|
123
|
+
toJSON() {
|
|
124
|
+
return this.href;
|
|
125
|
+
}
|
|
126
|
+
// eslint-disable-next-line @typescript-eslint/class-literal-property-style
|
|
127
|
+
get [Symbol.toStringTag]() {
|
|
128
|
+
return "URL";
|
|
129
|
+
}
|
|
130
|
+
[NodeUtilInspectSymbol]() {
|
|
131
|
+
return this.href;
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
_protocol = new WeakMap();
|
|
135
|
+
_hostname = new WeakMap();
|
|
136
|
+
_port = new WeakMap();
|
|
137
|
+
_pathname = new WeakMap();
|
|
138
|
+
_search = new WeakMap();
|
|
139
|
+
_searchParams = new WeakMap();
|
|
140
|
+
_request = new WeakMap();
|
|
141
|
+
__name(_RequestURLProxy, "RequestURLProxy");
|
|
142
|
+
var RequestURLProxy = _RequestURLProxy;
|
|
143
|
+
function parsePath(input) {
|
|
144
|
+
const url = (input ?? "/").replaceAll("\\", "/");
|
|
145
|
+
const index = url.indexOf("?");
|
|
146
|
+
if (index === -1) {
|
|
147
|
+
return [url, ""];
|
|
148
|
+
}
|
|
149
|
+
return [url.slice(0, index), url.slice(index)];
|
|
150
|
+
}
|
|
151
|
+
__name(parsePath, "parsePath");
|
|
152
|
+
function parseHost(host) {
|
|
153
|
+
if (isNullishOrEmpty(host)) {
|
|
154
|
+
return ["localhost", -1];
|
|
155
|
+
}
|
|
156
|
+
const index = host.indexOf(":");
|
|
157
|
+
if (index === -1) {
|
|
158
|
+
return [host, -1];
|
|
159
|
+
}
|
|
160
|
+
const port = Number(host.slice(index));
|
|
161
|
+
return [host.slice(0, index), Number.isSafeInteger(port) ? port : -1];
|
|
162
|
+
}
|
|
163
|
+
__name(parseHost, "parseHost");
|
|
164
|
+
|
|
165
|
+
export { RequestURLProxy };
|
|
166
|
+
//# sourceMappingURL=RequestURLProxy.mjs.map
|
|
167
|
+
//# sourceMappingURL=RequestURLProxy.mjs.map
|