@primate/core 0.1.9 → 0.2.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/lib/private/App.d.ts +54 -0
- package/lib/private/App.js +128 -0
- package/lib/private/AppError.d.ts +4 -0
- package/lib/private/AppError.js +8 -0
- package/lib/private/Binder.d.ts +13 -0
- package/lib/private/Binder.js +2 -0
- package/lib/private/BindingContext.d.ts +3 -0
- package/lib/private/BindingContext.js +2 -0
- package/lib/private/BuildApp.d.ts +23 -0
- package/lib/private/BuildApp.js +121 -0
- package/lib/private/CSP.d.ts +6 -0
- package/lib/private/CSP.js +2 -0
- package/lib/private/Loader.d.ts +17 -0
- package/lib/private/Loader.js +46 -0
- package/lib/private/Mode.d.ts +3 -0
- package/lib/private/Mode.js +2 -0
- package/lib/private/Module.d.ts +18 -0
- package/lib/private/Module.js +18 -0
- package/lib/private/ServeApp.d.ts +89 -0
- package/lib/private/ServeApp.js +305 -0
- package/lib/private/ServeInit.d.ts +29 -0
- package/lib/private/ServeInit.js +2 -0
- package/lib/private/asset/Asset.d.ts +11 -0
- package/lib/private/asset/Asset.js +2 -0
- package/lib/private/asset/Font.d.ts +8 -0
- package/lib/private/asset/Font.js +2 -0
- package/lib/private/asset/Script.d.ts +9 -0
- package/lib/private/asset/Script.js +2 -0
- package/lib/private/asset/Style.d.ts +6 -0
- package/lib/private/asset/Style.js +2 -0
- package/lib/private/backend/Module.d.ts +18 -0
- package/lib/private/backend/Module.js +22 -0
- package/lib/private/build.d.ts +4 -0
- package/lib/private/build.js +45 -0
- package/lib/private/builtin/DevModule.d.ts +11 -0
- package/lib/private/builtin/DevModule.js +32 -0
- package/lib/private/builtin/HandleModule.d.ts +10 -0
- package/lib/private/builtin/HandleModule.js +15 -0
- package/lib/private/bye.d.ts +3 -0
- package/{src → lib}/private/bye.js +2 -2
- package/lib/private/client/App.d.ts +4 -0
- package/lib/private/client/App.js +12 -0
- package/lib/private/client/Data.d.ts +9 -0
- package/lib/private/client/Data.js +2 -0
- package/lib/private/client/ValidateInit.d.ts +13 -0
- package/lib/private/client/ValidateInit.js +2 -0
- package/lib/private/client/ValidateUpdater.d.ts +3 -0
- package/lib/private/client/ValidateUpdater.js +2 -0
- package/lib/private/client/ValidationError.d.ts +6 -0
- package/lib/private/client/ValidationError.js +2 -0
- package/lib/private/client/spa/index.d.ts +6 -0
- package/lib/private/client/spa/index.js +192 -0
- package/lib/private/client/spa/storage.d.ts +12 -0
- package/lib/private/client/spa/storage.js +54 -0
- package/lib/private/client/toValidated.d.ts +17 -0
- package/lib/private/client/toValidated.js +21 -0
- package/lib/private/client/validate.d.ts +3 -0
- package/lib/private/client/validate.js +54 -0
- package/lib/private/config/Config.d.ts +4 -0
- package/lib/private/config/Config.js +2 -0
- package/lib/private/config/config/app.d.ts +3 -0
- package/lib/private/config/config/app.js +3 -0
- package/lib/private/config/config/database/index.d.ts +3 -0
- package/lib/private/config/config/database/index.js +3 -0
- package/lib/private/config/config/session.d.ts +3 -0
- package/lib/private/config/config/session.js +3 -0
- package/lib/private/config/index.d.ts +25 -0
- package/lib/private/config/index.js +3 -0
- package/lib/private/config/schema.d.ts +26 -0
- package/lib/private/config/schema.js +34 -0
- package/lib/private/cookie.d.ts +11 -0
- package/lib/private/cookie.js +30 -0
- package/lib/private/database/As.d.ts +7 -0
- package/lib/private/database/As.js +2 -0
- package/lib/private/database/Binds.d.ts +4 -0
- package/lib/private/database/Binds.js +2 -0
- package/lib/private/database/Changes.d.ts +11 -0
- package/lib/private/database/Changes.js +2 -0
- package/lib/private/database/ColumnTypes.d.ts +11 -0
- package/lib/private/database/ColumnTypes.js +2 -0
- package/lib/private/database/DataDict.d.ts +5 -0
- package/lib/private/database/DataDict.js +2 -0
- package/lib/private/database/DataKey.d.ts +4 -0
- package/lib/private/database/DataKey.js +2 -0
- package/lib/private/database/DataRecord.d.ts +8 -0
- package/lib/private/database/DataRecord.js +3 -0
- package/lib/private/database/DataValue.d.ts +5 -0
- package/lib/private/database/DataValue.js +2 -0
- package/lib/private/database/Database.d.ts +56 -0
- package/lib/private/database/Database.js +153 -0
- package/lib/private/database/InMemoryDatabase.d.ts +37 -0
- package/lib/private/database/InMemoryDatabase.js +181 -0
- package/lib/private/database/Query.d.ts +14 -0
- package/lib/private/database/Query.js +15 -0
- package/lib/private/database/QueryBuilder.d.ts +14 -0
- package/lib/private/database/QueryBuilder.js +3 -0
- package/lib/private/database/Sort.d.ts +4 -0
- package/lib/private/database/Sort.js +2 -0
- package/lib/private/database/Store.d.ts +169 -0
- package/lib/private/database/Store.js +255 -0
- package/lib/private/database/TypeMap.d.ts +14 -0
- package/lib/private/database/TypeMap.js +2 -0
- package/lib/private/database/Types.d.ts +6 -0
- package/lib/private/database/Types.js +2 -0
- package/lib/private/database/primary.d.ts +3 -0
- package/lib/private/database/primary.js +2 -0
- package/lib/private/database/storage.d.ts +4 -0
- package/lib/private/database/storage.js +3 -0
- package/lib/private/database/symbol/wrap.d.ts +3 -0
- package/lib/private/database/symbol/wrap.js +2 -0
- package/lib/private/database/symbol.d.ts +3 -0
- package/lib/private/database/symbol.js +2 -0
- package/lib/private/database/test.d.ts +4 -0
- package/lib/private/database/test.js +678 -0
- package/lib/private/database/wrap.d.ts +5 -0
- package/lib/private/database/wrap.js +5 -0
- package/lib/private/fail.d.ts +3 -0
- package/lib/private/fail.js +5 -0
- package/lib/private/frontend/Component.d.ts +8 -0
- package/lib/private/frontend/Component.js +2 -0
- package/lib/private/frontend/Module.d.ts +60 -0
- package/lib/private/frontend/Module.js +241 -0
- package/lib/private/frontend/Publish.d.ts +5 -0
- package/lib/private/frontend/Publish.js +2 -0
- package/lib/private/frontend/Render.d.ts +9 -0
- package/lib/private/frontend/Render.js +2 -0
- package/lib/private/frontend/ServerComponent.d.ts +5 -0
- package/lib/private/frontend/ServerComponent.js +2 -0
- package/lib/private/frontend/ServerData.d.ts +7 -0
- package/lib/private/frontend/ServerData.js +2 -0
- package/lib/private/frontend/ViewOptions.d.ts +12 -0
- package/lib/private/frontend/ViewOptions.js +3 -0
- package/lib/private/frontend/ViewResponse.d.ts +6 -0
- package/lib/private/frontend/ViewResponse.js +2 -0
- package/lib/private/frontend/bundle-server.d.ts +11 -0
- package/lib/private/frontend/bundle-server.js +48 -0
- package/lib/private/hash.d.ts +3 -0
- package/lib/private/hash.js +10 -0
- package/lib/private/hook/build.d.ts +4 -0
- package/lib/private/hook/build.js +245 -0
- package/lib/private/hook/serve.d.ts +4 -0
- package/lib/private/hook/serve.js +13 -0
- package/lib/private/i18n/API.d.ts +21 -0
- package/lib/private/i18n/API.js +2 -0
- package/lib/private/i18n/Catalog.d.ts +4 -0
- package/lib/private/i18n/Catalog.js +2 -0
- package/lib/private/i18n/Catalogs.d.ts +4 -0
- package/lib/private/i18n/Catalogs.js +2 -0
- package/lib/private/i18n/Config.d.ts +10 -0
- package/lib/private/i18n/Config.js +2 -0
- package/lib/private/i18n/ContextData.d.ts +6 -0
- package/lib/private/i18n/ContextData.js +2 -0
- package/lib/private/i18n/Formatter.d.ts +18 -0
- package/lib/private/i18n/Formatter.js +108 -0
- package/lib/private/i18n/Module.d.ts +16 -0
- package/lib/private/i18n/Module.js +109 -0
- package/lib/private/i18n/PersistMode.d.ts +3 -0
- package/lib/private/i18n/PersistMode.js +2 -0
- package/lib/private/i18n/TypeOf.d.ts +4 -0
- package/lib/private/i18n/TypeOf.js +2 -0
- package/lib/private/i18n/constant/COOKIE_NAME.d.ts +3 -0
- package/lib/private/i18n/constant/COOKIE_NAME.js +2 -0
- package/lib/private/i18n/constant/DEFAULT_LOCALE.d.ts +3 -0
- package/lib/private/i18n/constant/DEFAULT_LOCALE.js +2 -0
- package/lib/private/i18n/constant/DEFAULT_PERSIST_MODE.d.ts +3 -0
- package/lib/private/i18n/constant/DEFAULT_PERSIST_MODE.js +2 -0
- package/lib/private/i18n/constant/PERSIST_HEADER.d.ts +3 -0
- package/lib/private/i18n/constant/PERSIST_HEADER.js +2 -0
- package/lib/private/i18n/constant/PERSIST_METHOD.d.ts +3 -0
- package/lib/private/i18n/constant/PERSIST_METHOD.js +2 -0
- package/lib/private/i18n/constant/PERSIST_STORAGE_KEY.d.ts +3 -0
- package/lib/private/i18n/constant/PERSIST_STORAGE_KEY.js +2 -0
- package/lib/private/i18n/index.d.ts +28 -0
- package/lib/private/i18n/index.js +236 -0
- package/lib/private/i18n/locale.d.ts +5 -0
- package/lib/private/i18n/locale.js +4 -0
- package/lib/private/i18n/ordinals.d.ts +4 -0
- package/lib/private/i18n/ordinals.js +52 -0
- package/lib/private/i18n/schema.d.ts +8 -0
- package/lib/private/i18n/schema.js +13 -0
- package/lib/private/i18n/symbol/internal.d.ts +3 -0
- package/lib/private/i18n/symbol/internal.js +3 -0
- package/lib/private/i18n/toIntlUnit.d.ts +3 -0
- package/lib/private/i18n/toIntlUnit.js +125 -0
- package/lib/private/inline.d.ts +7 -0
- package/lib/private/inline.js +12 -0
- package/lib/private/location.d.ts +17 -0
- package/lib/private/location.js +29 -0
- package/lib/private/log.d.ts +19 -0
- package/lib/private/log.js +46 -0
- package/lib/private/module/BuildHook.d.ts +5 -0
- package/lib/private/module/BuildHook.js +2 -0
- package/lib/private/module/Hook.d.ts +5 -0
- package/lib/private/module/Hook.js +2 -0
- package/lib/private/module/Next.d.ts +4 -0
- package/lib/private/module/Next.js +2 -0
- package/lib/private/module/NextBuild.d.ts +5 -0
- package/lib/private/module/NextBuild.js +2 -0
- package/lib/private/module/NextHandle.d.ts +5 -0
- package/lib/private/module/NextHandle.js +2 -0
- package/lib/private/module/NextRoute.d.ts +6 -0
- package/lib/private/module/NextRoute.js +2 -0
- package/lib/private/module/NextServe.d.ts +5 -0
- package/lib/private/module/NextServe.js +2 -0
- package/lib/private/module/RequestHook.d.ts +6 -0
- package/lib/private/module/RequestHook.js +2 -0
- package/lib/private/reducer.d.ts +24 -0
- package/lib/private/reducer.js +10 -0
- package/lib/private/request/RequestBag.d.ts +80 -0
- package/lib/private/request/RequestBag.js +119 -0
- package/lib/private/request/RequestBody.d.ts +39 -0
- package/lib/private/request/RequestBody.js +91 -0
- package/lib/private/request/RequestFacade.d.ts +20 -0
- package/lib/private/request/RequestFacade.js +2 -0
- package/lib/private/request/Verb.d.ts +4 -0
- package/lib/private/request/Verb.js +2 -0
- package/lib/private/request/parse.d.ts +4 -0
- package/lib/private/request/parse.js +69 -0
- package/lib/private/request/route.d.ts +4 -0
- package/lib/private/request/route.js +61 -0
- package/lib/private/request/router.d.ts +5 -0
- package/lib/private/request/router.js +56 -0
- package/lib/private/request/verbs.d.ts +3 -0
- package/lib/private/request/verbs.js +12 -0
- package/lib/private/response/ResponseFunction.d.ts +8 -0
- package/lib/private/response/ResponseFunction.js +2 -0
- package/lib/private/response/ResponseLike.d.ts +6 -0
- package/lib/private/response/ResponseLike.js +2 -0
- package/lib/private/response/binary.d.ts +10 -0
- package/lib/private/response/binary.js +47 -0
- package/lib/private/response/error.d.ts +18 -0
- package/lib/private/response/error.js +18 -0
- package/lib/private/response/json.d.ts +9 -0
- package/lib/private/response/json.js +10 -0
- package/lib/private/response/redirect.d.ts +11 -0
- package/lib/private/response/redirect.js +62 -0
- package/lib/private/response/respond.d.ts +5 -0
- package/lib/private/response/respond.js +31 -0
- package/lib/private/response/sse.d.ts +15 -0
- package/lib/private/response/sse.js +25 -0
- package/lib/private/response/text.d.ts +9 -0
- package/lib/private/response/text.js +11 -0
- package/lib/private/response/view.d.ts +11 -0
- package/lib/private/response/view.js +41 -0
- package/lib/private/response/ws.d.ts +5 -0
- package/lib/private/response/ws.js +2 -0
- package/lib/private/response.d.ts +5 -0
- package/lib/private/response.js +2 -0
- package/lib/private/route/Handler.d.ts +6 -0
- package/lib/private/route/Handler.js +2 -0
- package/lib/private/route/Options.d.ts +5 -0
- package/lib/private/route/Options.js +2 -0
- package/lib/private/route/Path.d.ts +11 -0
- package/lib/private/route/Path.js +2 -0
- package/lib/private/route/guard.d.ts +4 -0
- package/lib/private/route/guard.js +22 -0
- package/lib/private/route/router.d.ts +51 -0
- package/lib/private/route/router.js +32 -0
- package/lib/private/route/wrap.d.ts +6 -0
- package/lib/private/route/wrap.js +17 -0
- package/lib/private/route.d.ts +9 -0
- package/lib/private/route.js +6 -0
- package/lib/private/serve.d.ts +5 -0
- package/lib/private/serve.js +8 -0
- package/lib/private/session/Config.d.ts +4 -0
- package/lib/private/session/Config.js +2 -0
- package/lib/private/session/Data.d.ts +5 -0
- package/lib/private/session/Data.js +2 -0
- package/lib/private/session/InMemoryManager.d.ts +9 -0
- package/lib/private/session/InMemoryManager.js +23 -0
- package/lib/private/session/Manager.d.ts +9 -0
- package/lib/private/session/Manager.js +4 -0
- package/lib/private/session/SessionFacade.d.ts +56 -0
- package/lib/private/session/SessionFacade.js +2 -0
- package/lib/private/session/SessionHandle.d.ts +20 -0
- package/lib/private/session/SessionHandle.js +67 -0
- package/lib/private/session/SessionModule.d.ts +13 -0
- package/lib/private/session/SessionModule.js +99 -0
- package/lib/private/session/index.d.ts +13 -0
- package/lib/private/session/index.js +41 -0
- package/lib/private/session/k-serialize.d.ts +3 -0
- package/lib/private/session/k-serialize.js +2 -0
- package/lib/private/session/schema.d.ts +14 -0
- package/lib/private/session/schema.js +20 -0
- package/lib/private/session/storage.d.ts +5 -0
- package/lib/private/session/storage.js +5 -0
- package/lib/private/symbol/config.d.ts +3 -0
- package/lib/private/symbol/config.js +2 -0
- package/lib/private/symbol/layout-depth.d.ts +3 -0
- package/lib/private/symbol/layout-depth.js +2 -0
- package/lib/private/tags.d.ts +10 -0
- package/lib/private/tags.js +29 -0
- package/lib/private/target/Manager.d.ts +14 -0
- package/lib/private/target/Manager.js +44 -0
- package/lib/private/target/Target.d.ts +8 -0
- package/lib/private/target/Target.js +3 -0
- package/lib/private/target/web.d.ts +4 -0
- package/lib/private/target/web.js +68 -0
- package/lib/private/wasm/API.d.ts +7 -0
- package/lib/private/wasm/API.js +2 -0
- package/lib/private/wasm/BufferViewSource.d.ts +4 -0
- package/lib/private/wasm/BufferViewSource.js +2 -0
- package/lib/private/wasm/Exports.d.ts +23 -0
- package/lib/private/wasm/Exports.js +2 -0
- package/lib/private/wasm/I32.d.ts +5 -0
- package/lib/private/wasm/I32.js +2 -0
- package/lib/private/wasm/I32_SIZE.d.ts +3 -0
- package/lib/private/wasm/I32_SIZE.js +2 -0
- package/lib/private/wasm/Instantiation.d.ts +12 -0
- package/lib/private/wasm/Instantiation.js +2 -0
- package/lib/private/wasm/Tagged.d.ts +7 -0
- package/lib/private/wasm/Tagged.js +2 -0
- package/lib/private/wasm/buffersize.d.ts +2 -0
- package/lib/private/wasm/buffersize.js +5 -0
- package/lib/private/wasm/decode-bytes.d.ts +3 -0
- package/lib/private/wasm/decode-bytes.js +5 -0
- package/lib/private/wasm/decode-json.d.ts +7 -0
- package/lib/private/wasm/decode-json.js +11 -0
- package/lib/private/wasm/decode-option.d.ts +5 -0
- package/lib/private/wasm/decode-option.js +10 -0
- package/lib/private/wasm/decode-response.d.ts +19 -0
- package/lib/private/wasm/decode-response.js +90 -0
- package/lib/private/wasm/decode-string.d.ts +3 -0
- package/lib/private/wasm/decode-string.js +5 -0
- package/lib/private/wasm/decode-websocket-close.d.ts +5 -0
- package/lib/private/wasm/decode-websocket-close.js +6 -0
- package/lib/private/wasm/decode-websocket-send.d.ts +6 -0
- package/lib/private/wasm/decode-websocket-send.js +19 -0
- package/lib/private/wasm/encode-buffer.d.ts +3 -0
- package/lib/private/wasm/encode-buffer.js +6 -0
- package/lib/private/wasm/encode-request.d.ts +9 -0
- package/lib/private/wasm/encode-request.js +198 -0
- package/lib/private/wasm/encode-session.d.ts +3 -0
- package/lib/private/wasm/encode-session.js +25 -0
- package/lib/private/wasm/encode-string-map.d.ts +5 -0
- package/lib/private/wasm/encode-string-map.js +14 -0
- package/lib/private/wasm/encode-string.d.ts +13 -0
- package/lib/private/wasm/encode-string.js +17 -0
- package/lib/private/wasm/encode-url.d.ts +11 -0
- package/lib/private/wasm/encode-url.js +14 -0
- package/lib/private/wasm/encode-websocket-close.d.ts +2 -0
- package/lib/private/wasm/encode-websocket-close.js +7 -0
- package/lib/private/wasm/encode-websocket-message.d.ts +4 -0
- package/lib/private/wasm/encode-websocket-message.js +30 -0
- package/lib/private/wasm/encode-websocket-open.d.ts +2 -0
- package/lib/private/wasm/encode-websocket-open.js +7 -0
- package/lib/private/wasm/filesize.d.ts +2 -0
- package/lib/private/wasm/filesize.js +8 -0
- package/lib/private/wasm/instantiate.d.ts +37 -0
- package/lib/private/wasm/instantiate.js +408 -0
- package/lib/private/wasm/open-websocket.d.ts +4 -0
- package/lib/private/wasm/open-websocket.js +26 -0
- package/lib/private/wasm/stringsize.d.ts +3 -0
- package/lib/private/wasm/stringsize.js +5 -0
- package/lib/private/wasm/urlsize.d.ts +2 -0
- package/lib/private/wasm/urlsize.js +5 -0
- package/lib/public/App.d.ts +2 -0
- package/lib/public/App.js +2 -0
- package/lib/public/AppError.d.ts +2 -0
- package/lib/public/AppError.js +2 -0
- package/lib/public/BuildApp.d.ts +2 -0
- package/lib/public/BuildApp.js +2 -0
- package/lib/public/BuildHook.d.ts +2 -0
- package/lib/public/BuildHook.js +2 -0
- package/lib/public/Database.d.ts +2 -0
- package/lib/public/Database.js +2 -0
- package/lib/public/Loader.d.ts +2 -0
- package/lib/public/Loader.js +2 -0
- package/lib/public/Mode.d.ts +2 -0
- package/lib/public/Mode.js +2 -0
- package/lib/public/Module.d.ts +2 -0
- package/lib/public/Module.js +2 -0
- package/lib/public/Next.d.ts +2 -0
- package/lib/public/Next.js +2 -0
- package/lib/public/NextBuild.d.ts +2 -0
- package/lib/public/NextBuild.js +2 -0
- package/lib/public/NextHandle.d.ts +2 -0
- package/lib/public/NextHandle.js +2 -0
- package/lib/public/NextRoute.d.ts +3 -0
- package/lib/public/NextRoute.js +2 -0
- package/lib/public/NextServe.d.ts +2 -0
- package/lib/public/NextServe.js +2 -0
- package/lib/public/ServeApp.d.ts +2 -0
- package/lib/public/ServeApp.js +2 -0
- package/lib/public/Target.d.ts +2 -0
- package/lib/public/Target.js +2 -0
- package/lib/public/backend/Module.d.ts +2 -0
- package/lib/public/backend/Module.js +2 -0
- package/lib/public/build.d.ts +2 -0
- package/lib/public/build.js +2 -0
- package/lib/public/client/App.d.ts +2 -0
- package/lib/public/client/App.js +2 -0
- package/lib/public/client/Data.d.ts +2 -0
- package/lib/public/client/Data.js +2 -0
- package/lib/public/client/ValidateInit.d.ts +2 -0
- package/lib/public/client/ValidateInit.js +2 -0
- package/lib/public/client/ValidateUpdater.d.ts +2 -0
- package/lib/public/client/ValidateUpdater.js +2 -0
- package/lib/public/client/ValidationError.d.ts +2 -0
- package/lib/public/client/ValidationError.js +2 -0
- package/lib/public/client/spa.d.ts +2 -0
- package/lib/public/client/spa.js +2 -0
- package/lib/public/client/toValidated.d.ts +2 -0
- package/lib/public/client/toValidated.js +2 -0
- package/lib/public/client/validate.d.ts +2 -0
- package/lib/public/client/validate.js +2 -0
- package/lib/public/config.d.ts +2 -0
- package/lib/public/config.js +2 -0
- package/lib/public/database/As.d.ts +2 -0
- package/lib/public/database/As.js +2 -0
- package/lib/public/database/DataDict.d.ts +2 -0
- package/lib/public/database/DataDict.js +2 -0
- package/lib/public/database/InMemoryDatabase.d.ts +2 -0
- package/lib/public/database/InMemoryDatabase.js +2 -0
- package/lib/public/database/Sort.d.ts +2 -0
- package/lib/public/database/Sort.js +2 -0
- package/lib/public/database/Store.d.ts +2 -0
- package/lib/public/database/Store.js +2 -0
- package/lib/public/database/TypeMap.d.ts +2 -0
- package/lib/public/database/TypeMap.js +2 -0
- package/lib/public/database/Types.d.ts +2 -0
- package/lib/public/database/Types.js +2 -0
- package/lib/public/database/test.d.ts +2 -0
- package/lib/public/database/test.js +2 -0
- package/lib/public/database/wrap.d.ts +2 -0
- package/lib/public/database/wrap.js +2 -0
- package/lib/public/frontend/Module.d.ts +2 -0
- package/lib/public/frontend/Module.js +2 -0
- package/lib/public/frontend/Publish.d.ts +2 -0
- package/lib/public/frontend/Publish.js +2 -0
- package/lib/public/frontend/Render.d.ts +2 -0
- package/lib/public/frontend/Render.js +2 -0
- package/lib/public/frontend/ViewResponse.d.ts +2 -0
- package/lib/public/frontend/ViewResponse.js +2 -0
- package/lib/public/i18n/API.d.ts +2 -0
- package/lib/public/i18n/API.js +2 -0
- package/lib/public/i18n/Catalogs.d.ts +2 -0
- package/lib/public/i18n/Catalogs.js +2 -0
- package/lib/public/i18n/ContextData.d.ts +2 -0
- package/lib/public/i18n/ContextData.js +2 -0
- package/lib/public/i18n/config.d.ts +2 -0
- package/lib/public/i18n/config.js +2 -0
- package/lib/public/i18n/locale.d.ts +2 -0
- package/lib/public/i18n/locale.js +2 -0
- package/lib/public/i18n/sInternal.d.ts +2 -0
- package/lib/public/i18n/sInternal.js +2 -0
- package/lib/public/inline.d.ts +2 -0
- package/lib/public/inline.js +2 -0
- package/lib/public/location.d.ts +2 -0
- package/lib/public/location.js +2 -0
- package/lib/public/log.d.ts +2 -0
- package/{src/log/index.js → lib/public/log.js} +1 -0
- package/lib/public/request/RequestBody.d.ts +2 -0
- package/lib/public/request/RequestBody.js +2 -0
- package/lib/public/request/RequestFacade.d.ts +2 -0
- package/lib/public/request/RequestFacade.js +2 -0
- package/lib/public/request/Verb.d.ts +2 -0
- package/lib/public/request/Verb.js +2 -0
- package/lib/public/request/verbs.d.ts +2 -0
- package/lib/public/request/verbs.js +2 -0
- package/lib/public/response/ResponseFunction.d.ts +2 -0
- package/lib/public/response/ResponseFunction.js +2 -0
- package/lib/public/response/ResponseLike.d.ts +2 -0
- package/lib/public/response/ResponseLike.js +2 -0
- package/lib/public/response/binary.d.ts +2 -0
- package/lib/public/response/binary.js +2 -0
- package/lib/public/response/error.d.ts +2 -0
- package/lib/public/response/error.js +2 -0
- package/lib/public/response/json.d.ts +2 -0
- package/lib/public/response/json.js +2 -0
- package/lib/public/response/redirect.d.ts +2 -0
- package/lib/public/response/redirect.js +2 -0
- package/lib/public/response/sse.d.ts +2 -0
- package/lib/public/response/sse.js +2 -0
- package/lib/public/response/text.d.ts +2 -0
- package/lib/public/response/text.js +2 -0
- package/lib/public/response/view.d.ts +2 -0
- package/lib/public/response/view.js +2 -0
- package/lib/public/response/ws.d.ts +2 -0
- package/lib/public/response/ws.js +2 -0
- package/lib/public/route/router.d.ts +2 -0
- package/lib/public/route/router.js +2 -0
- package/lib/public/route/wrap.d.ts +2 -0
- package/lib/public/route/wrap.js +2 -0
- package/lib/public/route.d.ts +2 -0
- package/lib/public/route.js +2 -0
- package/lib/public/serve.d.ts +2 -0
- package/lib/public/serve.js +2 -0
- package/lib/public/session/Manager.d.ts +2 -0
- package/lib/public/session/Manager.js +2 -0
- package/lib/public/session/config.d.ts +2 -0
- package/lib/public/session/config.js +2 -0
- package/lib/public/symbol/config.d.ts +2 -0
- package/lib/public/symbol/config.js +2 -0
- package/lib/public/wasm/decode-json.d.ts +5 -0
- package/lib/public/wasm/decode-json.js +3 -0
- package/lib/public/wasm/decode-response.d.ts +3 -0
- package/lib/public/wasm/decode-response.js +3 -0
- package/lib/public/wasm/encode-request.d.ts +3 -0
- package/lib/public/wasm/encode-request.js +3 -0
- package/lib/public/wasm/encode-session.d.ts +3 -0
- package/lib/public/wasm/encode-session.js +3 -0
- package/lib/public/wasm/instantiate.d.ts +4 -0
- package/lib/public/wasm/instantiate.js +3 -0
- package/package.json +41 -35
- package/src/build/app.js +0 -99
- package/src/build/hook/build.js +0 -188
- package/src/build/hook/copy_includes.js +0 -20
- package/src/build/hook/exports.js +0 -2
- package/src/build/hook/init.js +0 -3
- package/src/build/hook/router.js +0 -33
- package/src/build/index.js +0 -49
- package/src/build/module_loader.js +0 -30
- package/src/build/targets/exports.js +0 -1
- package/src/build/targets/web.js +0 -70
- package/src/dispatch/index.js +0 -1
- package/src/http/verbs.js +0 -11
- package/src/private/config-filename.js +0 -1
- package/src/private/config.js +0 -48
- package/src/private/depend.js +0 -20
- package/src/private/dispatch.js +0 -18
- package/src/private/error/bad-body.js +0 -6
- package/src/private/error/bad-default-export.js +0 -6
- package/src/private/error/bad-path.js +0 -6
- package/src/private/error/bad-type-export.js +0 -6
- package/src/private/error/bad-type-name.js +0 -6
- package/src/private/error/double-extension.js +0 -6
- package/src/private/error/double-module.js +0 -6
- package/src/private/error/double-path-parameter.js +0 -6
- package/src/private/error/double-route.js +0 -6
- package/src/private/error/empty-config-file.js +0 -6
- package/src/private/error/empty-directory.js +0 -6
- package/src/private/error/empty-path-parameter.js +0 -6
- package/src/private/error/empty-route-file.js +0 -6
- package/src/private/error/error-in-config-file.js +0 -6
- package/src/private/error/mismatched-body.js +0 -6
- package/src/private/error/mismatched-path.js +0 -6
- package/src/private/error/mismatched-type.js +0 -6
- package/src/private/error/module-no-name.js +0 -6
- package/src/private/error/modules-array.js +0 -6
- package/src/private/error/no-handler.js +0 -6
- package/src/private/error/no-route-to-path.js +0 -6
- package/src/private/error/optional-route.js +0 -6
- package/src/private/error/reserved-type-name.js +0 -6
- package/src/private/error/rest-route.js +0 -6
- package/src/private/error.js +0 -15
- package/src/private/log.js +0 -69
- package/src/private/loglevel.js +0 -9
- package/src/private/mark.js +0 -5
- package/src/private/validate.js +0 -11
- package/src/serve/app.js +0 -206
- package/src/serve/handler/error.js +0 -10
- package/src/serve/handler/json.js +0 -10
- package/src/serve/handler/redirect.js +0 -11
- package/src/serve/handler/shared/base.js +0 -4
- package/src/serve/handler/sse.js +0 -24
- package/src/serve/handler/stream.js +0 -4
- package/src/serve/handler/text.js +0 -10
- package/src/serve/handler/view.js +0 -15
- package/src/serve/handler/ws.js +0 -2
- package/src/serve/hook/exports.js +0 -5
- package/src/serve/hook/handle.js +0 -106
- package/src/serve/hook/init.js +0 -3
- package/src/serve/hook/parse.js +0 -17
- package/src/serve/hook/respond.js +0 -28
- package/src/serve/hook/route.js +0 -50
- package/src/serve/hook/serve.js +0 -53
- package/src/serve/index.js +0 -9
- package/src/serve/module_loader.js +0 -16
- package/src/serve/to_sorted.js +0 -1
- /package/{src/build → lib/private}/defaults/app.html +0 -0
- /package/{src/build → lib/private}/defaults/error.html +0 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import AppError from "#AppError";
|
|
2
|
+
import fail from "#fail";
|
|
3
|
+
import FileRouter from "@rcompat/fs/FileRouter";
|
|
4
|
+
const error_entries = Object.entries({
|
|
5
|
+
DoubleRoute: "double route {0}, disambiguate routes",
|
|
6
|
+
OptionalRoute: "optional route {0} may not be a directory",
|
|
7
|
+
RestRoute: "rest route {0} may not be a directory",
|
|
8
|
+
});
|
|
9
|
+
const allowed = {
|
|
10
|
+
re: /^[a-zA-Z0-9\-_+[\].]+$/,
|
|
11
|
+
replacements: ["a-Z", "0-9", "-", "_", "+", "[", "]", "."],
|
|
12
|
+
text: "letters ({1}), digits ({2}), {3}, {4}, {5}, {6}, {7}",
|
|
13
|
+
};
|
|
14
|
+
const specials = ["guard", "error", "layout"];
|
|
15
|
+
const _ = allowed.re.source.slice(1, -1);
|
|
16
|
+
const p = /^(?:[^[\]]+|\[(?:\.{3})?[a-zA-Z0-9_]+\]|\[\[(?:\.{3})?[a-zA-Z0-9_]+\]\])$/;
|
|
17
|
+
export default async (directory, extensions) => {
|
|
18
|
+
try {
|
|
19
|
+
const router = await FileRouter.load({
|
|
20
|
+
directory: directory.toString(),
|
|
21
|
+
extensions,
|
|
22
|
+
specials: {
|
|
23
|
+
error: { recursive: false },
|
|
24
|
+
guard: { recursive: true },
|
|
25
|
+
layout: { recursive: true },
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
router.all().map(route => {
|
|
29
|
+
const { path, segment } = route;
|
|
30
|
+
if (!allowed.re.test(segment)) {
|
|
31
|
+
const message = `route {0} may only contain ${allowed.text}`;
|
|
32
|
+
throw fail(message, path, ...allowed.replacements);
|
|
33
|
+
}
|
|
34
|
+
if (segment.startsWith("+") && !specials.includes(segment.slice(1))) {
|
|
35
|
+
throw fail("route {0} is not a valid special file", path);
|
|
36
|
+
}
|
|
37
|
+
if (!p.test(segment)) {
|
|
38
|
+
throw fail("route {0} has an invalid parameter", path);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return router;
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
if (error instanceof AppError) {
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
error_entries.forEach(([key, value]) => {
|
|
48
|
+
if (key in FileRouter.Error) {
|
|
49
|
+
throw new AppError(value, error.route);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
// rethrow original error
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type Component from "#frontend/Component";
|
|
2
|
+
import type RequestFacade from "#request/RequestFacade";
|
|
3
|
+
import type ServeApp from "#ServeApp";
|
|
4
|
+
import type Dict from "@rcompat/type/Dict";
|
|
5
|
+
import type MaybePromise from "@rcompat/type/MaybePromise";
|
|
6
|
+
type ResponseFunction = (app: ServeApp, transfer: Dict, request: RequestFacade) => MaybePromise<Component | null | Response | undefined>;
|
|
7
|
+
export { ResponseFunction as default };
|
|
8
|
+
//# sourceMappingURL=ResponseFunction.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type ResponseFunction from "#response/ResponseFunction";
|
|
2
|
+
import type Streamable from "@rcompat/fs/Streamable";
|
|
3
|
+
import type Dict from "@rcompat/type/Dict";
|
|
4
|
+
type ResponseLike = string | Dict | Dict[] | URL | Blob | ReadableStream | Streamable | Response | ResponseFunction | null;
|
|
5
|
+
export { ResponseLike as default };
|
|
6
|
+
//# sourceMappingURL=ResponseLike.d.ts.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type ServeApp from "#ServeApp";
|
|
2
|
+
import type StreamSource from "@rcompat/fs/StreamSource";
|
|
3
|
+
/**
|
|
4
|
+
* Stream a binary response.
|
|
5
|
+
* @param source streamable source
|
|
6
|
+
* @param options response options
|
|
7
|
+
* @return Response rendering function
|
|
8
|
+
*/
|
|
9
|
+
export default function binary(source: StreamSource, init?: ResponseInit): (app: ServeApp) => Response;
|
|
10
|
+
//# sourceMappingURL=binary.d.ts.map
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import Streamable from "@rcompat/fs/Streamable";
|
|
2
|
+
import mime from "@rcompat/http/mime/application/octet-stream";
|
|
3
|
+
const encodeRFC5987 = (s) => encodeURIComponent(s).replace(/['()*]/g, c => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
4
|
+
/**
|
|
5
|
+
* @security
|
|
6
|
+
* risk: header injection (CWE-113)
|
|
7
|
+
* assumptions:
|
|
8
|
+
* - filename may contain CR/LF and non-ASCII
|
|
9
|
+
* mitigations:
|
|
10
|
+
* - strip CR/LF; escape quotes; add RFC5987 filename*
|
|
11
|
+
* references: RFC 6266, RFC 5987
|
|
12
|
+
*/
|
|
13
|
+
function toContentDisposition(filename) {
|
|
14
|
+
// prevent header injection (remove CR/LF) and limit length for safety
|
|
15
|
+
const clean = filename.replace(/[\r\n]/g, "").slice(0, 255);
|
|
16
|
+
// create an ASCII-safe version of the filename by replacing non-printable
|
|
17
|
+
// ASCII chars and quotes/backslashes (RFC 6266)
|
|
18
|
+
const ascii = clean.replace(/[^\x20-\x7E]/g, "_").replace(/["\\]/g, "_");
|
|
19
|
+
// encode the clean filename in UTF-8 using percent-encoding.
|
|
20
|
+
// this prepares it for the 'filename*' extended parameter (RFC 5987)
|
|
21
|
+
const utf8 = encodeRFC5987(clean);
|
|
22
|
+
return `attachment; filename="${ascii}"; filename*=UTF-8''${utf8}`;
|
|
23
|
+
}
|
|
24
|
+
;
|
|
25
|
+
/**
|
|
26
|
+
* Stream a binary response.
|
|
27
|
+
* @param source streamable source
|
|
28
|
+
* @param options response options
|
|
29
|
+
* @return Response rendering function
|
|
30
|
+
*/
|
|
31
|
+
export default function binary(source, init) {
|
|
32
|
+
return (app) => {
|
|
33
|
+
const { headers, ...rest } = app.media(mime, init);
|
|
34
|
+
const name = Streamable.named(source) ? source.name : "default.bin";
|
|
35
|
+
const out = new Headers(headers);
|
|
36
|
+
out.set("Content-Disposition", toContentDisposition(name));
|
|
37
|
+
if (source instanceof Blob) {
|
|
38
|
+
source.type && out.set("Content-Type", source.type);
|
|
39
|
+
out.set("Content-Length", String(source.size));
|
|
40
|
+
}
|
|
41
|
+
return app.respond(Streamable.stream(source), {
|
|
42
|
+
...rest, headers: Object.fromEntries(out.entries()),
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
;
|
|
47
|
+
//# sourceMappingURL=binary.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type ResponseFunction from "#response/ResponseFunction";
|
|
2
|
+
import type ValidStatus from "@rcompat/http/ValidStatus";
|
|
3
|
+
type Options = {
|
|
4
|
+
body?: string;
|
|
5
|
+
page?: string;
|
|
6
|
+
status?: ValidStatus;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Render an error page.
|
|
10
|
+
*
|
|
11
|
+
* @param options.body HTML `%body%` replacement (default: `"Not Found"`).
|
|
12
|
+
* @param options.status Request status (default: `404 Not Found`).
|
|
13
|
+
* @param options.page HTML page to use (default: `error.html`).
|
|
14
|
+
* @return Response function.
|
|
15
|
+
*/
|
|
16
|
+
export default function error(options?: Options): ResponseFunction;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=error.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import location from "#location";
|
|
2
|
+
import Status from "@rcompat/http/Status";
|
|
3
|
+
/**
|
|
4
|
+
* Render an error page.
|
|
5
|
+
*
|
|
6
|
+
* @param options.body HTML `%body%` replacement (default: `"Not Found"`).
|
|
7
|
+
* @param options.status Request status (default: `404 Not Found`).
|
|
8
|
+
* @param options.page HTML page to use (default: `error.html`).
|
|
9
|
+
* @return Response function.
|
|
10
|
+
*/
|
|
11
|
+
export default function error(options) {
|
|
12
|
+
return app => app.view({
|
|
13
|
+
body: options?.body ?? "Not Found",
|
|
14
|
+
page: options?.page ?? location.error_html,
|
|
15
|
+
status: options?.status ?? Status.NOT_FOUND,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Issue a JSON response
|
|
3
|
+
* @param body body object
|
|
4
|
+
* @param options response options
|
|
5
|
+
* @return Response rendering function
|
|
6
|
+
*/
|
|
7
|
+
declare const _default: (body: unknown, init?: ResponseInit) => (app: import("../ServeApp.js").default) => import("@rcompat/type/MaybePromise").default<Response>;
|
|
8
|
+
export default _default;
|
|
9
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import response from "#response";
|
|
2
|
+
import mime from "@rcompat/http/mime/application/json";
|
|
3
|
+
/**
|
|
4
|
+
* Issue a JSON response
|
|
5
|
+
* @param body body object
|
|
6
|
+
* @param options response options
|
|
7
|
+
* @return Response rendering function
|
|
8
|
+
*/
|
|
9
|
+
export default response(mime, JSON.stringify);
|
|
10
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type ResponseFunction from "#response/ResponseFunction";
|
|
2
|
+
type Redirection = 300 | 301 | 302 | 303 | 304 | 307 | 308;
|
|
3
|
+
/**
|
|
4
|
+
* Redirect request
|
|
5
|
+
* @param location location to redirect to
|
|
6
|
+
* @param status redirection 3xx code
|
|
7
|
+
* @return Response rendering function
|
|
8
|
+
*/
|
|
9
|
+
declare const _default: (location: string, status?: Redirection) => ResponseFunction;
|
|
10
|
+
export default _default;
|
|
11
|
+
//# sourceMappingURL=redirect.d.ts.map
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import Status from "@rcompat/http/Status";
|
|
2
|
+
function hasCRLF(s) {
|
|
3
|
+
return /[\r\n]/.test(s);
|
|
4
|
+
}
|
|
5
|
+
function isAbsoluteUrl(s) {
|
|
6
|
+
try {
|
|
7
|
+
new URL(s);
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function encodePathname(s) {
|
|
15
|
+
// expect strict origin-form path ("/..."), disallow protocol-relative and
|
|
16
|
+
// backslashes
|
|
17
|
+
if (!s.startsWith("/") || s.startsWith("//") || s.includes("\\")) {
|
|
18
|
+
throw new Error("invalid pathname");
|
|
19
|
+
}
|
|
20
|
+
// encode per segment to avoid double-encoding present percent-escapes
|
|
21
|
+
return s.split("/")
|
|
22
|
+
.map((each, i) => i === 0 ? "" : encodeURIComponent(each)).join("/");
|
|
23
|
+
}
|
|
24
|
+
function toSearch(query) {
|
|
25
|
+
if (!query) {
|
|
26
|
+
return "";
|
|
27
|
+
}
|
|
28
|
+
const search = Object.entries(query)
|
|
29
|
+
.filter(([, v]) => v !== null && v !== undefined)
|
|
30
|
+
.reduce((params, [k, v]) => {
|
|
31
|
+
params.append(k, String(v));
|
|
32
|
+
return params;
|
|
33
|
+
}, new URLSearchParams())
|
|
34
|
+
.toString();
|
|
35
|
+
return search ? "?" + search : "";
|
|
36
|
+
}
|
|
37
|
+
function toNormalized(relative, base) {
|
|
38
|
+
// base -> URL resolution
|
|
39
|
+
if (base) {
|
|
40
|
+
const url = new URL(relative, new URL(String(base)));
|
|
41
|
+
return url.pathname + url.search;
|
|
42
|
+
}
|
|
43
|
+
// no base -> enforce strict single-slash path and strip fragment
|
|
44
|
+
if (!relative.startsWith("/") || relative.startsWith("//")) {
|
|
45
|
+
throw new Error("bad relative");
|
|
46
|
+
}
|
|
47
|
+
const i = relative.indexOf("#");
|
|
48
|
+
return i === -1 ? relative : relative.slice(0, i);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Redirect request
|
|
52
|
+
* @param location location to redirect to
|
|
53
|
+
* @param status redirection 3xx code
|
|
54
|
+
* @return Response rendering function
|
|
55
|
+
*/
|
|
56
|
+
export default (location, status) =>
|
|
57
|
+
// no body
|
|
58
|
+
app => app.respond(null, {
|
|
59
|
+
headers: { Location: location },
|
|
60
|
+
status: status ?? Status.FOUND,
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=redirect.js.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import fail from "#fail";
|
|
2
|
+
import binary from "#response/binary";
|
|
3
|
+
import json from "#response/json";
|
|
4
|
+
import redirect from "#response/redirect";
|
|
5
|
+
import text from "#response/text";
|
|
6
|
+
import Streamable from "@rcompat/fs/Streamable";
|
|
7
|
+
import Status from "@rcompat/http/Status";
|
|
8
|
+
import proper from "@rcompat/record/proper";
|
|
9
|
+
function invalid_body(body) {
|
|
10
|
+
throw fail("invalid body {0} returned from route", body);
|
|
11
|
+
}
|
|
12
|
+
const is_instance = (of) => ((value) => value instanceof of);
|
|
13
|
+
const is_response = is_instance(Response);
|
|
14
|
+
const is_url = is_instance(URL);
|
|
15
|
+
const is_null = (value) => value === null;
|
|
16
|
+
function match(m) {
|
|
17
|
+
return m;
|
|
18
|
+
}
|
|
19
|
+
// [if, then]
|
|
20
|
+
const guesses = match([
|
|
21
|
+
[is_null, () => () => new Response(null, { status: Status.NO_CONTENT })],
|
|
22
|
+
[is_url, value => redirect(value.toString())],
|
|
23
|
+
[Streamable.is, value => binary(value)],
|
|
24
|
+
[(value) => is_response(value), value => _ => value],
|
|
25
|
+
[proper, json],
|
|
26
|
+
[(value) => typeof value === "string", text],
|
|
27
|
+
]);
|
|
28
|
+
const guess = (value) => guesses.find(([_if]) => _if(value))?.[1](value)
|
|
29
|
+
?? invalid_body(`${value}`);
|
|
30
|
+
export default (result) => typeof result === "function" ? result : guess(result);
|
|
31
|
+
//# sourceMappingURL=respond.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type Body = {
|
|
2
|
+
close?(): undefined;
|
|
3
|
+
open(events: {
|
|
4
|
+
send(name: string, data: unknown): undefined;
|
|
5
|
+
}): undefined;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Open a server-sent event stream
|
|
9
|
+
* @param body implementation body
|
|
10
|
+
* @param options response options
|
|
11
|
+
* @return Response rendering function
|
|
12
|
+
*/
|
|
13
|
+
declare const _default: (body: Body, init?: ResponseInit) => (app: import("../ServeApp.js").default) => import("@rcompat/type/MaybePromise").default<Response>;
|
|
14
|
+
export default _default;
|
|
15
|
+
//# sourceMappingURL=sse.d.ts.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import response from "#response";
|
|
2
|
+
import mime from "@rcompat/http/mime/text/event-stream";
|
|
3
|
+
const encode = (input) => new TextEncoder().encode(input);
|
|
4
|
+
const handle = (body) => new ReadableStream({
|
|
5
|
+
cancel() {
|
|
6
|
+
body.close?.();
|
|
7
|
+
},
|
|
8
|
+
start(controller) {
|
|
9
|
+
body.open({
|
|
10
|
+
send(name, data) {
|
|
11
|
+
const event = data === undefined ? "" : `event: ${name}\n`;
|
|
12
|
+
const _data = JSON.stringify(data === undefined ? name : data);
|
|
13
|
+
controller.enqueue(encode(`${event}data:${_data}\n\n`));
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* Open a server-sent event stream
|
|
20
|
+
* @param body implementation body
|
|
21
|
+
* @param options response options
|
|
22
|
+
* @return Response rendering function
|
|
23
|
+
*/
|
|
24
|
+
export default response(mime, handle);
|
|
25
|
+
//# sourceMappingURL=sse.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return a plaintext response
|
|
3
|
+
* @param body plaintext body
|
|
4
|
+
* @param options response options
|
|
5
|
+
* @return Response rendering function
|
|
6
|
+
*/
|
|
7
|
+
declare const _default: (body: string, init?: ResponseInit) => (app: import("../ServeApp.js").default) => import("@rcompat/type/MaybePromise").default<Response>;
|
|
8
|
+
export default _default;
|
|
9
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import response from "#response";
|
|
2
|
+
import identity from "@rcompat/function/identity";
|
|
3
|
+
import mime from "@rcompat/http/mime/text/plain";
|
|
4
|
+
/**
|
|
5
|
+
* Return a plaintext response
|
|
6
|
+
* @param body plaintext body
|
|
7
|
+
* @param options response options
|
|
8
|
+
* @return Response rendering function
|
|
9
|
+
*/
|
|
10
|
+
export default response(mime, identity);
|
|
11
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type ViewResponse from "#frontend/ViewResponse";
|
|
2
|
+
/**
|
|
3
|
+
* Render a component using a frontend for the given filename extension
|
|
4
|
+
* @param component path to component
|
|
5
|
+
* @param props props for component
|
|
6
|
+
* @param options rendering options
|
|
7
|
+
* @return Response rendering function
|
|
8
|
+
*/
|
|
9
|
+
declare const view: ViewResponse;
|
|
10
|
+
export default view;
|
|
11
|
+
//# sourceMappingURL=view.d.ts.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import fail from "#fail";
|
|
2
|
+
import FileRef from "@rcompat/fs/FileRef";
|
|
3
|
+
const extensions = ["extension", "fullExtension"];
|
|
4
|
+
const backmap = {
|
|
5
|
+
"component.ts": "angular",
|
|
6
|
+
eta: "eta",
|
|
7
|
+
hbs: "handlebars",
|
|
8
|
+
html: "html",
|
|
9
|
+
htmx: "htmx",
|
|
10
|
+
marko: "marko",
|
|
11
|
+
md: "markdown",
|
|
12
|
+
poly: "poly",
|
|
13
|
+
solid: "solid",
|
|
14
|
+
svelte: "svelte",
|
|
15
|
+
voby: "voby",
|
|
16
|
+
vue: "vue",
|
|
17
|
+
webc: "webc",
|
|
18
|
+
};
|
|
19
|
+
function no_frontend(component) {
|
|
20
|
+
const extension = new FileRef(component).fullExtension.slice(1);
|
|
21
|
+
const hasPkg = extension in backmap;
|
|
22
|
+
const error = "No frontend for {0}";
|
|
23
|
+
const fix = hasPkg ? "" : ", did you configure {1}?";
|
|
24
|
+
const pkgname = hasPkg ? "" : `@primate/${backmap[extension]}`;
|
|
25
|
+
throw fail(`${error}${fix}`, component, pkgname);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Render a component using a frontend for the given filename extension
|
|
29
|
+
* @param component path to component
|
|
30
|
+
* @param props props for component
|
|
31
|
+
* @param options rendering options
|
|
32
|
+
* @return Response rendering function
|
|
33
|
+
*/
|
|
34
|
+
const view = (function viewResponse(component, props, options) {
|
|
35
|
+
return (app, transfer, request) => extensions
|
|
36
|
+
.map(extension => app.frontends[new FileRef(component)[extension]])
|
|
37
|
+
.find(extension => extension !== undefined)?.(component, props, options)(app, transfer, request)
|
|
38
|
+
?? no_frontend(component);
|
|
39
|
+
});
|
|
40
|
+
export default view;
|
|
41
|
+
//# sourceMappingURL=view.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type ServeApp from "#ServeApp";
|
|
2
|
+
import type MaybePromise from "@rcompat/type/MaybePromise";
|
|
3
|
+
declare const _default: <T>(mime: string, mapper: (input: T) => BodyInit) => (body: T, init?: ResponseInit) => (app: ServeApp) => MaybePromise<Response>;
|
|
4
|
+
export default _default;
|
|
5
|
+
//# sourceMappingURL=response.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type RequestFacade from "#request/RequestFacade";
|
|
2
|
+
import type ResponseLike from "#response/ResponseLike";
|
|
3
|
+
import type MaybePromise from "@rcompat/type/MaybePromise";
|
|
4
|
+
type RouteHandler = (request: RequestFacade) => MaybePromise<ResponseLike>;
|
|
5
|
+
export { RouteHandler as default };
|
|
6
|
+
//# sourceMappingURL=Handler.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type Verb from "#request/Verb";
|
|
2
|
+
import type RouteHandler from "#route/Handler";
|
|
3
|
+
import type RouteOptions from "#route/Options";
|
|
4
|
+
type RoutePath = {
|
|
5
|
+
[key in Verb]?: {
|
|
6
|
+
handler: RouteHandler;
|
|
7
|
+
options: RouteOptions;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
export type { RoutePath as default };
|
|
11
|
+
//# sourceMappingURL=Path.d.ts.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const sError = Symbol("guard_error");
|
|
2
|
+
export default function (guards) {
|
|
3
|
+
return async (request, next) => {
|
|
4
|
+
try {
|
|
5
|
+
for (const guard of guards) {
|
|
6
|
+
const response = await guard(request);
|
|
7
|
+
if (response !== null)
|
|
8
|
+
throw { response, type: sError };
|
|
9
|
+
}
|
|
10
|
+
return next(request);
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
const guard_error = error;
|
|
14
|
+
if (guard_error.type === sError) {
|
|
15
|
+
return { request, response: guard_error.response };
|
|
16
|
+
}
|
|
17
|
+
// rethrow if not guard error
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=guard.js.map
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type Verb from "#request/Verb";
|
|
2
|
+
import type RouteHandler from "#route/Handler";
|
|
3
|
+
import type RouteOptions from "#route/Options";
|
|
4
|
+
declare class Router {
|
|
5
|
+
#private;
|
|
6
|
+
push(route: string): void;
|
|
7
|
+
pop(): void;
|
|
8
|
+
get active(): string | undefined;
|
|
9
|
+
add(verb: Verb, handler: RouteHandler, options?: RouteOptions): void;
|
|
10
|
+
get(path: string): {
|
|
11
|
+
options?: {
|
|
12
|
+
handler: RouteHandler;
|
|
13
|
+
options: RouteOptions;
|
|
14
|
+
} | undefined;
|
|
15
|
+
head?: {
|
|
16
|
+
handler: RouteHandler;
|
|
17
|
+
options: RouteOptions;
|
|
18
|
+
} | undefined;
|
|
19
|
+
get?: {
|
|
20
|
+
handler: RouteHandler;
|
|
21
|
+
options: RouteOptions;
|
|
22
|
+
} | undefined;
|
|
23
|
+
post?: {
|
|
24
|
+
handler: RouteHandler;
|
|
25
|
+
options: RouteOptions;
|
|
26
|
+
} | undefined;
|
|
27
|
+
put?: {
|
|
28
|
+
handler: RouteHandler;
|
|
29
|
+
options: RouteOptions;
|
|
30
|
+
} | undefined;
|
|
31
|
+
delete?: {
|
|
32
|
+
handler: RouteHandler;
|
|
33
|
+
options: RouteOptions;
|
|
34
|
+
} | undefined;
|
|
35
|
+
connect?: {
|
|
36
|
+
handler: RouteHandler;
|
|
37
|
+
options: RouteOptions;
|
|
38
|
+
} | undefined;
|
|
39
|
+
trace?: {
|
|
40
|
+
handler: RouteHandler;
|
|
41
|
+
options: RouteOptions;
|
|
42
|
+
} | undefined;
|
|
43
|
+
patch?: {
|
|
44
|
+
handler: RouteHandler;
|
|
45
|
+
options: RouteOptions;
|
|
46
|
+
} | undefined;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
declare const _default: Router;
|
|
50
|
+
export default _default;
|
|
51
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import assert from "@rcompat/assert";
|
|
2
|
+
import is from "@rcompat/assert/is";
|
|
3
|
+
import maybe from "@rcompat/assert/maybe";
|
|
4
|
+
class Router {
|
|
5
|
+
#routes = {};
|
|
6
|
+
#stack = [];
|
|
7
|
+
push(route) {
|
|
8
|
+
this.#stack.push(route);
|
|
9
|
+
}
|
|
10
|
+
pop() {
|
|
11
|
+
this.#stack.pop();
|
|
12
|
+
}
|
|
13
|
+
get active() {
|
|
14
|
+
return this.#stack.at(-1);
|
|
15
|
+
}
|
|
16
|
+
add(verb, handler, options = {}) {
|
|
17
|
+
assert(this.active !== undefined);
|
|
18
|
+
is(handler).function();
|
|
19
|
+
maybe(options).object();
|
|
20
|
+
const active = this.active;
|
|
21
|
+
const routes = this.#routes;
|
|
22
|
+
if (!(active in routes)) {
|
|
23
|
+
routes[active] = {};
|
|
24
|
+
}
|
|
25
|
+
routes[active][verb] = { handler, options };
|
|
26
|
+
}
|
|
27
|
+
get(path) {
|
|
28
|
+
return { ...this.#routes[path] };
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export default new Router();
|
|
32
|
+
//# sourceMappingURL=router.js.map
|