@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
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import kSerialize from "#session/k-serialize";
|
|
2
2
|
import assert from "@rcompat/assert";
|
|
3
|
-
import
|
|
3
|
+
import is from "@rcompat/is";
|
|
4
4
|
export default class SessionHandle {
|
|
5
5
|
#id;
|
|
6
6
|
#data;
|
|
7
7
|
#schema;
|
|
8
8
|
#dirty = false;
|
|
9
9
|
constructor(id, data, schema) {
|
|
10
|
-
maybe
|
|
11
|
-
maybe(data)
|
|
12
|
-
maybe
|
|
13
|
-
maybe(schema?.parse)
|
|
14
|
-
assert((id === undefined) === (data === undefined), "both `id` and `data` must be defined or undefined");
|
|
10
|
+
assert.maybe.uuid(id);
|
|
11
|
+
assert.maybe.dict(data);
|
|
12
|
+
assert.maybe.object(schema);
|
|
13
|
+
assert.maybe.function(schema?.parse);
|
|
14
|
+
assert.true((id === undefined) === (data === undefined), "both `id` and `data` must be defined or undefined");
|
|
15
15
|
this.#id = id;
|
|
16
16
|
this.#data = data;
|
|
17
|
-
this.#schema = schema
|
|
17
|
+
this.#schema = schema?.parse
|
|
18
|
+
? schema
|
|
19
|
+
: { parse: (x) => x };
|
|
18
20
|
}
|
|
19
21
|
get exists() {
|
|
20
22
|
return this.#id !== undefined;
|
|
@@ -43,8 +45,7 @@ export default class SessionHandle {
|
|
|
43
45
|
if (!this.exists)
|
|
44
46
|
throw new Error("cannot set() on non-existent session");
|
|
45
47
|
const previous = this.#data;
|
|
46
|
-
|
|
47
|
-
const candidate = typeof next === "function" ? next(previous) : next;
|
|
48
|
+
const candidate = is.function(next) ? next(previous) : next;
|
|
48
49
|
this.#data = this.#schema.parse(candidate);
|
|
49
50
|
this.#dirty = true;
|
|
50
51
|
}
|
|
@@ -46,16 +46,16 @@ export default class SessionModule extends Module {
|
|
|
46
46
|
const sid = request.cookies.try(name);
|
|
47
47
|
// Look up session by session_id
|
|
48
48
|
const existing = sid !== undefined
|
|
49
|
-
? await this.#store.find({ session_id: sid },
|
|
49
|
+
? await this.#store.find({ where: { session_id: sid }, limit: 1 })
|
|
50
50
|
: [];
|
|
51
51
|
const exists = existing.length > 0;
|
|
52
52
|
let data = undefined;
|
|
53
|
-
let
|
|
53
|
+
let db_id = undefined;
|
|
54
54
|
if (exists) {
|
|
55
55
|
const record = existing[0];
|
|
56
56
|
const { id: _id, session_id: _sid, ...rest } = record;
|
|
57
57
|
data = rest;
|
|
58
|
-
|
|
58
|
+
db_id = _id;
|
|
59
59
|
}
|
|
60
60
|
const session_type = p.omit(this.#store.type, "id", "session_id");
|
|
61
61
|
const session = new SessionHandle(sid, data, session_type);
|
|
@@ -95,13 +95,13 @@ export default class SessionModule extends Module {
|
|
|
95
95
|
response.headers.append("set-cookie", cookie(name, snap.id, options));
|
|
96
96
|
return response;
|
|
97
97
|
}
|
|
98
|
-
// from here: session existed (
|
|
98
|
+
// from here: session existed (db_id is defined)
|
|
99
99
|
// fast-path: session exists, same id and not dirty -> noop
|
|
100
100
|
if (snap.exists && snap.id === sid && !snap.dirty)
|
|
101
101
|
return response;
|
|
102
102
|
// current absent -> destroy + clear cookie
|
|
103
103
|
if (!snap.exists) {
|
|
104
|
-
await this.#store.delete(
|
|
104
|
+
await this.#store.delete(db_id);
|
|
105
105
|
response.headers.append("set-cookie", cookie(name, "", {
|
|
106
106
|
...options, maxAge: 0,
|
|
107
107
|
}));
|
|
@@ -109,13 +109,13 @@ export default class SessionModule extends Module {
|
|
|
109
109
|
}
|
|
110
110
|
// session recreated in route -> destroy old, create new, set cookie
|
|
111
111
|
if (snap.id !== sid) {
|
|
112
|
-
await this.#store.delete(
|
|
112
|
+
await this.#store.delete(db_id);
|
|
113
113
|
await this.#store.insert({ session_id: snap.id, ...snap.data });
|
|
114
114
|
response.headers.append("set-cookie", cookie(name, snap.id, options));
|
|
115
115
|
return response;
|
|
116
116
|
}
|
|
117
117
|
// dirty -> replace session contents
|
|
118
|
-
await this.#store.update(
|
|
118
|
+
await this.#store.update(db_id, { set: snap.data });
|
|
119
119
|
return response;
|
|
120
120
|
}
|
|
121
121
|
}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type Store from "#orm/Store";
|
|
2
2
|
import configSchema from "#session/schema";
|
|
3
3
|
import type SessionFacade from "#session/SessionFacade";
|
|
4
|
-
import type InferStore from "pema
|
|
5
|
-
import type StoreSchema from "pema/StoreSchema";
|
|
4
|
+
import type { InferStore, StoreSchema } from "pema";
|
|
6
5
|
type ConfigInput = typeof configSchema.input;
|
|
7
6
|
type X<T> = {
|
|
8
7
|
[K in keyof T]: T[K];
|
|
9
8
|
} & {};
|
|
10
9
|
type Infer<S extends StoreSchema> = X<Omit<InferStore<S>, "id" | "session_id">>;
|
|
11
10
|
export default function session<S extends StoreSchema>(config: {
|
|
12
|
-
store:
|
|
11
|
+
store: Store<S>;
|
|
13
12
|
} & Partial<ConfigInput>): SessionFacade<Infer<S>>;
|
|
14
13
|
export default function session(Infer?: Omit<Partial<ConfigInput>, "store">): SessionFacade<unknown>;
|
|
15
14
|
export {};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import Store from "#
|
|
1
|
+
import Store from "#orm/Store";
|
|
2
2
|
declare const _default: import("pema").ObjectType<{
|
|
3
3
|
cookie: import("pema").ObjectType<{
|
|
4
|
-
httpOnly: import("pema").DefaultType<import("pema
|
|
5
|
-
name: import("pema").DefaultType<import("pema
|
|
6
|
-
path: import("pema").DefaultType<import("pema
|
|
7
|
-
sameSite: import("pema").DefaultType<import("pema
|
|
4
|
+
httpOnly: import("pema").DefaultType<import("pema").BooleanType, true>;
|
|
5
|
+
name: import("pema").DefaultType<import("pema").StringType, "session_id">;
|
|
6
|
+
path: import("pema").DefaultType<import("pema").StringType, "/">;
|
|
7
|
+
sameSite: import("pema").DefaultType<import("pema").UnionType<[import("pema").LiteralType<"Strict">, import("pema").LiteralType<"Lax">, import("pema").LiteralType<"None">]>, "Lax" | "None" | "Strict">;
|
|
8
8
|
}>;
|
|
9
|
-
store: import("pema").DefaultType<import("pema").ConstructorType<typeof Store>, Store<import("
|
|
9
|
+
store: import("pema").DefaultType<import("pema").ConstructorType<typeof Store>, Store<import("../orm/types.js").StoreInput, import("@rcompat/type").Dict<import("../orm/relation.js").Relation>>>;
|
|
10
10
|
}>;
|
|
11
11
|
export default _default;
|
|
12
12
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import MemoryDB from "#db/MemoryDB";
|
|
2
|
+
import key from "#orm/key";
|
|
3
|
+
import Store from "#orm/Store";
|
|
3
4
|
import p from "pema";
|
|
4
5
|
export default p({
|
|
5
6
|
cookie: {
|
|
@@ -10,9 +11,9 @@ export default p({
|
|
|
10
11
|
},
|
|
11
12
|
store: p.constructor(Store).default(() => {
|
|
12
13
|
return new Store({
|
|
13
|
-
id: p.
|
|
14
|
+
id: key.primary(p.string),
|
|
14
15
|
session_id: p.string.uuid(),
|
|
15
|
-
}, {
|
|
16
|
+
}, { db: new MemoryDB(), name: "session" });
|
|
16
17
|
}),
|
|
17
18
|
});
|
|
18
19
|
//# sourceMappingURL=schema.js.map
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type SessionHandle from "#session/SessionHandle";
|
|
2
|
-
|
|
3
|
-
declare const _default: <Data>() => AsyncLocalStorage<SessionHandle<Data>>;
|
|
2
|
+
declare const _default: <Data>() => import("node:async_hooks").AsyncLocalStorage<SessionHandle<Data>>;
|
|
4
3
|
export default _default;
|
|
5
4
|
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import io from "@rcompat/io";
|
|
2
2
|
import cache from "@rcompat/kv/cache";
|
|
3
3
|
const s = Symbol("primate.session");
|
|
4
|
-
export default () => cache.get(s, () => new
|
|
4
|
+
export default () => cache.get(s, () => new io.async.Context());
|
|
5
5
|
//# sourceMappingURL=storage.js.map
|
package/lib/private/tags.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
const attribute = (attributes) => empty(attributes)
|
|
1
|
+
import dict from "@rcompat/dict";
|
|
2
|
+
const attribute = (attributes) => dict.empty(attributes)
|
|
3
3
|
? ""
|
|
4
4
|
: " ".concat(Object.entries(attributes)
|
|
5
5
|
.map(([key, value]) => `${key}="${value}"`).join(" "));
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import createForm, { type FormInit, type FormView } from "#client/create-form";
|
|
2
|
+
import toValidated from "#client/to-validated";
|
|
3
|
+
import validateField from "#client/validate-field";
|
|
4
|
+
import type ValidateInit from "#client/ValidateInit";
|
|
5
|
+
import type ValidateUpdater from "#client/ValidateUpdater";
|
|
6
|
+
import type ValidationError from "#client/ValidationError";
|
|
7
|
+
declare const client: {
|
|
8
|
+
createForm: typeof createForm;
|
|
9
|
+
validateField: typeof validateField;
|
|
10
|
+
toValidated: typeof toValidated;
|
|
11
|
+
};
|
|
12
|
+
export default client;
|
|
13
|
+
export type { FormInit, FormView, ValidateInit, ValidateUpdater, ValidationError, };
|
|
14
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import createForm from "#client/create-form";
|
|
2
|
+
import toValidated from "#client/to-validated";
|
|
3
|
+
import validateField from "#client/validate-field";
|
|
4
|
+
const client = {
|
|
5
|
+
createForm, // headless form controller
|
|
6
|
+
validateField, // low-level single-value transport
|
|
7
|
+
toValidated, // adapter to create field stores/hooks
|
|
8
|
+
};
|
|
9
|
+
export default client;
|
|
10
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type { default as As } from "#db/As";
|
|
2
|
+
export type { default as DataDict } from "#db/DataDict";
|
|
3
|
+
export type { default as DB } from "#db/DB";
|
|
4
|
+
export type { default as PK } from "#db/PK";
|
|
5
|
+
export type { default as Sort } from "#db/Sort";
|
|
6
|
+
export type { default as TypeMap } from "#db/TypeMap";
|
|
7
|
+
export type { default as Types } from "#db/Types";
|
|
8
|
+
export type { default as With } from "#db/With";
|
|
9
|
+
export type { default as ReadArgs } from "#db/ReadArgs";
|
|
10
|
+
export type { default as ReadRelationsArgs } from "#db/ReadRelationsArgs";
|
|
11
|
+
export { default } from "#db/common";
|
|
12
|
+
//# sourceMappingURL=db.d.ts.map
|
package/lib/public/db.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import binary from "#response/binary";
|
|
2
|
+
import error from "#response/error";
|
|
3
|
+
import view from "#response/view";
|
|
4
|
+
export type { default as ResponseFunction } from "#response/ResponseFunction";
|
|
5
|
+
export type { default as ResponseLike } from "#response/ResponseLike";
|
|
6
|
+
declare const _default: {
|
|
7
|
+
binary: typeof binary;
|
|
8
|
+
error: typeof error;
|
|
9
|
+
json: (body: unknown, init?: ResponseInit) => (app: import("./ServeApp.js").default) => import("@rcompat/type").MaybePromise<Response>;
|
|
10
|
+
redirect: (location: string, status?: 302 | 301 | 300 | 304 | 308 | 303 | 307) => import("#response/ResponseFunction").default;
|
|
11
|
+
sse: (body: {
|
|
12
|
+
close?(): undefined;
|
|
13
|
+
open(events: {
|
|
14
|
+
send(name: string, data: unknown): undefined;
|
|
15
|
+
}): undefined;
|
|
16
|
+
}, init?: ResponseInit) => (app: import("./ServeApp.js").default) => import("@rcompat/type").MaybePromise<Response>;
|
|
17
|
+
text: (body: string, init?: ResponseInit) => (app: import("./ServeApp.js").default) => import("@rcompat/type").MaybePromise<Response>;
|
|
18
|
+
view: typeof view;
|
|
19
|
+
ws: (actions: import("@rcompat/http/Actions").default) => import("#response/ResponseFunction").default;
|
|
20
|
+
};
|
|
21
|
+
export default _default;
|
|
22
|
+
//# sourceMappingURL=response.d.ts.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import binary from "#response/binary";
|
|
2
|
+
import error from "#response/error";
|
|
3
|
+
import json from "#response/json";
|
|
4
|
+
import redirect from "#response/redirect";
|
|
5
|
+
import sse from "#response/sse";
|
|
6
|
+
import text from "#response/text";
|
|
7
|
+
import view from "#response/view";
|
|
8
|
+
import ws from "#response/ws";
|
|
9
|
+
export default {
|
|
10
|
+
binary,
|
|
11
|
+
error,
|
|
12
|
+
json,
|
|
13
|
+
redirect,
|
|
14
|
+
sse,
|
|
15
|
+
text,
|
|
16
|
+
view,
|
|
17
|
+
ws,
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=response.js.map
|
package/package.json
CHANGED
|
@@ -1,41 +1,46 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@primate/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "The universal web framework",
|
|
5
5
|
"homepage": "https://primate.run",
|
|
6
6
|
"bugs": "https://github.com/primate-run/primate/issues",
|
|
7
|
+
"type": "module",
|
|
7
8
|
"license": "MIT",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/primate-run/primate",
|
|
12
|
+
"directory": "packages/core"
|
|
13
|
+
},
|
|
8
14
|
"files": [
|
|
9
15
|
"/lib/**/*.js",
|
|
10
16
|
"/lib/**/*.d.ts",
|
|
11
17
|
"/lib/private/defaults/*.html",
|
|
12
18
|
"!/**/*.spec.*"
|
|
13
19
|
],
|
|
14
|
-
"repository": {
|
|
15
|
-
"type": "git",
|
|
16
|
-
"url": "https://github.com/primate-run/primate",
|
|
17
|
-
"directory": "packages/core"
|
|
18
|
-
},
|
|
19
20
|
"dependencies": {
|
|
20
|
-
"@rcompat/args": "^0.
|
|
21
|
-
"@rcompat/assert": "^0.
|
|
22
|
-
"@rcompat/
|
|
23
|
-
"@rcompat/
|
|
24
|
-
"@rcompat/
|
|
25
|
-
"@rcompat/
|
|
26
|
-
"@rcompat/fs": "^0.
|
|
27
|
-
"@rcompat/
|
|
28
|
-
"@rcompat/
|
|
29
|
-
"@rcompat/
|
|
30
|
-
"@rcompat/
|
|
31
|
-
"@rcompat/runtime": "^0.
|
|
32
|
-
"@rcompat/string": "^0.
|
|
33
|
-
"@rcompat/type": "^0.
|
|
34
|
-
"esbuild": "^0.27.
|
|
35
|
-
"pema": "^0.
|
|
21
|
+
"@rcompat/args": "^0.11.0",
|
|
22
|
+
"@rcompat/assert": "^0.6.0",
|
|
23
|
+
"@rcompat/cli": "^0.14.0",
|
|
24
|
+
"@rcompat/crypto": "^0.14.0",
|
|
25
|
+
"@rcompat/dict": "^0.3.1",
|
|
26
|
+
"@rcompat/fn": "^0.3.0",
|
|
27
|
+
"@rcompat/fs": "^0.25.2",
|
|
28
|
+
"@rcompat/http": "^0.21.0",
|
|
29
|
+
"@rcompat/io": "^0.3.0",
|
|
30
|
+
"@rcompat/is": "^0.4.2",
|
|
31
|
+
"@rcompat/kv": "^0.6.0",
|
|
32
|
+
"@rcompat/runtime": "^0.9.0",
|
|
33
|
+
"@rcompat/string": "^0.13.0",
|
|
34
|
+
"@rcompat/type": "^0.9.0",
|
|
35
|
+
"esbuild": "^0.27.3",
|
|
36
|
+
"pema": "^0.5.0"
|
|
36
37
|
},
|
|
37
|
-
"type": "module",
|
|
38
38
|
"imports": {
|
|
39
|
+
"#i18n/index": {
|
|
40
|
+
"apekit": "./src/private/i18n/index/client.ts",
|
|
41
|
+
"browser": "./lib/private/i18n/index/client.js",
|
|
42
|
+
"default": "./lib/private/i18n/index/server.js"
|
|
43
|
+
},
|
|
39
44
|
"#*": {
|
|
40
45
|
"apekit": "./src/private/*.ts",
|
|
41
46
|
"default": "./lib/private/*.js"
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import fail from "#fail";
|
|
2
|
-
export default function plugin_server_database_default(app) {
|
|
3
|
-
return {
|
|
4
|
-
name: "primate/server/database-default",
|
|
5
|
-
setup(build) {
|
|
6
|
-
build.onResolve({ filter: /^app:database$/ }, () => {
|
|
7
|
-
return { path: "database-default", namespace: "primate-database" };
|
|
8
|
-
});
|
|
9
|
-
build.onLoad({ filter: /.*/, namespace: "primate-database" }, async () => {
|
|
10
|
-
const base = app.path.config.join("database");
|
|
11
|
-
const default_db = {
|
|
12
|
-
contents: `
|
|
13
|
-
import DefaultDatabase from "primate/database/default";
|
|
14
|
-
export default new DefaultDatabase();
|
|
15
|
-
`,
|
|
16
|
-
loader: "js",
|
|
17
|
-
resolveDir: app.root.path,
|
|
18
|
-
};
|
|
19
|
-
if (!await base.exists())
|
|
20
|
-
return default_db;
|
|
21
|
-
const dbs = await base.collect(f => f.name.endsWith(".ts") || f.name.endsWith(".js"));
|
|
22
|
-
const n = dbs.length;
|
|
23
|
-
if (n === 0)
|
|
24
|
-
return default_db;
|
|
25
|
-
const by_name = {};
|
|
26
|
-
for (const d of dbs)
|
|
27
|
-
by_name[d.name] = d;
|
|
28
|
-
const pick = (stem) => by_name[`${stem}.ts`] ?? by_name[`${stem}.js`];
|
|
29
|
-
let db = pick("index");
|
|
30
|
-
if (db === undefined)
|
|
31
|
-
db = pick("default");
|
|
32
|
-
if (db === undefined) {
|
|
33
|
-
if (dbs.length === 1)
|
|
34
|
-
db = dbs[0];
|
|
35
|
-
else
|
|
36
|
-
throw fail("multiple database drivers, add index or default.(t|j)s; found {0}", dbs.map(f => f.name).join(", "));
|
|
37
|
-
}
|
|
38
|
-
const contents = `export { default } from ${JSON.stringify(db.path)};`;
|
|
39
|
-
return {
|
|
40
|
-
contents,
|
|
41
|
-
loader: "js",
|
|
42
|
-
resolveDir: app.root.path,
|
|
43
|
-
};
|
|
44
|
-
});
|
|
45
|
-
},
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=database-default.js.map
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
function extract(payload, defaultPath) {
|
|
2
|
-
// scalar: { message, messages }
|
|
3
|
-
if ("messages" in payload) {
|
|
4
|
-
return payload.messages.map(m => ({ message: m, path: defaultPath }));
|
|
5
|
-
}
|
|
6
|
-
// keyed: { "/field": { message, messages }, ... }
|
|
7
|
-
const issues = [];
|
|
8
|
-
for (const [path, bundle] of Object.entries(payload)) {
|
|
9
|
-
for (const message of bundle.messages) {
|
|
10
|
-
issues.push({ message, path: path });
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
return issues;
|
|
14
|
-
}
|
|
15
|
-
function focus(issues, path) {
|
|
16
|
-
if (path === undefined) {
|
|
17
|
-
return issues;
|
|
18
|
-
}
|
|
19
|
-
const focused = issues.filter(i => i.path === path);
|
|
20
|
-
return focused.length ? focused : issues;
|
|
21
|
-
}
|
|
22
|
-
export default async function validate(init, value) {
|
|
23
|
-
const headers = {
|
|
24
|
-
"content-type": "application/json",
|
|
25
|
-
...(init.headers ?? {}),
|
|
26
|
-
};
|
|
27
|
-
if (init.path !== undefined) {
|
|
28
|
-
headers["x-validate-path"] = init.path;
|
|
29
|
-
}
|
|
30
|
-
const bodyValue = init.map?.(value) ?? value;
|
|
31
|
-
let body;
|
|
32
|
-
try {
|
|
33
|
-
body = JSON.stringify(bodyValue);
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
const message = "Cannot serialize body. Provide a `map` that returns JSON.";
|
|
37
|
-
throw new Error(message);
|
|
38
|
-
}
|
|
39
|
-
const { method, url } = init;
|
|
40
|
-
const response = await fetch(url, { body, headers, method });
|
|
41
|
-
if (response.ok)
|
|
42
|
-
return;
|
|
43
|
-
const payload = await response.json();
|
|
44
|
-
const defaultPath = init.path ?? "";
|
|
45
|
-
const defaultIssues = [{ message: "Validation failed", path: defaultPath }];
|
|
46
|
-
const allIssues = extract(payload, defaultPath);
|
|
47
|
-
const focusedIssues = focus(allIssues, init.path);
|
|
48
|
-
const issues = focusedIssues.length > 0 ? focusedIssues : defaultIssues;
|
|
49
|
-
throw Object.assign(new Error(issues[0].message), {
|
|
50
|
-
issues,
|
|
51
|
-
name: "ValidationError",
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=validate.js.map
|