@derivesome/server 1.0.1

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.
Files changed (139) hide show
  1. package/.package.json.~undo-tree~ +4 -0
  2. package/.tsconfig.json.~undo-tree~ +4 -0
  3. package/CLAUDE.md +51 -0
  4. package/dist/cjs/app.d.ts +25 -0
  5. package/dist/cjs/app.d.ts.map +1 -0
  6. package/dist/cjs/app.js +221 -0
  7. package/dist/cjs/app.js.map +1 -0
  8. package/dist/cjs/common/index.d.ts +3 -0
  9. package/dist/cjs/common/index.d.ts.map +1 -0
  10. package/dist/cjs/common/index.js +19 -0
  11. package/dist/cjs/common/index.js.map +1 -0
  12. package/dist/cjs/common/is.d.ts +2 -0
  13. package/dist/cjs/common/is.d.ts.map +1 -0
  14. package/dist/cjs/common/is.js +14 -0
  15. package/dist/cjs/common/is.js.map +1 -0
  16. package/dist/cjs/common/types.d.ts +7 -0
  17. package/dist/cjs/common/types.d.ts.map +1 -0
  18. package/dist/cjs/common/types.js +3 -0
  19. package/dist/cjs/common/types.js.map +1 -0
  20. package/dist/cjs/index.d.ts +9 -0
  21. package/dist/cjs/index.d.ts.map +1 -0
  22. package/dist/cjs/index.js +25 -0
  23. package/dist/cjs/index.js.map +1 -0
  24. package/dist/cjs/meta-provider.d.ts +5 -0
  25. package/dist/cjs/meta-provider.d.ts.map +1 -0
  26. package/dist/cjs/meta-provider.js +3 -0
  27. package/dist/cjs/meta-provider.js.map +1 -0
  28. package/dist/cjs/request-method.d.ts +2 -0
  29. package/dist/cjs/request-method.d.ts.map +1 -0
  30. package/dist/cjs/request-method.js +3 -0
  31. package/dist/cjs/request-method.js.map +1 -0
  32. package/dist/cjs/request-response.d.ts +13 -0
  33. package/dist/cjs/request-response.d.ts.map +1 -0
  34. package/dist/cjs/request-response.js +57 -0
  35. package/dist/cjs/request-response.js.map +1 -0
  36. package/dist/cjs/response.d.ts +40 -0
  37. package/dist/cjs/response.d.ts.map +1 -0
  38. package/dist/cjs/response.js +58 -0
  39. package/dist/cjs/response.js.map +1 -0
  40. package/dist/cjs/route-handler.d.ts +20 -0
  41. package/dist/cjs/route-handler.d.ts.map +1 -0
  42. package/dist/cjs/route-handler.js +3 -0
  43. package/dist/cjs/route-handler.js.map +1 -0
  44. package/dist/cjs/route.d.ts +17 -0
  45. package/dist/cjs/route.d.ts.map +1 -0
  46. package/dist/cjs/route.js +3 -0
  47. package/dist/cjs/route.js.map +1 -0
  48. package/dist/esm/app.d.ts +25 -0
  49. package/dist/esm/app.d.ts.map +1 -0
  50. package/dist/esm/app.js +221 -0
  51. package/dist/esm/app.js.map +1 -0
  52. package/dist/esm/common/index.d.ts +3 -0
  53. package/dist/esm/common/index.d.ts.map +1 -0
  54. package/dist/esm/common/index.js +19 -0
  55. package/dist/esm/common/index.js.map +1 -0
  56. package/dist/esm/common/is.d.ts +2 -0
  57. package/dist/esm/common/is.d.ts.map +1 -0
  58. package/dist/esm/common/is.js +14 -0
  59. package/dist/esm/common/is.js.map +1 -0
  60. package/dist/esm/common/types.d.ts +7 -0
  61. package/dist/esm/common/types.d.ts.map +1 -0
  62. package/dist/esm/common/types.js +3 -0
  63. package/dist/esm/common/types.js.map +1 -0
  64. package/dist/esm/index.d.ts +9 -0
  65. package/dist/esm/index.d.ts.map +1 -0
  66. package/dist/esm/index.js +25 -0
  67. package/dist/esm/index.js.map +1 -0
  68. package/dist/esm/meta-provider.d.ts +5 -0
  69. package/dist/esm/meta-provider.d.ts.map +1 -0
  70. package/dist/esm/meta-provider.js +3 -0
  71. package/dist/esm/meta-provider.js.map +1 -0
  72. package/dist/esm/request-method.d.ts +2 -0
  73. package/dist/esm/request-method.d.ts.map +1 -0
  74. package/dist/esm/request-method.js +3 -0
  75. package/dist/esm/request-method.js.map +1 -0
  76. package/dist/esm/request-response.d.ts +13 -0
  77. package/dist/esm/request-response.d.ts.map +1 -0
  78. package/dist/esm/request-response.js +57 -0
  79. package/dist/esm/request-response.js.map +1 -0
  80. package/dist/esm/response.d.ts +40 -0
  81. package/dist/esm/response.d.ts.map +1 -0
  82. package/dist/esm/response.js +58 -0
  83. package/dist/esm/response.js.map +1 -0
  84. package/dist/esm/route-handler.d.ts +20 -0
  85. package/dist/esm/route-handler.d.ts.map +1 -0
  86. package/dist/esm/route-handler.js +3 -0
  87. package/dist/esm/route-handler.js.map +1 -0
  88. package/dist/esm/route.d.ts +17 -0
  89. package/dist/esm/route.d.ts.map +1 -0
  90. package/dist/esm/route.js +3 -0
  91. package/dist/esm/route.js.map +1 -0
  92. package/package.json +48 -0
  93. package/package.json~ +54 -0
  94. package/src/.app.ts.~undo-tree~ +55 -0
  95. package/src/.index.ts.~undo-tree~ +9 -0
  96. package/src/.meta-provider.ts.~undo-tree~ +19 -0
  97. package/src/.method.ts.~undo-tree~ +6 -0
  98. package/src/.request-method.ts.~undo-tree~ +6 -0
  99. package/src/.request-response.ts.~undo-tree~ +233 -0
  100. package/src/.request.ts.~undo-tree~ +6 -0
  101. package/src/.response.ts.~undo-tree~ +168 -0
  102. package/src/.route-handler.ts.~undo-tree~ +53 -0
  103. package/src/.route-params.ts.~undo-tree~ +6 -0
  104. package/src/.route.ts.~undo-tree~ +5 -0
  105. package/src/app.test.ts +245 -0
  106. package/src/app.ts +272 -0
  107. package/src/app.ts~ +277 -0
  108. package/src/common/.index.ts.~undo-tree~ +9 -0
  109. package/src/common/.is.ts.~undo-tree~ +5 -0
  110. package/src/common/.types.ts.~undo-tree~ +31 -0
  111. package/src/common/index.ts +2 -0
  112. package/src/common/index.ts~ +1 -0
  113. package/src/common/is.ts +6 -0
  114. package/src/common/is.ts~ +0 -0
  115. package/src/common/types.ts +9 -0
  116. package/src/common/types.ts~ +13 -0
  117. package/src/index.ts +8 -0
  118. package/src/index.ts~ +8 -0
  119. package/src/meta-provider.ts +10 -0
  120. package/src/meta-provider.ts~ +5 -0
  121. package/src/method.ts~ +0 -0
  122. package/src/request-method.ts +1 -0
  123. package/src/request-method.ts~ +1 -0
  124. package/src/request-response.ts +63 -0
  125. package/src/request-response.ts~ +63 -0
  126. package/src/request.ts~ +0 -0
  127. package/src/response.ts +100 -0
  128. package/src/response.ts~ +49 -0
  129. package/src/route-handler.ts +45 -0
  130. package/src/route-handler.ts~ +37 -0
  131. package/src/route-params.ts~ +0 -0
  132. package/src/route.ts +37 -0
  133. package/src/route.ts~ +37 -0
  134. package/tsconfig.cjs.json +10 -0
  135. package/tsconfig.cjs.json~ +0 -0
  136. package/tsconfig.esm.json +10 -0
  137. package/tsconfig.esm.json~ +10 -0
  138. package/tsconfig.json +22 -0
  139. package/tsconfig.json~ +22 -0
