elysia 1.4.28 → 2.0.0-beta.0
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/dist/_virtual/_rolldown/runtime.js +29 -0
- package/dist/_virtual/_rolldown/runtime.mjs +38 -0
- package/dist/adapter/bun/index.d.ts +7 -6
- package/dist/adapter/bun/index.js +219 -380
- package/dist/adapter/bun/index.mjs +217 -382
- package/dist/adapter/constants.d.ts +6 -0
- package/dist/adapter/constants.js +10 -0
- package/dist/adapter/constants.mjs +9 -0
- package/dist/adapter/default-headers.d.ts +4 -0
- package/dist/adapter/default-headers.js +7 -0
- package/dist/adapter/default-headers.mjs +5 -0
- package/dist/adapter/index.d.ts +8 -1
- package/dist/adapter/index.js +7 -14
- package/dist/adapter/index.mjs +5 -0
- package/dist/adapter/origin.d.ts +63 -0
- package/dist/adapter/origin.js +64 -0
- package/dist/adapter/origin.mjs +62 -0
- package/dist/adapter/response-ownership.d.ts +5 -0
- package/dist/adapter/response-ownership.js +13 -0
- package/dist/adapter/response-ownership.mjs +10 -0
- package/dist/adapter/skip-clone.d.ts +4 -0
- package/dist/adapter/skip-clone.js +7 -0
- package/dist/adapter/skip-clone.mjs +5 -0
- package/dist/adapter/types.d.ts +50 -125
- package/dist/adapter/types.js +1 -14
- package/dist/adapter/types.mjs +1 -0
- package/dist/adapter/utils.d.ts +47 -19
- package/dist/adapter/utils.js +561 -311
- package/dist/adapter/utils.mjs +551 -283
- package/dist/adapter/web-standard/handler.d.ts +11 -9
- package/dist/adapter/web-standard/handler.js +146 -415
- package/dist/adapter/web-standard/handler.mjs +144 -400
- package/dist/adapter/web-standard/index.d.ts +5 -2
- package/dist/adapter/web-standard/index.js +68 -161
- package/dist/adapter/web-standard/index.mjs +68 -146
- package/dist/adapter/web-standard/utils.d.ts +4 -0
- package/dist/adapter/web-standard/utils.js +153 -0
- package/dist/adapter/web-standard/utils.mjs +152 -0
- package/dist/base.d.ts +898 -0
- package/dist/base.js +1564 -0
- package/dist/base.mjs +1561 -0
- package/dist/compile/analysis-cache.d.ts +6 -0
- package/dist/compile/analysis-cache.js +12 -0
- package/dist/compile/analysis-cache.mjs +11 -0
- package/dist/compile/aot-capture.d.ts +24 -0
- package/dist/compile/aot-capture.js +376 -0
- package/dist/compile/aot-capture.mjs +365 -0
- package/dist/compile/aot-emit.d.ts +29 -0
- package/dist/compile/aot-emit.js +107 -0
- package/dist/compile/aot-emit.mjs +101 -0
- package/dist/compile/aot-reconstruct.d.ts +30 -0
- package/dist/compile/aot-reconstruct.js +156 -0
- package/dist/compile/aot-reconstruct.mjs +147 -0
- package/dist/compile/aot.d.ts +287 -0
- package/dist/compile/aot.js +220 -0
- package/dist/compile/aot.mjs +200 -0
- package/dist/compile/handler/descriptor.d.ts +77 -0
- package/dist/compile/handler/descriptor.js +199 -0
- package/dist/compile/handler/descriptor.mjs +194 -0
- package/dist/compile/handler/frozen-validator.d.ts +39 -0
- package/dist/compile/handler/frozen-validator.js +319 -0
- package/dist/compile/handler/frozen-validator.mjs +313 -0
- package/dist/compile/handler/index.d.ts +19 -0
- package/dist/compile/handler/index.js +379 -0
- package/dist/compile/handler/index.mjs +371 -0
- package/dist/compile/handler/jit.d.ts +43 -0
- package/dist/compile/handler/jit.js +536 -0
- package/dist/compile/handler/jit.mjs +532 -0
- package/dist/compile/handler/params.d.ts +28 -0
- package/dist/compile/handler/params.js +78 -0
- package/dist/compile/handler/params.mjs +76 -0
- package/dist/compile/handler/reconstruct.d.ts +12 -0
- package/dist/compile/handler/reconstruct.js +50 -0
- package/dist/compile/handler/reconstruct.mjs +49 -0
- package/dist/compile/handler/utils.d.ts +45 -0
- package/dist/compile/handler/utils.js +514 -0
- package/dist/compile/handler/utils.mjs +498 -0
- package/dist/compile/jit-probe.d.ts +15 -0
- package/dist/compile/jit-probe.js +28 -0
- package/dist/compile/jit-probe.mjs +26 -0
- package/dist/compile/lexer.d.ts +7 -0
- package/dist/compile/lexer.js +53 -0
- package/dist/compile/lexer.mjs +48 -0
- package/dist/compile/utils.d.ts +8 -0
- package/dist/compile/utils.js +23 -0
- package/dist/compile/utils.mjs +19 -0
- package/dist/compiled.d.ts +17 -0
- package/dist/compiled.js +20 -0
- package/dist/compiled.mjs +16 -0
- package/dist/constants.d.ts +137 -0
- package/dist/constants.js +96 -0
- package/dist/constants.mjs +88 -0
- package/dist/context.d.ts +86 -129
- package/dist/context.js +110 -13
- package/dist/context.mjs +108 -0
- package/dist/cookie/config.d.ts +31 -0
- package/dist/cookie/config.js +98 -0
- package/dist/cookie/config.mjs +95 -0
- package/dist/cookie/cookie.d.ts +26 -0
- package/dist/cookie/cookie.js +105 -0
- package/dist/cookie/cookie.mjs +104 -0
- package/dist/cookie/crypto.d.ts +20 -0
- package/dist/cookie/crypto.js +168 -0
- package/dist/cookie/crypto.mjs +151 -0
- package/dist/cookie/error.d.ts +17 -0
- package/dist/cookie/error.js +25 -0
- package/dist/cookie/error.mjs +24 -0
- package/dist/cookie/index.d.ts +7 -0
- package/dist/cookie/index.js +13 -0
- package/dist/cookie/index.mjs +7 -0
- package/dist/cookie/lib.d.ts +7 -0
- package/dist/cookie/lib.js +76 -0
- package/dist/cookie/lib.mjs +74 -0
- package/dist/cookie/serialize.d.ts +6 -0
- package/dist/cookie/serialize.js +32 -0
- package/dist/cookie/serialize.mjs +31 -0
- package/dist/cookie/types.d.ts +113 -0
- package/dist/cookie/types.js +1 -0
- package/dist/cookie/types.mjs +1 -0
- package/dist/cookie/utils.d.ts +25 -0
- package/dist/cookie/utils.js +182 -0
- package/dist/cookie/utils.mjs +171 -0
- package/dist/error.d.ts +226 -188
- package/dist/error.js +519 -357
- package/dist/error.mjs +503 -327
- package/dist/generation.d.ts +30 -0
- package/dist/generation.js +23 -0
- package/dist/generation.mjs +17 -0
- package/dist/handler/error.d.ts +7 -0
- package/dist/handler/error.js +105 -0
- package/dist/handler/error.mjs +104 -0
- package/dist/handler/fetch.d.ts +8 -0
- package/dist/handler/fetch.js +371 -0
- package/dist/handler/fetch.mjs +367 -0
- package/dist/handler/index.d.ts +2 -0
- package/dist/handler/index.js +5 -0
- package/dist/handler/index.mjs +3 -0
- package/dist/handler/utils.d.ts +15 -0
- package/dist/handler/utils.js +48 -0
- package/dist/handler/utils.mjs +42 -0
- package/dist/index.d.ts +23 -2198
- package/dist/index.js +62 -1948
- package/dist/index.mjs +20 -1986
- package/dist/memory.d.ts +4 -0
- package/dist/memory.js +17 -0
- package/dist/memory.mjs +16 -0
- package/dist/package.js +11 -0
- package/dist/package.mjs +5 -0
- package/dist/parse-query.d.ts +7 -9
- package/dist/parse-query.js +154 -164
- package/dist/parse-query.mjs +150 -133
- package/dist/plugin/aot/bun.d.ts +26 -0
- package/dist/plugin/aot/bun.js +35 -0
- package/dist/plugin/aot/bun.mjs +34 -0
- package/dist/plugin/aot/core.d.ts +291 -0
- package/dist/plugin/aot/core.js +505 -0
- package/dist/plugin/aot/core.mjs +481 -0
- package/dist/plugin/aot/esbuild.d.ts +28 -0
- package/dist/plugin/aot/esbuild.js +48 -0
- package/dist/plugin/aot/esbuild.mjs +46 -0
- package/dist/plugin/aot/hooks.d.ts +28 -0
- package/dist/plugin/aot/hooks.js +114 -0
- package/dist/plugin/aot/hooks.mjs +112 -0
- package/dist/plugin/aot/rspack-loader.d.ts +23 -0
- package/dist/plugin/aot/rspack-loader.js +44 -0
- package/dist/plugin/aot/rspack-loader.mjs +40 -0
- package/dist/plugin/aot/rspack.d.ts +23 -0
- package/dist/plugin/aot/rspack.js +85 -0
- package/dist/plugin/aot/rspack.mjs +82 -0
- package/dist/plugin/aot/source.d.ts +60 -0
- package/dist/plugin/aot/source.js +422 -0
- package/dist/plugin/aot/source.mjs +418 -0
- package/dist/plugin/aot/treeshake.d.ts +4 -0
- package/dist/plugin/aot/treeshake.js +95 -0
- package/dist/plugin/aot/treeshake.mjs +94 -0
- package/dist/plugin/aot/unplugin.d.ts +50 -0
- package/dist/plugin/aot/unplugin.js +64 -0
- package/dist/plugin/aot/unplugin.mjs +62 -0
- package/dist/plugin/aot/vite.d.ts +30 -0
- package/dist/plugin/aot/vite.js +34 -0
- package/dist/plugin/aot/vite.mjs +33 -0
- package/dist/plugin/aot/worker.d.ts +1 -0
- package/dist/plugin/aot/worker.js +28 -0
- package/dist/plugin/aot/worker.mjs +27 -0
- package/dist/plugin/auto-head.d.ts +6 -0
- package/dist/plugin/auto-head.js +38 -0
- package/dist/plugin/auto-head.mjs +36 -0
- package/dist/plugin/trace.d.ts +10 -0
- package/dist/plugin/trace.js +39 -0
- package/dist/plugin/trace.mjs +36 -0
- package/dist/plugin/websocket.d.ts +6 -0
- package/dist/plugin/websocket.js +61 -0
- package/dist/plugin/websocket.mjs +60 -0
- package/dist/route-table.d.ts +28 -0
- package/dist/route-table.js +64 -0
- package/dist/route-table.mjs +61 -0
- package/dist/schema-snapshot.d.ts +9 -0
- package/dist/schema-snapshot.js +271 -0
- package/dist/schema-snapshot.mjs +269 -0
- package/dist/sucrose.d.ts +28 -63
- package/dist/sucrose.js +814 -306
- package/dist/sucrose.mjs +805 -274
- package/dist/trace.d.ts +145 -130
- package/dist/trace.js +387 -135
- package/dist/trace.mjs +385 -113
- package/dist/type/bridge-live.d.ts +15 -0
- package/dist/type/bridge-live.js +39 -0
- package/dist/type/bridge-live.mjs +17 -0
- package/dist/type/bridge.d.ts +56 -0
- package/dist/type/bridge.js +180 -0
- package/dist/type/bridge.mjs +63 -0
- package/dist/type/coerce-plan.d.ts +38 -0
- package/dist/type/coerce-plan.js +107 -0
- package/dist/type/coerce-plan.mjs +98 -0
- package/dist/type/coerce.d.ts +43 -0
- package/dist/type/coerce.js +351 -0
- package/dist/type/coerce.mjs +339 -0
- package/dist/type/compat.d.ts +8 -0
- package/dist/type/compat.js +46 -0
- package/dist/type/compat.mjs +44 -0
- package/dist/type/constants.d.ts +25 -0
- package/dist/type/constants.js +36 -0
- package/dist/type/constants.mjs +32 -0
- package/dist/type/elysia/accelerate.d.ts +6 -0
- package/dist/type/elysia/accelerate.js +12 -0
- package/dist/type/elysia/accelerate.mjs +10 -0
- package/dist/type/elysia/array-buffer.d.ts +6 -0
- package/dist/type/elysia/array-buffer.js +27 -0
- package/dist/type/elysia/array-buffer.mjs +25 -0
- package/dist/type/elysia/array-string.d.ts +7 -0
- package/dist/type/elysia/array-string.js +28 -0
- package/dist/type/elysia/array-string.mjs +26 -0
- package/dist/type/elysia/array.d.ts +6 -0
- package/dist/type/elysia/array.js +32 -0
- package/dist/type/elysia/array.mjs +31 -0
- package/dist/type/elysia/boolean-string.d.ts +6 -0
- package/dist/type/elysia/boolean-string.js +24 -0
- package/dist/type/elysia/boolean-string.mjs +22 -0
- package/dist/type/elysia/boolean.d.ts +6 -0
- package/dist/type/elysia/boolean.js +20 -0
- package/dist/type/elysia/boolean.mjs +18 -0
- package/dist/type/elysia/cookie.d.ts +15 -0
- package/dist/type/elysia/cookie.js +51 -0
- package/dist/type/elysia/cookie.mjs +50 -0
- package/dist/type/elysia/date.d.ts +7 -0
- package/dist/type/elysia/date.js +98 -0
- package/dist/type/elysia/date.mjs +96 -0
- package/dist/type/elysia/file-type.d.ts +25 -0
- package/dist/type/elysia/file-type.js +81 -0
- package/dist/type/elysia/file-type.mjs +71 -0
- package/dist/type/elysia/file.d.ts +9 -0
- package/dist/type/elysia/file.js +64 -0
- package/dist/type/elysia/file.mjs +48 -0
- package/dist/type/elysia/files.d.ts +8 -0
- package/dist/type/elysia/files.js +45 -0
- package/dist/type/elysia/files.mjs +43 -0
- package/dist/type/elysia/form.d.ts +8 -0
- package/dist/type/elysia/form.js +17 -0
- package/dist/type/elysia/form.mjs +15 -0
- package/dist/type/elysia/integer-string.d.ts +7 -0
- package/dist/type/elysia/integer-string.js +40 -0
- package/dist/type/elysia/integer-string.mjs +38 -0
- package/dist/type/elysia/integer.d.ts +6 -0
- package/dist/type/elysia/integer.js +20 -0
- package/dist/type/elysia/integer.mjs +18 -0
- package/dist/type/elysia/intersect.d.ts +6 -0
- package/dist/type/elysia/intersect.js +20 -0
- package/dist/type/elysia/intersect.mjs +19 -0
- package/dist/type/elysia/maybe-empty.d.ts +7 -0
- package/dist/type/elysia/maybe-empty.js +21 -0
- package/dist/type/elysia/maybe-empty.mjs +19 -0
- package/dist/type/elysia/no-validate.d.ts +6 -0
- package/dist/type/elysia/no-validate.js +9 -0
- package/dist/type/elysia/no-validate.mjs +8 -0
- package/dist/type/elysia/nullable.d.ts +7 -0
- package/dist/type/elysia/nullable.js +15 -0
- package/dist/type/elysia/nullable.mjs +13 -0
- package/dist/type/elysia/number.d.ts +6 -0
- package/dist/type/elysia/number.js +20 -0
- package/dist/type/elysia/number.mjs +18 -0
- package/dist/type/elysia/numeric-enum.d.ts +11 -0
- package/dist/type/elysia/numeric-enum.js +26 -0
- package/dist/type/elysia/numeric-enum.mjs +24 -0
- package/dist/type/elysia/numeric.d.ts +7 -0
- package/dist/type/elysia/numeric.js +62 -0
- package/dist/type/elysia/numeric.mjs +60 -0
- package/dist/type/elysia/object-string.d.ts +7 -0
- package/dist/type/elysia/object-string.js +28 -0
- package/dist/type/elysia/object-string.mjs +26 -0
- package/dist/type/elysia/object.d.ts +6 -0
- package/dist/type/elysia/object.js +47 -0
- package/dist/type/elysia/object.mjs +46 -0
- package/dist/type/elysia/optional.d.ts +6 -0
- package/dist/type/elysia/optional.js +22 -0
- package/dist/type/elysia/optional.mjs +21 -0
- package/dist/type/elysia/string.d.ts +6 -0
- package/dist/type/elysia/string.js +43 -0
- package/dist/type/elysia/string.mjs +41 -0
- package/dist/type/elysia/uint8-array.d.ts +6 -0
- package/dist/type/elysia/uint8-array.js +27 -0
- package/dist/type/elysia/uint8-array.mjs +25 -0
- package/dist/type/elysia/union-enum.d.ts +8 -0
- package/dist/type/elysia/union-enum.js +31 -0
- package/dist/type/elysia/union-enum.mjs +29 -0
- package/dist/type/elysia/union.d.ts +6 -0
- package/dist/type/elysia/union.js +20 -0
- package/dist/type/elysia/union.mjs +19 -0
- package/dist/type/elysia/utils.d.ts +53 -0
- package/dist/type/elysia/utils.js +98 -0
- package/dist/type/elysia/utils.mjs +88 -0
- package/dist/type/exports.d.ts +36 -0
- package/dist/type/exports.js +68 -0
- package/dist/type/exports.mjs +36 -0
- package/dist/type/index.d.ts +13 -0
- package/dist/type/index.js +81 -0
- package/dist/type/index.mjs +68 -0
- package/dist/type/shared.d.ts +27 -0
- package/dist/type/shared.js +171 -0
- package/dist/type/shared.mjs +161 -0
- package/dist/type/types.d.ts +206 -0
- package/dist/type/types.js +1 -0
- package/dist/type/types.mjs +1 -0
- package/dist/type/utils.d.ts +7 -0
- package/dist/type/utils.js +43 -0
- package/dist/type/utils.mjs +41 -0
- package/dist/type/validator/clean-safe.d.ts +8 -0
- package/dist/type/validator/clean-safe.js +82 -0
- package/dist/type/validator/clean-safe.mjs +77 -0
- package/dist/type/validator/custom-error.d.ts +10 -0
- package/dist/type/validator/custom-error.js +191 -0
- package/dist/type/validator/custom-error.mjs +188 -0
- package/dist/type/validator/default-precompute.d.ts +26 -0
- package/dist/type/validator/default-precompute.js +432 -0
- package/dist/type/validator/default-precompute.mjs +421 -0
- package/dist/type/validator/exact-mirror.d.ts +7 -0
- package/dist/type/validator/exact-mirror.js +19 -0
- package/dist/type/validator/exact-mirror.mjs +15 -0
- package/dist/type/validator/frozen-check.d.ts +11 -0
- package/dist/type/validator/frozen-check.js +20 -0
- package/dist/type/validator/frozen-check.mjs +19 -0
- package/dist/type/validator/index.d.ts +32 -0
- package/dist/type/validator/index.js +657 -0
- package/dist/type/validator/index.mjs +651 -0
- package/dist/type/validator/string-codec-aot.d.ts +8 -0
- package/dist/type/validator/string-codec-aot.js +68 -0
- package/dist/type/validator/string-codec-aot.mjs +66 -0
- package/dist/type/validator/validator-cache.d.ts +26 -0
- package/dist/type/validator/validator-cache.js +247 -0
- package/dist/type/validator/validator-cache.mjs +242 -0
- package/dist/types.d.ts +938 -1235
- package/dist/types.js +1 -14
- package/dist/types.mjs +1 -0
- package/dist/universal/constants.d.ts +6 -0
- package/dist/universal/constants.js +19 -0
- package/dist/universal/constants.mjs +15 -0
- package/dist/universal/env.d.ts +5 -1
- package/dist/universal/env.js +12 -26
- package/dist/universal/env.mjs +10 -5
- package/dist/universal/file.d.ts +55 -86
- package/dist/universal/file.js +116 -157
- package/dist/universal/file.mjs +111 -132
- package/dist/universal/index.d.ts +5 -3
- package/dist/universal/index.js +8 -27
- package/dist/universal/index.mjs +4 -5
- package/dist/universal/is-production.d.ts +5 -0
- package/dist/universal/is-production.js +10 -0
- package/dist/universal/is-production.mjs +8 -0
- package/dist/universal/server.d.ts +318 -313
- package/dist/universal/server.js +1 -14
- package/dist/universal/server.mjs +1 -0
- package/dist/utils.d.ts +162 -191
- package/dist/utils.js +732 -693
- package/dist/utils.mjs +683 -631
- package/dist/validator/index.d.ts +63 -0
- package/dist/validator/index.js +299 -0
- package/dist/validator/index.mjs +296 -0
- package/dist/validator/route.d.ts +32 -0
- package/dist/validator/route.js +51 -0
- package/dist/validator/route.mjs +50 -0
- package/dist/ws/context.d.ts +49 -0
- package/dist/ws/context.js +152 -0
- package/dist/ws/context.mjs +150 -0
- package/dist/ws/index.d.ts +5 -77
- package/dist/ws/index.js +11 -180
- package/dist/ws/index.mjs +5 -157
- package/dist/ws/parser.d.ts +5 -0
- package/dist/ws/parser.js +69 -0
- package/dist/ws/parser.mjs +66 -0
- package/dist/ws/route.d.ts +16 -0
- package/dist/ws/route.js +560 -0
- package/dist/ws/route.mjs +554 -0
- package/dist/ws/types.d.ts +154 -57
- package/dist/ws/types.js +1 -14
- package/dist/ws/types.mjs +1 -0
- package/package.json +179 -120
- package/bunfig.toml +0 -2
- package/dist/adapter/bun/compose.d.ts +0 -3
- package/dist/adapter/bun/compose.js +0 -90
- package/dist/adapter/bun/compose.mjs +0 -74
- package/dist/adapter/bun/handler-native.d.ts +0 -3
- package/dist/adapter/bun/handler-native.js +0 -42
- package/dist/adapter/bun/handler-native.mjs +0 -22
- package/dist/adapter/bun/handler.d.ts +0 -7
- package/dist/adapter/bun/handler.js +0 -363
- package/dist/adapter/bun/handler.mjs +0 -346
- package/dist/adapter/cloudflare-worker/index.d.ts +0 -20
- package/dist/adapter/cloudflare-worker/index.js +0 -59
- package/dist/adapter/cloudflare-worker/index.mjs +0 -39
- package/dist/compose.d.ts +0 -30
- package/dist/compose.js +0 -1324
- package/dist/compose.mjs +0 -1336
- package/dist/cookies.d.ts +0 -158
- package/dist/cookies.js +0 -250
- package/dist/cookies.mjs +0 -221
- package/dist/dynamic-handle.d.ts +0 -15
- package/dist/dynamic-handle.js +0 -521
- package/dist/dynamic-handle.mjs +0 -509
- package/dist/formats.d.ts +0 -79
- package/dist/formats.js +0 -153
- package/dist/formats.mjs +0 -132
- package/dist/manifest.d.ts +0 -0
- package/dist/manifest.js +0 -1
- package/dist/manifest.mjs +0 -0
- package/dist/replace-schema.d.ts +0 -60
- package/dist/replace-schema.js +0 -140
- package/dist/replace-schema.mjs +0 -115
- package/dist/schema.d.ts +0 -107
- package/dist/schema.js +0 -833
- package/dist/schema.mjs +0 -814
- package/dist/type-system/format.d.ts +0 -55
- package/dist/type-system/format.js +0 -197
- package/dist/type-system/format.mjs +0 -175
- package/dist/type-system/index.d.ts +0 -45
- package/dist/type-system/index.js +0 -406
- package/dist/type-system/index.mjs +0 -394
- package/dist/type-system/types.d.ts +0 -155
- package/dist/type-system/types.js +0 -14
- package/dist/type-system/types.mjs +0 -0
- package/dist/type-system/utils.d.ts +0 -62
- package/dist/type-system/utils.js +0 -141
- package/dist/type-system/utils.mjs +0 -111
- package/dist/universal/request.d.ts +0 -29
- package/dist/universal/request.js +0 -126
- package/dist/universal/request.mjs +0 -105
- package/dist/universal/types.d.ts +0 -124
- package/dist/universal/types.js +0 -41
- package/dist/universal/types.mjs +0 -19
- package/dist/universal/utils.d.ts +0 -3
- package/dist/universal/utils.js +0 -41
- package/dist/universal/utils.mjs +0 -18
- package/dist/ws/bun.d.ts +0 -419
- package/dist/ws/bun.js +0 -14
- package/dist/ws/bun.mjs +0 -0
- package/knip.json +0 -22
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_plugin_aot_core = require('./core.js');
|
|
3
|
+
const require_plugin_aot_treeshake = require('./treeshake.js');
|
|
4
|
+
|
|
5
|
+
//#region src/plugin/aot/hooks.ts
|
|
6
|
+
const toPosix = (path) => path.replace(/\\/g, "/");
|
|
7
|
+
const VIRTUAL = "\0elysia/compiled";
|
|
8
|
+
const VIRTUAL_TYPE = "\0elysia/type";
|
|
9
|
+
const createAotPluginHooks = (entry, options) => {
|
|
10
|
+
const entryPath = require_plugin_aot_core.resolveEntry(entry);
|
|
11
|
+
const entryPosix = toPosix(entryPath);
|
|
12
|
+
const entryRealPosix = toPosix(require_plugin_aot_core.realPath(entryPath));
|
|
13
|
+
let entryMatched = false;
|
|
14
|
+
let initial = true;
|
|
15
|
+
const isEntry = (id) => {
|
|
16
|
+
const posix = toPosix(id);
|
|
17
|
+
if (posix === entryPosix || posix === entryRealPosix) return true;
|
|
18
|
+
return toPosix(require_plugin_aot_core.realPath(id)) === entryRealPosix;
|
|
19
|
+
};
|
|
20
|
+
const treeShake = options?.treeShake ?? true;
|
|
21
|
+
let source = "";
|
|
22
|
+
let virtualType;
|
|
23
|
+
let stub = { ...require_plugin_aot_core.NO_STUB };
|
|
24
|
+
let isElysiaModule = (_path) => false;
|
|
25
|
+
return {
|
|
26
|
+
async buildStart() {
|
|
27
|
+
const generated = initial ? await require_plugin_aot_core.generateCompiledArtifacts(entry, options) : await require_plugin_aot_core.generateCompiledArtifactsIsolated(entry, options);
|
|
28
|
+
initial = false;
|
|
29
|
+
source = generated.source;
|
|
30
|
+
stub = generated.stub;
|
|
31
|
+
virtualType = generated.virtualType;
|
|
32
|
+
isElysiaModule = require_plugin_aot_core.makeIsElysiaModule(require_plugin_aot_core.resolveElysiaRoot(entryPath));
|
|
33
|
+
},
|
|
34
|
+
buildEnd() {
|
|
35
|
+
if (!entryMatched) throw new Error(`[elysia-aot] entry "${entry}" never appeared in the Vite module graph. Compiled manifest was not injected. Check that the plugin entry matches a build input.`);
|
|
36
|
+
},
|
|
37
|
+
resolveId(id) {
|
|
38
|
+
if (id === "elysia/compiled") return VIRTUAL;
|
|
39
|
+
if (id === "elysia/type" && virtualType !== void 0) return VIRTUAL_TYPE;
|
|
40
|
+
},
|
|
41
|
+
load(id) {
|
|
42
|
+
if (id === VIRTUAL) return source;
|
|
43
|
+
if (id === VIRTUAL_TYPE) return virtualType;
|
|
44
|
+
},
|
|
45
|
+
async transform(code, id) {
|
|
46
|
+
const cleanId = id.split("?", 1)[0];
|
|
47
|
+
for (const key of Object.keys(require_plugin_aot_core.STUB_SOURCES)) {
|
|
48
|
+
if (!stub[key]) continue;
|
|
49
|
+
for (const { filter, source: stubSource } of require_plugin_aot_core.STUB_SOURCES[key]) if (filter.test(cleanId)) return require_plugin_aot_core.alignStubExtensions(stubSource, cleanId);
|
|
50
|
+
}
|
|
51
|
+
if (stub.adapter !== false && require_plugin_aot_core.ADAPTER_CONSTANTS_FILTER.test(cleanId)) return require_plugin_aot_core.alignStubExtensions(require_plugin_aot_core.adapterConstantsSource(stub.adapter), cleanId);
|
|
52
|
+
if (stub.adapter === "web-standard" && require_plugin_aot_core.ADAPTER_BUN_FILTER.test(cleanId)) return require_plugin_aot_core.alignStubExtensions(require_plugin_aot_core.bunAdapterStubSource, cleanId);
|
|
53
|
+
if (stub.isProduction && require_plugin_aot_core.IS_PRODUCTION_FILTER.test(cleanId)) return require_plugin_aot_core.alignStubExtensions(`export const isProduction = () => true\n`, cleanId);
|
|
54
|
+
let out = code;
|
|
55
|
+
if (treeShake && require_plugin_aot_core.SOURCE_REGEX.test(cleanId) && !cleanId.includes("node_modules")) out = require_plugin_aot_treeshake.rewriteTypeImport(out);
|
|
56
|
+
if (stub.isProduction && isElysiaModule(cleanId)) out = require_plugin_aot_core.rewriteIsProductionCalls(out);
|
|
57
|
+
if (isEntry(cleanId)) {
|
|
58
|
+
entryMatched = true;
|
|
59
|
+
out = `import 'elysia/compiled'\n${out}`;
|
|
60
|
+
}
|
|
61
|
+
return out === code ? void 0 : out;
|
|
62
|
+
},
|
|
63
|
+
isTransformCandidate(id) {
|
|
64
|
+
const cleanId = id.split("?", 1)[0];
|
|
65
|
+
if (isEntry(cleanId)) return true;
|
|
66
|
+
if (require_plugin_aot_core.ELYSIA_MODULE_FILTER.test(cleanId) || require_plugin_aot_core.ADAPTER_CONSTANTS_FILTER.test(cleanId) || require_plugin_aot_core.ADAPTER_BUN_FILTER.test(cleanId) || require_plugin_aot_core.IS_PRODUCTION_FILTER.test(cleanId)) return true;
|
|
67
|
+
for (const key of Object.keys(require_plugin_aot_core.STUB_SOURCES)) for (const { filter } of require_plugin_aot_core.STUB_SOURCES[key]) if (filter.test(cleanId)) return true;
|
|
68
|
+
if (require_plugin_aot_core.SOURCE_REGEX.test(cleanId) && !cleanId.includes("node_modules")) return true;
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
const resolveLoader = (path) => {
|
|
74
|
+
const ext = path.slice(path.lastIndexOf("."));
|
|
75
|
+
return ext === ".js" || ext === ".mjs" || ext === ".cjs" ? "js" : ext === ".jsx" ? "jsx" : ext === ".tsx" ? "tsx" : "ts";
|
|
76
|
+
};
|
|
77
|
+
async function setupAotOnLoad(build, hooks, { readText, resolveDir }) {
|
|
78
|
+
await hooks.buildStart();
|
|
79
|
+
const virtualLoad = (id) => () => ({
|
|
80
|
+
contents: hooks.load(id),
|
|
81
|
+
loader: "js",
|
|
82
|
+
...resolveDir !== void 0 ? { resolveDir } : {}
|
|
83
|
+
});
|
|
84
|
+
build.onResolve({ filter: /^elysia\/compiled$/ }, () => ({
|
|
85
|
+
path: "manifest",
|
|
86
|
+
namespace: "elysia-aot"
|
|
87
|
+
}));
|
|
88
|
+
build.onLoad({
|
|
89
|
+
filter: /.*/,
|
|
90
|
+
namespace: "elysia-aot"
|
|
91
|
+
}, virtualLoad(VIRTUAL));
|
|
92
|
+
build.onResolve({ filter: /^elysia\/type$/ }, () => hooks.resolveId("elysia/type") !== void 0 ? {
|
|
93
|
+
path: "elysia-type",
|
|
94
|
+
namespace: "elysia-aot-type"
|
|
95
|
+
} : void 0);
|
|
96
|
+
build.onLoad({
|
|
97
|
+
filter: /.*/,
|
|
98
|
+
namespace: "elysia-aot-type"
|
|
99
|
+
}, virtualLoad(VIRTUAL_TYPE));
|
|
100
|
+
build.onLoad({ filter: require_plugin_aot_core.SOURCE_REGEX }, async (args) => {
|
|
101
|
+
if (!hooks.isTransformCandidate(args.path)) return void 0;
|
|
102
|
+
const original = await readText(args.path);
|
|
103
|
+
const contents = await hooks.transform(original, args.path);
|
|
104
|
+
if (contents === void 0) return void 0;
|
|
105
|
+
return {
|
|
106
|
+
contents,
|
|
107
|
+
loader: resolveLoader(args.path)
|
|
108
|
+
};
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
//#endregion
|
|
113
|
+
exports.createAotPluginHooks = createAotPluginHooks;
|
|
114
|
+
exports.setupAotOnLoad = setupAotOnLoad;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { ADAPTER_BUN_FILTER, ADAPTER_CONSTANTS_FILTER, ELYSIA_MODULE_FILTER, IS_PRODUCTION_FILTER, NO_STUB, SOURCE_REGEX, STUB_SOURCES, adapterConstantsSource, alignStubExtensions, bunAdapterStubSource, generateCompiledArtifacts, generateCompiledArtifactsIsolated, makeIsElysiaModule, realPath, resolveElysiaRoot, resolveEntry, rewriteIsProductionCalls } from "./core.mjs";
|
|
2
|
+
import { rewriteTypeImport } from "./treeshake.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/plugin/aot/hooks.ts
|
|
5
|
+
const toPosix = (path) => path.replace(/\\/g, "/");
|
|
6
|
+
const VIRTUAL = "\0elysia/compiled";
|
|
7
|
+
const VIRTUAL_TYPE = "\0elysia/type";
|
|
8
|
+
const createAotPluginHooks = (entry, options) => {
|
|
9
|
+
const entryPath = resolveEntry(entry);
|
|
10
|
+
const entryPosix = toPosix(entryPath);
|
|
11
|
+
const entryRealPosix = toPosix(realPath(entryPath));
|
|
12
|
+
let entryMatched = false;
|
|
13
|
+
let initial = true;
|
|
14
|
+
const isEntry = (id) => {
|
|
15
|
+
const posix = toPosix(id);
|
|
16
|
+
if (posix === entryPosix || posix === entryRealPosix) return true;
|
|
17
|
+
return toPosix(realPath(id)) === entryRealPosix;
|
|
18
|
+
};
|
|
19
|
+
const treeShake = options?.treeShake ?? true;
|
|
20
|
+
let source = "";
|
|
21
|
+
let virtualType;
|
|
22
|
+
let stub = { ...NO_STUB };
|
|
23
|
+
let isElysiaModule = (_path) => false;
|
|
24
|
+
return {
|
|
25
|
+
async buildStart() {
|
|
26
|
+
const generated = initial ? await generateCompiledArtifacts(entry, options) : await generateCompiledArtifactsIsolated(entry, options);
|
|
27
|
+
initial = false;
|
|
28
|
+
source = generated.source;
|
|
29
|
+
stub = generated.stub;
|
|
30
|
+
virtualType = generated.virtualType;
|
|
31
|
+
isElysiaModule = makeIsElysiaModule(resolveElysiaRoot(entryPath));
|
|
32
|
+
},
|
|
33
|
+
buildEnd() {
|
|
34
|
+
if (!entryMatched) throw new Error(`[elysia-aot] entry "${entry}" never appeared in the Vite module graph. Compiled manifest was not injected. Check that the plugin entry matches a build input.`);
|
|
35
|
+
},
|
|
36
|
+
resolveId(id) {
|
|
37
|
+
if (id === "elysia/compiled") return VIRTUAL;
|
|
38
|
+
if (id === "elysia/type" && virtualType !== void 0) return VIRTUAL_TYPE;
|
|
39
|
+
},
|
|
40
|
+
load(id) {
|
|
41
|
+
if (id === VIRTUAL) return source;
|
|
42
|
+
if (id === VIRTUAL_TYPE) return virtualType;
|
|
43
|
+
},
|
|
44
|
+
async transform(code, id) {
|
|
45
|
+
const cleanId = id.split("?", 1)[0];
|
|
46
|
+
for (const key of Object.keys(STUB_SOURCES)) {
|
|
47
|
+
if (!stub[key]) continue;
|
|
48
|
+
for (const { filter, source: stubSource } of STUB_SOURCES[key]) if (filter.test(cleanId)) return alignStubExtensions(stubSource, cleanId);
|
|
49
|
+
}
|
|
50
|
+
if (stub.adapter !== false && ADAPTER_CONSTANTS_FILTER.test(cleanId)) return alignStubExtensions(adapterConstantsSource(stub.adapter), cleanId);
|
|
51
|
+
if (stub.adapter === "web-standard" && ADAPTER_BUN_FILTER.test(cleanId)) return alignStubExtensions(bunAdapterStubSource, cleanId);
|
|
52
|
+
if (stub.isProduction && IS_PRODUCTION_FILTER.test(cleanId)) return alignStubExtensions(`export const isProduction = () => true\n`, cleanId);
|
|
53
|
+
let out = code;
|
|
54
|
+
if (treeShake && SOURCE_REGEX.test(cleanId) && !cleanId.includes("node_modules")) out = rewriteTypeImport(out);
|
|
55
|
+
if (stub.isProduction && isElysiaModule(cleanId)) out = rewriteIsProductionCalls(out);
|
|
56
|
+
if (isEntry(cleanId)) {
|
|
57
|
+
entryMatched = true;
|
|
58
|
+
out = `import 'elysia/compiled'\n${out}`;
|
|
59
|
+
}
|
|
60
|
+
return out === code ? void 0 : out;
|
|
61
|
+
},
|
|
62
|
+
isTransformCandidate(id) {
|
|
63
|
+
const cleanId = id.split("?", 1)[0];
|
|
64
|
+
if (isEntry(cleanId)) return true;
|
|
65
|
+
if (ELYSIA_MODULE_FILTER.test(cleanId) || ADAPTER_CONSTANTS_FILTER.test(cleanId) || ADAPTER_BUN_FILTER.test(cleanId) || IS_PRODUCTION_FILTER.test(cleanId)) return true;
|
|
66
|
+
for (const key of Object.keys(STUB_SOURCES)) for (const { filter } of STUB_SOURCES[key]) if (filter.test(cleanId)) return true;
|
|
67
|
+
if (SOURCE_REGEX.test(cleanId) && !cleanId.includes("node_modules")) return true;
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
const resolveLoader = (path) => {
|
|
73
|
+
const ext = path.slice(path.lastIndexOf("."));
|
|
74
|
+
return ext === ".js" || ext === ".mjs" || ext === ".cjs" ? "js" : ext === ".jsx" ? "jsx" : ext === ".tsx" ? "tsx" : "ts";
|
|
75
|
+
};
|
|
76
|
+
async function setupAotOnLoad(build, hooks, { readText, resolveDir }) {
|
|
77
|
+
await hooks.buildStart();
|
|
78
|
+
const virtualLoad = (id) => () => ({
|
|
79
|
+
contents: hooks.load(id),
|
|
80
|
+
loader: "js",
|
|
81
|
+
...resolveDir !== void 0 ? { resolveDir } : {}
|
|
82
|
+
});
|
|
83
|
+
build.onResolve({ filter: /^elysia\/compiled$/ }, () => ({
|
|
84
|
+
path: "manifest",
|
|
85
|
+
namespace: "elysia-aot"
|
|
86
|
+
}));
|
|
87
|
+
build.onLoad({
|
|
88
|
+
filter: /.*/,
|
|
89
|
+
namespace: "elysia-aot"
|
|
90
|
+
}, virtualLoad(VIRTUAL));
|
|
91
|
+
build.onResolve({ filter: /^elysia\/type$/ }, () => hooks.resolveId("elysia/type") !== void 0 ? {
|
|
92
|
+
path: "elysia-type",
|
|
93
|
+
namespace: "elysia-aot-type"
|
|
94
|
+
} : void 0);
|
|
95
|
+
build.onLoad({
|
|
96
|
+
filter: /.*/,
|
|
97
|
+
namespace: "elysia-aot-type"
|
|
98
|
+
}, virtualLoad(VIRTUAL_TYPE));
|
|
99
|
+
build.onLoad({ filter: SOURCE_REGEX }, async (args) => {
|
|
100
|
+
if (!hooks.isTransformCandidate(args.path)) return void 0;
|
|
101
|
+
const original = await readText(args.path);
|
|
102
|
+
const contents = await hooks.transform(original, args.path);
|
|
103
|
+
if (contents === void 0) return void 0;
|
|
104
|
+
return {
|
|
105
|
+
contents,
|
|
106
|
+
loader: resolveLoader(args.path)
|
|
107
|
+
};
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
//#endregion
|
|
112
|
+
export { createAotPluginHooks, setupAotOnLoad };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AotPluginHooks } from "./hooks.js";
|
|
2
|
+
|
|
3
|
+
//#region src/plugin/aot/rspack-loader.d.ts
|
|
4
|
+
declare function registerAotHooks(token: string, hooks: AotPluginHooks): void;
|
|
5
|
+
declare function unregisterAotHooks(token: string): void;
|
|
6
|
+
interface AotLoaderContext {
|
|
7
|
+
resourcePath: string;
|
|
8
|
+
getOptions(): {
|
|
9
|
+
token?: string;
|
|
10
|
+
} | undefined;
|
|
11
|
+
async(): (err: Error | null | undefined, content?: string, sourceMap?: unknown) => void;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* webpack/rspack-style JS loader. Delegates to `hooks.transform`, which returns
|
|
15
|
+
* `undefined` for any module it doesn't rewrite so the loader passes the source through unchanged.
|
|
16
|
+
* `enforce: 'pre'` runs this before the swc/babel loaders, mirroring unplugin's `enforce: 'pre'`.
|
|
17
|
+
*
|
|
18
|
+
* Uses `this.async()` because `hooks.transform` can be async (isolated
|
|
19
|
+
* regeneration in watch flows).
|
|
20
|
+
*/
|
|
21
|
+
declare function elysiaAotLoader(this: AotLoaderContext, source: string): void;
|
|
22
|
+
//#endregion
|
|
23
|
+
export { elysiaAotLoader as default, registerAotHooks, unregisterAotHooks };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
2
|
+
|
|
3
|
+
//#region src/plugin/aot/rspack-loader.ts
|
|
4
|
+
/**
|
|
5
|
+
* Shared, same-process registry mapping an opaque token -> the plugin instance's
|
|
6
|
+
* hooks. rspack loaders run in the same process as the plugin, so the plugin
|
|
7
|
+
* registers its `hooks` under a per-instance token (see `rspack.ts`) and passes
|
|
8
|
+
* the token through the rule's loader `options`; this loader looks it up here.
|
|
9
|
+
*
|
|
10
|
+
* This is the standard "loader can't close over plugin state, so pass a token
|
|
11
|
+
* through options and resolve it from a module-global map" trick. Keyed per
|
|
12
|
+
* plugin instance so concurrent compilers / multiple plugin instances don't
|
|
13
|
+
* clobber each other.
|
|
14
|
+
*/
|
|
15
|
+
const registry = /* @__PURE__ */ new Map();
|
|
16
|
+
function registerAotHooks(token, hooks) {
|
|
17
|
+
registry.set(token, hooks);
|
|
18
|
+
}
|
|
19
|
+
function unregisterAotHooks(token) {
|
|
20
|
+
registry.delete(token);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* webpack/rspack-style JS loader. Delegates to `hooks.transform`, which returns
|
|
24
|
+
* `undefined` for any module it doesn't rewrite so the loader passes the source through unchanged.
|
|
25
|
+
* `enforce: 'pre'` runs this before the swc/babel loaders, mirroring unplugin's `enforce: 'pre'`.
|
|
26
|
+
*
|
|
27
|
+
* Uses `this.async()` because `hooks.transform` can be async (isolated
|
|
28
|
+
* regeneration in watch flows).
|
|
29
|
+
*/
|
|
30
|
+
function elysiaAotLoader(source) {
|
|
31
|
+
const callback = this.async();
|
|
32
|
+
const token = this.getOptions()?.token;
|
|
33
|
+
const hooks = token ? registry.get(token) : void 0;
|
|
34
|
+
if (!hooks) {
|
|
35
|
+
callback(null, source);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
Promise.resolve(hooks.transform(source, this.resourcePath)).then((out) => callback(null, out === void 0 ? source : out), (error) => callback(error));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//#endregion
|
|
42
|
+
exports.default = elysiaAotLoader;
|
|
43
|
+
exports.registerAotHooks = registerAotHooks;
|
|
44
|
+
exports.unregisterAotHooks = unregisterAotHooks;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
//#region src/plugin/aot/rspack-loader.ts
|
|
2
|
+
/**
|
|
3
|
+
* Shared, same-process registry mapping an opaque token -> the plugin instance's
|
|
4
|
+
* hooks. rspack loaders run in the same process as the plugin, so the plugin
|
|
5
|
+
* registers its `hooks` under a per-instance token (see `rspack.ts`) and passes
|
|
6
|
+
* the token through the rule's loader `options`; this loader looks it up here.
|
|
7
|
+
*
|
|
8
|
+
* This is the standard "loader can't close over plugin state, so pass a token
|
|
9
|
+
* through options and resolve it from a module-global map" trick. Keyed per
|
|
10
|
+
* plugin instance so concurrent compilers / multiple plugin instances don't
|
|
11
|
+
* clobber each other.
|
|
12
|
+
*/
|
|
13
|
+
const registry = /* @__PURE__ */ new Map();
|
|
14
|
+
function registerAotHooks(token, hooks) {
|
|
15
|
+
registry.set(token, hooks);
|
|
16
|
+
}
|
|
17
|
+
function unregisterAotHooks(token) {
|
|
18
|
+
registry.delete(token);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* webpack/rspack-style JS loader. Delegates to `hooks.transform`, which returns
|
|
22
|
+
* `undefined` for any module it doesn't rewrite so the loader passes the source through unchanged.
|
|
23
|
+
* `enforce: 'pre'` runs this before the swc/babel loaders, mirroring unplugin's `enforce: 'pre'`.
|
|
24
|
+
*
|
|
25
|
+
* Uses `this.async()` because `hooks.transform` can be async (isolated
|
|
26
|
+
* regeneration in watch flows).
|
|
27
|
+
*/
|
|
28
|
+
function elysiaAotLoader(source) {
|
|
29
|
+
const callback = this.async();
|
|
30
|
+
const token = this.getOptions()?.token;
|
|
31
|
+
const hooks = token ? registry.get(token) : void 0;
|
|
32
|
+
if (!hooks) {
|
|
33
|
+
callback(null, source);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
Promise.resolve(hooks.transform(source, this.resourcePath)).then((out) => callback(null, out === void 0 ? source : out), (error) => callback(error));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
//#endregion
|
|
40
|
+
export { elysiaAotLoader as default, registerAotHooks, unregisterAotHooks };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ElysiaAotOptions } from "./core.js";
|
|
2
|
+
|
|
3
|
+
//#region src/plugin/aot/rspack.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Elysia AOT build plugin
|
|
6
|
+
*
|
|
7
|
+
* Run Elysia JIT compilation at build time instead of runtime.
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* // rspack.config.ts
|
|
11
|
+
* import { aot } from 'elysia/plugin/aot/rspack'
|
|
12
|
+
*
|
|
13
|
+
* export default {
|
|
14
|
+
* plugins: [aot('src/index.ts')]
|
|
15
|
+
* }
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
declare const aot: (entry: string, options?: ElysiaAotOptions) => {
|
|
19
|
+
name: string;
|
|
20
|
+
apply(compiler: unknown): void;
|
|
21
|
+
};
|
|
22
|
+
//#endregion
|
|
23
|
+
export { aot, aot as default };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
2
|
+
const require_runtime = require('../../_virtual/_rolldown/runtime.js');
|
|
3
|
+
const require_plugin_aot_core = require('./core.js');
|
|
4
|
+
const require_plugin_aot_hooks = require('./hooks.js');
|
|
5
|
+
const require_plugin_aot_rspack_loader = require('./rspack-loader.js');
|
|
6
|
+
let node_fs = require("node:fs");
|
|
7
|
+
let node_path = require("node:path");
|
|
8
|
+
let node_url = require("node:url");
|
|
9
|
+
let node_crypto = require("node:crypto");
|
|
10
|
+
|
|
11
|
+
//#region src/plugin/aot/rspack.ts
|
|
12
|
+
const PLUGIN = "elysia-aot";
|
|
13
|
+
let tokenCounter = 0;
|
|
14
|
+
function loaderPath() {
|
|
15
|
+
const moduleUrl = require("url").pathToFileURL(__filename).href;
|
|
16
|
+
return (0, node_path.resolve)((0, node_path.dirname)((0, node_url.fileURLToPath)(moduleUrl)), "rspack-loader" + require_plugin_aot_core.siblingModuleExt(moduleUrl));
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Elysia AOT build plugin
|
|
20
|
+
*
|
|
21
|
+
* Run Elysia JIT compilation at build time instead of runtime.
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* // rspack.config.ts
|
|
25
|
+
* import { aot } from 'elysia/plugin/aot/rspack'
|
|
26
|
+
*
|
|
27
|
+
* export default {
|
|
28
|
+
* plugins: [aot('src/index.ts')]
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
const aot = (entry, options) => {
|
|
33
|
+
const hooks = require_plugin_aot_hooks.createAotPluginHooks(entry, options);
|
|
34
|
+
const entryPath = require_plugin_aot_core.resolveEntry(entry);
|
|
35
|
+
const token = `${PLUGIN}:${entryPath}:${tokenCounter++}`;
|
|
36
|
+
const cacheDir = (0, node_path.join)(process.cwd(), "node_modules", ".cache", "elysia-aot", (0, node_crypto.createHash)("sha1").update(entryPath).digest("hex").slice(0, 16));
|
|
37
|
+
const manifestFile = (0, node_path.join)(cacheDir, "compiled.mjs");
|
|
38
|
+
const typeFile = (0, node_path.join)(cacheDir, "type.mjs");
|
|
39
|
+
const apply = (rawCompiler) => {
|
|
40
|
+
const compiler = rawCompiler;
|
|
41
|
+
compiler.options.module.rules.push({
|
|
42
|
+
test: (id) => hooks.isTransformCandidate(id.split("?", 1)[0]),
|
|
43
|
+
enforce: "pre",
|
|
44
|
+
use: [{
|
|
45
|
+
loader: loaderPath(),
|
|
46
|
+
options: { token }
|
|
47
|
+
}]
|
|
48
|
+
});
|
|
49
|
+
compiler.options.module.rules.push({
|
|
50
|
+
test: (id) => id.split("?", 1)[0] === manifestFile,
|
|
51
|
+
sideEffects: true
|
|
52
|
+
});
|
|
53
|
+
compiler.hooks.beforeCompile.tapPromise(PLUGIN, async () => {
|
|
54
|
+
require_plugin_aot_rspack_loader.registerAotHooks(token, hooks);
|
|
55
|
+
await hooks.buildStart();
|
|
56
|
+
const source = hooks.load(hooks.resolveId("elysia/compiled"));
|
|
57
|
+
const typeId = hooks.resolveId("elysia/type");
|
|
58
|
+
const virtualType = typeId === void 0 ? void 0 : hooks.load(typeId);
|
|
59
|
+
(0, node_fs.mkdirSync)(cacheDir, { recursive: true });
|
|
60
|
+
(0, node_fs.writeFileSync)(manifestFile, source ?? "");
|
|
61
|
+
const resolveOptions = compiler.options.resolve ??= {};
|
|
62
|
+
const alias = resolveOptions.alias ??= {};
|
|
63
|
+
alias["elysia/compiled$"] = manifestFile;
|
|
64
|
+
if (virtualType !== void 0) {
|
|
65
|
+
(0, node_fs.writeFileSync)(typeFile, virtualType);
|
|
66
|
+
alias["elysia/type$"] = typeFile;
|
|
67
|
+
} else delete alias["elysia/type$"];
|
|
68
|
+
});
|
|
69
|
+
compiler.hooks.afterCompile.tapPromise(PLUGIN, async () => {
|
|
70
|
+
try {
|
|
71
|
+
hooks.buildEnd();
|
|
72
|
+
} finally {
|
|
73
|
+
require_plugin_aot_rspack_loader.unregisterAotHooks(token);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
return {
|
|
78
|
+
name: PLUGIN,
|
|
79
|
+
apply
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
//#endregion
|
|
84
|
+
exports.aot = aot;
|
|
85
|
+
exports.default = aot;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { resolveEntry, siblingModuleExt } from "./core.mjs";
|
|
2
|
+
import { createAotPluginHooks } from "./hooks.mjs";
|
|
3
|
+
import { registerAotHooks, unregisterAotHooks } from "./rspack-loader.mjs";
|
|
4
|
+
import { mkdirSync, writeFileSync } from "node:fs";
|
|
5
|
+
import { dirname, join, resolve } from "node:path";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
import { createHash } from "node:crypto";
|
|
8
|
+
|
|
9
|
+
//#region src/plugin/aot/rspack.ts
|
|
10
|
+
const PLUGIN = "elysia-aot";
|
|
11
|
+
let tokenCounter = 0;
|
|
12
|
+
function loaderPath() {
|
|
13
|
+
const moduleUrl = import.meta.url;
|
|
14
|
+
return resolve(dirname(fileURLToPath(moduleUrl)), "rspack-loader" + siblingModuleExt(moduleUrl));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Elysia AOT build plugin
|
|
18
|
+
*
|
|
19
|
+
* Run Elysia JIT compilation at build time instead of runtime.
|
|
20
|
+
*
|
|
21
|
+
* ```ts
|
|
22
|
+
* // rspack.config.ts
|
|
23
|
+
* import { aot } from 'elysia/plugin/aot/rspack'
|
|
24
|
+
*
|
|
25
|
+
* export default {
|
|
26
|
+
* plugins: [aot('src/index.ts')]
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
const aot = (entry, options) => {
|
|
31
|
+
const hooks = createAotPluginHooks(entry, options);
|
|
32
|
+
const entryPath = resolveEntry(entry);
|
|
33
|
+
const token = `${PLUGIN}:${entryPath}:${tokenCounter++}`;
|
|
34
|
+
const cacheDir = join(process.cwd(), "node_modules", ".cache", "elysia-aot", createHash("sha1").update(entryPath).digest("hex").slice(0, 16));
|
|
35
|
+
const manifestFile = join(cacheDir, "compiled.mjs");
|
|
36
|
+
const typeFile = join(cacheDir, "type.mjs");
|
|
37
|
+
const apply = (rawCompiler) => {
|
|
38
|
+
const compiler = rawCompiler;
|
|
39
|
+
compiler.options.module.rules.push({
|
|
40
|
+
test: (id) => hooks.isTransformCandidate(id.split("?", 1)[0]),
|
|
41
|
+
enforce: "pre",
|
|
42
|
+
use: [{
|
|
43
|
+
loader: loaderPath(),
|
|
44
|
+
options: { token }
|
|
45
|
+
}]
|
|
46
|
+
});
|
|
47
|
+
compiler.options.module.rules.push({
|
|
48
|
+
test: (id) => id.split("?", 1)[0] === manifestFile,
|
|
49
|
+
sideEffects: true
|
|
50
|
+
});
|
|
51
|
+
compiler.hooks.beforeCompile.tapPromise(PLUGIN, async () => {
|
|
52
|
+
registerAotHooks(token, hooks);
|
|
53
|
+
await hooks.buildStart();
|
|
54
|
+
const source = hooks.load(hooks.resolveId("elysia/compiled"));
|
|
55
|
+
const typeId = hooks.resolveId("elysia/type");
|
|
56
|
+
const virtualType = typeId === void 0 ? void 0 : hooks.load(typeId);
|
|
57
|
+
mkdirSync(cacheDir, { recursive: true });
|
|
58
|
+
writeFileSync(manifestFile, source ?? "");
|
|
59
|
+
const resolveOptions = compiler.options.resolve ??= {};
|
|
60
|
+
const alias = resolveOptions.alias ??= {};
|
|
61
|
+
alias["elysia/compiled$"] = manifestFile;
|
|
62
|
+
if (virtualType !== void 0) {
|
|
63
|
+
writeFileSync(typeFile, virtualType);
|
|
64
|
+
alias["elysia/type$"] = typeFile;
|
|
65
|
+
} else delete alias["elysia/type$"];
|
|
66
|
+
});
|
|
67
|
+
compiler.hooks.afterCompile.tapPromise(PLUGIN, async () => {
|
|
68
|
+
try {
|
|
69
|
+
hooks.buildEnd();
|
|
70
|
+
} finally {
|
|
71
|
+
unregisterAotHooks(token);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
return {
|
|
76
|
+
name: PLUGIN,
|
|
77
|
+
apply
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
//#endregion
|
|
82
|
+
export { aot, aot as default };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { AotFingerprint, CapturedHandler, CapturedValidator } from "../../compile/aot.js";
|
|
2
|
+
import { AnyElysia } from "../../base.js";
|
|
3
|
+
import { JITProbeResult } from "../../compile/jit-probe.js";
|
|
4
|
+
|
|
5
|
+
//#region src/plugin/aot/source.d.ts
|
|
6
|
+
type AotTarget = 'bun' | 'node' | 'workerd';
|
|
7
|
+
interface CompileToSourceOptions {
|
|
8
|
+
/** Emit a self-registering fingerprinted program (`Compiled.register(...)`). */
|
|
9
|
+
register?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Deploy target for build-time-baked codegen consts. Lets you build on one
|
|
12
|
+
* runtime and deploy to another e.g. build under Bun with
|
|
13
|
+
* `target: 'workerd'` so the manifest bakes `Object.fromEntries(...)` instead
|
|
14
|
+
* of the Bun-only `Headers.toJSON()`. Removes the need to generate the
|
|
15
|
+
* manifest under Node for a workerd deploy.
|
|
16
|
+
*
|
|
17
|
+
* @default the build runtime
|
|
18
|
+
*/
|
|
19
|
+
target?: AotTarget;
|
|
20
|
+
/**
|
|
21
|
+
* Split the emitted validator manifest into lazily-materialized groups
|
|
22
|
+
*
|
|
23
|
+
* Validator entries are registered as grouped thunks: a group's
|
|
24
|
+
* validators are constructed on the first request to any route in that
|
|
25
|
+
* group, trading first-request latency in unbuilt groups for lower
|
|
26
|
+
* startup cost. Handlers are always eager. Only validator construction
|
|
27
|
+
* is deferred. Pass a number to set the group size explicitly.
|
|
28
|
+
*
|
|
29
|
+
* @default decided by Elysia based on route batch scale
|
|
30
|
+
*/
|
|
31
|
+
lazy?: boolean | number;
|
|
32
|
+
/**
|
|
33
|
+
* Specifier the generated module imports `Compiled` from
|
|
34
|
+
* Must resolve to the same `elysia` instance the app runs
|
|
35
|
+
*
|
|
36
|
+
* @default 'elysia'
|
|
37
|
+
*/
|
|
38
|
+
registerFrom?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Specifier the generated module imports the `Reconstruct` table from,
|
|
41
|
+
* only emitted when the manifest carries validators. The table is pure,
|
|
42
|
+
* so unlike `registerFrom` it may resolve to any elysia copy the
|
|
43
|
+
* registration itself goes through `Compiled` (from `registerFrom`)
|
|
44
|
+
*
|
|
45
|
+
* @default 'elysia/reconstruct'
|
|
46
|
+
*/
|
|
47
|
+
reconstructFrom?: string;
|
|
48
|
+
}
|
|
49
|
+
declare const autoGroupSize: (routes: number) => number;
|
|
50
|
+
declare function compileToSource(app: AnyElysia, options?: CompileToSourceOptions): Promise<string>;
|
|
51
|
+
interface CapturedArtifacts {
|
|
52
|
+
source: string;
|
|
53
|
+
validators: CapturedValidator[];
|
|
54
|
+
handlers: CapturedHandler[];
|
|
55
|
+
fingerprint: AotFingerprint;
|
|
56
|
+
}
|
|
57
|
+
declare function captureArtifacts(app: AnyElysia, options?: CompileToSourceOptions): Promise<CapturedArtifacts>;
|
|
58
|
+
declare function replayStubbability(app: AnyElysia, handlers: CapturedHandler[]): JITProbeResult;
|
|
59
|
+
//#endregion
|
|
60
|
+
export { AotTarget, CapturedArtifacts, CompileToSourceOptions, autoGroupSize, captureArtifacts, compileToSource, replayStubbability };
|