@primate/core 0.4.6 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/private/App.d.ts +771 -6
- package/lib/private/App.js +49 -16
- package/lib/private/Binder.d.ts +2 -2
- package/lib/private/Flags.d.ts +8 -4
- package/lib/private/Module.d.ts +4 -16
- package/lib/private/Module.js +1 -17
- package/lib/private/app/EnvSchema.d.ts +5 -0
- package/lib/private/app/EnvSchema.js +2 -0
- package/lib/private/app/Facade.browser.d.ts +11 -0
- package/lib/private/app/Facade.browser.js +19 -0
- package/lib/private/app/Facade.d.ts +811 -0
- package/lib/private/app/Facade.js +56 -0
- package/lib/private/asset/Asset.d.ts +1 -1
- package/lib/private/build/App.d.ts +2 -2
- package/lib/private/build/App.js +0 -2
- package/lib/private/build/client/index.js +19 -10
- package/lib/private/build/client/plugin/app-request.d.ts +4 -0
- package/lib/private/build/client/plugin/app-request.js +19 -0
- package/lib/private/build/client/plugin/view.d.ts +4 -0
- package/lib/private/build/client/plugin/view.js +13 -0
- package/lib/private/build/hook.d.ts +1 -2
- package/lib/private/build/hook.js +25 -19
- package/lib/private/build/index.d.ts +2 -1
- package/lib/private/build/index.js +27 -27
- package/lib/private/build/presets.d.ts +10 -0
- package/lib/private/build/presets.js +39 -0
- package/lib/private/build/server/index.js +10 -14
- package/lib/private/build/server/plugin/app-request.d.ts +4 -0
- package/lib/private/build/server/plugin/app-request.js +19 -0
- package/lib/private/build/server/plugin/assets.js +9 -7
- package/lib/private/build/server/plugin/config.js +11 -4
- package/lib/private/build/server/plugin/frontend.js +4 -2
- package/lib/private/build/server/plugin/live-reload.d.ts +4 -0
- package/lib/private/build/server/plugin/{hot-reload.js → live-reload.js} +12 -12
- package/lib/private/build/server/plugin/native-addons.js +10 -11
- package/lib/private/build/server/plugin/node-imports.js +2 -2
- package/lib/private/build/server/plugin/route.js +4 -4
- package/lib/private/build/server/plugin/store.js +11 -33
- package/lib/private/build/server/plugin/stores.js +12 -9
- package/lib/private/build/server/plugin/view.js +5 -5
- package/lib/private/build/server/plugin/views.js +4 -4
- package/lib/private/build/server/plugin/virtual-pages.js +8 -8
- package/lib/private/build/server/plugin/virtual-routes.js +8 -13
- package/lib/private/build/server/plugin/wasm.js +2 -3
- package/lib/private/build/shared/plugin/app-request.d.ts +4 -0
- package/lib/private/build/shared/plugin/app-request.js +19 -0
- package/lib/private/bye.js +2 -3
- package/lib/private/client/Data.d.ts +3 -2
- package/lib/private/client/Render.d.ts +8 -0
- package/lib/private/{frontend → client}/ServerData.d.ts +1 -1
- package/lib/private/client/ServerView.d.ts +4 -0
- package/lib/private/client/ValidateInit.d.ts +1 -3
- package/lib/private/client/ValidationError.d.ts +1 -1
- package/lib/private/{frontend → client}/View.d.ts +1 -1
- package/lib/private/{frontend → client}/ViewOptions.d.ts +1 -1
- package/lib/private/{frontend → client}/ViewResponse.d.ts +2 -2
- package/lib/private/client/app.js +3 -3
- package/lib/private/client/boot.d.ts +5 -0
- package/lib/private/client/boot.js +64 -0
- package/lib/private/client/create-form.d.ts +32 -0
- package/lib/private/client/create-form.js +123 -0
- package/lib/private/client/extract-issues.d.ts +4 -0
- package/lib/private/client/extract-issues.js +21 -0
- package/lib/private/client/http.d.ts +13 -0
- package/lib/private/client/http.js +57 -0
- package/lib/private/client/index.d.ts +23 -0
- package/lib/private/client/index.js +16 -0
- package/lib/private/client/navigate.d.ts +13 -0
- package/lib/private/client/navigate.js +67 -0
- package/lib/private/client/root.d.ts +9 -0
- package/lib/private/client/root.js +11 -0
- package/lib/private/client/submit.d.ts +2 -0
- package/lib/private/client/submit.js +41 -0
- package/lib/private/client/{toValidated.d.ts → to-validated.d.ts} +2 -4
- package/lib/private/client/{toValidated.js → to-validated.js} +1 -1
- package/lib/private/client/validate-field.d.ts +3 -0
- package/lib/private/client/validate-field.js +41 -0
- package/lib/private/config/index.d.ts +7 -21
- package/lib/private/config/index.js +4 -1
- package/lib/private/config/schema.d.ts +82 -22
- package/lib/private/config/schema.js +25 -7
- package/lib/private/cookie.d.ts +12 -6
- package/lib/private/cookie.js +10 -14
- package/lib/private/db/As.d.ts +10 -0
- package/lib/private/db/DB.d.ts +49 -0
- package/lib/private/db/DB.js +3 -0
- package/lib/private/db/DataDict.d.ts +5 -0
- package/lib/private/db/DataKey.d.ts +4 -0
- package/lib/private/db/DataValue.d.ts +17 -0
- package/lib/private/db/MemoryDB.d.ts +33 -0
- package/lib/private/db/MemoryDB.js +335 -0
- package/lib/private/db/PK.d.ts +3 -0
- package/lib/private/db/PK.js +2 -0
- package/lib/private/{database → db}/Query.d.ts +2 -2
- package/lib/private/{database → db}/QueryBuilder.d.ts +2 -3
- package/lib/private/db/ReadArgs.d.ts +9 -0
- package/lib/private/db/ReadArgs.js +2 -0
- package/lib/private/db/ReadRelationsArgs.d.ts +6 -0
- package/lib/private/db/ReadRelationsArgs.js +2 -0
- package/lib/private/{database → db}/Schema.d.ts +1 -2
- package/lib/private/db/Sort.d.ts +4 -0
- package/lib/private/{database → db}/TypeMap.d.ts +2 -3
- package/lib/private/{database → db}/Types.d.ts +1 -1
- package/lib/private/db/With.d.ts +16 -0
- package/lib/private/db/With.js +2 -0
- package/lib/private/db/common.d.ts +25 -0
- package/lib/private/db/common.js +67 -0
- package/lib/private/db/errors.d.ts +104 -0
- package/lib/private/db/errors.js +237 -0
- package/lib/private/db/migrate/apply.d.ts +2 -0
- package/lib/private/db/migrate/apply.js +32 -0
- package/lib/private/db/migrate/bundle.d.ts +3 -0
- package/lib/private/db/migrate/bundle.js +22 -0
- package/lib/private/db/migrate/create.d.ts +2 -0
- package/lib/private/db/migrate/create.js +154 -0
- package/lib/private/db/migrate/index.d.ts +10 -0
- package/lib/private/db/migrate/index.js +6 -0
- package/lib/private/db/migrate/status.d.ts +2 -0
- package/lib/private/db/migrate/status.js +38 -0
- package/lib/private/db/migrate/store.d.ts +5 -0
- package/lib/private/db/migrate/store.js +33 -0
- package/lib/private/db/sql.d.ts +28 -0
- package/lib/private/db/sql.js +177 -0
- package/lib/private/db/storage.d.ts +3 -0
- package/lib/private/db/storage.js +3 -0
- package/lib/private/db/symbol.js +2 -0
- package/lib/private/db/test.d.ts +4 -0
- package/lib/private/db/test.js +1750 -0
- package/lib/private/errors.d.ts +88 -0
- package/lib/private/errors.js +211 -0
- package/lib/private/frontend.d.ts +72 -0
- package/lib/private/frontend.js +245 -0
- package/lib/private/hash.js +0 -1
- package/lib/private/i18n/Catalog.d.ts +5 -2
- package/lib/private/i18n/Formatter.js +21 -9
- package/lib/private/i18n/errors.d.ts +16 -0
- package/lib/private/i18n/errors.js +27 -0
- package/lib/private/i18n/format.d.ts +4 -0
- package/lib/private/i18n/format.js +95 -0
- package/lib/private/i18n/index/client.d.ts +9 -0
- package/lib/private/i18n/index/client.js +152 -0
- package/lib/private/i18n/index/server.d.ts +9 -0
- package/lib/private/i18n/index/server.js +57 -0
- package/lib/private/i18n/index/types.d.ts +33 -0
- package/lib/private/i18n/index/types.js +2 -0
- package/lib/private/i18n/locale.d.ts +9 -3
- package/lib/private/i18n/module.d.ts +3 -0
- package/lib/private/i18n/module.js +115 -0
- package/lib/private/i18n/ordinals.d.ts +1 -1
- package/lib/private/i18n/resolve.d.ts +7 -0
- package/lib/private/i18n/resolve.js +30 -0
- package/lib/private/i18n/schema.d.ts +10 -5
- package/lib/private/i18n/schema.js +6 -10
- package/lib/private/i18n/storage.d.ts +3 -0
- package/lib/private/i18n/storage.js +5 -0
- package/lib/private/i18n/validate.d.ts +2 -0
- package/lib/private/i18n/validate.js +19 -0
- package/lib/private/index.d.ts +14 -0
- package/lib/private/index.js +2 -0
- package/lib/private/log.d.ts +1 -0
- package/lib/private/log.js +15 -14
- package/lib/private/module/Hook.d.ts +1 -1
- package/lib/private/module/Next.d.ts +1 -1
- package/lib/private/module/Setup.d.ts +21 -0
- package/lib/private/module/Setup.js +2 -0
- package/lib/private/module/create.d.ts +16 -0
- package/lib/private/module/create.js +28 -0
- package/lib/private/orm/ExtractSchema.d.ts +9 -0
- package/lib/private/orm/ExtractSchema.js +2 -0
- package/lib/private/orm/ForeignKey.d.ts +14 -0
- package/lib/private/orm/ForeignKey.js +25 -0
- package/lib/private/orm/PrimaryKey.d.ts +17 -0
- package/lib/private/orm/PrimaryKey.js +38 -0
- package/lib/private/orm/StoreInput.d.ts +10 -0
- package/lib/private/orm/StoreInput.js +2 -0
- package/lib/private/orm/key.d.ts +8 -0
- package/lib/private/orm/key.js +8 -0
- package/lib/private/orm/parse.d.ts +13 -0
- package/lib/private/orm/parse.js +29 -0
- package/lib/private/orm/relation.d.ts +43 -0
- package/lib/private/orm/relation.js +26 -0
- package/lib/private/orm/store.d.ts +187 -0
- package/lib/private/orm/store.js +542 -0
- package/lib/private/paths.d.ts +2 -2
- package/lib/private/paths.js +3 -3
- package/lib/private/request/RequestBag.d.ts +5 -1
- package/lib/private/request/RequestBag.js +16 -9
- package/lib/private/request/RequestBody.d.ts +6 -11
- package/lib/private/request/RequestBody.js +51 -59
- package/lib/private/request/RequestContext.d.ts +12 -0
- package/lib/private/request/RequestContext.js +31 -0
- package/lib/private/request/RequestFacade.d.ts +11 -6
- package/lib/private/request/RequestPublic.d.ts +9 -0
- package/lib/private/request/RequestPublic.js +2 -0
- package/lib/private/request/RequestView.d.ts +11 -0
- package/lib/private/request/RequestView.js +3 -0
- package/lib/private/request/handle.d.ts +4 -0
- package/lib/private/request/handle.js +18 -0
- package/lib/private/request/parse.d.ts +2 -2
- package/lib/private/request/parse.js +55 -16
- package/lib/private/request/route.js +37 -22
- package/lib/private/request/router.d.ts +1 -1
- package/lib/private/request/router.js +22 -50
- package/lib/private/{database/symbol/wrap.d.ts → request/sContext.d.ts} +1 -1
- package/lib/private/request/sContext.js +2 -0
- package/lib/private/request/storage.d.ts +4 -0
- package/lib/private/request/storage.js +5 -0
- package/lib/private/response/ResponseFunction.d.ts +2 -3
- package/lib/private/response/ResponseLike.d.ts +1 -1
- package/lib/private/response/binary.d.ts +1 -1
- package/lib/private/response/binary.js +4 -3
- package/lib/private/response/error.d.ts +1 -1
- package/lib/private/response/error.js +1 -1
- package/lib/private/response/json.d.ts +1 -1
- package/lib/private/response/json.js +2 -2
- package/lib/private/response/redirect.d.ts +5 -5
- package/lib/private/response/redirect.js +9 -10
- package/lib/private/response/respond.js +16 -17
- package/lib/private/response/sse.d.ts +1 -1
- package/lib/private/response/sse.js +2 -2
- package/lib/private/response/text.d.ts +1 -1
- package/lib/private/response/text.js +3 -3
- package/lib/private/response/view.d.ts +3 -3
- package/lib/private/response/view.js +7 -14
- package/lib/private/response/ws.d.ts +1 -1
- package/lib/private/response.d.ts +1 -1
- package/lib/private/route/Handler.d.ts +1 -1
- package/lib/private/route/hook.d.ts +6 -0
- package/lib/private/route/hook.js +5 -0
- package/lib/private/route/router.d.ts +6 -2
- package/lib/private/route/router.js +32 -18
- package/lib/private/route/wrap.js +2 -2
- package/lib/private/serve/App.d.ts +11 -25
- package/lib/private/serve/App.js +138 -120
- package/lib/private/serve/Init.d.ts +5 -5
- package/lib/private/serve/dev-module.d.ts +2 -0
- package/lib/private/serve/dev-module.js +34 -0
- package/lib/private/serve/hook.d.ts +1 -2
- package/lib/private/serve/hook.js +2 -9
- package/lib/private/serve/index.d.ts +1 -1
- package/lib/private/serve/index.js +36 -2
- package/lib/private/server/TAG.d.ts +3 -0
- package/lib/private/server/TAG.js +2 -0
- package/lib/private/server/index.d.ts +5 -0
- package/lib/private/server/index.js +6 -0
- package/lib/private/session/Data.d.ts +1 -2
- package/lib/private/session/SessionHandle.d.ts +1 -1
- package/lib/private/session/SessionHandle.js +11 -9
- package/lib/private/session/index.d.ts +3 -4
- package/lib/private/session/module.d.ts +3 -0
- package/lib/private/session/module.js +114 -0
- package/lib/private/session/schema.d.ts +17 -9
- package/lib/private/session/schema.js +11 -6
- package/lib/private/session/storage.d.ts +1 -2
- package/lib/private/session/storage.js +2 -2
- package/lib/private/tags.js +2 -2
- package/lib/private/target/Manager.js +6 -12
- package/lib/private/target/Target.d.ts +1 -1
- package/lib/public/AppFacade.d.ts +2 -0
- package/lib/public/AppFacade.js +2 -0
- package/lib/public/build/presets.d.ts +2 -0
- package/lib/public/build/presets.js +2 -0
- package/lib/public/build/transform.d.ts +2 -0
- package/lib/public/build/transform.js +2 -0
- package/lib/public/client.d.ts +3 -0
- package/lib/public/client.js +2 -0
- package/lib/public/db/MemoryDB.d.ts +2 -0
- package/lib/public/db/MemoryDB.js +2 -0
- package/lib/public/db/errors.d.ts +2 -0
- package/lib/public/db/errors.js +2 -0
- package/lib/public/db/migrate.d.ts +2 -0
- package/lib/public/db/migrate.js +2 -0
- package/lib/public/db/sql.d.ts +2 -0
- package/lib/public/db/sql.js +2 -0
- package/lib/public/db/test.d.ts +2 -0
- package/lib/public/db/test.js +2 -0
- package/lib/public/db.d.ts +12 -0
- package/lib/public/db.js +2 -0
- package/lib/public/frontend.d.ts +3 -0
- package/lib/public/frontend.js +2 -0
- package/lib/public/index.d.ts +2 -0
- package/lib/public/index.js +2 -0
- package/lib/public/orm/key.d.ts +2 -0
- package/lib/public/orm/key.js +2 -0
- package/lib/public/orm/relation.d.ts +2 -0
- package/lib/public/orm/relation.js +2 -0
- package/lib/public/orm/store.d.ts +2 -0
- package/lib/public/orm/store.js +2 -0
- package/lib/public/request/server.d.ts +5 -0
- package/lib/public/request/server.js +7 -0
- package/lib/public/response.d.ts +22 -0
- package/lib/public/response.js +19 -0
- package/lib/public/route/hook.d.ts +2 -0
- package/lib/public/route/hook.js +2 -0
- package/lib/public/server.d.ts +3 -0
- package/lib/public/server.js +2 -0
- package/package.json +40 -30
- package/lib/private/AppError.d.ts +0 -4
- package/lib/private/AppError.js +0 -8
- package/lib/private/backend/Module.d.ts +0 -18
- package/lib/private/backend/Module.js +0 -22
- package/lib/private/backend/TAG.d.ts +0 -3
- package/lib/private/backend/TAG.js +0 -2
- package/lib/private/build/client/reload.d.ts +0 -7
- package/lib/private/build/client/reload.js +0 -6
- package/lib/private/build/server/plugin/database-default.d.ts +0 -4
- package/lib/private/build/server/plugin/database-default.js +0 -48
- package/lib/private/build/server/plugin/hot-reload.d.ts +0 -4
- package/lib/private/build/server/plugin/store-wrap.d.ts +0 -4
- package/lib/private/build/server/plugin/store-wrap.js +0 -33
- package/lib/private/client/spa/index.d.ts +0 -6
- package/lib/private/client/spa/index.js +0 -201
- package/lib/private/client/validate.d.ts +0 -3
- package/lib/private/client/validate.js +0 -54
- package/lib/private/database/As.d.ts +0 -7
- package/lib/private/database/Binds.d.ts +0 -4
- package/lib/private/database/Binds.js +0 -2
- package/lib/private/database/Changes.d.ts +0 -11
- package/lib/private/database/Changes.js +0 -2
- package/lib/private/database/ColumnTypes.d.ts +0 -11
- package/lib/private/database/ColumnTypes.js +0 -2
- package/lib/private/database/DataDict.d.ts +0 -5
- package/lib/private/database/DataKey.d.ts +0 -4
- package/lib/private/database/DataValue.d.ts +0 -5
- package/lib/private/database/Database.d.ts +0 -56
- package/lib/private/database/Database.js +0 -153
- package/lib/private/database/InMemoryDatabase.d.ts +0 -37
- package/lib/private/database/InMemoryDatabase.js +0 -181
- package/lib/private/database/Sort.d.ts +0 -4
- package/lib/private/database/Store.d.ts +0 -172
- package/lib/private/database/Store.js +0 -261
- package/lib/private/database/storage.d.ts +0 -4
- package/lib/private/database/storage.js +0 -3
- package/lib/private/database/symbol/wrap.js +0 -2
- package/lib/private/database/symbol.js +0 -2
- package/lib/private/database/test.d.ts +0 -4
- package/lib/private/database/test.js +0 -678
- package/lib/private/database/wrap.d.ts +0 -5
- package/lib/private/database/wrap.js +0 -5
- package/lib/private/fail.d.ts +0 -3
- package/lib/private/fail.js +0 -5
- package/lib/private/frontend/Module.d.ts +0 -62
- package/lib/private/frontend/Module.js +0 -250
- package/lib/private/frontend/Render.d.ts +0 -9
- package/lib/private/frontend/ServerView.d.ts +0 -5
- package/lib/private/i18n/Module.d.ts +0 -16
- package/lib/private/i18n/Module.js +0 -122
- package/lib/private/i18n/index.d.ts +0 -28
- package/lib/private/i18n/index.js +0 -236
- package/lib/private/module/BuildHook.d.ts +0 -5
- package/lib/private/module/BuildHook.js +0 -2
- package/lib/private/module/NextBuild.d.ts +0 -5
- package/lib/private/module/NextBuild.js +0 -2
- package/lib/private/module/NextServe.d.ts +0 -5
- package/lib/private/module/NextServe.js +0 -2
- package/lib/private/reducer.d.ts +0 -24
- package/lib/private/reducer.js +0 -10
- package/lib/private/route/guard.d.ts +0 -4
- package/lib/private/route/guard.js +0 -22
- package/lib/private/serve/module/Dev.d.ts +0 -11
- package/lib/private/serve/module/Dev.js +0 -28
- package/lib/private/serve/module/Handle.d.ts +0 -10
- package/lib/private/serve/module/Handle.js +0 -15
- package/lib/private/session/SessionModule.d.ts +0 -14
- package/lib/private/session/SessionModule.js +0 -122
- package/lib/private/wasm/API.d.ts +0 -7
- package/lib/private/wasm/API.js +0 -2
- package/lib/private/wasm/BufferViewSource.d.ts +0 -4
- package/lib/private/wasm/BufferViewSource.js +0 -2
- package/lib/private/wasm/Exports.d.ts +0 -23
- package/lib/private/wasm/Exports.js +0 -2
- package/lib/private/wasm/I32.d.ts +0 -5
- package/lib/private/wasm/I32.js +0 -2
- package/lib/private/wasm/I32_SIZE.d.ts +0 -3
- package/lib/private/wasm/I32_SIZE.js +0 -2
- package/lib/private/wasm/Instantiation.d.ts +0 -12
- package/lib/private/wasm/Instantiation.js +0 -2
- package/lib/private/wasm/Tagged.d.ts +0 -7
- package/lib/private/wasm/Tagged.js +0 -2
- package/lib/private/wasm/buffersize.d.ts +0 -2
- package/lib/private/wasm/buffersize.js +0 -5
- package/lib/private/wasm/decode-bytes.d.ts +0 -3
- package/lib/private/wasm/decode-bytes.js +0 -5
- package/lib/private/wasm/decode-json.d.ts +0 -7
- package/lib/private/wasm/decode-json.js +0 -11
- package/lib/private/wasm/decode-option.d.ts +0 -5
- package/lib/private/wasm/decode-option.js +0 -10
- package/lib/private/wasm/decode-response.d.ts +0 -19
- package/lib/private/wasm/decode-response.js +0 -90
- package/lib/private/wasm/decode-string.d.ts +0 -3
- package/lib/private/wasm/decode-string.js +0 -5
- package/lib/private/wasm/decode-websocket-close.d.ts +0 -5
- package/lib/private/wasm/decode-websocket-close.js +0 -6
- package/lib/private/wasm/decode-websocket-send.d.ts +0 -6
- package/lib/private/wasm/decode-websocket-send.js +0 -19
- package/lib/private/wasm/encode-buffer.d.ts +0 -3
- package/lib/private/wasm/encode-buffer.js +0 -6
- package/lib/private/wasm/encode-request.d.ts +0 -9
- package/lib/private/wasm/encode-request.js +0 -195
- package/lib/private/wasm/encode-session.d.ts +0 -3
- package/lib/private/wasm/encode-session.js +0 -25
- package/lib/private/wasm/encode-string-map.d.ts +0 -5
- package/lib/private/wasm/encode-string-map.js +0 -14
- package/lib/private/wasm/encode-string.d.ts +0 -13
- package/lib/private/wasm/encode-string.js +0 -17
- package/lib/private/wasm/encode-url.d.ts +0 -11
- package/lib/private/wasm/encode-url.js +0 -14
- package/lib/private/wasm/encode-websocket-close.d.ts +0 -2
- package/lib/private/wasm/encode-websocket-close.js +0 -7
- package/lib/private/wasm/encode-websocket-message.d.ts +0 -4
- package/lib/private/wasm/encode-websocket-message.js +0 -30
- package/lib/private/wasm/encode-websocket-open.d.ts +0 -2
- package/lib/private/wasm/encode-websocket-open.js +0 -7
- package/lib/private/wasm/filesize.d.ts +0 -2
- package/lib/private/wasm/filesize.js +0 -8
- package/lib/private/wasm/instantiate.d.ts +0 -37
- package/lib/private/wasm/instantiate.js +0 -408
- package/lib/private/wasm/open-websocket.d.ts +0 -4
- package/lib/private/wasm/open-websocket.js +0 -26
- package/lib/private/wasm/stringsize.d.ts +0 -3
- package/lib/private/wasm/stringsize.js +0 -5
- package/lib/private/wasm/urlsize.d.ts +0 -2
- package/lib/private/wasm/urlsize.js +0 -5
- package/lib/public/App.d.ts +0 -2
- package/lib/public/App.js +0 -2
- package/lib/public/AppError.d.ts +0 -2
- package/lib/public/AppError.js +0 -2
- package/lib/public/BuildApp.d.ts +0 -2
- package/lib/public/BuildApp.js +0 -2
- package/lib/public/BuildHook.d.ts +0 -2
- package/lib/public/BuildHook.js +0 -2
- package/lib/public/Database.d.ts +0 -2
- package/lib/public/Database.js +0 -2
- package/lib/public/Mode.d.ts +0 -2
- package/lib/public/Mode.js +0 -2
- package/lib/public/Module.d.ts +0 -2
- package/lib/public/Module.js +0 -2
- package/lib/public/Next.d.ts +0 -2
- package/lib/public/Next.js +0 -2
- package/lib/public/NextBuild.d.ts +0 -2
- package/lib/public/NextBuild.js +0 -2
- package/lib/public/NextHandle.d.ts +0 -2
- package/lib/public/NextHandle.js +0 -2
- package/lib/public/NextRoute.d.ts +0 -3
- package/lib/public/NextRoute.js +0 -2
- package/lib/public/NextServe.d.ts +0 -2
- package/lib/public/NextServe.js +0 -2
- package/lib/public/ServeApp.d.ts +0 -2
- package/lib/public/ServeApp.js +0 -2
- package/lib/public/Target.d.ts +0 -2
- package/lib/public/Target.js +0 -2
- package/lib/public/backend/Module.d.ts +0 -2
- package/lib/public/backend/Module.js +0 -2
- package/lib/public/backend/TAG.d.ts +0 -2
- package/lib/public/backend/TAG.js +0 -2
- package/lib/public/client/Data.d.ts +0 -2
- package/lib/public/client/Data.js +0 -2
- package/lib/public/client/ValidateInit.d.ts +0 -2
- package/lib/public/client/ValidateInit.js +0 -2
- package/lib/public/client/ValidateUpdater.d.ts +0 -2
- package/lib/public/client/ValidateUpdater.js +0 -2
- package/lib/public/client/ValidationError.d.ts +0 -2
- package/lib/public/client/ValidationError.js +0 -2
- package/lib/public/client/spa.d.ts +0 -2
- package/lib/public/client/spa.js +0 -2
- package/lib/public/client/toValidated.d.ts +0 -2
- package/lib/public/client/toValidated.js +0 -2
- package/lib/public/client/validate.d.ts +0 -2
- package/lib/public/client/validate.js +0 -2
- package/lib/public/database/As.d.ts +0 -2
- package/lib/public/database/As.js +0 -2
- package/lib/public/database/DataDict.d.ts +0 -2
- package/lib/public/database/DataDict.js +0 -2
- package/lib/public/database/InMemoryDatabase.d.ts +0 -2
- package/lib/public/database/InMemoryDatabase.js +0 -2
- package/lib/public/database/Sort.d.ts +0 -2
- package/lib/public/database/Sort.js +0 -2
- package/lib/public/database/Store.d.ts +0 -2
- package/lib/public/database/Store.js +0 -2
- package/lib/public/database/TypeMap.d.ts +0 -2
- package/lib/public/database/TypeMap.js +0 -2
- package/lib/public/database/Types.d.ts +0 -2
- package/lib/public/database/Types.js +0 -2
- package/lib/public/database/test.d.ts +0 -2
- package/lib/public/database/test.js +0 -2
- package/lib/public/database/wrap.d.ts +0 -2
- package/lib/public/database/wrap.js +0 -2
- package/lib/public/fail.d.ts +0 -2
- package/lib/public/fail.js +0 -2
- package/lib/public/frontend/Module.d.ts +0 -2
- package/lib/public/frontend/Module.js +0 -2
- package/lib/public/frontend/Publish.d.ts +0 -2
- package/lib/public/frontend/Publish.js +0 -2
- package/lib/public/frontend/Render.d.ts +0 -2
- package/lib/public/frontend/Render.js +0 -2
- package/lib/public/frontend/ViewResponse.d.ts +0 -2
- package/lib/public/frontend/ViewResponse.js +0 -2
- package/lib/public/request/RequestBody.d.ts +0 -2
- package/lib/public/request/RequestBody.js +0 -2
- package/lib/public/request/RequestFacade.d.ts +0 -2
- package/lib/public/request/RequestFacade.js +0 -2
- package/lib/public/request/Verb.d.ts +0 -2
- package/lib/public/request/Verb.js +0 -2
- package/lib/public/response/ResponseFunction.d.ts +0 -2
- package/lib/public/response/ResponseFunction.js +0 -2
- package/lib/public/response/ResponseLike.d.ts +0 -2
- package/lib/public/response/ResponseLike.js +0 -2
- package/lib/public/response/binary.d.ts +0 -2
- package/lib/public/response/binary.js +0 -2
- package/lib/public/response/error.d.ts +0 -2
- package/lib/public/response/error.js +0 -2
- package/lib/public/response/json.d.ts +0 -2
- package/lib/public/response/json.js +0 -2
- package/lib/public/response/redirect.d.ts +0 -2
- package/lib/public/response/redirect.js +0 -2
- package/lib/public/response/sse.d.ts +0 -2
- package/lib/public/response/sse.js +0 -2
- package/lib/public/response/text.d.ts +0 -2
- package/lib/public/response/text.js +0 -2
- package/lib/public/response/view.d.ts +0 -2
- package/lib/public/response/view.js +0 -2
- package/lib/public/response/ws.d.ts +0 -2
- package/lib/public/response/ws.js +0 -2
- package/lib/public/wasm/decode-json.d.ts +0 -5
- package/lib/public/wasm/decode-json.js +0 -3
- package/lib/public/wasm/decode-response.d.ts +0 -3
- package/lib/public/wasm/decode-response.js +0 -3
- package/lib/public/wasm/encode-request.d.ts +0 -3
- package/lib/public/wasm/encode-request.js +0 -3
- package/lib/public/wasm/encode-session.d.ts +0 -3
- package/lib/public/wasm/encode-session.js +0 -3
- package/lib/public/wasm/instantiate.d.ts +0 -4
- package/lib/public/wasm/instantiate.js +0 -3
- /package/lib/private/{frontend → client}/Publish.d.ts +0 -0
- /package/lib/private/{frontend → client}/Publish.js +0 -0
- /package/lib/private/{frontend → client}/Render.js +0 -0
- /package/lib/private/{frontend → client}/ServerData.js +0 -0
- /package/lib/private/{frontend → client}/ServerView.js +0 -0
- /package/lib/private/{frontend → client}/View.js +0 -0
- /package/lib/private/{frontend → client}/ViewOptions.js +0 -0
- /package/lib/private/{frontend → client}/ViewResponse.js +0 -0
- /package/lib/private/client/{spa/storage.d.ts → storage.d.ts} +0 -0
- /package/lib/private/client/{spa/storage.js → storage.js} +0 -0
- /package/lib/private/{database → db}/As.js +0 -0
- /package/lib/private/{database → db}/DataDict.js +0 -0
- /package/lib/private/{database → db}/DataKey.js +0 -0
- /package/lib/private/{database → db}/DataValue.js +0 -0
- /package/lib/private/{database → db}/Query.js +0 -0
- /package/lib/private/{database → db}/QueryBuilder.js +0 -0
- /package/lib/private/{database → db}/Schema.js +0 -0
- /package/lib/private/{database → db}/Sort.js +0 -0
- /package/lib/private/{database → db}/TypeMap.js +0 -0
- /package/lib/private/{database → db}/Types.js +0 -0
- /package/lib/private/{database → db}/primary.d.ts +0 -0
- /package/lib/private/{database → db}/primary.js +0 -0
- /package/lib/private/{database → db}/symbol.d.ts +0 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import extract_issues from "#client/extract-issues";
|
|
2
|
+
import submit from "#client/submit";
|
|
3
|
+
function decode_pointer_segment(segment) {
|
|
4
|
+
// decode JSON Pointer: ~1 -> /, ~0 -> ~
|
|
5
|
+
return segment.replace(/~1/g, "/").replace(/~0/g, "~");
|
|
6
|
+
}
|
|
7
|
+
function pointer_to_fieldname(path) {
|
|
8
|
+
// if server didn't send a pointer, assume it's already a field name
|
|
9
|
+
if (!path.startsWith("/"))
|
|
10
|
+
return path;
|
|
11
|
+
// root pointer "" is handled before calling this
|
|
12
|
+
// "/" is not a valid root pointer, but treat as form-level
|
|
13
|
+
if (path === "/")
|
|
14
|
+
return "";
|
|
15
|
+
const segments = path.split("/").slice(1).map(decode_pointer_segment);
|
|
16
|
+
if (segments.length === 0 || segments[0] === "")
|
|
17
|
+
return "";
|
|
18
|
+
let name = segments[0];
|
|
19
|
+
for (let i = 1; i < segments.length; i++) {
|
|
20
|
+
name += `[${segments[i]}]`;
|
|
21
|
+
}
|
|
22
|
+
return name;
|
|
23
|
+
}
|
|
24
|
+
export default function createForm(init) {
|
|
25
|
+
const id = init.id ?? `form-${crypto.randomUUID()}`;
|
|
26
|
+
let snapshot = {
|
|
27
|
+
id,
|
|
28
|
+
submitting: false,
|
|
29
|
+
submitted: false,
|
|
30
|
+
errors: { form: [], fields: {} },
|
|
31
|
+
};
|
|
32
|
+
const subscribers = new Set();
|
|
33
|
+
function publish() {
|
|
34
|
+
for (const s of subscribers)
|
|
35
|
+
s(snapshot);
|
|
36
|
+
}
|
|
37
|
+
function setSubmitting(submitting) {
|
|
38
|
+
snapshot = { ...snapshot, submitting };
|
|
39
|
+
publish();
|
|
40
|
+
}
|
|
41
|
+
function setErrors(issues) {
|
|
42
|
+
const by_field = {};
|
|
43
|
+
const form_errors = [];
|
|
44
|
+
for (const issue of issues) {
|
|
45
|
+
const path = issue.path;
|
|
46
|
+
// no path or empty string -> form-level error
|
|
47
|
+
if (path === undefined) {
|
|
48
|
+
form_errors.push(issue.message);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const key = pointer_to_fieldname(path);
|
|
52
|
+
// if normalizes to empty (e.g. "/"), treat as form-level
|
|
53
|
+
if (key.length === 0) {
|
|
54
|
+
form_errors.push(issue.message);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
(by_field[key] ??= []).push(issue.message);
|
|
58
|
+
}
|
|
59
|
+
snapshot = {
|
|
60
|
+
...snapshot,
|
|
61
|
+
submitted: false,
|
|
62
|
+
errors: {
|
|
63
|
+
form: form_errors,
|
|
64
|
+
fields: by_field,
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
publish();
|
|
68
|
+
}
|
|
69
|
+
async function submit_form(event) {
|
|
70
|
+
if (event !== undefined) {
|
|
71
|
+
event.preventDefault();
|
|
72
|
+
event.stopPropagation();
|
|
73
|
+
}
|
|
74
|
+
const form_element = event?.currentTarget ??
|
|
75
|
+
document.getElementById(id);
|
|
76
|
+
// no form element
|
|
77
|
+
if (form_element === null)
|
|
78
|
+
return;
|
|
79
|
+
const method = init.method
|
|
80
|
+
?? form_element.method.toUpperCase()
|
|
81
|
+
?? "POST";
|
|
82
|
+
const url = init.url ?? form_element.action;
|
|
83
|
+
const form_data = new FormData(form_element);
|
|
84
|
+
setSubmitting(true);
|
|
85
|
+
try {
|
|
86
|
+
const response = await submit(url, form_data, method);
|
|
87
|
+
if (response.ok) {
|
|
88
|
+
// on success: clear errors, let the app decide what to do next
|
|
89
|
+
// (redirect/reload)
|
|
90
|
+
snapshot = { ...snapshot, submitted: true, errors: { form: [], fields: {} } };
|
|
91
|
+
publish();
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const payload = await response.json();
|
|
95
|
+
const issues = extract_issues(payload); // all issues, all paths
|
|
96
|
+
setErrors(issues);
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
// network error
|
|
100
|
+
setErrors([{ type: "network_error", message: error.message, path: "" }]);
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
setSubmitting(false);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function subscribe(fn) {
|
|
107
|
+
subscribers.add(fn);
|
|
108
|
+
fn(snapshot); // emit current
|
|
109
|
+
return () => subscribers.delete(fn);
|
|
110
|
+
}
|
|
111
|
+
function read() {
|
|
112
|
+
return snapshot;
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
subscribe,
|
|
116
|
+
read,
|
|
117
|
+
submit: submit_form,
|
|
118
|
+
get id() {
|
|
119
|
+
return snapshot.id;
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=create-form.js.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export default function extractIssues(payload, defaultPath = "") {
|
|
2
|
+
// scalar: { message, messages }
|
|
3
|
+
if ("messages" in payload) {
|
|
4
|
+
return payload.messages.map(m => ({
|
|
5
|
+
type: payload.type,
|
|
6
|
+
message: m,
|
|
7
|
+
// for forms, defaultPath is "", but Issue.path expects a JSONPointer
|
|
8
|
+
// so we cast here; form-level errors are handled separately anyway
|
|
9
|
+
path: defaultPath,
|
|
10
|
+
}));
|
|
11
|
+
}
|
|
12
|
+
// keyed: { "/field": { message, messages }, ... }
|
|
13
|
+
const issues = [];
|
|
14
|
+
for (const [path, bundle] of Object.entries(payload)) {
|
|
15
|
+
for (const message of bundle.messages) {
|
|
16
|
+
issues.push({ type: bundle.type, message, path: path });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return issues;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=extract-issues.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
declare function refetch(input: string | URL, init?: RequestInit, max_hops?: number): Promise<{
|
|
2
|
+
requested: URL;
|
|
3
|
+
response: Response;
|
|
4
|
+
}>;
|
|
5
|
+
declare function is_json(response: Response): boolean;
|
|
6
|
+
declare function submit(pathname: string, body: any, method: string): Promise<Response>;
|
|
7
|
+
declare const http: {
|
|
8
|
+
refetch: typeof refetch;
|
|
9
|
+
is_json: typeof is_json;
|
|
10
|
+
submit: typeof submit;
|
|
11
|
+
};
|
|
12
|
+
export default http;
|
|
13
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { MIME } from "@rcompat/http";
|
|
2
|
+
const sameorigin = (url) => url.origin === globalThis.location.origin;
|
|
3
|
+
const get_location = (response, base) => {
|
|
4
|
+
if (response.type === "opaqueredirect")
|
|
5
|
+
return null;
|
|
6
|
+
const location = response.headers.get("Location");
|
|
7
|
+
return location !== null ? new URL(location, base) : null;
|
|
8
|
+
};
|
|
9
|
+
async function refetch(input, init = {}, max_hops = 5) {
|
|
10
|
+
let url = new URL(input.toString(), globalThis.location.href);
|
|
11
|
+
const method = (init.method ?? "GET").toUpperCase();
|
|
12
|
+
let hops = 0;
|
|
13
|
+
if (method !== "GET") {
|
|
14
|
+
const response = await fetch(url.pathname + url.search, {
|
|
15
|
+
...init, redirect: "follow",
|
|
16
|
+
});
|
|
17
|
+
return { requested: new URL(response.url), response };
|
|
18
|
+
}
|
|
19
|
+
while (hops < max_hops) {
|
|
20
|
+
const response = await fetch(url.pathname + url.search, {
|
|
21
|
+
...init, redirect: "manual",
|
|
22
|
+
});
|
|
23
|
+
if (response.type === "opaqueredirect")
|
|
24
|
+
return { requested: url, response };
|
|
25
|
+
const location = get_location(response, url.toString());
|
|
26
|
+
if (location !== null && response.status >= 300 && response.status < 400) {
|
|
27
|
+
if (!sameorigin(location))
|
|
28
|
+
return { requested: url, response };
|
|
29
|
+
url = location;
|
|
30
|
+
hops++;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
return { requested: url, response };
|
|
34
|
+
}
|
|
35
|
+
throw new Error("Too many redirects");
|
|
36
|
+
}
|
|
37
|
+
function is_json(response) {
|
|
38
|
+
const raw = response.headers.get("content-type") ?? "";
|
|
39
|
+
return raw.split(";")[0].trim() === MIME.APPLICATION_JSON;
|
|
40
|
+
}
|
|
41
|
+
async function submit(pathname, body, method) {
|
|
42
|
+
const { requested, response } = await refetch(pathname, { body, method });
|
|
43
|
+
if (is_json(response)) {
|
|
44
|
+
history.replaceState({}, "", requested.pathname + requested.search);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
globalThis.location.assign(requested.toString());
|
|
48
|
+
}
|
|
49
|
+
return response;
|
|
50
|
+
}
|
|
51
|
+
const http = {
|
|
52
|
+
refetch,
|
|
53
|
+
is_json,
|
|
54
|
+
submit,
|
|
55
|
+
};
|
|
56
|
+
export default http;
|
|
57
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { FormInit, FormView } from "#client/create-form";
|
|
2
|
+
import createForm from "#client/create-form";
|
|
3
|
+
import type Data from "#client/Data";
|
|
4
|
+
import type Publish from "#client/Publish";
|
|
5
|
+
import type Render from "#client/Render";
|
|
6
|
+
import submit from "#client/submit";
|
|
7
|
+
import toValidated from "#client/to-validated";
|
|
8
|
+
import validateField from "#client/validate-field";
|
|
9
|
+
import type ValidateInit from "#client/ValidateInit";
|
|
10
|
+
import type ValidateUpdater from "#client/ValidateUpdater";
|
|
11
|
+
import type ValidationError from "#client/ValidationError";
|
|
12
|
+
import type ViewResponse from "#client/ViewResponse";
|
|
13
|
+
declare const client: {
|
|
14
|
+
boot: <T extends import("@rcompat/type").Dict>(u: import("./root.js").Updater<T>) => void;
|
|
15
|
+
navigate: (href: string, event?: Event) => Promise<void>;
|
|
16
|
+
submit: typeof submit;
|
|
17
|
+
createForm: typeof createForm;
|
|
18
|
+
validateField: typeof validateField;
|
|
19
|
+
toValidated: typeof toValidated;
|
|
20
|
+
};
|
|
21
|
+
export default client;
|
|
22
|
+
export type { Data, FormInit, FormView, Publish, Render, ValidateInit, ValidateUpdater, ValidationError, ViewResponse, };
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import boot from "#client/boot";
|
|
2
|
+
import createForm from "#client/create-form";
|
|
3
|
+
import navigate from "#client/navigate";
|
|
4
|
+
import submit from "#client/submit";
|
|
5
|
+
import toValidated from "#client/to-validated";
|
|
6
|
+
import validateField from "#client/validate-field";
|
|
7
|
+
const client = {
|
|
8
|
+
boot,
|
|
9
|
+
navigate: navigate.go,
|
|
10
|
+
submit,
|
|
11
|
+
createForm,
|
|
12
|
+
validateField,
|
|
13
|
+
toValidated,
|
|
14
|
+
};
|
|
15
|
+
export default client;
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type Location = {
|
|
2
|
+
hash: string;
|
|
3
|
+
pathname: string;
|
|
4
|
+
};
|
|
5
|
+
declare function goto(target: Location, state?: boolean, after?: () => void): Promise<void>;
|
|
6
|
+
declare function go(href: string, event?: Event): Promise<void>;
|
|
7
|
+
declare const navigate: {
|
|
8
|
+
go: typeof go;
|
|
9
|
+
goto: typeof goto;
|
|
10
|
+
scroll_hash: (hash: string) => void;
|
|
11
|
+
};
|
|
12
|
+
export default navigate;
|
|
13
|
+
//# sourceMappingURL=navigate.d.ts.map
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import http from "#client/http";
|
|
2
|
+
import root from "#client/root";
|
|
3
|
+
import storage from "#client/storage";
|
|
4
|
+
import { MIME } from "@rcompat/http";
|
|
5
|
+
const headers = {
|
|
6
|
+
Accept: MIME.APPLICATION_JSON,
|
|
7
|
+
};
|
|
8
|
+
const get_by_id_or_name = (name) => document.getElementById(name) ?? document.getElementsByName(name)[0];
|
|
9
|
+
const scroll_hash = (hash) => {
|
|
10
|
+
if (hash === "") {
|
|
11
|
+
globalThis.scrollTo(0, 0);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
get_by_id_or_name(hash.slice(1)).scrollIntoView();
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
async function goto(target, state = false, after) {
|
|
18
|
+
try {
|
|
19
|
+
const { scrollTop } = globalThis.document.scrollingElement;
|
|
20
|
+
const { location } = globalThis;
|
|
21
|
+
const { requested, response } = await http.refetch(target.pathname, { headers });
|
|
22
|
+
if (http.is_json(response)) {
|
|
23
|
+
if (response.ok)
|
|
24
|
+
root.update(await response.json());
|
|
25
|
+
if (state) {
|
|
26
|
+
storage.new({ hash: location.hash, pathname: location.pathname, scrollTop });
|
|
27
|
+
history.pushState({}, "", `${target.pathname}${target.hash}`);
|
|
28
|
+
}
|
|
29
|
+
after?.();
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const dest = response.type !== "opaqueredirect"
|
|
33
|
+
? requested.toString() + target.hash
|
|
34
|
+
: new URL(target.pathname + target.hash, location.href).toString();
|
|
35
|
+
location.assign(dest);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
console.warn(error);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function go(href, event) {
|
|
42
|
+
const url = new URL(href);
|
|
43
|
+
const { hash, pathname } = url;
|
|
44
|
+
const { location } = globalThis;
|
|
45
|
+
if (url.host === location.host) {
|
|
46
|
+
event?.preventDefault();
|
|
47
|
+
if (location.pathname !== pathname) {
|
|
48
|
+
await goto(url, true, () => {
|
|
49
|
+
scroll_hash(hash);
|
|
50
|
+
globalThis.dispatchEvent(new Event("updated"));
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (location.hash !== hash) {
|
|
54
|
+
const { scrollTop } = globalThis.document.scrollingElement;
|
|
55
|
+
storage.new({ hash: location.hash, pathname: location.pathname, scrollTop, stop: true });
|
|
56
|
+
history.pushState(null, "", `${location.pathname}${hash}`);
|
|
57
|
+
scroll_hash(hash);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const navigate = {
|
|
62
|
+
go,
|
|
63
|
+
goto,
|
|
64
|
+
scroll_hash,
|
|
65
|
+
};
|
|
66
|
+
export default navigate;
|
|
67
|
+
//# sourceMappingURL=navigate.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type ClientData from "#client/Data";
|
|
2
|
+
import type { Dict } from "@rcompat/type";
|
|
3
|
+
export type Updater<T extends Dict> = (json: ClientData<T>, after?: () => void) => void;
|
|
4
|
+
declare const root: {
|
|
5
|
+
set(updater: Updater<any>): void;
|
|
6
|
+
update(data: any, after?: () => void): void;
|
|
7
|
+
};
|
|
8
|
+
export default root;
|
|
9
|
+
//# sourceMappingURL=root.d.ts.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import http from "#client/http";
|
|
2
|
+
import root from "#client/root";
|
|
3
|
+
import storage from "#client/storage";
|
|
4
|
+
import { MIME } from "@rcompat/http";
|
|
5
|
+
const headers = {
|
|
6
|
+
Accept: MIME.APPLICATION_JSON,
|
|
7
|
+
};
|
|
8
|
+
export default async function submit(pathname, body, method) {
|
|
9
|
+
const { requested, response } = await http.refetch(pathname, {
|
|
10
|
+
body, headers, method,
|
|
11
|
+
});
|
|
12
|
+
if (response.redirected) {
|
|
13
|
+
const { location, document, history } = globalThis;
|
|
14
|
+
const scrollTop = document.scrollingElement?.scrollTop ?? 0;
|
|
15
|
+
if (http.is_json(response))
|
|
16
|
+
root.update(await response.json());
|
|
17
|
+
storage.new({
|
|
18
|
+
hash: location.hash,
|
|
19
|
+
pathname: location.pathname,
|
|
20
|
+
scrollTop,
|
|
21
|
+
});
|
|
22
|
+
const url = new URL(response.url);
|
|
23
|
+
history.pushState({}, "", url.pathname + url.search);
|
|
24
|
+
return response;
|
|
25
|
+
}
|
|
26
|
+
if (http.is_json(response)) {
|
|
27
|
+
if (response.ok) {
|
|
28
|
+
root.update(await response.json());
|
|
29
|
+
history.replaceState({}, "", requested.pathname + requested.search);
|
|
30
|
+
}
|
|
31
|
+
return response;
|
|
32
|
+
}
|
|
33
|
+
if (response.status === 204)
|
|
34
|
+
return response;
|
|
35
|
+
const target = response.type !== "opaqueredirect"
|
|
36
|
+
? requested.toString()
|
|
37
|
+
: new URL(pathname, globalThis.location.href).toString();
|
|
38
|
+
globalThis.location.assign(target);
|
|
39
|
+
return response;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=submit.js.map
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import type ValidateInit from "#client/ValidateInit";
|
|
2
|
-
import type Dict from "@rcompat/type
|
|
3
|
-
import type JSONPointer from "@rcompat/type/JSONPointer";
|
|
4
|
-
import type JSONValue from "@rcompat/type/JSONValue";
|
|
2
|
+
import type { Dict, JSONPointer, JSONValue } from "@rcompat/type";
|
|
5
3
|
type Options<T> = {
|
|
6
4
|
headers?: Dict<string>;
|
|
7
5
|
map?: (v: T) => JSONValue;
|
|
@@ -14,4 +12,4 @@ export default function toValidated<T, R>(validateSignal: (init: ValidateInit<T>
|
|
|
14
12
|
put: (url: string, options?: Options<T>) => R;
|
|
15
13
|
};
|
|
16
14
|
export {};
|
|
17
|
-
//# sourceMappingURL=
|
|
15
|
+
//# sourceMappingURL=to-validated.d.ts.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import extract_issues from "#client/extract-issues";
|
|
2
|
+
function focus(issues, path) {
|
|
3
|
+
if (path === undefined) {
|
|
4
|
+
return issues;
|
|
5
|
+
}
|
|
6
|
+
const focused = issues.filter(i => i.path === path);
|
|
7
|
+
return focused.length ? focused : issues;
|
|
8
|
+
}
|
|
9
|
+
export default async function validateField(init, value) {
|
|
10
|
+
const headers = {
|
|
11
|
+
"content-type": "application/json",
|
|
12
|
+
...(init.headers ?? {}),
|
|
13
|
+
};
|
|
14
|
+
if (init.path !== undefined) {
|
|
15
|
+
headers["x-validate-path"] = init.path;
|
|
16
|
+
}
|
|
17
|
+
const body_value = init.map?.(value) ?? value;
|
|
18
|
+
let body;
|
|
19
|
+
try {
|
|
20
|
+
body = JSON.stringify(body_value);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
const message = "Cannot serialize body. Provide a `map` that returns JSON.";
|
|
24
|
+
throw new Error(message);
|
|
25
|
+
}
|
|
26
|
+
const { method, url } = init;
|
|
27
|
+
const response = await fetch(url, { body, headers, method });
|
|
28
|
+
if (response.ok)
|
|
29
|
+
return;
|
|
30
|
+
const payload = await response.json();
|
|
31
|
+
const default_path = init.path ?? "";
|
|
32
|
+
const default_issues = [{ message: "Validation failed", path: default_path }];
|
|
33
|
+
const all_issues = extract_issues(payload, default_path);
|
|
34
|
+
const focused_issues = focus(all_issues, init.path);
|
|
35
|
+
const issues = focused_issues.length > 0 ? focused_issues : default_issues;
|
|
36
|
+
throw Object.assign(new Error(issues[0].message), {
|
|
37
|
+
issues,
|
|
38
|
+
name: "ValidationError",
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=validate-field.js.map
|
|
@@ -1,24 +1,10 @@
|
|
|
1
|
+
import type EnvSchema from "#app/EnvSchema";
|
|
2
|
+
import AppFacade from "#app/Facade";
|
|
1
3
|
import schema from "#config/schema";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
host: string;
|
|
7
|
-
port: number;
|
|
8
|
-
ssl: {
|
|
9
|
-
cert: string | import("@rcompat/fs/FileRef").default | undefined;
|
|
10
|
-
key: string | import("@rcompat/fs/FileRef").default | undefined;
|
|
11
|
-
};
|
|
12
|
-
static: {
|
|
13
|
-
root: string;
|
|
14
|
-
};
|
|
4
|
+
import type { ObjectType } from "pema";
|
|
5
|
+
export default function config<P extends EnvSchema = EnvSchema>(input?: typeof schema.input & {
|
|
6
|
+
env?: {
|
|
7
|
+
schema?: ObjectType<P>;
|
|
15
8
|
};
|
|
16
|
-
|
|
17
|
-
request: {
|
|
18
|
-
body: {
|
|
19
|
-
parse: boolean;
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
export default _default;
|
|
9
|
+
}): AppFacade<P>;
|
|
24
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,25 +1,85 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
1
|
+
import type DB from "#db/DB";
|
|
2
|
+
import type Module from "#Module";
|
|
3
|
+
import type { Dict } from "@rcompat/type";
|
|
4
|
+
import type { ObjectType, Parsed } from "pema";
|
|
5
|
+
declare const _default: ObjectType<import("pema").NormalizeSchemaObject<{
|
|
6
|
+
readonly http: {
|
|
7
|
+
readonly csp: import("pema").OptionalType<import("pema").RecordType<import("pema").StringType, import("pema").ArrayType<import("pema").StringType>>>;
|
|
8
|
+
readonly headers: import("pema").OptionalType<import("pema").RecordType<import("pema").StringType, import("pema").StringType>>;
|
|
9
|
+
readonly host: import("pema").DefaultType<import("pema").StringType, "localhost">;
|
|
10
|
+
readonly port: import("pema").DefaultType<import("pema").UintType<"u32">, 6161>;
|
|
11
|
+
readonly ssl: {
|
|
12
|
+
readonly cert: import("pema").OptionalType<import("pema").UnionType<[import("pema").IsType<import("@rcompat/fs").FileRef>, import("pema").StringType]>>;
|
|
13
|
+
readonly key: import("pema").OptionalType<import("pema").UnionType<[import("pema").IsType<import("@rcompat/fs").FileRef>, import("pema").StringType]>>;
|
|
14
|
+
};
|
|
15
|
+
readonly static: {
|
|
16
|
+
readonly root: import("pema").DefaultType<import("pema").StringType, "/">;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
readonly livereload: {
|
|
20
|
+
readonly exclude: import("pema").OptionalType<import("pema").ArrayType<import("pema").StringType>>;
|
|
21
|
+
readonly host: import("pema").OptionalType<import("pema").StringType>;
|
|
22
|
+
readonly port: import("pema").OptionalType<import("pema").UintType<"u32">>;
|
|
23
|
+
};
|
|
24
|
+
readonly db: {
|
|
25
|
+
readonly migrations: import("pema").OptionalType<ObjectType<{
|
|
26
|
+
table: import("pema").StringType;
|
|
27
|
+
db: import("pema").PureType<DB, "PureType">;
|
|
28
|
+
}, {
|
|
29
|
+
table: string;
|
|
30
|
+
db: DB;
|
|
31
|
+
}>>;
|
|
32
|
+
};
|
|
33
|
+
readonly env: {
|
|
34
|
+
readonly schema: import("pema").OptionalType<import("pema").PureType<ObjectType<Dict<Parsed<unknown>>, {
|
|
35
|
+
[x: string]: unknown;
|
|
36
|
+
}>, "PureType">>;
|
|
37
|
+
};
|
|
38
|
+
readonly modules: import("pema").DefaultType<import("pema").ArrayType<ObjectType<{
|
|
39
|
+
name: import("pema").StringType;
|
|
40
|
+
setup: import("pema").FunctionType;
|
|
41
|
+
}, Module>>, Module[]>;
|
|
42
|
+
readonly request: {
|
|
43
|
+
readonly body: {
|
|
44
|
+
readonly parse: import("pema").DefaultType<import("pema").BooleanType, true>;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
}>, {
|
|
48
|
+
http: {
|
|
49
|
+
csp: Record<string, string[]> | undefined;
|
|
50
|
+
headers: Record<string, string> | undefined;
|
|
51
|
+
host: string;
|
|
52
|
+
port: number;
|
|
53
|
+
ssl: {
|
|
54
|
+
cert: string | import("@rcompat/fs").FileRef | undefined;
|
|
55
|
+
key: string | import("@rcompat/fs").FileRef | undefined;
|
|
56
|
+
};
|
|
57
|
+
static: {
|
|
58
|
+
root: string;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
livereload: {
|
|
62
|
+
exclude: string[] | undefined;
|
|
63
|
+
host: string | undefined;
|
|
64
|
+
port: number | undefined;
|
|
65
|
+
};
|
|
66
|
+
db: {
|
|
67
|
+
migrations: {
|
|
68
|
+
table: string;
|
|
69
|
+
db: DB;
|
|
70
|
+
} | undefined;
|
|
71
|
+
};
|
|
72
|
+
env: {
|
|
73
|
+
schema: ObjectType<Dict<Parsed<unknown>>, {
|
|
74
|
+
[x: string]: unknown;
|
|
75
|
+
}> | undefined;
|
|
76
|
+
};
|
|
77
|
+
modules: Module[];
|
|
78
|
+
request: {
|
|
79
|
+
body: {
|
|
80
|
+
parse: boolean;
|
|
81
|
+
};
|
|
82
|
+
};
|
|
23
83
|
}>;
|
|
24
84
|
export default _default;
|
|
25
85
|
//# sourceMappingURL=schema.d.ts.map
|