@c9up/ream 0.2.16 → 0.2.18

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 (93) hide show
  1. package/dist/Application.d.ts +54 -8
  2. package/dist/Application.d.ts.map +1 -1
  3. package/dist/Application.js +77 -7
  4. package/dist/Application.js.map +1 -1
  5. package/dist/HttpKernel.d.ts +10 -0
  6. package/dist/HttpKernel.d.ts.map +1 -1
  7. package/dist/HttpKernel.js +61 -5
  8. package/dist/HttpKernel.js.map +1 -1
  9. package/dist/Ignitor.d.ts.map +1 -1
  10. package/dist/Ignitor.js +76 -18
  11. package/dist/Ignitor.js.map +1 -1
  12. package/dist/commands/ScheduleList.d.ts.map +1 -1
  13. package/dist/commands/ScheduleList.js +29 -0
  14. package/dist/commands/ScheduleList.js.map +1 -1
  15. package/dist/container/Container.d.ts.map +1 -1
  16. package/dist/container/Container.js +174 -45
  17. package/dist/container/Container.js.map +1 -1
  18. package/dist/container/types.d.ts +7 -0
  19. package/dist/container/types.d.ts.map +1 -1
  20. package/dist/dev/hmr.d.ts +37 -0
  21. package/dist/dev/hmr.d.ts.map +1 -0
  22. package/dist/dev/hmr.js +72 -0
  23. package/dist/dev/hmr.js.map +1 -0
  24. package/dist/graphql/GraphQLProvider.d.ts +14 -3
  25. package/dist/graphql/GraphQLProvider.d.ts.map +1 -1
  26. package/dist/graphql/GraphQLProvider.js +14 -3
  27. package/dist/graphql/GraphQLProvider.js.map +1 -1
  28. package/dist/hot.d.ts +29 -0
  29. package/dist/hot.d.ts.map +1 -0
  30. package/dist/hot.js +135 -0
  31. package/dist/hot.js.map +1 -0
  32. package/dist/http/Exception.d.ts +2 -2
  33. package/dist/http/Exception.d.ts.map +1 -1
  34. package/dist/http/Exception.js +3 -3
  35. package/dist/http/Exception.js.map +1 -1
  36. package/dist/http/Request.d.ts +11 -0
  37. package/dist/http/Request.d.ts.map +1 -1
  38. package/dist/http/Request.js +40 -0
  39. package/dist/http/Request.js.map +1 -1
  40. package/dist/http/RequestValidator.d.ts +80 -0
  41. package/dist/http/RequestValidator.d.ts.map +1 -0
  42. package/dist/http/RequestValidator.js +93 -0
  43. package/dist/http/RequestValidator.js.map +1 -0
  44. package/dist/index.d.ts +3 -1
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +2 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/middleware/Pipeline.d.ts +2 -2
  49. package/dist/middleware/Pipeline.js +2 -2
  50. package/dist/middleware/Pipeline.js.map +1 -1
  51. package/dist/migrations/MigrationRegistry.d.ts +16 -0
  52. package/dist/migrations/MigrationRegistry.d.ts.map +1 -1
  53. package/dist/migrations/MigrationRegistry.js +24 -0
  54. package/dist/migrations/MigrationRegistry.js.map +1 -1
  55. package/dist/openapi/OpenApiGenerator.d.ts +16 -0
  56. package/dist/openapi/OpenApiGenerator.d.ts.map +1 -1
  57. package/dist/openapi/OpenApiGenerator.js +76 -4
  58. package/dist/openapi/OpenApiGenerator.js.map +1 -1
  59. package/dist/openapi/OpenApiProvider.d.ts +16 -5
  60. package/dist/openapi/OpenApiProvider.d.ts.map +1 -1
  61. package/dist/openapi/OpenApiProvider.js +21 -6
  62. package/dist/openapi/OpenApiProvider.js.map +1 -1
  63. package/dist/rpc/RpcProvider.d.ts +13 -2
  64. package/dist/rpc/RpcProvider.d.ts.map +1 -1
  65. package/dist/rpc/RpcProvider.js +13 -2
  66. package/dist/rpc/RpcProvider.js.map +1 -1
  67. package/dist/storage/StaticProvider.d.ts +12 -2
  68. package/dist/storage/StaticProvider.d.ts.map +1 -1
  69. package/dist/storage/StaticProvider.js +12 -2
  70. package/dist/storage/StaticProvider.js.map +1 -1
  71. package/events.win32-x64-msvc.node +0 -0
  72. package/index.win32-x64-msvc.node +0 -0
  73. package/package.json +14 -2
  74. package/scheduler.win32-x64-msvc.node +0 -0
  75. package/src/Application.ts +89 -8
  76. package/src/HttpKernel.ts +87 -5
  77. package/src/Ignitor.ts +82 -19
  78. package/src/commands/ScheduleList.ts +30 -0
  79. package/src/container/Container.ts +178 -48
  80. package/src/container/types.ts +11 -0
  81. package/src/dev/hmr.ts +83 -0
  82. package/src/graphql/GraphQLProvider.ts +14 -3
  83. package/src/hot.ts +165 -0
  84. package/src/http/Exception.ts +4 -4
  85. package/src/http/Request.ts +54 -0
  86. package/src/http/RequestValidator.ts +143 -0
  87. package/src/index.ts +8 -1
  88. package/src/middleware/Pipeline.ts +4 -4
  89. package/src/migrations/MigrationRegistry.ts +23 -0
  90. package/src/openapi/OpenApiGenerator.ts +84 -4
  91. package/src/openapi/OpenApiProvider.ts +21 -6
  92. package/src/rpc/RpcProvider.ts +13 -2
  93. package/src/storage/StaticProvider.ts +12 -2
