@sapphire/plugin-api
Version:
Plugin for @sapphire/framework to expose a REST API
1 lines • 6.65 kB
Source Map (JSON)
{"version":3,"sources":["../../../../../src/lib/structures/api/ApiResponse.ts"],"names":["ServerResponse","STATUS_CODES","HttpCodes","Readable"],"mappings":"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","file":"ApiResponse.cjs","sourcesContent":["import { IncomingMessage, ServerResponse, STATUS_CODES } from 'node:http';\nimport { Readable } from 'node:stream';\nimport { ReadableStream } from 'node:stream/web';\nimport type { MimeType } from '@sapphire/iana-mime-types';\nimport { HttpCodes } from '../http/HttpCodes';\nimport type { CookieStore } from './CookieStore';\n\n/**\n * @since 1.0.0\n */\nexport class ApiResponse<Request extends IncomingMessage = IncomingMessage> extends ServerResponse<Request> {\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic cookies!: CookieStore;\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic ok(data: unknown = STATUS_CODES[HttpCodes.OK]): void {\n\t\tthis.status(HttpCodes.OK);\n\t\treturn this.respond(data);\n\t}\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic created(data: unknown = STATUS_CODES[HttpCodes.Created]): void {\n\t\tthis.status(HttpCodes.Created);\n\t\treturn this.respond(data);\n\t}\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic noContent(data: unknown = STATUS_CODES[HttpCodes.NoContent]): void {\n\t\tthis.status(HttpCodes.NoContent);\n\t\treturn this.respond(data);\n\t}\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic badRequest(data?: unknown): void {\n\t\treturn this.error(HttpCodes.BadRequest, data);\n\t}\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic unauthorized(data?: unknown): void {\n\t\treturn this.error(HttpCodes.Unauthorized, data);\n\t}\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic forbidden(data?: unknown): void {\n\t\treturn this.error(HttpCodes.Forbidden, data);\n\t}\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic notFound(data?: unknown): void {\n\t\treturn this.error(HttpCodes.NotFound, data);\n\t}\n\n\t/**\n\t * @since 7.0.0\n\t */\n\tpublic methodNotAllowed(data?: unknown): void {\n\t\treturn this.error(HttpCodes.MethodNotAllowed, data);\n\t}\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic conflict(data?: unknown) {\n\t\treturn this.error(HttpCodes.Conflict, data);\n\t}\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic error(error: number | string, data?: unknown): void {\n\t\tif (typeof error === 'string') {\n\t\t\treturn this.status(HttpCodes.InternalServerError).json({ error });\n\t\t}\n\n\t\treturn this.status(error).json({ error: data ?? STATUS_CODES[error] });\n\t}\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic respond(data: unknown): void {\n\t\treturn typeof data === 'string' ? this.text(data) : this.json(data);\n\t}\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic status(code: number): this {\n\t\tthis.statusCode = code;\n\t\treturn this;\n\t}\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic json(data: any): void {\n\t\tthis.setContentType('application/json').end(JSON.stringify(data));\n\t}\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic text(data: string): void {\n\t\tthis.setContentType('text/plain').end(data);\n\t}\n\n\t/**\n\t * @since 6.1.0\n\t *\n\t * Sets the image content type and sends the image data in the response.\n\t *\n\t * @param type - The MIME type of the image (e.g., 'image/png').\n\t * @param data - The image data as a `string`, {@link Buffer}, {@link Uint8Array}, or {@link ReadableStream}.\n\t */\n\tpublic image(type: Extract<MimeType, `image/${string}`>, data: string | Buffer | Uint8Array | Readable): void {\n\t\tif (data instanceof Readable) {\n\t\t\tthis.setContentType(type);\n\t\t\tdata.pipe(this);\n\t\t} else {\n\t\t\tthis.setContentType(type).end(data);\n\t\t}\n\t}\n\n\t/**\n\t * @since 5.1.0\n\t */\n\tpublic html(code: number, data: string): void {\n\t\tthis.setContentType('text/html').status(code).end(data);\n\t}\n\n\t/**\n\t * @since 1.0.0\n\t */\n\tpublic setContentType(contentType: MimeType): this {\n\t\tthis.setHeader('Content-Type', contentType);\n\t\treturn this;\n\t}\n}\n"]}