sleepy-serv 0.17.0 → 0.19.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/README.md +113 -15
- package/dist/cli/build.d.ts +2 -0
- package/dist/cli/build.d.ts.map +1 -0
- package/dist/cli/dev.d.ts +2 -0
- package/dist/cli/dev.d.ts.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/index.d.ts +17 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/middleware.d.ts.map +1 -0
- package/dist/core/socket.d.ts.map +1 -0
- package/dist/{utils.d.ts → core/utils.d.ts} +13 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/index.d.ts +3 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/plugin/codegen.d.ts +3 -0
- package/dist/plugin/codegen.d.ts.map +1 -0
- package/dist/plugin/config.d.ts +14 -0
- package/dist/plugin/config.d.ts.map +1 -0
- package/dist/plugin/index.d.ts +2 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/scanner.d.ts +15 -0
- package/dist/plugin/scanner.d.ts.map +1 -0
- package/package.json +8 -1
- package/src/cli/build.ts +82 -0
- package/src/cli/dev.ts +27 -0
- package/src/cli/index.ts +53 -0
- package/src/cli/init.ts +108 -0
- package/src/core/index.ts +406 -0
- package/src/{utils.ts → core/utils.ts} +16 -0
- package/src/index.ts +5 -573
- package/src/plugin/codegen.ts +101 -0
- package/src/plugin/config.ts +34 -0
- package/src/plugin/index.ts +30 -0
- package/src/plugin/scanner.ts +148 -0
- package/dist/errors.d.ts.map +0 -1
- package/dist/messages.d.ts.map +0 -1
- package/dist/middleware.d.ts.map +0 -1
- package/dist/socket.d.ts.map +0 -1
- package/dist/utils.d.ts.map +0 -1
- /package/dist/{errors.d.ts → core/errors.d.ts} +0 -0
- /package/dist/{messages.d.ts → core/messages.d.ts} +0 -0
- /package/dist/{middleware.d.ts → core/middleware.d.ts} +0 -0
- /package/dist/{socket.d.ts → core/socket.d.ts} +0 -0
- /package/src/{errors.ts → core/errors.ts} +0 -0
- /package/src/{messages.ts → core/messages.ts} +0 -0
- /package/src/{middleware.ts → core/middleware.ts} +0 -0
- /package/src/{socket.ts → core/socket.ts} +0 -0
package/README.md
CHANGED
|
@@ -9,32 +9,69 @@ A directory-driven web server designed for REST-ful applications
|
|
|
9
9
|
|
|
10
10
|
## Getting Started
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
The fastest way to scaffold a new project is the CLI:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
bunx sleepy-serv init
|
|
16
|
+
bun install
|
|
17
|
+
sleepy dev
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Or manually:
|
|
13
21
|
|
|
14
22
|
```js
|
|
23
|
+
// src/index.ts
|
|
15
24
|
import { createApp } from 'sleepy-serv'
|
|
16
25
|
|
|
17
|
-
|
|
26
|
+
createApp(3000)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Routes live in `src/api/` and are discovered automatically by the Bun
|
|
30
|
+
plugin at startup. There is no need to pass a directory path or import
|
|
31
|
+
routes yourself.
|
|
18
32
|
|
|
19
|
-
|
|
33
|
+
To start the dev server with the plugin preloaded:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
sleepy dev
|
|
20
37
|
```
|
|
21
38
|
|
|
22
|
-
|
|
39
|
+
### The Plugin
|
|
40
|
+
|
|
41
|
+
`sleepy-serv` uses a Bun plugin (`sleepy-serv/plugin`) to scan the
|
|
42
|
+
filesystem and generate static imports for every route at load time. This
|
|
43
|
+
replaces the previous dynamic `import()` and `fs.readdirSync()` approach
|
|
44
|
+
and enables compatibility with `bun build --compile --bytecode`.
|
|
45
|
+
|
|
46
|
+
The plugin is loaded automatically by the CLI commands (`sleepy dev` and
|
|
47
|
+
`sleepy build`). If you prefer to run your entrypoint directly, preload
|
|
48
|
+
the plugin yourself:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
bun --preload sleepy-serv/plugin src/index.ts
|
|
52
|
+
```
|
|
23
53
|
|
|
24
54
|
### Return Value
|
|
25
55
|
|
|
26
|
-
`
|
|
27
|
-
|
|
28
|
-
- `
|
|
29
|
-
|
|
30
|
-
- `
|
|
56
|
+
`createApp()` calls `Bun.serve()` under the hood and returns an `app`
|
|
57
|
+
object with these properties:
|
|
58
|
+
- `routes`: a list of all routes defined by the file structure, useful for
|
|
59
|
+
debugging.
|
|
60
|
+
- `server`: the object returned from `Bun.serve()`. Prefer `app.close()`
|
|
61
|
+
(see [Shutting Down](#shutting-down)) over calling `server.stop()`
|
|
62
|
+
directly.
|
|
63
|
+
- `ws`: WebSocket commands for interacting with connected clients:
|
|
64
|
+
`query(fn)`, `send(fn, event, body)`, `broadcast(event, body)`, and
|
|
65
|
+
`drop(fn, code?, reason?)`.
|
|
66
|
+
- `close`: an `async` function that shuts the app down. See
|
|
67
|
+
[Shutting Down](#shutting-down).
|
|
31
68
|
|
|
32
69
|
### Shutting Down
|
|
33
70
|
|
|
34
71
|
`app.close()` shuts the app down and releases everything it holds:
|
|
35
72
|
|
|
36
73
|
```js
|
|
37
|
-
const app =
|
|
74
|
+
const app = createApp(3000)
|
|
38
75
|
|
|
39
76
|
await app.close()
|
|
40
77
|
```
|
|
@@ -423,7 +460,7 @@ You can define app-level middleware that will be applied to all routes:
|
|
|
423
460
|
```js
|
|
424
461
|
import { parseJsonBody } from 'sleepy-serv'
|
|
425
462
|
|
|
426
|
-
const app =
|
|
463
|
+
const app = createApp(3000, {
|
|
427
464
|
middleware: [
|
|
428
465
|
parseJsonBody(),
|
|
429
466
|
(req, res, next) => {
|
|
@@ -443,7 +480,7 @@ Note that the reserved `/ws` handshake routes are folded into these same chains,
|
|
|
443
480
|
The hostname can be customized like so:
|
|
444
481
|
|
|
445
482
|
```js
|
|
446
|
-
createApp(
|
|
483
|
+
createApp(3000, {
|
|
447
484
|
hostname: 'test.sleepy-serv.com',
|
|
448
485
|
})
|
|
449
486
|
```
|
|
@@ -453,7 +490,7 @@ createApp(import.meta.dirname, {
|
|
|
453
490
|
This adds a prefix to all routes. For example:
|
|
454
491
|
|
|
455
492
|
```js
|
|
456
|
-
createApp(
|
|
493
|
+
createApp(3000, {
|
|
457
494
|
mountPath: 'api/public',
|
|
458
495
|
})
|
|
459
496
|
```
|
|
@@ -481,7 +518,7 @@ Yields these routes:
|
|
|
481
518
|
When the app is started, the app can be shutdown gracefully by pressing Ctrl+D in the terminal. That handler is only wired up when `stdin` is a TTY, so it's skipped in CI, in test runners, and anywhere `stdin` is piped. The `onClose` hook will be called during that shutdown if it's defined, and it's also called by [`app.close()`](#shutting-down). `onClose` can also be `async` as well.
|
|
482
519
|
|
|
483
520
|
```js
|
|
484
|
-
const app =
|
|
521
|
+
const app = createApp(3000, {
|
|
485
522
|
onClose: () => console.info('closing down...'),
|
|
486
523
|
})
|
|
487
524
|
```
|
|
@@ -491,7 +528,7 @@ const app = await createApp(PORT, import.meta.dirname, {
|
|
|
491
528
|
WebSocket tuning and lifecycle hooks:
|
|
492
529
|
|
|
493
530
|
```js
|
|
494
|
-
const app =
|
|
531
|
+
const app = createApp(3000, {
|
|
495
532
|
ws: {
|
|
496
533
|
heartbeatInterval: 30_000,
|
|
497
534
|
dropThreshold: 120_000,
|
|
@@ -546,3 +583,64 @@ This works from both HTTP and WebSocket transports.
|
|
|
546
583
|
- `SocketCommands`: the type for `app.ws` and `req.ws`
|
|
547
584
|
- Error classes for every 4xx and 5xx status (e.g. `NotFoundError`, `UnauthorizedError`, `InternalServerError`)
|
|
548
585
|
- Middleware helpers: `parseJsonBody`, `validateSchemas`, `setValidationFormats`
|
|
586
|
+
|
|
587
|
+
## CLI
|
|
588
|
+
|
|
589
|
+
The `sleepy` CLI is installed with the package and provides three commands:
|
|
590
|
+
|
|
591
|
+
### `sleepy init`
|
|
592
|
+
|
|
593
|
+
Scaffolds a new project in the current directory with `package.json`,
|
|
594
|
+
`sleepy.config.ts`, `tsconfig.json`, `src/index.ts`, and
|
|
595
|
+
`src/api/get.ts`. If `package.json` already exists, it merges the
|
|
596
|
+
`dev` and `build` scripts without overwriting other fields. If `src/`
|
|
597
|
+
already exists, existing files are not overwritten.
|
|
598
|
+
|
|
599
|
+
### `sleepy dev`
|
|
600
|
+
|
|
601
|
+
Starts the dev server in watch mode with the plugin preloaded:
|
|
602
|
+
|
|
603
|
+
```bash
|
|
604
|
+
sleepy dev
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
Equivalent to:
|
|
608
|
+
|
|
609
|
+
```bash
|
|
610
|
+
bun --watch --preload sleepy-serv/plugin src/index.ts
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
### `sleepy build`
|
|
614
|
+
|
|
615
|
+
Produces a production build using `Bun.build()` with the plugin:
|
|
616
|
+
|
|
617
|
+
```bash
|
|
618
|
+
sleepy build
|
|
619
|
+
sleepy build --compile
|
|
620
|
+
sleepy build --compile --bytecode
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
Output goes to `./dist` by default. The `--compile` flag produces a
|
|
624
|
+
single executable. The `--bytecode` flag pre-compiles to bytecode for
|
|
625
|
+
faster startup.
|
|
626
|
+
|
|
627
|
+
## Configuration
|
|
628
|
+
|
|
629
|
+
Create a `sleepy.config.ts` (or `.js`) in the project root:
|
|
630
|
+
|
|
631
|
+
```ts
|
|
632
|
+
export default {
|
|
633
|
+
app: {
|
|
634
|
+
root: './src/api',
|
|
635
|
+
entrypoint: './src/index.ts',
|
|
636
|
+
},
|
|
637
|
+
build: {
|
|
638
|
+
outdir: './dist',
|
|
639
|
+
compile: false,
|
|
640
|
+
bytecode: false,
|
|
641
|
+
plugins: [],
|
|
642
|
+
},
|
|
643
|
+
}
|
|
644
|
+
```
|
|
645
|
+
|
|
646
|
+
All fields are optional and fall back to the defaults shown above.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAQA,wBAAsB,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC,CAyE5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"AAGA,wBAAsB,GAAG,IAAK,OAAO,CAAC,IAAI,CAAC,CAuB1C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AA4FA,wBAAsB,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC,CAe3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { RouteConfig, SocketCommands, AppOptions, Server } from './utils';
|
|
2
|
+
export * from './errors';
|
|
3
|
+
export { StatusCode, CloseCode, CloseReason, HttpMethod } from './utils';
|
|
4
|
+
export { parseJsonBody, setValidationFormats, validateSchemas, } from './middleware';
|
|
5
|
+
export type { FilterFn, SessionEntry, SocketCommands } from './utils';
|
|
6
|
+
export type { AppOptions, AsyncHandlerResult, BaseRequest, EndpointRequest, FormattedError, Handler, MetaEntry, Middleware, MiddlewareChain, NextFn, HandlerResult, Request, RouteConfig, RouteDefinition, Server, SocketConnection, SocketOptions, WebSocketRequest, } from './utils';
|
|
7
|
+
export type { FormatterField, FormatterSchema, ValidationSchemas, } from './middleware';
|
|
8
|
+
type OutputRoutes = Record<string, string[]>;
|
|
9
|
+
type CloseFn = (force?: boolean) => Promise<void>;
|
|
10
|
+
export type App = {
|
|
11
|
+
server: Server;
|
|
12
|
+
routes: OutputRoutes;
|
|
13
|
+
ws: SocketCommands;
|
|
14
|
+
close: CloseFn;
|
|
15
|
+
};
|
|
16
|
+
export declare function createApp(port: number, config: RouteConfig, opts?: AppOptions): App;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAOV,WAAW,EAEX,cAAc,EACd,UAAU,EACV,MAAM,EACP,MAAM,SAAS,CAAA;AAOhB,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAExE,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,eAAe,GAChB,MAAM,cAAc,CAAA;AAErB,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAErE,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,cAAc,EACd,OAAO,EACP,SAAS,EACT,UAAU,EACV,eAAe,EACf,MAAM,EACN,aAAa,EACb,OAAO,EACP,WAAW,EACX,eAAe,EACf,MAAM,EACN,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GACjB,MAAM,SAAS,CAAA;AAEhB,YAAY,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,GAClB,MAAM,cAAc,CAAA;AAErB,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;AA0B5C,KAAK,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAEjD,MAAM,MAAM,GAAG,GAAG;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,YAAY,CAAA;IACpB,EAAE,EAAE,cAAc,CAAA;IAClB,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAgRD,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE,UAAe,GACpB,GAAG,CAaL"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/core/messages.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,eAAO,MAAM,WAAW;;;;;;CAMd,CAAA;AAEV,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,MAAM,OAAO,WAAW,CAAC,CAAA;AAEtE,eAAO,MAAM,sBAAsB,EAAE,MAAM,EAG1C,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,WAAW,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG;IAC3C,IAAI,EAAE,OAAO,WAAW,CAAC,SAAS,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG;IACzC,IAAI,EAAE,OAAO,WAAW,CAAC,OAAO,CAAA;IAChC,MAAM,EAAE,UAAU,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,GAAG,CAAC,WAAW,CAAA;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG;IAC1C,IAAI,EAAE,OAAO,WAAW,CAAC,QAAQ,CAAA;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG;IACzC,IAAI,EAAE,OAAO,WAAW,CAAC,OAAO,CAAA;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE;QACJ,iBAAiB,EAAE,MAAM,CAAA;QACzB,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;CACF,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG;IAC9C,IAAI,EAAE,OAAO,WAAW,CAAC,YAAY,CAAA;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,MAAM,MAAM,OAAO,GACf,gBAAgB,GAChB,cAAc,GACd,eAAe,GACf,cAAc,GACd,mBAAmB,CAAA;AAEvB,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,cAAc,CAAA;AAE/D,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAC5D,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAC9C,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,EAAE,MAAM,WAAW,CAAC,CAAA;AAwG5D,wBAAgB,aAAa,CAAC,CAAC,SAAS,WAAW,EACjD,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,CAe/B;AAED,wBAAgB,eAAe,CAAE,OAAO,EAAE,UAAU,GAAG,eAAe,CA4BrE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/core/middleware.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAoB,MAAM,KAAK,CAAA;AAE3D,OAAO,KAAK,EAIV,UAAU,EAGX,MAAM,SAAS,CAAA;AAEhB,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AAE5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,KAAK,CAAC,EAAE,eAAe,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAA;AAmF/C,wBAAgB,aAAa,IAAK,UAAU,CAoB3C;AAED,wBAAgB,oBAAoB,CAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAU3E;AAID,wBAAgB,2BAA2B,IAAK,IAAI,CAGnD;AAcD,wBAAgB,eAAe,CAAE,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAgCvE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/core/socket.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,WAAW,EAIZ,MAAM,SAAS,CAAA;AAchB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAA;AAE3C,OAAO,KAAK,EACV,kBAAkB,EAClB,UAAU,EACV,OAAO,EACP,eAAe,EACf,cAAc,EAGd,UAAU,EAEV,aAAa,EACb,eAAe,EAEf,UAAU,EACX,MAAM,SAAS,CAAA;AAShB,KAAK,aAAa,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,KAAK,kBAAkB,CAAA;AAYvE,KAAK,cAAc,GAAG;IACpB,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,aAAa,CAAA;CACvB,CAAA;AAqBD,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC1C,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC9C,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAA;IAC3C,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC,GAAG,IAAI,CAAA;CAClE,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,EAAE,eAAe,CAAA;CACvB,CAAA;AAiTD,wBAAgB,gBAAgB,CAAE,IAAI,GAAE,UAAe,GAAG,WAAW,CAapE;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EAAE,EACrB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,cAAc,GACvB,gBAAgB,CAAC,UAAU,CAAC,CAoJ9B;AAED,wBAAgB,mBAAmB,CAAE,KAAK,EAAE,WAAW,GAAG,cAAc,EAAE,CAyIzE;AAED,wBAAgB,mBAAmB,CAAE,KAAK,EAAE,WAAW,GAAG,cAAc,CAgEvE"}
|
|
@@ -160,6 +160,19 @@ export type SocketConnection = {
|
|
|
160
160
|
close: (code?: number, reason?: string) => void;
|
|
161
161
|
};
|
|
162
162
|
export type Server = BunServer<SocketData>;
|
|
163
|
+
export type RouteDefinition = {
|
|
164
|
+
method: HttpMethod;
|
|
165
|
+
path: string;
|
|
166
|
+
chain: Handler | MiddlewareChain;
|
|
167
|
+
};
|
|
168
|
+
export type MetaEntry = {
|
|
169
|
+
path: string;
|
|
170
|
+
middleware: Middleware[];
|
|
171
|
+
};
|
|
172
|
+
export type RouteConfig = {
|
|
173
|
+
routes: RouteDefinition[];
|
|
174
|
+
meta?: MetaEntry[];
|
|
175
|
+
};
|
|
163
176
|
export type AppOptions = {
|
|
164
177
|
hostname?: string;
|
|
165
178
|
mountPath?: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,17 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
export { parseJsonBody, setValidationFormats, validateSchemas, } from './middleware';
|
|
5
|
-
export type { FilterFn, SessionEntry, SocketCommands } from './utils';
|
|
6
|
-
export type { AppOptions, AsyncHandlerResult, BaseRequest, EndpointRequest, FormattedError, Handler, Middleware, MiddlewareChain, NextFn, HandlerResult, Request, Server, SocketConnection, SocketOptions, WebSocketRequest, } from './utils';
|
|
7
|
-
export type { FormatterField, FormatterSchema, ValidationSchemas, } from './middleware';
|
|
8
|
-
type OutputRoutes = Record<string, string[]>;
|
|
9
|
-
type CloseFn = (force?: boolean) => Promise<void>;
|
|
10
|
-
export type App = {
|
|
11
|
-
server: Server;
|
|
12
|
-
routes: OutputRoutes;
|
|
13
|
-
ws: SocketCommands;
|
|
14
|
-
close: CloseFn;
|
|
15
|
-
};
|
|
16
|
-
export declare function createApp(port: number, rootPath: string, opts?: AppOptions): Promise<App>;
|
|
1
|
+
export * from './core';
|
|
2
|
+
import type { App, AppOptions } from './core';
|
|
3
|
+
export declare function createApp(port: number, opts?: AppOptions): App;
|
|
17
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AAEtB,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAE7C,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,UAAU,GAChB,GAAG,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../src/plugin/codegen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAE3C,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,UAAU,GACrB,MAAM,CAgGR"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type SleepyConfig = {
|
|
2
|
+
app?: {
|
|
3
|
+
root?: string;
|
|
4
|
+
entrypoint?: string;
|
|
5
|
+
};
|
|
6
|
+
build?: {
|
|
7
|
+
compile?: boolean | string;
|
|
8
|
+
bytecode?: boolean;
|
|
9
|
+
outdir?: string;
|
|
10
|
+
plugins?: unknown[];
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export declare function loadConfig(startDir?: string): Promise<SleepyConfig>;
|
|
14
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/plugin/config.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,CAAC,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;QAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,OAAO,CAAC,EAAE,OAAO,EAAE,CAAA;KACpB,CAAA;CACF,CAAA;AAED,wBAAsB,UAAU,CAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC,CAgBvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type MethodEntry = {
|
|
2
|
+
method: string;
|
|
3
|
+
path: string;
|
|
4
|
+
modulePath: string;
|
|
5
|
+
};
|
|
6
|
+
export type MetaEntry = {
|
|
7
|
+
path: string;
|
|
8
|
+
modulePath: string;
|
|
9
|
+
};
|
|
10
|
+
export type ScanResult = {
|
|
11
|
+
methods: MethodEntry[];
|
|
12
|
+
meta: MetaEntry[];
|
|
13
|
+
};
|
|
14
|
+
export declare function scanRoutes(apiRoot: string): ScanResult;
|
|
15
|
+
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/plugin/scanner.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,IAAI,EAAE,SAAS,EAAE,CAAA;CAClB,CAAA;AAkGD,wBAAgB,UAAU,CAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CAgCvD"}
|
package/package.json
CHANGED
|
@@ -3,13 +3,20 @@
|
|
|
3
3
|
"description": "A more opinionated web server for building REST-ful applications",
|
|
4
4
|
"author": "Travis J True",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.19.0",
|
|
7
7
|
"type": "module",
|
|
8
|
+
"bin": {
|
|
9
|
+
"sleepy": "./src/cli/index.ts"
|
|
10
|
+
},
|
|
8
11
|
"exports": {
|
|
9
12
|
".": {
|
|
10
13
|
"types": "./dist/index.d.ts",
|
|
11
14
|
"bun": "./src/index.ts",
|
|
12
15
|
"default": "./src/index.ts"
|
|
16
|
+
},
|
|
17
|
+
"./plugin": {
|
|
18
|
+
"bun": "./src/plugin/index.ts",
|
|
19
|
+
"default": "./src/plugin/index.ts"
|
|
13
20
|
}
|
|
14
21
|
},
|
|
15
22
|
"files": [
|
package/src/cli/build.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import path from 'path'
|
|
2
|
+
import fs from 'fs'
|
|
3
|
+
import { loadConfig } from '../plugin/config'
|
|
4
|
+
import { scanRoutes } from '../plugin/scanner'
|
|
5
|
+
import { generateBarrelModule } from '../plugin/codegen'
|
|
6
|
+
|
|
7
|
+
import type { BunPlugin } from 'bun'
|
|
8
|
+
|
|
9
|
+
export async function build (): Promise<void> {
|
|
10
|
+
const config = await loadConfig()
|
|
11
|
+
const entrypoint = config.app?.entrypoint?? './src/index.ts'
|
|
12
|
+
|
|
13
|
+
if (!fs.existsSync(entrypoint)) {
|
|
14
|
+
console.error(`Entrypoint not found: ${entrypoint}`)
|
|
15
|
+
process.exit(1)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const relativeRoot = config.app?.root ?? './src/api'
|
|
19
|
+
const apiRoot = path.resolve(process.cwd(), relativeRoot)
|
|
20
|
+
const barrelPath = require.resolve('sleepy-serv')
|
|
21
|
+
const escaped = barrelPath.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
|
|
22
|
+
const constraints = { filter: new RegExp(escaped) }
|
|
23
|
+
|
|
24
|
+
const sleepyPlugin: BunPlugin = {
|
|
25
|
+
name: 'sleepy-serv',
|
|
26
|
+
setup (build) {
|
|
27
|
+
build.onLoad(constraints, () => {
|
|
28
|
+
const scanResult = scanRoutes(apiRoot)
|
|
29
|
+
const contents = generateBarrelModule(scanResult)
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
loader: 'ts',
|
|
33
|
+
contents,
|
|
34
|
+
}
|
|
35
|
+
})
|
|
36
|
+
},
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const userPlugins = (config.build?.plugins ?? []) as BunPlugin[]
|
|
40
|
+
const outdir = config.build?.outdir ?? './dist'
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
const result = await Bun.build({
|
|
44
|
+
outdir,
|
|
45
|
+
target: 'bun',
|
|
46
|
+
minify: true,
|
|
47
|
+
bytecode: config.build?.bytecode || undefined,
|
|
48
|
+
compile: (config.build?.compile || undefined) as boolean | undefined,
|
|
49
|
+
plugins: [...userPlugins, sleepyPlugin],
|
|
50
|
+
entrypoints: [entrypoint],
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
if (!result.success) {
|
|
54
|
+
console.error('Build failed:')
|
|
55
|
+
|
|
56
|
+
for (const log of result.logs) {
|
|
57
|
+
console.error(` ${log.message}`)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
process.exit(1)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
console.log('Build succeeded:')
|
|
64
|
+
|
|
65
|
+
for (const output of result.outputs) {
|
|
66
|
+
console.log(` ${output.path}`)
|
|
67
|
+
}
|
|
68
|
+
} catch (err) {
|
|
69
|
+
const errors = err instanceof AggregateError ? err.errors : [err]
|
|
70
|
+
|
|
71
|
+
console.error('Build failed:')
|
|
72
|
+
|
|
73
|
+
for (const buildErr of errors) {
|
|
74
|
+
const isBasicErr = buildErr instanceof Error
|
|
75
|
+
const msg = isBasicErr ? buildErr.message : String(buildErr)
|
|
76
|
+
|
|
77
|
+
console.error(` ${msg}`)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
process.exit(1)
|
|
81
|
+
}
|
|
82
|
+
}
|
package/src/cli/dev.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import fs from 'fs'
|
|
2
|
+
import { loadConfig } from '../plugin/config'
|
|
3
|
+
|
|
4
|
+
export async function dev (): Promise<void> {
|
|
5
|
+
const config = await loadConfig()
|
|
6
|
+
const entrypoint = config.app?.entrypoint ?? './src/index.ts'
|
|
7
|
+
|
|
8
|
+
if (!fs.existsSync(entrypoint)) {
|
|
9
|
+
console.error(`Entrypoint not found: ${entrypoint}`)
|
|
10
|
+
|
|
11
|
+
process.exit(1)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const proc = Bun.spawn([
|
|
15
|
+
'bun', '--watch',
|
|
16
|
+
'--preload', 'sleepy-serv/plugin',
|
|
17
|
+
entrypoint,
|
|
18
|
+
], {
|
|
19
|
+
stdout: 'inherit',
|
|
20
|
+
stderr: 'inherit',
|
|
21
|
+
stdin: 'inherit',
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
const code = await proc.exited
|
|
25
|
+
|
|
26
|
+
process.exit(code)
|
|
27
|
+
}
|
package/src/cli/index.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
|
|
3
|
+
import { parseArgs } from 'node:util'
|
|
4
|
+
import { init } from './init'
|
|
5
|
+
import { dev } from './dev'
|
|
6
|
+
import { build } from './build'
|
|
7
|
+
|
|
8
|
+
const USAGE = `
|
|
9
|
+
Usage: sleepy <command>
|
|
10
|
+
|
|
11
|
+
Commands:
|
|
12
|
+
init Create a new sleepy-serv project
|
|
13
|
+
dev Start the dev server (watch mode)
|
|
14
|
+
build Build for production
|
|
15
|
+
|
|
16
|
+
Options:
|
|
17
|
+
--help Show this help message
|
|
18
|
+
`.trim().concat('\n')
|
|
19
|
+
|
|
20
|
+
const { positionals, values } = parseArgs({
|
|
21
|
+
allowPositionals: true,
|
|
22
|
+
options: {
|
|
23
|
+
help: {
|
|
24
|
+
type: 'boolean',
|
|
25
|
+
short: 'h',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
if (values.help) {
|
|
31
|
+
console.log(USAGE)
|
|
32
|
+
process.exit(0)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const command = positionals[0]
|
|
36
|
+
|
|
37
|
+
switch (command) {
|
|
38
|
+
case 'init':
|
|
39
|
+
await init()
|
|
40
|
+
break
|
|
41
|
+
|
|
42
|
+
case 'dev':
|
|
43
|
+
await dev()
|
|
44
|
+
break
|
|
45
|
+
|
|
46
|
+
case 'build':
|
|
47
|
+
await build()
|
|
48
|
+
break
|
|
49
|
+
|
|
50
|
+
default:
|
|
51
|
+
console.error(USAGE)
|
|
52
|
+
process.exit(1)
|
|
53
|
+
}
|