@@ -0,0 +1,4 @@
1
+ (undo-tree-save-format-version . 1)
2
+ "d41d6534004f36d334933e412d77a7b592079997"
3
+ [nil current nil nil (27048 36309 789921 945000) 0 nil]
4
+ nil
@@ -0,0 +1,4 @@
1
+ (undo-tree-save-format-version . 1)
2
+ "6787eb53fce4667049485cbe34fb78e676604d52"
3
+ [nil current nil nil (27048 36306 135919 779000) 0 nil]
4
+ nil
package/CLAUDE.md ADDED
@@ -0,0 +1,51 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Commands
6
+
7
+ ```bash
8
+ # Install dependencies (from workspace root)
9
+ pnpm install
10
+
11
+ # Run tests
12
+ pnpm test
13
+
14
+ # Build (ESM + CJS)
15
+ pnpm build
16
+
17
+ # Type-check without emitting
18
+ pnpm check
19
+
20
+ # Format
21
+ pnpm format
22
+ ```
23
+
24
+ ## Architecture
25
+
26
+ `@derivesome/server` is a lightweight, type-safe HTTP server framework built on Node.js's native `http` module. It integrates with `@derivesome/core` reactivity and uses `shapedef` for request argument validation.
27
+
28
+ ### Core Abstractions
29
+
30
+ **`App<Meta>`** (`app.ts`) — The central class, generic over accumulated metadata. Request flow:
31
+ 1. HTTP request → extract method + path
32
+ 2. Run all registered `MetaProvider`s sequentially, each extending the `Meta` type
33
+ 3. Resolve route by method + path → invoke handler; no match → 404 JSON
34
+ 4. Handler return value: object/array → JSON 200 response; void → no body
35
+
36
+ **`MetaProvider<NextMeta, PrevMeta>`** (`meta-provider.ts`) — Middleware pattern. Each `.metaProvider()` call receives the accumulated context and returns an extended metadata object. TypeScript tracks the resulting type at compile time.
37
+
38
+ **`Route`** (`route.ts`) — Fully typed route definition with `method`, `path`, `handler`, and optional `args` (shapedef schema for request validation). `RouteWithoutArgs` is the variant with no args.
39
+
40
+ **`RouteHandler<Meta, Args>`** (`route-handler.ts`) — Handler function signature. Receives `RouteHandlerContext` with `req`, `res`, `meta`, and `args`. Can return `void`, a `LooseRecord`, or a `LooseArray`.
41
+
42
+ ### Key Design Patterns
43
+
44
+ - **Metadata accumulation:** Each `.metaProvider()` narrows the generic `Meta` type — downstream handlers see the full accumulated metadata with correct types.
45
+ - **Shape-based validation:** `shapedef` shapes in `args` serve both as runtime validators and compile-time type sources.
46
+ - **Implicit serialization:** Handlers returning objects/arrays are automatically JSON-encoded; no explicit `res.json()` needed.
47
+ - **Method overloading:** `.route()` is overloaded to support routes with and without `args` while preserving type safety.
48
+
49
+ ### TypeScript Configuration
50
+
51
+ Strict mode with `noUncheckedIndexedAccess`, `exactOptionalPropertyTypes`, `noUncheckedSideEffectImports`, `nodenext` module system. Builds to both ESM (`dist/esm/`) and CJS (`dist/cjs/`).
@@ -0,0 +1,25 @@
1
+ import { ShapeMapping } from "shapedef";
2
+ import { UnknownRecord } from "./common";
3
+ import { MetaProvider } from "./meta-provider";
4
+ import { RequestMethod } from "./request-method";
5
+ import { Route, RouteWithoutArgs } from "./route";
6
+ import { RouteHandler } from "./route-handler";
7
+ import http from "node:http";
8
+ export declare class App<Meta extends UnknownRecord = UnknownRecord> {
9
+ private _meta;
10
+ private _metaProviders;
11
+ private _routes;
12
+ private _responseMaker;
13
+ constructor(meta: Meta);
14
+ metaProvider<NextMeta extends UnknownRecord>(provider: MetaProvider<NextMeta, Meta>): App<Meta & NextMeta>;
15
+ route<Method extends RequestMethod, Path extends string>(route: RouteWithoutArgs<Meta, Method, Path>): this;
16
+ route<Args extends ShapeMapping<any>, Method extends RequestMethod, Path extends string>(route: Route<Meta, Args, Method, Path>): this;
17
+ get<Path extends string, Args extends ShapeMapping<any>, Handler extends RouteHandler<Meta, Args>>(path: Path, args: Args | undefined | null, handler: Handler): this;
18
+ private resolve;
19
+ private sendReturn;
20
+ private runRoute;
21
+ private runPipeline;
22
+ listen(port: number, cb?: () => void): http.Server;
23
+ }
24
+ export declare function createApp(): App<UnknownRecord>;
25
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,UAAU,CAAC;AAC1D,OAAO,EAA8B,aAAa,EAAE,MAAM,UAAU,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EACL,YAAY,EAGb,MAAM,iBAAiB,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAkE7B,qBAAa,GAAG,CAAC,IAAI,SAAS,aAAa,GAAG,aAAa;IACzD,OAAO,CAAC,KAAK,CAAO;IACpB,OAAO,CAAC,cAAc,CAAqD;IAC3E,OAAO,CAAC,OAAO,CAAkD;IACjE,OAAO,CAAC,cAAc,CAAsC;gBAEhD,IAAI,EAAE,IAAI;IAItB,YAAY,CAAC,QAAQ,SAAS,aAAa,EACzC,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,GACrC,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC;IAOvB,KAAK,CAAC,MAAM,SAAS,aAAa,EAAE,IAAI,SAAS,MAAM,EACrD,KAAK,EAAE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAC1C,IAAI;IACP,KAAK,CACH,IAAI,SAAS,YAAY,CAAC,GAAG,CAAC,EAC9B,MAAM,SAAS,aAAa,EAC5B,IAAI,SAAS,MAAM,EACnB,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI;IAU/C,GAAG,CACD,IAAI,SAAS,MAAM,EACnB,IAAI,SAAS,YAAY,CAAC,GAAG,CAAC,EAC9B,OAAO,SAAS,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EACxC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IASpE,OAAO,CAAC,OAAO;YAmBD,UAAU;YAqDV,QAAQ;YAqBR,WAAW;IAkCzB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;CAcnD;AAED,wBAAgB,SAAS,IAAI,GAAG,CAAC,aAAa,CAAC,CAE9C"}
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.App = void 0;
7
+ exports.createApp = createApp;
8
+ const shapedef_1 = require("shapedef");
9
+ const common_1 = require("./common");
10
+ const request_response_1 = require("./request-response");
11
+ const node_http_1 = __importDefault(require("node:http"));
12
+ const node_fs_1 = __importDefault(require("node:fs"));
13
+ const node_path_1 = __importDefault(require("node:path"));
14
+ const response_1 = require("./response");
15
+ const MIME_TYPES = {
16
+ ".html": "text/html",
17
+ ".htm": "text/html",
18
+ ".css": "text/css",
19
+ ".js": "application/javascript",
20
+ ".mjs": "application/javascript",
21
+ ".json": "application/json",
22
+ ".png": "image/png",
23
+ ".jpg": "image/jpeg",
24
+ ".jpeg": "image/jpeg",
25
+ ".gif": "image/gif",
26
+ ".svg": "image/svg+xml",
27
+ ".ico": "image/x-icon",
28
+ ".webp": "image/webp",
29
+ ".txt": "text/plain",
30
+ ".pdf": "application/pdf",
31
+ ".woff": "font/woff",
32
+ ".woff2": "font/woff2",
33
+ };
34
+ function mimeForFile(filePath) {
35
+ const ext = node_path_1.default.extname(filePath).toLowerCase();
36
+ return MIME_TYPES[ext] ?? "application/octet-stream";
37
+ }
38
+ function sendFile(res, resp) {
39
+ return new Promise((resolve, reject) => {
40
+ node_fs_1.default.stat(resp.filePath, (err, stat) => {
41
+ if (err) {
42
+ res.writeHead(404, { "Content-Type": "application/json" });
43
+ res.end(JSON.stringify({ error: "Not Found" }));
44
+ return resolve();
45
+ }
46
+ const contentType = resp.contentType ?? mimeForFile(resp.filePath);
47
+ res.writeHead(resp.statusCode, {
48
+ "Content-Type": contentType,
49
+ "Content-Length": stat.size,
50
+ });
51
+ const stream = node_fs_1.default.createReadStream(resp.filePath);
52
+ stream.on("error", reject);
53
+ stream.on("end", resolve);
54
+ stream.pipe(res);
55
+ });
56
+ });
57
+ }
58
+ function compilePath(path) {
59
+ const paramNames = [];
60
+ const regexStr = path.replace(/:([^/]+)/g, (_, name) => {
61
+ paramNames.push(name);
62
+ return "([^/]+)";
63
+ });
64
+ return { pattern: new RegExp(`^${regexStr}$`), paramNames };
65
+ }
66
+ class App {
67
+ _meta;
68
+ _metaProviders = [];
69
+ _routes = new Map();
70
+ _responseMaker = new response_1.ResponseMaker();
71
+ constructor(meta) {
72
+ this._meta = meta;
73
+ }
74
+ metaProvider(provider) {
75
+ const app = new App(this._meta);
76
+ app._metaProviders.push(...this._metaProviders);
77
+ app._metaProviders.push(provider);
78
+ return app;
79
+ }
80
+ route(route) {
81
+ if (!this._routes.has(route.method)) {
82
+ this._routes.set(route.method, []);
83
+ }
84
+ const { pattern, paramNames } = compilePath(route.path);
85
+ this._routes.get(route.method).push({ pattern, paramNames, route });
86
+ return this;
87
+ }
88
+ get(path, args, handler) {
89
+ return this.route({
90
+ method: "GET",
91
+ path: path,
92
+ handler,
93
+ args: args || null,
94
+ });
95
+ }
96
+ resolve(method, url) {
97
+ const routes = this._routes.get(method);
98
+ if (!routes)
99
+ return null;
100
+ for (const { pattern, paramNames, route } of routes) {
101
+ const match = pattern.exec(url);
102
+ if (match) {
103
+ const params = {};
104
+ for (let i = 0; i < paramNames.length; i++) {
105
+ params[paramNames[i]] = match[i + 1];
106
+ }
107
+ return { route, params };
108
+ }
109
+ }
110
+ return null;
111
+ }
112
+ async sendReturn(ctx, ret) {
113
+ if (ret instanceof response_1.ResponseBuilder) {
114
+ const resp = ret.resp;
115
+ switch (resp.type) {
116
+ case "json":
117
+ {
118
+ ctx.res.writeHead(resp.statusCode, {
119
+ "Content-Type": resp.contentType,
120
+ });
121
+ ctx.res.end(JSON.stringify(resp.payload));
122
+ }
123
+ break;
124
+ case "text":
125
+ {
126
+ ctx.res.writeHead(resp.statusCode, {
127
+ "Content-Type": resp.contentType,
128
+ });
129
+ ctx.res.end(resp.payload);
130
+ }
131
+ break;
132
+ case "stream":
133
+ {
134
+ await new Promise((resolve, reject) => {
135
+ ctx.res.writeHead(resp.statusCode, {
136
+ "Content-Type": resp.contentType,
137
+ });
138
+ resp.stream.on("error", reject);
139
+ resp.stream.on("end", resolve);
140
+ resp.stream.pipe(ctx.res);
141
+ });
142
+ }
143
+ break;
144
+ case "binary":
145
+ {
146
+ ctx.res.writeHead(resp.statusCode, {
147
+ "Content-Type": resp.contentType,
148
+ "Content-Length": resp.payload.byteLength,
149
+ });
150
+ ctx.res.end(resp.payload);
151
+ }
152
+ break;
153
+ case "file":
154
+ {
155
+ await sendFile(ctx.res, resp);
156
+ }
157
+ break;
158
+ }
159
+ }
160
+ else if (Array.isArray(ret) || (0, common_1.isPlainObject)(ret)) {
161
+ ctx.res.writeHead(200, { "Content-Type": "application/json" });
162
+ ctx.res.end(JSON.stringify(ret));
163
+ }
164
+ }
165
+ async runRoute(ctx, route) {
166
+ if (route.mergeParams !== false && (0, common_1.isPlainObject)(ctx.req.body)) {
167
+ ctx.args = {};
168
+ ctx.args = { ...ctx.args, ...ctx.req.body };
169
+ }
170
+ if (["POST", "PUT", "PATCH"].includes(route.method)) {
171
+ if (route.args) {
172
+ const validation = (0, shapedef_1.validate)(ctx.req.body, route.args);
173
+ if (!validation.ok) {
174
+ return await this.sendReturn(ctx, ctx.R.json(validation).status(400));
175
+ }
176
+ ctx.args = ctx.req.body;
177
+ }
178
+ }
179
+ await this.sendReturn(ctx, await route.handler(ctx));
180
+ }
181
+ async runPipeline(req, res, method, path) {
182
+ console.log(method, path);
183
+ const ctx = {
184
+ req,
185
+ res,
186
+ meta: {},
187
+ args: {},
188
+ params: {},
189
+ R: this._responseMaker,
190
+ };
191
+ for (const metaProvider of this._metaProviders) {
192
+ const output = await metaProvider(ctx);
193
+ Object.assign(ctx.meta, output);
194
+ }
195
+ const pathname = path.split("?")[0];
196
+ const resolved = this.resolve(method, pathname);
197
+ if (!resolved) {
198
+ res.writeHead(404, { "Content-Type": "application/json" });
199
+ res.end(JSON.stringify({ error: "Not Found" }));
200
+ return;
201
+ }
202
+ ctx.params = resolved.params;
203
+ await this.runRoute(ctx, resolved.route);
204
+ }
205
+ listen(port, cb) {
206
+ const server = node_http_1.default.createServer(async (req, res) => {
207
+ const method = (req.method || "GET").toUpperCase();
208
+ const path = req.url || "/";
209
+ const wrappedRequest = new request_response_1.Request(req);
210
+ await wrappedRequest.run();
211
+ await this.runPipeline(wrappedRequest, res, method, path);
212
+ });
213
+ server.listen(port, cb);
214
+ return server;
215
+ }
216
+ }
217
+ exports.App = App;
218
+ function createApp() {
219
+ return new App({});
220
+ }
221
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./types";
2
+ export * from "./is";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./is"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,uCAAqB"}
@@ -0,0 +1,2 @@
1
+ export declare const isPlainObject: (x: any) => x is Record<PropertyKey, unknown>;
2
+ //# sourceMappingURL=is.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is.d.ts","sourceRoot":"","sources":["../../../src/common/is.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GAAI,GAAG,GAAG,KAAG,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,OAAO,CAKtE,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isPlainObject = void 0;
4
+ const isPlainObject = (x) => {
5
+ if (x === null || typeof x === "undefined")
6
+ return false;
7
+ if (Array.isArray(x))
8
+ return false;
9
+ if (x instanceof Date)
10
+ return false;
11
+ return Object.getPrototypeOf(x) === Object.prototype;
12
+ };
13
+ exports.isPlainObject = isPlainObject;
14
+ //# sourceMappingURL=is.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is.js","sourceRoot":"","sources":["../../../src/common/is.ts"],"names":[],"mappings":";;;AAAO,MAAM,aAAa,GAAG,CAAC,CAAM,EAAqC,EAAE;IACzE,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,CAAC,YAAY,IAAI;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC;AACvD,CAAC,CAAC;AALW,QAAA,aAAa,iBAKxB"}
@@ -0,0 +1,7 @@
1
+ export type TupleOf<T> = [...T[], T] | [T, ...T[]] | [T];
2
+ export type Arrayish<T> = TupleOf<T> | Array<T>;
3
+ export type UnknownRecord = Record<string, unknown>;
4
+ export type LooseRecord = Record<string, any>;
5
+ export type UnknownArray = Array<unknown>;
6
+ export type LooseArray = Array<any>;
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEzD,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACpD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE9C,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;AAC1C,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ export * from "./common";
2
+ export * from "./request-method";
3
+ export * from "./response";
4
+ export * from "./request-response";
5
+ export * from "./route-handler";
6
+ export * from "./route";
7
+ export * from "./meta-provider";
8
+ export * from "./app";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,OAAO,CAAC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./common"), exports);
18
+ __exportStar(require("./request-method"), exports);
19
+ __exportStar(require("./response"), exports);
20
+ __exportStar(require("./request-response"), exports);
21
+ __exportStar(require("./route-handler"), exports);
22
+ __exportStar(require("./route"), exports);
23
+ __exportStar(require("./meta-provider"), exports);
24
+ __exportStar(require("./app"), exports);
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,mDAAiC;AACjC,6CAA2B;AAC3B,qDAAmC;AACnC,kDAAgC;AAChC,0CAAwB;AACxB,kDAAgC;AAChC,wCAAsB"}
@@ -0,0 +1,5 @@
1
+ import { UnknownRecord } from "./common";
2
+ import { Request, Response } from "./request-response";
3
+ import { RouteHandlerContext } from "./route-handler";
4
+ export type MetaProvider<NextMeta extends UnknownRecord = UnknownRecord, PrevMeta extends UnknownRecord = UnknownRecord> = (ctx: RouteHandlerContext<Request, Response, PrevMeta>) => NextMeta | Promise<NextMeta>;
5
+ //# sourceMappingURL=meta-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-provider.d.ts","sourceRoot":"","sources":["../../src/meta-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,MAAM,YAAY,CACtB,QAAQ,SAAS,aAAa,GAAG,aAAa,EAC9C,QAAQ,SAAS,aAAa,GAAG,aAAa,IAC5C,CACF,GAAG,EAAE,mBAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAClD,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=meta-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-provider.js","sourceRoot":"","sources":["../../src/meta-provider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export type RequestMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
2
+ //# sourceMappingURL=request-method.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-method.d.ts","sourceRoot":"","sources":["../../src/request-method.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=request-method.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-method.js","sourceRoot":"","sources":["../../src/request-method.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { IncomingHttpHeaders, IncomingMessage, ServerResponse } from "http";
2
+ export declare class Request {
3
+ raw: IncomingMessage;
4
+ body: any;
5
+ constructor(raw: IncomingMessage);
6
+ get method(): string;
7
+ get headers(): IncomingHttpHeaders;
8
+ private readBody;
9
+ run(): Promise<void>;
10
+ }
11
+ export interface Response extends ServerResponse {
12
+ }
13
+ //# sourceMappingURL=request-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-response.d.ts","sourceRoot":"","sources":["../../src/request-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE5E,qBAAa,OAAO;IAClB,GAAG,EAAE,eAAe,CAAC;IACrB,IAAI,EAAE,GAAG,CAAM;gBAEH,GAAG,EAAE,eAAe;IAIhC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,OAAO,IAAI,mBAAmB,CAEjC;IAED,OAAO,CAAC,QAAQ;IAsBV,GAAG;CAoBV;AAED,MAAM,WAAW,QAAS,SAAQ,cAAc;CAAG"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Request = void 0;
4
+ class Request {
5
+ raw;
6
+ body = {};
7
+ constructor(raw) {
8
+ this.raw = raw;
9
+ }
10
+ get method() {
11
+ return (this.raw.method || "GET").toUpperCase();
12
+ }
13
+ get headers() {
14
+ return this.raw.headers;
15
+ }
16
+ readBody(limit = 1_048_576 * 2) {
17
+ return new Promise((resolve, reject) => {
18
+ const chunks = [];
19
+ let size = 0;
20
+ this.raw.addListener("data", (chunk) => {
21
+ size += chunk.length;
22
+ if (size > limit) {
23
+ this.raw.destroy();
24
+ reject(new Error("Body too large"));
25
+ }
26
+ else {
27
+ chunks.push(chunk);
28
+ }
29
+ });
30
+ this.raw.addListener("end", () => resolve(Buffer.concat(chunks).toString()));
31
+ this.raw.addListener("error", reject);
32
+ });
33
+ }
34
+ async run() {
35
+ switch (this.method) {
36
+ case "POST":
37
+ case "PUT":
38
+ case "PATCH":
39
+ {
40
+ const data = await this.readBody();
41
+ try {
42
+ this.body = JSON.parse(data);
43
+ }
44
+ catch (e) {
45
+ console.error(e);
46
+ }
47
+ }
48
+ break;
49
+ default:
50
+ {
51
+ }
52
+ break;
53
+ }
54
+ }
55
+ }
56
+ exports.Request = Request;
57
+ //# sourceMappingURL=request-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-response.js","sourceRoot":"","sources":["../../src/request-response.ts"],"names":[],"mappings":";;;AAEA,MAAa,OAAO;IAClB,GAAG,CAAkB;IACrB,IAAI,GAAQ,EAAE,CAAC;IAEf,YAAY,GAAoB;QAC9B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAClD,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;IAC1B,CAAC;IAEO,QAAQ,CAAC,QAAgB,SAAS,GAAG,CAAC;QAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;YAEb,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACrC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;gBACrB,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;oBACjB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;oBACnB,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBACtC,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,CAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAC1C,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG;QACP,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,MAAM,CAAC;YACZ,KAAK,KAAK,CAAC;YACX,KAAK,OAAO;gBACV,CAAC;oBACC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACnC,IAAI,CAAC;wBACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC/B,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC;gBACD,MAAM;YACR;gBACE,CAAC;gBACD,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;CACF;AA1DD,0BA0DC"}
@@ -0,0 +1,40 @@
1
+ import { LooseArray, LooseRecord } from "./common";
2
+ import { Readable } from "node:stream";
3
+ export interface ResponseBase<Type extends string> {
4
+ statusCode: number;
5
+ type: Type;
6
+ }
7
+ export interface ResponseJSON extends ResponseBase<"json"> {
8
+ contentType: "application/json";
9
+ payload: LooseRecord | LooseArray;
10
+ }
11
+ export interface ResponseText extends ResponseBase<"text"> {
12
+ contentType: "text/html";
13
+ payload: string;
14
+ }
15
+ export interface ResponseFile extends ResponseBase<"file"> {
16
+ filePath: string;
17
+ contentType: string | null;
18
+ }
19
+ export interface ResponseBinary extends ResponseBase<"binary"> {
20
+ contentType: string;
21
+ payload: Buffer | Uint8Array;
22
+ }
23
+ export interface ResponseStream extends ResponseBase<"stream"> {
24
+ contentType: string;
25
+ stream: Readable;
26
+ }
27
+ export type AnyResponse = ResponseJSON | ResponseText | ResponseFile | ResponseBinary | ResponseStream;
28
+ export declare class ResponseBuilder<Resp extends AnyResponse = AnyResponse> {
29
+ resp: Resp;
30
+ constructor(resp: Resp);
31
+ status(code: number): this;
32
+ }
33
+ export declare class ResponseMaker {
34
+ json(payload: LooseRecord | LooseArray): ResponseBuilder;
35
+ text(payload: string): ResponseBuilder;
36
+ stream(stream: Readable, contentType: string): ResponseBuilder<ResponseStream>;
37
+ binary(payload: Buffer | Uint8Array, contentType: string): ResponseBuilder<ResponseBinary>;
38
+ file(filePath: string, contentType?: string): ResponseBuilder<ResponseFile>;
39
+ }
40
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,WAAW,YAAY,CAAC,IAAI,SAAS,MAAM;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY,CAAC,MAAM,CAAC;IACxD,WAAW,EAAE,kBAAkB,CAAC;IAChC,OAAO,EAAE,WAAW,GAAG,UAAU,CAAC;CACnC;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY,CAAC,MAAM,CAAC;IACxD,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY,CAAC,MAAM,CAAC;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY,CAAC,QAAQ,CAAC;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC;CAC9B;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY,CAAC,QAAQ,CAAC;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GACnB,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,cAAc,CAAC;AAEnB,qBAAa,eAAe,CAAC,IAAI,SAAS,WAAW,GAAG,WAAW;IACjE,IAAI,EAAE,IAAI,CAAC;gBAEC,IAAI,EAAE,IAAI;IAGtB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAI3B;AAED,qBAAa,aAAa;IACxB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,GAAG,eAAe;IAQxD,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;IAQtC,MAAM,CACJ,MAAM,EAAE,QAAQ,EAChB,WAAW,EAAE,MAAM,GAClB,eAAe,CAAC,cAAc,CAAC;IAQlC,MAAM,CACJ,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,WAAW,EAAE,MAAM,GAClB,eAAe,CAAC,cAAc,CAAC;IAQlC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC;CAQ5E"}