everything-dev 1.53.1 → 2.0.0-rc.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/README.md +2 -11
- package/dist/_virtual/_rolldown/runtime.cjs +17 -2
- package/dist/_virtual/_rolldown/runtime.mjs +36 -0
- package/dist/api/auth-middleware.cjs +161 -0
- package/dist/api/auth-middleware.cjs.map +1 -0
- package/dist/api/auth-middleware.d.cts +69 -0
- package/dist/api/auth-middleware.d.mts +69 -0
- package/dist/api/auth-middleware.mjs +160 -0
- package/dist/api/auth-middleware.mjs.map +1 -0
- package/dist/api-contract.cjs +250 -62
- package/dist/api-contract.cjs.map +1 -1
- package/dist/api-contract.mjs +246 -65
- package/dist/api-contract.mjs.map +1 -1
- package/dist/app.cjs +99 -26
- package/dist/app.cjs.map +1 -1
- package/dist/app.d.cts +3 -0
- package/dist/app.d.mts +3 -0
- package/dist/app.mjs +100 -27
- package/dist/app.mjs.map +1 -1
- package/dist/auth-login.cjs +163 -0
- package/dist/auth-login.cjs.map +1 -0
- package/dist/auth-login.mjs +162 -0
- package/dist/auth-login.mjs.map +1 -0
- package/dist/auth-session.cjs +64 -0
- package/dist/auth-session.cjs.map +1 -0
- package/dist/auth-session.mjs +58 -0
- package/dist/auth-session.mjs.map +1 -0
- package/dist/auth-types-gen.cjs +0 -1
- package/dist/auth-types-gen.cjs.map +1 -1
- package/dist/build.cjs +37 -173
- package/dist/build.cjs.map +1 -1
- package/dist/build.mjs +37 -171
- package/dist/build.mjs.map +1 -1
- package/dist/bundle-cache.cjs +74 -0
- package/dist/bundle-cache.cjs.map +1 -0
- package/dist/bundle-cache.d.cts +27 -0
- package/dist/bundle-cache.d.mts +27 -0
- package/dist/bundle-cache.mjs +68 -0
- package/dist/bundle-cache.mjs.map +1 -0
- package/dist/bundle-fs-resolve.cjs +209 -0
- package/dist/bundle-fs-resolve.cjs.map +1 -0
- package/dist/bundle-fs-resolve.d.cts +76 -0
- package/dist/bundle-fs-resolve.d.mts +76 -0
- package/dist/bundle-fs-resolve.mjs +202 -0
- package/dist/bundle-fs-resolve.mjs.map +1 -0
- package/dist/cdn-deploy.cjs +126 -0
- package/dist/cdn-deploy.cjs.map +1 -0
- package/dist/cdn-deploy.mjs +124 -0
- package/dist/cdn-deploy.mjs.map +1 -0
- package/dist/cli/db-doctor.cjs +19 -19
- package/dist/cli/db-doctor.cjs.map +1 -1
- package/dist/cli/db-doctor.mjs +18 -18
- package/dist/cli/db-doctor.mjs.map +1 -1
- package/dist/cli/db-repair.cjs +9 -32
- package/dist/cli/db-repair.cjs.map +1 -1
- package/dist/cli/db-repair.mjs +9 -32
- package/dist/cli/db-repair.mjs.map +1 -1
- package/dist/cli/framework-version.cjs +7 -3
- package/dist/cli/framework-version.cjs.map +1 -1
- package/dist/cli/framework-version.mjs +7 -3
- package/dist/cli/framework-version.mjs.map +1 -1
- package/dist/cli/infra.cjs +159 -251
- package/dist/cli/infra.cjs.map +1 -1
- package/dist/cli/infra.mjs +154 -242
- package/dist/cli/infra.mjs.map +1 -1
- package/dist/cli/init.cjs +624 -196
- package/dist/cli/init.cjs.map +1 -1
- package/dist/cli/init.d.cts +61 -8
- package/dist/cli/init.d.mts +61 -8
- package/dist/cli/init.mjs +613 -194
- package/dist/cli/init.mjs.map +1 -1
- package/dist/cli/parse.cjs +8 -7
- package/dist/cli/parse.cjs.map +1 -1
- package/dist/cli/parse.mjs +9 -7
- package/dist/cli/parse.mjs.map +1 -1
- package/dist/cli/prompts.cjs +14 -1
- package/dist/cli/prompts.cjs.map +1 -1
- package/dist/cli/prompts.mjs +14 -1
- package/dist/cli/prompts.mjs.map +1 -1
- package/dist/cli/prune.cjs +220 -0
- package/dist/cli/prune.cjs.map +1 -0
- package/dist/cli/prune.mjs +220 -0
- package/dist/cli/prune.mjs.map +1 -0
- package/dist/cli/snapshot.cjs +2 -1
- package/dist/cli/snapshot.cjs.map +1 -1
- package/dist/cli/snapshot.mjs +2 -1
- package/dist/cli/snapshot.mjs.map +1 -1
- package/dist/cli/status.cjs +5 -4
- package/dist/cli/status.cjs.map +1 -1
- package/dist/cli/status.mjs +6 -5
- package/dist/cli/status.mjs.map +1 -1
- package/dist/cli/sync.cjs +156 -58
- package/dist/cli/sync.cjs.map +1 -1
- package/dist/cli/sync.mjs +158 -63
- package/dist/cli/sync.mjs.map +1 -1
- package/dist/cli/timing.cjs +0 -1
- package/dist/cli/timing.cjs.map +1 -1
- package/dist/cli/upgrade.cjs +95 -69
- package/dist/cli/upgrade.cjs.map +1 -1
- package/dist/cli/upgrade.mjs +97 -72
- package/dist/cli/upgrade.mjs.map +1 -1
- package/dist/cli/utils/helpers.cjs.map +1 -1
- package/dist/cli.cjs +320 -72
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.mjs +316 -68
- package/dist/cli.mjs.map +1 -1
- package/dist/code-artifacts.cjs +76 -8
- package/dist/code-artifacts.cjs.map +1 -1
- package/dist/code-artifacts.mjs +76 -10
- package/dist/code-artifacts.mjs.map +1 -1
- package/dist/commands/build.cjs +65 -0
- package/dist/commands/build.cjs.map +1 -0
- package/dist/commands/build.mjs +65 -0
- package/dist/commands/build.mjs.map +1 -0
- package/dist/commands/config.cjs +77 -0
- package/dist/commands/config.cjs.map +1 -0
- package/dist/commands/config.d.cts +8 -0
- package/dist/commands/config.d.mts +8 -0
- package/dist/commands/config.mjs +74 -0
- package/dist/commands/config.mjs.map +1 -0
- package/dist/commands/db.cjs +107 -0
- package/dist/commands/db.cjs.map +1 -0
- package/dist/commands/db.mjs +107 -0
- package/dist/commands/db.mjs.map +1 -0
- package/dist/commands/deploy.cjs +336 -0
- package/dist/commands/deploy.cjs.map +1 -0
- package/dist/commands/deploy.mjs +334 -0
- package/dist/commands/deploy.mjs.map +1 -0
- package/dist/commands/dev.cjs +75 -0
- package/dist/commands/dev.cjs.map +1 -0
- package/dist/commands/dev.mjs +73 -0
- package/dist/commands/dev.mjs.map +1 -0
- package/dist/commands/init.cjs +234 -0
- package/dist/commands/init.cjs.map +1 -0
- package/dist/commands/init.mjs +231 -0
- package/dist/commands/init.mjs.map +1 -0
- package/dist/commands/keys.cjs +255 -0
- package/dist/commands/keys.cjs.map +1 -0
- package/dist/commands/keys.mjs +253 -0
- package/dist/commands/keys.mjs.map +1 -0
- package/dist/commands/ops.cjs +199 -0
- package/dist/commands/ops.cjs.map +1 -0
- package/dist/commands/ops.mjs +197 -0
- package/dist/commands/ops.mjs.map +1 -0
- package/dist/commands/plugins.cjs +211 -0
- package/dist/commands/plugins.cjs.map +1 -0
- package/dist/commands/plugins.mjs +211 -0
- package/dist/commands/plugins.mjs.map +1 -0
- package/dist/commands/shared.cjs +8 -0
- package/dist/commands/shared.cjs.map +1 -0
- package/dist/commands/shared.d.cts +6 -0
- package/dist/commands/shared.d.mts +6 -0
- package/dist/commands/shared.mjs +8 -0
- package/dist/commands/shared.mjs.map +1 -0
- package/dist/commands/upgrade.cjs +325 -0
- package/dist/commands/upgrade.cjs.map +1 -0
- package/dist/commands/upgrade.mjs +323 -0
- package/dist/commands/upgrade.mjs.map +1 -0
- package/dist/components/dev-render.cjs +340 -0
- package/dist/components/dev-render.cjs.map +1 -0
- package/dist/components/dev-render.mjs +332 -0
- package/dist/components/dev-render.mjs.map +1 -0
- package/dist/config.cjs +460 -221
- package/dist/config.cjs.map +1 -1
- package/dist/config.d.cts +491 -48
- package/dist/config.d.mts +491 -48
- package/dist/config.mjs +439 -212
- package/dist/config.mjs.map +1 -1
- package/dist/contract.cjs +327 -50
- package/dist/contract.cjs.map +1 -1
- package/dist/contract.d.cts +1951 -1062
- package/dist/contract.d.mts +1951 -1062
- package/dist/contract.meta.cjs +107 -12
- package/dist/contract.meta.cjs.map +1 -1
- package/dist/contract.meta.d.cts +166 -8
- package/dist/contract.meta.d.mts +166 -8
- package/dist/contract.meta.mjs +107 -11
- package/dist/contract.meta.mjs.map +1 -1
- package/dist/contract.mjs +580 -327
- package/dist/contract.mjs.map +1 -1
- package/dist/dag.cjs +5 -3
- package/dist/dag.cjs.map +1 -1
- package/dist/dag.mjs +6 -3
- package/dist/dag.mjs.map +1 -1
- package/dist/db/binding.cjs +80 -0
- package/dist/db/binding.cjs.map +1 -0
- package/dist/db/binding.d.cts +39 -0
- package/dist/db/binding.d.mts +39 -0
- package/dist/db/binding.mjs +78 -0
- package/dist/db/binding.mjs.map +1 -0
- package/dist/db/bindings.cjs +78 -0
- package/dist/db/bindings.cjs.map +1 -0
- package/dist/db/bindings.d.cts +34 -0
- package/dist/db/bindings.d.mts +34 -0
- package/dist/db/bindings.mjs +76 -0
- package/dist/db/bindings.mjs.map +1 -0
- package/dist/db/core.cjs +204 -0
- package/dist/db/core.cjs.map +1 -0
- package/dist/db/core.d.cts +69 -0
- package/dist/db/core.d.mts +69 -0
- package/dist/db/core.mjs +192 -0
- package/dist/db/core.mjs.map +1 -0
- package/dist/db/driver.cjs +167 -0
- package/dist/db/driver.cjs.map +1 -0
- package/dist/db/driver.d.cts +50 -0
- package/dist/db/driver.d.mts +50 -0
- package/dist/db/driver.mjs +165 -0
- package/dist/db/driver.mjs.map +1 -0
- package/dist/db/drizzle-kit.cjs +177 -0
- package/dist/db/drizzle-kit.cjs.map +1 -0
- package/dist/db/drizzle-kit.d.cts +25 -0
- package/dist/db/drizzle-kit.d.mts +25 -0
- package/dist/db/drizzle-kit.mjs +175 -0
- package/dist/db/drizzle-kit.mjs.map +1 -0
- package/dist/db/errors.cjs +27 -0
- package/dist/db/errors.cjs.map +1 -0
- package/dist/db/errors.d.cts +16 -0
- package/dist/db/errors.d.mts +16 -0
- package/dist/db/errors.mjs +26 -0
- package/dist/db/errors.mjs.map +1 -0
- package/dist/db/identity.cjs +55 -0
- package/dist/db/identity.cjs.map +1 -0
- package/dist/db/identity.d.cts +40 -0
- package/dist/db/identity.d.mts +40 -0
- package/dist/db/identity.mjs +53 -0
- package/dist/db/identity.mjs.map +1 -0
- package/dist/db/index.cjs +43 -0
- package/dist/db/index.d.cts +9 -0
- package/dist/db/index.d.mts +9 -0
- package/dist/db/index.mjs +10 -0
- package/dist/db/run-migrations.cjs +343 -0
- package/dist/db/run-migrations.cjs.map +1 -0
- package/dist/db/run-migrations.d.cts +87 -0
- package/dist/db/run-migrations.d.mts +87 -0
- package/dist/db/run-migrations.mjs +341 -0
- package/dist/db/run-migrations.mjs.map +1 -0
- package/dist/delegate-signer.cjs +85 -0
- package/dist/delegate-signer.cjs.map +1 -0
- package/dist/delegate-signer.mjs +84 -0
- package/dist/delegate-signer.mjs.map +1 -0
- package/dist/deploy-diff.cjs +119 -0
- package/dist/deploy-diff.cjs.map +1 -0
- package/dist/deploy-diff.mjs +109 -0
- package/dist/deploy-diff.mjs.map +1 -0
- package/dist/descriptor/constructors.cjs +49 -0
- package/dist/descriptor/constructors.cjs.map +1 -0
- package/dist/descriptor/constructors.d.cts +27 -0
- package/dist/descriptor/constructors.d.mts +27 -0
- package/dist/descriptor/constructors.mjs +45 -0
- package/dist/descriptor/constructors.mjs.map +1 -0
- package/dist/descriptor/index.cjs +24 -0
- package/dist/descriptor/index.d.cts +5 -0
- package/dist/descriptor/index.d.mts +5 -0
- package/dist/descriptor/index.mjs +6 -0
- package/dist/descriptor/resolve.cjs +258 -0
- package/dist/descriptor/resolve.cjs.map +1 -0
- package/dist/descriptor/resolve.d.cts +50 -0
- package/dist/descriptor/resolve.d.mts +50 -0
- package/dist/descriptor/resolve.mjs +252 -0
- package/dist/descriptor/resolve.mjs.map +1 -0
- package/dist/descriptor/schema.cjs +109 -0
- package/dist/descriptor/schema.cjs.map +1 -0
- package/dist/descriptor/schema.d.cts +217 -0
- package/dist/descriptor/schema.d.mts +217 -0
- package/dist/descriptor/schema.mjs +102 -0
- package/dist/descriptor/schema.mjs.map +1 -0
- package/dist/descriptor/serialize.cjs +45 -0
- package/dist/descriptor/serialize.cjs.map +1 -0
- package/dist/descriptor/serialize.d.cts +7 -0
- package/dist/descriptor/serialize.d.mts +7 -0
- package/dist/descriptor/serialize.mjs +45 -0
- package/dist/descriptor/serialize.mjs.map +1 -0
- package/dist/dev-log-pipeline.cjs +273 -0
- package/dist/dev-log-pipeline.cjs.map +1 -0
- package/dist/dev-log-pipeline.mjs +267 -0
- package/dist/dev-log-pipeline.mjs.map +1 -0
- package/dist/dev-logs.cjs +39 -8
- package/dist/dev-logs.cjs.map +1 -1
- package/dist/dev-logs.mjs +37 -9
- package/dist/dev-logs.mjs.map +1 -1
- package/dist/dev-program.cjs +405 -0
- package/dist/dev-program.cjs.map +1 -0
- package/dist/dev-program.d.cts +10 -0
- package/dist/dev-program.d.mts +10 -0
- package/dist/dev-program.mjs +395 -0
- package/dist/dev-program.mjs.map +1 -0
- package/dist/dev-session-data.d.cts +27 -0
- package/dist/dev-session-data.d.mts +27 -0
- package/dist/dev-session.cjs +178 -105
- package/dist/dev-session.cjs.map +1 -1
- package/dist/dev-session.mjs +180 -105
- package/dist/dev-session.mjs.map +1 -1
- package/dist/env/process-env.cjs +16 -0
- package/dist/env/process-env.cjs.map +1 -0
- package/dist/env/process-env.mjs +13 -0
- package/dist/env/process-env.mjs.map +1 -0
- package/dist/env/project-env.cjs +144 -0
- package/dist/env/project-env.cjs.map +1 -0
- package/dist/env/project-env.d.cts +1 -0
- package/dist/env/project-env.d.mts +1 -0
- package/dist/env/project-env.mjs +132 -0
- package/dist/env/project-env.mjs.map +1 -0
- package/dist/fastkv.cjs +59 -12
- package/dist/fastkv.cjs.map +1 -1
- package/dist/fastkv.d.cts +42 -6
- package/dist/fastkv.d.mts +42 -6
- package/dist/fastkv.mjs +58 -13
- package/dist/fastkv.mjs.map +1 -1
- package/dist/fingerprint.cjs +57 -0
- package/dist/fingerprint.cjs.map +1 -0
- package/dist/fingerprint.d.cts +14 -0
- package/dist/fingerprint.d.mts +14 -0
- package/dist/fingerprint.mjs +55 -0
- package/dist/fingerprint.mjs.map +1 -0
- package/dist/http-client.cjs +17 -17
- package/dist/http-client.cjs.map +1 -1
- package/dist/http-client.mjs +17 -17
- package/dist/http-client.mjs.map +1 -1
- package/dist/image-deploy.cjs +186 -0
- package/dist/image-deploy.cjs.map +1 -0
- package/dist/image-deploy.mjs +182 -0
- package/dist/image-deploy.mjs.map +1 -0
- package/dist/index.cjs +66 -18
- package/dist/index.d.cts +8 -7
- package/dist/index.d.mts +8 -7
- package/dist/index.mjs +6 -5
- package/dist/infra/docker.cjs +77 -0
- package/dist/infra/docker.cjs.map +1 -0
- package/dist/infra/docker.d.cts +10 -0
- package/dist/infra/docker.d.mts +10 -0
- package/dist/infra/docker.mjs +69 -0
- package/dist/infra/docker.mjs.map +1 -0
- package/dist/infra/materializer.cjs +74 -0
- package/dist/infra/materializer.cjs.map +1 -0
- package/dist/infra/materializer.mjs +70 -0
- package/dist/infra/materializer.mjs.map +1 -0
- package/dist/infra/planner.cjs +135 -103
- package/dist/infra/planner.cjs.map +1 -1
- package/dist/infra/planner.mjs +137 -104
- package/dist/infra/planner.mjs.map +1 -1
- package/dist/infra/port-ownership.cjs +57 -0
- package/dist/infra/port-ownership.cjs.map +1 -0
- package/dist/infra/port-ownership.mjs +57 -0
- package/dist/infra/port-ownership.mjs.map +1 -0
- package/dist/infra/preflight.cjs +45 -33
- package/dist/infra/preflight.cjs.map +1 -1
- package/dist/infra/preflight.d.cts +1 -0
- package/dist/infra/preflight.d.mts +1 -0
- package/dist/infra/preflight.mjs +46 -34
- package/dist/infra/preflight.mjs.map +1 -1
- package/dist/infra/types.cjs.map +1 -1
- package/dist/infra/types.d.cts +2 -0
- package/dist/infra/types.d.mts +2 -0
- package/dist/infra/types.mjs.map +1 -1
- package/dist/integrity.cjs +50 -61
- package/dist/integrity.cjs.map +1 -1
- package/dist/integrity.d.cts +16 -10
- package/dist/integrity.d.mts +16 -10
- package/dist/integrity.mjs +50 -59
- package/dist/integrity.mjs.map +1 -1
- package/dist/internal/manifest-normalizer.cjs +8 -2
- package/dist/internal/manifest-normalizer.cjs.map +1 -1
- package/dist/internal/manifest-normalizer.mjs +9 -3
- package/dist/internal/manifest-normalizer.mjs.map +1 -1
- package/dist/merge.cjs +19 -1
- package/dist/merge.cjs.map +1 -1
- package/dist/merge.d.cts +1 -1
- package/dist/merge.d.mts +1 -1
- package/dist/merge.mjs +19 -2
- package/dist/merge.mjs.map +1 -1
- package/dist/mf.cjs +190 -3
- package/dist/mf.cjs.map +1 -1
- package/dist/mf.d.cts +24 -2
- package/dist/mf.d.mts +24 -2
- package/dist/mf.mjs +189 -4
- package/dist/mf.mjs.map +1 -1
- package/dist/near-cli.cjs +59 -91
- package/dist/near-cli.cjs.map +1 -1
- package/dist/near-cli.mjs +58 -90
- package/dist/near-cli.mjs.map +1 -1
- package/dist/near-signer.cjs +73 -0
- package/dist/near-signer.cjs.map +1 -0
- package/dist/near-signer.mjs +70 -0
- package/dist/near-signer.mjs.map +1 -0
- package/dist/network.cjs +0 -1
- package/dist/network.cjs.map +1 -1
- package/dist/orchestrator.cjs +256 -87
- package/dist/orchestrator.cjs.map +1 -1
- package/dist/orchestrator.mjs +248 -87
- package/dist/orchestrator.mjs.map +1 -1
- package/dist/platform-deploy.cjs +81 -0
- package/dist/platform-deploy.cjs.map +1 -0
- package/dist/platform-deploy.mjs +80 -0
- package/dist/platform-deploy.mjs.map +1 -0
- package/dist/plugin.cjs +54 -1389
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.cts +6 -896
- package/dist/plugin.d.mts +6 -896
- package/dist/plugin.mjs +53 -1387
- package/dist/plugin.mjs.map +1 -1
- package/dist/process-kill.cjs +44 -0
- package/dist/process-kill.cjs.map +1 -0
- package/dist/process-kill.mjs +43 -0
- package/dist/process-kill.mjs.map +1 -0
- package/dist/process-registry.cjs +64 -9
- package/dist/process-registry.cjs.map +1 -1
- package/dist/process-registry.mjs +61 -10
- package/dist/process-registry.mjs.map +1 -1
- package/dist/progress.cjs +45 -0
- package/dist/progress.cjs.map +1 -0
- package/dist/progress.d.cts +13 -0
- package/dist/progress.d.mts +13 -0
- package/dist/progress.mjs +42 -0
- package/dist/progress.mjs.map +1 -0
- package/dist/publish.cjs +513 -79
- package/dist/publish.cjs.map +1 -1
- package/dist/publish.mjs +515 -82
- package/dist/publish.mjs.map +1 -1
- package/dist/registry-use.cjs +41 -0
- package/dist/registry-use.cjs.map +1 -0
- package/dist/registry-use.mjs +40 -0
- package/dist/registry-use.mjs.map +1 -0
- package/dist/resolution/session.cjs +335 -0
- package/dist/resolution/session.cjs.map +1 -0
- package/dist/resolution/session.d.cts +105 -0
- package/dist/resolution/session.d.mts +105 -0
- package/dist/resolution/session.mjs +331 -0
- package/dist/resolution/session.mjs.map +1 -0
- package/dist/rollback.cjs +131 -0
- package/dist/rollback.cjs.map +1 -0
- package/dist/rollback.mjs +128 -0
- package/dist/rollback.mjs.map +1 -0
- package/dist/sdk.cjs +7 -7
- package/dist/sdk.d.cts +3 -3
- package/dist/sdk.d.mts +3 -3
- package/dist/sdk.mjs +2 -2
- package/dist/service-descriptor.cjs +67 -34
- package/dist/service-descriptor.cjs.map +1 -1
- package/dist/service-descriptor.d.cts +4 -1
- package/dist/service-descriptor.d.mts +3 -0
- package/dist/service-descriptor.mjs +63 -35
- package/dist/service-descriptor.mjs.map +1 -1
- package/dist/shared-deps.cjs +17 -16
- package/dist/shared-deps.cjs.map +1 -1
- package/dist/shared-deps.mjs +17 -16
- package/dist/shared-deps.mjs.map +1 -1
- package/dist/start-config-source.cjs +24 -0
- package/dist/start-config-source.cjs.map +1 -0
- package/dist/start-config-source.d.cts +29 -0
- package/dist/start-config-source.d.mts +29 -0
- package/dist/start-config-source.mjs +22 -0
- package/dist/start-config-source.mjs.map +1 -0
- package/dist/storage-upload.cjs +145 -0
- package/dist/storage-upload.cjs.map +1 -0
- package/dist/storage-upload.mjs +143 -0
- package/dist/storage-upload.mjs.map +1 -0
- package/dist/types.cjs +126 -20
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +867 -585
- package/dist/types.d.mts +867 -585
- package/dist/types.mjs +307 -208
- package/dist/types.mjs.map +1 -1
- package/dist/ui/api.cjs +105 -0
- package/dist/ui/api.cjs.map +1 -0
- package/dist/ui/api.d.cts +31 -0
- package/dist/ui/api.d.mts +31 -0
- package/dist/ui/api.mjs +99 -0
- package/dist/ui/api.mjs.map +1 -0
- package/dist/ui/auth-guards.cjs +50 -0
- package/dist/ui/auth-guards.cjs.map +1 -0
- package/dist/ui/auth-guards.d.cts +39 -0
- package/dist/ui/auth-guards.d.mts +39 -0
- package/dist/ui/auth-guards.mjs +48 -0
- package/dist/ui/auth-guards.mjs.map +1 -0
- package/dist/ui/auth.cjs +197 -0
- package/dist/ui/auth.cjs.map +1 -0
- package/dist/ui/auth.d.cts +56 -0
- package/dist/ui/auth.d.mts +56 -0
- package/dist/ui/auth.mjs +179 -0
- package/dist/ui/auth.mjs.map +1 -0
- package/dist/ui/entry.cjs +16 -0
- package/dist/ui/entry.cjs.map +1 -0
- package/dist/ui/entry.d.cts +12 -0
- package/dist/ui/entry.d.mts +12 -0
- package/dist/ui/entry.mjs +15 -0
- package/dist/ui/entry.mjs.map +1 -0
- package/dist/ui/head.cjs +14 -7
- package/dist/ui/head.cjs.map +1 -1
- package/dist/ui/head.mjs +15 -7
- package/dist/ui/head.mjs.map +1 -1
- package/dist/ui/hydrate.cjs +265 -0
- package/dist/ui/hydrate.cjs.map +1 -0
- package/dist/ui/hydrate.d.cts +48 -0
- package/dist/ui/hydrate.d.mts +48 -0
- package/dist/ui/hydrate.mjs +263 -0
- package/dist/ui/hydrate.mjs.map +1 -0
- package/dist/ui/i18n.cjs +153 -0
- package/dist/ui/i18n.cjs.map +1 -0
- package/dist/ui/i18n.d.cts +29 -0
- package/dist/ui/i18n.d.mts +29 -0
- package/dist/ui/i18n.mjs +140 -0
- package/dist/ui/i18n.mjs.map +1 -0
- package/dist/ui/index.cjs +19 -1
- package/dist/ui/index.d.cts +6 -3
- package/dist/ui/index.d.mts +6 -3
- package/dist/ui/index.mjs +5 -2
- package/dist/ui/locale.cjs +53 -0
- package/dist/ui/locale.cjs.map +1 -0
- package/dist/ui/locale.d.cts +18 -0
- package/dist/ui/locale.d.mts +18 -0
- package/dist/ui/locale.mjs +49 -0
- package/dist/ui/locale.mjs.map +1 -0
- package/dist/ui/manifest/index.cjs +25 -0
- package/dist/ui/manifest/index.cjs.map +1 -0
- package/dist/ui/manifest/index.d.cts +9 -0
- package/dist/ui/manifest/index.d.mts +9 -0
- package/dist/ui/manifest/index.mjs +13 -0
- package/dist/ui/manifest/index.mjs.map +1 -0
- package/dist/ui/manifest-generator.cjs +8 -0
- package/dist/ui/manifest-generator.d.cts +1 -0
- package/dist/ui/manifest-generator.d.mts +1 -0
- package/dist/ui/manifest-generator.mjs +3 -0
- package/dist/ui/message-catalogs.cjs +8 -0
- package/dist/ui/message-catalogs.cjs.map +1 -0
- package/dist/ui/message-catalogs.d.cts +5 -0
- package/dist/ui/message-catalogs.d.mts +5 -0
- package/dist/ui/message-catalogs.mjs +8 -0
- package/dist/ui/message-catalogs.mjs.map +1 -0
- package/dist/ui/metadata.cjs +0 -1
- package/dist/ui/metadata.cjs.map +1 -1
- package/dist/ui/metadata.d.cts +1 -1
- package/dist/ui/metadata.d.mts +1 -1
- package/dist/ui/plugin-path.cjs +37 -0
- package/dist/ui/plugin-path.cjs.map +1 -0
- package/dist/ui/plugin-path.d.cts +25 -0
- package/dist/ui/plugin-path.d.mts +25 -0
- package/dist/ui/plugin-path.mjs +35 -0
- package/dist/ui/plugin-path.mjs.map +1 -0
- package/dist/ui/router-client.cjs +61 -0
- package/dist/ui/router-client.cjs.map +1 -0
- package/dist/ui/router-client.d.cts +20 -0
- package/dist/ui/router-client.d.mts +20 -0
- package/dist/ui/router-client.mjs +60 -0
- package/dist/ui/router-client.mjs.map +1 -0
- package/dist/ui/router-defaults.cjs +48 -0
- package/dist/ui/router-defaults.cjs.map +1 -0
- package/dist/ui/router-defaults.d.cts +8 -0
- package/dist/ui/router-defaults.d.mts +8 -0
- package/dist/ui/router-defaults.mjs +45 -0
- package/dist/ui/router-defaults.mjs.map +1 -0
- package/dist/ui/router-error.cjs +70 -0
- package/dist/ui/router-error.cjs.map +1 -0
- package/dist/ui/router-error.d.cts +19 -0
- package/dist/ui/router-error.d.mts +19 -0
- package/dist/ui/router-error.mjs +69 -0
- package/dist/ui/router-error.mjs.map +1 -0
- package/dist/ui/router-server.cjs +153 -0
- package/dist/ui/router-server.cjs.map +1 -0
- package/dist/ui/router-server.d.cts +38 -0
- package/dist/ui/router-server.d.mts +38 -0
- package/dist/ui/router-server.mjs +152 -0
- package/dist/ui/router-server.mjs.map +1 -0
- package/dist/ui/router.cjs +4 -16
- package/dist/ui/router.cjs.map +1 -1
- package/dist/ui/router.mjs +4 -15
- package/dist/ui/router.mjs.map +1 -1
- package/dist/ui/runtime.cjs +5 -1
- package/dist/ui/runtime.cjs.map +1 -1
- package/dist/ui/runtime.d.cts +2 -1
- package/dist/ui/runtime.d.mts +2 -1
- package/dist/ui/runtime.mjs +5 -1
- package/dist/ui/runtime.mjs.map +1 -1
- package/dist/ui/slot.cjs +34 -0
- package/dist/ui/slot.cjs.map +1 -0
- package/dist/ui/slot.d.cts +43 -0
- package/dist/ui/slot.d.mts +43 -0
- package/dist/ui/slot.mjs +34 -0
- package/dist/ui/slot.mjs.map +1 -0
- package/dist/ui/tenant.cjs +300 -0
- package/dist/ui/tenant.cjs.map +1 -0
- package/dist/ui/tenant.d.cts +122 -0
- package/dist/ui/tenant.d.mts +122 -0
- package/dist/ui/tenant.mjs +279 -0
- package/dist/ui/tenant.mjs.map +1 -0
- package/dist/ui/types.d.cts +32 -2
- package/dist/ui/types.d.mts +32 -2
- package/dist/ui/version-check.cjs +47 -0
- package/dist/ui/version-check.cjs.map +1 -0
- package/dist/ui/version-check.d.cts +23 -0
- package/dist/ui/version-check.d.mts +23 -0
- package/dist/ui/version-check.mjs +46 -0
- package/dist/ui/version-check.mjs.map +1 -0
- package/dist/utils/banner.cjs +2 -2
- package/dist/utils/banner.cjs.map +1 -1
- package/dist/utils/banner.mjs +2 -2
- package/dist/utils/banner.mjs.map +1 -1
- package/dist/utils/linkify.cjs +1 -1
- package/dist/utils/linkify.cjs.map +1 -1
- package/dist/utils/linkify.mjs +1 -0
- package/dist/utils/linkify.mjs.map +1 -1
- package/dist/utils/run.cjs +6 -6
- package/dist/utils/run.cjs.map +1 -1
- package/dist/utils/run.mjs +6 -6
- package/dist/utils/run.mjs.map +1 -1
- package/dist/utils/save-config.cjs +12 -0
- package/dist/utils/save-config.cjs.map +1 -1
- package/dist/utils/save-config.mjs +12 -0
- package/dist/utils/save-config.mjs.map +1 -1
- package/dist/utils/snapshot-hash.cjs +10 -0
- package/dist/utils/snapshot-hash.cjs.map +1 -0
- package/dist/utils/snapshot-hash.mjs +10 -0
- package/dist/utils/snapshot-hash.mjs.map +1 -0
- package/dist/utils/string.cjs +0 -1
- package/dist/utils/string.cjs.map +1 -1
- package/dist/utils/theme.cjs +30 -12
- package/dist/utils/theme.cjs.map +1 -1
- package/dist/utils/theme.mjs +30 -11
- package/dist/utils/theme.mjs.map +1 -1
- package/dist/version-manifest-deploy.cjs +50 -0
- package/dist/version-manifest-deploy.cjs.map +1 -0
- package/dist/version-manifest-deploy.mjs +49 -0
- package/dist/version-manifest-deploy.mjs.map +1 -0
- package/dist/version-manifest-resolve.cjs +42 -0
- package/dist/version-manifest-resolve.cjs.map +1 -0
- package/dist/version-manifest-resolve.d.cts +38 -0
- package/dist/version-manifest-resolve.d.mts +38 -0
- package/dist/version-manifest-resolve.mjs +40 -0
- package/dist/version-manifest-resolve.mjs.map +1 -0
- package/dist/version-status.cjs +18 -0
- package/dist/version-status.cjs.map +1 -0
- package/dist/version-status.d.cts +22 -0
- package/dist/version-status.d.mts +22 -0
- package/dist/version-status.mjs +17 -0
- package/dist/version-status.mjs.map +1 -0
- package/dist/workspace-catalog.cjs +53 -0
- package/dist/workspace-catalog.cjs.map +1 -0
- package/dist/workspace-catalog.mjs +51 -0
- package/dist/workspace-catalog.mjs.map +1 -0
- package/dist/workspace.cjs +237 -0
- package/dist/workspace.cjs.map +1 -0
- package/dist/workspace.mjs +233 -0
- package/dist/workspace.mjs.map +1 -0
- package/package.json +179 -27
- package/skills/add-a-route/SKILL.md +132 -0
- package/skills/api-and-auth/SKILL.md +87 -21
- package/skills/api-and-auth/references/middleware.md +1 -1
- package/skills/cli-reference/SKILL.md +48 -21
- package/skills/code-style/SKILL.md +8 -0
- package/skills/dev-workflow/SKILL.md +50 -26
- package/skills/extends-config/SKILL.md +31 -19
- package/skills/init-upgrade/SKILL.md +29 -16
- package/skills/plugin-development/SKILL.md +46 -112
- package/skills/plugin-development/references/database.md +82 -0
- package/skills/plugin-development/references/request-context.md +67 -0
- package/skills/publish-sync/SKILL.md +99 -22
- package/skills/registry/SKILL.md +82 -0
- package/skills/super-app/SKILL.md +25 -15
- package/skills/talk-to-the-app/SKILL.md +138 -0
- package/skills/ui-integration/SKILL.md +93 -11
- package/dist/cli/db-studio.cjs +0 -131
- package/dist/cli/db-studio.cjs.map +0 -1
- package/dist/cli/db-studio.mjs +0 -127
- package/dist/cli/db-studio.mjs.map +0 -1
- package/dist/cli/init.d.cts.map +0 -1
- package/dist/cli/init.d.mts.map +0 -1
- package/dist/components/dev-view.cjs +0 -309
- package/dist/components/dev-view.cjs.map +0 -1
- package/dist/components/dev-view.mjs +0 -309
- package/dist/components/dev-view.mjs.map +0 -1
- package/dist/components/streaming-view.cjs +0 -134
- package/dist/components/streaming-view.cjs.map +0 -1
- package/dist/components/streaming-view.mjs +0 -132
- package/dist/components/streaming-view.mjs.map +0 -1
- package/dist/config.d.cts.map +0 -1
- package/dist/config.d.mts.map +0 -1
- package/dist/contract.d.cts.map +0 -1
- package/dist/contract.d.mts.map +0 -1
- package/dist/contract.meta.d.cts.map +0 -1
- package/dist/contract.meta.d.mts.map +0 -1
- package/dist/dag.d.cts.map +0 -1
- package/dist/dag.d.mts.map +0 -1
- package/dist/db.cjs +0 -81
- package/dist/db.cjs.map +0 -1
- package/dist/db.d.cts +0 -30
- package/dist/db.d.cts.map +0 -1
- package/dist/db.d.mts +0 -30
- package/dist/db.d.mts.map +0 -1
- package/dist/db.mjs +0 -75
- package/dist/db.mjs.map +0 -1
- package/dist/fastkv.d.cts.map +0 -1
- package/dist/fastkv.d.mts.map +0 -1
- package/dist/integrity.d.cts.map +0 -1
- package/dist/integrity.d.mts.map +0 -1
- package/dist/merge.d.cts.map +0 -1
- package/dist/merge.d.mts.map +0 -1
- package/dist/mf.d.cts.map +0 -1
- package/dist/mf.d.mts.map +0 -1
- package/dist/plugin.d.cts.map +0 -1
- package/dist/plugin.d.mts.map +0 -1
- package/dist/service-descriptor.d.cts.map +0 -1
- package/dist/service-descriptor.d.mts.map +0 -1
- package/dist/types.d.cts.map +0 -1
- package/dist/types.d.mts.map +0 -1
- package/dist/ui/head.d.cts.map +0 -1
- package/dist/ui/head.d.mts.map +0 -1
- package/dist/ui/metadata.d.cts.map +0 -1
- package/dist/ui/metadata.d.mts.map +0 -1
- package/dist/ui/router.d.cts.map +0 -1
- package/dist/ui/router.d.mts.map +0 -1
- package/dist/ui/runtime.d.cts.map +0 -1
- package/dist/ui/runtime.d.mts.map +0 -1
- package/dist/ui/types.d.cts.map +0 -1
- package/dist/ui/types.d.mts.map +0 -1
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { getCspNonce, getRuntimeConfig } from "./runtime.mjs";
|
|
2
|
+
import { createApiClient } from "./api.mjs";
|
|
3
|
+
import { createAuthClient } from "./auth.mjs";
|
|
4
|
+
import { manifest_exports } from "./manifest/index.mjs";
|
|
5
|
+
import { defaultQueryClient } from "./router-defaults.mjs";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
|
|
8
|
+
//#region src/ui/hydrate.tsx
|
|
9
|
+
const mark = (message) => {
|
|
10
|
+
const progress = window.__CLIENT_PROGRESS__ ?? [];
|
|
11
|
+
window.__CLIENT_PROGRESS__ = [...progress, message];
|
|
12
|
+
if (import.meta.env.DEV) console.log(`[Hydrate] ${message}`);
|
|
13
|
+
};
|
|
14
|
+
function isAbsoluteHttpUrl(value) {
|
|
15
|
+
if (!value) return false;
|
|
16
|
+
try {
|
|
17
|
+
const url = new URL(value);
|
|
18
|
+
return url.protocol === "http:" || url.protocol === "https:";
|
|
19
|
+
} catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Manifest composition: reconstruct the server's tree from the payload — the
|
|
25
|
+
* same manifests, the same MF names, the same construction code. Digest
|
|
26
|
+
* parity proves the SSR'd tree and this tree are identical before hydrate;
|
|
27
|
+
* any failure degrades to the core-only tree (still a real route tree — the
|
|
28
|
+
* page must render, just without plugin routes) rather than leaving the
|
|
29
|
+
* router without a tree.
|
|
30
|
+
*/
|
|
31
|
+
async function composeFromPayload(runtimeConfig, coreRouteConfig, coreManifest) {
|
|
32
|
+
const coreUiName = runtimeConfig.ui?.name ?? manifest_exports.CORE_UI_PLUGIN_KEY;
|
|
33
|
+
const composeCoreOnly = async (candidateManifests) => {
|
|
34
|
+
try {
|
|
35
|
+
const core = candidateManifests.find((m) => m.name === manifest_exports.CORE_UI_PLUGIN_KEY);
|
|
36
|
+
if (!core) return void 0;
|
|
37
|
+
const tree = await (0, manifest_exports.constructTree)({
|
|
38
|
+
name: "core-fallback",
|
|
39
|
+
plugins: [{
|
|
40
|
+
key: core.name,
|
|
41
|
+
mfName: coreUiName
|
|
42
|
+
}],
|
|
43
|
+
resolve: async (ref) => ({
|
|
44
|
+
key: ref.key,
|
|
45
|
+
manifest: core,
|
|
46
|
+
routeConfig: coreRouteConfig
|
|
47
|
+
}),
|
|
48
|
+
rootOptions: coreRouteConfig.rootMeta
|
|
49
|
+
});
|
|
50
|
+
mark(`core-only tree constructed: ${tree.manifests.length} source(s), ${tree.nav.items.length} nav item(s)`);
|
|
51
|
+
return {
|
|
52
|
+
routeTree: tree.rootRoute,
|
|
53
|
+
nav: tree.nav,
|
|
54
|
+
degraded: true
|
|
55
|
+
};
|
|
56
|
+
} catch (error) {
|
|
57
|
+
console.error("[Hydrate] Core-only fallback failed:", error);
|
|
58
|
+
mark(`CORE-ONLY FALLBACK ERROR: ${error.message}`);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
const payload = runtimeConfig.ui?.compose;
|
|
63
|
+
if (!payload?.remotes) return coreManifest ? composeCoreOnly([coreManifest]) : void 0;
|
|
64
|
+
const parsed = manifest_exports.ComposePayloadSchema.safeParse(payload);
|
|
65
|
+
if (!parsed.success) {
|
|
66
|
+
mark(`compose payload malformed: ${parsed.error.message}`);
|
|
67
|
+
return coreManifest ? composeCoreOnly([coreManifest]) : void 0;
|
|
68
|
+
}
|
|
69
|
+
const { manifests } = parsed.data;
|
|
70
|
+
const manifestByKey = new Map(manifests.map((m) => [m.name, m]));
|
|
71
|
+
try {
|
|
72
|
+
const { registerRemotes, loadRemote } = await import("@module-federation/enhanced/runtime");
|
|
73
|
+
mark(`compose payload: digest ${payload.digest}, ${payload.remotes.length} remote(s)`);
|
|
74
|
+
registerRemotes(payload.remotes.map((remote) => ({
|
|
75
|
+
name: remote.name,
|
|
76
|
+
alias: remote.name,
|
|
77
|
+
entry: isAbsoluteHttpUrl(remote.manifestUrl) ? remote.manifestUrl : remote.entry.replace(/\/?remoteEntry\.js$/, "/mf-manifest.json")
|
|
78
|
+
})));
|
|
79
|
+
for (const remote of payload.remotes) mark(`remote registered ${remote.name} @ ${remote.entry}`);
|
|
80
|
+
const loadedRouteConfigs = /* @__PURE__ */ new Map();
|
|
81
|
+
const dropped = [];
|
|
82
|
+
const healthyManifests = [];
|
|
83
|
+
for (const manifest of manifests) {
|
|
84
|
+
if (manifest.name === manifest_exports.CORE_UI_PLUGIN_KEY) {
|
|
85
|
+
healthyManifests.push(manifest);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const remote = payload.remotes.find((r) => r.key === manifest.name);
|
|
89
|
+
if (!remote) {
|
|
90
|
+
dropped.push(manifest.name);
|
|
91
|
+
mark(`dropped ${manifest.name} — payload has no matching remote`);
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
const mod = await loadRemote(`${remote.name}/routeConfig`, { from: "build" });
|
|
96
|
+
const routeConfig = mod?.default ?? mod;
|
|
97
|
+
if (!routeConfig?.routeConfigLoaders) throw new Error(`loadRemote(${remote.name}/routeConfig) returned no route config`);
|
|
98
|
+
loadedRouteConfigs.set(manifest.name, routeConfig);
|
|
99
|
+
healthyManifests.push(manifest);
|
|
100
|
+
mark(`loaded ${remote.name}/routeConfig`);
|
|
101
|
+
} catch (error) {
|
|
102
|
+
dropped.push(manifest.name);
|
|
103
|
+
mark(`dropped ${manifest.name} — ${error.message}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const tree = await (0, manifest_exports.constructTree)({
|
|
107
|
+
name: "client",
|
|
108
|
+
plugins: healthyManifests.map((manifest) => {
|
|
109
|
+
const remote = payload.remotes.find((r) => r.key === manifest.name);
|
|
110
|
+
return {
|
|
111
|
+
key: manifest.name,
|
|
112
|
+
mfName: remote?.name ?? (manifest.name === manifest_exports.CORE_UI_PLUGIN_KEY ? coreUiName : manifest.name)
|
|
113
|
+
};
|
|
114
|
+
}),
|
|
115
|
+
resolve: async (ref) => {
|
|
116
|
+
if (ref.key === manifest_exports.CORE_UI_PLUGIN_KEY) {
|
|
117
|
+
const manifest = manifestByKey.get(ref.key);
|
|
118
|
+
if (!manifest) throw new Error(`compose payload has no manifest for "${ref.key}"`);
|
|
119
|
+
return {
|
|
120
|
+
key: ref.key,
|
|
121
|
+
manifest,
|
|
122
|
+
routeConfig: coreRouteConfig
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
const manifest = manifestByKey.get(ref.key);
|
|
126
|
+
const routeConfig = loadedRouteConfigs.get(ref.key);
|
|
127
|
+
if (!manifest || !routeConfig) throw new Error(`composition source "${ref.key}" is not fully resolved`);
|
|
128
|
+
return {
|
|
129
|
+
key: ref.key,
|
|
130
|
+
manifest,
|
|
131
|
+
routeConfig
|
|
132
|
+
};
|
|
133
|
+
},
|
|
134
|
+
rootOptions: coreRouteConfig.rootMeta
|
|
135
|
+
});
|
|
136
|
+
if (dropped.length > 0) {
|
|
137
|
+
mark(`degraded compose: ${dropped.join(", ")} dropped — client-render`);
|
|
138
|
+
return {
|
|
139
|
+
routeTree: tree.rootRoute,
|
|
140
|
+
nav: tree.nav,
|
|
141
|
+
degraded: true
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
if (tree.digest !== payload.digest) {
|
|
145
|
+
console.warn(`[Hydrate] Compose digest mismatch (client ${tree.digest} vs server ${payload.digest}); core-only fallback`);
|
|
146
|
+
mark(`DIGEST PARITY FAILURE server=${payload.digest} client=${tree.digest}`);
|
|
147
|
+
return composeCoreOnly(manifests);
|
|
148
|
+
}
|
|
149
|
+
mark(`tree constructed: ${tree.manifests.length} source(s), ${tree.nav.items.length} nav item(s)`);
|
|
150
|
+
return {
|
|
151
|
+
routeTree: tree.rootRoute,
|
|
152
|
+
nav: tree.nav,
|
|
153
|
+
degraded: false
|
|
154
|
+
};
|
|
155
|
+
} catch (error) {
|
|
156
|
+
console.error("[Hydrate] Client compose failed; core-only fallback:", error);
|
|
157
|
+
mark(`CLIENT COMPOSE ERROR: ${error.message}`);
|
|
158
|
+
return composeCoreOnly(manifests);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function isServerRendered() {
|
|
162
|
+
if (document.documentElement.hasAttribute("data-everything-ssr")) return true;
|
|
163
|
+
if (window.__EVERYTHING_DEV_SSR__ !== void 0) return window.__EVERYTHING_DEV_SSR__;
|
|
164
|
+
return window.$_TSR !== void 0;
|
|
165
|
+
}
|
|
166
|
+
function watchHydrationConsumed() {
|
|
167
|
+
const bootstrapWatch = setInterval(() => {
|
|
168
|
+
if (window.$_TSR === void 0) {
|
|
169
|
+
clearInterval(bootstrapWatch);
|
|
170
|
+
mark("hydration consumed ($_TSR deleted — h() ran)");
|
|
171
|
+
}
|
|
172
|
+
}, 50);
|
|
173
|
+
}
|
|
174
|
+
async function hydrate(options) {
|
|
175
|
+
if (window.__EVERYTHING_DEV_HYDRATE_PROMISE__) return window.__EVERYTHING_DEV_HYDRATE_PROMISE__;
|
|
176
|
+
const hydratePromise = (async () => {
|
|
177
|
+
console.log("[Hydrate] Starting...");
|
|
178
|
+
const runtimeConfig = options.config ?? getRuntimeConfig();
|
|
179
|
+
const cspNonce = getCspNonce();
|
|
180
|
+
if (!runtimeConfig.hostUrl || !runtimeConfig.rpcBase) throw new Error("Missing hostUrl or rpcBase in runtime config");
|
|
181
|
+
const [{ QueryClientProvider }, routerFactory] = await Promise.all([import("@tanstack/react-query"), options.createRouter ? Promise.resolve(options.createRouter) : import("./router-client.mjs").then((m) => m.createRouter)]);
|
|
182
|
+
const [coreRouteConfig] = await Promise.all([options.routeConfig().then((mod) => "default" in mod ? mod.default : mod)]);
|
|
183
|
+
const coreManifest = options.manifest ? await options.manifest().then((raw) => typeof raw === "object" && raw !== null && "default" in raw ? raw.default : raw).then((raw) => (0, manifest_exports.parsePluginManifest)(raw)) : void 0;
|
|
184
|
+
const client = options.createQueryClient?.() ?? defaultQueryClient();
|
|
185
|
+
mark(`$_TSR present: ${Boolean(window.$_TSR)}`);
|
|
186
|
+
const composed = await composeFromPayload(runtimeConfig, coreRouteConfig, coreManifest);
|
|
187
|
+
const { router, queryClient: builtClient } = await routerFactory({
|
|
188
|
+
routeTree: composed?.routeTree,
|
|
189
|
+
context: {
|
|
190
|
+
pluginNav: composed?.nav,
|
|
191
|
+
queryClient: client,
|
|
192
|
+
runtimeConfig,
|
|
193
|
+
cspNonce,
|
|
194
|
+
locale: isServerRendered() ? document.documentElement.lang : void 0,
|
|
195
|
+
apiClient: createApiClient({
|
|
196
|
+
hostUrl: runtimeConfig.hostUrl,
|
|
197
|
+
rpcBase: runtimeConfig.rpcBase,
|
|
198
|
+
connectionError: options.apiConnectionError
|
|
199
|
+
}),
|
|
200
|
+
authClient: createAuthClient({
|
|
201
|
+
runtimeConfig,
|
|
202
|
+
cspNonce
|
|
203
|
+
})
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
const providerClient = builtClient ?? client;
|
|
207
|
+
if (isServerRendered() && Boolean(composed) && !composed.degraded) {
|
|
208
|
+
const { hydrateRoot } = await import("react-dom/client");
|
|
209
|
+
const { RouterClient } = await import("@tanstack/react-router/ssr/client");
|
|
210
|
+
console.log("[Hydrate] Calling hydrateRoot...");
|
|
211
|
+
hydrateRoot(document, /* @__PURE__ */ jsx(QueryClientProvider, {
|
|
212
|
+
client: providerClient,
|
|
213
|
+
children: /* @__PURE__ */ jsx(RouterClient, { router })
|
|
214
|
+
}));
|
|
215
|
+
watchHydrationConsumed();
|
|
216
|
+
} else {
|
|
217
|
+
const { createRoot } = await import("react-dom/client");
|
|
218
|
+
const { RouterProvider } = await import("@tanstack/react-router");
|
|
219
|
+
console.log("[Hydrate] Calling createRoot...");
|
|
220
|
+
createRoot(document).render(/* @__PURE__ */ jsx(QueryClientProvider, {
|
|
221
|
+
client: providerClient,
|
|
222
|
+
children: /* @__PURE__ */ jsx(RouterProvider, { router })
|
|
223
|
+
}));
|
|
224
|
+
}
|
|
225
|
+
if (composed?.degraded) {
|
|
226
|
+
const { toast } = await import("sonner");
|
|
227
|
+
toast.error("Some application features couldn't load", {
|
|
228
|
+
id: "application-compose-error",
|
|
229
|
+
description: "Plugin pages are unavailable. Reload to try again.",
|
|
230
|
+
duration: Number.POSITIVE_INFINITY,
|
|
231
|
+
action: {
|
|
232
|
+
label: "Reload",
|
|
233
|
+
onClick: () => window.location.reload()
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
console.log("[Hydrate] Complete!");
|
|
238
|
+
})().catch((error) => {
|
|
239
|
+
console.error("[Hydrate] Failed:", error);
|
|
240
|
+
window.__EVERYTHING_DEV_HYDRATE_PROMISE__ = void 0;
|
|
241
|
+
const message = document.createElement("main");
|
|
242
|
+
message.setAttribute("role", "alert");
|
|
243
|
+
message.dataset.testid = "application-startup-error";
|
|
244
|
+
message.className = "min-h-screen flex flex-col items-center justify-center gap-4 bg-background text-foreground p-6";
|
|
245
|
+
const heading = document.createElement("h1");
|
|
246
|
+
heading.textContent = "The application couldn't load";
|
|
247
|
+
const detail = document.createElement("p");
|
|
248
|
+
detail.textContent = "Check your connection and reload to try again.";
|
|
249
|
+
const retry = document.createElement("button");
|
|
250
|
+
retry.textContent = "Reload";
|
|
251
|
+
retry.className = "rounded-md border border-border px-4 py-2";
|
|
252
|
+
retry.addEventListener("click", () => window.location.reload());
|
|
253
|
+
message.append(heading, detail, retry);
|
|
254
|
+
document.body.replaceChildren(message);
|
|
255
|
+
throw error;
|
|
256
|
+
});
|
|
257
|
+
window.__EVERYTHING_DEV_HYDRATE_PROMISE__ = hydratePromise;
|
|
258
|
+
return hydratePromise;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
//#endregion
|
|
262
|
+
export { hydrate as default, hydrate };
|
|
263
|
+
//# sourceMappingURL=hydrate.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hydrate.mjs","names":["CORE_UI_PLUGIN_KEY","constructTree","ComposePayloadSchema","parsePluginManifest"],"sources":["../../src/ui/hydrate.tsx"],"sourcesContent":["/**\n * Client bootstrap — creates browser-side QueryClient, Router, and auth/API\n * clients; composes the route tree from the runtime-config payload before\n * hydration (payload -> registerRemotes -> loadRemote route configs ->\n * constructTree -> hydrateRoot(RouterClient)). Called from the host-rendered\n * HTML shell via the app's thin entry/hydrate stubs. The build's MF runtime\n * owns the page's share scope — the global registerRemotes/loadRemote API\n * bridges it (one React/router across the core client and plugin containers\n * by share-scope negotiation).\n */\n\nimport type { QueryClient } from \"@tanstack/react-query\";\nimport type { ClientRuntimeConfig } from \"../types\";\nimport { type ClientServiceConfig, createApiClient } from \"./api\";\nimport { createAuthClient } from \"./auth\";\nimport {\n CORE_UI_PLUGIN_KEY,\n ComposePayloadSchema,\n constructTree,\n type NavManifest,\n type PluginManifest,\n parsePluginManifest,\n type RouteConfigModule,\n} from \"./manifest\";\nimport { defaultQueryClient } from \"./router-defaults\";\nimport { getCspNonce, getRuntimeConfig } from \"./runtime\";\nimport type { AppRouterFactory } from \"./types\";\n\ndeclare global {\n interface Window {\n __EVERYTHING_DEV_HYDRATE_PROMISE__?: Promise<void>;\n __EVERYTHING_DEV_SSR__?: boolean;\n __CLIENT_PROGRESS__?: string[];\n $_TSR?: unknown;\n }\n}\n\nconst mark = (message: string) => {\n const progress = window.__CLIENT_PROGRESS__ ?? [];\n window.__CLIENT_PROGRESS__ = [...progress, message];\n if (import.meta.env.DEV) console.log(`[Hydrate] ${message}`);\n};\n\nfunction isAbsoluteHttpUrl(value: string | undefined): value is string {\n if (!value) return false;\n try {\n const url = new URL(value);\n return url.protocol === \"http:\" || url.protocol === \"https:\";\n } catch {\n return false;\n }\n}\n\nexport type { AppRouterFactory } from \"./types\";\n\nexport interface CoreHydrateOptions {\n /**\n * Loads the app's generated core route config — the only app-specific\n * input; clients, compose machinery, and the router come from the package.\n */\n routeConfig: () => Promise<RouteConfigModule | { default: RouteConfigModule }>;\n /**\n * Loads the app's generated core manifest — the degradation target when the\n * runtime config carries no (or no usable) compose payload: a plugin-free\n * deployment has no payload at all, yet the core-only tree is still the\n * tree. Absent, a payload-less page cannot construct a tree. The value is\n * parsed through the manifest contract at the boundary (a skewed version\n * or shape fails loudly here).\n */\n manifest?: () => Promise<unknown>;\n /**\n * The app's authored router factory — notFound/pending/error components,\n * scroll behavior, and router defaults live there. Absent, the framework's\n * own factory runs.\n */\n createRouter?: AppRouterFactory;\n /** The app's query client factory (staleTime, gcTime, …). Absent, the framework default. */\n createQueryClient?: () => QueryClient;\n /** Overrides the runtime config source (tests, embeds). */\n config?: ClientRuntimeConfig;\n /** Localized copy for the API connection-failure toast (see `createApiClient`). */\n apiConnectionError?: ClientServiceConfig[\"connectionError\"];\n}\n\ninterface ComposedTree {\n routeTree: unknown;\n nav: NavManifest;\n /** `true` when plugin composition failed and only the core tree is usable. */\n degraded: boolean;\n}\n\n/**\n * Manifest composition: reconstruct the server's tree from the payload — the\n * same manifests, the same MF names, the same construction code. Digest\n * parity proves the SSR'd tree and this tree are identical before hydrate;\n * any failure degrades to the core-only tree (still a real route tree — the\n * page must render, just without plugin routes) rather than leaving the\n * router without a tree.\n */\nasync function composeFromPayload(\n runtimeConfig: ClientRuntimeConfig,\n coreRouteConfig: RouteConfigModule,\n coreManifest: PluginManifest | undefined,\n): Promise<ComposedTree | undefined> {\n const coreUiName = runtimeConfig.ui?.name ?? CORE_UI_PLUGIN_KEY;\n\n // The core-only tree is the degradation target for every failure below —\n // the payload's core manifest plus the app's own route config, no remotes.\n const composeCoreOnly = async (\n candidateManifests: PluginManifest[],\n ): Promise<ComposedTree | undefined> => {\n try {\n const core = candidateManifests.find((m) => m.name === CORE_UI_PLUGIN_KEY);\n if (!core) return undefined;\n const tree = await constructTree({\n name: \"core-fallback\",\n plugins: [{ key: core.name, mfName: coreUiName }],\n resolve: async (ref) => ({\n key: ref.key,\n manifest: core,\n routeConfig: coreRouteConfig,\n }),\n rootOptions: coreRouteConfig.rootMeta,\n });\n mark(\n `core-only tree constructed: ${tree.manifests.length} source(s), ${tree.nav.items.length} nav item(s)`,\n );\n return { routeTree: tree.rootRoute, nav: tree.nav, degraded: true };\n } catch (error) {\n console.error(\"[Hydrate] Core-only fallback failed:\", error);\n mark(`CORE-ONLY FALLBACK ERROR: ${(error as Error).message}`);\n return undefined;\n }\n };\n\n const payload = runtimeConfig.ui?.compose;\n if (!payload?.remotes) {\n // No payload at all — a plugin-free deployment. The core-only tree IS\n // the tree; without the app manifest there is nothing to construct.\n return coreManifest ? composeCoreOnly([coreManifest]) : undefined;\n }\n\n const parsed = ComposePayloadSchema.safeParse(payload);\n if (!parsed.success) {\n mark(`compose payload malformed: ${parsed.error.message}`);\n return coreManifest ? composeCoreOnly([coreManifest]) : undefined;\n }\n const { manifests } = parsed.data;\n const manifestByKey = new Map(manifests.map((m) => [m.name, m]));\n\n try {\n const { registerRemotes, loadRemote } = await import(\"@module-federation/enhanced/runtime\");\n\n mark(`compose payload: digest ${payload.digest}, ${payload.remotes.length} remote(s)`);\n\n registerRemotes(\n payload.remotes.map((remote) => ({\n name: remote.name,\n alias: remote.name,\n // Manifest-driven registration: the manifest carries the remote's\n // true container identity (its build-time package name), which the\n // plain remoteEntry URL cannot resolve — the entry script's global\n // name doesn't match the registered name. Versioned deploys carry\n // the (hashed) manifest URL in the payload; legacy payloads derive\n // it by stripping the fixed entry name. Only absolute URLs qualify —\n // a relative manifestUrl would resolve against the page origin and\n // register the wrong container.\n entry: isAbsoluteHttpUrl(remote.manifestUrl)\n ? remote.manifestUrl\n : remote.entry.replace(/\\/?remoteEntry\\.js$/, \"/mf-manifest.json\"),\n })),\n );\n for (const remote of payload.remotes) {\n mark(`remote registered ${remote.name} @ ${remote.entry}`);\n }\n\n // Per-source isolation (ADR 0024 §5): a remote whose route config fails\n // to load drops only its own routes. The dropped set degrades the compose\n // (client-render — the SSR'd tree included it), never the whole page.\n const loadedRouteConfigs = new Map<string, RouteConfigModule>();\n const dropped: string[] = [];\n const healthyManifests: PluginManifest[] = [];\n for (const manifest of manifests) {\n if (manifest.name === CORE_UI_PLUGIN_KEY) {\n healthyManifests.push(manifest);\n continue;\n }\n const remote = payload.remotes.find((r) => r.key === manifest.name);\n if (!remote) {\n dropped.push(manifest.name);\n mark(`dropped ${manifest.name} — payload has no matching remote`);\n continue;\n }\n try {\n const mod = await loadRemote(`${remote.name}/routeConfig`, { from: \"build\" });\n const routeConfig = ((mod as { default?: RouteConfigModule })?.default ??\n mod) as RouteConfigModule;\n if (!routeConfig?.routeConfigLoaders) {\n throw new Error(`loadRemote(${remote.name}/routeConfig) returned no route config`);\n }\n loadedRouteConfigs.set(manifest.name, routeConfig);\n healthyManifests.push(manifest);\n mark(`loaded ${remote.name}/routeConfig`);\n } catch (error) {\n dropped.push(manifest.name);\n mark(`dropped ${manifest.name} — ${(error as Error).message}`);\n }\n }\n\n const tree = await constructTree({\n name: \"client\",\n plugins: healthyManifests.map((manifest) => {\n const remote = payload.remotes.find((r) => r.key === manifest.name);\n return {\n key: manifest.name,\n mfName:\n remote?.name ?? (manifest.name === CORE_UI_PLUGIN_KEY ? coreUiName : manifest.name),\n };\n }),\n resolve: async (ref) => {\n if (ref.key === CORE_UI_PLUGIN_KEY) {\n const manifest = manifestByKey.get(ref.key);\n if (!manifest) throw new Error(`compose payload has no manifest for \"${ref.key}\"`);\n return { key: ref.key, manifest, routeConfig: coreRouteConfig };\n }\n const manifest = manifestByKey.get(ref.key);\n const routeConfig = loadedRouteConfigs.get(ref.key);\n if (!manifest || !routeConfig) {\n throw new Error(`composition source \"${ref.key}\" is not fully resolved`);\n }\n return { key: ref.key, manifest, routeConfig };\n },\n rootOptions: coreRouteConfig.rootMeta,\n });\n\n if (dropped.length > 0) {\n mark(`degraded compose: ${dropped.join(\", \")} dropped — client-render`);\n return { routeTree: tree.rootRoute, nav: tree.nav, degraded: true };\n }\n\n if (tree.digest !== payload.digest) {\n console.warn(\n `[Hydrate] Compose digest mismatch (client ${tree.digest} vs server ${payload.digest}); core-only fallback`,\n );\n mark(`DIGEST PARITY FAILURE server=${payload.digest} client=${tree.digest}`);\n return composeCoreOnly(manifests);\n }\n\n mark(\n `tree constructed: ${tree.manifests.length} source(s), ${tree.nav.items.length} nav item(s)`,\n );\n return { routeTree: tree.rootRoute, nav: tree.nav, degraded: false };\n } catch (error) {\n console.error(\"[Hydrate] Client compose failed; core-only fallback:\", error);\n mark(`CLIENT COMPOSE ERROR: ${(error as Error).message}`);\n return composeCoreOnly(manifests);\n }\n}\n\nfunction isServerRendered(): boolean {\n if (document.documentElement.hasAttribute(\"data-everything-ssr\")) {\n return true;\n }\n if (window.__EVERYTHING_DEV_SSR__ !== undefined) {\n return window.__EVERYTHING_DEV_SSR__;\n }\n return window.$_TSR !== undefined;\n}\n\nfunction watchHydrationConsumed() {\n const bootstrapWatch = setInterval(() => {\n if (window.$_TSR === undefined) {\n clearInterval(bootstrapWatch);\n mark(\"hydration consumed ($_TSR deleted — h() ran)\");\n }\n }, 50);\n}\n\nexport async function hydrate(options: CoreHydrateOptions) {\n if (window.__EVERYTHING_DEV_HYDRATE_PROMISE__) {\n return window.__EVERYTHING_DEV_HYDRATE_PROMISE__;\n }\n\n const hydratePromise = (async () => {\n console.log(\"[Hydrate] Starting...\");\n\n const runtimeConfig = options.config ?? getRuntimeConfig();\n const cspNonce = getCspNonce();\n\n if (!runtimeConfig.hostUrl || !runtimeConfig.rpcBase) {\n throw new Error(\"Missing hostUrl or rpcBase in runtime config\");\n }\n\n const [{ QueryClientProvider }, routerFactory] = await Promise.all([\n import(\"@tanstack/react-query\"),\n options.createRouter\n ? Promise.resolve(options.createRouter)\n : import(\"./router-client\").then((m) => m.createRouter as AppRouterFactory),\n ]);\n const [coreRouteConfig] = await Promise.all([\n options.routeConfig().then((mod) => (\"default\" in mod ? mod.default : mod)),\n ]);\n const coreManifest = options.manifest\n ? await options\n .manifest()\n .then((raw) =>\n typeof raw === \"object\" && raw !== null && \"default\" in raw\n ? (raw as { default: unknown }).default\n : raw,\n )\n .then((raw) => parsePluginManifest(raw))\n : undefined;\n const client = options.createQueryClient?.() ?? defaultQueryClient();\n\n mark(`$_TSR present: ${Boolean(window.$_TSR)}`);\n\n const composed = await composeFromPayload(runtimeConfig, coreRouteConfig, coreManifest);\n\n const { router, queryClient: builtClient } = await routerFactory({\n routeTree: composed?.routeTree,\n context: {\n pluginNav: composed?.nav,\n queryClient: client,\n runtimeConfig,\n cspNonce,\n locale: isServerRendered() ? document.documentElement.lang : undefined,\n apiClient: createApiClient({\n hostUrl: runtimeConfig.hostUrl,\n rpcBase: runtimeConfig.rpcBase,\n connectionError: options.apiConnectionError,\n }),\n authClient: createAuthClient({ runtimeConfig, cspNonce }),\n },\n });\n const providerClient = builtClient ?? client;\n\n // A server-rendered page whose compose degraded to core-only would\n // hydrate a DIFFERENT tree than the HTML contains — a guaranteed React\n // hydration failure. Client-render cleanly instead; hydration is only\n // safe when the composed tree is the one the server rendered.\n const canHydrate = isServerRendered() && Boolean(composed) && !composed!.degraded;\n\n if (canHydrate) {\n const { hydrateRoot } = await import(\"react-dom/client\");\n const { RouterClient } = await import(\"@tanstack/react-router/ssr/client\");\n\n console.log(\"[Hydrate] Calling hydrateRoot...\");\n hydrateRoot(\n document,\n <QueryClientProvider client={providerClient}>\n <RouterClient router={router} />\n </QueryClientProvider>,\n );\n watchHydrationConsumed();\n } else {\n const { createRoot } = await import(\"react-dom/client\");\n const { RouterProvider } = await import(\"@tanstack/react-router\");\n\n console.log(\"[Hydrate] Calling createRoot...\");\n createRoot(document).render(\n <QueryClientProvider client={providerClient}>\n <RouterProvider router={router} />\n </QueryClientProvider>,\n );\n }\n\n if (composed?.degraded) {\n const { toast } = await import(\"sonner\");\n toast.error(\"Some application features couldn't load\", {\n id: \"application-compose-error\",\n description: \"Plugin pages are unavailable. Reload to try again.\",\n duration: Number.POSITIVE_INFINITY,\n action: { label: \"Reload\", onClick: () => window.location.reload() },\n });\n }\n\n console.log(\"[Hydrate] Complete!\");\n })().catch((error) => {\n console.error(\"[Hydrate] Failed:\", error);\n window.__EVERYTHING_DEV_HYDRATE_PROMISE__ = undefined;\n const message = document.createElement(\"main\");\n message.setAttribute(\"role\", \"alert\");\n message.dataset.testid = \"application-startup-error\";\n message.className =\n \"min-h-screen flex flex-col items-center justify-center gap-4 bg-background text-foreground p-6\";\n const heading = document.createElement(\"h1\");\n heading.textContent = \"The application couldn't load\";\n const detail = document.createElement(\"p\");\n detail.textContent = \"Check your connection and reload to try again.\";\n const retry = document.createElement(\"button\");\n retry.textContent = \"Reload\";\n retry.className = \"rounded-md border border-border px-4 py-2\";\n retry.addEventListener(\"click\", () => window.location.reload());\n message.append(heading, detail, retry);\n document.body.replaceChildren(message);\n throw error;\n });\n\n window.__EVERYTHING_DEV_HYDRATE_PROMISE__ = hydratePromise;\n return hydratePromise;\n}\n\nexport default hydrate;\n"],"mappings":"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"}
|
package/dist/ui/i18n.cjs
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_locale = require('./locale.cjs');
|
|
3
|
+
const require_message_catalogs = require('./message-catalogs.cjs');
|
|
4
|
+
let _lingui_core = require("@lingui/core");
|
|
5
|
+
let _lingui_react = require("@lingui/react");
|
|
6
|
+
let react = require("react");
|
|
7
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
|
+
|
|
9
|
+
//#region src/ui/i18n.tsx
|
|
10
|
+
const SharedLocaleContext = (0, react.createContext)(null);
|
|
11
|
+
const browserStores = /* @__PURE__ */ new Map();
|
|
12
|
+
function createLocaleStore(initialLocale) {
|
|
13
|
+
let locale = initialLocale;
|
|
14
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
15
|
+
return {
|
|
16
|
+
get: () => locale,
|
|
17
|
+
set: (nextLocale) => {
|
|
18
|
+
if (nextLocale === locale) return;
|
|
19
|
+
locale = nextLocale;
|
|
20
|
+
for (const listener of listeners) listener();
|
|
21
|
+
},
|
|
22
|
+
subscribe: (listener) => {
|
|
23
|
+
listeners.add(listener);
|
|
24
|
+
return () => listeners.delete(listener);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function createLocaleRuntime({ locales, defaultLocale, cookieName }) {
|
|
29
|
+
const LocaleContext = (0, react.createContext)(null);
|
|
30
|
+
const getBrowserLocales = () => {
|
|
31
|
+
if (typeof navigator === "undefined") return [];
|
|
32
|
+
if (Array.isArray(navigator.languages)) return navigator.languages;
|
|
33
|
+
return navigator.language ? [navigator.language] : [];
|
|
34
|
+
};
|
|
35
|
+
const detectLocale = (preferredLocale) => require_locale.resolveLocale({
|
|
36
|
+
preferredLocale,
|
|
37
|
+
cookie: typeof document === "undefined" ? "" : document.cookie,
|
|
38
|
+
browserLocales: getBrowserLocales(),
|
|
39
|
+
locales,
|
|
40
|
+
defaultLocale,
|
|
41
|
+
cookieName
|
|
42
|
+
});
|
|
43
|
+
const getStore = (initialLocale) => {
|
|
44
|
+
const initial = require_locale.matchLocale(initialLocale, locales) ?? detectLocale();
|
|
45
|
+
if (typeof window === "undefined") return createLocaleStore(initial);
|
|
46
|
+
const existing = browserStores.get(cookieName);
|
|
47
|
+
if (existing) return existing;
|
|
48
|
+
const store = createLocaleStore(initial);
|
|
49
|
+
browserStores.set(cookieName, store);
|
|
50
|
+
return store;
|
|
51
|
+
};
|
|
52
|
+
function LocaleProvider({ children, messages, initialLocale, preferredLocale, onLocaleChange }) {
|
|
53
|
+
const parent = (0, react.useContext)(SharedLocaleContext);
|
|
54
|
+
const sharedParent = parent?.cookieName === cookieName ? parent : null;
|
|
55
|
+
const resolvedInitial = require_locale.matchLocale(preferredLocale, locales) ?? require_locale.matchLocale(initialLocale, locales) ?? require_locale.matchLocale(sharedParent?.locale, locales);
|
|
56
|
+
const serverLocale = resolvedInitial ?? defaultLocale;
|
|
57
|
+
const store = (0, react.useMemo)(() => getStore(resolvedInitial), []);
|
|
58
|
+
const locale = (0, react.useSyncExternalStore)(store.subscribe, store.get, () => serverLocale);
|
|
59
|
+
const i18n = (0, react.useMemo)(() => (0, _lingui_core.setupI18n)({
|
|
60
|
+
locale,
|
|
61
|
+
messages: { [locale]: messages(locale) }
|
|
62
|
+
}), [locale, messages]);
|
|
63
|
+
(0, react.useEffect)(() => {
|
|
64
|
+
if (sharedParent) return;
|
|
65
|
+
const resolved = require_locale.matchLocale(preferredLocale, locales);
|
|
66
|
+
if (resolved) {
|
|
67
|
+
Reflect.set(document, "cookie", require_locale.serializeLocaleCookie(cookieName, resolved, window.location.protocol === "https:"));
|
|
68
|
+
store.set(resolved);
|
|
69
|
+
}
|
|
70
|
+
}, [
|
|
71
|
+
preferredLocale,
|
|
72
|
+
sharedParent,
|
|
73
|
+
store
|
|
74
|
+
]);
|
|
75
|
+
(0, react.useEffect)(() => {
|
|
76
|
+
if (sharedParent) return;
|
|
77
|
+
const previousLocale = document.documentElement.lang;
|
|
78
|
+
document.documentElement.lang = locale;
|
|
79
|
+
return () => {
|
|
80
|
+
document.documentElement.lang = previousLocale;
|
|
81
|
+
};
|
|
82
|
+
}, [locale, sharedParent]);
|
|
83
|
+
const selectLocale = (0, react.useCallback)(async (nextLocale) => {
|
|
84
|
+
if (!locales.includes(nextLocale)) return;
|
|
85
|
+
if (sharedParent && !onLocaleChange) {
|
|
86
|
+
await sharedParent.selectLocale(nextLocale);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (onLocaleChange) await onLocaleChange(nextLocale);
|
|
90
|
+
if (typeof document !== "undefined") Reflect.set(document, "cookie", require_locale.serializeLocaleCookie(cookieName, nextLocale, typeof window !== "undefined" && window.location.protocol === "https:"));
|
|
91
|
+
store.set(nextLocale);
|
|
92
|
+
}, [
|
|
93
|
+
onLocaleChange,
|
|
94
|
+
sharedParent,
|
|
95
|
+
store
|
|
96
|
+
]);
|
|
97
|
+
const value = (0, react.useMemo)(() => ({
|
|
98
|
+
locale,
|
|
99
|
+
selectLocale
|
|
100
|
+
}), [locale, selectLocale]);
|
|
101
|
+
const sharedValue = (0, react.useMemo)(() => ({
|
|
102
|
+
cookieName,
|
|
103
|
+
locale,
|
|
104
|
+
selectLocale: async (next) => {
|
|
105
|
+
const matched = require_locale.matchLocale(next, locales);
|
|
106
|
+
if (matched) await selectLocale(matched);
|
|
107
|
+
}
|
|
108
|
+
}), [locale, selectLocale]);
|
|
109
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SharedLocaleContext.Provider, {
|
|
110
|
+
value: sharedValue,
|
|
111
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LocaleContext.Provider, {
|
|
112
|
+
value,
|
|
113
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_lingui_react.I18nProvider, {
|
|
114
|
+
i18n,
|
|
115
|
+
children
|
|
116
|
+
})
|
|
117
|
+
})
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function useLocale() {
|
|
121
|
+
const value = (0, react.useContext)(LocaleContext);
|
|
122
|
+
if (!value) throw new Error("useLocale must be used within LocaleProvider");
|
|
123
|
+
return value;
|
|
124
|
+
}
|
|
125
|
+
function useTranslation() {
|
|
126
|
+
const { _ } = (0, _lingui_react.useLingui)();
|
|
127
|
+
return (0, react.useCallback)((id, values) => _(id, values), [_]);
|
|
128
|
+
}
|
|
129
|
+
const getLocale = () => require_locale.matchLocale(browserStores.get(cookieName)?.get(), locales) ?? detectLocale();
|
|
130
|
+
return {
|
|
131
|
+
LocaleProvider,
|
|
132
|
+
useLocale,
|
|
133
|
+
useTranslation,
|
|
134
|
+
detectLocale,
|
|
135
|
+
getLocale
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
//#endregion
|
|
140
|
+
Object.defineProperty(exports, 'Trans', {
|
|
141
|
+
enumerable: true,
|
|
142
|
+
get: function () {
|
|
143
|
+
return _lingui_react.Trans;
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
exports.createLocaleRuntime = createLocaleRuntime;
|
|
147
|
+
exports.createMessageCatalogs = require_message_catalogs.createMessageCatalogs;
|
|
148
|
+
exports.matchLocale = require_locale.matchLocale;
|
|
149
|
+
exports.readAcceptLanguage = require_locale.readAcceptLanguage;
|
|
150
|
+
exports.readLocaleCookie = require_locale.readLocaleCookie;
|
|
151
|
+
exports.resolveLocale = require_locale.resolveLocale;
|
|
152
|
+
exports.serializeLocaleCookie = require_locale.serializeLocaleCookie;
|
|
153
|
+
//# sourceMappingURL=i18n.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.cjs","names":["createContext","resolveLocale","matchLocale","useContext","useMemo","useSyncExternalStore","setupI18n","serializeLocaleCookie","useCallback","I18nProvider","useLingui"],"sources":["../../src/ui/i18n.tsx"],"sourcesContent":["import { type Messages, setupI18n } from \"@lingui/core\";\nimport { I18nProvider, useLingui } from \"@lingui/react\";\nimport {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useSyncExternalStore,\n} from \"react\";\nimport { matchLocale, resolveLocale, serializeLocaleCookie } from \"./locale\";\n\nexport { Trans } from \"@lingui/react\";\nexport type { LocaleOptions } from \"./locale\";\nexport {\n matchLocale,\n readAcceptLanguage,\n readLocaleCookie,\n resolveLocale,\n serializeLocaleCookie,\n} from \"./locale\";\nexport { createMessageCatalogs } from \"./message-catalogs\";\n\ntype SharedLocaleState = {\n cookieName: string;\n locale: string;\n selectLocale: (locale: string) => Promise<void>;\n};\n\nconst SharedLocaleContext = createContext<SharedLocaleState | null>(null);\n\ntype LocaleStore = {\n get: () => string;\n set: (locale: string) => void;\n subscribe: (listener: () => void) => () => void;\n};\n\nconst browserStores = new Map<string, LocaleStore>();\n\nfunction createLocaleStore(initialLocale: string): LocaleStore {\n let locale = initialLocale;\n const listeners = new Set<() => void>();\n return {\n get: () => locale,\n set: (nextLocale) => {\n if (nextLocale === locale) return;\n locale = nextLocale;\n for (const listener of listeners) listener();\n },\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n };\n}\n\nexport function createLocaleRuntime<const Locale extends string>({\n locales,\n defaultLocale,\n cookieName,\n}: {\n locales: readonly Locale[];\n defaultLocale: Locale;\n cookieName: string;\n}) {\n type ContextValue = {\n locale: Locale;\n selectLocale: (locale: Locale) => Promise<void>;\n };\n\n const LocaleContext = createContext<ContextValue | null>(null);\n\n const getBrowserLocales = (): readonly string[] => {\n if (typeof navigator === \"undefined\") return [];\n if (Array.isArray(navigator.languages)) return navigator.languages;\n return navigator.language ? [navigator.language] : [];\n };\n\n const detectLocale = (preferredLocale?: string | null): Locale =>\n resolveLocale({\n preferredLocale,\n cookie: typeof document === \"undefined\" ? \"\" : document.cookie,\n browserLocales: getBrowserLocales(),\n locales,\n defaultLocale,\n cookieName,\n });\n\n const getStore = (initialLocale?: string | null) => {\n const initial = matchLocale(initialLocale, locales) ?? detectLocale();\n if (typeof window === \"undefined\") return createLocaleStore(initial);\n const existing = browserStores.get(cookieName);\n if (existing) return existing;\n const store = createLocaleStore(initial);\n browserStores.set(cookieName, store);\n return store;\n };\n\n function LocaleProvider({\n children,\n messages,\n initialLocale,\n preferredLocale,\n onLocaleChange,\n }: {\n children: ReactNode;\n messages: (locale: Locale) => Messages;\n initialLocale?: string | null;\n preferredLocale?: string | null;\n onLocaleChange?: (locale: Locale) => void | Promise<void>;\n }) {\n const parent = useContext(SharedLocaleContext);\n const sharedParent = parent?.cookieName === cookieName ? parent : null;\n const resolvedInitial =\n matchLocale(preferredLocale, locales) ??\n matchLocale(initialLocale, locales) ??\n matchLocale(sharedParent?.locale, locales);\n const serverLocale = resolvedInitial ?? defaultLocale;\n const store = useMemo(() => getStore(resolvedInitial), []);\n const locale = useSyncExternalStore(store.subscribe, store.get, () => serverLocale) as Locale;\n const i18n = useMemo(\n () => setupI18n({ locale, messages: { [locale]: messages(locale) } }),\n [locale, messages],\n );\n\n useEffect(() => {\n if (sharedParent) return;\n const resolved = matchLocale(preferredLocale, locales);\n if (resolved) {\n Reflect.set(\n document,\n \"cookie\",\n serializeLocaleCookie(cookieName, resolved, window.location.protocol === \"https:\"),\n );\n store.set(resolved);\n }\n }, [preferredLocale, sharedParent, store]);\n\n useEffect(() => {\n if (sharedParent) return;\n const previousLocale = document.documentElement.lang;\n document.documentElement.lang = locale;\n return () => {\n document.documentElement.lang = previousLocale;\n };\n }, [locale, sharedParent]);\n\n const selectLocale = useCallback(\n async (nextLocale: Locale) => {\n if (!locales.includes(nextLocale)) return;\n if (sharedParent && !onLocaleChange) {\n await sharedParent.selectLocale(nextLocale);\n return;\n }\n if (onLocaleChange) await onLocaleChange(nextLocale);\n if (typeof document !== \"undefined\") {\n Reflect.set(\n document,\n \"cookie\",\n serializeLocaleCookie(\n cookieName,\n nextLocale,\n typeof window !== \"undefined\" && window.location.protocol === \"https:\",\n ),\n );\n }\n store.set(nextLocale);\n },\n [onLocaleChange, sharedParent, store],\n );\n\n const value = useMemo(() => ({ locale, selectLocale }), [locale, selectLocale]);\n const sharedValue = useMemo(\n () => ({\n cookieName,\n locale,\n selectLocale: async (next: string) => {\n const matched = matchLocale(next, locales);\n if (matched) await selectLocale(matched);\n },\n }),\n [locale, selectLocale],\n );\n return (\n <SharedLocaleContext.Provider value={sharedValue}>\n <LocaleContext.Provider value={value}>\n <I18nProvider i18n={i18n}>{children}</I18nProvider>\n </LocaleContext.Provider>\n </SharedLocaleContext.Provider>\n );\n }\n\n function useLocale(): ContextValue {\n const value = useContext(LocaleContext);\n if (!value) throw new Error(\"useLocale must be used within LocaleProvider\");\n return value;\n }\n\n function useTranslation<MessageId extends string>() {\n const { _ } = useLingui();\n return useCallback(\n (id: MessageId, values?: Record<string, string | number>) => _(id, values),\n [_],\n );\n }\n\n const getLocale = (): Locale =>\n matchLocale(browserStores.get(cookieName)?.get(), locales) ?? detectLocale();\n\n return { LocaleProvider, useLocale, useTranslation, detectLocale, getLocale };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { LocaleOptions, matchLocale, readAcceptLanguage, readLocaleCookie, resolveLocale, serializeLocaleCookie } from "./locale.cjs";
|
|
2
|
+
import { createMessageCatalogs } from "./message-catalogs.cjs";
|
|
3
|
+
import { Messages } from "@lingui/core";
|
|
4
|
+
import { ReactNode } from "react";
|
|
5
|
+
import { Trans } from "@lingui/react";
|
|
6
|
+
//#region src/ui/i18n.d.ts
|
|
7
|
+
declare function createLocaleRuntime<const Locale extends string>({ locales, defaultLocale, cookieName }: {
|
|
8
|
+
locales: readonly Locale[];
|
|
9
|
+
defaultLocale: Locale;
|
|
10
|
+
cookieName: string;
|
|
11
|
+
}): {
|
|
12
|
+
LocaleProvider: ({ children, messages, initialLocale, preferredLocale, onLocaleChange }: {
|
|
13
|
+
children: ReactNode;
|
|
14
|
+
messages: (locale: Locale) => Messages;
|
|
15
|
+
initialLocale?: string | null;
|
|
16
|
+
preferredLocale?: string | null;
|
|
17
|
+
onLocaleChange?: (locale: Locale) => void | Promise<void>;
|
|
18
|
+
}) => import("react").JSX.Element;
|
|
19
|
+
useLocale: () => {
|
|
20
|
+
locale: Locale;
|
|
21
|
+
selectLocale: (locale: Locale) => Promise<void>;
|
|
22
|
+
};
|
|
23
|
+
useTranslation: <MessageId extends string>() => (id: MessageId, values?: Record<string, string | number>) => string;
|
|
24
|
+
detectLocale: (preferredLocale?: string | null) => Locale;
|
|
25
|
+
getLocale: () => Locale;
|
|
26
|
+
};
|
|
27
|
+
//#endregion
|
|
28
|
+
export { type LocaleOptions, Trans, createLocaleRuntime, createMessageCatalogs, matchLocale, readAcceptLanguage, readLocaleCookie, resolveLocale, serializeLocaleCookie };
|
|
29
|
+
//# sourceMappingURL=i18n.d.cts.map
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { LocaleOptions, matchLocale, readAcceptLanguage, readLocaleCookie, resolveLocale, serializeLocaleCookie } from "./locale.mjs";
|
|
2
|
+
import { createMessageCatalogs } from "./message-catalogs.mjs";
|
|
3
|
+
import { Messages } from "@lingui/core";
|
|
4
|
+
import { Trans } from "@lingui/react";
|
|
5
|
+
import { ReactNode } from "react";
|
|
6
|
+
//#region src/ui/i18n.d.ts
|
|
7
|
+
declare function createLocaleRuntime<const Locale extends string>({ locales, defaultLocale, cookieName }: {
|
|
8
|
+
locales: readonly Locale[];
|
|
9
|
+
defaultLocale: Locale;
|
|
10
|
+
cookieName: string;
|
|
11
|
+
}): {
|
|
12
|
+
LocaleProvider: ({ children, messages, initialLocale, preferredLocale, onLocaleChange }: {
|
|
13
|
+
children: ReactNode;
|
|
14
|
+
messages: (locale: Locale) => Messages;
|
|
15
|
+
initialLocale?: string | null;
|
|
16
|
+
preferredLocale?: string | null;
|
|
17
|
+
onLocaleChange?: (locale: Locale) => void | Promise<void>;
|
|
18
|
+
}) => import("react").JSX.Element;
|
|
19
|
+
useLocale: () => {
|
|
20
|
+
locale: Locale;
|
|
21
|
+
selectLocale: (locale: Locale) => Promise<void>;
|
|
22
|
+
};
|
|
23
|
+
useTranslation: <MessageId extends string>() => (id: MessageId, values?: Record<string, string | number>) => string;
|
|
24
|
+
detectLocale: (preferredLocale?: string | null) => Locale;
|
|
25
|
+
getLocale: () => Locale;
|
|
26
|
+
};
|
|
27
|
+
//#endregion
|
|
28
|
+
export { type LocaleOptions, Trans, createLocaleRuntime, createMessageCatalogs, matchLocale, readAcceptLanguage, readLocaleCookie, resolveLocale, serializeLocaleCookie };
|
|
29
|
+
//# sourceMappingURL=i18n.d.mts.map
|