@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
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface EventsConfig {
|
|
2
|
+
/** Event store backend. Default in-memory; `"redis"` needs the `redis-store` build. */
|
|
3
|
+
store?: string
|
|
4
|
+
/** Max delivery retries for durable subscribers. */
|
|
5
|
+
retries?: number
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function defineConfig(config: EventsConfig): EventsConfig {
|
|
9
|
+
return config
|
|
10
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
interface Codemods {
|
|
2
|
+
addProvider(importPath: string): Promise<void>
|
|
3
|
+
addEnvVars(vars: Record<string, string>): Promise<void>
|
|
4
|
+
writeFile(filePath: string, content: string, options?: { force?: boolean }): Promise<void>
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export async function configure(codemods: Codemods): Promise<void> {
|
|
8
|
+
await codemods.addProvider('@c9up/ream/events/provider')
|
|
9
|
+
await codemods.writeFile(
|
|
10
|
+
'config/events.ts',
|
|
11
|
+
`import { defineConfig } from '@c9up/ream/events/config'
|
|
12
|
+
|
|
13
|
+
export default defineConfig({
|
|
14
|
+
store: 'memory',
|
|
15
|
+
retries: 3,
|
|
16
|
+
})
|
|
17
|
+
`,
|
|
18
|
+
)
|
|
19
|
+
}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helix bus testing helpers — collect, fake, assertEmitted, assertNotEmitted,
|
|
3
|
+
* waitForEvent, waitForChain.
|
|
4
|
+
*
|
|
5
|
+
* Public testing API for asserting on events emitted through EventBus.
|
|
6
|
+
*
|
|
7
|
+
* @implements FR64, FR65, FR66, FR67, FR68 (Story 11.1)
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export interface CollectedEvent {
|
|
11
|
+
name: string
|
|
12
|
+
data: unknown
|
|
13
|
+
correlationId?: string
|
|
14
|
+
causationId?: string
|
|
15
|
+
[key: string]: unknown
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface CollectResult {
|
|
19
|
+
events: CollectedEvent[]
|
|
20
|
+
subId: number
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
interface BusLike {
|
|
24
|
+
subscribe(pattern: string, callback: (eventJson: string) => void): number
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Collect events matching a pattern into an array.
|
|
29
|
+
*
|
|
30
|
+
* const { events } = collect(bus, 'order.created')
|
|
31
|
+
* bus.emit('order.created', '{"id":"1"}')
|
|
32
|
+
* // events[0].name === 'order.created'
|
|
33
|
+
*/
|
|
34
|
+
export function collect(bus: BusLike, pattern: string): CollectResult {
|
|
35
|
+
const events: CollectedEvent[] = []
|
|
36
|
+
const subId = bus.subscribe(pattern, (eventJson: string) => {
|
|
37
|
+
try {
|
|
38
|
+
events.push(JSON.parse(eventJson) as CollectedEvent)
|
|
39
|
+
} catch {
|
|
40
|
+
events.push({
|
|
41
|
+
_raw: eventJson,
|
|
42
|
+
_parseError: true,
|
|
43
|
+
name: '',
|
|
44
|
+
data: undefined,
|
|
45
|
+
} as CollectedEvent)
|
|
46
|
+
}
|
|
47
|
+
})
|
|
48
|
+
return { events, subId }
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Fake (intercept) events matching a pattern.
|
|
53
|
+
*
|
|
54
|
+
* Currently captures events like collect() — true interception that suppresses
|
|
55
|
+
* other subscribers requires bus-level support and is not yet implemented.
|
|
56
|
+
*/
|
|
57
|
+
export function fake(bus: BusLike, pattern: string): CollectResult {
|
|
58
|
+
return collect(bus, pattern)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Assert that an event was emitted, optionally matching a partial payload.
|
|
63
|
+
*/
|
|
64
|
+
export function assertEmitted(events: CollectedEvent[], name: string, payload?: unknown): void {
|
|
65
|
+
const matching = events.filter((e) => e.name === name)
|
|
66
|
+
|
|
67
|
+
if (matching.length === 0) {
|
|
68
|
+
const emittedNames = [...new Set(events.map((e) => e.name))].join(', ')
|
|
69
|
+
throw new Error(
|
|
70
|
+
`[HELIX_ASSERT_EMITTED] Expected event '${name}' to be emitted, but it was not.\n` +
|
|
71
|
+
` Emitted events: ${emittedNames || '(none)'}`,
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (payload !== undefined && payload !== null) {
|
|
76
|
+
const payloadMatch = matching.find((e) => {
|
|
77
|
+
const data = typeof e.data === 'string' ? safeJson(e.data) : e.data
|
|
78
|
+
return partialMatch(data, payload)
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
if (!payloadMatch) {
|
|
82
|
+
const actualPayloads = matching
|
|
83
|
+
.map((e) => {
|
|
84
|
+
const data = typeof e.data === 'string' ? safeJson(e.data) : e.data
|
|
85
|
+
return JSON.stringify(data)
|
|
86
|
+
})
|
|
87
|
+
.join('\n ')
|
|
88
|
+
|
|
89
|
+
throw new Error(
|
|
90
|
+
`[HELIX_ASSERT_EMITTED] Event '${name}' was emitted but no payload matched.\n` +
|
|
91
|
+
` Expected (partial): ${JSON.stringify(payload)}\n` +
|
|
92
|
+
` Actual payloads:\n ${actualPayloads}`,
|
|
93
|
+
)
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Assert that an event was NOT emitted. */
|
|
99
|
+
export function assertNotEmitted(events: CollectedEvent[], name: string): void {
|
|
100
|
+
const matching = events.filter((e) => e.name === name)
|
|
101
|
+
if (matching.length > 0) {
|
|
102
|
+
throw new Error(
|
|
103
|
+
`[HELIX_ASSERT_NOT_EMITTED] Expected event '${name}' to NOT be emitted, but it was emitted ${matching.length} time(s).`,
|
|
104
|
+
)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface WaitForEventOptions {
|
|
109
|
+
timeout?: number
|
|
110
|
+
interval?: number
|
|
111
|
+
payload?: unknown
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** Wait for a specific event to appear in the collected events, with timeout. */
|
|
115
|
+
export function waitForEvent(
|
|
116
|
+
events: CollectedEvent[],
|
|
117
|
+
name: string,
|
|
118
|
+
options: WaitForEventOptions = {},
|
|
119
|
+
): Promise<CollectedEvent> {
|
|
120
|
+
const timeout = options.timeout ?? 5000
|
|
121
|
+
const interval = options.interval ?? 10
|
|
122
|
+
const payload = options.payload
|
|
123
|
+
|
|
124
|
+
return new Promise((resolve, reject) => {
|
|
125
|
+
const start = Date.now()
|
|
126
|
+
let settled = false
|
|
127
|
+
|
|
128
|
+
const check = () => {
|
|
129
|
+
if (settled) return
|
|
130
|
+
|
|
131
|
+
const match = events.find((e) => {
|
|
132
|
+
if (e.name !== name) return false
|
|
133
|
+
if (payload === undefined) return true
|
|
134
|
+
const data = typeof e.data === 'string' ? safeJson(e.data) : e.data
|
|
135
|
+
return partialMatch(data, payload)
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
if (match) {
|
|
139
|
+
settled = true
|
|
140
|
+
resolve(match)
|
|
141
|
+
return
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (Date.now() - start >= timeout) {
|
|
145
|
+
settled = true
|
|
146
|
+
const received = events.map((e) => e.name).join(', ')
|
|
147
|
+
reject(
|
|
148
|
+
new Error(
|
|
149
|
+
`[HELIX_TIMEOUT] Timed out waiting for event '${name}' after ${timeout}ms.\n` +
|
|
150
|
+
` Events received so far: ${received || '(none)'}`,
|
|
151
|
+
),
|
|
152
|
+
)
|
|
153
|
+
return
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
setTimeout(check, interval)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
check()
|
|
160
|
+
})
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export interface WaitForChainOptions {
|
|
164
|
+
timeout?: number
|
|
165
|
+
interval?: number
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Wait for an entire event chain to complete (tracked via correlationId).
|
|
170
|
+
*
|
|
171
|
+
* @implements FR68
|
|
172
|
+
*/
|
|
173
|
+
export function waitForChain(
|
|
174
|
+
events: CollectedEvent[],
|
|
175
|
+
correlationId: string,
|
|
176
|
+
expectedNames: string[],
|
|
177
|
+
options: WaitForChainOptions = {},
|
|
178
|
+
): Promise<CollectedEvent[]> {
|
|
179
|
+
if (!expectedNames || expectedNames.length === 0) {
|
|
180
|
+
return Promise.reject(new Error('[HELIX_CHAIN] expectedNames must be a non-empty array'))
|
|
181
|
+
}
|
|
182
|
+
const timeout = options.timeout ?? 5000
|
|
183
|
+
const interval = options.interval ?? 10
|
|
184
|
+
|
|
185
|
+
return new Promise((resolve, reject) => {
|
|
186
|
+
const start = Date.now()
|
|
187
|
+
let settled = false
|
|
188
|
+
|
|
189
|
+
const check = () => {
|
|
190
|
+
if (settled) return
|
|
191
|
+
|
|
192
|
+
const chainEvents = events.filter((e) => e.correlationId === correlationId)
|
|
193
|
+
const chainNames = chainEvents.map((e) => e.name)
|
|
194
|
+
const allPresent = expectedNames.every((name) => chainNames.includes(name))
|
|
195
|
+
|
|
196
|
+
if (allPresent) {
|
|
197
|
+
settled = true
|
|
198
|
+
resolve(chainEvents)
|
|
199
|
+
return
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
if (Date.now() - start >= timeout) {
|
|
203
|
+
settled = true
|
|
204
|
+
const completed = expectedNames.filter((n) => chainNames.includes(n))
|
|
205
|
+
const pending = expectedNames.filter((n) => !chainNames.includes(n))
|
|
206
|
+
reject(
|
|
207
|
+
new Error(
|
|
208
|
+
`[HELIX_CHAIN_TIMEOUT] Event chain timed out after ${timeout}ms.\n` +
|
|
209
|
+
` Correlation ID: ${correlationId}\n` +
|
|
210
|
+
` Completed: ${completed.join(', ') || '(none)'}\n` +
|
|
211
|
+
` Pending: ${pending.join(', ')}`,
|
|
212
|
+
),
|
|
213
|
+
)
|
|
214
|
+
return
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
setTimeout(check, interval)
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
check()
|
|
221
|
+
})
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Check if `actual` contains all key-value pairs from `expected` (deep partial match).
|
|
226
|
+
* Arrays are matched element-by-element.
|
|
227
|
+
*/
|
|
228
|
+
function partialMatch(actual: unknown, expected: unknown): boolean {
|
|
229
|
+
if (actual === expected) return true
|
|
230
|
+
if (expected === null || expected === undefined) return actual === expected
|
|
231
|
+
if (typeof expected !== 'object') return actual === expected
|
|
232
|
+
if (typeof actual !== 'object' || actual === null) return false
|
|
233
|
+
|
|
234
|
+
if (Array.isArray(expected)) {
|
|
235
|
+
if (!Array.isArray(actual)) return false
|
|
236
|
+
return expected.every(
|
|
237
|
+
(item, i) => i < (actual as unknown[]).length && partialMatch((actual as unknown[])[i], item),
|
|
238
|
+
)
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
for (const key of Object.keys(expected as object)) {
|
|
242
|
+
if (!(key in (actual as object))) return false
|
|
243
|
+
if (
|
|
244
|
+
!partialMatch(
|
|
245
|
+
(actual as Record<string, unknown>)[key],
|
|
246
|
+
(expected as Record<string, unknown>)[key],
|
|
247
|
+
)
|
|
248
|
+
)
|
|
249
|
+
return false
|
|
250
|
+
}
|
|
251
|
+
return true
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
function safeJson(value: string): unknown {
|
|
255
|
+
try {
|
|
256
|
+
return JSON.parse(value)
|
|
257
|
+
} catch {
|
|
258
|
+
return value
|
|
259
|
+
}
|
|
260
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@c9up/ream/events` — the event bus, part of ream core. A basic
|
|
3
|
+
* in-process emitter works with zero external
|
|
4
|
+
* infrastructure; the Redis store is an opt-in `redis-store` build feature.
|
|
5
|
+
*
|
|
6
|
+
* App-facing surface: `Emitter` (string + class events, wildcard, request/
|
|
7
|
+
* reply), `BaseEvent` (typed event classes), and `EventsProvider` (wires the
|
|
8
|
+
* `events`/`emitter` container tokens). The Rust-backed `EventBus` is the
|
|
9
|
+
* low-level native binding, exposed for advanced use.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export type { EventsConfig } from './config.js'
|
|
13
|
+
export { defineConfig } from './config.js'
|
|
14
|
+
export {
|
|
15
|
+
BaseEvent,
|
|
16
|
+
type ContainerResolver,
|
|
17
|
+
Emitter,
|
|
18
|
+
type ListenerClass,
|
|
19
|
+
} from './Emitter.js'
|
|
20
|
+
export type { EventsAppContext } from './EventsProvider.js'
|
|
21
|
+
export { default as EventsProvider } from './EventsProvider.js'
|
|
22
|
+
export { EventBus } from './native.js'
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native event-bus loader. Resolves the Rust-backed `events.<platform>.node`
|
|
3
|
+
* binary (built from the `ream-events-napi` crate) via the shared
|
|
4
|
+
* `loadNapi` helper and re-exports the `EventBus` class it provides.
|
|
5
|
+
*
|
|
6
|
+
* The bus is part of ream core: a basic in-process
|
|
7
|
+
* emitter works with zero external infrastructure; the Redis store is an
|
|
8
|
+
* opt-in `redis-store` cargo feature for durable/distributed production use.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { loadNapi } from '../helpers/napi-loader.js'
|
|
12
|
+
|
|
13
|
+
/** Rust-backed bus surface (mirrors the napi `#[napi] EventBus` exports). */
|
|
14
|
+
export interface EventBus {
|
|
15
|
+
emit(name: string, data: string): Promise<string>
|
|
16
|
+
subscribe(pattern: string, callback: (eventJson: string) => void): number
|
|
17
|
+
unsubscribe(subscriptionId: number): Promise<void>
|
|
18
|
+
onRequest(
|
|
19
|
+
name: string,
|
|
20
|
+
callback: (eventJson: string, reply: (response: string) => void) => void,
|
|
21
|
+
): void
|
|
22
|
+
request(name: string, data: string, timeoutMs?: number): Promise<string>
|
|
23
|
+
matchesWildcard(pattern: string, eventName: string): boolean
|
|
24
|
+
subscriptionCount(): Promise<number>
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
interface EventsNative {
|
|
28
|
+
EventBus: new (requestHandlerTimeoutMs?: number) => EventBus
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const native = loadNapi<EventsNative>({
|
|
32
|
+
binaryName: 'events',
|
|
33
|
+
callerMetaUrl: import.meta.url,
|
|
34
|
+
errorCodePrefix: 'EVENTS',
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
export const EventBus = native.EventBus
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default `Emitter` singleton — mirror of Adonis's
|
|
3
|
+
* `import emitter from '@adonisjs/core/services/emitter'` shape.
|
|
4
|
+
*
|
|
5
|
+
* import emitter from '@c9up/ream/events/services/main'
|
|
6
|
+
*
|
|
7
|
+
* emitter.on(TaskAssigned, (e) => sendEmail(e.assigneeId))
|
|
8
|
+
*
|
|
9
|
+
* Populated by `EventsProvider.boot()`.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { Emitter } from '../Emitter.js'
|
|
13
|
+
|
|
14
|
+
let instance: Emitter | undefined
|
|
15
|
+
|
|
16
|
+
/** @internal Bind the singleton (called by EventsProvider). */
|
|
17
|
+
export function setEmitter(instance: Emitter): void {
|
|
18
|
+
instance = instance
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** @internal Read the singleton (or `undefined` pre-boot). */
|
|
22
|
+
export function getEmitter(): Emitter | undefined {
|
|
23
|
+
return instance
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const emitter: Emitter = new Proxy({} as Emitter, {
|
|
27
|
+
get(_target, prop) {
|
|
28
|
+
if (!instance) {
|
|
29
|
+
throw new Error(
|
|
30
|
+
'[ream:events] Emitter singleton accessed before EventsProvider.boot() ran. ' +
|
|
31
|
+
'Check that `@c9up/ream/events/provider` is listed in your reamrc.ts providers.',
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
const value = Reflect.get(instance, prop, instance)
|
|
35
|
+
return typeof value === 'function' ? value.bind(instance) : value
|
|
36
|
+
},
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
export default emitter
|