@c9up/ream 0.1.3
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/LICENSE +21 -0
- package/README.md +70 -0
- package/dist/Application.d.ts +71 -0
- package/dist/Application.d.ts.map +1 -0
- package/dist/Application.js +151 -0
- package/dist/Application.js.map +1 -0
- package/dist/Codemods.d.ts +16 -0
- package/dist/Codemods.d.ts.map +1 -0
- package/dist/Codemods.js +277 -0
- package/dist/Codemods.js.map +1 -0
- package/dist/ConfigLoader.d.ts +29 -0
- package/dist/ConfigLoader.d.ts.map +1 -0
- package/dist/ConfigLoader.js +43 -0
- package/dist/ConfigLoader.js.map +1 -0
- package/dist/ErrorBoundary.d.ts +51 -0
- package/dist/ErrorBoundary.d.ts.map +1 -0
- package/dist/ErrorBoundary.js +122 -0
- package/dist/ErrorBoundary.js.map +1 -0
- package/dist/GracefulShutdown.d.ts +28 -0
- package/dist/GracefulShutdown.d.ts.map +1 -0
- package/dist/GracefulShutdown.js +55 -0
- package/dist/GracefulShutdown.js.map +1 -0
- package/dist/HealthCheck.d.ts +42 -0
- package/dist/HealthCheck.d.ts.map +1 -0
- package/dist/HealthCheck.js +65 -0
- package/dist/HealthCheck.js.map +1 -0
- package/dist/HotReload.d.ts +28 -0
- package/dist/HotReload.d.ts.map +1 -0
- package/dist/HotReload.js +60 -0
- package/dist/HotReload.js.map +1 -0
- package/dist/HttpKernel.d.ts +62 -0
- package/dist/HttpKernel.d.ts.map +1 -0
- package/dist/HttpKernel.js +210 -0
- package/dist/HttpKernel.js.map +1 -0
- package/dist/Ignitor.d.ts +195 -0
- package/dist/Ignitor.d.ts.map +1 -0
- package/dist/Ignitor.js +505 -0
- package/dist/Ignitor.js.map +1 -0
- package/dist/Provider.d.ts +54 -0
- package/dist/Provider.d.ts.map +1 -0
- package/dist/Provider.js +37 -0
- package/dist/Provider.js.map +1 -0
- package/dist/bodyparser/BodyParserMiddleware.d.ts +38 -0
- package/dist/bodyparser/BodyParserMiddleware.d.ts.map +1 -0
- package/dist/bodyparser/BodyParserMiddleware.js +143 -0
- package/dist/bodyparser/BodyParserMiddleware.js.map +1 -0
- package/dist/bodyparser/MultipartFile.d.ts +77 -0
- package/dist/bodyparser/MultipartFile.d.ts.map +1 -0
- package/dist/bodyparser/MultipartFile.js +138 -0
- package/dist/bodyparser/MultipartFile.js.map +1 -0
- package/dist/bodyparser/parseSize.d.ts +6 -0
- package/dist/bodyparser/parseSize.d.ts.map +1 -0
- package/dist/bodyparser/parseSize.js +21 -0
- package/dist/bodyparser/parseSize.js.map +1 -0
- package/dist/bootstrap/hyper-server.d.ts +27 -0
- package/dist/bootstrap/hyper-server.d.ts.map +1 -0
- package/dist/bootstrap/hyper-server.js +63 -0
- package/dist/bootstrap/hyper-server.js.map +1 -0
- package/dist/console/CommandRunner.d.ts +18 -0
- package/dist/console/CommandRunner.d.ts.map +1 -0
- package/dist/console/CommandRunner.js +65 -0
- package/dist/console/CommandRunner.js.map +1 -0
- package/dist/container/Container.d.ts +60 -0
- package/dist/container/Container.d.ts.map +1 -0
- package/dist/container/Container.js +329 -0
- package/dist/container/Container.js.map +1 -0
- package/dist/container/types.d.ts +25 -0
- package/dist/container/types.d.ts.map +1 -0
- package/dist/container/types.js +6 -0
- package/dist/container/types.js.map +1 -0
- package/dist/decorators/Lazy.d.ts +19 -0
- package/dist/decorators/Lazy.d.ts.map +1 -0
- package/dist/decorators/Lazy.js +53 -0
- package/dist/decorators/Lazy.js.map +1 -0
- package/dist/decorators/Service.d.ts +48 -0
- package/dist/decorators/Service.d.ts.map +1 -0
- package/dist/decorators/Service.js +70 -0
- package/dist/decorators/Service.js.map +1 -0
- package/dist/errors/FuzzyMatcher.d.ts +41 -0
- package/dist/errors/FuzzyMatcher.d.ts.map +1 -0
- package/dist/errors/FuzzyMatcher.js +81 -0
- package/dist/errors/FuzzyMatcher.js.map +1 -0
- package/dist/errors/ModuleErrors.d.ts +41 -0
- package/dist/errors/ModuleErrors.d.ts.map +1 -0
- package/dist/errors/ModuleErrors.js +65 -0
- package/dist/errors/ModuleErrors.js.map +1 -0
- package/dist/errors/PipelineStageError.d.ts +31 -0
- package/dist/errors/PipelineStageError.d.ts.map +1 -0
- package/dist/errors/PipelineStageError.js +77 -0
- package/dist/errors/PipelineStageError.js.map +1 -0
- package/dist/errors/ReamError.d.ts +50 -0
- package/dist/errors/ReamError.d.ts.map +1 -0
- package/dist/errors/ReamError.js +108 -0
- package/dist/errors/ReamError.js.map +1 -0
- package/dist/events/Emitter.d.ts +124 -0
- package/dist/events/Emitter.d.ts.map +1 -0
- package/dist/events/Emitter.js +271 -0
- package/dist/events/Emitter.js.map +1 -0
- package/dist/events/EventsProvider.d.ts +28 -0
- package/dist/events/EventsProvider.d.ts.map +1 -0
- package/dist/events/EventsProvider.js +36 -0
- package/dist/events/EventsProvider.js.map +1 -0
- package/dist/events/config.d.ts +8 -0
- package/dist/events/config.d.ts.map +1 -0
- package/dist/events/config.js +4 -0
- package/dist/events/config.js.map +1 -0
- package/dist/events/configure.d.ts +10 -0
- package/dist/events/configure.d.ts.map +1 -0
- package/dist/events/configure.js +11 -0
- package/dist/events/configure.js.map +1 -0
- package/dist/events/helix/helpers.d.ts +62 -0
- package/dist/events/helix/helpers.d.ts.map +1 -0
- package/dist/events/helix/helpers.js +187 -0
- package/dist/events/helix/helpers.js.map +1 -0
- package/dist/events/index.d.ts +17 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +15 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/native.d.ts +21 -0
- package/dist/events/native.d.ts.map +1 -0
- package/dist/events/native.js +17 -0
- package/dist/events/native.js.map +1 -0
- package/dist/events/services/main.d.ts +18 -0
- package/dist/events/services/main.d.ts.map +1 -0
- package/dist/events/services/main.js +31 -0
- package/dist/events/services/main.js.map +1 -0
- package/dist/events/testing/FakeBus.d.ts +66 -0
- package/dist/events/testing/FakeBus.d.ts.map +1 -0
- package/dist/events/testing/FakeBus.js +356 -0
- package/dist/events/testing/FakeBus.js.map +1 -0
- package/dist/graphql/GraphQLEngine.d.ts +69 -0
- package/dist/graphql/GraphQLEngine.d.ts.map +1 -0
- package/dist/graphql/GraphQLEngine.js +309 -0
- package/dist/graphql/GraphQLEngine.js.map +1 -0
- package/dist/graphql/GraphQLProvider.d.ts +32 -0
- package/dist/graphql/GraphQLProvider.d.ts.map +1 -0
- package/dist/graphql/GraphQLProvider.js +49 -0
- package/dist/graphql/GraphQLProvider.js.map +1 -0
- package/dist/helpers/base64.d.ts +40 -0
- package/dist/helpers/base64.d.ts.map +1 -0
- package/dist/helpers/base64.js +70 -0
- package/dist/helpers/base64.js.map +1 -0
- package/dist/helpers/index.d.ts +7 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/index.js +5 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/helpers/is.d.ts +101 -0
- package/dist/helpers/is.d.ts.map +1 -0
- package/dist/helpers/is.js +151 -0
- package/dist/helpers/is.js.map +1 -0
- package/dist/helpers/napi-loader.d.ts +46 -0
- package/dist/helpers/napi-loader.d.ts.map +1 -0
- package/dist/helpers/napi-loader.js +69 -0
- package/dist/helpers/napi-loader.js.map +1 -0
- package/dist/helpers/safeEqual.d.ts +9 -0
- package/dist/helpers/safeEqual.d.ts.map +1 -0
- package/dist/helpers/safeEqual.js +16 -0
- package/dist/helpers/safeEqual.js.map +1 -0
- package/dist/helpers/string.d.ts +161 -0
- package/dist/helpers/string.d.ts.map +1 -0
- package/dist/helpers/string.js +429 -0
- package/dist/helpers/string.js.map +1 -0
- package/dist/helpers/types.d.ts +83 -0
- package/dist/helpers/types.d.ts.map +1 -0
- package/dist/helpers/types.js +6 -0
- package/dist/helpers/types.js.map +1 -0
- package/dist/http/Exception.d.ts +103 -0
- package/dist/http/Exception.d.ts.map +1 -0
- package/dist/http/Exception.js +228 -0
- package/dist/http/Exception.js.map +1 -0
- package/dist/http/HttpContext.d.ts +69 -0
- package/dist/http/HttpContext.d.ts.map +1 -0
- package/dist/http/HttpContext.js +55 -0
- package/dist/http/HttpContext.js.map +1 -0
- package/dist/http/RedirectBuilder.d.ts +31 -0
- package/dist/http/RedirectBuilder.d.ts.map +1 -0
- package/dist/http/RedirectBuilder.js +75 -0
- package/dist/http/RedirectBuilder.js.map +1 -0
- package/dist/http/Request.d.ts +160 -0
- package/dist/http/Request.d.ts.map +1 -0
- package/dist/http/Request.js +484 -0
- package/dist/http/Request.js.map +1 -0
- package/dist/http/Response.d.ts +114 -0
- package/dist/http/Response.d.ts.map +1 -0
- package/dist/http/Response.js +303 -0
- package/dist/http/Response.js.map +1 -0
- package/dist/http/SseStream.d.ts +89 -0
- package/dist/http/SseStream.d.ts.map +1 -0
- package/dist/http/SseStream.js +228 -0
- package/dist/http/SseStream.js.map +1 -0
- package/dist/http/urlDecode.d.ts +8 -0
- package/dist/http/urlDecode.d.ts.map +1 -0
- package/dist/http/urlDecode.js +18 -0
- package/dist/http/urlDecode.js.map +1 -0
- package/dist/index.d.ts +92 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/Pipeline.d.ts +36 -0
- package/dist/middleware/Pipeline.d.ts.map +1 -0
- package/dist/middleware/Pipeline.js +104 -0
- package/dist/middleware/Pipeline.js.map +1 -0
- package/dist/openapi/OpenApiGenerator.d.ts +58 -0
- package/dist/openapi/OpenApiGenerator.d.ts.map +1 -0
- package/dist/openapi/OpenApiGenerator.js +192 -0
- package/dist/openapi/OpenApiGenerator.js.map +1 -0
- package/dist/openapi/OpenApiMiddleware.d.ts +24 -0
- package/dist/openapi/OpenApiMiddleware.d.ts.map +1 -0
- package/dist/openapi/OpenApiMiddleware.js +78 -0
- package/dist/openapi/OpenApiMiddleware.js.map +1 -0
- package/dist/openapi/OpenApiProvider.d.ts +36 -0
- package/dist/openapi/OpenApiProvider.d.ts.map +1 -0
- package/dist/openapi/OpenApiProvider.js +42 -0
- package/dist/openapi/OpenApiProvider.js.map +1 -0
- package/dist/resources/ApiResource.d.ts +45 -0
- package/dist/resources/ApiResource.d.ts.map +1 -0
- package/dist/resources/ApiResource.js +58 -0
- package/dist/resources/ApiResource.js.map +1 -0
- package/dist/router/Router.d.ts +205 -0
- package/dist/router/Router.d.ts.map +1 -0
- package/dist/router/Router.js +552 -0
- package/dist/router/Router.js.map +1 -0
- package/dist/rpc/RpcProvider.d.ts +34 -0
- package/dist/rpc/RpcProvider.d.ts.map +1 -0
- package/dist/rpc/RpcProvider.js +37 -0
- package/dist/rpc/RpcProvider.js.map +1 -0
- package/dist/rpc/RpcRouter.d.ts +61 -0
- package/dist/rpc/RpcRouter.d.ts.map +1 -0
- package/dist/rpc/RpcRouter.js +187 -0
- package/dist/rpc/RpcRouter.js.map +1 -0
- package/dist/scheduler/Schedule.d.ts +53 -0
- package/dist/scheduler/Schedule.d.ts.map +1 -0
- package/dist/scheduler/Schedule.js +76 -0
- package/dist/scheduler/Schedule.js.map +1 -0
- package/dist/scheduler/ScheduleProvider.d.ts +56 -0
- package/dist/scheduler/ScheduleProvider.d.ts.map +1 -0
- package/dist/scheduler/ScheduleProvider.js +145 -0
- package/dist/scheduler/ScheduleProvider.js.map +1 -0
- package/dist/scheduler/Scheduler.d.ts +209 -0
- package/dist/scheduler/Scheduler.d.ts.map +1 -0
- package/dist/scheduler/Scheduler.js +432 -0
- package/dist/scheduler/Scheduler.js.map +1 -0
- package/dist/scheduler/index.d.ts +14 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +6 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/locks/LockBackend.d.ts +37 -0
- package/dist/scheduler/locks/LockBackend.d.ts.map +1 -0
- package/dist/scheduler/locks/LockBackend.js +13 -0
- package/dist/scheduler/locks/LockBackend.js.map +1 -0
- package/dist/scheduler/locks/MemoryLockBackend.d.ts +39 -0
- package/dist/scheduler/locks/MemoryLockBackend.d.ts.map +1 -0
- package/dist/scheduler/locks/MemoryLockBackend.js +71 -0
- package/dist/scheduler/locks/MemoryLockBackend.js.map +1 -0
- package/dist/scheduler/observability/ErrorReporter.d.ts +15 -0
- package/dist/scheduler/observability/ErrorReporter.d.ts.map +1 -0
- package/dist/scheduler/observability/ErrorReporter.js +13 -0
- package/dist/scheduler/observability/ErrorReporter.js.map +1 -0
- package/dist/scheduler/observability/ScheduleEvent.d.ts +57 -0
- package/dist/scheduler/observability/ScheduleEvent.d.ts.map +1 -0
- package/dist/scheduler/observability/ScheduleEvent.js +12 -0
- package/dist/scheduler/observability/ScheduleEvent.js.map +1 -0
- package/dist/scheduler/observability/ScheduleEventSink.d.ts +20 -0
- package/dist/scheduler/observability/ScheduleEventSink.d.ts.map +1 -0
- package/dist/scheduler/observability/ScheduleEventSink.js +17 -0
- package/dist/scheduler/observability/ScheduleEventSink.js.map +1 -0
- package/dist/scheduler/observability/StatsTracker.d.ts +50 -0
- package/dist/scheduler/observability/StatsTracker.d.ts.map +1 -0
- package/dist/scheduler/observability/StatsTracker.js +96 -0
- package/dist/scheduler/observability/StatsTracker.js.map +1 -0
- package/dist/security/CookieSigner.d.ts +13 -0
- package/dist/security/CookieSigner.d.ts.map +1 -0
- package/dist/security/CookieSigner.js +51 -0
- package/dist/security/CookieSigner.js.map +1 -0
- package/dist/security/SignedUrl.d.ts +17 -0
- package/dist/security/SignedUrl.d.ts.map +1 -0
- package/dist/security/SignedUrl.js +63 -0
- package/dist/security/SignedUrl.js.map +1 -0
- package/dist/security/crypto.d.ts +25 -0
- package/dist/security/crypto.d.ts.map +1 -0
- package/dist/security/crypto.js +82 -0
- package/dist/security/crypto.js.map +1 -0
- package/dist/server/HyperServer.d.ts +64 -0
- package/dist/server/HyperServer.d.ts.map +1 -0
- package/dist/server/HyperServer.js +54 -0
- package/dist/server/HyperServer.js.map +1 -0
- package/dist/server/Server.d.ts +68 -0
- package/dist/server/Server.d.ts.map +1 -0
- package/dist/server/Server.js +113 -0
- package/dist/server/Server.js.map +1 -0
- package/dist/services/app.d.ts +14 -0
- package/dist/services/app.d.ts.map +1 -0
- package/dist/services/app.js +27 -0
- package/dist/services/app.js.map +1 -0
- package/dist/services/router.d.ts +21 -0
- package/dist/services/router.d.ts.map +1 -0
- package/dist/services/router.js +36 -0
- package/dist/services/router.js.map +1 -0
- package/dist/services/server.d.ts +16 -0
- package/dist/services/server.d.ts.map +1 -0
- package/dist/services/server.js +32 -0
- package/dist/services/server.js.map +1 -0
- package/dist/session/Session.d.ts +88 -0
- package/dist/session/Session.d.ts.map +1 -0
- package/dist/session/Session.js +186 -0
- package/dist/session/Session.js.map +1 -0
- package/dist/session/SessionMiddleware.d.ts +16 -0
- package/dist/session/SessionMiddleware.d.ts.map +1 -0
- package/dist/session/SessionMiddleware.js +132 -0
- package/dist/session/SessionMiddleware.js.map +1 -0
- package/dist/session/drivers/CookieDriver.d.ts +17 -0
- package/dist/session/drivers/CookieDriver.d.ts.map +1 -0
- package/dist/session/drivers/CookieDriver.js +42 -0
- package/dist/session/drivers/CookieDriver.js.map +1 -0
- package/dist/session/drivers/MemoryDriver.d.ts +9 -0
- package/dist/session/drivers/MemoryDriver.d.ts.map +1 -0
- package/dist/session/drivers/MemoryDriver.js +24 -0
- package/dist/session/drivers/MemoryDriver.js.map +1 -0
- package/dist/storage/S3Driver.d.ts +27 -0
- package/dist/storage/S3Driver.d.ts.map +1 -0
- package/dist/storage/S3Driver.js +135 -0
- package/dist/storage/S3Driver.js.map +1 -0
- package/dist/storage/StaticMiddleware.d.ts +27 -0
- package/dist/storage/StaticMiddleware.d.ts.map +1 -0
- package/dist/storage/StaticMiddleware.js +153 -0
- package/dist/storage/StaticMiddleware.js.map +1 -0
- package/dist/storage/StaticProvider.d.ts +26 -0
- package/dist/storage/StaticProvider.d.ts.map +1 -0
- package/dist/storage/StaticProvider.js +31 -0
- package/dist/storage/StaticProvider.js.map +1 -0
- package/dist/storage/StorageManager.d.ts +31 -0
- package/dist/storage/StorageManager.d.ts.map +1 -0
- package/dist/storage/StorageManager.js +120 -0
- package/dist/storage/StorageManager.js.map +1 -0
- package/dist/testing/RequestBuilder.d.ts +67 -0
- package/dist/testing/RequestBuilder.d.ts.map +1 -0
- package/dist/testing/RequestBuilder.js +202 -0
- package/dist/testing/RequestBuilder.js.map +1 -0
- package/dist/testing/TestClient.d.ts +96 -0
- package/dist/testing/TestClient.d.ts.map +1 -0
- package/dist/testing/TestClient.js +263 -0
- package/dist/testing/TestClient.js.map +1 -0
- package/dist/types/helpers.d.ts +47 -0
- package/dist/types/helpers.d.ts.map +1 -0
- package/dist/types/helpers.js +5 -0
- package/dist/types/helpers.js.map +1 -0
- package/events.darwin-arm64.node +0 -0
- package/events.darwin-x64.node +0 -0
- package/events.linux-arm64-gnu.node +0 -0
- package/events.linux-x64-gnu.node +0 -0
- package/events.win32-x64-msvc.node +0 -0
- package/index.darwin-arm64.node +0 -0
- package/index.darwin-x64.node +0 -0
- package/index.linux-arm64-gnu.node +0 -0
- package/index.linux-x64-gnu.node +0 -0
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +106 -0
- package/scheduler.darwin-arm64.node +0 -0
- package/scheduler.darwin-x64.node +0 -0
- package/scheduler.linux-arm64-gnu.node +0 -0
- package/scheduler.linux-x64-gnu.node +0 -0
- package/scheduler.win32-x64-msvc.node +0 -0
- package/scripts/copy-napi.mjs +113 -0
- package/src/Application.ts +177 -0
- package/src/Codemods.ts +343 -0
- package/src/ConfigLoader.ts +49 -0
- package/src/ErrorBoundary.ts +157 -0
- package/src/GracefulShutdown.ts +80 -0
- package/src/HealthCheck.ts +96 -0
- package/src/HotReload.ts +78 -0
- package/src/HttpKernel.ts +305 -0
- package/src/Ignitor.ts +656 -0
- package/src/Provider.ts +74 -0
- package/src/bodyparser/BodyParserMiddleware.ts +183 -0
- package/src/bodyparser/MultipartFile.ts +181 -0
- package/src/bodyparser/parseSize.ts +19 -0
- package/src/bootstrap/hyper-server.ts +78 -0
- package/src/console/CommandRunner.ts +82 -0
- package/src/container/Container.ts +383 -0
- package/src/container/types.ts +30 -0
- package/src/decorators/Lazy.ts +57 -0
- package/src/decorators/Service.ts +85 -0
- package/src/errors/FuzzyMatcher.ts +93 -0
- package/src/errors/ModuleErrors.ts +73 -0
- package/src/errors/PipelineStageError.ts +97 -0
- package/src/errors/ReamError.ts +138 -0
- package/src/events/Emitter.ts +333 -0
- package/src/events/EventsProvider.ts +58 -0
- package/src/events/config.ts +10 -0
- package/src/events/configure.ts +19 -0
- package/src/events/helix/helpers.ts +260 -0
- package/src/events/index.ts +22 -0
- package/src/events/native.ts +37 -0
- package/src/events/services/main.ts +39 -0
- package/src/events/testing/FakeBus.ts +420 -0
- package/src/graphql/GraphQLEngine.ts +421 -0
- package/src/graphql/GraphQLProvider.ts +59 -0
- package/src/helpers/base64.ts +72 -0
- package/src/helpers/index.ts +6 -0
- package/src/helpers/is.ts +162 -0
- package/src/helpers/napi-loader.ts +106 -0
- package/src/helpers/safeEqual.ts +15 -0
- package/src/helpers/string.ts +469 -0
- package/src/helpers/types.ts +100 -0
- package/src/http/Exception.ts +272 -0
- package/src/http/HttpContext.ts +108 -0
- package/src/http/RedirectBuilder.ts +89 -0
- package/src/http/Request.ts +540 -0
- package/src/http/Response.ts +351 -0
- package/src/http/SseStream.ts +250 -0
- package/src/http/urlDecode.ts +18 -0
- package/src/index.ts +263 -0
- package/src/middleware/Pipeline.ts +136 -0
- package/src/openapi/OpenApiGenerator.ts +254 -0
- package/src/openapi/OpenApiMiddleware.ts +101 -0
- package/src/openapi/OpenApiProvider.ts +67 -0
- package/src/resources/ApiResource.ts +79 -0
- package/src/router/Router.ts +733 -0
- package/src/rpc/RpcProvider.ts +54 -0
- package/src/rpc/RpcRouter.ts +243 -0
- package/src/scheduler/Schedule.ts +96 -0
- package/src/scheduler/ScheduleProvider.ts +177 -0
- package/src/scheduler/Scheduler.ts +601 -0
- package/src/scheduler/index.ts +24 -0
- package/src/scheduler/locks/LockBackend.ts +38 -0
- package/src/scheduler/locks/MemoryLockBackend.ts +85 -0
- package/src/scheduler/observability/ErrorReporter.ts +13 -0
- package/src/scheduler/observability/ScheduleEvent.ts +61 -0
- package/src/scheduler/observability/ScheduleEventSink.ts +21 -0
- package/src/scheduler/observability/StatsTracker.ts +134 -0
- package/src/security/CookieSigner.ts +54 -0
- package/src/security/SignedUrl.ts +71 -0
- package/src/security/crypto.ts +98 -0
- package/src/server/HyperServer.ts +121 -0
- package/src/server/Server.ts +147 -0
- package/src/services/app.ts +34 -0
- package/src/services/router.ts +44 -0
- package/src/services/server.ts +40 -0
- package/src/session/Session.ts +231 -0
- package/src/session/SessionMiddleware.ts +153 -0
- package/src/session/drivers/CookieDriver.ts +48 -0
- package/src/session/drivers/MemoryDriver.ts +29 -0
- package/src/storage/S3Driver.ts +171 -0
- package/src/storage/StaticMiddleware.ts +182 -0
- package/src/storage/StaticProvider.ts +40 -0
- package/src/storage/StorageManager.ts +142 -0
- package/src/testing/RequestBuilder.ts +275 -0
- package/src/testing/TestClient.ts +344 -0
- package/src/types/helpers.ts +52 -0
- package/swcrc.app.json +17 -0
- package/tsconfig.app.json +21 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@c9up/ream",
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"description": "Ream — Rust-powered Node.js application framework",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./services/app": {
|
|
15
|
+
"types": "./dist/services/app.d.ts",
|
|
16
|
+
"import": "./dist/services/app.js"
|
|
17
|
+
},
|
|
18
|
+
"./services/router": {
|
|
19
|
+
"types": "./dist/services/router.d.ts",
|
|
20
|
+
"import": "./dist/services/router.js"
|
|
21
|
+
},
|
|
22
|
+
"./services/server": {
|
|
23
|
+
"types": "./dist/services/server.d.ts",
|
|
24
|
+
"import": "./dist/services/server.js"
|
|
25
|
+
},
|
|
26
|
+
"./bodyparser": {
|
|
27
|
+
"types": "./dist/bodyparser/BodyParserMiddleware.d.ts",
|
|
28
|
+
"import": "./dist/bodyparser/BodyParserMiddleware.js"
|
|
29
|
+
},
|
|
30
|
+
"./session": {
|
|
31
|
+
"types": "./dist/session/SessionMiddleware.d.ts",
|
|
32
|
+
"import": "./dist/session/SessionMiddleware.js"
|
|
33
|
+
},
|
|
34
|
+
"./helpers": {
|
|
35
|
+
"types": "./dist/helpers/index.d.ts",
|
|
36
|
+
"import": "./dist/helpers/index.js"
|
|
37
|
+
},
|
|
38
|
+
"./helpers/string": {
|
|
39
|
+
"types": "./dist/helpers/string.d.ts",
|
|
40
|
+
"import": "./dist/helpers/string.js"
|
|
41
|
+
},
|
|
42
|
+
"./helpers/is": {
|
|
43
|
+
"types": "./dist/helpers/is.d.ts",
|
|
44
|
+
"import": "./dist/helpers/is.js"
|
|
45
|
+
},
|
|
46
|
+
"./helpers/base64": {
|
|
47
|
+
"types": "./dist/helpers/base64.d.ts",
|
|
48
|
+
"import": "./dist/helpers/base64.js"
|
|
49
|
+
},
|
|
50
|
+
"./helpers/types": {
|
|
51
|
+
"types": "./dist/helpers/types.d.ts",
|
|
52
|
+
"import": "./dist/helpers/types.js"
|
|
53
|
+
},
|
|
54
|
+
"./testing": {
|
|
55
|
+
"types": "./dist/testing/TestClient.d.ts",
|
|
56
|
+
"import": "./dist/testing/TestClient.js"
|
|
57
|
+
},
|
|
58
|
+
"./bootstrap": {
|
|
59
|
+
"types": "./dist/bootstrap/hyper-server.d.ts",
|
|
60
|
+
"import": "./dist/bootstrap/hyper-server.js"
|
|
61
|
+
},
|
|
62
|
+
"./tsconfig.app.json": "./tsconfig.app.json",
|
|
63
|
+
"./swcrc.app.json": "./swcrc.app.json"
|
|
64
|
+
},
|
|
65
|
+
"files": [
|
|
66
|
+
"LICENSE",
|
|
67
|
+
"README.md",
|
|
68
|
+
"dist",
|
|
69
|
+
"index.*.node",
|
|
70
|
+
"scheduler.*.node",
|
|
71
|
+
"events.*.node",
|
|
72
|
+
"scripts",
|
|
73
|
+
"src",
|
|
74
|
+
"swcrc.app.json",
|
|
75
|
+
"tsconfig.app.json"
|
|
76
|
+
],
|
|
77
|
+
"dependencies": {
|
|
78
|
+
"reflect-metadata": "^0.2"
|
|
79
|
+
},
|
|
80
|
+
"devDependencies": {
|
|
81
|
+
"@biomejs/biome": "^2.4.10",
|
|
82
|
+
"@types/node": "^22.19.15",
|
|
83
|
+
"typescript": "^6.0.2",
|
|
84
|
+
"vitest": "^4.1.2"
|
|
85
|
+
},
|
|
86
|
+
"engines": {
|
|
87
|
+
"node": ">=22.0.0"
|
|
88
|
+
},
|
|
89
|
+
"publishConfig": {
|
|
90
|
+
"access": "public"
|
|
91
|
+
},
|
|
92
|
+
"repository": {
|
|
93
|
+
"type": "git",
|
|
94
|
+
"url": "git+https://github.com/C9up/ream.git"
|
|
95
|
+
},
|
|
96
|
+
"scripts": {
|
|
97
|
+
"build": "tsc -p tsconfig.build.json",
|
|
98
|
+
"build:rust": "cargo build --release -p ream-http-napi -p ream-scheduler-napi -p ream-events-napi",
|
|
99
|
+
"build:napi": "pnpm build:rust && node scripts/copy-napi.mjs",
|
|
100
|
+
"test": "vitest run",
|
|
101
|
+
"test:rust": "cargo test --all",
|
|
102
|
+
"lint": "biome check src/",
|
|
103
|
+
"test:coverage": "vitest run --coverage",
|
|
104
|
+
"typecheck": "tsc --noEmit"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
// Copy every freshly-built Ream NAPI cdylib out of cargo's target
|
|
2
|
+
// directory and into the package root with the platform-suffix naming
|
|
3
|
+
// convention used by `napi-loader.ts`:
|
|
4
|
+
//
|
|
5
|
+
// packages/ream/index.linux-x64-gnu.node (ream-http-napi)
|
|
6
|
+
// packages/ream/scheduler.linux-x64-gnu.node (ream-scheduler-napi)
|
|
7
|
+
// packages/ream/index.darwin-arm64.node
|
|
8
|
+
// ...
|
|
9
|
+
//
|
|
10
|
+
// The TS loader walks two upper directories from each `loadNapi` caller
|
|
11
|
+
// to find these files, so the binaries MUST live at the package root
|
|
12
|
+
// (not under target/) to be discovered at runtime.
|
|
13
|
+
//
|
|
14
|
+
// Usage:
|
|
15
|
+
//
|
|
16
|
+
// pnpm --filter @c9up/ream build:rust # cargo build --release
|
|
17
|
+
// pnpm --filter @c9up/ream build:napi # build:rust + this script
|
|
18
|
+
//
|
|
19
|
+
// The package.json script chains both steps. CI / npm publish runs
|
|
20
|
+
// `build:napi` once per platform during the matrix build — every
|
|
21
|
+
// crate listed in `NAPI_CRATES` ships in the tarball.
|
|
22
|
+
|
|
23
|
+
import { copyFileSync, existsSync } from 'node:fs'
|
|
24
|
+
import { dirname, join } from 'node:path'
|
|
25
|
+
import { arch, env, platform } from 'node:process'
|
|
26
|
+
import { fileURLToPath } from 'node:url'
|
|
27
|
+
|
|
28
|
+
const here = dirname(fileURLToPath(import.meta.url))
|
|
29
|
+
const root = join(here, '..')
|
|
30
|
+
|
|
31
|
+
// Rust target triple -> { suffix, os }. Set CARGO_BUILD_TARGET to cross-compile
|
|
32
|
+
// (e.g. build the x86_64-apple-darwin binary on an arm64 macOS runner so we
|
|
33
|
+
// don't depend on the scarce macos-13 Intel runners). When unset we fall back
|
|
34
|
+
// to the host platform/arch and the default target/release dir.
|
|
35
|
+
const TRIPLE_MAP = {
|
|
36
|
+
'x86_64-unknown-linux-gnu': { suffix: 'linux-x64-gnu', os: 'linux' },
|
|
37
|
+
'aarch64-unknown-linux-gnu': { suffix: 'linux-arm64-gnu', os: 'linux' },
|
|
38
|
+
'x86_64-apple-darwin': { suffix: 'darwin-x64', os: 'darwin' },
|
|
39
|
+
'aarch64-apple-darwin': { suffix: 'darwin-arm64', os: 'darwin' },
|
|
40
|
+
'x86_64-pc-windows-msvc': { suffix: 'win32-x64-msvc', os: 'win32' },
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const HOST_SUFFIX_MAP = {
|
|
44
|
+
'linux-x64': 'linux-x64-gnu',
|
|
45
|
+
'linux-arm64': 'linux-arm64-gnu',
|
|
46
|
+
'darwin-x64': 'darwin-x64',
|
|
47
|
+
'darwin-arm64': 'darwin-arm64',
|
|
48
|
+
'win32-x64': 'win32-x64-msvc',
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const triple = env.CARGO_BUILD_TARGET ?? ''
|
|
52
|
+
let suffix
|
|
53
|
+
let os
|
|
54
|
+
let releaseDir
|
|
55
|
+
if (triple) {
|
|
56
|
+
const entry = TRIPLE_MAP[triple]
|
|
57
|
+
if (!entry) {
|
|
58
|
+
throw new Error(`[ream:napi] unsupported CARGO_BUILD_TARGET: ${triple}`)
|
|
59
|
+
}
|
|
60
|
+
suffix = entry.suffix
|
|
61
|
+
os = entry.os
|
|
62
|
+
releaseDir = join(root, 'target', triple, 'release')
|
|
63
|
+
} else {
|
|
64
|
+
suffix = HOST_SUFFIX_MAP[`${platform}-${arch}`]
|
|
65
|
+
os = platform
|
|
66
|
+
releaseDir = join(root, 'target', 'release')
|
|
67
|
+
if (!suffix) {
|
|
68
|
+
throw new Error(`[ream:napi] unsupported platform/arch: ${platform}-${arch}`)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Every NAPI crate shipped from the @c9up/ream package. `crateLib` is the
|
|
73
|
+
// underscore-suffixed name cargo produces under `target/release/`;
|
|
74
|
+
// `targetName` is what `loadNapi({ binaryName })` expects at the package
|
|
75
|
+
// root (see `napi-loader.ts` — the binary lookup prefix matches the
|
|
76
|
+
// `binaryName` option passed by each TS consumer).
|
|
77
|
+
const NAPI_CRATES = [
|
|
78
|
+
{ crateLib: 'ream_http_napi', targetName: 'index' },
|
|
79
|
+
{ crateLib: 'ream_scheduler_napi', targetName: 'scheduler' },
|
|
80
|
+
{ crateLib: 'ream_events_napi', targetName: 'events' },
|
|
81
|
+
]
|
|
82
|
+
|
|
83
|
+
// `crate-type = ["cdylib"]` settles on the platform-conventional file
|
|
84
|
+
// name. Linux + macOS prepend `lib`; Windows drops the prefix and uses
|
|
85
|
+
// `.dll`. Check both Windows shapes so we degrade gracefully if upstream
|
|
86
|
+
// cargo ever switches naming.
|
|
87
|
+
function buildCandidates(crateLib) {
|
|
88
|
+
if (os === 'win32') {
|
|
89
|
+
return [
|
|
90
|
+
join(releaseDir, `${crateLib}.dll`),
|
|
91
|
+
join(releaseDir, `lib${crateLib}.dll`),
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
if (os === 'darwin') {
|
|
95
|
+
return [join(releaseDir, `lib${crateLib}.dylib`)]
|
|
96
|
+
}
|
|
97
|
+
return [join(releaseDir, `lib${crateLib}.so`)]
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
for (const { crateLib, targetName } of NAPI_CRATES) {
|
|
101
|
+
const candidates = buildCandidates(crateLib)
|
|
102
|
+
const source = candidates.find((candidate) => existsSync(candidate))
|
|
103
|
+
if (!source) {
|
|
104
|
+
throw new Error(
|
|
105
|
+
`[ream:napi] native library for '${crateLib}' not found. Looked for:\n${candidates
|
|
106
|
+
.map((p) => `- ${p}`)
|
|
107
|
+
.join('\n')}\nRun 'pnpm --filter @c9up/ream build:rust' first.`,
|
|
108
|
+
)
|
|
109
|
+
}
|
|
110
|
+
const target = join(root, `${targetName}.${suffix}.node`)
|
|
111
|
+
copyFileSync(source, target)
|
|
112
|
+
console.log(`[ream:napi] copied ${source} -> ${target}`)
|
|
113
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application — manages providers, config, lifecycle, and signal handling.
|
|
3
|
+
*
|
|
4
|
+
* Like AdonisJS Application:
|
|
5
|
+
* - app.booting(callback) — register hooks that run during boot
|
|
6
|
+
* - app.booted(callback) — register hooks that run after boot completes
|
|
7
|
+
* - app.listen(signal, callback) — listen for process signals
|
|
8
|
+
* - app.listenIf(condition, signal, callback) — conditional signal listener
|
|
9
|
+
* - app.terminate() — graceful shutdown
|
|
10
|
+
* - app.managedByPm2 — PM2 detection
|
|
11
|
+
* - app.inProduction / app.inDev / app.inTest
|
|
12
|
+
*
|
|
13
|
+
* @implements FR17, FR20
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { ConfigStore } from './ConfigLoader.js'
|
|
17
|
+
import { Container } from './container/Container.js'
|
|
18
|
+
import type { AppContext, ProviderContract } from './Provider.js'
|
|
19
|
+
import { callProviderPhase } from './Provider.js'
|
|
20
|
+
|
|
21
|
+
export class Application implements AppContext {
|
|
22
|
+
readonly container: Container
|
|
23
|
+
readonly config: ConfigStore
|
|
24
|
+
private providers: ProviderContract[] = []
|
|
25
|
+
private _booted = false
|
|
26
|
+
private _bootingHooks: Array<() => Promise<void> | void> = []
|
|
27
|
+
private _bootedHooks: Array<() => Promise<void> | void> = []
|
|
28
|
+
private _shutdownHooks: Array<() => Promise<void> | void> = []
|
|
29
|
+
|
|
30
|
+
constructor() {
|
|
31
|
+
this.container = new Container()
|
|
32
|
+
this.config = new ConfigStore()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// ─── Environment ──────────────────────────────────────────
|
|
36
|
+
|
|
37
|
+
/** Check if running in production. */
|
|
38
|
+
get inProduction(): boolean {
|
|
39
|
+
return process.env.NODE_ENV === 'production'
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Check if running in development. */
|
|
43
|
+
get inDev(): boolean {
|
|
44
|
+
const env = process.env.NODE_ENV
|
|
45
|
+
return env !== 'production' && env !== 'test'
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Check if running in test mode. */
|
|
49
|
+
get inTest(): boolean {
|
|
50
|
+
return process.env.NODE_ENV === 'test'
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Check if managed by PM2. */
|
|
54
|
+
get managedByPm2(): boolean {
|
|
55
|
+
return 'PM2_HOME' in process.env || 'pm_id' in process.env
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// ─── Lifecycle hooks ──────────────────────────────────────
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Register a callback that runs during the boot phase (before providers boot).
|
|
62
|
+
* Like AdonisJS app.booting().
|
|
63
|
+
*/
|
|
64
|
+
booting(callback: () => Promise<void> | void): void {
|
|
65
|
+
this._bootingHooks.push(callback)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Register a callback that runs after boot completes.
|
|
70
|
+
* Like AdonisJS app.booted().
|
|
71
|
+
*/
|
|
72
|
+
booted(callback: () => Promise<void> | void): void {
|
|
73
|
+
if (this._booted) {
|
|
74
|
+
// Already booted — run immediately. Invoke callback() INSIDE the
|
|
75
|
+
// promise chain (not as `Promise.resolve(callback())`, which
|
|
76
|
+
// evaluates callback() eagerly and lets a synchronous throw
|
|
77
|
+
// escape to the caller) so both sync throws and async rejections
|
|
78
|
+
// are funnelled to the logger.
|
|
79
|
+
Promise.resolve()
|
|
80
|
+
.then(() => callback())
|
|
81
|
+
.catch((err) => {
|
|
82
|
+
process.stderr.write(`[Ream] booted() callback error: ${err}\n`)
|
|
83
|
+
})
|
|
84
|
+
return
|
|
85
|
+
}
|
|
86
|
+
this._bootedHooks.push(callback)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// ─── Signal handling ──────────────────────────────────────
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Listen for a process signal.
|
|
93
|
+
* Like AdonisJS app.listen('SIGTERM', () => app.terminate()).
|
|
94
|
+
*/
|
|
95
|
+
listen(signal: NodeJS.Signals, callback: () => void): void {
|
|
96
|
+
process.on(signal, callback)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Conditionally listen for a process signal.
|
|
101
|
+
* Like AdonisJS app.listenIf(app.managedByPm2, 'SIGINT', ...).
|
|
102
|
+
*/
|
|
103
|
+
listenIf(condition: boolean, signal: NodeJS.Signals, callback: () => void): void {
|
|
104
|
+
if (condition) {
|
|
105
|
+
process.on(signal, callback)
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Graceful shutdown — stop all providers and exit.
|
|
111
|
+
* Like AdonisJS app.terminate().
|
|
112
|
+
*/
|
|
113
|
+
async terminate(): Promise<void> {
|
|
114
|
+
await this.shutdown()
|
|
115
|
+
process.exit(0)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// ─── Provider lifecycle ───────────────────────────────────
|
|
119
|
+
|
|
120
|
+
/** Register a provider instance. */
|
|
121
|
+
register(provider: ProviderContract): void {
|
|
122
|
+
this.providers.push(provider)
|
|
123
|
+
if (typeof provider.register === 'function') {
|
|
124
|
+
provider.register()
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/** Boot all registered providers. Runs booting/booted hooks. */
|
|
129
|
+
async boot(): Promise<void> {
|
|
130
|
+
if (this._booted) return
|
|
131
|
+
|
|
132
|
+
// Run booting hooks
|
|
133
|
+
for (const hook of this._bootingHooks) {
|
|
134
|
+
await hook()
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Boot providers. `callProviderPhase` skips providers that don't
|
|
138
|
+
// declare the phase — duck-typed packages (spectrum, warden, etc.)
|
|
139
|
+
// implement only what they need.
|
|
140
|
+
for (const provider of this.providers) {
|
|
141
|
+
await callProviderPhase(provider, 'boot')
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
this._booted = true
|
|
145
|
+
|
|
146
|
+
// Run booted hooks
|
|
147
|
+
for (const hook of this._bootedHooks) {
|
|
148
|
+
await hook()
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/** Shutdown all providers in reverse order. */
|
|
153
|
+
async shutdown(): Promise<void> {
|
|
154
|
+
// Run shutdown hooks
|
|
155
|
+
for (const hook of this._shutdownHooks) {
|
|
156
|
+
await hook()
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
for (const provider of [...this.providers].reverse()) {
|
|
160
|
+
await callProviderPhase(provider, 'shutdown')
|
|
161
|
+
}
|
|
162
|
+
this._booted = false
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/** Register a shutdown hook. */
|
|
166
|
+
onShutdown(callback: () => Promise<void> | void): void {
|
|
167
|
+
this._shutdownHooks.push(callback)
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
get isBooted(): boolean {
|
|
171
|
+
return this._booted
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
get providerCount(): number {
|
|
175
|
+
return this.providers.length
|
|
176
|
+
}
|
|
177
|
+
}
|