@primate/core 0.4.6 → 0.6.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 +771 -6
- package/lib/private/App.js +49 -16
- package/lib/private/Binder.d.ts +2 -2
- package/lib/private/Flags.d.ts +8 -4
- package/lib/private/Module.d.ts +4 -16
- package/lib/private/Module.js +1 -17
- package/lib/private/app/EnvSchema.d.ts +5 -0
- package/lib/private/app/EnvSchema.js +2 -0
- package/lib/private/app/Facade.browser.d.ts +11 -0
- package/lib/private/app/Facade.browser.js +19 -0
- package/lib/private/app/Facade.d.ts +811 -0
- package/lib/private/app/Facade.js +56 -0
- package/lib/private/asset/Asset.d.ts +1 -1
- package/lib/private/build/App.d.ts +2 -2
- package/lib/private/build/App.js +0 -2
- package/lib/private/build/client/index.js +19 -10
- package/lib/private/build/client/plugin/app-request.d.ts +4 -0
- package/lib/private/build/client/plugin/app-request.js +19 -0
- package/lib/private/build/client/plugin/view.d.ts +4 -0
- package/lib/private/build/client/plugin/view.js +13 -0
- package/lib/private/build/hook.d.ts +1 -2
- package/lib/private/build/hook.js +25 -19
- package/lib/private/build/index.d.ts +2 -1
- package/lib/private/build/index.js +27 -27
- package/lib/private/build/presets.d.ts +10 -0
- package/lib/private/build/presets.js +39 -0
- package/lib/private/build/server/index.js +10 -14
- package/lib/private/build/server/plugin/app-request.d.ts +4 -0
- package/lib/private/build/server/plugin/app-request.js +19 -0
- package/lib/private/build/server/plugin/assets.js +9 -7
- package/lib/private/build/server/plugin/config.js +11 -4
- package/lib/private/build/server/plugin/frontend.js +4 -2
- package/lib/private/build/server/plugin/live-reload.d.ts +4 -0
- package/lib/private/build/server/plugin/{hot-reload.js → live-reload.js} +12 -12
- package/lib/private/build/server/plugin/native-addons.js +10 -11
- package/lib/private/build/server/plugin/node-imports.js +2 -2
- package/lib/private/build/server/plugin/route.js +4 -4
- package/lib/private/build/server/plugin/store.js +11 -33
- package/lib/private/build/server/plugin/stores.js +12 -9
- package/lib/private/build/server/plugin/view.js +5 -5
- package/lib/private/build/server/plugin/views.js +4 -4
- package/lib/private/build/server/plugin/virtual-pages.js +8 -8
- package/lib/private/build/server/plugin/virtual-routes.js +8 -13
- package/lib/private/build/server/plugin/wasm.js +2 -3
- package/lib/private/build/shared/plugin/app-request.d.ts +4 -0
- package/lib/private/build/shared/plugin/app-request.js +19 -0
- package/lib/private/bye.js +2 -3
- package/lib/private/client/Data.d.ts +3 -2
- package/lib/private/client/Render.d.ts +8 -0
- package/lib/private/{frontend → client}/ServerData.d.ts +1 -1
- package/lib/private/client/ServerView.d.ts +4 -0
- package/lib/private/client/ValidateInit.d.ts +1 -3
- package/lib/private/client/ValidationError.d.ts +1 -1
- package/lib/private/{frontend → client}/View.d.ts +1 -1
- package/lib/private/{frontend → client}/ViewOptions.d.ts +1 -1
- package/lib/private/{frontend → client}/ViewResponse.d.ts +2 -2
- package/lib/private/client/app.js +3 -3
- package/lib/private/client/boot.d.ts +5 -0
- package/lib/private/client/boot.js +64 -0
- package/lib/private/client/create-form.d.ts +32 -0
- package/lib/private/client/create-form.js +123 -0
- package/lib/private/client/extract-issues.d.ts +4 -0
- package/lib/private/client/extract-issues.js +21 -0
- package/lib/private/client/http.d.ts +13 -0
- package/lib/private/client/http.js +57 -0
- package/lib/private/client/index.d.ts +23 -0
- package/lib/private/client/index.js +16 -0
- package/lib/private/client/navigate.d.ts +13 -0
- package/lib/private/client/navigate.js +67 -0
- package/lib/private/client/root.d.ts +9 -0
- package/lib/private/client/root.js +11 -0
- package/lib/private/client/submit.d.ts +2 -0
- package/lib/private/client/submit.js +41 -0
- package/lib/private/client/{toValidated.d.ts → to-validated.d.ts} +2 -4
- package/lib/private/client/{toValidated.js → to-validated.js} +1 -1
- package/lib/private/client/validate-field.d.ts +3 -0
- package/lib/private/client/validate-field.js +41 -0
- package/lib/private/config/index.d.ts +7 -21
- package/lib/private/config/index.js +4 -1
- package/lib/private/config/schema.d.ts +82 -22
- package/lib/private/config/schema.js +25 -7
- package/lib/private/cookie.d.ts +12 -6
- package/lib/private/cookie.js +10 -14
- package/lib/private/db/As.d.ts +10 -0
- package/lib/private/db/DB.d.ts +49 -0
- package/lib/private/db/DB.js +3 -0
- package/lib/private/db/DataDict.d.ts +5 -0
- package/lib/private/db/DataKey.d.ts +4 -0
- package/lib/private/db/DataValue.d.ts +17 -0
- package/lib/private/db/MemoryDB.d.ts +33 -0
- package/lib/private/db/MemoryDB.js +335 -0
- package/lib/private/db/PK.d.ts +3 -0
- package/lib/private/db/PK.js +2 -0
- package/lib/private/{database → db}/Query.d.ts +2 -2
- package/lib/private/{database → db}/QueryBuilder.d.ts +2 -3
- package/lib/private/db/ReadArgs.d.ts +9 -0
- package/lib/private/db/ReadArgs.js +2 -0
- package/lib/private/db/ReadRelationsArgs.d.ts +6 -0
- package/lib/private/db/ReadRelationsArgs.js +2 -0
- package/lib/private/{database → db}/Schema.d.ts +1 -2
- package/lib/private/db/Sort.d.ts +4 -0
- package/lib/private/{database → db}/TypeMap.d.ts +2 -3
- package/lib/private/{database → db}/Types.d.ts +1 -1
- package/lib/private/db/With.d.ts +16 -0
- package/lib/private/db/With.js +2 -0
- package/lib/private/db/common.d.ts +25 -0
- package/lib/private/db/common.js +67 -0
- package/lib/private/db/errors.d.ts +104 -0
- package/lib/private/db/errors.js +237 -0
- package/lib/private/db/migrate/apply.d.ts +2 -0
- package/lib/private/db/migrate/apply.js +32 -0
- package/lib/private/db/migrate/bundle.d.ts +3 -0
- package/lib/private/db/migrate/bundle.js +22 -0
- package/lib/private/db/migrate/create.d.ts +2 -0
- package/lib/private/db/migrate/create.js +154 -0
- package/lib/private/db/migrate/index.d.ts +10 -0
- package/lib/private/db/migrate/index.js +6 -0
- package/lib/private/db/migrate/status.d.ts +2 -0
- package/lib/private/db/migrate/status.js +38 -0
- package/lib/private/db/migrate/store.d.ts +5 -0
- package/lib/private/db/migrate/store.js +33 -0
- package/lib/private/db/sql.d.ts +28 -0
- package/lib/private/db/sql.js +177 -0
- package/lib/private/db/storage.d.ts +3 -0
- package/lib/private/db/storage.js +3 -0
- package/lib/private/db/symbol.js +2 -0
- package/lib/private/db/test.d.ts +4 -0
- package/lib/private/db/test.js +1750 -0
- package/lib/private/errors.d.ts +88 -0
- package/lib/private/errors.js +211 -0
- package/lib/private/frontend.d.ts +72 -0
- package/lib/private/frontend.js +245 -0
- package/lib/private/hash.js +0 -1
- package/lib/private/i18n/Catalog.d.ts +5 -2
- package/lib/private/i18n/Formatter.js +21 -9
- package/lib/private/i18n/errors.d.ts +16 -0
- package/lib/private/i18n/errors.js +27 -0
- package/lib/private/i18n/format.d.ts +4 -0
- package/lib/private/i18n/format.js +95 -0
- package/lib/private/i18n/index/client.d.ts +9 -0
- package/lib/private/i18n/index/client.js +152 -0
- package/lib/private/i18n/index/server.d.ts +9 -0
- package/lib/private/i18n/index/server.js +57 -0
- package/lib/private/i18n/index/types.d.ts +33 -0
- package/lib/private/i18n/index/types.js +2 -0
- package/lib/private/i18n/locale.d.ts +9 -3
- package/lib/private/i18n/module.d.ts +3 -0
- package/lib/private/i18n/module.js +115 -0
- package/lib/private/i18n/ordinals.d.ts +1 -1
- package/lib/private/i18n/resolve.d.ts +7 -0
- package/lib/private/i18n/resolve.js +30 -0
- package/lib/private/i18n/schema.d.ts +10 -5
- package/lib/private/i18n/schema.js +6 -10
- package/lib/private/i18n/storage.d.ts +3 -0
- package/lib/private/i18n/storage.js +5 -0
- package/lib/private/i18n/validate.d.ts +2 -0
- package/lib/private/i18n/validate.js +19 -0
- package/lib/private/index.d.ts +14 -0
- package/lib/private/index.js +2 -0
- package/lib/private/log.d.ts +1 -0
- package/lib/private/log.js +15 -14
- package/lib/private/module/Hook.d.ts +1 -1
- package/lib/private/module/Next.d.ts +1 -1
- package/lib/private/module/Setup.d.ts +21 -0
- package/lib/private/module/Setup.js +2 -0
- package/lib/private/module/create.d.ts +16 -0
- package/lib/private/module/create.js +28 -0
- package/lib/private/orm/ExtractSchema.d.ts +9 -0
- package/lib/private/orm/ExtractSchema.js +2 -0
- package/lib/private/orm/ForeignKey.d.ts +14 -0
- package/lib/private/orm/ForeignKey.js +25 -0
- package/lib/private/orm/PrimaryKey.d.ts +17 -0
- package/lib/private/orm/PrimaryKey.js +38 -0
- package/lib/private/orm/StoreInput.d.ts +10 -0
- package/lib/private/orm/StoreInput.js +2 -0
- package/lib/private/orm/key.d.ts +8 -0
- package/lib/private/orm/key.js +8 -0
- package/lib/private/orm/parse.d.ts +13 -0
- package/lib/private/orm/parse.js +29 -0
- package/lib/private/orm/relation.d.ts +43 -0
- package/lib/private/orm/relation.js +26 -0
- package/lib/private/orm/store.d.ts +187 -0
- package/lib/private/orm/store.js +542 -0
- package/lib/private/paths.d.ts +2 -2
- package/lib/private/paths.js +3 -3
- package/lib/private/request/RequestBag.d.ts +5 -1
- package/lib/private/request/RequestBag.js +16 -9
- package/lib/private/request/RequestBody.d.ts +6 -11
- package/lib/private/request/RequestBody.js +51 -59
- package/lib/private/request/RequestContext.d.ts +12 -0
- package/lib/private/request/RequestContext.js +31 -0
- package/lib/private/request/RequestFacade.d.ts +11 -6
- package/lib/private/request/RequestPublic.d.ts +9 -0
- package/lib/private/request/RequestPublic.js +2 -0
- package/lib/private/request/RequestView.d.ts +11 -0
- package/lib/private/request/RequestView.js +3 -0
- package/lib/private/request/handle.d.ts +4 -0
- package/lib/private/request/handle.js +18 -0
- package/lib/private/request/parse.d.ts +2 -2
- package/lib/private/request/parse.js +55 -16
- package/lib/private/request/route.js +37 -22
- package/lib/private/request/router.d.ts +1 -1
- package/lib/private/request/router.js +22 -50
- package/lib/private/{database/symbol/wrap.d.ts → request/sContext.d.ts} +1 -1
- package/lib/private/request/sContext.js +2 -0
- package/lib/private/request/storage.d.ts +4 -0
- package/lib/private/request/storage.js +5 -0
- package/lib/private/response/ResponseFunction.d.ts +2 -3
- package/lib/private/response/ResponseLike.d.ts +1 -1
- package/lib/private/response/binary.d.ts +1 -1
- package/lib/private/response/binary.js +4 -3
- package/lib/private/response/error.d.ts +1 -1
- package/lib/private/response/error.js +1 -1
- package/lib/private/response/json.d.ts +1 -1
- package/lib/private/response/json.js +2 -2
- package/lib/private/response/redirect.d.ts +5 -5
- package/lib/private/response/redirect.js +9 -10
- package/lib/private/response/respond.js +16 -17
- package/lib/private/response/sse.d.ts +1 -1
- package/lib/private/response/sse.js +2 -2
- package/lib/private/response/text.d.ts +1 -1
- package/lib/private/response/text.js +3 -3
- package/lib/private/response/view.d.ts +3 -3
- package/lib/private/response/view.js +7 -14
- package/lib/private/response/ws.d.ts +1 -1
- package/lib/private/response.d.ts +1 -1
- package/lib/private/route/Handler.d.ts +1 -1
- package/lib/private/route/hook.d.ts +6 -0
- package/lib/private/route/hook.js +5 -0
- package/lib/private/route/router.d.ts +6 -2
- package/lib/private/route/router.js +32 -18
- package/lib/private/route/wrap.js +2 -2
- package/lib/private/serve/App.d.ts +11 -25
- package/lib/private/serve/App.js +138 -120
- package/lib/private/serve/Init.d.ts +5 -5
- package/lib/private/serve/dev-module.d.ts +2 -0
- package/lib/private/serve/dev-module.js +34 -0
- package/lib/private/serve/hook.d.ts +1 -2
- package/lib/private/serve/hook.js +2 -9
- package/lib/private/serve/index.d.ts +1 -1
- package/lib/private/serve/index.js +36 -2
- package/lib/private/server/TAG.d.ts +3 -0
- package/lib/private/server/TAG.js +2 -0
- package/lib/private/server/index.d.ts +5 -0
- package/lib/private/server/index.js +6 -0
- package/lib/private/session/Data.d.ts +1 -2
- package/lib/private/session/SessionHandle.d.ts +1 -1
- package/lib/private/session/SessionHandle.js +11 -9
- package/lib/private/session/index.d.ts +3 -4
- package/lib/private/session/module.d.ts +3 -0
- package/lib/private/session/module.js +114 -0
- package/lib/private/session/schema.d.ts +17 -9
- package/lib/private/session/schema.js +11 -6
- package/lib/private/session/storage.d.ts +1 -2
- package/lib/private/session/storage.js +2 -2
- package/lib/private/tags.js +2 -2
- package/lib/private/target/Manager.js +6 -12
- package/lib/private/target/Target.d.ts +1 -1
- package/lib/public/AppFacade.d.ts +2 -0
- package/lib/public/AppFacade.js +2 -0
- package/lib/public/build/presets.d.ts +2 -0
- package/lib/public/build/presets.js +2 -0
- package/lib/public/build/transform.d.ts +2 -0
- package/lib/public/build/transform.js +2 -0
- package/lib/public/client.d.ts +3 -0
- package/lib/public/client.js +2 -0
- package/lib/public/db/MemoryDB.d.ts +2 -0
- package/lib/public/db/MemoryDB.js +2 -0
- package/lib/public/db/errors.d.ts +2 -0
- package/lib/public/db/errors.js +2 -0
- package/lib/public/db/migrate.d.ts +2 -0
- package/lib/public/db/migrate.js +2 -0
- package/lib/public/db/sql.d.ts +2 -0
- package/lib/public/db/sql.js +2 -0
- package/lib/public/db/test.d.ts +2 -0
- package/lib/public/db/test.js +2 -0
- package/lib/public/db.d.ts +12 -0
- package/lib/public/db.js +2 -0
- package/lib/public/frontend.d.ts +3 -0
- package/lib/public/frontend.js +2 -0
- package/lib/public/index.d.ts +2 -0
- package/lib/public/index.js +2 -0
- package/lib/public/orm/key.d.ts +2 -0
- package/lib/public/orm/key.js +2 -0
- package/lib/public/orm/relation.d.ts +2 -0
- package/lib/public/orm/relation.js +2 -0
- package/lib/public/orm/store.d.ts +2 -0
- package/lib/public/orm/store.js +2 -0
- package/lib/public/request/server.d.ts +5 -0
- package/lib/public/request/server.js +7 -0
- package/lib/public/response.d.ts +22 -0
- package/lib/public/response.js +19 -0
- package/lib/public/route/hook.d.ts +2 -0
- package/lib/public/route/hook.js +2 -0
- package/lib/public/server.d.ts +3 -0
- package/lib/public/server.js +2 -0
- package/package.json +40 -30
- package/lib/private/AppError.d.ts +0 -4
- package/lib/private/AppError.js +0 -8
- package/lib/private/backend/Module.d.ts +0 -18
- package/lib/private/backend/Module.js +0 -22
- package/lib/private/backend/TAG.d.ts +0 -3
- package/lib/private/backend/TAG.js +0 -2
- package/lib/private/build/client/reload.d.ts +0 -7
- package/lib/private/build/client/reload.js +0 -6
- package/lib/private/build/server/plugin/database-default.d.ts +0 -4
- package/lib/private/build/server/plugin/database-default.js +0 -48
- package/lib/private/build/server/plugin/hot-reload.d.ts +0 -4
- package/lib/private/build/server/plugin/store-wrap.d.ts +0 -4
- package/lib/private/build/server/plugin/store-wrap.js +0 -33
- package/lib/private/client/spa/index.d.ts +0 -6
- package/lib/private/client/spa/index.js +0 -201
- package/lib/private/client/validate.d.ts +0 -3
- package/lib/private/client/validate.js +0 -54
- package/lib/private/database/As.d.ts +0 -7
- package/lib/private/database/Binds.d.ts +0 -4
- package/lib/private/database/Binds.js +0 -2
- package/lib/private/database/Changes.d.ts +0 -11
- package/lib/private/database/Changes.js +0 -2
- package/lib/private/database/ColumnTypes.d.ts +0 -11
- package/lib/private/database/ColumnTypes.js +0 -2
- package/lib/private/database/DataDict.d.ts +0 -5
- package/lib/private/database/DataKey.d.ts +0 -4
- package/lib/private/database/DataValue.d.ts +0 -5
- package/lib/private/database/Database.d.ts +0 -56
- package/lib/private/database/Database.js +0 -153
- package/lib/private/database/InMemoryDatabase.d.ts +0 -37
- package/lib/private/database/InMemoryDatabase.js +0 -181
- package/lib/private/database/Sort.d.ts +0 -4
- package/lib/private/database/Store.d.ts +0 -172
- package/lib/private/database/Store.js +0 -261
- package/lib/private/database/storage.d.ts +0 -4
- package/lib/private/database/storage.js +0 -3
- package/lib/private/database/symbol/wrap.js +0 -2
- package/lib/private/database/symbol.js +0 -2
- package/lib/private/database/test.d.ts +0 -4
- package/lib/private/database/test.js +0 -678
- package/lib/private/database/wrap.d.ts +0 -5
- package/lib/private/database/wrap.js +0 -5
- package/lib/private/fail.d.ts +0 -3
- package/lib/private/fail.js +0 -5
- package/lib/private/frontend/Module.d.ts +0 -62
- package/lib/private/frontend/Module.js +0 -250
- package/lib/private/frontend/Render.d.ts +0 -9
- package/lib/private/frontend/ServerView.d.ts +0 -5
- package/lib/private/i18n/Module.d.ts +0 -16
- package/lib/private/i18n/Module.js +0 -122
- package/lib/private/i18n/index.d.ts +0 -28
- package/lib/private/i18n/index.js +0 -236
- package/lib/private/module/BuildHook.d.ts +0 -5
- package/lib/private/module/BuildHook.js +0 -2
- package/lib/private/module/NextBuild.d.ts +0 -5
- package/lib/private/module/NextBuild.js +0 -2
- package/lib/private/module/NextServe.d.ts +0 -5
- package/lib/private/module/NextServe.js +0 -2
- package/lib/private/reducer.d.ts +0 -24
- package/lib/private/reducer.js +0 -10
- package/lib/private/route/guard.d.ts +0 -4
- package/lib/private/route/guard.js +0 -22
- package/lib/private/serve/module/Dev.d.ts +0 -11
- package/lib/private/serve/module/Dev.js +0 -28
- package/lib/private/serve/module/Handle.d.ts +0 -10
- package/lib/private/serve/module/Handle.js +0 -15
- package/lib/private/session/SessionModule.d.ts +0 -14
- package/lib/private/session/SessionModule.js +0 -122
- package/lib/private/wasm/API.d.ts +0 -7
- package/lib/private/wasm/API.js +0 -2
- package/lib/private/wasm/BufferViewSource.d.ts +0 -4
- package/lib/private/wasm/BufferViewSource.js +0 -2
- package/lib/private/wasm/Exports.d.ts +0 -23
- package/lib/private/wasm/Exports.js +0 -2
- package/lib/private/wasm/I32.d.ts +0 -5
- package/lib/private/wasm/I32.js +0 -2
- package/lib/private/wasm/I32_SIZE.d.ts +0 -3
- package/lib/private/wasm/I32_SIZE.js +0 -2
- package/lib/private/wasm/Instantiation.d.ts +0 -12
- package/lib/private/wasm/Instantiation.js +0 -2
- package/lib/private/wasm/Tagged.d.ts +0 -7
- package/lib/private/wasm/Tagged.js +0 -2
- package/lib/private/wasm/buffersize.d.ts +0 -2
- package/lib/private/wasm/buffersize.js +0 -5
- package/lib/private/wasm/decode-bytes.d.ts +0 -3
- package/lib/private/wasm/decode-bytes.js +0 -5
- package/lib/private/wasm/decode-json.d.ts +0 -7
- package/lib/private/wasm/decode-json.js +0 -11
- package/lib/private/wasm/decode-option.d.ts +0 -5
- package/lib/private/wasm/decode-option.js +0 -10
- package/lib/private/wasm/decode-response.d.ts +0 -19
- package/lib/private/wasm/decode-response.js +0 -90
- package/lib/private/wasm/decode-string.d.ts +0 -3
- package/lib/private/wasm/decode-string.js +0 -5
- package/lib/private/wasm/decode-websocket-close.d.ts +0 -5
- package/lib/private/wasm/decode-websocket-close.js +0 -6
- package/lib/private/wasm/decode-websocket-send.d.ts +0 -6
- package/lib/private/wasm/decode-websocket-send.js +0 -19
- package/lib/private/wasm/encode-buffer.d.ts +0 -3
- package/lib/private/wasm/encode-buffer.js +0 -6
- package/lib/private/wasm/encode-request.d.ts +0 -9
- package/lib/private/wasm/encode-request.js +0 -195
- package/lib/private/wasm/encode-session.d.ts +0 -3
- package/lib/private/wasm/encode-session.js +0 -25
- package/lib/private/wasm/encode-string-map.d.ts +0 -5
- package/lib/private/wasm/encode-string-map.js +0 -14
- package/lib/private/wasm/encode-string.d.ts +0 -13
- package/lib/private/wasm/encode-string.js +0 -17
- package/lib/private/wasm/encode-url.d.ts +0 -11
- package/lib/private/wasm/encode-url.js +0 -14
- package/lib/private/wasm/encode-websocket-close.d.ts +0 -2
- package/lib/private/wasm/encode-websocket-close.js +0 -7
- package/lib/private/wasm/encode-websocket-message.d.ts +0 -4
- package/lib/private/wasm/encode-websocket-message.js +0 -30
- package/lib/private/wasm/encode-websocket-open.d.ts +0 -2
- package/lib/private/wasm/encode-websocket-open.js +0 -7
- package/lib/private/wasm/filesize.d.ts +0 -2
- package/lib/private/wasm/filesize.js +0 -8
- package/lib/private/wasm/instantiate.d.ts +0 -37
- package/lib/private/wasm/instantiate.js +0 -408
- package/lib/private/wasm/open-websocket.d.ts +0 -4
- package/lib/private/wasm/open-websocket.js +0 -26
- package/lib/private/wasm/stringsize.d.ts +0 -3
- package/lib/private/wasm/stringsize.js +0 -5
- package/lib/private/wasm/urlsize.d.ts +0 -2
- package/lib/private/wasm/urlsize.js +0 -5
- package/lib/public/App.d.ts +0 -2
- package/lib/public/App.js +0 -2
- package/lib/public/AppError.d.ts +0 -2
- package/lib/public/AppError.js +0 -2
- package/lib/public/BuildApp.d.ts +0 -2
- package/lib/public/BuildApp.js +0 -2
- package/lib/public/BuildHook.d.ts +0 -2
- package/lib/public/BuildHook.js +0 -2
- package/lib/public/Database.d.ts +0 -2
- package/lib/public/Database.js +0 -2
- package/lib/public/Mode.d.ts +0 -2
- package/lib/public/Mode.js +0 -2
- package/lib/public/Module.d.ts +0 -2
- package/lib/public/Module.js +0 -2
- package/lib/public/Next.d.ts +0 -2
- package/lib/public/Next.js +0 -2
- package/lib/public/NextBuild.d.ts +0 -2
- package/lib/public/NextBuild.js +0 -2
- package/lib/public/NextHandle.d.ts +0 -2
- package/lib/public/NextHandle.js +0 -2
- package/lib/public/NextRoute.d.ts +0 -3
- package/lib/public/NextRoute.js +0 -2
- package/lib/public/NextServe.d.ts +0 -2
- package/lib/public/NextServe.js +0 -2
- package/lib/public/ServeApp.d.ts +0 -2
- package/lib/public/ServeApp.js +0 -2
- package/lib/public/Target.d.ts +0 -2
- package/lib/public/Target.js +0 -2
- package/lib/public/backend/Module.d.ts +0 -2
- package/lib/public/backend/Module.js +0 -2
- package/lib/public/backend/TAG.d.ts +0 -2
- package/lib/public/backend/TAG.js +0 -2
- package/lib/public/client/Data.d.ts +0 -2
- package/lib/public/client/Data.js +0 -2
- package/lib/public/client/ValidateInit.d.ts +0 -2
- package/lib/public/client/ValidateInit.js +0 -2
- package/lib/public/client/ValidateUpdater.d.ts +0 -2
- package/lib/public/client/ValidateUpdater.js +0 -2
- package/lib/public/client/ValidationError.d.ts +0 -2
- package/lib/public/client/ValidationError.js +0 -2
- package/lib/public/client/spa.d.ts +0 -2
- package/lib/public/client/spa.js +0 -2
- package/lib/public/client/toValidated.d.ts +0 -2
- package/lib/public/client/toValidated.js +0 -2
- package/lib/public/client/validate.d.ts +0 -2
- package/lib/public/client/validate.js +0 -2
- package/lib/public/database/As.d.ts +0 -2
- package/lib/public/database/As.js +0 -2
- package/lib/public/database/DataDict.d.ts +0 -2
- package/lib/public/database/DataDict.js +0 -2
- package/lib/public/database/InMemoryDatabase.d.ts +0 -2
- package/lib/public/database/InMemoryDatabase.js +0 -2
- package/lib/public/database/Sort.d.ts +0 -2
- package/lib/public/database/Sort.js +0 -2
- package/lib/public/database/Store.d.ts +0 -2
- package/lib/public/database/Store.js +0 -2
- package/lib/public/database/TypeMap.d.ts +0 -2
- package/lib/public/database/TypeMap.js +0 -2
- package/lib/public/database/Types.d.ts +0 -2
- package/lib/public/database/Types.js +0 -2
- package/lib/public/database/test.d.ts +0 -2
- package/lib/public/database/test.js +0 -2
- package/lib/public/database/wrap.d.ts +0 -2
- package/lib/public/database/wrap.js +0 -2
- package/lib/public/fail.d.ts +0 -2
- package/lib/public/fail.js +0 -2
- package/lib/public/frontend/Module.d.ts +0 -2
- package/lib/public/frontend/Module.js +0 -2
- package/lib/public/frontend/Publish.d.ts +0 -2
- package/lib/public/frontend/Publish.js +0 -2
- package/lib/public/frontend/Render.d.ts +0 -2
- package/lib/public/frontend/Render.js +0 -2
- package/lib/public/frontend/ViewResponse.d.ts +0 -2
- package/lib/public/frontend/ViewResponse.js +0 -2
- package/lib/public/request/RequestBody.d.ts +0 -2
- package/lib/public/request/RequestBody.js +0 -2
- package/lib/public/request/RequestFacade.d.ts +0 -2
- package/lib/public/request/RequestFacade.js +0 -2
- package/lib/public/request/Verb.d.ts +0 -2
- package/lib/public/request/Verb.js +0 -2
- package/lib/public/response/ResponseFunction.d.ts +0 -2
- package/lib/public/response/ResponseFunction.js +0 -2
- package/lib/public/response/ResponseLike.d.ts +0 -2
- package/lib/public/response/ResponseLike.js +0 -2
- package/lib/public/response/binary.d.ts +0 -2
- package/lib/public/response/binary.js +0 -2
- package/lib/public/response/error.d.ts +0 -2
- package/lib/public/response/error.js +0 -2
- package/lib/public/response/json.d.ts +0 -2
- package/lib/public/response/json.js +0 -2
- package/lib/public/response/redirect.d.ts +0 -2
- package/lib/public/response/redirect.js +0 -2
- package/lib/public/response/sse.d.ts +0 -2
- package/lib/public/response/sse.js +0 -2
- package/lib/public/response/text.d.ts +0 -2
- package/lib/public/response/text.js +0 -2
- package/lib/public/response/view.d.ts +0 -2
- package/lib/public/response/view.js +0 -2
- package/lib/public/response/ws.d.ts +0 -2
- package/lib/public/response/ws.js +0 -2
- package/lib/public/wasm/decode-json.d.ts +0 -5
- package/lib/public/wasm/decode-json.js +0 -3
- package/lib/public/wasm/decode-response.d.ts +0 -3
- package/lib/public/wasm/decode-response.js +0 -3
- package/lib/public/wasm/encode-request.d.ts +0 -3
- package/lib/public/wasm/encode-request.js +0 -3
- package/lib/public/wasm/encode-session.d.ts +0 -3
- package/lib/public/wasm/encode-session.js +0 -3
- package/lib/public/wasm/instantiate.d.ts +0 -4
- package/lib/public/wasm/instantiate.js +0 -3
- /package/lib/private/{frontend → client}/Publish.d.ts +0 -0
- /package/lib/private/{frontend → client}/Publish.js +0 -0
- /package/lib/private/{frontend → client}/Render.js +0 -0
- /package/lib/private/{frontend → client}/ServerData.js +0 -0
- /package/lib/private/{frontend → client}/ServerView.js +0 -0
- /package/lib/private/{frontend → client}/View.js +0 -0
- /package/lib/private/{frontend → client}/ViewOptions.js +0 -0
- /package/lib/private/{frontend → client}/ViewResponse.js +0 -0
- /package/lib/private/client/{spa/storage.d.ts → storage.d.ts} +0 -0
- /package/lib/private/client/{spa/storage.js → storage.js} +0 -0
- /package/lib/private/{database → db}/As.js +0 -0
- /package/lib/private/{database → db}/DataDict.js +0 -0
- /package/lib/private/{database → db}/DataKey.js +0 -0
- /package/lib/private/{database → db}/DataValue.js +0 -0
- /package/lib/private/{database → db}/Query.js +0 -0
- /package/lib/private/{database → db}/QueryBuilder.js +0 -0
- /package/lib/private/{database → db}/Schema.js +0 -0
- /package/lib/private/{database → db}/Sort.js +0 -0
- /package/lib/private/{database → db}/TypeMap.js +0 -0
- /package/lib/private/{database → db}/Types.js +0 -0
- /package/lib/private/{database → db}/primary.d.ts +0 -0
- /package/lib/private/{database → db}/primary.js +0 -0
- /package/lib/private/{database → db}/symbol.d.ts +0 -0
package/lib/private/serve/App.js
CHANGED
|
@@ -1,31 +1,29 @@
|
|
|
1
1
|
import App from "#App";
|
|
2
|
-
import
|
|
2
|
+
import { s_config } from "#app/Facade";
|
|
3
|
+
import E from "#errors";
|
|
3
4
|
import hash from "#hash";
|
|
4
|
-
import
|
|
5
|
+
import i18n_module from "#i18n/module";
|
|
5
6
|
import location from "#location";
|
|
6
7
|
import log from "#log";
|
|
7
|
-
import
|
|
8
|
+
import create from "#module/create";
|
|
9
|
+
import handle from "#request/handle";
|
|
8
10
|
import parse from "#request/parse";
|
|
9
11
|
import RequestBag from "#request/RequestBag";
|
|
10
12
|
import RequestBody from "#request/RequestBody";
|
|
13
|
+
import route from "#request/route";
|
|
14
|
+
import request_storage from "#request/storage";
|
|
11
15
|
import router from "#route/router";
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import SessionModule from "#session/SessionModule";
|
|
16
|
+
import dev_module from "#serve/dev-module";
|
|
17
|
+
import session_module from "#session/module";
|
|
15
18
|
import tags from "#tags";
|
|
16
|
-
import
|
|
17
|
-
import
|
|
19
|
+
import assert from "@rcompat/assert";
|
|
20
|
+
import fs from "@rcompat/fs";
|
|
18
21
|
import FileRouter from "@rcompat/fs/FileRouter";
|
|
19
|
-
import
|
|
20
|
-
import TEXT_HTML from "@rcompat/http/mime/text/html";
|
|
22
|
+
import { MIME, Status } from "@rcompat/http";
|
|
21
23
|
import serve from "@rcompat/http/serve";
|
|
22
|
-
import
|
|
23
|
-
import
|
|
24
|
-
import
|
|
25
|
-
import pema from "pema";
|
|
26
|
-
import record from "pema/record";
|
|
27
|
-
import string from "pema/string";
|
|
28
|
-
import uint from "pema/uint";
|
|
24
|
+
import is from "@rcompat/is";
|
|
25
|
+
import utf8 from "@rcompat/string/utf8";
|
|
26
|
+
import p from "pema";
|
|
29
27
|
const deroot = (pathname) => pathname.endsWith("/") && pathname !== "/"
|
|
30
28
|
? pathname.slice(0, -1)
|
|
31
29
|
: pathname;
|
|
@@ -62,13 +60,12 @@ export default class ServeApp extends App {
|
|
|
62
60
|
#serve_assets;
|
|
63
61
|
#pages;
|
|
64
62
|
#stores;
|
|
65
|
-
#frontends =
|
|
63
|
+
#frontends = new Map();
|
|
66
64
|
#router;
|
|
67
|
-
#builtins;
|
|
68
65
|
#i18n_config;
|
|
69
66
|
constructor(rootfile, init) {
|
|
70
|
-
const dir =
|
|
71
|
-
super(dir, init.
|
|
67
|
+
const dir = fs.ref(rootfile).directory;
|
|
68
|
+
super(dir, init.facade[s_config], {
|
|
72
69
|
mode: init.mode,
|
|
73
70
|
target: init.target,
|
|
74
71
|
dir: dir.path,
|
|
@@ -78,8 +75,8 @@ export default class ServeApp extends App {
|
|
|
78
75
|
this.#stores = Object.fromEntries((init.stores?.map(([k, s]) => [k, s.default])) ?? []);
|
|
79
76
|
this.#serve_assets = init.assets;
|
|
80
77
|
this.#pages = init.pages;
|
|
81
|
-
const http = this.#init.
|
|
82
|
-
this.#i18n_config = init.
|
|
78
|
+
const http = this.#init.facade[s_config].http;
|
|
79
|
+
this.#i18n_config = init.i18n;
|
|
83
80
|
this.set(s_http, {
|
|
84
81
|
host: http.host,
|
|
85
82
|
port: http.port,
|
|
@@ -92,16 +89,39 @@ export default class ServeApp extends App {
|
|
|
92
89
|
extensions: [".js"],
|
|
93
90
|
specials: {
|
|
94
91
|
error: { recursive: false },
|
|
95
|
-
guard: { recursive: true },
|
|
96
92
|
layout: { recursive: true },
|
|
93
|
+
hook: { recursive: true },
|
|
97
94
|
},
|
|
98
95
|
}, init.routes.map(s => s[0]));
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
96
|
+
if (init.mode === "development")
|
|
97
|
+
this.register(dev_module());
|
|
98
|
+
const assets = this.serve_assets.bind(this);
|
|
99
|
+
const bound_route = (request) => route(this, request);
|
|
100
|
+
if (init.session !== undefined) {
|
|
101
|
+
this.register(session_module(init.session));
|
|
102
|
+
}
|
|
103
|
+
if (init.i18n !== undefined)
|
|
104
|
+
this.register(i18n_module(init.i18n));
|
|
105
|
+
this.register(create({
|
|
106
|
+
name: "builtin/handle",
|
|
107
|
+
setup({ onHandle }) {
|
|
108
|
+
onHandle(async (request) => {
|
|
109
|
+
const asset = await assets(request.url.pathname);
|
|
110
|
+
if (asset !== undefined)
|
|
111
|
+
return asset;
|
|
112
|
+
return new Promise((resolve, reject) => {
|
|
113
|
+
request_storage().run(request, async () => {
|
|
114
|
+
try {
|
|
115
|
+
resolve(await bound_route(request));
|
|
116
|
+
}
|
|
117
|
+
catch (e) {
|
|
118
|
+
reject(e);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
},
|
|
124
|
+
}));
|
|
105
125
|
}
|
|
106
126
|
;
|
|
107
127
|
get secure() {
|
|
@@ -111,10 +131,6 @@ export default class ServeApp extends App {
|
|
|
111
131
|
get assets() {
|
|
112
132
|
return this.#assets;
|
|
113
133
|
}
|
|
114
|
-
get modules() {
|
|
115
|
-
const { session, i18n } = this.#builtins;
|
|
116
|
-
return [session, i18n, ...super.modules].filter(m => m !== undefined);
|
|
117
|
-
}
|
|
118
134
|
get url() {
|
|
119
135
|
const { host, port } = this.config("http");
|
|
120
136
|
return `http${this.secure ? "s" : ""}://${host}:${port}`;
|
|
@@ -124,7 +140,7 @@ export default class ServeApp extends App {
|
|
|
124
140
|
return this.#router;
|
|
125
141
|
}
|
|
126
142
|
get frontends() {
|
|
127
|
-
return
|
|
143
|
+
return Object.fromEntries(this.#frontends);
|
|
128
144
|
}
|
|
129
145
|
get stores() {
|
|
130
146
|
return this.#stores;
|
|
@@ -133,32 +149,31 @@ export default class ServeApp extends App {
|
|
|
133
149
|
return this.#i18n_config;
|
|
134
150
|
}
|
|
135
151
|
loadView(name) {
|
|
136
|
-
const f =
|
|
152
|
+
const f = fs.ref(name).path;
|
|
137
153
|
const frontends = Object.keys(this.frontends);
|
|
138
|
-
const extension = frontends.find(
|
|
154
|
+
const extension = frontends.find(client => f.endsWith(client));
|
|
139
155
|
const base = extension === undefined ? name : f.slice(0, -extension.length);
|
|
140
156
|
const view = this.#views[base];
|
|
141
157
|
if (view === undefined)
|
|
142
|
-
throw
|
|
143
|
-
if (view.default === undefined)
|
|
144
|
-
throw
|
|
145
|
-
}
|
|
158
|
+
throw E.view_missing(name);
|
|
159
|
+
if (view.default === undefined)
|
|
160
|
+
throw E.view_missing_default_export(name);
|
|
146
161
|
return view.default;
|
|
147
162
|
}
|
|
148
163
|
;
|
|
149
164
|
headers(csp = {}) {
|
|
150
|
-
const
|
|
165
|
+
const base = Object.entries(this.config("http.csp") ?? {});
|
|
151
166
|
return {
|
|
152
167
|
...this.config("http.headers") ?? {},
|
|
153
|
-
...
|
|
154
|
-
"Content-Security-Policy": to_csp(
|
|
168
|
+
...base.length === 0 ? {} : {
|
|
169
|
+
"Content-Security-Policy": to_csp(base, this.#csp, csp),
|
|
155
170
|
},
|
|
156
171
|
};
|
|
157
172
|
}
|
|
158
173
|
;
|
|
159
174
|
render(content) {
|
|
160
175
|
const { body, head, page, partial, placeholders = {} } = content;
|
|
161
|
-
["body", "head"].forEach(key =>
|
|
176
|
+
["body", "head"].forEach(key => assert.undefined(placeholders[key]));
|
|
162
177
|
return partial ? body : Object.entries(placeholders)
|
|
163
178
|
// replace given placeholders, defaulting to ""
|
|
164
179
|
.reduce((rendered, [key, value]) => rendered
|
|
@@ -170,20 +185,22 @@ export default class ServeApp extends App {
|
|
|
170
185
|
.replace("%head%", render_head(this.#assets, head));
|
|
171
186
|
}
|
|
172
187
|
body_length(body) {
|
|
173
|
-
return
|
|
188
|
+
return is.string(body) ? utf8.size(body) : 0;
|
|
174
189
|
}
|
|
175
190
|
respond(body, init) {
|
|
176
|
-
const { headers, status } =
|
|
177
|
-
headers:
|
|
178
|
-
status: uint.values(Status).default(Status.OK),
|
|
191
|
+
const { headers, status } = p({
|
|
192
|
+
headers: p.dict(),
|
|
193
|
+
status: p.uint.values(Status).default(Status.OK),
|
|
179
194
|
}).parse(init);
|
|
180
195
|
const body_length = this.body_length(body);
|
|
181
196
|
return new Response(body, {
|
|
182
197
|
headers: {
|
|
183
|
-
"Content-Type": TEXT_HTML,
|
|
198
|
+
"Content-Type": MIME.TEXT_HTML,
|
|
184
199
|
...this.headers(),
|
|
185
|
-
...body_length ? {
|
|
186
|
-
|
|
200
|
+
...body_length ? {
|
|
201
|
+
...headers, "Content-Length": String(body_length),
|
|
202
|
+
} : headers,
|
|
203
|
+
}, status,
|
|
187
204
|
});
|
|
188
205
|
}
|
|
189
206
|
;
|
|
@@ -206,7 +223,7 @@ export default class ServeApp extends App {
|
|
|
206
223
|
code: inline ? code : "",
|
|
207
224
|
inline,
|
|
208
225
|
integrity: await hash(code),
|
|
209
|
-
src:
|
|
226
|
+
src: fs.join(this.config("http.static.root"), src ?? "").path,
|
|
210
227
|
type,
|
|
211
228
|
});
|
|
212
229
|
}
|
|
@@ -216,32 +233,35 @@ export default class ServeApp extends App {
|
|
|
216
233
|
;
|
|
217
234
|
create_csp() {
|
|
218
235
|
this.#csp = this.#assets.map(({ integrity, type: directive }) => [`${directive === "style" ? "style" : "script"}-src`, integrity])
|
|
219
|
-
.reduce((csp, [directive,
|
|
236
|
+
.reduce((csp, [directive, _hash]) => ({
|
|
237
|
+
...csp,
|
|
238
|
+
[directive]: csp[directive].concat(`'${_hash}'`),
|
|
239
|
+
}), { "script-src": [], "style-src": [] });
|
|
220
240
|
}
|
|
221
241
|
;
|
|
222
|
-
|
|
223
|
-
if (this.#frontends
|
|
224
|
-
throw
|
|
242
|
+
frontend(extension, view_response) {
|
|
243
|
+
if (this.#frontends.has(extension)) {
|
|
244
|
+
throw E.view_duplicate_extension(extension);
|
|
225
245
|
}
|
|
226
|
-
this.#frontends
|
|
246
|
+
this.#frontends.set(extension, view_response);
|
|
227
247
|
}
|
|
228
248
|
;
|
|
229
249
|
page(name) {
|
|
230
250
|
const page_name = name ?? location.app_html;
|
|
231
251
|
return this.#pages[page_name];
|
|
232
252
|
}
|
|
233
|
-
async #try_serve(
|
|
234
|
-
if (await
|
|
235
|
-
return new Response(
|
|
253
|
+
async #try_serve(ref) {
|
|
254
|
+
if (await ref.exists() && await ref.kind() === "file") {
|
|
255
|
+
return new Response(ref.stream(), {
|
|
236
256
|
headers: {
|
|
237
|
-
"Content-Type": resolve(
|
|
238
|
-
"Content-Length": String(await
|
|
257
|
+
"Content-Type": MIME.resolve(ref.name),
|
|
258
|
+
"Content-Length": String(await ref.size()),
|
|
239
259
|
},
|
|
240
260
|
status: Status.OK,
|
|
241
261
|
});
|
|
242
262
|
}
|
|
243
263
|
}
|
|
244
|
-
async
|
|
264
|
+
async serve_assets(pathname) {
|
|
245
265
|
const static_root = this.config("http.static.root");
|
|
246
266
|
if (!pathname.startsWith(static_root))
|
|
247
267
|
return undefined;
|
|
@@ -256,23 +276,22 @@ export default class ServeApp extends App {
|
|
|
256
276
|
return static_response;
|
|
257
277
|
return undefined;
|
|
258
278
|
}
|
|
259
|
-
const
|
|
260
|
-
|
|
261
|
-
if (asset)
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
return new Response(bytes, {
|
|
268
|
-
headers: {
|
|
269
|
-
"Content-Type": asset.mime,
|
|
270
|
-
"Content-Length": String(bytes.length),
|
|
271
|
-
},
|
|
272
|
-
status: Status.OK,
|
|
273
|
-
});
|
|
279
|
+
const assets = this.#serve_assets;
|
|
280
|
+
const asset = assets.client[pathname] ?? assets.static[pathname];
|
|
281
|
+
if (asset === undefined)
|
|
282
|
+
return undefined;
|
|
283
|
+
const binary = atob(asset.data);
|
|
284
|
+
const bytes = new Uint8Array(binary.length);
|
|
285
|
+
for (let i = 0; i < binary.length; i++) {
|
|
286
|
+
bytes[i] = binary.charCodeAt(i);
|
|
274
287
|
}
|
|
275
|
-
return
|
|
288
|
+
return new Response(bytes, {
|
|
289
|
+
headers: {
|
|
290
|
+
"Content-Type": asset.mime,
|
|
291
|
+
"Content-Length": String(bytes.length),
|
|
292
|
+
},
|
|
293
|
+
status: Status.OK,
|
|
294
|
+
});
|
|
276
295
|
}
|
|
277
296
|
async start() {
|
|
278
297
|
if (this.mode === "production") {
|
|
@@ -293,8 +312,10 @@ export default class ServeApp extends App {
|
|
|
293
312
|
else {
|
|
294
313
|
const client_dir = this.root.join(location.client);
|
|
295
314
|
const files = await client_dir.exists()
|
|
296
|
-
? await client_dir.
|
|
297
|
-
|
|
315
|
+
? await client_dir.files({
|
|
316
|
+
recursive: true,
|
|
317
|
+
filter: info => info.extension === ".js" || info.extension === ".css",
|
|
318
|
+
})
|
|
298
319
|
: [];
|
|
299
320
|
this.#assets = await Promise.all(files.map(async (file) => {
|
|
300
321
|
const type = file.extension === ".css" ? "style" : "js";
|
|
@@ -308,15 +329,9 @@ export default class ServeApp extends App {
|
|
|
308
329
|
};
|
|
309
330
|
}));
|
|
310
331
|
}
|
|
311
|
-
const modules = [
|
|
312
|
-
this.#builtins.dev,
|
|
313
|
-
...this.modules,
|
|
314
|
-
this.#builtins.handle,
|
|
315
|
-
].filter(m => m !== undefined);
|
|
316
|
-
const handle = (request) => reducer(modules, request, "handle");
|
|
317
332
|
this.#server = await serve(async (request) => {
|
|
318
333
|
try {
|
|
319
|
-
return await handle(parse(request));
|
|
334
|
+
return await handle(this, parse(request));
|
|
320
335
|
}
|
|
321
336
|
catch (error) {
|
|
322
337
|
log.error(error);
|
|
@@ -328,9 +343,14 @@ export default class ServeApp extends App {
|
|
|
328
343
|
status: Status.INTERNAL_SERVER_ERROR,
|
|
329
344
|
});
|
|
330
345
|
}
|
|
331
|
-
}, {
|
|
332
|
-
|
|
333
|
-
|
|
346
|
+
}, {
|
|
347
|
+
...this.get(s_http),
|
|
348
|
+
timeout: this.mode === "development" ? 0 : undefined,
|
|
349
|
+
});
|
|
350
|
+
function bright(x) {
|
|
351
|
+
return `\x1b[38;2;0;200;255m${x}\x1b[0m`;
|
|
352
|
+
}
|
|
353
|
+
log.print(`» app url ${bright(this.url)}\n`);
|
|
334
354
|
}
|
|
335
355
|
;
|
|
336
356
|
stop() {
|
|
@@ -350,37 +370,35 @@ export default class ServeApp extends App {
|
|
|
350
370
|
return;
|
|
351
371
|
}
|
|
352
372
|
const verb = original.method.toLowerCase();
|
|
353
|
-
const
|
|
354
|
-
|
|
355
|
-
.map(
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
.
|
|
373
|
+
const specials = route.specials;
|
|
374
|
+
const errors = (specials.error ?? [])
|
|
375
|
+
.map(v => router.get(v)[verb]?.handler)
|
|
376
|
+
.filter(Boolean)
|
|
377
|
+
.toReversed();
|
|
378
|
+
const layouts = (specials.layout ?? [])
|
|
379
|
+
.map(v => router.get(v)[verb]?.handler)
|
|
380
|
+
.filter(Boolean)
|
|
381
|
+
.toReversed();
|
|
382
|
+
const hooks = (specials.hook ?? [])
|
|
383
|
+
.toReversed()
|
|
384
|
+
.flatMap(v => router.getHooks(v));
|
|
361
385
|
const verbs = router.get(route.path);
|
|
362
|
-
const
|
|
363
|
-
if (
|
|
364
|
-
throw
|
|
365
|
-
|
|
366
|
-
const
|
|
367
|
-
const body =
|
|
386
|
+
const route_path = verbs[verb];
|
|
387
|
+
if (route_path === undefined)
|
|
388
|
+
throw E.route_missing_verb(route.path, verb);
|
|
389
|
+
const handler = route_path.handler;
|
|
390
|
+
const parse_body = route_path.options.parseBody;
|
|
391
|
+
const body = parse_body ?? this.config("request.body.parse")
|
|
368
392
|
? await RequestBody.parse(original, url)
|
|
369
393
|
: RequestBody.none();
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
path: new RequestBag(route.params, "path", {
|
|
379
|
-
normalize: k => k.toLowerCase(),
|
|
380
|
-
raw: url.pathname,
|
|
381
|
-
}),
|
|
382
|
-
},
|
|
383
|
-
};
|
|
394
|
+
const refined = Object.assign(Object.create(request), {
|
|
395
|
+
body,
|
|
396
|
+
path: new RequestBag(route.params, "path", {
|
|
397
|
+
normalize: k => k.toLowerCase(),
|
|
398
|
+
raw: url.pathname,
|
|
399
|
+
}),
|
|
400
|
+
});
|
|
401
|
+
return { errors, hooks, layouts, handler, request: refined };
|
|
384
402
|
}
|
|
385
403
|
}
|
|
386
404
|
//# sourceMappingURL=App.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type AppFacade from "#app/Facade";
|
|
2
2
|
import type I18NConfig from "#i18n/Config";
|
|
3
3
|
import type Mode from "#Mode";
|
|
4
4
|
import type SessionConfig from "#session/Config";
|
|
5
|
-
import type Dict from "@rcompat/type
|
|
5
|
+
import type { Dict } from "@rcompat/type";
|
|
6
6
|
type Import = {
|
|
7
7
|
default: unknown;
|
|
8
8
|
} & Dict;
|
|
@@ -19,15 +19,15 @@ type ServeInit = {
|
|
|
19
19
|
};
|
|
20
20
|
views?: [string, Import][];
|
|
21
21
|
stores?: [string, Import][];
|
|
22
|
-
|
|
22
|
+
facade: AppFacade;
|
|
23
23
|
routes: [string, {
|
|
24
24
|
default: any;
|
|
25
25
|
}][];
|
|
26
26
|
mode: Mode;
|
|
27
27
|
target: string;
|
|
28
28
|
pages: Dict<string>;
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
session?: SessionConfig;
|
|
30
|
+
i18n?: I18NConfig;
|
|
31
31
|
};
|
|
32
32
|
export type { ServeInit as default };
|
|
33
33
|
//# sourceMappingURL=Init.d.ts.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import log from "#log";
|
|
2
|
+
import create from "#module/create";
|
|
3
|
+
import c from "@rcompat/cli/color";
|
|
4
|
+
function pass(address, request) {
|
|
5
|
+
return fetch(address, {
|
|
6
|
+
body: request.body,
|
|
7
|
+
duplex: "half",
|
|
8
|
+
headers: request.headers,
|
|
9
|
+
method: request.method,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
export default function dev() {
|
|
13
|
+
let paths;
|
|
14
|
+
let reload;
|
|
15
|
+
return create({
|
|
16
|
+
name: "builtin/dev",
|
|
17
|
+
setup({ onServe, onHandle }) {
|
|
18
|
+
onServe(app => {
|
|
19
|
+
const { host, port } = app.livereload;
|
|
20
|
+
const assets = app.assets.map(asset => asset.src);
|
|
21
|
+
reload = `http://${host}:${port}`;
|
|
22
|
+
paths = ["/esbuild"].concat(assets);
|
|
23
|
+
log.print(`↻ live reload ${c.dim(reload)}\n`);
|
|
24
|
+
});
|
|
25
|
+
onHandle((request, next) => {
|
|
26
|
+
const { pathname } = new URL(request.url);
|
|
27
|
+
return paths.includes(pathname)
|
|
28
|
+
? pass(`${reload}${pathname}`, request.original)
|
|
29
|
+
: next(request);
|
|
30
|
+
});
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=dev-module.js.map
|
|
@@ -1,13 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
function pre(app) {
|
|
4
|
-
log.system("in startup");
|
|
5
|
-
return app;
|
|
6
|
-
}
|
|
7
|
-
;
|
|
8
|
-
async function post(app) {
|
|
1
|
+
export default async function run_serve_hooks(app) {
|
|
2
|
+
await app.serve_hooks(app);
|
|
9
3
|
await app.start();
|
|
10
4
|
return app;
|
|
11
5
|
}
|
|
12
|
-
export default async (app) => post(await reducer(app.modules, pre(app), "serve"));
|
|
13
6
|
//# sourceMappingURL=hook.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import ServeApp from "#serve/App";
|
|
2
2
|
import type ServeInit from "#serve/Init";
|
|
3
|
-
declare const _default: (root: string, options: ServeInit) => Promise<ServeApp>;
|
|
3
|
+
declare const _default: (root: string, options: ServeInit) => Promise<ServeApp | undefined>;
|
|
4
4
|
export default _default;
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,6 +1,40 @@
|
|
|
1
|
+
import { s_attach, s_config } from "#app/Facade";
|
|
2
|
+
import E from "#db/errors";
|
|
3
|
+
import log from "#log";
|
|
4
|
+
import key from "#orm/key";
|
|
5
|
+
import store from "#orm/store";
|
|
1
6
|
import ServeApp from "#serve/App";
|
|
2
|
-
import
|
|
7
|
+
import serve_hook from "#serve/hook";
|
|
8
|
+
import p from "pema";
|
|
3
9
|
export default async (root, options) => {
|
|
4
|
-
|
|
10
|
+
const facade = options.facade;
|
|
11
|
+
const app = await new ServeApp(root, options).init();
|
|
12
|
+
facade[s_attach](app);
|
|
13
|
+
const config = facade[s_config];
|
|
14
|
+
const migrations = config.db.migrations;
|
|
15
|
+
try {
|
|
16
|
+
if (migrations !== undefined) {
|
|
17
|
+
const { table, db } = migrations;
|
|
18
|
+
const Migration = store({
|
|
19
|
+
name: table,
|
|
20
|
+
db,
|
|
21
|
+
schema: {
|
|
22
|
+
id: key.primary(p.u16, { generate: false }),
|
|
23
|
+
applied: p.date,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
await Migration.table.create();
|
|
27
|
+
const last = await Migration.find({ limit: 1, sort: { id: "desc" } });
|
|
28
|
+
const last_id = last.length === 0 ? 0 : last[0].id;
|
|
29
|
+
const build_json = app.root.join("build.json");
|
|
30
|
+
const { migration_version } = await build_json.json();
|
|
31
|
+
if (last_id < migration_version)
|
|
32
|
+
throw E.unapplied_migrations();
|
|
33
|
+
}
|
|
34
|
+
return serve_hook(app);
|
|
35
|
+
}
|
|
36
|
+
catch (cause) {
|
|
37
|
+
log.error(cause);
|
|
38
|
+
}
|
|
5
39
|
};
|
|
6
40
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,20 +1,23 @@
|
|
|
1
|
+
import E from "#errors";
|
|
1
2
|
import kSerialize from "#session/k-serialize";
|
|
2
3
|
import assert from "@rcompat/assert";
|
|
3
|
-
import
|
|
4
|
+
import is from "@rcompat/is";
|
|
4
5
|
export default class SessionHandle {
|
|
5
6
|
#id;
|
|
6
7
|
#data;
|
|
7
8
|
#schema;
|
|
8
9
|
#dirty = false;
|
|
9
10
|
constructor(id, data, schema) {
|
|
10
|
-
maybe
|
|
11
|
-
maybe(data)
|
|
12
|
-
maybe
|
|
13
|
-
maybe(schema?.parse)
|
|
14
|
-
assert((id === undefined) === (data === undefined),
|
|
11
|
+
assert.maybe.uuid(id);
|
|
12
|
+
assert.maybe.dict(data);
|
|
13
|
+
assert.maybe.object(schema);
|
|
14
|
+
assert.maybe.function(schema?.parse);
|
|
15
|
+
assert.true((id === undefined) === (data === undefined), E.session_id_data());
|
|
15
16
|
this.#id = id;
|
|
16
17
|
this.#data = data;
|
|
17
|
-
this.#schema = schema
|
|
18
|
+
this.#schema = schema?.parse
|
|
19
|
+
? schema
|
|
20
|
+
: { parse: (x) => x };
|
|
18
21
|
}
|
|
19
22
|
get exists() {
|
|
20
23
|
return this.#id !== undefined;
|
|
@@ -43,8 +46,7 @@ export default class SessionHandle {
|
|
|
43
46
|
if (!this.exists)
|
|
44
47
|
throw new Error("cannot set() on non-existent session");
|
|
45
48
|
const previous = this.#data;
|
|
46
|
-
|
|
47
|
-
const candidate = typeof next === "function" ? next(previous) : next;
|
|
49
|
+
const candidate = is.function(next) ? next(previous) : next;
|
|
48
50
|
this.#data = this.#schema.parse(candidate);
|
|
49
51
|
this.#dirty = true;
|
|
50
52
|
}
|