@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,261 +0,0 @@
|
|
|
1
|
-
import wrap from "#database/symbol/wrap";
|
|
2
|
-
import fail from "#fail";
|
|
3
|
-
import assert from "@rcompat/assert";
|
|
4
|
-
import is from "@rcompat/assert/is";
|
|
5
|
-
import maybe from "@rcompat/assert/maybe";
|
|
6
|
-
import StoreType from "pema/StoreType";
|
|
7
|
-
/**
|
|
8
|
-
* Database-backed store.
|
|
9
|
-
*
|
|
10
|
-
* A `DatabaseStore` exposes a typed, validated interface over a relational or
|
|
11
|
-
* document database table/collection. It pairs a Pema schema with a uniform
|
|
12
|
-
* CRUD/query API.
|
|
13
|
-
*
|
|
14
|
-
*/
|
|
15
|
-
export default class DatabaseStore {
|
|
16
|
-
#schema;
|
|
17
|
-
#type;
|
|
18
|
-
#types;
|
|
19
|
-
#nullables;
|
|
20
|
-
#database;
|
|
21
|
-
#name;
|
|
22
|
-
constructor(schema, config = {}) {
|
|
23
|
-
this.#schema = schema;
|
|
24
|
-
this.#type = new StoreType(schema);
|
|
25
|
-
this.#types = Object.fromEntries(Object.entries(schema)
|
|
26
|
-
.map(([key, value]) => [key, value.datatype]));
|
|
27
|
-
this.#name = config.name;
|
|
28
|
-
this.#database = config.database;
|
|
29
|
-
this.#nullables = new Set(Object.entries(this.#type.properties)
|
|
30
|
-
.filter(([, v]) => v.nullable)
|
|
31
|
-
.map(([k]) => k));
|
|
32
|
-
}
|
|
33
|
-
#parseCriteria(criteria) {
|
|
34
|
-
for (const [field, value] of Object.entries(criteria)) {
|
|
35
|
-
if (!(field in this.#types))
|
|
36
|
-
throw fail("unknown field {0}", field);
|
|
37
|
-
// skip null/undefined values
|
|
38
|
-
if (value === null)
|
|
39
|
-
continue;
|
|
40
|
-
// if it's an operator object, validate
|
|
41
|
-
if (typeof value === "object") {
|
|
42
|
-
const type = this.#types[field];
|
|
43
|
-
if ("$like" in value && type !== "string") {
|
|
44
|
-
throw fail("$like operator not supported in {0} ({1})", field, type);
|
|
45
|
-
}
|
|
46
|
-
/*const n_ops = ["$gte", "$gt", "$lte", "$lt"];
|
|
47
|
-
if (n_ops.some(op => op in value) && !["number", "i8", "i16", "i32",
|
|
48
|
-
"i64", "i128", "u8", "u16", "u32", "u64", "u128", "f32", "f64"]
|
|
49
|
-
.includes(type)) {
|
|
50
|
-
const used = n_ops.filter(op => op in value).join(", ");
|
|
51
|
-
throw fail("operators {0} not supported in {1} ({2})", used, field,
|
|
52
|
-
type);
|
|
53
|
-
}*/
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
static new(schema, config = {}) {
|
|
58
|
-
return new DatabaseStore(schema, config);
|
|
59
|
-
}
|
|
60
|
-
get #as() {
|
|
61
|
-
return {
|
|
62
|
-
name: this.name,
|
|
63
|
-
types: this.#types,
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
get collection() {
|
|
67
|
-
const database = this.database;
|
|
68
|
-
const name = this.name;
|
|
69
|
-
const schema = this.#schema;
|
|
70
|
-
return {
|
|
71
|
-
create: () => database.schema.create(name, schema),
|
|
72
|
-
delete: () => database.schema.delete(name),
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
get infer() {
|
|
76
|
-
return undefined;
|
|
77
|
-
}
|
|
78
|
-
get schema() {
|
|
79
|
-
return this.#schema;
|
|
80
|
-
}
|
|
81
|
-
get type() {
|
|
82
|
-
return this.#type;
|
|
83
|
-
}
|
|
84
|
-
[wrap](name, database) {
|
|
85
|
-
this.#database ??= database;
|
|
86
|
-
this.#name ??= name;
|
|
87
|
-
return this;
|
|
88
|
-
}
|
|
89
|
-
get database() {
|
|
90
|
-
if (this.#database === undefined)
|
|
91
|
-
throw fail("store missing database");
|
|
92
|
-
return this.#database;
|
|
93
|
-
}
|
|
94
|
-
get types() {
|
|
95
|
-
return this.#types;
|
|
96
|
-
}
|
|
97
|
-
get name() {
|
|
98
|
-
if (this.#name === undefined)
|
|
99
|
-
throw fail("store missing name");
|
|
100
|
-
return this.#name;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Count records.
|
|
104
|
-
*
|
|
105
|
-
* @param criteria Criteria to limit which records are counted.
|
|
106
|
-
* @returns Number of matching records (or total if no criteria given).
|
|
107
|
-
*/
|
|
108
|
-
async count(criteria) {
|
|
109
|
-
maybe(criteria).record();
|
|
110
|
-
if (criteria)
|
|
111
|
-
this.#parseCriteria(criteria);
|
|
112
|
-
return (await this.database.read(this.#as, {
|
|
113
|
-
count: true,
|
|
114
|
-
criteria: criteria ?? {},
|
|
115
|
-
}));
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Check whether a record with the given id exists.
|
|
119
|
-
*
|
|
120
|
-
* @param id Record id.
|
|
121
|
-
* @returns `true` if a record with the given id exists, otherwise `false`.
|
|
122
|
-
*/
|
|
123
|
-
async has(id) {
|
|
124
|
-
is(id).string();
|
|
125
|
-
// invariant: ids are primary keys and must be unique.
|
|
126
|
-
// if the driver ever returns more than one record, assert will fail.
|
|
127
|
-
// public contract remains just "true if it exists, false otherwise".
|
|
128
|
-
return (await this.count({ id })) === 1;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Get a record by id.
|
|
132
|
-
*
|
|
133
|
-
* @param id Record id.
|
|
134
|
-
* @throws If no record with the given id exists.
|
|
135
|
-
* @returns The record for the given id.
|
|
136
|
-
*/
|
|
137
|
-
async get(id) {
|
|
138
|
-
is(id).string();
|
|
139
|
-
const records = await this.database.read(this.#as, {
|
|
140
|
-
criteria: { id },
|
|
141
|
-
limit: 1,
|
|
142
|
-
});
|
|
143
|
-
assert(records.length <= 1);
|
|
144
|
-
if (records.length === 0)
|
|
145
|
-
throw fail("no record with id {0}", id);
|
|
146
|
-
return this.#type.parse(records[0]);
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Try to get a record by id.
|
|
150
|
-
*
|
|
151
|
-
* @param id Record id.
|
|
152
|
-
* @returns The record if found, otherwise `undefined`.
|
|
153
|
-
*/
|
|
154
|
-
async try(id) {
|
|
155
|
-
try {
|
|
156
|
-
return await this.get(id);
|
|
157
|
-
}
|
|
158
|
-
catch {
|
|
159
|
-
return undefined;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Insert a single record.
|
|
164
|
-
*
|
|
165
|
-
* If `id` is omitted, the driver generates one. Input is validated
|
|
166
|
-
* according to the store schema.
|
|
167
|
-
*
|
|
168
|
-
* @param record Record to insert (id optional).
|
|
169
|
-
* @throws If a record with the same id already exists or validation fails.
|
|
170
|
-
* @returns The inserted record with id.
|
|
171
|
-
*/
|
|
172
|
-
async insert(record) {
|
|
173
|
-
is(record).record();
|
|
174
|
-
return this.database.create(this.#as, { record: this.#type.parse(record) });
|
|
175
|
-
}
|
|
176
|
-
async update(criteria, changes) {
|
|
177
|
-
is(changes).record();
|
|
178
|
-
if ("id" in changes)
|
|
179
|
-
throw fail("{0} cannot be updated", ".id");
|
|
180
|
-
const changeEntries = Object.entries(changes);
|
|
181
|
-
for (const [k, v] of changeEntries) {
|
|
182
|
-
if (v === null && !this.#nullables.has(k)) {
|
|
183
|
-
throw fail(".{0}: null not allowed (field not nullable)", k);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
const toParse = Object.fromEntries(changeEntries
|
|
187
|
-
.filter(([key, value]) => value !== null || !this.#nullables.has(key)));
|
|
188
|
-
const nulls = Object.fromEntries(changeEntries
|
|
189
|
-
.filter(([key, value]) => value === null && this.#nullables.has(key)));
|
|
190
|
-
const parsed = {
|
|
191
|
-
// parse delta, without nullable nulls
|
|
192
|
-
...this.#type.partial().parse(toParse),
|
|
193
|
-
...nulls,
|
|
194
|
-
};
|
|
195
|
-
return typeof criteria === "string"
|
|
196
|
-
? this.#update_1(criteria, parsed)
|
|
197
|
-
: this.#update_n(criteria, parsed);
|
|
198
|
-
}
|
|
199
|
-
async #update_1(id, changes) {
|
|
200
|
-
is(id).string();
|
|
201
|
-
const n = await this.database.update(this.#as, {
|
|
202
|
-
changes,
|
|
203
|
-
criteria: { id },
|
|
204
|
-
});
|
|
205
|
-
assert(n === 1, `${n} records updated instead of 1`);
|
|
206
|
-
}
|
|
207
|
-
async #update_n(criteria, changes) {
|
|
208
|
-
is(criteria).record();
|
|
209
|
-
this.#parseCriteria(criteria);
|
|
210
|
-
const count = await this.database.update(this.#as, {
|
|
211
|
-
changes,
|
|
212
|
-
criteria,
|
|
213
|
-
});
|
|
214
|
-
return count;
|
|
215
|
-
}
|
|
216
|
-
async delete(criteria) {
|
|
217
|
-
return typeof criteria === "string"
|
|
218
|
-
? this.#delete_1(criteria)
|
|
219
|
-
: this.#delete_n(criteria);
|
|
220
|
-
}
|
|
221
|
-
async #delete_1(id) {
|
|
222
|
-
is(id).string();
|
|
223
|
-
const n = await this.database.delete(this.#as, { criteria: { id } });
|
|
224
|
-
assert(n === 1, `${n} records deleted instead of 1`);
|
|
225
|
-
}
|
|
226
|
-
async #delete_n(criteria) {
|
|
227
|
-
is(criteria).record();
|
|
228
|
-
this.#parseCriteria(criteria);
|
|
229
|
-
return await this.database.delete(this.#as, { criteria });
|
|
230
|
-
}
|
|
231
|
-
async find(criteria, options) {
|
|
232
|
-
is(criteria).record();
|
|
233
|
-
this.#parseCriteria(criteria);
|
|
234
|
-
maybe(options).record();
|
|
235
|
-
maybe(options?.select).record();
|
|
236
|
-
maybe(options?.sort).record();
|
|
237
|
-
maybe(options?.limit).usize();
|
|
238
|
-
const result = await this.database.read(this.#as, {
|
|
239
|
-
criteria,
|
|
240
|
-
fields: options?.select ? Object.keys(options.select) : undefined,
|
|
241
|
-
limit: options?.limit,
|
|
242
|
-
sort: options?.sort,
|
|
243
|
-
});
|
|
244
|
-
return result;
|
|
245
|
-
}
|
|
246
|
-
;
|
|
247
|
-
toJSON() {
|
|
248
|
-
return this.#type.toJSON();
|
|
249
|
-
}
|
|
250
|
-
extend(extensor) {
|
|
251
|
-
const extensions = extensor(this);
|
|
252
|
-
for (const k of Object.keys(extensions)) {
|
|
253
|
-
if (k in this)
|
|
254
|
-
throw fail("key {0} already exists on store", k);
|
|
255
|
-
}
|
|
256
|
-
Object.assign(this, extensions);
|
|
257
|
-
return this;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
;
|
|
261
|
-
//# sourceMappingURL=Store.js.map
|