raiton 0.0.2 → 1.0.0-alpha.2
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/CHANGELOG.md +32 -0
- package/README.md +98 -1
- package/build/bin/index.mjs +6816 -47
- package/build/raiton-1.0.0-alpha.2.tgz +0 -0
- package/package.json +22 -35
- package/source/bin/bootstrapper.ts +15 -0
- package/source/bin/cli-tools.ts +73 -0
- package/source/bin/cli.ts +12 -0
- package/source/bin/index.ts +6 -0
- package/source/commands/artifact.command.ts +28 -0
- package/source/commands/build.command.ts +31 -0
- package/source/commands/develop.command.ts +47 -0
- package/source/commands/grafts.command.ts +27 -0
- package/source/commands/start.command.ts +28 -0
- package/source/core/application.ts +115 -0
- package/source/core/artifacts/artifact.ts +109 -0
- package/source/core/artifacts/artifacts.ts +10 -0
- package/source/core/artifacts/index.ts +1 -0
- package/source/core/artifacts/runner.ts +3 -0
- package/source/core/builder.ts +138 -0
- package/source/core/bytes.util.ts +17 -0
- package/source/core/command.ts +24 -0
- package/source/core/commands.ts +44 -0
- package/source/core/config/config.ts +51 -0
- package/source/core/config/define.ts +13 -0
- package/source/core/config/index.ts +2 -0
- package/source/core/context.ts +33 -0
- package/source/core/controller/builder.ts +38 -0
- package/source/core/controller/compiler.ts +22 -0
- package/source/core/controller/index.ts +3 -0
- package/source/core/controller/metadata.ts +13 -0
- package/source/core/directories.ts +30 -0
- package/source/core/helpers/index.ts +1 -0
- package/source/core/helpers/raiton.ts +3 -0
- package/source/core/hmr.ts +106 -0
- package/source/core/hooks.ts +28 -0
- package/source/core/index.ts +13 -0
- package/source/core/injection/index.ts +1 -0
- package/source/core/injection/injection.ts +157 -0
- package/source/core/middleware/compose.ts +40 -0
- package/source/core/middleware/index.ts +2 -0
- package/source/core/middleware/pipeline.ts +27 -0
- package/source/core/plugins/index.ts +2 -0
- package/source/core/plugins/plugin.ts +8 -0
- package/source/core/plugins/scope.ts +46 -0
- package/source/core/process.util.ts +12 -0
- package/source/core/raiton.ts +21 -0
- package/source/core/router/handler.ts +59 -0
- package/source/core/router/index.ts +4 -0
- package/source/core/router/matcher.ts +51 -0
- package/source/core/router/route.ts +63 -0
- package/source/core/router/router.ts +31 -0
- package/source/core/server.ts +26 -0
- package/source/core/thread.ts +87 -0
- package/source/env.d.ts +3 -0
- package/source/requirements.ts +27 -0
- package/source/sdk/artifacts.ts +55 -0
- package/source/sdk/constants/decorators.constant.ts +7 -0
- package/source/sdk/constants/index.ts +2 -0
- package/source/sdk/constants/microservices.constant.ts +4 -0
- package/source/sdk/controllers.ts +4 -0
- package/source/sdk/data-transfer-object.ts +7 -0
- package/source/sdk/decorators/access-guard.decorator.ts +9 -0
- package/source/sdk/decorators/controllable.decorator.ts +20 -0
- package/source/sdk/decorators/index.ts +5 -0
- package/source/sdk/decorators/injection.decorator.ts +46 -0
- package/source/sdk/decorators/middleware.decorator.ts +15 -0
- package/source/sdk/decorators/parametrable.ts +24 -0
- package/source/sdk/decorators/payload.decorator.ts +77 -0
- package/source/sdk/decorators/routable.decorator.ts +48 -0
- package/source/sdk/encryption.ts +155 -0
- package/source/sdk/enums/encrypted.enum.ts +13 -0
- package/source/sdk/enums/event.message.enum.ts +4 -0
- package/{build/sdk/enums/http-parameters.enum.d.ts → source/sdk/enums/http-parameters.enum.ts} +3 -5
- package/source/sdk/enums/http.enum.ts +10 -0
- package/source/sdk/enums/index.ts +6 -0
- package/{build/sdk/enums/runtime.enum.d.ts → source/sdk/enums/runtime.enum.ts} +2 -4
- package/{build/sdk/enums/timestamp.enum.d.ts → source/sdk/enums/timestamp.enum.ts} +2 -4
- package/source/sdk/env.ts +40 -0
- package/source/sdk/index.ts +6 -0
- package/source/sdk/json.ts +55 -0
- package/source/sdk/plugins/body-parser.plugin.ts +119 -0
- package/source/sdk/plugins/index.ts +2 -0
- package/source/sdk/plugins/security/body-limit.ts +19 -0
- package/source/sdk/plugins/security/cors.ts +44 -0
- package/source/sdk/plugins/security/headers.ts +14 -0
- package/source/sdk/plugins/security/index.ts +13 -0
- package/source/sdk/plugins/security/method-guard.ts +14 -0
- package/source/sdk/plugins/security/rate-limit.ts +42 -0
- package/source/sdk/repositories.ts +14 -0
- package/source/sdk/request.ts +3 -0
- package/source/sdk/responses.ts +45 -0
- package/source/sdk/runtime/bun/server.ts +72 -0
- package/source/sdk/runtime/deno/server.ts +53 -0
- package/source/sdk/runtime/index.ts +47 -0
- package/source/sdk/runtime/node/server.ts +60 -0
- package/source/sdk/runtime/web/server.ts +57 -0
- package/{build/sdk/schemes.d.ts → source/sdk/schemes.ts} +91 -33
- package/source/sdk/services.ts +9 -0
- package/{build/sdk/throwable.d.ts → source/sdk/throwable.ts} +35 -12
- package/source/sdk/utilities/alias-path.util.ts +49 -0
- package/source/sdk/utilities/artifacts.util.ts +62 -0
- package/source/sdk/utilities/callable.util.ts +27 -0
- package/source/sdk/utilities/controller.util.ts +8 -0
- package/source/sdk/utilities/index.ts +7 -0
- package/source/sdk/utilities/json.util.ts +21 -0
- package/source/sdk/utilities/path.util.ts +19 -0
- package/source/sdk/utilities/url.ts +5 -0
- package/source/sdk/utilities/utilities.util.ts +25 -0
- package/source/types/access-guards.ts +4 -0
- package/{build/types/application.d.ts → source/types/application.ts} +23 -7
- package/source/types/artifact.ts +40 -0
- package/source/types/builder.ts +48 -0
- package/source/types/config.ts +7 -0
- package/source/types/controller.ts +34 -0
- package/source/types/contruct.ts +3 -0
- package/source/types/core.ts +28 -0
- package/source/types/data-transfer-object.ts +4 -0
- package/{build/types/directory.d.ts → source/types/directory.ts} +4 -4
- package/source/types/encryption.ts +17 -0
- package/source/types/generic.ts +3 -0
- package/{build/types/hmr.d.ts → source/types/hmr.ts} +19 -5
- package/source/types/http-responses.ts +8 -0
- package/source/types/index.ts +26 -0
- package/source/types/injection.ts +13 -0
- package/source/types/middleware.ts +18 -0
- package/source/types/parseable.ts +7 -0
- package/source/types/plugin.ts +10 -0
- package/source/types/raiton.ts +9 -0
- package/source/types/responses.ts +10 -0
- package/source/types/router.ts +11 -0
- package/source/types/runtime.ts +53 -0
- package/{build/types/scheme.d.ts → source/types/scheme.ts} +33 -8
- package/source/types/server.ts +12 -0
- package/source/types/thread.ts +31 -0
- package/source/types/utilities.ts +4 -0
- package/source/types/values.ts +3 -0
- package/.releaserc.json +0 -45
- package/build/bin/bootstrapper.d.ts +0 -5
- package/build/bin/bootstrapper.mjs +0 -46
- package/build/bin/cli.d.ts +0 -5
- package/build/bin/cli.mjs +0 -6
- package/build/bin/index.d.ts +0 -1
- package/build/chunk-3PWMRP6G.mjs +0 -16
- package/build/chunk-52JR26TI.mjs +0 -29
- package/build/chunk-5LNOA4SK.mjs +0 -16
- package/build/chunk-AUGL35CF.mjs +0 -24
- package/build/chunk-BVILWYAP.mjs +0 -14
- package/build/chunk-BYYJRCB4.mjs +0 -10
- package/build/chunk-FFRJ4AUA.mjs +0 -16
- package/build/chunk-GPJSLV3Q.mjs +0 -50
- package/build/chunk-HVFHDVAH.mjs +0 -20
- package/build/chunk-IOCHNQMF.mjs +0 -13
- package/build/chunk-JATYBWHL.mjs +0 -36
- package/build/chunk-JWNBO7XV.mjs +0 -53
- package/build/chunk-K4IQQ2KF.mjs +0 -55
- package/build/chunk-K4KLOLSO.mjs +0 -645
- package/build/chunk-M2RZZJQR.mjs +0 -27
- package/build/chunk-MLFGBJDV.mjs +0 -12
- package/build/chunk-NB62GSFI.mjs +0 -27
- package/build/chunk-O7R3NJQN.mjs +0 -19
- package/build/chunk-P3IRIFPT.mjs +0 -53
- package/build/chunk-QFSXFOEN.mjs +0 -56
- package/build/chunk-QHCQ4AUA.mjs +0 -14
- package/build/chunk-QI7OFSXB.mjs +0 -37
- package/build/chunk-RVH2YBNU.mjs +0 -111
- package/build/chunk-RXG7754R.mjs +0 -25
- package/build/chunk-S3ONGVNZ.mjs +0 -11
- package/build/chunk-SRR4467I.mjs +0 -29
- package/build/chunk-T6L55AUG.mjs +0 -32
- package/build/chunk-TOJFTPAY.mjs +0 -83
- package/build/chunk-UAPCBU3J.mjs +0 -12
- package/build/chunk-UCHBN3DV.mjs +0 -52
- package/build/chunk-UWM46HLZ.mjs +0 -18
- package/build/chunk-UZFCGVHP.mjs +0 -8
- package/build/chunk-VQINCGLQ.mjs +0 -59
- package/build/chunk-VRL4S7UF.mjs +0 -74
- package/build/chunk-WAWFDMOH.mjs +0 -72
- package/build/chunk-X3JFRRRQ.mjs +0 -45
- package/build/chunk-XFBLELHI.mjs +0 -34
- package/build/chunk-XIGE72LC.mjs +0 -34
- package/build/chunk-XW7EPAD7.mjs +0 -0
- package/build/chunk-YGIZFKLJ.mjs +0 -20
- package/build/chunk-YRVIAORI.mjs +0 -8
- package/build/chunk-YXU5W2CB.mjs +0 -12
- package/build/commands/artifact.command.d.ts +0 -14
- package/build/commands/artifact.command.mjs +0 -59
- package/build/commands/build.command.d.ts +0 -14
- package/build/commands/build.command.mjs +0 -65
- package/build/commands/develop.command.d.ts +0 -13
- package/build/commands/develop.command.mjs +0 -75
- package/build/commands/grafts.command.d.ts +0 -12
- package/build/commands/grafts.command.mjs +0 -58
- package/build/commands/start.command.d.ts +0 -12
- package/build/commands/start.command.mjs +0 -64
- package/build/core/application.d.ts +0 -27
- package/build/core/application.mjs +0 -124
- package/build/core/artifact.d.ts +0 -19
- package/build/core/artifact.mjs +0 -133
- package/build/core/builder.d.ts +0 -35
- package/build/core/builder.mjs +0 -45
- package/build/core/bytes.util.d.ts +0 -6
- package/build/core/bytes.util.mjs +0 -8
- package/build/core/command.d.ts +0 -15
- package/build/core/command.mjs +0 -6
- package/build/core/commands.d.ts +0 -13
- package/build/core/commands.mjs +0 -7
- package/build/core/config.d.ts +0 -10
- package/build/core/config.mjs +0 -7
- package/build/core/context.d.ts +0 -15
- package/build/core/context.mjs +0 -6
- package/build/core/controller/builder.d.ts +0 -10
- package/build/core/controller/builder.mjs +0 -45
- package/build/core/controller/compiler.d.ts +0 -6
- package/build/core/controller/compiler.mjs +0 -45
- package/build/core/controller/index.d.ts +0 -13
- package/build/core/controller/index.mjs +0 -50
- package/build/core/controller/metadata.d.ts +0 -10
- package/build/core/controller/metadata.mjs +0 -6
- package/build/core/directories.d.ts +0 -11
- package/build/core/directories.mjs +0 -8
- package/build/core/hmr.d.ts +0 -22
- package/build/core/hmr.mjs +0 -6
- package/build/core/hooks.d.ts +0 -12
- package/build/core/hooks.mjs +0 -6
- package/build/core/index.d.ts +0 -41
- package/build/core/index.mjs +0 -100
- package/build/core/middleware/compose.d.ts +0 -8
- package/build/core/middleware/compose.mjs +0 -6
- package/build/core/middleware/index.d.ts +0 -6
- package/build/core/middleware/index.mjs +0 -11
- package/build/core/middleware/pipeline.d.ts +0 -14
- package/build/core/middleware/pipeline.mjs +0 -7
- package/build/core/plugins/index.d.ts +0 -14
- package/build/core/plugins/index.mjs +0 -48
- package/build/core/plugins/plugin.d.ts +0 -17
- package/build/core/plugins/plugin.mjs +0 -6
- package/build/core/plugins/scope.d.ts +0 -24
- package/build/core/plugins/scope.mjs +0 -45
- package/build/core/process.util.d.ts +0 -3
- package/build/core/process.util.mjs +0 -6
- package/build/core/raiton.d.ts +0 -20
- package/build/core/raiton.mjs +0 -6
- package/build/core/router/handler.d.ts +0 -10
- package/build/core/router/handler.mjs +0 -45
- package/build/core/router/index.d.ts +0 -12
- package/build/core/router/index.mjs +0 -54
- package/build/core/router/matcher.d.ts +0 -21
- package/build/core/router/matcher.mjs +0 -6
- package/build/core/router/route.d.ts +0 -20
- package/build/core/router/route.mjs +0 -6
- package/build/core/router/router.d.ts +0 -16
- package/build/core/router/router.mjs +0 -8
- package/build/core/thread.d.ts +0 -30
- package/build/core/thread.mjs +0 -45
- package/build/env.d.d.ts +0 -2
- package/build/env.d.mjs +0 -0
- package/build/raiton-0.0.2.tgz +0 -0
- package/build/requirements.d.ts +0 -2
- package/build/requirements.mjs +0 -19
- package/build/sdk/artifacts.d.ts +0 -13
- package/build/sdk/artifacts.mjs +0 -45
- package/build/sdk/constants/decorators.constant.d.ts +0 -11
- package/build/sdk/constants/decorators.constant.mjs +0 -6
- package/build/sdk/constants/index.d.ts +0 -2
- package/build/sdk/constants/index.mjs +0 -11
- package/build/sdk/constants/microservices.constant.d.ts +0 -5
- package/build/sdk/constants/microservices.constant.mjs +0 -6
- package/build/sdk/controllers.d.ts +0 -4
- package/build/sdk/controllers.mjs +0 -6
- package/build/sdk/data-transfer-object.d.ts +0 -7
- package/build/sdk/data-transfer-object.mjs +0 -7
- package/build/sdk/decorators/access-guard.decorator.d.ts +0 -2
- package/build/sdk/decorators/access-guard.decorator.mjs +0 -0
- package/build/sdk/decorators/controllable.d.ts +0 -3
- package/build/sdk/decorators/controllable.mjs +0 -45
- package/build/sdk/decorators/controllers.decorator.d.ts +0 -2
- package/build/sdk/decorators/controllers.decorator.mjs +0 -0
- package/build/sdk/decorators/grafts.decorator.d.ts +0 -2
- package/build/sdk/decorators/grafts.decorator.mjs +0 -0
- package/build/sdk/decorators/index.d.ts +0 -3
- package/build/sdk/decorators/index.mjs +0 -75
- package/build/sdk/decorators/parameters.decorator.d.ts +0 -2
- package/build/sdk/decorators/parameters.decorator.mjs +0 -0
- package/build/sdk/decorators/parametrable.d.ts +0 -9
- package/build/sdk/decorators/parametrable.mjs +0 -57
- package/build/sdk/decorators/payload.decorator.d.ts +0 -2
- package/build/sdk/decorators/payload.decorator.mjs +0 -0
- package/build/sdk/decorators/routable.d.ts +0 -10
- package/build/sdk/decorators/routable.mjs +0 -59
- package/build/sdk/dependency-container.d.ts +0 -19
- package/build/sdk/dependency-container.mjs +0 -46
- package/build/sdk/encryption.d.ts +0 -27
- package/build/sdk/encryption.mjs +0 -141
- package/build/sdk/enums/encrypted.enum.d.ts +0 -15
- package/build/sdk/enums/encrypted.enum.mjs +0 -6
- package/build/sdk/enums/event.message.enum.d.ts +0 -6
- package/build/sdk/enums/event.message.enum.mjs +0 -6
- package/build/sdk/enums/http-parameters.enum.mjs +0 -6
- package/build/sdk/enums/http.enum.d.ts +0 -12
- package/build/sdk/enums/http.enum.mjs +0 -6
- package/build/sdk/enums/index.d.ts +0 -6
- package/build/sdk/enums/index.mjs +0 -27
- package/build/sdk/enums/runtime.enum.mjs +0 -6
- package/build/sdk/enums/timestamp.enum.mjs +0 -6
- package/build/sdk/env.d.ts +0 -6
- package/build/sdk/env.mjs +0 -74
- package/build/sdk/fastify.d.ts +0 -11
- package/build/sdk/fastify.mjs +0 -9
- package/build/sdk/grafts.d.ts +0 -15
- package/build/sdk/grafts.mjs +0 -71
- package/build/sdk/index.d.ts +0 -34
- package/build/sdk/index.mjs +0 -126
- package/build/sdk/json.d.ts +0 -17
- package/build/sdk/json.mjs +0 -87
- package/build/sdk/plugins/body-parser.plugin.d.ts +0 -17
- package/build/sdk/plugins/body-parser.plugin.mjs +0 -7
- package/build/sdk/plugins/index.d.ts +0 -17
- package/build/sdk/plugins/index.mjs +0 -48
- package/build/sdk/plugins/security/body-limit.d.ts +0 -17
- package/build/sdk/plugins/security/body-limit.mjs +0 -45
- package/build/sdk/plugins/security/cors.d.ts +0 -22
- package/build/sdk/plugins/security/cors.mjs +0 -45
- package/build/sdk/plugins/security/headers.d.ts +0 -17
- package/build/sdk/plugins/security/headers.mjs +0 -45
- package/build/sdk/plugins/security/index.d.ts +0 -25
- package/build/sdk/plugins/security/index.mjs +0 -45
- package/build/sdk/plugins/security/method-guard.d.ts +0 -17
- package/build/sdk/plugins/security/method-guard.mjs +0 -45
- package/build/sdk/plugins/security/rate-limit.d.ts +0 -21
- package/build/sdk/plugins/security/rate-limit.mjs +0 -45
- package/build/sdk/repositories.d.ts +0 -7
- package/build/sdk/repositories.mjs +0 -17
- package/build/sdk/request.d.ts +0 -4
- package/build/sdk/request.mjs +0 -6
- package/build/sdk/responses.d.ts +0 -8
- package/build/sdk/responses.mjs +0 -20
- package/build/sdk/routes.d.ts +0 -7
- package/build/sdk/routes.mjs +0 -61
- package/build/sdk/runtime/bun/server.d.ts +0 -6
- package/build/sdk/runtime/bun/server.mjs +0 -6
- package/build/sdk/runtime/deno/server.d.ts +0 -6
- package/build/sdk/runtime/deno/server.mjs +0 -6
- package/build/sdk/runtime/index.d.ts +0 -15
- package/build/sdk/runtime/index.mjs +0 -11
- package/build/sdk/runtime/node/reply.d.ts +0 -2
- package/build/sdk/runtime/node/reply.mjs +0 -0
- package/build/sdk/runtime/node/request.d.ts +0 -2
- package/build/sdk/runtime/node/request.mjs +0 -0
- package/build/sdk/runtime/node/server.d.ts +0 -6
- package/build/sdk/runtime/node/server.mjs +0 -6
- package/build/sdk/runtime/web/server.d.ts +0 -6
- package/build/sdk/runtime/web/server.mjs +0 -6
- package/build/sdk/schemes.mjs +0 -129
- package/build/sdk/services.d.ts +0 -8
- package/build/sdk/services.mjs +0 -10
- package/build/sdk/throwable.mjs +0 -14
- package/build/sdk/utilities/alias-path.util.d.ts +0 -9
- package/build/sdk/utilities/alias-path.util.mjs +0 -6
- package/build/sdk/utilities/artifacts.util.d.ts +0 -3
- package/build/sdk/utilities/artifacts.util.mjs +0 -45
- package/build/sdk/utilities/callable.util.d.ts +0 -3
- package/build/sdk/utilities/callable.util.mjs +0 -6
- package/build/sdk/utilities/controller.util.d.ts +0 -3
- package/build/sdk/utilities/controller.util.mjs +0 -6
- package/build/sdk/utilities/index.d.ts +0 -7
- package/build/sdk/utilities/index.mjs +0 -62
- package/build/sdk/utilities/json.util.d.ts +0 -3
- package/build/sdk/utilities/json.util.mjs +0 -6
- package/build/sdk/utilities/parameters-arguments.util.d.ts +0 -2
- package/build/sdk/utilities/parameters-arguments.util.mjs +0 -0
- package/build/sdk/utilities/url.d.ts +0 -3
- package/build/sdk/utilities/url.mjs +0 -7
- package/build/sdk/utilities/utilities.util.d.ts +0 -6
- package/build/sdk/utilities/utilities.util.mjs +0 -8
- package/build/types/access-guards.d.ts +0 -6
- package/build/types/access-guards.mjs +0 -0
- package/build/types/application.mjs +0 -0
- package/build/types/artifact.d.ts +0 -21
- package/build/types/artifact.mjs +0 -0
- package/build/types/builder.d.ts +0 -32
- package/build/types/builder.mjs +0 -0
- package/build/types/config.d.ts +0 -6
- package/build/types/config.mjs +0 -0
- package/build/types/controller.d.ts +0 -25
- package/build/types/controller.mjs +0 -0
- package/build/types/contruct.d.ts +0 -3
- package/build/types/contruct.mjs +0 -0
- package/build/types/core.d.ts +0 -15
- package/build/types/core.mjs +0 -0
- package/build/types/data-transfer-object.d.ts +0 -5
- package/build/types/data-transfer-object.mjs +0 -0
- package/build/types/dependency-container.d.ts +0 -20
- package/build/types/dependency-container.mjs +0 -0
- package/build/types/directory.mjs +0 -0
- package/build/types/encryption.d.ts +0 -16
- package/build/types/encryption.mjs +0 -0
- package/build/types/generic.d.ts +0 -4
- package/build/types/generic.mjs +0 -0
- package/build/types/hmr.mjs +0 -0
- package/build/types/http-responses.d.ts +0 -10
- package/build/types/http-responses.mjs +0 -0
- package/build/types/index.d.ts +0 -45
- package/build/types/index.mjs +0 -0
- package/build/types/middleware.d.ts +0 -12
- package/build/types/middleware.mjs +0 -0
- package/build/types/parameters.d.ts +0 -19
- package/build/types/parameters.mjs +0 -0
- package/build/types/parseable.d.ts +0 -5
- package/build/types/parseable.mjs +0 -0
- package/build/types/payload.d.ts +0 -6
- package/build/types/payload.mjs +0 -0
- package/build/types/plugin.d.ts +0 -20
- package/build/types/plugin.mjs +0 -0
- package/build/types/raiton.d.ts +0 -12
- package/build/types/raiton.mjs +0 -0
- package/build/types/repositories.d.ts +0 -8
- package/build/types/repositories.mjs +0 -0
- package/build/types/router.d.ts +0 -14
- package/build/types/router.mjs +0 -0
- package/build/types/runtime.d.ts +0 -37
- package/build/types/runtime.mjs +0 -0
- package/build/types/scheme.mjs +0 -0
- package/build/types/server.d.ts +0 -57
- package/build/types/server.mjs +0 -0
- package/build/types/services.d.ts +0 -8
- package/build/types/services.mjs +0 -0
- package/build/types/thread.d.ts +0 -24
- package/build/types/thread.mjs +0 -0
- package/build/types/utilities.d.ts +0 -6
- package/build/types/utilities.mjs +0 -0
- package/build/types/values.d.ts +0 -4
- package/build/types/values.mjs +0 -0
- /package/{build/chunk-4OWCGDUD.mjs → source/sdk/runtime/node/reply.ts} +0 -0
- /package/{build/chunk-DIWD7ZCJ.mjs → source/sdk/runtime/node/request.ts} +0 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import {ParseableEntriesType, ParseablePrimitiveType} from "../types/parseable";
|
|
2
|
+
import {stabilizeJson} from "./utilities";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
export class Json<T extends ParseableEntriesType> {
|
|
6
|
+
|
|
7
|
+
public readonly stack: Map<keyof T, T[keyof T]> = new Map();
|
|
8
|
+
|
|
9
|
+
constructor(json: ParseablePrimitiveType<T>) {
|
|
10
|
+
this.records(stabilizeJson<T>(json));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
records(data: T): this {
|
|
14
|
+
for (const [key, value] of Object.entries(data))
|
|
15
|
+
this.stack.set(key as keyof T, value as T[keyof T]);
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
get<K extends keyof T>(key: K): T[K] {
|
|
20
|
+
return this.stack.get(key) as T[K];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
set<K extends keyof T>(key: K, value: T[K]): this {
|
|
24
|
+
this.stack.set(key, value);
|
|
25
|
+
return this;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
remove<K extends keyof T>(key: K): this {
|
|
29
|
+
this.stack.delete(key);
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
clear(): this {
|
|
34
|
+
this.stack.clear();
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
render(): T {
|
|
39
|
+
return Object.fromEntries(this.stack) as any as T;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
static stabilize<T>(json: string | T | null): T {
|
|
43
|
+
return stabilizeJson<T>(json);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
static from<T extends ParseableEntriesType>(data: T): Json<T> {
|
|
47
|
+
const json = new Json<T>(null);
|
|
48
|
+
json.records(data);
|
|
49
|
+
return json;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
static records<T extends ParseableEntriesType>(support: Json<T>, data: ParseablePrimitiveType<T>): Json<T> {
|
|
53
|
+
return support.records(this.stabilize(data));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import type {MiddlewareParameters, Plugin} from "@/types";
|
|
2
|
+
import {RequestContext} from "@/core/context";
|
|
3
|
+
import {Logger} from "@protorians/logger";
|
|
4
|
+
import {tryParseJson} from "@/sdk/utilities/json.util";
|
|
5
|
+
|
|
6
|
+
export function bodyParserPlugin(): Plugin {
|
|
7
|
+
return {
|
|
8
|
+
name: 'body-parser-plugin',
|
|
9
|
+
setup: (scope) => {
|
|
10
|
+
scope.use(async ({context, next}: MiddlewareParameters) => {
|
|
11
|
+
const contentType = context.req.headers.get('content-type') || '';
|
|
12
|
+
|
|
13
|
+
if (context.req.body && !context.state.bodyParsed) {
|
|
14
|
+
try {
|
|
15
|
+
const rawBody = await readRawBody(context.req.body);
|
|
16
|
+
const bodyString = decode(rawBody);
|
|
17
|
+
|
|
18
|
+
readQueryBody(context);
|
|
19
|
+
readJsonBody(context, contentType, bodyString);
|
|
20
|
+
readUrlEncodedBody(context, contentType, bodyString);
|
|
21
|
+
readTextBody(context, contentType, bodyString);
|
|
22
|
+
|
|
23
|
+
if (!context.state.bodyParsed) {
|
|
24
|
+
context.req.body = rawBody as unknown as any;
|
|
25
|
+
context.state.bodyParsed = true;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
} catch (e) {
|
|
29
|
+
Logger.error('Error parsing body:', e);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
await next();
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function readJsonBody(ctx: RequestContext, contentType: string, body: any) {
|
|
40
|
+
if (contentType.includes('application/json')) {
|
|
41
|
+
ctx.req.body = tryParseJson(body) || {} as unknown as any;
|
|
42
|
+
ctx.state.bodyParsed = true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function readUrlEncodedBody(ctx: RequestContext, contentType: string, body: string) {
|
|
47
|
+
if (contentType.includes('application/x-www-form-urlencoded')) {
|
|
48
|
+
const params = new URLSearchParams(body);
|
|
49
|
+
const record: Record<string, any> = {};
|
|
50
|
+
params.forEach((value, key) => {
|
|
51
|
+
record[key] = value;
|
|
52
|
+
});
|
|
53
|
+
ctx.req.body = record as unknown as any;
|
|
54
|
+
ctx.state.bodyParsed = true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function readTextBody(ctx: RequestContext, contentType: string, body: string) {
|
|
59
|
+
if (contentType.includes('text/')) {
|
|
60
|
+
ctx.req.body = body as unknown as any;
|
|
61
|
+
ctx.state.bodyParsed = true;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function readQueryBody(ctx: RequestContext) {
|
|
66
|
+
const searchParams = new URLSearchParams(ctx.req.url.split('?')[1] || '');
|
|
67
|
+
const record = {} as Record<string, any>;
|
|
68
|
+
searchParams.forEach((value, key) => record[key] = value);
|
|
69
|
+
ctx.req.query = record as unknown as any;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async function readRawBody(body: any): Promise<Uint8Array | string> {
|
|
73
|
+
if (body instanceof ReadableStream) {
|
|
74
|
+
const reader = body.getReader();
|
|
75
|
+
const chunks: Uint8Array[] = [];
|
|
76
|
+
while (true) {
|
|
77
|
+
const {done, value} = await reader.read();
|
|
78
|
+
if (done) break;
|
|
79
|
+
chunks.push(value);
|
|
80
|
+
}
|
|
81
|
+
const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0);
|
|
82
|
+
const result = new Uint8Array(totalLength);
|
|
83
|
+
let offset = 0;
|
|
84
|
+
for (const chunk of chunks) {
|
|
85
|
+
result.set(chunk, offset);
|
|
86
|
+
offset += chunk.length;
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (typeof body === 'object' && body !== null && 'on' in body && typeof body.on === 'function') {
|
|
92
|
+
return new Promise((resolve, reject) => {
|
|
93
|
+
const chunks: any[] = [];
|
|
94
|
+
body.on('data', (chunk: any) => chunks.push(chunk));
|
|
95
|
+
body.on('end', () => {
|
|
96
|
+
if (chunks.length > 0 && typeof chunks[0] === 'string') {
|
|
97
|
+
resolve(chunks.join(''));
|
|
98
|
+
} else {
|
|
99
|
+
const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0);
|
|
100
|
+
const result = new Uint8Array(totalLength);
|
|
101
|
+
let offset = 0;
|
|
102
|
+
for (const chunk of chunks) {
|
|
103
|
+
result.set(new Uint8Array(chunk), offset);
|
|
104
|
+
offset += chunk.length;
|
|
105
|
+
}
|
|
106
|
+
resolve(result);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
body.on('error', reject);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return body;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function decode(data: Uint8Array | string): string {
|
|
117
|
+
if (typeof data === 'string') return data;
|
|
118
|
+
return new TextDecoder().decode(data);
|
|
119
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {definePlugin} from "@/core/plugins";
|
|
2
|
+
import {MiddlewareParameters} from "@/types";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
export const secureBodyLimit = (maxBytes = 1_000_000) =>
|
|
6
|
+
definePlugin((scope) => {
|
|
7
|
+
scope.use(async ({context, next}: MiddlewareParameters) => {
|
|
8
|
+
const len = Number(
|
|
9
|
+
context.req.headers.get('content-length') ?? 0
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
if (len > maxBytes) {
|
|
13
|
+
context.reply.status(413)
|
|
14
|
+
return context.send({ error: 'Payload too large' })
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
await next()
|
|
18
|
+
})
|
|
19
|
+
}, 'body-limit')
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import {definePlugin} from "@/core/plugins";
|
|
2
|
+
import {Context, MiddlewareParameters, NextCallable} from "@/types";
|
|
3
|
+
|
|
4
|
+
export interface CorsOptions {
|
|
5
|
+
origin?: string | string[]
|
|
6
|
+
methods?: string[]
|
|
7
|
+
headers?: string[]
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const secureCors = (opts: CorsOptions = {}) =>
|
|
11
|
+
definePlugin((scope) => {
|
|
12
|
+
scope.use(async ({context, next}: MiddlewareParameters) => {
|
|
13
|
+
const origin = context.req.headers.get('origin')
|
|
14
|
+
|
|
15
|
+
if (opts.origin) {
|
|
16
|
+
const allowed = Array.isArray(opts.origin)
|
|
17
|
+
? opts.origin.includes(origin!)
|
|
18
|
+
: opts.origin === origin
|
|
19
|
+
|
|
20
|
+
if (allowed) {
|
|
21
|
+
context.reply.header('Access-Control-Allow-Origin', origin!)
|
|
22
|
+
}
|
|
23
|
+
} else {
|
|
24
|
+
context.reply.header('Access-Control-Allow-Origin', '*')
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
context.reply.header(
|
|
28
|
+
'Access-Control-Allow-Methods',
|
|
29
|
+
(opts.methods ?? ['GET', 'POST', 'PUT', 'DELETE']).join(',')
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
context.reply.header(
|
|
33
|
+
'Access-Control-Allow-Headers',
|
|
34
|
+
(opts.headers ?? ['Content-Type', 'Authorization']).join(',')
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
if (context.req.method === 'OPTIONS') {
|
|
38
|
+
context.reply.status(204)
|
|
39
|
+
return context.send(null)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
await next()
|
|
43
|
+
})
|
|
44
|
+
}, 'cors')
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {definePlugin} from "@/core/plugins";
|
|
2
|
+
import {Context, MiddlewareParameters, NextCallable} from "@/types";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
export const secureHeaders = definePlugin((scope) => {
|
|
6
|
+
scope.use(async ({context, next}: MiddlewareParameters) => {
|
|
7
|
+
context.reply.header('X-Content-Type-Options', 'nosniff')
|
|
8
|
+
context.reply.header('X-Frame-Options', 'DENY')
|
|
9
|
+
context.reply.header('Referrer-Policy', 'no-referrer')
|
|
10
|
+
context.reply.header('X-XSS-Protection', '1; mode=block')
|
|
11
|
+
|
|
12
|
+
await next()
|
|
13
|
+
})
|
|
14
|
+
}, 'security-headers')
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import {secureHeaders} from './headers'
|
|
2
|
+
import {secureCors} from './cors'
|
|
3
|
+
import {secureRateLimit} from './rate-limit'
|
|
4
|
+
import {secureBodyLimit} from './body-limit'
|
|
5
|
+
import {secureMethodGuard} from './method-guard'
|
|
6
|
+
|
|
7
|
+
export class Security {
|
|
8
|
+
static headers = secureHeaders
|
|
9
|
+
static cors = secureCors
|
|
10
|
+
static rateLimit = secureRateLimit
|
|
11
|
+
static bodyLimit = secureBodyLimit
|
|
12
|
+
static methodGuard = secureMethodGuard
|
|
13
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {definePlugin} from "@/core/plugins";
|
|
2
|
+
import {Context, MiddlewareParameters, NextCallable} from "@/types";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
export const secureMethodGuard = (allowed: string[]) =>
|
|
6
|
+
definePlugin((scope) => {
|
|
7
|
+
scope.use(async ({context, next}: MiddlewareParameters) => {
|
|
8
|
+
if (!allowed.includes(context.req.method)) {
|
|
9
|
+
context.reply.status(405)
|
|
10
|
+
return context.send({ error: 'Method not allowed' })
|
|
11
|
+
}
|
|
12
|
+
await next()
|
|
13
|
+
})
|
|
14
|
+
}, 'method-guard')
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import {definePlugin} from "@/core/plugins";
|
|
2
|
+
import {Context, MiddlewareParameters, NextCallable} from "@/types";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
export interface RateLimitOptions {
|
|
6
|
+
windowMs?: number
|
|
7
|
+
max?: number
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const secureRateLimit = (
|
|
11
|
+
opts: RateLimitOptions = {}
|
|
12
|
+
) =>
|
|
13
|
+
definePlugin((scope) => {
|
|
14
|
+
const hits = new Map<string, { count: number; ts: number }>()
|
|
15
|
+
|
|
16
|
+
const windowMs = opts.windowMs ?? 60_000
|
|
17
|
+
const max = opts.max ?? 100
|
|
18
|
+
|
|
19
|
+
scope.use(async ({context, next}: MiddlewareParameters) => {
|
|
20
|
+
const ip =
|
|
21
|
+
context.req.remoteAddress ?? 'unknown'
|
|
22
|
+
const now = Date.now()
|
|
23
|
+
|
|
24
|
+
const entry = hits.get(ip) ?? {count: 0, ts: now}
|
|
25
|
+
|
|
26
|
+
if (now - entry.ts > windowMs) {
|
|
27
|
+
entry.count = 0
|
|
28
|
+
entry.ts = now
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
entry.count++
|
|
32
|
+
|
|
33
|
+
hits.set(ip, entry)
|
|
34
|
+
|
|
35
|
+
if (entry.count > max) {
|
|
36
|
+
context.reply.status(429)
|
|
37
|
+
return context.send({error: 'Too many requests'})
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
await next()
|
|
41
|
+
})
|
|
42
|
+
}, 'rate-limit')
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {Throwable} from "./throwable";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
export class DelegateRepository {
|
|
5
|
+
protected readonly client: any;
|
|
6
|
+
public readonly model!: any;
|
|
7
|
+
|
|
8
|
+
protected supported(method: string): boolean {
|
|
9
|
+
if (typeof this.model !== 'object') throw new Throwable('Model not found, please check your repository')
|
|
10
|
+
else if (!(method in this.model)) throw new Throwable(`Method ${method} not found, please check your repository`)
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type {IHttpResponse, ParseableType, ResponseParameters} from "@/types";
|
|
2
|
+
import {RequestContext} from "@/core/context";
|
|
3
|
+
|
|
4
|
+
export function httpResponse<T extends ParseableType>(
|
|
5
|
+
statusCode: number,
|
|
6
|
+
message?: string,
|
|
7
|
+
data?: T,
|
|
8
|
+
error?: any,
|
|
9
|
+
): IHttpResponse<T> {
|
|
10
|
+
return {
|
|
11
|
+
statusCode,
|
|
12
|
+
message,
|
|
13
|
+
data,
|
|
14
|
+
error,
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function successResponse<T extends ParseableType>(
|
|
19
|
+
message?: string,
|
|
20
|
+
data?: T,
|
|
21
|
+
error?: any,
|
|
22
|
+
): IHttpResponse<T> {
|
|
23
|
+
return httpResponse<T>(200, message, data, error);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function errorResponse<T extends ParseableType>(
|
|
27
|
+
message?: string,
|
|
28
|
+
data?: T,
|
|
29
|
+
error?: any,
|
|
30
|
+
): IHttpResponse<T> {
|
|
31
|
+
return httpResponse<T>(500, message, data, error);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
export class RaitonResponse {
|
|
36
|
+
constructor(
|
|
37
|
+
public readonly parameters: ResponseParameters,
|
|
38
|
+
public readonly context: RequestContext,
|
|
39
|
+
) {
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
parse(){
|
|
43
|
+
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import {RuntimeAdapterInterface} from '@/types'
|
|
2
|
+
|
|
3
|
+
export const bunRuntime: RuntimeAdapterInterface = {
|
|
4
|
+
createServer(handler) {
|
|
5
|
+
if (typeof Bun === 'undefined') throw new Error(
|
|
6
|
+
'bun is not installed, please run `npm install bun`'
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
let server: any
|
|
10
|
+
|
|
11
|
+
return {
|
|
12
|
+
async listen(port) {
|
|
13
|
+
server = Bun.serve({
|
|
14
|
+
port,
|
|
15
|
+
fetch: async (request: Request) => {
|
|
16
|
+
let responseBody: any
|
|
17
|
+
let statusCode = 200
|
|
18
|
+
const headers = new Headers()
|
|
19
|
+
|
|
20
|
+
await handler(
|
|
21
|
+
{
|
|
22
|
+
method: request.method,
|
|
23
|
+
url: request.url,
|
|
24
|
+
headers: request.headers as any,
|
|
25
|
+
body: request.body as any
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
status(code) {
|
|
29
|
+
statusCode = code
|
|
30
|
+
},
|
|
31
|
+
header(name, value) {
|
|
32
|
+
headers.set(name, value)
|
|
33
|
+
},
|
|
34
|
+
send(body: any) {
|
|
35
|
+
if (body === undefined) {
|
|
36
|
+
responseBody = ''
|
|
37
|
+
} else if (typeof body === 'string' || Buffer.isBuffer(body)) {
|
|
38
|
+
responseBody = body;
|
|
39
|
+
} else {
|
|
40
|
+
headers.set('content-type', 'application/json');
|
|
41
|
+
responseBody = (JSON.stringify(body));
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
text(text: string | Buffer) {
|
|
45
|
+
responseBody = text
|
|
46
|
+
},
|
|
47
|
+
json(json: any) {
|
|
48
|
+
headers.set('content-type', 'application/json')
|
|
49
|
+
responseBody = JSON.stringify(json)
|
|
50
|
+
},
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
if (responseBody instanceof Response) {
|
|
55
|
+
return responseBody;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return new Response(
|
|
59
|
+
typeof responseBody === 'object' && !(responseBody instanceof Buffer)
|
|
60
|
+
? JSON.stringify(responseBody)
|
|
61
|
+
: responseBody,
|
|
62
|
+
{status: statusCode, headers}
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
})
|
|
66
|
+
},
|
|
67
|
+
async close() {
|
|
68
|
+
server?.stop()
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import {RuntimeAdapterInterface} from '@/types'
|
|
2
|
+
|
|
3
|
+
export const denoRuntime: RuntimeAdapterInterface = {
|
|
4
|
+
createServer(handler) {
|
|
5
|
+
let controller: AbortController
|
|
6
|
+
|
|
7
|
+
return {
|
|
8
|
+
async listen(port) {
|
|
9
|
+
if (typeof Deno === 'undefined') throw new Error(
|
|
10
|
+
'Deno is not installed, please run `deno install -A -f --unstable https://deno.land/x/raiton/cli.ts`'
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
controller = new AbortController()
|
|
14
|
+
Deno.serve({port, signal: controller.signal}, async (req: any) => {
|
|
15
|
+
let body: any
|
|
16
|
+
let status = 200
|
|
17
|
+
const headers = new Headers()
|
|
18
|
+
|
|
19
|
+
await handler(
|
|
20
|
+
{
|
|
21
|
+
method: req.method,
|
|
22
|
+
url: req.url,
|
|
23
|
+
headers: req.headers,
|
|
24
|
+
body: req.body
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
status(code) {
|
|
28
|
+
status = code
|
|
29
|
+
},
|
|
30
|
+
header(name, value) {
|
|
31
|
+
headers.set(name, value)
|
|
32
|
+
},
|
|
33
|
+
send(value: any) {
|
|
34
|
+
body = value
|
|
35
|
+
},
|
|
36
|
+
text(text: string | Buffer) {
|
|
37
|
+
body = text
|
|
38
|
+
},
|
|
39
|
+
json(json: any) {
|
|
40
|
+
body = JSON.stringify(json)
|
|
41
|
+
},
|
|
42
|
+
}
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
return new Response(body, {status, headers})
|
|
46
|
+
})
|
|
47
|
+
},
|
|
48
|
+
async close() {
|
|
49
|
+
controller.abort()
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type {RuntimeAdapterInterface, RuntimeHandlerCallable, RuntimeInterface, RuntimeServerInterface} from "@/types";
|
|
2
|
+
import {RuntimeType} from "@/sdk/enums/runtime.enum";
|
|
3
|
+
import {nodeRuntime} from "@/sdk/runtime/node/server";
|
|
4
|
+
import {bunRuntime} from "@/sdk/runtime/bun/server";
|
|
5
|
+
import {denoRuntime} from "@/sdk/runtime/deno/server";
|
|
6
|
+
import {webRuntime} from "@/sdk/runtime/web/server";
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
export class Runtime implements RuntimeInterface {
|
|
10
|
+
constructor(
|
|
11
|
+
public readonly type: RuntimeType = RuntimeType.Node
|
|
12
|
+
) {
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
get isNode(): boolean {
|
|
16
|
+
return this.type === RuntimeType.Node;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
get isDeno(): boolean {
|
|
20
|
+
return this.type === RuntimeType.Deno;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
get isWeb(): boolean {
|
|
24
|
+
return this.type === RuntimeType.Web;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
get isBun(): boolean {
|
|
28
|
+
return this.type === RuntimeType.Bun;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
adapter(): RuntimeAdapterInterface {
|
|
32
|
+
switch (this.type) {
|
|
33
|
+
case RuntimeType.Node:
|
|
34
|
+
return nodeRuntime
|
|
35
|
+
case RuntimeType.Bun:
|
|
36
|
+
return bunRuntime
|
|
37
|
+
case RuntimeType.Deno:
|
|
38
|
+
return denoRuntime
|
|
39
|
+
case RuntimeType.Web:
|
|
40
|
+
return webRuntime
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
createServer(handler: RuntimeHandlerCallable): RuntimeServerInterface {
|
|
45
|
+
return this.adapter().createServer(handler)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import http from 'node:http'
|
|
2
|
+
import {
|
|
3
|
+
RuntimeAdapterInterface,
|
|
4
|
+
RuntimeRequestInterface,
|
|
5
|
+
RuntimeReplyInterface
|
|
6
|
+
} from '@/types'
|
|
7
|
+
|
|
8
|
+
export const nodeRuntime: RuntimeAdapterInterface = {
|
|
9
|
+
createServer(handler) {
|
|
10
|
+
const server = http.createServer(async (req, res) => {
|
|
11
|
+
const runtimeReq: RuntimeRequestInterface = {
|
|
12
|
+
method: req.method || 'GET',
|
|
13
|
+
url: req.url || '/',
|
|
14
|
+
headers: new Headers(req.headers as any),
|
|
15
|
+
body: req as any,
|
|
16
|
+
remoteAddress: req.socket.remoteAddress
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const runtimeReply: RuntimeReplyInterface = {
|
|
20
|
+
status(code) {
|
|
21
|
+
res.statusCode = code
|
|
22
|
+
},
|
|
23
|
+
header(name, value) {
|
|
24
|
+
res.setHeader(name, value)
|
|
25
|
+
},
|
|
26
|
+
send(body: any) {
|
|
27
|
+
if (body === undefined) {
|
|
28
|
+
res.end()
|
|
29
|
+
} else if (typeof body === 'string' || Buffer.isBuffer(body)) {
|
|
30
|
+
res.end(body)
|
|
31
|
+
} else {
|
|
32
|
+
res.setHeader('content-type', 'application/json')
|
|
33
|
+
res.end(JSON.stringify(body))
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
text(text: string|Buffer) {
|
|
37
|
+
res.end(text)
|
|
38
|
+
},
|
|
39
|
+
json(json: any) {
|
|
40
|
+
res.end(JSON.stringify(json))
|
|
41
|
+
},
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
await handler(runtimeReq, runtimeReply)
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
return {
|
|
48
|
+
listen(port) {
|
|
49
|
+
return new Promise((resolve) =>
|
|
50
|
+
server.listen(port, resolve)
|
|
51
|
+
)
|
|
52
|
+
},
|
|
53
|
+
close() {
|
|
54
|
+
return new Promise((resolve, reject) =>
|
|
55
|
+
server.close(err => err ? reject(err) : resolve())
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|