@spfn/core 0.1.0-alpha.88 → 0.2.0-beta.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.
- package/README.md +1046 -384
- package/dist/boss-D-fGtVgM.d.ts +187 -0
- package/dist/cache/index.d.ts +13 -33
- package/dist/cache/index.js +14 -703
- package/dist/cache/index.js.map +1 -1
- package/dist/codegen/index.d.ts +167 -17
- package/dist/codegen/index.js +76 -1419
- package/dist/codegen/index.js.map +1 -1
- package/dist/config/index.d.ts +1191 -0
- package/dist/config/index.js +264 -0
- package/dist/config/index.js.map +1 -0
- package/dist/db/index.d.ts +728 -59
- package/dist/db/index.js +1028 -1225
- package/dist/db/index.js.map +1 -1
- package/dist/env/index.d.ts +579 -308
- package/dist/env/index.js +438 -930
- package/dist/env/index.js.map +1 -1
- package/dist/errors/index.d.ts +417 -29
- package/dist/errors/index.js +359 -98
- package/dist/errors/index.js.map +1 -1
- package/dist/event/index.d.ts +108 -0
- package/dist/event/index.js +122 -0
- package/dist/event/index.js.map +1 -0
- package/dist/job/index.d.ts +172 -0
- package/dist/job/index.js +361 -0
- package/dist/job/index.js.map +1 -0
- package/dist/logger/index.d.ts +20 -79
- package/dist/logger/index.js +82 -387
- package/dist/logger/index.js.map +1 -1
- package/dist/middleware/index.d.ts +2 -11
- package/dist/middleware/index.js +49 -703
- package/dist/middleware/index.js.map +1 -1
- package/dist/nextjs/index.d.ts +120 -0
- package/dist/nextjs/index.js +416 -0
- package/dist/nextjs/index.js.map +1 -0
- package/dist/{client/nextjs/index.d.ts → nextjs/server.d.ts} +288 -262
- package/dist/nextjs/server.js +568 -0
- package/dist/nextjs/server.js.map +1 -0
- package/dist/route/index.d.ts +667 -25
- package/dist/route/index.js +437 -1287
- package/dist/route/index.js.map +1 -1
- package/dist/route/types.d.ts +38 -0
- package/dist/route/types.js +3 -0
- package/dist/route/types.js.map +1 -0
- package/dist/server/index.d.ts +201 -67
- package/dist/server/index.js +921 -3182
- package/dist/server/index.js.map +1 -1
- package/dist/types-BGl4QL1w.d.ts +77 -0
- package/dist/types-DRG2XMTR.d.ts +157 -0
- package/package.json +52 -47
- package/dist/auto-loader-JFaZ9gON.d.ts +0 -80
- package/dist/client/index.d.ts +0 -358
- package/dist/client/index.js +0 -357
- package/dist/client/index.js.map +0 -1
- package/dist/client/nextjs/index.js +0 -371
- package/dist/client/nextjs/index.js.map +0 -1
- package/dist/codegen/generators/index.d.ts +0 -19
- package/dist/codegen/generators/index.js +0 -1404
- package/dist/codegen/generators/index.js.map +0 -1
- package/dist/database-errors-BNNmLTJE.d.ts +0 -86
- package/dist/events/index.d.ts +0 -183
- package/dist/events/index.js +0 -77
- package/dist/events/index.js.map +0 -1
- package/dist/index-DHiAqhKv.d.ts +0 -101
- package/dist/index.d.ts +0 -8
- package/dist/index.js +0 -3674
- package/dist/index.js.map +0 -1
- package/dist/types/index.d.ts +0 -121
- package/dist/types/index.js +0 -38
- package/dist/types/index.js.map +0 -1
- package/dist/types-BXibIEyj.d.ts +0 -60
package/dist/server/index.d.ts
CHANGED
|
@@ -1,62 +1,17 @@
|
|
|
1
1
|
import { MiddlewareHandler, Hono } from 'hono';
|
|
2
2
|
import { cors } from 'hono/cors';
|
|
3
3
|
import { serve } from '@hono/node-server';
|
|
4
|
+
import { NamedMiddleware, Router } from '@spfn/core/route';
|
|
5
|
+
import { J as JobRouter, B as BossConfig } from '../boss-D-fGtVgM.js';
|
|
6
|
+
import '@sinclair/typebox';
|
|
7
|
+
import 'pg-boss';
|
|
8
|
+
|
|
9
|
+
declare function loadEnvFiles(): void;
|
|
4
10
|
|
|
5
11
|
/**
|
|
6
12
|
* CORS configuration options - inferred from hono/cors
|
|
7
13
|
*/
|
|
8
14
|
type CorsConfig = Parameters<typeof cors>[0];
|
|
9
|
-
/**
|
|
10
|
-
* SPFN Plugin Interface
|
|
11
|
-
*
|
|
12
|
-
* Allows packages to automatically hook into server lifecycle
|
|
13
|
-
* Plugins are auto-discovered from @spfn/* packages in node_modules
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```typescript
|
|
17
|
-
* // packages/auth/src/plugin.ts
|
|
18
|
-
* export const spfnPlugin: ServerPlugin = {
|
|
19
|
-
* name: '@spfn/auth',
|
|
20
|
-
* afterInfrastructure: async () => {
|
|
21
|
-
* await initializeAuth();
|
|
22
|
-
* },
|
|
23
|
-
* beforeRoutes: async (app) => {
|
|
24
|
-
* app.route('/_auth', authRoutes);
|
|
25
|
-
* }
|
|
26
|
-
* };
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
interface ServerPlugin {
|
|
30
|
-
/**
|
|
31
|
-
* Plugin name (should match package name)
|
|
32
|
-
*/
|
|
33
|
-
name: string;
|
|
34
|
-
/**
|
|
35
|
-
* Hook: Run after infrastructure (DB/Redis) initialization
|
|
36
|
-
* Use for: migrations, seeding, RBAC setup
|
|
37
|
-
*/
|
|
38
|
-
afterInfrastructure?: () => Promise<void>;
|
|
39
|
-
/**
|
|
40
|
-
* Hook: Run before routes are loaded
|
|
41
|
-
* Use for: mounting plugin routes, adding middleware
|
|
42
|
-
*/
|
|
43
|
-
beforeRoutes?: (app: Hono) => Promise<void>;
|
|
44
|
-
/**
|
|
45
|
-
* Hook: Run after all routes are loaded
|
|
46
|
-
* Use for: final setup, fallback handlers
|
|
47
|
-
*/
|
|
48
|
-
afterRoutes?: (app: Hono) => Promise<void>;
|
|
49
|
-
/**
|
|
50
|
-
* Hook: Run after server starts successfully
|
|
51
|
-
* Use for: notifications, health checks
|
|
52
|
-
*/
|
|
53
|
-
afterStart?: (instance: ServerInstance) => Promise<void>;
|
|
54
|
-
/**
|
|
55
|
-
* Hook: Run before graceful shutdown
|
|
56
|
-
* Use for: cleanup plugin resources
|
|
57
|
-
*/
|
|
58
|
-
beforeShutdown?: () => Promise<void>;
|
|
59
|
-
}
|
|
60
15
|
/**
|
|
61
16
|
* Server Configuration Options
|
|
62
17
|
*
|
|
@@ -99,28 +54,70 @@ interface ServerConfig {
|
|
|
99
54
|
use?: MiddlewareHandler[];
|
|
100
55
|
/**
|
|
101
56
|
* Global middlewares with names for route-level skip control
|
|
102
|
-
*
|
|
57
|
+
* Use defineMiddleware() for type-safe middleware definitions
|
|
103
58
|
*
|
|
104
59
|
* @example
|
|
105
60
|
* ```typescript
|
|
106
|
-
* import {
|
|
61
|
+
* import { defineMiddleware } from '@spfn/core/server';
|
|
62
|
+
*
|
|
63
|
+
* const authMiddleware = defineMiddleware('auth', async (c, next) => {
|
|
64
|
+
* // auth logic
|
|
65
|
+
* await next();
|
|
66
|
+
* });
|
|
107
67
|
*
|
|
108
|
-
* export default
|
|
109
|
-
* middlewares
|
|
110
|
-
*
|
|
111
|
-
* { name: 'rateLimit', handler: rateLimitMiddleware() },
|
|
112
|
-
* ]
|
|
113
|
-
* } satisfies ServerConfig;
|
|
68
|
+
* export default defineServerConfig()
|
|
69
|
+
* .middlewares([authMiddleware, rateLimitMiddleware])
|
|
70
|
+
* .build();
|
|
114
71
|
* ```
|
|
115
72
|
*/
|
|
116
|
-
middlewares?:
|
|
117
|
-
name: string;
|
|
118
|
-
handler: MiddlewareHandler;
|
|
119
|
-
}>;
|
|
73
|
+
middlewares?: readonly NamedMiddleware[];
|
|
120
74
|
/**
|
|
121
|
-
*
|
|
75
|
+
* define-route based router
|
|
76
|
+
* Routes defined with route.get()...handler() style
|
|
77
|
+
* Will be automatically registered before file-based routes
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* import { defineRouter, route } from '@spfn/core/route';
|
|
82
|
+
*
|
|
83
|
+
* const appRouter = defineRouter({
|
|
84
|
+
* getUser: route.get('/users/:id')...
|
|
85
|
+
* createUser: route.post('/users')...
|
|
86
|
+
* });
|
|
87
|
+
*
|
|
88
|
+
* export default defineServerConfig()
|
|
89
|
+
* .routes(appRouter)
|
|
90
|
+
* .build();
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
routes?: Router<any>;
|
|
94
|
+
/**
|
|
95
|
+
* Background jobs router
|
|
96
|
+
* Jobs defined with job()...handler() style
|
|
97
|
+
* Uses pg-boss for PostgreSQL-based job queue
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* import { job, defineJobRouter } from '@spfn/core/job';
|
|
102
|
+
*
|
|
103
|
+
* const sendEmail = job('send-email')
|
|
104
|
+
* .input(Type.Object({ to: Type.String() }))
|
|
105
|
+
* .handler(async (input) => { ... });
|
|
106
|
+
*
|
|
107
|
+
* const jobRouter = defineJobRouter({ sendEmail });
|
|
108
|
+
*
|
|
109
|
+
* export default defineServerConfig()
|
|
110
|
+
* .routes(appRouter)
|
|
111
|
+
* .jobs(jobRouter)
|
|
112
|
+
* .build();
|
|
113
|
+
* ```
|
|
122
114
|
*/
|
|
123
|
-
|
|
115
|
+
jobs?: JobRouter<any>;
|
|
116
|
+
/**
|
|
117
|
+
* pg-boss configuration options
|
|
118
|
+
* Only used if jobs router is provided
|
|
119
|
+
*/
|
|
120
|
+
jobsConfig?: Omit<BossConfig, 'connectionString'>;
|
|
124
121
|
/**
|
|
125
122
|
* Enable debug mode (default: NODE_ENV === 'development')
|
|
126
123
|
*/
|
|
@@ -456,7 +453,7 @@ declare module 'hono' {
|
|
|
456
453
|
* 2. server.config.ts -> Partial customization
|
|
457
454
|
* 3. app.ts -> Full control (no auto config)
|
|
458
455
|
*/
|
|
459
|
-
declare function createServer(config?: ServerConfig
|
|
456
|
+
declare function createServer(config?: ServerConfig): Promise<Hono>;
|
|
460
457
|
|
|
461
458
|
/**
|
|
462
459
|
* Start SPFN Server
|
|
@@ -475,4 +472,141 @@ declare function createServer(config?: ServerConfig, plugins?: ServerPlugin[]):
|
|
|
475
472
|
*/
|
|
476
473
|
declare function startServer(config?: ServerConfig): Promise<ServerInstance>;
|
|
477
474
|
|
|
478
|
-
|
|
475
|
+
/**
|
|
476
|
+
* Server Config Builder
|
|
477
|
+
*
|
|
478
|
+
* Provides a fluent API for building server configuration
|
|
479
|
+
*/
|
|
480
|
+
|
|
481
|
+
declare class ServerConfigBuilder {
|
|
482
|
+
private config;
|
|
483
|
+
private lifecycles;
|
|
484
|
+
/**
|
|
485
|
+
* Set server port
|
|
486
|
+
*/
|
|
487
|
+
port(port: number): this;
|
|
488
|
+
/**
|
|
489
|
+
* Set server hostname
|
|
490
|
+
*/
|
|
491
|
+
host(host: string): this;
|
|
492
|
+
/**
|
|
493
|
+
* Set CORS configuration
|
|
494
|
+
*/
|
|
495
|
+
cors(cors: ServerConfig['cors']): this;
|
|
496
|
+
/**
|
|
497
|
+
* Configure built-in middleware
|
|
498
|
+
*/
|
|
499
|
+
middleware(middleware: ServerConfig['middleware']): this;
|
|
500
|
+
/**
|
|
501
|
+
* Add custom middleware
|
|
502
|
+
*/
|
|
503
|
+
use(handlers: MiddlewareHandler[]): this;
|
|
504
|
+
/**
|
|
505
|
+
* Add named middlewares for route-level skip control
|
|
506
|
+
*/
|
|
507
|
+
middlewares(middlewares: ServerConfig['middlewares']): this;
|
|
508
|
+
/**
|
|
509
|
+
* Register define-route based router
|
|
510
|
+
*
|
|
511
|
+
* Automatically applies:
|
|
512
|
+
* - Global middlewares from router._globalMiddlewares (via .use())
|
|
513
|
+
* - Package routers from router._packageRouters (via .packages())
|
|
514
|
+
*
|
|
515
|
+
* @example
|
|
516
|
+
* ```typescript
|
|
517
|
+
* const appRouter = defineRouter({
|
|
518
|
+
* getUser: route.get('/users/:id')...
|
|
519
|
+
* })
|
|
520
|
+
* .packages([authRouter, cmsAppRouter])
|
|
521
|
+
* .use([authMiddleware]);
|
|
522
|
+
*
|
|
523
|
+
* export default defineServerConfig()
|
|
524
|
+
* .routes(appRouter) // middlewares auto-applied
|
|
525
|
+
* .build();
|
|
526
|
+
* ```
|
|
527
|
+
*/
|
|
528
|
+
routes(router: Router<any>): this;
|
|
529
|
+
/**
|
|
530
|
+
* Register background jobs router
|
|
531
|
+
*
|
|
532
|
+
* @example
|
|
533
|
+
* ```typescript
|
|
534
|
+
* import { job, defineJobRouter } from '@spfn/core/job';
|
|
535
|
+
*
|
|
536
|
+
* const sendEmail = job('send-email')
|
|
537
|
+
* .input(Type.Object({ to: Type.String() }))
|
|
538
|
+
* .handler(async (input) => { ... });
|
|
539
|
+
*
|
|
540
|
+
* const jobRouter = defineJobRouter({ sendEmail });
|
|
541
|
+
*
|
|
542
|
+
* export default defineServerConfig()
|
|
543
|
+
* .routes(appRouter)
|
|
544
|
+
* .jobs(jobRouter)
|
|
545
|
+
* .build();
|
|
546
|
+
* ```
|
|
547
|
+
*/
|
|
548
|
+
jobs(router: JobRouter<any>, config?: Omit<BossConfig, 'connectionString'>): this;
|
|
549
|
+
/**
|
|
550
|
+
* Enable/disable debug mode
|
|
551
|
+
*/
|
|
552
|
+
debug(enabled: boolean): this;
|
|
553
|
+
/**
|
|
554
|
+
* Configure database settings
|
|
555
|
+
*/
|
|
556
|
+
database(database: ServerConfig['database']): this;
|
|
557
|
+
/**
|
|
558
|
+
* Configure server timeout settings
|
|
559
|
+
*/
|
|
560
|
+
timeout(timeout: ServerConfig['timeout']): this;
|
|
561
|
+
/**
|
|
562
|
+
* Configure graceful shutdown settings
|
|
563
|
+
*/
|
|
564
|
+
shutdown(shutdown: ServerConfig['shutdown']): this;
|
|
565
|
+
/**
|
|
566
|
+
* Configure health check endpoint
|
|
567
|
+
*/
|
|
568
|
+
healthCheck(healthCheck: ServerConfig['healthCheck']): this;
|
|
569
|
+
/**
|
|
570
|
+
* Configure infrastructure initialization
|
|
571
|
+
*/
|
|
572
|
+
infrastructure(infrastructure: ServerConfig['infrastructure']): this;
|
|
573
|
+
/**
|
|
574
|
+
* Configure lifecycle hooks
|
|
575
|
+
* Can be called multiple times - hooks will be executed in registration order
|
|
576
|
+
*/
|
|
577
|
+
lifecycle(lifecycle: ServerConfig['lifecycle']): this;
|
|
578
|
+
/**
|
|
579
|
+
* Build and return the final configuration
|
|
580
|
+
*/
|
|
581
|
+
build(): ServerConfig;
|
|
582
|
+
private mergeLifecycles;
|
|
583
|
+
}
|
|
584
|
+
/**
|
|
585
|
+
* Create a new server configuration builder
|
|
586
|
+
*
|
|
587
|
+
* @example
|
|
588
|
+
* ```typescript
|
|
589
|
+
* // server.config.ts
|
|
590
|
+
* import { defineServerConfig, route, defineRouter } from '@spfn/core/server';
|
|
591
|
+
* import { Type } from '@sinclair/typebox';
|
|
592
|
+
*
|
|
593
|
+
* const appRouter = defineRouter({
|
|
594
|
+
* getUser: route.get('/users/:id')
|
|
595
|
+
* .input(Type.Object({ id: Type.String() }))
|
|
596
|
+
* .handler(async (c) => {
|
|
597
|
+
* const { id } = await c.data();
|
|
598
|
+
* return c.success({ id, name: 'John' });
|
|
599
|
+
* }),
|
|
600
|
+
* });
|
|
601
|
+
*
|
|
602
|
+
* export default defineServerConfig()
|
|
603
|
+
* .port(3000)
|
|
604
|
+
* .routes(appRouter)
|
|
605
|
+
* .middleware({ logger: true, cors: true })
|
|
606
|
+
* .debug(true)
|
|
607
|
+
* .build();
|
|
608
|
+
* ```
|
|
609
|
+
*/
|
|
610
|
+
declare function defineServerConfig(): ServerConfigBuilder;
|
|
611
|
+
|
|
612
|
+
export { type AppFactory, type ServerConfig, type ServerInstance, createServer, defineServerConfig, loadEnvFiles, startServer };
|