@@ -1,11 +1,12 @@
1
1
  /**
2
2
  * `OpenApiProvider` — serves an auto-generated OpenAPI 3.1 spec + Swagger UI.
3
3
  *
4
- * `boot()` mounts a global middleware that, on the first GET to `/api-docs`
4
+ * `start()` mounts a global middleware that, on the first GET to `/api-docs`
5
5
  * (JSON) or `/docs` (Swagger UI), lazily generates the spec from the router's
6
- * registered routes — so every route registered during boot/start is included
7
- * (the spec must NOT be generated eagerly at boot, before other providers have
8
- * registered their routes). Opt-out via `config.openapi.enabled = false`.
6
+ * registered routes — so every route registered while the application starts
7
+ * up is included (the spec must NOT be generated eagerly, before the other
8
+ * providers and the preloads have registered their routes). Opt-out via
9
+ * `config.openapi.enabled = false`.
9
10
  *
10
11
  * @implements Story 24.4
11
12
  */
@@ -43,7 +44,17 @@ export class OpenApiProvider extends Provider {
43
44
  this.#override = options.generator
44
45
  }
45
46
 
46
- override async boot(): Promise<void> {
47
+ /**
48
+ * Routes and server middleware go in `start`, not `boot`.
49
+ *
50
+ * Upstream documents that phase for exactly this, and the order is what makes
51
+ * it matter: providers boot, then providers START, then the preloads run —
52
+ * and the preloads are where an application writes its own routes and kernel.
53
+ * Mounted in `boot`, a framework route landed ahead of every application
54
+ * route, so an overlapping path was answered by the framework rather than by
55
+ * the app that meant to override it.
56
+ */
57
+ override async start(): Promise<void> {
47
58
  const config = this.app.config.get<OpenApiDocsConfig>('openapi') ?? {}
48
59
  if (config.enabled === false) return
49
60
 
@@ -59,10 +70,14 @@ export class OpenApiProvider extends Provider {
59
70
 
60
71
  async #buildGenerator(config: OpenApiDocsConfig): Promise<OpenApiGenerator> {
61
72
  const router = await this.app.container.make<Router>('router')
62
- return new OpenApiGenerator(router, {
73
+ const generator = new OpenApiGenerator(router, {
63
74
  title: config.title ?? 'API',
64
75
  version: config.version ?? '1.0.0',
65
76
  })
77
+ // The routes already name their validators; ask each one to describe
78
+ // itself instead of making the app repeat the shape by hand.
79
+ await generator.hydrateSchemas((token) => this.app.container.make<unknown>(token))
80
+ return generator
66
81
  }
67
82
  }
68
83
 
@@ -9,8 +9,9 @@
9
9
  * rpc.method('task.validate', handler).guard('jwt')
10
10
  * rpc.namespace('user', UserController)
11
11
  *
12
- * - `boot()` — mount `POST <config.rpc.path ?? '/rpc'>` on the core router,
12
+ * - `start()` — mount `POST <config.rpc.path ?? '/rpc'>` on the core router,
13
13
  * dispatching every request body (single or batch) to `RpcRouter.handle()`.
14
+ * In `start`, which is the phase upstream documents for routes.
14
15
  *
15
16
  * @implements Story 24.1, 24.2
16
17
  */
@@ -68,7 +69,17 @@ export class RpcProvider extends Provider {
68
69
  this.#registered = true
69
70
  }
70
71
 
71
- override async boot(): Promise<void> {
72
+ /**
73
+ * Routes and server middleware go in `start`, not `boot`.
74
+ *
75
+ * Upstream documents that phase for exactly this, and the order is what makes
76
+ * it matter: providers boot, then providers START, then the preloads run —
77
+ * and the preloads are where an application writes its own routes and kernel.
78
+ * Mounted in `boot`, a framework route landed ahead of every application
79
+ * route, so an overlapping path was answered by the framework rather than by
80
+ * the app that meant to override it.
81
+ */
82
+ override async start(): Promise<void> {
72
83
  const config = this.app.config.get<RpcConfig>('rpc')
73
84
  const path = config?.path ?? '/rpc'
74
85
  const router = await this.app.container.make<Router>('router')
@@ -2,7 +2,7 @@
2
2
  * `StaticProvider` — serves static files from a directory.
3
3
  *
4
4
  * Opt-in: does nothing unless `config.static.root` is set (or a middleware is
5
- * injected for tests). When configured, `boot()` mounts a global
5
+ * injected for tests). When configured, `start()` mounts a global
6
6
  * `StaticMiddleware` (path-traversal + symlink-escape guarded) that serves
7
7
  * matching requests and falls through (`next()`) otherwise.
8
8
  *
@@ -30,7 +30,17 @@ export class StaticProvider extends Provider {
30
30
  this.#override = options.middleware
31
31
  }
32
32
 
33
- override async boot(): Promise<void> {
33
+ /**
34
+ * Routes and server middleware go in `start`, not `boot`.
35
+ *
36
+ * Upstream documents that phase for exactly this, and the order is what makes
37
+ * it matter: providers boot, then providers START, then the preloads run —
38
+ * and the preloads are where an application writes its own routes and kernel.
39
+ * Mounted in `boot`, a framework route landed ahead of every application
40
+ * route, so an overlapping path was answered by the framework rather than by
41
+ * the app that meant to override it.
42
+ */
43
+ override async start(): Promise<void> {
34
44
  const config = this.app.config.get<StaticConfig>('static')
35
45
  const middleware = this.#override ?? (config?.root ? new StaticMiddleware(config) : undefined)
36
46
  if (!middleware) return // not configured — opt-out