@primate/core 0.4.6 → 0.5.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 +531 -3
- package/lib/private/App.js +8 -3
- package/lib/private/Binder.d.ts +2 -2
- package/lib/private/Flags.d.ts +3 -3
- package/lib/private/Module.d.ts +5 -5
- package/lib/private/app/Facade.d.ts +566 -0
- package/lib/private/app/Facade.js +33 -0
- package/lib/private/asset/Asset.d.ts +1 -1
- package/lib/private/backend/Module.d.ts +1 -1
- package/lib/private/backend/Module.js +2 -5
- package/lib/private/backend/TAG.d.ts +1 -1
- package/lib/private/backend/TAG.js +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 +11 -7
- package/lib/private/build/hook.js +4 -3
- package/lib/private/build/index.js +14 -13
- package/lib/private/build/presets.d.ts +10 -0
- package/lib/private/build/presets.js +39 -0
- package/lib/private/build/server/index.js +5 -7
- 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/db-default.d.ts +4 -0
- package/lib/private/build/server/plugin/db-default.js +45 -0
- 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} +4 -4
- package/lib/private/build/server/plugin/native-addons.js +6 -4
- package/lib/private/build/server/plugin/node-imports.js +2 -2
- package/lib/private/build/server/plugin/route.js +2 -2
- package/lib/private/build/server/plugin/store-wrap.js +2 -2
- package/lib/private/build/server/plugin/store.js +6 -6
- package/lib/private/build/server/plugin/stores.js +4 -5
- package/lib/private/build/server/plugin/view.js +4 -4
- 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/bye.js +2 -3
- package/lib/private/client/Data.d.ts +1 -1
- package/lib/private/client/ValidateInit.d.ts +1 -3
- package/lib/private/client/ValidationError.d.ts +1 -1
- package/lib/private/client/app.js +2 -1
- package/lib/private/client/create-form.d.ts +31 -0
- package/lib/private/client/create-form.js +124 -0
- package/lib/private/client/extract-issues.d.ts +4 -0
- package/lib/private/client/extract-issues.js +20 -0
- package/lib/private/client/spa/index.d.ts +1 -1
- package/lib/private/client/spa/index.js +4 -5
- 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 +2 -21
- package/lib/private/config/index.js +3 -1
- package/lib/private/config/schema.d.ts +13 -9
- package/lib/private/config/schema.js +10 -5
- package/lib/private/cookie.d.ts +5 -5
- package/lib/private/cookie.js +10 -14
- package/lib/private/db/As.d.ts +10 -0
- package/lib/private/db/DB.d.ts +33 -0
- package/lib/private/db/DB.js +2 -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 +35 -0
- package/lib/private/db/MemoryDB.js +317 -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 +18 -0
- package/lib/private/db/common.js +36 -0
- package/lib/private/db/error.d.ts +81 -0
- package/lib/private/db/error.js +199 -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/wrap.js +2 -0
- package/lib/private/db/symbol.js +2 -0
- package/lib/private/db/test.d.ts +4 -0
- package/lib/private/db/test.js +1384 -0
- package/lib/private/frontend/Module.d.ts +6 -6
- package/lib/private/frontend/Module.js +28 -23
- package/lib/private/frontend/Render.d.ts +1 -2
- package/lib/private/frontend/ServerData.d.ts +1 -1
- package/lib/private/frontend/ServerView.d.ts +1 -2
- package/lib/private/frontend/View.d.ts +1 -1
- package/lib/private/frontend/ViewOptions.d.ts +1 -1
- package/lib/private/frontend/ViewResponse.d.ts +1 -1
- package/lib/private/hash.js +0 -1
- package/lib/private/i18n/Catalog.d.ts +5 -2
- package/lib/private/i18n/Formatter.js +20 -8
- package/lib/private/i18n/Module.d.ts +3 -3
- package/lib/private/i18n/Module.js +28 -17
- 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/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 +4 -4
- 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 +21 -0
- package/lib/private/log.d.ts +1 -0
- package/lib/private/log.js +10 -10
- package/lib/private/module/Hook.d.ts +1 -1
- package/lib/private/module/Next.d.ts +1 -1
- package/lib/private/orm/ForeignKey.d.ts +11 -0
- package/lib/private/orm/ForeignKey.js +22 -0
- package/lib/private/orm/PrimaryKey.d.ts +15 -0
- package/lib/private/orm/PrimaryKey.js +35 -0
- package/lib/private/orm/Set.d.ts +11 -0
- package/lib/private/orm/Set.js +2 -0
- package/lib/private/orm/Store.d.ts +171 -0
- package/lib/private/orm/Store.js +518 -0
- package/lib/private/orm/foreign.d.ts +4 -0
- package/lib/private/orm/foreign.js +5 -0
- package/lib/private/orm/key.d.ts +8 -0
- package/lib/private/orm/key.js +4 -0
- package/lib/private/orm/parse.d.ts +12 -0
- package/lib/private/orm/parse.js +29 -0
- package/lib/private/orm/primary.d.ts +5 -0
- package/lib/private/orm/primary.js +5 -0
- package/lib/private/orm/relation.d.ts +43 -0
- package/lib/private/orm/relation.js +26 -0
- package/lib/private/orm/types.d.ts +18 -0
- package/lib/private/orm/types.js +2 -0
- package/lib/private/orm/wrap.d.ts +5 -0
- package/lib/private/orm/wrap.js +5 -0
- package/lib/private/paths.d.ts +2 -2
- package/lib/private/request/RequestBag.d.ts +1 -1
- package/lib/private/request/RequestBag.js +11 -7
- package/lib/private/request/RequestBody.d.ts +2 -4
- package/lib/private/request/RequestBody.js +8 -11
- package/lib/private/request/RequestContext.d.ts +12 -0
- package/lib/private/request/RequestContext.js +31 -0
- package/lib/private/request/RequestFacade.d.ts +16 -6
- package/lib/private/request/parse.d.ts +2 -2
- package/lib/private/request/parse.js +54 -16
- package/lib/private/request/route.js +37 -21
- package/lib/private/request/router.d.ts +1 -1
- package/lib/private/request/router.js +2 -2
- package/lib/private/request/sContext.d.ts +3 -0
- package/lib/private/request/sContext.js +2 -0
- package/lib/private/response/ResponseFunction.d.ts +1 -2
- 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/json.d.ts +1 -1
- package/lib/private/response/json.js +2 -2
- package/lib/private/response/redirect.js +1 -1
- package/lib/private/response/respond.js +7 -10
- 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 +2 -2
- package/lib/private/response/view.js +3 -3
- 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 +9 -5
- package/lib/private/route/router.js +34 -17
- package/lib/private/route/wrap.js +2 -2
- package/lib/private/serve/App.d.ts +5 -18
- package/lib/private/serve/App.js +91 -82
- package/lib/private/serve/Init.d.ts +3 -3
- package/lib/private/serve/hook.js +1 -7
- package/lib/private/serve/index.js +6 -2
- package/lib/private/serve/module/Dev.d.ts +1 -1
- package/lib/private/serve/module/Dev.js +9 -5
- package/lib/private/serve/module/Handle.js +2 -2
- package/lib/private/session/Data.d.ts +1 -2
- package/lib/private/session/SessionHandle.d.ts +1 -1
- package/lib/private/session/SessionHandle.js +10 -9
- package/lib/private/session/SessionModule.js +7 -7
- package/lib/private/session/index.d.ts +3 -4
- package/lib/private/session/schema.d.ts +6 -6
- package/lib/private/session/schema.js +5 -4
- 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/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 +14 -0
- package/lib/public/client.js +10 -0
- package/lib/public/db/MemoryDB.d.ts +2 -0
- package/lib/public/db/MemoryDB.js +2 -0
- package/lib/public/db/error.d.ts +2 -0
- package/lib/public/db/error.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/orm/Store.d.ts +2 -0
- package/lib/public/orm/Store.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/wrap.d.ts +2 -0
- package/lib/public/orm/wrap.js +2 -0
- package/lib/public/request.d.ts +4 -0
- package/lib/public/request.js +2 -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/package.json +28 -23
- 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/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/i18n/index.d.ts +0 -28
- package/lib/private/i18n/index.js +0 -236
- package/lib/private/route/guard.d.ts +0 -4
- package/lib/private/route/guard.js +0 -22
- 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/Database.d.ts +0 -2
- package/lib/public/Database.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/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/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/{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/wrap.d.ts +0 -0
- /package/lib/private/{database → db}/symbol.d.ts +0 -0
|
@@ -8,8 +8,8 @@ import type Next from "#module/Next";
|
|
|
8
8
|
import type NextBuild from "#module/NextBuild";
|
|
9
9
|
import type NextServe from "#module/NextServe";
|
|
10
10
|
import type ServeApp from "#serve/App";
|
|
11
|
-
import FileRef from "@rcompat/fs
|
|
12
|
-
import type MaybePromise from "@rcompat/type
|
|
11
|
+
import type { FileRef } from "@rcompat/fs";
|
|
12
|
+
import type { MaybePromise } from "@rcompat/type";
|
|
13
13
|
export default abstract class FrontendModule<S = ServerView> extends Module {
|
|
14
14
|
#private;
|
|
15
15
|
abstract client: boolean;
|
|
@@ -24,16 +24,16 @@ export default abstract class FrontendModule<S = ServerView> extends Module {
|
|
|
24
24
|
css?: null | string;
|
|
25
25
|
js: string;
|
|
26
26
|
}>;
|
|
27
|
-
server?: (text: string, file
|
|
27
|
+
server?: (text: string, file: FileRef) => MaybePromise<string>;
|
|
28
28
|
};
|
|
29
29
|
css?: {
|
|
30
30
|
filter: RegExp;
|
|
31
31
|
};
|
|
32
32
|
conditions: string[];
|
|
33
33
|
static schema: import("pema").ObjectType<{
|
|
34
|
-
fileExtensions: import("pema").OptionalType<import("pema").ArrayType<import("pema
|
|
35
|
-
spa: import("pema").DefaultType<import("pema
|
|
36
|
-
ssr: import("pema").DefaultType<import("pema
|
|
34
|
+
fileExtensions: import("pema").OptionalType<import("pema").ArrayType<import("pema").StringType>>;
|
|
35
|
+
spa: import("pema").DefaultType<import("pema").BooleanType, true>;
|
|
36
|
+
ssr: import("pema").DefaultType<import("pema").BooleanType, true>;
|
|
37
37
|
}>;
|
|
38
38
|
static options: {
|
|
39
39
|
fileExtensions: string[] | undefined;
|
|
@@ -2,14 +2,14 @@ import fail from "#fail";
|
|
|
2
2
|
import inline from "#inline";
|
|
3
3
|
import location from "#location";
|
|
4
4
|
import Module from "#Module";
|
|
5
|
-
import map from "@rcompat/async/map";
|
|
6
5
|
import hash from "@rcompat/crypto/hash";
|
|
7
|
-
import
|
|
8
|
-
import
|
|
6
|
+
import fn from "@rcompat/fn";
|
|
7
|
+
import fs from "@rcompat/fs";
|
|
8
|
+
import MIME from "@rcompat/http/mime";
|
|
9
9
|
import Status from "@rcompat/http/Status";
|
|
10
10
|
import p from "pema";
|
|
11
11
|
async function normalize(path, frontend) {
|
|
12
|
-
const file =
|
|
12
|
+
const file = fs.ref(path);
|
|
13
13
|
const basename = path.slice(0, -file.fullExtension.length);
|
|
14
14
|
return `p_${await hash(`${basename}.${frontend}`)}`;
|
|
15
15
|
}
|
|
@@ -59,14 +59,21 @@ export default class FrontendModule extends Module {
|
|
|
59
59
|
? await this.render(server.view, server.props)
|
|
60
60
|
: { body: "", head: "" };
|
|
61
61
|
if (!this.client) {
|
|
62
|
+
if (app.mode === "development") {
|
|
63
|
+
const app_asset = app.assets.find(asset => asset.src?.includes("app") && asset.src.endsWith(".js"));
|
|
64
|
+
if (!app_asset)
|
|
65
|
+
throw fail("Could not find app.js in assets");
|
|
66
|
+
const app_script = `<script type="module" src="${app_asset.src}"></script>`;
|
|
67
|
+
return { body, head: head.concat(app_script), headers };
|
|
68
|
+
}
|
|
62
69
|
return { body, head, headers };
|
|
63
70
|
}
|
|
64
71
|
const app_asset = app.assets.find(asset => asset.src?.includes("app") && asset.src.endsWith(".js"));
|
|
65
72
|
if (!app_asset)
|
|
66
73
|
throw fail("Could not find app.js in assets");
|
|
67
74
|
const app_script = `<script type="module" src="${app_asset.src}"></script>`;
|
|
68
|
-
const
|
|
69
|
-
const hydrated = await inline(
|
|
75
|
+
const props = JSON.stringify({ frontend: this.name, ...client });
|
|
76
|
+
const hydrated = await inline(props, MIME.APPLICATION_JSON, "hydration");
|
|
70
77
|
const script_src = [hydrated.integrity];
|
|
71
78
|
return {
|
|
72
79
|
body,
|
|
@@ -83,19 +90,12 @@ export default class FrontendModule extends Module {
|
|
|
83
90
|
}
|
|
84
91
|
const views = (await Promise.all(layouts
|
|
85
92
|
.map(layout => layout(app, { as_layout: true }, request))))
|
|
86
|
-
|
|
93
|
+
// set the actual page as the last view
|
|
87
94
|
.concat(this.#load(view, props, app));
|
|
88
|
-
const $request =
|
|
89
|
-
context: request.context,
|
|
90
|
-
cookies: request.cookies.toJSON(),
|
|
91
|
-
headers: request.headers.toJSON(),
|
|
92
|
-
path: request.path.toJSON(),
|
|
93
|
-
query: request.query.toJSON(),
|
|
94
|
-
url: request.url,
|
|
95
|
-
};
|
|
95
|
+
const $request = request.toJSON();
|
|
96
96
|
const $props = this.layouts
|
|
97
97
|
? {
|
|
98
|
-
views: await map(views, ({ name }) => this.normalize(name)),
|
|
98
|
+
views: await fn.async.map(views, ({ name }) => this.normalize(name)),
|
|
99
99
|
props: views.map(c => c.props),
|
|
100
100
|
request: $request,
|
|
101
101
|
}
|
|
@@ -107,12 +107,12 @@ export default class FrontendModule extends Module {
|
|
|
107
107
|
mode: app.mode,
|
|
108
108
|
...$props,
|
|
109
109
|
};
|
|
110
|
-
if (this.spa && request.headers.get("Accept") === APPLICATION_JSON) {
|
|
110
|
+
if (this.spa && request.headers.get("Accept") === MIME.APPLICATION_JSON) {
|
|
111
111
|
const json_body = JSON.stringify(client);
|
|
112
112
|
return new Response(json_body, {
|
|
113
113
|
headers: {
|
|
114
114
|
...app.headers(),
|
|
115
|
-
"Content-Type": APPLICATION_JSON,
|
|
115
|
+
"Content-Type": MIME.APPLICATION_JSON,
|
|
116
116
|
"Content-Length": String(app.body_length(json_body)),
|
|
117
117
|
"Cache-Control": "no-store",
|
|
118
118
|
},
|
|
@@ -151,6 +151,9 @@ export default class FrontendModule extends Module {
|
|
|
151
151
|
return next(app);
|
|
152
152
|
}
|
|
153
153
|
publish(app) {
|
|
154
|
+
if (app.mode === "development") {
|
|
155
|
+
app.frontends.set(this.name, [...this.fileExtensions]);
|
|
156
|
+
}
|
|
154
157
|
if (this.compile.client) {
|
|
155
158
|
const { compile, css, fileExtensions, name, root, conditions } = this;
|
|
156
159
|
const _normalize = this.normalize.bind(this);
|
|
@@ -169,7 +172,7 @@ export default class FrontendModule extends Module {
|
|
|
169
172
|
return { namespace: `${name}`, path };
|
|
170
173
|
});
|
|
171
174
|
build.onLoad({ filter }, async () => {
|
|
172
|
-
const contents = (await compile.client(root.create(app.depth(), app.i18n_active),
|
|
175
|
+
const contents = (await compile.client(root.create(app.depth(), app.i18n_active), fs.ref("/tmp"), true)).js;
|
|
173
176
|
return contents ? { contents, loader: "js", resolveDir } : null;
|
|
174
177
|
});
|
|
175
178
|
}
|
|
@@ -188,8 +191,10 @@ export default class FrontendModule extends Module {
|
|
|
188
191
|
return { namespace: `${name}`, path };
|
|
189
192
|
});
|
|
190
193
|
build.onLoad({ filter: views_filter }, async () => {
|
|
191
|
-
const views = await views_base
|
|
192
|
-
|
|
194
|
+
const views = await views_base.files({
|
|
195
|
+
recursive: true,
|
|
196
|
+
filter: c => fileExtensions.includes(c.fullExtension),
|
|
197
|
+
});
|
|
193
198
|
let contents = "";
|
|
194
199
|
for (const view of views) {
|
|
195
200
|
const { path } = view.debase(views_base, "/");
|
|
@@ -200,7 +205,7 @@ export default class FrontendModule extends Module {
|
|
|
200
205
|
});
|
|
201
206
|
const filter = new RegExp(`(${fileExtensions.map(e => e.replace(".", "\\.")).join("|")})$`);
|
|
202
207
|
build.onLoad({ filter }, async (args) => {
|
|
203
|
-
const file =
|
|
208
|
+
const file = fs.ref(args.path);
|
|
204
209
|
// compile file to JavaScript and potentially CSS
|
|
205
210
|
const compiled = await compile.client(await file.text(), file, false);
|
|
206
211
|
let contents = compiled.js;
|
|
@@ -239,7 +244,7 @@ export default class FrontendModule extends Module {
|
|
|
239
244
|
this.prebuild(app);
|
|
240
245
|
// compile root server
|
|
241
246
|
if (this.root !== undefined && this.compile.server !== undefined) {
|
|
242
|
-
const source = await this.compile.server(this.root.create(app.depth(), app.i18n_active));
|
|
247
|
+
const source = await this.compile.server(this.root.create(app.depth(), app.i18n_active), fs.ref(`root:${this.name}`));
|
|
243
248
|
app.addRoot(this.rootname, source);
|
|
244
249
|
}
|
|
245
250
|
this.publish(app);
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type Dict from "@rcompat/type
|
|
2
|
-
import type MaybePromise from "@rcompat/type/MaybePromise";
|
|
1
|
+
import type { Dict, MaybePromise } from "@rcompat/type";
|
|
3
2
|
type ServerView = (props: Dict) => MaybePromise<string>;
|
|
4
3
|
export { ServerView as default };
|
|
5
4
|
//# sourceMappingURL=ServerView.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type ViewOptions from "#frontend/ViewOptions";
|
|
2
2
|
import type ResponseFunction from "#response/ResponseFunction";
|
|
3
|
-
import type Dict from "@rcompat/type
|
|
3
|
+
import type { Dict } from "@rcompat/type";
|
|
4
4
|
type View = (name: string, props?: Dict, options?: ViewOptions) => ResponseFunction;
|
|
5
5
|
export { View as default };
|
|
6
6
|
//# sourceMappingURL=ViewResponse.d.ts.map
|
package/lib/private/hash.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import type Dict from "@rcompat/type
|
|
2
|
-
type
|
|
1
|
+
import type { Dict } from "@rcompat/type";
|
|
2
|
+
type CatalogValue = string | {
|
|
3
|
+
[key: string]: CatalogValue;
|
|
4
|
+
} | CatalogValue[];
|
|
5
|
+
type Catalog = Dict<CatalogValue>;
|
|
3
6
|
export type { Catalog as default };
|
|
4
7
|
//# sourceMappingURL=Catalog.d.ts.map
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import fail from "#fail";
|
|
2
2
|
import ordinals from "#i18n/ordinals";
|
|
3
3
|
import toIntlUnit from "#i18n/toIntlUnit";
|
|
4
|
-
import
|
|
4
|
+
import assert from "@rcompat/assert";
|
|
5
5
|
export default class Formatter {
|
|
6
6
|
#locale;
|
|
7
7
|
constructor(locale) {
|
|
8
|
-
|
|
8
|
+
assert.string(locale);
|
|
9
9
|
this.#locale = locale;
|
|
10
10
|
}
|
|
11
11
|
get locale() {
|
|
12
12
|
return this.#locale;
|
|
13
13
|
}
|
|
14
14
|
set locale(locale) {
|
|
15
|
-
|
|
15
|
+
assert.string(locale);
|
|
16
16
|
this.#locale = locale;
|
|
17
17
|
}
|
|
18
18
|
number(number) {
|
|
19
|
+
assert.number(number);
|
|
19
20
|
try {
|
|
20
21
|
return new Intl.NumberFormat(this.#locale).format(number);
|
|
21
22
|
}
|
|
@@ -24,6 +25,7 @@ export default class Formatter {
|
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
27
|
date(date) {
|
|
28
|
+
assert.date(date);
|
|
27
29
|
try {
|
|
28
30
|
return new Intl.DateTimeFormat(this.#locale).format(date);
|
|
29
31
|
}
|
|
@@ -32,6 +34,8 @@ export default class Formatter {
|
|
|
32
34
|
}
|
|
33
35
|
}
|
|
34
36
|
currency(currency, amount) {
|
|
37
|
+
assert.string(currency);
|
|
38
|
+
assert.number(amount);
|
|
35
39
|
const options = { style: "currency", currency };
|
|
36
40
|
try {
|
|
37
41
|
return new Intl.NumberFormat(this.#locale, options).format(amount);
|
|
@@ -41,6 +45,7 @@ export default class Formatter {
|
|
|
41
45
|
}
|
|
42
46
|
}
|
|
43
47
|
ordinal(number) {
|
|
48
|
+
assert.number(number);
|
|
44
49
|
try {
|
|
45
50
|
const n = Math.trunc(number);
|
|
46
51
|
const rules = new Intl.PluralRules(this.#locale, { type: "ordinal" });
|
|
@@ -58,9 +63,14 @@ export default class Formatter {
|
|
|
58
63
|
}
|
|
59
64
|
}
|
|
60
65
|
relative(milliseconds, options) {
|
|
61
|
-
|
|
66
|
+
assert.number(milliseconds);
|
|
67
|
+
assert.maybe.dict(options);
|
|
68
|
+
assert.maybe.string(options?.numeric);
|
|
69
|
+
assert.maybe.string(options?.style);
|
|
70
|
+
const numeric = options?.numeric ?? "auto";
|
|
71
|
+
const style = options?.style ?? "long";
|
|
62
72
|
try {
|
|
63
|
-
const rtf = new Intl.RelativeTimeFormat(this.#locale,
|
|
73
|
+
const rtf = new Intl.RelativeTimeFormat(this.#locale, { numeric, style });
|
|
64
74
|
const s = Math.round(milliseconds / 1000);
|
|
65
75
|
const abs = Math.abs(s);
|
|
66
76
|
if (abs >= 31536000)
|
|
@@ -82,6 +92,7 @@ export default class Formatter {
|
|
|
82
92
|
}
|
|
83
93
|
}
|
|
84
94
|
list(items) {
|
|
95
|
+
assert.array(items);
|
|
85
96
|
try {
|
|
86
97
|
return new Intl.ListFormat(this.#locale).format(items);
|
|
87
98
|
}
|
|
@@ -90,9 +101,10 @@ export default class Formatter {
|
|
|
90
101
|
}
|
|
91
102
|
}
|
|
92
103
|
unit(value, u) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
104
|
+
assert.number(value);
|
|
105
|
+
assert.string(u);
|
|
106
|
+
const intl_unit = toIntlUnit(u);
|
|
107
|
+
const unit = assert.defined(intl_unit, fail("unit {0} not supported", u));
|
|
96
108
|
const options = { style: "unit", unit };
|
|
97
109
|
try {
|
|
98
110
|
return new Intl.NumberFormat(this.#locale, options).format(value);
|
|
@@ -9,8 +9,8 @@ export default class I18NModule extends Module {
|
|
|
9
9
|
#private;
|
|
10
10
|
name: string;
|
|
11
11
|
constructor(config: Config);
|
|
12
|
-
serve(app: ServeApp, next: NextServe): import("@rcompat/type
|
|
13
|
-
handle(request: RequestFacade, next: NextHandle):
|
|
14
|
-
route(request: RequestFacade, next: NextRoute): import("@rcompat/type
|
|
12
|
+
serve(app: ServeApp, next: NextServe): import("@rcompat/type").MaybePromise<ServeApp>;
|
|
13
|
+
handle(request: RequestFacade, next: NextHandle): Promise<Response>;
|
|
14
|
+
route(request: RequestFacade, next: NextRoute): import("@rcompat/type").MaybePromise<import("../response/ResponseLike.js").default>;
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=Module.d.ts.map
|
|
@@ -3,6 +3,7 @@ import bye from "#bye";
|
|
|
3
3
|
import cookie from "#cookie";
|
|
4
4
|
import COOKIE_NAME from "#i18n/constant/COOKIE_NAME";
|
|
5
5
|
import PERSIST_HEADER from "#i18n/constant/PERSIST_HEADER";
|
|
6
|
+
import storage from "#i18n/storage";
|
|
6
7
|
import log from "#log";
|
|
7
8
|
import Module from "#Module";
|
|
8
9
|
import Status from "@rcompat/http/Status";
|
|
@@ -60,10 +61,24 @@ export default class I18NModule extends Module {
|
|
|
60
61
|
this.#secure = app.secure;
|
|
61
62
|
return next(app);
|
|
62
63
|
}
|
|
63
|
-
handle(request, next) {
|
|
64
|
+
async handle(request, next) {
|
|
64
65
|
const requested = request.headers.try(PERSIST_HEADER);
|
|
65
|
-
if (requested === undefined)
|
|
66
|
-
|
|
66
|
+
if (requested === undefined) {
|
|
67
|
+
const locale = request.cookies.try(COOKIE_NAME);
|
|
68
|
+
if (locale === undefined)
|
|
69
|
+
return next(request);
|
|
70
|
+
// if has cookie, run route with i18n
|
|
71
|
+
return await new Promise((resolve, reject) => {
|
|
72
|
+
storage().run({ locale }, async () => {
|
|
73
|
+
try {
|
|
74
|
+
resolve(await next(request));
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
reject(e);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
}
|
|
67
82
|
// only cookie-persistance is server-supported
|
|
68
83
|
if (this.#persist !== "cookie")
|
|
69
84
|
return new Response(null, {
|
|
@@ -101,22 +116,18 @@ export default class I18NModule extends Module {
|
|
|
101
116
|
.map(s => s.split(";")[0].trim())
|
|
102
117
|
.filter(Boolean);
|
|
103
118
|
const mode = this.#persist;
|
|
104
|
-
const
|
|
105
|
-
|
|
119
|
+
const cookie_locale = mode === "cookie"
|
|
120
|
+
? request.cookies.try(COOKIE_NAME)
|
|
121
|
+
: undefined;
|
|
122
|
+
const locale = cookie_locale ??
|
|
106
123
|
pick(client_locales, server_locales) ??
|
|
107
124
|
this.#defaultLocale;
|
|
108
|
-
return next({
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
mode,
|
|
115
|
-
locale,
|
|
116
|
-
locales: server_locales,
|
|
117
|
-
},
|
|
118
|
-
},
|
|
119
|
-
});
|
|
125
|
+
return next(request.set("i18n", {
|
|
126
|
+
currency: this.#currency,
|
|
127
|
+
mode,
|
|
128
|
+
locale,
|
|
129
|
+
locales: server_locales,
|
|
130
|
+
}));
|
|
120
131
|
}
|
|
121
132
|
}
|
|
122
133
|
//# sourceMappingURL=Module.js.map
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import is from "@rcompat/is";
|
|
2
|
+
export default function format(input, params, currency, formatter) {
|
|
3
|
+
let template = input;
|
|
4
|
+
// save escaped braces
|
|
5
|
+
template = template.replace(/\{\{/g, "\uE000");
|
|
6
|
+
template = template.replace(/\}\}/g, "\uE001");
|
|
7
|
+
// Process normal parameters with nested brace support
|
|
8
|
+
const template_re = /\{([^{}]*(?:\{[^{}]*\}[^{}]*)*)\}/g;
|
|
9
|
+
template = template.replace(template_re, (_, body) => {
|
|
10
|
+
// name[:spec]
|
|
11
|
+
let name = body;
|
|
12
|
+
let spec;
|
|
13
|
+
const colon = body.indexOf(":");
|
|
14
|
+
if (colon >= 0) {
|
|
15
|
+
name = body.slice(0, colon);
|
|
16
|
+
spec = body.slice(colon + 1);
|
|
17
|
+
}
|
|
18
|
+
const value = params[name];
|
|
19
|
+
if (!spec)
|
|
20
|
+
return value == null ? "" : String(value);
|
|
21
|
+
// number selection: "n|one|other" or "n|zero|one|other"
|
|
22
|
+
const bar = spec.indexOf("|");
|
|
23
|
+
const head = (bar === -1 ? spec : spec.slice(0, bar)).toLowerCase();
|
|
24
|
+
const tail = bar === -1 ? "" : spec.slice(bar + 1);
|
|
25
|
+
// units u(...)/unit(...)
|
|
26
|
+
const m = /^(?:u|unit)\(([^)]+)\)$/.exec(head);
|
|
27
|
+
if (m)
|
|
28
|
+
return formatter.unit(Number(value ?? 0), m[1]);
|
|
29
|
+
switch (head) {
|
|
30
|
+
case "n":
|
|
31
|
+
case "number": {
|
|
32
|
+
if (tail) {
|
|
33
|
+
const options = tail.split("|");
|
|
34
|
+
const n = Number(value ?? 0);
|
|
35
|
+
const formatted = formatter.number(n);
|
|
36
|
+
const plural = () => {
|
|
37
|
+
const category = Number.isFinite(n)
|
|
38
|
+
? formatter.pluralRules().select(n)
|
|
39
|
+
: "other";
|
|
40
|
+
if (options.length === 2) {
|
|
41
|
+
const [one, other] = options;
|
|
42
|
+
return category === "one" ? one : other;
|
|
43
|
+
}
|
|
44
|
+
if (options.length === 3) {
|
|
45
|
+
const [zero, one, other] = options;
|
|
46
|
+
return n === 0 ? zero : (category === "one" ? one : other);
|
|
47
|
+
}
|
|
48
|
+
if (options.length === 5) {
|
|
49
|
+
const [zero, one, few, many, other] = options;
|
|
50
|
+
if (n === 0)
|
|
51
|
+
return zero;
|
|
52
|
+
switch (category) {
|
|
53
|
+
case "one": return one;
|
|
54
|
+
case "few": return few;
|
|
55
|
+
case "many": return many;
|
|
56
|
+
default: return other;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return formatted;
|
|
60
|
+
};
|
|
61
|
+
return plural().replace(new RegExp(`\\{${name}\\}`, "g"), formatted);
|
|
62
|
+
}
|
|
63
|
+
return formatter.number(Number(value ?? 0));
|
|
64
|
+
}
|
|
65
|
+
case "d":
|
|
66
|
+
case "date": {
|
|
67
|
+
const d = is.number(value)
|
|
68
|
+
? new Date(value)
|
|
69
|
+
: is.date(value)
|
|
70
|
+
? value
|
|
71
|
+
: new Date(NaN);
|
|
72
|
+
return formatter.date(d);
|
|
73
|
+
}
|
|
74
|
+
case "c":
|
|
75
|
+
case "currency":
|
|
76
|
+
return formatter.currency(currency, Number(value ?? 0));
|
|
77
|
+
case "o":
|
|
78
|
+
case "ordinal":
|
|
79
|
+
return formatter.ordinal(Number(value ?? 0));
|
|
80
|
+
case "a":
|
|
81
|
+
case "ago":
|
|
82
|
+
return formatter.relative(Number(value ?? 0));
|
|
83
|
+
case "l":
|
|
84
|
+
case "list":
|
|
85
|
+
return formatter.list(Array.isArray(value) ? value : []);
|
|
86
|
+
default:
|
|
87
|
+
return value == null ? "" : String(value);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
// restore escaped braces
|
|
91
|
+
template = template.replace(/\uE000/g, "{");
|
|
92
|
+
template = template.replace(/\uE001/g, "}");
|
|
93
|
+
return template;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=format.js.map
|