alepha 0.18.2 → 0.18.3
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/assets/devtools-ui/200.html +2 -2
- package/assets/devtools-ui/200.html.br +0 -0
- package/assets/devtools-ui/404.html +2 -2
- package/assets/devtools-ui/404.html.br +0 -0
- package/assets/devtools-ui/{asset.BfSBZ5Dd.css → asset.hG_f8HuK.css} +1 -1
- package/assets/devtools-ui/asset.hG_f8HuK.css.br +0 -0
- package/assets/devtools-ui/chunk.B3au4Lhg.js +1 -0
- package/assets/devtools-ui/chunk.B3au4Lhg.js.br +0 -0
- package/assets/devtools-ui/chunk.BLOrlnMB.js +1 -0
- package/assets/devtools-ui/chunk.BLOrlnMB.js.br +0 -0
- package/assets/devtools-ui/chunk.BLR01ljW.js +1 -0
- package/assets/devtools-ui/chunk.BLR01ljW.js.br +0 -0
- package/assets/devtools-ui/chunk.BTXaIUlA.js +1 -0
- package/assets/devtools-ui/chunk.BTXaIUlA.js.br +0 -0
- package/assets/devtools-ui/{chunk.lJL-lgnW.js → chunk.BhJaxmm8.js} +1 -1
- package/assets/devtools-ui/chunk.BhJaxmm8.js.br +0 -0
- package/assets/devtools-ui/chunk.BtoNxFuL.js +1 -0
- package/assets/devtools-ui/chunk.BtoNxFuL.js.br +0 -0
- package/assets/devtools-ui/chunk.C8YUV2Wd.js +1 -0
- package/assets/devtools-ui/chunk.C8YUV2Wd.js.br +0 -0
- package/assets/devtools-ui/{chunk.M6wyKO_3.js → chunk.CBbIgDzE.js} +2 -2
- package/assets/devtools-ui/chunk.CBbIgDzE.js.br +0 -0
- package/assets/devtools-ui/chunk.CFqIniwA.js +1 -0
- package/assets/devtools-ui/chunk.CFqIniwA.js.br +0 -0
- package/assets/devtools-ui/chunk.CLFF7f7-.js +1 -0
- package/assets/devtools-ui/chunk.CLFF7f7-.js.br +0 -0
- package/assets/devtools-ui/chunk.CRsBbA10.js +1 -0
- package/assets/devtools-ui/chunk.CRsBbA10.js.br +0 -0
- package/assets/devtools-ui/{chunk.DbEH1oOB.js → chunk.CZPo6v95.js} +1 -1
- package/assets/devtools-ui/chunk.CZPo6v95.js.br +0 -0
- package/assets/devtools-ui/chunk.D0fWgNos.js +1 -0
- package/assets/devtools-ui/chunk.D0fWgNos.js.br +1 -0
- package/assets/devtools-ui/chunk.D7-0ziQ6.js +1 -0
- package/assets/devtools-ui/chunk.D7-0ziQ6.js.br +0 -0
- package/assets/devtools-ui/chunk.DAewe0vm.js +1 -0
- package/assets/devtools-ui/chunk.DAewe0vm.js.br +0 -0
- package/assets/devtools-ui/chunk.DJRQEYqK.js +1 -0
- package/assets/devtools-ui/chunk.DJRQEYqK.js.br +0 -0
- package/assets/devtools-ui/{chunk.CZl6J9DF.js → chunk.DMAxv14p.js} +1 -1
- package/assets/devtools-ui/chunk.DMAxv14p.js.br +0 -0
- package/assets/devtools-ui/{chunk.BT2IiBkZ.js → chunk.DMImnNjU.js} +1 -1
- package/assets/devtools-ui/chunk.DMImnNjU.js.br +0 -0
- package/assets/devtools-ui/chunk.DeeQsidk.js +9 -0
- package/assets/devtools-ui/chunk.DeeQsidk.js.br +0 -0
- package/assets/devtools-ui/chunk.DqEwn9Vj.js +7 -0
- package/assets/devtools-ui/chunk.DqEwn9Vj.js.br +0 -0
- package/assets/devtools-ui/chunk.Dt8OsQey.js +1 -0
- package/assets/devtools-ui/chunk.Dt8OsQey.js.br +0 -0
- package/assets/devtools-ui/{chunk.B9pX3zit.js → chunk.Dtp8oa_f.js} +1 -1
- package/assets/devtools-ui/chunk.Dtp8oa_f.js.br +0 -0
- package/assets/devtools-ui/chunk.Dx3JzAYM.js +1 -0
- package/assets/devtools-ui/chunk.Dx3JzAYM.js.br +0 -0
- package/assets/devtools-ui/chunk.GCOj1-5E.js +1 -0
- package/assets/devtools-ui/chunk.GCOj1-5E.js.br +0 -0
- package/assets/devtools-ui/chunk.IC1LD8BH.js +1 -0
- package/assets/devtools-ui/chunk.IC1LD8BH.js.br +0 -0
- package/assets/devtools-ui/chunk.IwuB_TqW.js +1 -0
- package/assets/devtools-ui/chunk.IwuB_TqW.js.br +0 -0
- package/assets/devtools-ui/chunk.Qqapj2zq.js +1 -0
- package/assets/devtools-ui/chunk.Qqapj2zq.js.br +0 -0
- package/assets/devtools-ui/{chunk.C79YouPp.js → chunk.TKKKndOy.js} +1 -1
- package/assets/devtools-ui/chunk.TKKKndOy.js.br +0 -0
- package/assets/devtools-ui/chunk.YHTVhFQT.js +1 -0
- package/assets/devtools-ui/chunk.YHTVhFQT.js.br +0 -0
- package/assets/devtools-ui/chunk.fnod6uEi.js +1 -0
- package/assets/devtools-ui/chunk.fnod6uEi.js.br +0 -0
- package/assets/devtools-ui/chunk.mOCRmXjo.js +1 -0
- package/assets/devtools-ui/chunk.mOCRmXjo.js.br +0 -0
- package/assets/devtools-ui/chunk.qZTNEAK0.js +1 -0
- package/assets/devtools-ui/chunk.qZTNEAK0.js.br +0 -0
- package/assets/devtools-ui/chunk.rc9m0y4-.js +1 -0
- package/assets/devtools-ui/chunk.rc9m0y4-.js.br +0 -0
- package/assets/devtools-ui/entry.Cxc5QLCU.js +80 -0
- package/assets/devtools-ui/entry.Cxc5QLCU.js.br +0 -0
- package/assets/devtools-ui/index.html +2 -2
- package/assets/devtools-ui/index.html.br +0 -0
- package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
- package/assets/swagger-ui/swagger-ui.css +1 -1
- package/dist/api/audits/index.d.ts +61 -5
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/files/index.d.ts +61 -5
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/jobs/index.d.ts +61 -5
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/jobs/index.js +4 -2
- package/dist/api/jobs/index.js.map +1 -1
- package/dist/api/keys/index.d.ts +5 -5
- package/dist/api/notifications/index.browser.js +44 -1
- package/dist/api/notifications/index.browser.js.map +1 -1
- package/dist/api/notifications/index.d.ts +187 -2
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/notifications/index.js +143 -8
- package/dist/api/notifications/index.js.map +1 -1
- package/dist/api/parameters/index.d.ts +61 -5
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/users/index.d.ts +330 -93
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +27 -36
- package/dist/api/users/index.js.map +1 -1
- package/dist/cli/config/index.d.ts +46 -0
- package/dist/cli/config/index.d.ts.map +1 -0
- package/dist/cli/config/index.js +20 -0
- package/dist/cli/config/index.js.map +1 -0
- package/dist/cli/core/index.d.ts +69 -66
- package/dist/cli/core/index.d.ts.map +1 -1
- package/dist/cli/core/index.js +329 -196
- package/dist/cli/core/index.js.map +1 -1
- package/dist/cli/platform/index.d.ts +302 -63
- package/dist/cli/platform/index.d.ts.map +1 -1
- package/dist/cli/platform/index.js +455 -25
- package/dist/cli/platform/index.js.map +1 -1
- package/dist/core/index.browser.js +125 -87
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +62 -53
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +125 -87
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +125 -87
- package/dist/core/index.native.js.map +1 -1
- package/dist/core/index.workerd.js +125 -87
- package/dist/core/index.workerd.js.map +1 -1
- package/dist/crypto/index.d.ts +18 -1
- package/dist/crypto/index.d.ts.map +1 -1
- package/dist/crypto/index.js +29 -3
- package/dist/crypto/index.js.map +1 -1
- package/dist/devtools/index.js +3 -12
- package/dist/devtools/index.js.map +1 -1
- package/dist/logger/index.d.ts +10 -1
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +19 -9
- package/dist/logger/index.js.map +1 -1
- package/dist/orm/core/index.browser.js +57 -1
- package/dist/orm/core/index.browser.js.map +1 -1
- package/dist/orm/core/index.bun.js +378 -19
- package/dist/orm/core/index.bun.js.map +1 -1
- package/dist/orm/core/index.d.ts +328 -9
- package/dist/orm/core/index.d.ts.map +1 -1
- package/dist/orm/core/index.js +384 -21
- package/dist/orm/core/index.js.map +1 -1
- package/dist/orm/postgres/index.bun.js +49 -17
- package/dist/orm/postgres/index.bun.js.map +1 -1
- package/dist/orm/postgres/index.d.ts +47 -21
- package/dist/orm/postgres/index.d.ts.map +1 -1
- package/dist/orm/postgres/index.js +52 -17
- package/dist/orm/postgres/index.js.map +1 -1
- package/dist/react/core/index.d.ts +1 -1
- package/dist/react/core/index.d.ts.map +1 -1
- package/dist/react/core/index.js +6 -1
- package/dist/react/core/index.js.map +1 -1
- package/dist/react/form/index.d.ts +28 -18
- package/dist/react/form/index.d.ts.map +1 -1
- package/dist/react/form/index.js +92 -56
- package/dist/react/form/index.js.map +1 -1
- package/dist/react/router/index.browser.js +448 -116
- package/dist/react/router/index.browser.js.map +1 -1
- package/dist/react/router/index.d.ts +102 -40
- package/dist/react/router/index.d.ts.map +1 -1
- package/dist/react/router/index.js +453 -92
- package/dist/react/router/index.js.map +1 -1
- package/dist/security/index.d.ts +3 -11
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +6 -11
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +22 -24
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +102 -82
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cookies/index.d.ts +7 -4
- package/dist/server/cookies/index.d.ts.map +1 -1
- package/dist/server/cookies/index.js +13 -12
- package/dist/server/cookies/index.js.map +1 -1
- package/dist/server/core/index.d.ts +288 -4
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +375 -2
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/links/index.browser.js +10 -71
- package/dist/server/links/index.browser.js.map +1 -1
- package/dist/server/links/index.d.ts +32 -49
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +73 -100
- package/dist/server/links/index.js.map +1 -1
- package/dist/system/index.browser.js +221 -2
- package/dist/system/index.browser.js.map +1 -1
- package/dist/system/index.d.ts +63 -1
- package/dist/system/index.d.ts.map +1 -1
- package/dist/system/index.js +221 -1
- package/dist/system/index.js.map +1 -1
- package/dist/system/index.workerd.js +224 -4
- package/dist/system/index.workerd.js.map +1 -1
- package/package.json +10 -5
- package/src/api/jobs/providers/JobProvider.ts +6 -3
- package/src/api/notifications/controllers/AdminNotificationController.ts +83 -0
- package/src/api/notifications/index.browser.ts +3 -0
- package/src/api/notifications/index.ts +14 -2
- package/src/api/notifications/jobs/NotificationJobs.ts +11 -2
- package/src/api/notifications/schemas/notificationDetailResourceSchema.ts +20 -0
- package/src/api/notifications/schemas/notificationQuerySchema.ts +19 -0
- package/src/api/notifications/schemas/notificationResourceSchema.ts +18 -0
- package/src/api/notifications/services/NotificationSenderService.ts +15 -2
- package/src/api/users/atoms/realmAuthSettingsAtom.ts +28 -32
- package/src/api/users/buckets/UserBuckets.ts +1 -1
- package/src/api/users/jobs/UserJobs.ts +1 -1
- package/src/api/users/primitives/$realm.ts +8 -49
- package/src/api/users/providers/RealmProvider.ts +2 -3
- package/src/api/users/services/RegistrationService.spec.ts +7 -7
- package/src/api/users/services/RegistrationService.ts +3 -3
- package/src/api/users/services/SessionService.spec.ts +4 -4
- package/src/api/users/services/SessionService.ts +3 -3
- package/src/cli/{core → config}/defineConfig.ts +14 -20
- package/src/cli/config/index.ts +1 -0
- package/src/cli/core/commands/db.ts +65 -1
- package/src/cli/core/commands/dev.ts +1 -0
- package/src/cli/core/commands/init.ts +2 -192
- package/src/cli/core/index.ts +34 -11
- package/src/cli/core/providers/ViteDevServerProvider.ts +52 -13
- package/src/cli/core/services/PackageManagerUtils.ts +43 -21
- package/src/cli/core/services/ProjectScaffolder.ts +214 -2
- package/src/cli/core/services/ViteUtils.ts +57 -0
- package/src/cli/core/tasks/BuildClientTask.ts +7 -2
- package/src/cli/core/tasks/BuildCloudflareTask.ts +4 -12
- package/src/cli/core/tasks/BuildServerTask.ts +2 -0
- package/src/cli/core/tasks/BuildVercelTask.ts +165 -168
- package/src/cli/core/templates/alephaConfigTs.ts +1 -1
- package/src/cli/core/templates/apiAppSecurityTs.ts +5 -8
- package/src/cli/core/templates/tsconfigJson.ts +6 -1
- package/src/cli/platform/adapters/CloudflareAdapter.spec.ts +1 -1
- package/src/cli/platform/adapters/CloudflareAdapter.ts +30 -29
- package/src/cli/platform/atoms/platformOptions.ts +21 -0
- package/src/cli/platform/commands/SecretsCommand.spec.ts +298 -0
- package/src/cli/platform/commands/SecretsCommand.ts +283 -0
- package/src/cli/platform/commands/platform.ts +12 -0
- package/src/cli/platform/index.ts +14 -28
- package/src/cli/platform/providers/GitHubSecretStore.spec.ts +153 -0
- package/src/cli/platform/providers/GitHubSecretStore.ts +112 -0
- package/src/cli/platform/providers/MemorySecretStore.ts +114 -0
- package/src/cli/platform/providers/SecretStoreProvider.ts +39 -0
- package/src/cli/platform/schemas/cloudflare.ts +2 -0
- package/src/cli/platform/services/CloudflareApi.ts +5 -2
- package/src/cli/platform/services/DockerComposeGenerator.spec.ts +115 -0
- package/src/cli/platform/services/DockerComposeGenerator.ts +46 -1
- package/src/cli/platform/services/SecretFilterService.spec.ts +111 -0
- package/src/cli/platform/services/SecretFilterService.ts +54 -0
- package/src/core/Alepha.ts +94 -25
- package/src/core/__tests__/Alepha-parseEnv.spec.ts +20 -0
- package/src/core/primitives/$memoize.ts +38 -26
- package/src/core/providers/AlsProvider.ts +2 -0
- package/src/core/providers/EventManager.ts +4 -0
- package/src/core/providers/KeylessJsonSchemaCodec.spec.ts +1 -4
- package/src/core/providers/KeylessJsonSchemaCodec.ts +19 -125
- package/src/core/providers/SchemaValidator.spec.ts +36 -0
- package/src/core/providers/SchemaValidator.ts +9 -0
- package/src/crypto/index.ts +6 -1
- package/src/crypto/providers/SecretProvider.ts +36 -0
- package/src/devtools/providers/DevToolsProvider.ts +3 -12
- package/src/logger/index.ts +33 -6
- package/src/logger/providers/PrettyFormatterProvider.ts +5 -3
- package/src/orm/__tests__/orm-next-tests.ts +492 -0
- package/src/orm/__tests__/orm-next.spec.ts +140 -0
- package/src/orm/core/constants/PG_SYMBOLS.ts +17 -0
- package/src/orm/core/index.bun.ts +3 -6
- package/src/orm/core/index.shared-server.ts +2 -0
- package/src/orm/core/index.shared.ts +2 -0
- package/src/orm/core/index.ts +5 -7
- package/src/orm/core/interfaces/AggregateQuery.ts +103 -0
- package/src/orm/core/interfaces/PgQueryWhere.ts +7 -0
- package/src/orm/core/primitives/$entity.ts +8 -0
- package/src/orm/core/primitives/$repository.ts +6 -3
- package/src/orm/core/primitives/$view.ts +88 -0
- package/src/orm/core/providers/DbCacheProvider.ts +66 -0
- package/src/orm/core/providers/DrizzleKitProvider.ts +42 -0
- package/src/orm/core/providers/drivers/BunSqliteProvider.ts +2 -3
- package/src/orm/core/providers/drivers/CloudflareD1Provider.ts +12 -0
- package/src/orm/core/providers/drivers/DatabaseProvider.ts +39 -0
- package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +2 -3
- package/src/orm/core/schemas/databaseEnvSchema.ts +31 -0
- package/src/orm/core/schemas/insertSchema.ts +13 -3
- package/src/orm/core/schemas/updateSchema.ts +14 -3
- package/src/orm/core/services/ModelBuilder.ts +26 -14
- package/src/orm/core/services/QueryManager.ts +13 -0
- package/src/orm/core/services/Repository.ts +307 -5
- package/src/orm/core/services/SqliteModelBuilder.ts +38 -0
- package/src/orm/postgres/index.bun.ts +4 -7
- package/src/orm/postgres/index.ts +4 -7
- package/src/orm/postgres/providers/BunPostgresProvider.ts +12 -2
- package/src/orm/postgres/providers/NodePostgresProvider.ts +7 -0
- package/src/orm/postgres/providers/PglitePostgresProvider.ts +10 -17
- package/src/orm/postgres/providers/PostgresProvider.ts +7 -36
- package/src/orm/postgres/schemas/postgresEnvSchema.ts +32 -0
- package/src/orm/postgres/services/PostgresModelBuilder.ts +40 -0
- package/src/react/core/components/ErrorBoundary.tsx +5 -2
- package/src/react/form/hooks/useFieldValue.ts +34 -0
- package/src/react/form/hooks/useForm.browser.spec.tsx +94 -9
- package/src/react/form/hooks/useForm.ts +14 -2
- package/src/react/form/hooks/useFormState.ts +10 -10
- package/src/react/form/hooks/useFormValues.ts +29 -0
- package/src/react/form/index.ts +3 -1
- package/src/react/form/services/FormModel.ts +53 -122
- package/src/react/router/components/ErrorViewer.tsx +333 -34
- package/src/react/router/components/NestedView.tsx +10 -3
- package/src/react/router/primitives/$page.browser.spec.tsx +34 -0
- package/src/react/router/primitives/$page.spec.tsx +20 -0
- package/src/react/router/primitives/$page.ts +24 -0
- package/src/react/router/providers/ReactBrowserRouterProvider.ts +14 -2
- package/src/react/router/providers/ReactPageProvider.ts +156 -73
- package/src/react/router/providers/ReactServerProvider.ts +40 -2
- package/src/react/router/providers/ReactServerTemplateProvider.ts +13 -1
- package/src/security/providers/SecurityProvider.ts +5 -27
- package/src/server/auth/primitives/$auth.ts +52 -19
- package/src/server/auth/providers/ServerAuthProvider.ts +145 -139
- package/src/server/cookies/providers/ServerCookiesProvider.ts +12 -24
- package/src/server/core/index.ts +3 -1
- package/src/server/core/primitives/$sse.spec.ts +315 -0
- package/src/server/core/primitives/$sse.ts +715 -0
- package/src/server/links/index.browser.ts +1 -3
- package/src/server/links/index.ts +0 -3
- package/src/server/links/providers/LinkProvider.spec.ts +12 -21
- package/src/server/links/providers/LinkProvider.ts +20 -52
- package/src/server/links/providers/ServerLinksProvider.spec.ts +106 -0
- package/src/server/links/providers/ServerLinksProvider.ts +113 -73
- package/src/server/links/schemas/apiLinksResponseSchema.ts +4 -21
- package/src/server/links/services/BatchCollector.ts +5 -3
- package/src/system/index.browser.ts +1 -0
- package/src/system/index.ts +3 -0
- package/src/system/index.workerd.ts +39 -1
- package/src/system/providers/WorkerdFileSystemProvider.ts +365 -0
- package/assets/devtools-ui/asset.BfSBZ5Dd.css.br +0 -0
- package/assets/devtools-ui/chunk.2NYaoqWt.js +0 -1
- package/assets/devtools-ui/chunk.2NYaoqWt.js.br +0 -0
- package/assets/devtools-ui/chunk.B052Z_xQ.js +0 -1
- package/assets/devtools-ui/chunk.B052Z_xQ.js.br +0 -0
- package/assets/devtools-ui/chunk.B4kVY90C.js +0 -1
- package/assets/devtools-ui/chunk.B4kVY90C.js.br +0 -0
- package/assets/devtools-ui/chunk.B7QJXctB.js +0 -1
- package/assets/devtools-ui/chunk.B7QJXctB.js.br +0 -0
- package/assets/devtools-ui/chunk.B9pX3zit.js.br +0 -0
- package/assets/devtools-ui/chunk.BKF9JxIo.js +0 -1
- package/assets/devtools-ui/chunk.BKF9JxIo.js.br +0 -0
- package/assets/devtools-ui/chunk.BOHgdTP-.js +0 -1
- package/assets/devtools-ui/chunk.BOHgdTP-.js.br +0 -0
- package/assets/devtools-ui/chunk.BOVFxkYC.js +0 -1
- package/assets/devtools-ui/chunk.BOVFxkYC.js.br +0 -0
- package/assets/devtools-ui/chunk.BR842zj5.js +0 -1
- package/assets/devtools-ui/chunk.BR842zj5.js.br +0 -0
- package/assets/devtools-ui/chunk.BT2IiBkZ.js.br +0 -0
- package/assets/devtools-ui/chunk.C79YouPp.js.br +0 -0
- package/assets/devtools-ui/chunk.C8mlBrjW.js +0 -9
- package/assets/devtools-ui/chunk.C8mlBrjW.js.br +0 -0
- package/assets/devtools-ui/chunk.CK0ow3AZ.js +0 -1
- package/assets/devtools-ui/chunk.CK0ow3AZ.js.br +0 -0
- package/assets/devtools-ui/chunk.CZl6J9DF.js.br +0 -0
- package/assets/devtools-ui/chunk.CdNr0YzS.js +0 -1
- package/assets/devtools-ui/chunk.CdNr0YzS.js.br +0 -0
- package/assets/devtools-ui/chunk.Ce6_6iIF.js +0 -1
- package/assets/devtools-ui/chunk.Ce6_6iIF.js.br +0 -0
- package/assets/devtools-ui/chunk.CpyDMr6O.js +0 -1
- package/assets/devtools-ui/chunk.CpyDMr6O.js.br +0 -0
- package/assets/devtools-ui/chunk.CyPmvPnY.js +0 -1
- package/assets/devtools-ui/chunk.CyPmvPnY.js.br +0 -0
- package/assets/devtools-ui/chunk.DTI_geWu.js +0 -1
- package/assets/devtools-ui/chunk.DTI_geWu.js.br +0 -0
- package/assets/devtools-ui/chunk.DbEH1oOB.js.br +0 -0
- package/assets/devtools-ui/chunk.Ddeqj5gv.js +0 -1
- package/assets/devtools-ui/chunk.Ddeqj5gv.js.br +0 -0
- package/assets/devtools-ui/chunk.DpRnB4vJ.js +0 -1
- package/assets/devtools-ui/chunk.DpRnB4vJ.js.br +0 -0
- package/assets/devtools-ui/chunk.DxPGTlsg.js +0 -1
- package/assets/devtools-ui/chunk.DxPGTlsg.js.br +0 -0
- package/assets/devtools-ui/chunk.G7_MMBJS.js +0 -1
- package/assets/devtools-ui/chunk.G7_MMBJS.js.br +0 -0
- package/assets/devtools-ui/chunk.M6wyKO_3.js.br +0 -0
- package/assets/devtools-ui/chunk.OUxNGmQ6.js +0 -1
- package/assets/devtools-ui/chunk.OUxNGmQ6.js.br +0 -0
- package/assets/devtools-ui/chunk.T1kle-fF.js +0 -1
- package/assets/devtools-ui/chunk.T1kle-fF.js.br +0 -0
- package/assets/devtools-ui/chunk.WjpsbQAv.js +0 -1
- package/assets/devtools-ui/chunk.WjpsbQAv.js.br +0 -0
- package/assets/devtools-ui/chunk.c6YgVx86.js +0 -1
- package/assets/devtools-ui/chunk.c6YgVx86.js.br +0 -0
- package/assets/devtools-ui/chunk.dwU3E_MU.js +0 -1
- package/assets/devtools-ui/chunk.dwU3E_MU.js.br +0 -0
- package/assets/devtools-ui/chunk.lJL-lgnW.js.br +0 -0
- package/assets/devtools-ui/chunk.lPWRmvA-.js +0 -7
- package/assets/devtools-ui/chunk.lPWRmvA-.js.br +0 -0
- package/assets/devtools-ui/chunk.p3HJvugM.js +0 -1
- package/assets/devtools-ui/chunk.p3HJvugM.js.br +0 -0
- package/assets/devtools-ui/chunk.r_Xoa_CI.js +0 -1
- package/assets/devtools-ui/chunk.r_Xoa_CI.js.br +0 -0
- package/assets/devtools-ui/chunk.sRNuTYXb.js +0 -1
- package/assets/devtools-ui/chunk.sRNuTYXb.js.br +0 -0
- package/assets/devtools-ui/chunk.tUjcyX5C.js +0 -1
- package/assets/devtools-ui/chunk.tUjcyX5C.js.br +0 -0
- package/assets/devtools-ui/chunk.thjBxvCA.js +0 -1
- package/assets/devtools-ui/chunk.thjBxvCA.js.br +0 -0
- package/assets/devtools-ui/entry.GYhBVRpC.js +0 -78
- package/assets/devtools-ui/entry.GYhBVRpC.js.br +0 -0
- package/src/server/links/services/DefinitionsPool.spec.ts +0 -86
- package/src/server/links/services/DefinitionsPool.ts +0 -43
|
@@ -160,82 +160,373 @@ var PagePrimitive = class extends Primitive {
|
|
|
160
160
|
};
|
|
161
161
|
$page[KIND] = PagePrimitive;
|
|
162
162
|
|
|
163
|
+
//#endregion
|
|
164
|
+
//#region ../../src/react/router/hooks/useRouterState.ts
|
|
165
|
+
const useRouterState = () => {
|
|
166
|
+
const [state] = useStore("alepha.react.router.state");
|
|
167
|
+
if (!state) throw new AlephaError("Missing react router state");
|
|
168
|
+
return state;
|
|
169
|
+
};
|
|
170
|
+
|
|
163
171
|
//#endregion
|
|
164
172
|
//#region ../../src/react/router/components/ErrorViewer.tsx
|
|
165
173
|
const mono = "ui-monospace, \"JetBrains Mono\", SFMono-Regular, Menlo, Monaco, Consolas, monospace";
|
|
166
|
-
const ErrorViewer = (
|
|
167
|
-
if (alepha.isProduction()) return /* @__PURE__ */ jsx(
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
174
|
+
const ErrorViewer = (props) => {
|
|
175
|
+
if (props.alepha.isProduction()) return /* @__PURE__ */ jsx(ProdErrorPage, { error: props.error });
|
|
176
|
+
return /* @__PURE__ */ jsx(DevErrorPage, { ...props });
|
|
177
|
+
};
|
|
178
|
+
const DevErrorPage = (props) => {
|
|
179
|
+
const [copied, setCopied] = useState(false);
|
|
180
|
+
const pathname = useRouterState().url.pathname;
|
|
181
|
+
const handleCopy = () => {
|
|
182
|
+
const text = buildErrorText(props.error);
|
|
183
|
+
if (typeof navigator !== "undefined" && navigator.clipboard) {
|
|
184
|
+
navigator.clipboard.writeText(text);
|
|
185
|
+
setCopied(true);
|
|
186
|
+
setTimeout(() => setCopied(false), 2e3);
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
const status = getHttpStatus(props.error);
|
|
171
190
|
return /* @__PURE__ */ jsx("div", {
|
|
172
|
-
style:
|
|
173
|
-
children: /* @__PURE__ */
|
|
191
|
+
style: dev.overlay,
|
|
192
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
193
|
+
style: dev.card,
|
|
194
|
+
children: [
|
|
195
|
+
/* @__PURE__ */ jsxs("div", {
|
|
196
|
+
style: dev.header,
|
|
197
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
198
|
+
style: dev.headerLeft,
|
|
199
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
200
|
+
style: dev.icon,
|
|
201
|
+
children: "!"
|
|
202
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
203
|
+
style: dev.title,
|
|
204
|
+
children: props.error.name || "Error"
|
|
205
|
+
})]
|
|
206
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
207
|
+
style: dev.headerRight,
|
|
208
|
+
children: [props.onRetry && /* @__PURE__ */ jsx("button", {
|
|
209
|
+
type: "button",
|
|
210
|
+
style: dev.retryBtn,
|
|
211
|
+
onClick: props.onRetry,
|
|
212
|
+
children: "Retry"
|
|
213
|
+
}), /* @__PURE__ */ jsx("button", {
|
|
214
|
+
type: "button",
|
|
215
|
+
style: dev.copyBtn,
|
|
216
|
+
onClick: handleCopy,
|
|
217
|
+
children: copied ? "Copied" : "Copy"
|
|
218
|
+
})]
|
|
219
|
+
})]
|
|
220
|
+
}),
|
|
221
|
+
/* @__PURE__ */ jsx(ErrorBlock, { error: props.error }),
|
|
222
|
+
/* @__PURE__ */ jsxs("div", {
|
|
223
|
+
style: dev.meta,
|
|
224
|
+
children: [
|
|
225
|
+
pathname && /* @__PURE__ */ jsx("span", {
|
|
226
|
+
style: dev.metaItem,
|
|
227
|
+
children: pathname
|
|
228
|
+
}),
|
|
229
|
+
/* @__PURE__ */ jsx("span", {
|
|
230
|
+
style: dev.metaItem,
|
|
231
|
+
children: (/* @__PURE__ */ new Date()).toLocaleTimeString()
|
|
232
|
+
}),
|
|
233
|
+
status && /* @__PURE__ */ jsx("span", {
|
|
234
|
+
style: dev.statusBadge,
|
|
235
|
+
children: status
|
|
236
|
+
})
|
|
237
|
+
]
|
|
238
|
+
})
|
|
239
|
+
]
|
|
240
|
+
})
|
|
174
241
|
});
|
|
175
242
|
};
|
|
176
|
-
|
|
243
|
+
const ErrorBlock = (props) => {
|
|
244
|
+
const { error, depth = 0 } = props;
|
|
177
245
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
178
246
|
depth > 0 && /* @__PURE__ */ jsx("div", {
|
|
179
|
-
style:
|
|
247
|
+
style: dev.causedBy,
|
|
180
248
|
children: "Caused by:"
|
|
181
249
|
}),
|
|
182
|
-
/* @__PURE__ */ jsxs("
|
|
183
|
-
style:
|
|
250
|
+
/* @__PURE__ */ jsxs("pre", {
|
|
251
|
+
style: dev.messageBlock,
|
|
184
252
|
children: [
|
|
185
253
|
error.name,
|
|
186
254
|
": ",
|
|
187
255
|
error.message
|
|
188
256
|
]
|
|
189
257
|
}),
|
|
190
|
-
error.stack && /* @__PURE__ */ jsx("
|
|
191
|
-
style:
|
|
258
|
+
error.stack && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
|
|
259
|
+
style: dev.stackLabel,
|
|
260
|
+
children: "STACK TRACE"
|
|
261
|
+
}), /* @__PURE__ */ jsx("pre", {
|
|
262
|
+
style: dev.stackBlock,
|
|
192
263
|
children: cleanStack(error.stack)
|
|
193
|
-
}),
|
|
264
|
+
})] }),
|
|
194
265
|
error.cause instanceof Error && /* @__PURE__ */ jsx(ErrorBlock, {
|
|
195
266
|
error: error.cause,
|
|
196
267
|
depth: depth + 1
|
|
197
268
|
})
|
|
198
269
|
] });
|
|
199
|
-
}
|
|
270
|
+
};
|
|
271
|
+
const ProdErrorPage = (props) => {
|
|
272
|
+
const requestId = props.error.requestId;
|
|
273
|
+
const handleReload = () => {
|
|
274
|
+
if (typeof window !== "undefined") window.location.reload();
|
|
275
|
+
};
|
|
276
|
+
return /* @__PURE__ */ jsx("div", {
|
|
277
|
+
style: prod.page,
|
|
278
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
279
|
+
style: prod.card,
|
|
280
|
+
children: [
|
|
281
|
+
/* @__PURE__ */ jsx("div", {
|
|
282
|
+
style: prod.heading,
|
|
283
|
+
children: "Something went wrong"
|
|
284
|
+
}),
|
|
285
|
+
/* @__PURE__ */ jsx("div", {
|
|
286
|
+
style: prod.subtitle,
|
|
287
|
+
children: "We're having trouble processing your request."
|
|
288
|
+
}),
|
|
289
|
+
requestId && /* @__PURE__ */ jsxs("div", {
|
|
290
|
+
style: prod.refText,
|
|
291
|
+
children: ["Reference: ", requestId]
|
|
292
|
+
}),
|
|
293
|
+
/* @__PURE__ */ jsxs("div", {
|
|
294
|
+
style: prod.actions,
|
|
295
|
+
children: [/* @__PURE__ */ jsx("button", {
|
|
296
|
+
type: "button",
|
|
297
|
+
style: prod.reloadBtn,
|
|
298
|
+
onClick: handleReload,
|
|
299
|
+
children: "Reload page"
|
|
300
|
+
}), /* @__PURE__ */ jsx("a", {
|
|
301
|
+
href: "/",
|
|
302
|
+
style: prod.homeLink,
|
|
303
|
+
children: "Go home"
|
|
304
|
+
})]
|
|
305
|
+
})
|
|
306
|
+
]
|
|
307
|
+
})
|
|
308
|
+
});
|
|
309
|
+
};
|
|
200
310
|
function cleanStack(stack) {
|
|
201
311
|
return stack.split("\n").slice(1).map((l) => l.trim()).join("\n");
|
|
202
312
|
}
|
|
203
|
-
|
|
204
|
-
|
|
313
|
+
function buildErrorText(error) {
|
|
314
|
+
const parts = [];
|
|
315
|
+
const append = (err, depth) => {
|
|
316
|
+
if (depth > 0) parts.push(`\nCaused by:`);
|
|
317
|
+
parts.push(`${err.name}: ${err.message}`);
|
|
318
|
+
if (err.stack) parts.push(cleanStack(err.stack));
|
|
319
|
+
if (err.cause instanceof Error) append(err.cause, depth + 1);
|
|
320
|
+
};
|
|
321
|
+
append(error, 0);
|
|
322
|
+
return parts.join("\n");
|
|
323
|
+
}
|
|
324
|
+
function getHttpStatus(error) {
|
|
325
|
+
if ("status" in error && typeof error.status === "number") return error.status;
|
|
326
|
+
}
|
|
327
|
+
const dev = {
|
|
328
|
+
overlay: {
|
|
329
|
+
position: "fixed",
|
|
330
|
+
inset: 0,
|
|
331
|
+
zIndex: 2147483647,
|
|
332
|
+
display: "flex",
|
|
333
|
+
alignItems: "center",
|
|
334
|
+
justifyContent: "center",
|
|
205
335
|
padding: "24px",
|
|
336
|
+
backgroundColor: "rgba(0, 0, 0, 0.75)",
|
|
337
|
+
backdropFilter: "blur(4px)",
|
|
206
338
|
fontFamily: mono,
|
|
207
339
|
fontSize: "13px",
|
|
208
|
-
color: "#
|
|
209
|
-
|
|
340
|
+
color: "#e5e7eb",
|
|
341
|
+
boxSizing: "border-box",
|
|
342
|
+
overflow: "auto"
|
|
210
343
|
},
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
344
|
+
card: {
|
|
345
|
+
width: "100%",
|
|
346
|
+
maxWidth: "900px",
|
|
347
|
+
maxHeight: "90vh",
|
|
348
|
+
overflow: "auto",
|
|
349
|
+
padding: "24px",
|
|
350
|
+
backgroundColor: "#111",
|
|
351
|
+
borderLeft: "4px solid #ef4444",
|
|
352
|
+
borderRadius: "8px",
|
|
353
|
+
boxShadow: "0 25px 50px rgba(0, 0, 0, 0.5)"
|
|
354
|
+
},
|
|
355
|
+
header: {
|
|
356
|
+
display: "flex",
|
|
357
|
+
alignItems: "center",
|
|
358
|
+
justifyContent: "space-between",
|
|
359
|
+
marginBottom: "20px",
|
|
360
|
+
flexWrap: "wrap",
|
|
361
|
+
gap: "12px"
|
|
217
362
|
},
|
|
218
|
-
|
|
363
|
+
headerLeft: {
|
|
364
|
+
display: "flex",
|
|
365
|
+
alignItems: "center",
|
|
366
|
+
gap: "12px",
|
|
367
|
+
minWidth: 0
|
|
368
|
+
},
|
|
369
|
+
headerRight: {
|
|
370
|
+
display: "flex",
|
|
371
|
+
gap: "8px",
|
|
372
|
+
flexShrink: 0
|
|
373
|
+
},
|
|
374
|
+
icon: {
|
|
375
|
+
width: "28px",
|
|
376
|
+
height: "28px",
|
|
377
|
+
borderRadius: "50%",
|
|
378
|
+
backgroundColor: "#ef4444",
|
|
379
|
+
color: "#fff",
|
|
380
|
+
display: "flex",
|
|
381
|
+
alignItems: "center",
|
|
382
|
+
justifyContent: "center",
|
|
383
|
+
fontWeight: 700,
|
|
384
|
+
fontSize: "16px",
|
|
385
|
+
flexShrink: 0
|
|
386
|
+
},
|
|
387
|
+
title: {
|
|
388
|
+
color: "#f87171",
|
|
389
|
+
fontSize: "18px",
|
|
390
|
+
fontWeight: 700
|
|
391
|
+
},
|
|
392
|
+
retryBtn: {
|
|
393
|
+
padding: "6px 16px",
|
|
394
|
+
backgroundColor: "#2563eb",
|
|
395
|
+
color: "#fff",
|
|
396
|
+
border: "none",
|
|
397
|
+
borderRadius: "6px",
|
|
398
|
+
cursor: "pointer",
|
|
399
|
+
fontFamily: mono,
|
|
400
|
+
fontSize: "12px",
|
|
401
|
+
fontWeight: 600
|
|
402
|
+
},
|
|
403
|
+
copyBtn: {
|
|
404
|
+
padding: "6px 16px",
|
|
405
|
+
backgroundColor: "transparent",
|
|
406
|
+
color: "#9ca3af",
|
|
407
|
+
border: "1px solid #374151",
|
|
408
|
+
borderRadius: "6px",
|
|
409
|
+
cursor: "pointer",
|
|
410
|
+
fontFamily: mono,
|
|
411
|
+
fontSize: "12px",
|
|
412
|
+
fontWeight: 600
|
|
413
|
+
},
|
|
414
|
+
messageBlock: {
|
|
415
|
+
margin: "0 0 12px",
|
|
416
|
+
padding: "12px",
|
|
417
|
+
backgroundColor: "#1f2937",
|
|
418
|
+
borderRadius: "6px",
|
|
419
|
+
color: "#f9fafb",
|
|
420
|
+
fontSize: "13px",
|
|
421
|
+
lineHeight: 1.6,
|
|
422
|
+
whiteSpace: "pre-wrap",
|
|
423
|
+
wordBreak: "break-word",
|
|
424
|
+
overflow: "auto"
|
|
425
|
+
},
|
|
426
|
+
stackLabel: {
|
|
427
|
+
fontSize: "10px",
|
|
428
|
+
color: "#6b7280",
|
|
429
|
+
textTransform: "uppercase",
|
|
430
|
+
letterSpacing: "1.5px",
|
|
431
|
+
marginBottom: "6px",
|
|
432
|
+
fontWeight: 600
|
|
433
|
+
},
|
|
434
|
+
stackBlock: {
|
|
219
435
|
margin: "0 0 20px",
|
|
220
436
|
padding: "12px",
|
|
221
|
-
backgroundColor: "#
|
|
222
|
-
borderRadius: "
|
|
223
|
-
|
|
437
|
+
backgroundColor: "#0f172a",
|
|
438
|
+
borderRadius: "6px",
|
|
439
|
+
color: "#94a3b8",
|
|
224
440
|
fontSize: "12px",
|
|
225
441
|
lineHeight: 1.6,
|
|
226
|
-
color: "#666",
|
|
227
|
-
overflow: "auto",
|
|
228
442
|
whiteSpace: "pre-wrap",
|
|
229
|
-
wordBreak: "break-all"
|
|
443
|
+
wordBreak: "break-all",
|
|
444
|
+
overflow: "auto"
|
|
230
445
|
},
|
|
231
|
-
|
|
232
|
-
fontSize: "
|
|
233
|
-
color: "#
|
|
446
|
+
causedBy: {
|
|
447
|
+
fontSize: "10px",
|
|
448
|
+
color: "#6b7280",
|
|
234
449
|
textTransform: "uppercase",
|
|
235
|
-
letterSpacing: "
|
|
236
|
-
marginBottom: "
|
|
237
|
-
paddingTop: "
|
|
238
|
-
borderTop: "1px solid #
|
|
450
|
+
letterSpacing: "1.5px",
|
|
451
|
+
marginBottom: "8px",
|
|
452
|
+
paddingTop: "12px",
|
|
453
|
+
borderTop: "1px solid #374151",
|
|
454
|
+
fontWeight: 600
|
|
455
|
+
},
|
|
456
|
+
meta: {
|
|
457
|
+
display: "flex",
|
|
458
|
+
gap: "16px",
|
|
459
|
+
alignItems: "center",
|
|
460
|
+
paddingTop: "12px",
|
|
461
|
+
borderTop: "1px solid #1f2937",
|
|
462
|
+
flexWrap: "wrap"
|
|
463
|
+
},
|
|
464
|
+
metaItem: {
|
|
465
|
+
fontSize: "11px",
|
|
466
|
+
color: "#6b7280"
|
|
467
|
+
},
|
|
468
|
+
statusBadge: {
|
|
469
|
+
fontSize: "11px",
|
|
470
|
+
color: "#fbbf24",
|
|
471
|
+
backgroundColor: "#422006",
|
|
472
|
+
padding: "2px 8px",
|
|
473
|
+
borderRadius: "4px",
|
|
474
|
+
fontWeight: 600
|
|
475
|
+
}
|
|
476
|
+
};
|
|
477
|
+
const prod = {
|
|
478
|
+
page: {
|
|
479
|
+
minHeight: "100vh",
|
|
480
|
+
display: "flex",
|
|
481
|
+
alignItems: "center",
|
|
482
|
+
justifyContent: "center",
|
|
483
|
+
backgroundColor: "#0f172a",
|
|
484
|
+
fontFamily: "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif",
|
|
485
|
+
padding: "24px"
|
|
486
|
+
},
|
|
487
|
+
card: {
|
|
488
|
+
textAlign: "center",
|
|
489
|
+
maxWidth: "440px"
|
|
490
|
+
},
|
|
491
|
+
heading: {
|
|
492
|
+
fontSize: "28px",
|
|
493
|
+
fontWeight: 700,
|
|
494
|
+
color: "#f1f5f9",
|
|
495
|
+
marginBottom: "12px"
|
|
496
|
+
},
|
|
497
|
+
subtitle: {
|
|
498
|
+
fontSize: "16px",
|
|
499
|
+
color: "#94a3b8",
|
|
500
|
+
marginBottom: "24px",
|
|
501
|
+
lineHeight: 1.5
|
|
502
|
+
},
|
|
503
|
+
refText: {
|
|
504
|
+
fontSize: "13px",
|
|
505
|
+
color: "#64748b",
|
|
506
|
+
marginBottom: "24px",
|
|
507
|
+
fontFamily: mono
|
|
508
|
+
},
|
|
509
|
+
actions: {
|
|
510
|
+
display: "flex",
|
|
511
|
+
gap: "12px",
|
|
512
|
+
justifyContent: "center",
|
|
513
|
+
alignItems: "center"
|
|
514
|
+
},
|
|
515
|
+
reloadBtn: {
|
|
516
|
+
padding: "10px 24px",
|
|
517
|
+
backgroundColor: "#2563eb",
|
|
518
|
+
color: "#fff",
|
|
519
|
+
border: "none",
|
|
520
|
+
borderRadius: "8px",
|
|
521
|
+
cursor: "pointer",
|
|
522
|
+
fontSize: "14px",
|
|
523
|
+
fontWeight: 600
|
|
524
|
+
},
|
|
525
|
+
homeLink: {
|
|
526
|
+
padding: "10px 24px",
|
|
527
|
+
color: "#94a3b8",
|
|
528
|
+
textDecoration: "none",
|
|
529
|
+
fontSize: "14px"
|
|
239
530
|
}
|
|
240
531
|
};
|
|
241
532
|
|
|
@@ -271,14 +562,6 @@ var Redirection = class extends AlephaError {
|
|
|
271
562
|
}
|
|
272
563
|
};
|
|
273
564
|
|
|
274
|
-
//#endregion
|
|
275
|
-
//#region ../../src/react/router/hooks/useRouterState.ts
|
|
276
|
-
const useRouterState = () => {
|
|
277
|
-
const [state] = useStore("alepha.react.router.state");
|
|
278
|
-
if (!state) throw new AlephaError("Missing react router state");
|
|
279
|
-
return state;
|
|
280
|
-
};
|
|
281
|
-
|
|
282
565
|
//#endregion
|
|
283
566
|
//#region ../../src/react/router/components/NestedView.tsx
|
|
284
567
|
/**
|
|
@@ -308,6 +591,7 @@ const NestedView = (props) => {
|
|
|
308
591
|
const onError = routerLayer?.onError;
|
|
309
592
|
const state = useRouterState();
|
|
310
593
|
const alepha = useAlepha();
|
|
594
|
+
const [boundaryKey, setBoundaryKey] = useState(0);
|
|
311
595
|
const [view, setView] = useState(state.layers[index]?.element);
|
|
312
596
|
const [animation, setAnimation] = useState("");
|
|
313
597
|
const animationExitDuration = useRef(0);
|
|
@@ -368,7 +652,7 @@ const NestedView = (props) => {
|
|
|
368
652
|
if (props.errorBoundary) return /* @__PURE__ */ jsx(ErrorBoundary, {
|
|
369
653
|
fallback: props.errorBoundary,
|
|
370
654
|
children: element
|
|
371
|
-
});
|
|
655
|
+
}, boundaryKey);
|
|
372
656
|
const fallback = (error) => {
|
|
373
657
|
const result = onError?.(error, state) ?? /* @__PURE__ */ jsx(ErrorViewer, {
|
|
374
658
|
error,
|
|
@@ -380,7 +664,7 @@ const NestedView = (props) => {
|
|
|
380
664
|
return /* @__PURE__ */ jsx(ErrorBoundary, {
|
|
381
665
|
fallback,
|
|
382
666
|
children: element
|
|
383
|
-
});
|
|
667
|
+
}, boundaryKey);
|
|
384
668
|
};
|
|
385
669
|
var NestedView_default = memo(NestedView);
|
|
386
670
|
function parseAnimation(animationLike, state, type = "enter") {
|
|
@@ -450,17 +734,49 @@ const NotFound = (props) => /* @__PURE__ */ jsxs("div", {
|
|
|
450
734
|
const reactPageOptions = $atom({
|
|
451
735
|
name: "alepha.react.page.options",
|
|
452
736
|
description: "Configuration options for the React page provider.",
|
|
453
|
-
schema: t.object({
|
|
454
|
-
|
|
737
|
+
schema: t.object({
|
|
738
|
+
strictMode: t.boolean({ default: true }),
|
|
739
|
+
staticFilePattern: t.string()
|
|
740
|
+
}),
|
|
741
|
+
default: {
|
|
742
|
+
strictMode: true,
|
|
743
|
+
staticFilePattern: "\\.[a-zA-Z0-9]{1,10}$"
|
|
744
|
+
}
|
|
455
745
|
});
|
|
456
746
|
/**
|
|
457
747
|
* Handle page routes for React applications. (Browser and Server)
|
|
458
748
|
*/
|
|
459
749
|
var ReactPageProvider = class {
|
|
750
|
+
dateTimeProvider = $inject(DateTimeProvider);
|
|
460
751
|
log = $logger();
|
|
461
752
|
options = $use(reactPageOptions);
|
|
462
753
|
alepha = $inject(Alepha);
|
|
463
754
|
pages = [];
|
|
755
|
+
nextIdCursor = 0;
|
|
756
|
+
configure = $hook({
|
|
757
|
+
on: "configure",
|
|
758
|
+
handler: () => {
|
|
759
|
+
let hasNotFoundHandler = false;
|
|
760
|
+
const pages = this.alepha.primitives($page);
|
|
761
|
+
const hasParent = (it) => {
|
|
762
|
+
if (it.options.parent) return true;
|
|
763
|
+
for (const page of pages) if ((page.options.children ? Array.isArray(page.options.children) ? page.options.children : page.options.children() : []).includes(it)) return true;
|
|
764
|
+
};
|
|
765
|
+
for (const page of pages) {
|
|
766
|
+
if (page.options.path === "/*") hasNotFoundHandler = true;
|
|
767
|
+
if (hasParent(page)) continue;
|
|
768
|
+
this.add(this.map(pages, page));
|
|
769
|
+
}
|
|
770
|
+
if (!hasNotFoundHandler && pages.length > 0) this.add({
|
|
771
|
+
path: "/*",
|
|
772
|
+
name: "notFound",
|
|
773
|
+
component: NotFound,
|
|
774
|
+
onServerResponse: ({ reply }) => {
|
|
775
|
+
reply.status = 404;
|
|
776
|
+
}
|
|
777
|
+
});
|
|
778
|
+
}
|
|
779
|
+
});
|
|
464
780
|
getPages() {
|
|
465
781
|
return this.pages;
|
|
466
782
|
}
|
|
@@ -548,13 +864,13 @@ var ReactPageProvider = class {
|
|
|
548
864
|
this.convertStringObjectToObject(route.schema?.query, state.query);
|
|
549
865
|
config.query = route.schema?.query ? this.alepha.codec.decode(route.schema.query, state.query) : {};
|
|
550
866
|
} catch (e) {
|
|
551
|
-
it.error = e;
|
|
867
|
+
it.error = e instanceof Error ? e : new Error(String(e));
|
|
552
868
|
break;
|
|
553
869
|
}
|
|
554
870
|
try {
|
|
555
871
|
config.params = route.schema?.params ? this.alepha.codec.decode(route.schema.params, state.params) : {};
|
|
556
872
|
} catch (e) {
|
|
557
|
-
it.error = e;
|
|
873
|
+
it.error = e instanceof Error ? e : new Error(String(e));
|
|
558
874
|
break;
|
|
559
875
|
}
|
|
560
876
|
it.config = { ...config };
|
|
@@ -578,6 +894,7 @@ var ReactPageProvider = class {
|
|
|
578
894
|
}
|
|
579
895
|
forceRefresh = true;
|
|
580
896
|
}
|
|
897
|
+
if (route.redirect) return { redirect: route.redirect };
|
|
581
898
|
if (!route.loader) continue;
|
|
582
899
|
try {
|
|
583
900
|
const args = Object.create(state);
|
|
@@ -591,7 +908,7 @@ var ReactPageProvider = class {
|
|
|
591
908
|
} catch (e) {
|
|
592
909
|
if (e instanceof Redirection) return { redirect: e.redirect };
|
|
593
910
|
this.log.error("Page loader has failed", e);
|
|
594
|
-
it.error = e;
|
|
911
|
+
it.error = e instanceof Error ? e : new Error(String(e));
|
|
595
912
|
break;
|
|
596
913
|
}
|
|
597
914
|
}
|
|
@@ -618,7 +935,7 @@ var ReactPageProvider = class {
|
|
|
618
935
|
...it.route.props ? it.route.props() : {},
|
|
619
936
|
...props,
|
|
620
937
|
...context
|
|
621
|
-
});
|
|
938
|
+
}, state.url);
|
|
622
939
|
state.layers.push({
|
|
623
940
|
name: it.route.name,
|
|
624
941
|
props,
|
|
@@ -631,7 +948,7 @@ var ReactPageProvider = class {
|
|
|
631
948
|
cache: it.cache
|
|
632
949
|
});
|
|
633
950
|
} catch (e) {
|
|
634
|
-
it.error = e;
|
|
951
|
+
it.error = e instanceof Error ? e : new Error(String(e));
|
|
635
952
|
}
|
|
636
953
|
if (it.error) try {
|
|
637
954
|
let element = await state.onError(it.error, state);
|
|
@@ -647,7 +964,8 @@ var ReactPageProvider = class {
|
|
|
647
964
|
element: this.renderView(i + 1, path, element, it.route),
|
|
648
965
|
index: i + 1,
|
|
649
966
|
path,
|
|
650
|
-
route: it.route
|
|
967
|
+
route: it.route,
|
|
968
|
+
cache: it.cache
|
|
651
969
|
});
|
|
652
970
|
break;
|
|
653
971
|
} catch (e) {
|
|
@@ -665,11 +983,45 @@ var ReactPageProvider = class {
|
|
|
665
983
|
parent = parent.parent;
|
|
666
984
|
}
|
|
667
985
|
}
|
|
668
|
-
async createElement(page, props) {
|
|
986
|
+
async createElement(page, props, targetUrl) {
|
|
669
987
|
if (page.lazy && page.component) this.log.warn(`Page ${page.name} has both lazy and component options, lazy will be used`);
|
|
670
|
-
if (page.lazy)
|
|
988
|
+
if (page.lazy) try {
|
|
989
|
+
return createElement((await page.lazy()).default, props);
|
|
990
|
+
} catch (error) {
|
|
991
|
+
if (this.alepha.isBrowser() && this.isChunkLoadError(error)) {
|
|
992
|
+
if (this.reloadAfterChunkError(targetUrl)) return;
|
|
993
|
+
}
|
|
994
|
+
throw error;
|
|
995
|
+
}
|
|
671
996
|
if (page.component) return createElement(page.component, props);
|
|
672
997
|
}
|
|
998
|
+
/**
|
|
999
|
+
* Detect chunk load errors caused by stale dynamic imports after a deployment.
|
|
1000
|
+
* When new assets are deployed with different hashes, old chunk URLs return 404.
|
|
1001
|
+
*/
|
|
1002
|
+
isChunkLoadError(error) {
|
|
1003
|
+
if (!(error instanceof Error)) return false;
|
|
1004
|
+
const msg = error.message;
|
|
1005
|
+
return /Failed to fetch dynamically imported module/.test(msg) || /error loading dynamically imported module/i.test(msg) || /Unable to preload CSS/.test(msg) || /Importing a module script failed/.test(msg);
|
|
1006
|
+
}
|
|
1007
|
+
/**
|
|
1008
|
+
* Navigate to the target URL to fetch updated assets after a chunk load failure.
|
|
1009
|
+
* Uses sessionStorage to prevent infinite reload loops.
|
|
1010
|
+
* Returns true if navigation was initiated.
|
|
1011
|
+
*/
|
|
1012
|
+
reloadAfterChunkError(url) {
|
|
1013
|
+
const key = "alepha:chunk-reload";
|
|
1014
|
+
const lastReload = sessionStorage.getItem(key);
|
|
1015
|
+
const now = this.dateTimeProvider.nowMillis();
|
|
1016
|
+
if (lastReload && now - Number(lastReload) < 1e4) {
|
|
1017
|
+
this.log.error("Chunk load failed after recent reload, not retrying to avoid loop");
|
|
1018
|
+
return false;
|
|
1019
|
+
}
|
|
1020
|
+
this.log.warn("Chunk load failed after deployment, reloading page");
|
|
1021
|
+
sessionStorage.setItem(key, String(now));
|
|
1022
|
+
window.location.assign(url ? url.pathname + url.search : window.location.href);
|
|
1023
|
+
return true;
|
|
1024
|
+
}
|
|
673
1025
|
renderError(error) {
|
|
674
1026
|
return createElement(ErrorViewer, {
|
|
675
1027
|
error,
|
|
@@ -704,30 +1056,6 @@ var ReactPageProvider = class {
|
|
|
704
1056
|
onError: this.getErrorHandler(page) ?? ((error) => this.renderError(error))
|
|
705
1057
|
} }, element);
|
|
706
1058
|
}
|
|
707
|
-
configure = $hook({
|
|
708
|
-
on: "configure",
|
|
709
|
-
handler: () => {
|
|
710
|
-
let hasNotFoundHandler = false;
|
|
711
|
-
const pages = this.alepha.primitives($page);
|
|
712
|
-
const hasParent = (it) => {
|
|
713
|
-
if (it.options.parent) return true;
|
|
714
|
-
for (const page of pages) if ((page.options.children ? Array.isArray(page.options.children) ? page.options.children : page.options.children() : []).includes(it)) return true;
|
|
715
|
-
};
|
|
716
|
-
for (const page of pages) {
|
|
717
|
-
if (page.options.path === "/*") hasNotFoundHandler = true;
|
|
718
|
-
if (hasParent(page)) continue;
|
|
719
|
-
this.add(this.map(pages, page));
|
|
720
|
-
}
|
|
721
|
-
if (!hasNotFoundHandler && pages.length > 0) this.add({
|
|
722
|
-
path: "/*",
|
|
723
|
-
name: "notFound",
|
|
724
|
-
component: NotFound,
|
|
725
|
-
onServerResponse: ({ reply }) => {
|
|
726
|
-
reply.status = 404;
|
|
727
|
-
}
|
|
728
|
-
});
|
|
729
|
-
}
|
|
730
|
-
});
|
|
731
1059
|
map(pages, target) {
|
|
732
1060
|
const children = target.options.children ? Array.isArray(target.options.children) ? target.options.children : target.options.children() : [];
|
|
733
1061
|
const getChildrenFromParent = (it) => {
|
|
@@ -765,10 +1093,9 @@ var ReactPageProvider = class {
|
|
|
765
1093
|
if (path.endsWith("/") && path !== "/") path = path.slice(0, -1);
|
|
766
1094
|
return path;
|
|
767
1095
|
}
|
|
768
|
-
_next = 0;
|
|
769
1096
|
nextId() {
|
|
770
|
-
this.
|
|
771
|
-
return `P${this.
|
|
1097
|
+
this.nextIdCursor += 1;
|
|
1098
|
+
return `P${this.nextIdCursor}`;
|
|
772
1099
|
}
|
|
773
1100
|
};
|
|
774
1101
|
const isPageRoute = (it) => {
|
|
@@ -1255,7 +1582,7 @@ var ReactServerTemplateProvider = class {
|
|
|
1255
1582
|
const { encoder, SLOTS: slots } = this;
|
|
1256
1583
|
let headClosed = false;
|
|
1257
1584
|
let bodyStarted = false;
|
|
1258
|
-
let routerState;
|
|
1585
|
+
let routerState = options.state;
|
|
1259
1586
|
return new ReadableStream({ start: async (controller) => {
|
|
1260
1587
|
try {
|
|
1261
1588
|
controller.enqueue(slots.DOCTYPE);
|
|
@@ -1338,6 +1665,11 @@ var ReactServerTemplateProvider = class {
|
|
|
1338
1665
|
}
|
|
1339
1666
|
controller.enqueue(encoder.encode(this.renderErrorToString(error instanceof Error ? error : new Error(String(error)), routerState)));
|
|
1340
1667
|
controller.enqueue(slots.ROOT_CLOSE);
|
|
1668
|
+
if (routerState) {
|
|
1669
|
+
controller.enqueue(slots.HYDRATION_PREFIX);
|
|
1670
|
+
controller.enqueue(encoder.encode(this.safeJsonSerialize(this.buildHydrationData(routerState))));
|
|
1671
|
+
controller.enqueue(slots.HYDRATION_SUFFIX);
|
|
1672
|
+
}
|
|
1341
1673
|
controller.enqueue(slots.BODY_HTML_CLOSE);
|
|
1342
1674
|
}
|
|
1343
1675
|
/**
|
|
@@ -1405,6 +1737,7 @@ var ReactServerProvider = class {
|
|
|
1405
1737
|
*/
|
|
1406
1738
|
hasServerLinksProvider = false;
|
|
1407
1739
|
options = $use(reactServerOptions);
|
|
1740
|
+
pageOptions = $use(reactPageOptions);
|
|
1408
1741
|
/**
|
|
1409
1742
|
* Configure the React server provider.
|
|
1410
1743
|
*/
|
|
@@ -1436,7 +1769,7 @@ var ReactServerProvider = class {
|
|
|
1436
1769
|
registerPages() {
|
|
1437
1770
|
this.setupEarlyHeadContent();
|
|
1438
1771
|
this.hasServerLinksProvider = this.alepha.has(ServerLinksProvider);
|
|
1439
|
-
for (const page of this.pageApi.getPages()) if (page.component || page.lazy) {
|
|
1772
|
+
for (const page of this.pageApi.getPages()) if (page.component || page.lazy || page.redirect) {
|
|
1440
1773
|
this.log.debug(`+ ${page.match} -> ${page.name}`);
|
|
1441
1774
|
const cacheMiddleware = (page.use ?? []).filter((m) => m[OPTIONS]?.name === "$cache");
|
|
1442
1775
|
const serverMiddleware = (page.use ?? []).filter((m) => m[OPTIONS]?.name !== "$cache");
|
|
@@ -1509,6 +1842,15 @@ var ReactServerProvider = class {
|
|
|
1509
1842
|
});
|
|
1510
1843
|
}
|
|
1511
1844
|
/**
|
|
1845
|
+
* Resolve the static file pattern from page options.
|
|
1846
|
+
* Returns a compiled RegExp, or `false` if disabled (empty string).
|
|
1847
|
+
*/
|
|
1848
|
+
resolveStaticFilePattern() {
|
|
1849
|
+
const pattern = this.pageOptions.staticFilePattern;
|
|
1850
|
+
if (!pattern) return false;
|
|
1851
|
+
return new RegExp(pattern);
|
|
1852
|
+
}
|
|
1853
|
+
/**
|
|
1512
1854
|
* Create the request handler for a page route.
|
|
1513
1855
|
*
|
|
1514
1856
|
* When cacheMiddleware is provided, uses a non-streaming path that renders
|
|
@@ -1516,8 +1858,14 @@ var ReactServerProvider = class {
|
|
|
1516
1858
|
*/
|
|
1517
1859
|
createHandler(route, cacheMiddleware = []) {
|
|
1518
1860
|
const hasCache = cacheMiddleware.length > 0;
|
|
1861
|
+
const staticFilePattern = route.match === "/*" ? this.resolveStaticFilePattern() : false;
|
|
1519
1862
|
return async (serverRequest) => {
|
|
1520
1863
|
const { url, reply, query, params } = serverRequest;
|
|
1864
|
+
if (staticFilePattern && staticFilePattern.test(url.pathname)) {
|
|
1865
|
+
reply.status = 404;
|
|
1866
|
+
reply.headers["content-type"] = "text/plain";
|
|
1867
|
+
return "Not Found";
|
|
1868
|
+
}
|
|
1521
1869
|
this.log.trace("Rendering page", { name: route.name });
|
|
1522
1870
|
const state = {
|
|
1523
1871
|
url,
|
|
@@ -1578,13 +1926,16 @@ var ReactServerProvider = class {
|
|
|
1578
1926
|
};
|
|
1579
1927
|
}, {
|
|
1580
1928
|
hydration: true,
|
|
1929
|
+
state,
|
|
1581
1930
|
onError: (error) => {
|
|
1582
1931
|
if (error instanceof Redirection) this.log.debug("Streaming resulted in redirection", { redirect: error.redirect });
|
|
1583
1932
|
}
|
|
1584
1933
|
});
|
|
1585
1934
|
this.log.trace("Page streaming started (early head optimization)");
|
|
1586
1935
|
route.onServerResponse?.(serverRequest);
|
|
1587
|
-
reply.body = htmlStream
|
|
1936
|
+
reply.body = htmlStream.pipeThrough(new TransformStream({ flush: () => {
|
|
1937
|
+
this.log.info("Page streaming completed", { name: route.name });
|
|
1938
|
+
} }));
|
|
1588
1939
|
};
|
|
1589
1940
|
}
|
|
1590
1941
|
/**
|
|
@@ -1689,6 +2040,11 @@ const envSchema = t.object({ REACT_SSR_ENABLED: t.optional(t.boolean({ descripti
|
|
|
1689
2040
|
/**
|
|
1690
2041
|
* React server provider configuration atom
|
|
1691
2042
|
*/
|
|
2043
|
+
/**
|
|
2044
|
+
* Default pattern matching file-like URLs (e.g. /hello.txt, /wp-login.php).
|
|
2045
|
+
* Matches paths whose last segment contains a dot followed by 1-10 alphanumeric characters.
|
|
2046
|
+
*/
|
|
2047
|
+
const DEFAULT_STATIC_FILE_PATTERN = "\\.[a-zA-Z0-9]{1,10}$";
|
|
1692
2048
|
const reactServerOptions = $atom({
|
|
1693
2049
|
name: "alepha.react.server.options",
|
|
1694
2050
|
schema: t.object({
|
|
@@ -1751,7 +2107,7 @@ var ReactBrowserRouterProvider = class extends RouterProvider {
|
|
|
1751
2107
|
configure = $hook({
|
|
1752
2108
|
on: "configure",
|
|
1753
2109
|
handler: async () => {
|
|
1754
|
-
for (const page of this.pageApi.getPages()) if (page.component || page.lazy) this.push({
|
|
2110
|
+
for (const page of this.pageApi.getPages()) if (page.component || page.lazy || page.redirect) this.push({
|
|
1755
2111
|
path: page.match,
|
|
1756
2112
|
page
|
|
1757
2113
|
});
|
|
@@ -1796,9 +2152,14 @@ var ReactBrowserRouterProvider = class extends RouterProvider {
|
|
|
1796
2152
|
await this.alepha.events.emit("react:transition:success", { state });
|
|
1797
2153
|
} catch (e) {
|
|
1798
2154
|
this.log.error("Transition has failed", e);
|
|
2155
|
+
let element;
|
|
2156
|
+
try {
|
|
2157
|
+
const result = state.onError(e, state);
|
|
2158
|
+
if (result != null && !(result instanceof Redirection)) element = result;
|
|
2159
|
+
} catch {}
|
|
1799
2160
|
state.layers = [{
|
|
1800
2161
|
name: "error",
|
|
1801
|
-
element: this.pageApi.renderError(e),
|
|
2162
|
+
element: element ?? this.pageApi.renderError(e),
|
|
1802
2163
|
index: 0,
|
|
1803
2164
|
path: "/"
|
|
1804
2165
|
}];
|
|
@@ -2276,5 +2637,5 @@ const AlephaReactRouter = $module({
|
|
|
2276
2637
|
});
|
|
2277
2638
|
|
|
2278
2639
|
//#endregion
|
|
2279
|
-
export { $page, AlephaReactRouter, ErrorViewer, Link, NestedView_default as NestedView, NotFound, PAGE_PRELOAD_KEY, PagePrimitive, ReactBrowserProvider, ReactPageProvider, ReactPageService, ReactPreloadProvider, ReactRouter, ReactServerProvider, ReactServerTemplateProvider, Redirection, RouterLayerContext, SSRManifestProvider, isPageRoute, reactBrowserOptions, reactPageOptions, reactServerOptions, useActive, useQueryParams, useRouter, useRouterState };
|
|
2640
|
+
export { $page, AlephaReactRouter, DEFAULT_STATIC_FILE_PATTERN, ErrorViewer, Link, NestedView_default as NestedView, NotFound, PAGE_PRELOAD_KEY, PagePrimitive, ReactBrowserProvider, ReactPageProvider, ReactPageService, ReactPreloadProvider, ReactRouter, ReactServerProvider, ReactServerTemplateProvider, Redirection, RouterLayerContext, SSRManifestProvider, isPageRoute, reactBrowserOptions, reactPageOptions, reactServerOptions, useActive, useQueryParams, useRouter, useRouterState };
|
|
2280
2641
|
//# sourceMappingURL=index.js.map
|