everything-dev 1.53.2 → 2.0.0-rc.1
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 +627 -199
- 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 +616 -197
- 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
package/dist/dev-session.mjs
CHANGED
|
@@ -1,39 +1,38 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
1
|
+
import { getProcessEnv } from "./env/process-env.mjs";
|
|
2
|
+
import { DevGeneratedEnvLive, DevRuntimeConfig, DevRuntimeConfigLive, ServiceDescriptorMap, ServiceDescriptorMapLive, isAuthMirrorPluginEntry } from "./service-descriptor.mjs";
|
|
3
|
+
import { createLogPipeline, isDebug, resolveLogLevel } from "./dev-log-pipeline.mjs";
|
|
4
|
+
import { isPidAlive, readRegistry, registerStandalone, unregisterPid, updateChildPids, writeRegistry } from "./process-registry.mjs";
|
|
5
|
+
import { probePortBindable } from "./app.mjs";
|
|
6
|
+
import { ShellEnvLive } from "./env/project-env.mjs";
|
|
7
|
+
import { ownerOfPort } from "./infra/port-ownership.mjs";
|
|
7
8
|
import { getProcessStates, makeDevProcess } from "./orchestrator.mjs";
|
|
8
|
-
import {
|
|
9
|
-
import
|
|
9
|
+
import { createDevLogger, formatLogLine } from "./dev-logs.mjs";
|
|
10
|
+
import { reapGroup } from "./process-kill.mjs";
|
|
11
|
+
import { createDevRenderer } from "./components/dev-render.mjs";
|
|
12
|
+
import { Clock, DateTime, Deferred, Effect, Exit, Layer } from "effect";
|
|
10
13
|
|
|
11
14
|
//#region src/dev-session.ts
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
];
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return SSR_LOG_ALLOWLIST.some((pattern) => pattern.test(line));
|
|
29
|
-
}
|
|
30
|
-
return !LOG_NOISE_PATTERNS.some((pattern) => pattern.test(line));
|
|
15
|
+
const adoptOrphanedChildren = (configDir) => {
|
|
16
|
+
try {
|
|
17
|
+
const entries = readRegistry().filter((entry) => entry.pid > 1 && entry.configDir === configDir && !isPidAlive(entry.pid));
|
|
18
|
+
if (entries.length === 0) return;
|
|
19
|
+
const reaped = [];
|
|
20
|
+
for (const entry of entries) for (const childPid of entry.childPids ?? []) {
|
|
21
|
+
if (childPid === process.pid) continue;
|
|
22
|
+
if (isPidAlive(childPid)) {
|
|
23
|
+
reapGroup(childPid);
|
|
24
|
+
reaped.push(childPid);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (reaped.length > 0) console.error(`[Dev] Reaped ${reaped.length} orphaned child process(es) from dead session(s): ${reaped.join(", ")}`);
|
|
28
|
+
const deadPids = new Set(entries.map((entry) => entry.pid));
|
|
29
|
+
writeRegistry(readRegistry().filter((entry) => !deadPids.has(entry.pid)));
|
|
30
|
+
} catch {}
|
|
31
31
|
};
|
|
32
32
|
const isInteractiveSupported = () => {
|
|
33
33
|
return process.stdin.isTTY === true && process.stdout.isTTY === true;
|
|
34
34
|
};
|
|
35
35
|
const STARTUP_ORDER = [
|
|
36
|
-
"ui-ssr",
|
|
37
36
|
"ui",
|
|
38
37
|
"auth",
|
|
39
38
|
"api",
|
|
@@ -51,29 +50,34 @@ const sortByOrder = (packages) => {
|
|
|
51
50
|
return aIdx - bIdx;
|
|
52
51
|
});
|
|
53
52
|
};
|
|
54
|
-
function
|
|
55
|
-
|
|
56
|
-
const prefix = entry.isError ? "ERR" : "OUT";
|
|
57
|
-
return `[${ts}] [${entry.source}] [${prefix}] ${entry.line}`;
|
|
58
|
-
}
|
|
59
|
-
const runDevSession = (orchestrator, onShutdownReady) => Effect.gen(function* () {
|
|
60
|
-
const configDir = getProjectRoot();
|
|
53
|
+
const runDevSession = (configDir, orchestrator, onShutdownReady) => Effect.gen(function* () {
|
|
54
|
+
adoptOrphanedChildren(configDir);
|
|
61
55
|
const services = yield* ServiceDescriptorMap;
|
|
62
56
|
const runtimeConfig = yield* DevRuntimeConfig;
|
|
63
57
|
const orderedPackages = sortByOrder(orchestrator.packages);
|
|
64
58
|
const initialProcesses = getProcessStates(orderedPackages, services, orchestrator.port);
|
|
65
|
-
if (
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
59
|
+
if (isDebug(getProcessEnv("DEBUG"))) {
|
|
60
|
+
yield* Effect.logError(`[DEBUG session] orchestrator.packages: ${orchestrator.packages.join(", ")}`);
|
|
61
|
+
yield* Effect.logError(`[DEBUG session] orderedPackages: ${orderedPackages.join(", ")}`);
|
|
62
|
+
yield* Effect.logError(`[DEBUG session] services keys: ${[...services.keys()].join(", ")}`);
|
|
63
|
+
yield* Effect.logError(`[DEBUG session] initialProcesses: ${initialProcesses.map((p) => `${p.name}=${p.source}`).join(", ")}`);
|
|
70
64
|
}
|
|
71
65
|
const logger = yield* Effect.promise(() => createDevLogger(configDir, orchestrator.description));
|
|
72
66
|
const shutdown = yield* Deferred.make();
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
67
|
+
const effectContext = yield* Effect.context();
|
|
68
|
+
const controls = {
|
|
69
|
+
requestShutdown: () => {
|
|
70
|
+
Effect.runPromiseWith(effectContext)(Deferred.succeed(shutdown, void 0));
|
|
71
|
+
},
|
|
72
|
+
emergencyKill: () => {},
|
|
73
|
+
requestShutdownEscalating: () => {},
|
|
74
|
+
forceExit: () => {},
|
|
75
|
+
restoreView: () => {},
|
|
76
|
+
rearmForceExitTimer: () => {}
|
|
77
|
+
};
|
|
78
|
+
onShutdownReady?.(controls);
|
|
79
|
+
const isWorkspaceChild = getProcessEnv("BOS_WORKSPACE_CHILD") === "1";
|
|
80
|
+
let ownedPorts = [];
|
|
77
81
|
if (!isWorkspaceChild) {
|
|
78
82
|
const regPorts = {};
|
|
79
83
|
const addPort = (key, value) => {
|
|
@@ -83,50 +87,107 @@ const runDevSession = (orchestrator, onShutdownReady) => Effect.gen(function* ()
|
|
|
83
87
|
addPort("api", runtimeConfig.api.port);
|
|
84
88
|
addPort("ui", runtimeConfig.ui.port);
|
|
85
89
|
addPort("auth", runtimeConfig.auth?.port);
|
|
86
|
-
addPort("uiSsr", runtimeConfig.ui.ssrUrl ? Number.parseInt(new URL(runtimeConfig.ui.ssrUrl).port, 10) : void 0);
|
|
87
90
|
if (runtimeConfig.plugins) for (const [id, plugin] of Object.entries(runtimeConfig.plugins)) {
|
|
88
|
-
addPort(`plugin:${id}`, plugin.port);
|
|
91
|
+
if (!isAuthMirrorPluginEntry(runtimeConfig.auth, id, plugin)) addPort(`plugin:${id}`, plugin.port);
|
|
89
92
|
addPort(`plugin-ui:${id}`, plugin.ui?.port);
|
|
90
93
|
}
|
|
91
94
|
registerStandalone({
|
|
92
95
|
pid: process.pid,
|
|
93
96
|
configDir,
|
|
94
97
|
ports: regPorts,
|
|
95
|
-
startedAt:
|
|
98
|
+
startedAt: yield* Clock.currentTimeMillis,
|
|
96
99
|
description: orchestrator.description
|
|
97
100
|
});
|
|
101
|
+
ownedPorts = Object.values(regPorts);
|
|
98
102
|
}
|
|
99
|
-
const allLogs = [];
|
|
100
103
|
let view = null;
|
|
101
104
|
let shouldExportLogs = false;
|
|
102
|
-
const
|
|
105
|
+
const logLevel = resolveLogLevel();
|
|
106
|
+
const allLogs = [];
|
|
107
|
+
const pipeline = createLogPipeline({
|
|
108
|
+
level: logLevel,
|
|
109
|
+
sinks: {
|
|
110
|
+
display: (event) => {
|
|
111
|
+
view?.addLog(event.source, event.line, event.level === "error");
|
|
112
|
+
},
|
|
113
|
+
file: (event) => {
|
|
114
|
+
if (orchestrator.noLogs) return;
|
|
115
|
+
logger.write(event);
|
|
116
|
+
},
|
|
117
|
+
export: (event) => {
|
|
118
|
+
allLogs.push(event);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
const useInteractive = isInteractiveSupported() && orchestrator.interactive !== false;
|
|
123
|
+
view = createDevRenderer(initialProcesses, orchestrator.description, orchestrator.env, () => controls.requestShutdownEscalating(), () => {
|
|
103
124
|
shouldExportLogs = true;
|
|
104
|
-
|
|
125
|
+
controls.requestShutdownEscalating();
|
|
126
|
+
}, {
|
|
127
|
+
interactive: useInteractive,
|
|
128
|
+
onForceExit: () => controls.forceExit()
|
|
129
|
+
});
|
|
130
|
+
controls.restoreView = () => {
|
|
131
|
+
if (useInteractive) view?.unmount();
|
|
105
132
|
};
|
|
106
|
-
view = orchestrator.interactive ?? isInteractiveSupported() ? renderDevView(initialProcesses, orchestrator.description, orchestrator.env, () => void Effect.runPromise(Deferred.succeed(shutdown, void 0)), requestShutdownAndExport) : renderStreamingView(initialProcesses, orchestrator.description, orchestrator.env, () => void Effect.runPromise(Deferred.succeed(shutdown, void 0)));
|
|
107
133
|
const callbacks = {
|
|
108
134
|
onStatus: (name, status, message) => {
|
|
109
135
|
view?.updateProcess(name, status, message);
|
|
110
136
|
},
|
|
111
137
|
onLog: (name, line, isError) => {
|
|
112
|
-
|
|
113
|
-
id: `${Date.now()}-${allLogs.length + 1}`,
|
|
138
|
+
pipeline.ingest({
|
|
114
139
|
source: name,
|
|
115
140
|
line,
|
|
116
|
-
timestamp: Date.now(),
|
|
117
141
|
isError
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
const spawned = [];
|
|
146
|
+
controls.emergencyKill = () => {
|
|
147
|
+
for (const handle of spawned) {
|
|
148
|
+
if (handle.pid === void 0) continue;
|
|
149
|
+
reapGroup(handle.pid);
|
|
122
150
|
}
|
|
123
151
|
};
|
|
152
|
+
yield* Effect.addFinalizer(() => Effect.gen(function* () {
|
|
153
|
+
controls.rearmForceExitTimer();
|
|
154
|
+
yield* Effect.forEach(spawned, (h) => h.kill.pipe(Effect.ignore), { concurrency: "unbounded" });
|
|
155
|
+
yield* Effect.sleep("200 millis");
|
|
156
|
+
for (const port of ownedPorts) if (!(yield* probePortBindable(port))) {
|
|
157
|
+
const owner = yield* ownerOfPort(port);
|
|
158
|
+
yield* Effect.logError(`[Dev] Port ${port} still bound after teardown${owner ? ` — pid ${owner.pid} (${owner.command})` : " — owner unknown (lsof unavailable)"}`);
|
|
159
|
+
}
|
|
160
|
+
if (!isWorkspaceChild) yield* Effect.sync(() => {
|
|
161
|
+
try {
|
|
162
|
+
unregisterPid(process.pid);
|
|
163
|
+
} catch {}
|
|
164
|
+
});
|
|
165
|
+
pipeline.flush();
|
|
166
|
+
view?.unmount();
|
|
167
|
+
if (shouldExportLogs) {
|
|
168
|
+
const now = yield* Clock.currentTimeMillis;
|
|
169
|
+
const startedMs = allLogs[0]?.timestamp || now;
|
|
170
|
+
yield* Effect.log("");
|
|
171
|
+
yield* Effect.log("═".repeat(70));
|
|
172
|
+
yield* Effect.log(` SESSION LOGS: ${orchestrator.description}`);
|
|
173
|
+
yield* Effect.log(` Started: ${DateTime.formatIso(DateTime.makeUnsafe(startedMs))}`);
|
|
174
|
+
yield* Effect.log(` Filtered entries: ${allLogs.length} (level: ${logLevel})`);
|
|
175
|
+
yield* Effect.log("═".repeat(70));
|
|
176
|
+
yield* Effect.log("");
|
|
177
|
+
for (const event of allLogs) yield* Effect.log(formatLogLine(event));
|
|
178
|
+
yield* Effect.log("");
|
|
179
|
+
yield* Effect.log("═".repeat(70));
|
|
180
|
+
yield* Effect.log(` Full logs saved to: ${logger.logFile}`);
|
|
181
|
+
yield* Effect.log("═".repeat(70));
|
|
182
|
+
yield* Effect.log("");
|
|
183
|
+
}
|
|
184
|
+
}));
|
|
124
185
|
const startProcess = (pkg) => {
|
|
125
186
|
const portOverride = pkg === "host" ? orchestrator.port : void 0;
|
|
126
|
-
return makeDevProcess(pkg, callbacks, portOverride).pipe(Effect.tapError((err) => Effect.sync(() => {
|
|
127
|
-
callbacks.onLog(pkg, `Failed to start: ${err}`, true);
|
|
187
|
+
return makeDevProcess(pkg, callbacks, portOverride).pipe(Effect.tap((handle) => Effect.sync(() => spawned.push(handle))), Effect.flatMap((handle) => Effect.acquireRelease(Effect.succeed(handle), () => handle.kill.pipe(Effect.ignore))), Effect.tapError((err) => Effect.sync(() => {
|
|
188
|
+
callbacks.onLog(pkg, `Failed to start: ${String(err)}`, true);
|
|
128
189
|
callbacks.onStatus(pkg, "error");
|
|
129
|
-
})), Effect.
|
|
190
|
+
})), Effect.orElseSucceed(() => ({
|
|
130
191
|
name: pkg,
|
|
131
192
|
pid: void 0,
|
|
132
193
|
kill: Effect.void,
|
|
@@ -135,75 +196,89 @@ const runDevSession = (orchestrator, onShutdownReady) => Effect.gen(function* ()
|
|
|
135
196
|
})));
|
|
136
197
|
};
|
|
137
198
|
const startGroup = (packages) => Effect.forEach(packages, startProcess, { concurrency: "unbounded" });
|
|
138
|
-
const awaitReady = (pkg, handle) => handle.waitForReady.pipe(Effect.timeout("120 seconds"), Effect.
|
|
199
|
+
const awaitReady = (pkg, handle) => handle.waitForReady.pipe(Effect.timeout("120 seconds"), Effect.catch((err) => Effect.sync(() => {
|
|
139
200
|
callbacks.onLog(pkg, `Timed out or failed: ${err instanceof Error ? err.message : String(err)}`, true);
|
|
140
201
|
})));
|
|
141
202
|
const nonHostPackages = orderedPackages.filter((pkg) => pkg !== "host");
|
|
142
203
|
const hostPackages = orderedPackages.filter((pkg) => pkg === "host");
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
handle,
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
handle,
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
204
|
+
const startupPhase = Effect.gen(function* () {
|
|
205
|
+
const nonHostHandles = yield* startGroup(nonHostPackages);
|
|
206
|
+
yield* Effect.forEach(nonHostHandles.map((handle, index) => ({
|
|
207
|
+
handle,
|
|
208
|
+
pkg: nonHostPackages[index] ?? handle.name
|
|
209
|
+
})), ({ handle, pkg }) => awaitReady(pkg, handle), { concurrency: "unbounded" });
|
|
210
|
+
const hostHandles = yield* startGroup(hostPackages);
|
|
211
|
+
yield* Effect.forEach(hostHandles.map((handle, index) => ({
|
|
212
|
+
handle,
|
|
213
|
+
pkg: hostPackages[index] ?? handle.name
|
|
214
|
+
})), ({ handle, pkg }) => awaitReady(pkg, handle), { concurrency: "unbounded" });
|
|
215
|
+
return {
|
|
216
|
+
nonHostHandles,
|
|
217
|
+
hostHandles
|
|
218
|
+
};
|
|
219
|
+
});
|
|
220
|
+
const startup = yield* Effect.raceFirst(startupPhase, Deferred.await(shutdown).pipe(Effect.as(null)));
|
|
221
|
+
if (startup === null) return;
|
|
222
|
+
const childPids = [...startup.nonHostHandles, ...startup.hostHandles].map((handle) => Number(handle.pid)).filter((pid) => Number.isFinite(pid) && pid > 1 && pid !== process.pid);
|
|
223
|
+
if (!isWorkspaceChild && childPids.length > 0) yield* Effect.sync(() => {
|
|
224
|
+
try {
|
|
225
|
+
updateChildPids(process.pid, childPids);
|
|
160
226
|
} catch {}
|
|
161
|
-
|
|
162
|
-
console.log("\n");
|
|
163
|
-
console.log("═".repeat(70));
|
|
164
|
-
console.log(` SESSION LOGS: ${orchestrator.description}`);
|
|
165
|
-
console.log(` Started: ${new Date(allLogs[0]?.timestamp || Date.now()).toISOString()}`);
|
|
166
|
-
console.log(` Total entries: ${allLogs.length}`);
|
|
167
|
-
console.log("═".repeat(70));
|
|
168
|
-
console.log("");
|
|
169
|
-
for (const entry of allLogs) console.log(formatLogLine(entry));
|
|
170
|
-
console.log("");
|
|
171
|
-
console.log("═".repeat(70));
|
|
172
|
-
console.log(` Full logs saved to: ${logger.logFile}`);
|
|
173
|
-
console.log("═".repeat(70));
|
|
174
|
-
console.log("");
|
|
175
|
-
}
|
|
176
|
-
}));
|
|
227
|
+
});
|
|
177
228
|
yield* Deferred.await(shutdown);
|
|
178
229
|
});
|
|
179
|
-
const runApp = (orchestrator, services, runtimeConfig) => {
|
|
180
|
-
let
|
|
230
|
+
const runApp = (configDir, orchestrator, services, runtimeConfig, envGenerated, shellEnv) => {
|
|
231
|
+
let controls = null;
|
|
181
232
|
let signalCount = 0;
|
|
182
233
|
let forceExitTimer = null;
|
|
183
234
|
const forceExit = () => {
|
|
235
|
+
controls?.restoreView();
|
|
184
236
|
console.log("\n[Dev] Force exit");
|
|
237
|
+
controls?.emergencyKill();
|
|
185
238
|
process.exit(0);
|
|
186
239
|
};
|
|
187
|
-
const
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
240
|
+
const initialPpid = process.ppid;
|
|
241
|
+
const orphanWatch = setInterval(() => {
|
|
242
|
+
if (process.ppid !== initialPpid) {
|
|
243
|
+
console.error("\n[Dev] Parent process died — force exiting (orphaned service tree)");
|
|
244
|
+
forceExit();
|
|
245
|
+
}
|
|
246
|
+
}, 200);
|
|
247
|
+
orphanWatch.unref?.();
|
|
248
|
+
const requestShutdownEscalating = () => {
|
|
193
249
|
signalCount++;
|
|
194
250
|
if (signalCount > 1) {
|
|
195
251
|
forceExit();
|
|
196
252
|
return;
|
|
197
253
|
}
|
|
254
|
+
controls?.restoreView();
|
|
198
255
|
console.log("\n[Dev] Shutting down...");
|
|
199
256
|
forceExitTimer = setTimeout(forceExit, 5e3);
|
|
200
|
-
|
|
257
|
+
forceExitTimer.unref?.();
|
|
258
|
+
controls?.requestShutdown();
|
|
201
259
|
};
|
|
260
|
+
const handleSignal = requestShutdownEscalating;
|
|
261
|
+
const program = Effect.scoped(runDevSession(configDir, orchestrator, (sessionControls) => {
|
|
262
|
+
controls = sessionControls;
|
|
263
|
+
sessionControls.requestShutdownEscalating = requestShutdownEscalating;
|
|
264
|
+
sessionControls.rearmForceExitTimer = () => {
|
|
265
|
+
if (forceExitTimer) clearTimeout(forceExitTimer);
|
|
266
|
+
forceExitTimer = setTimeout(forceExit, 5e3);
|
|
267
|
+
forceExitTimer.unref?.();
|
|
268
|
+
};
|
|
269
|
+
sessionControls.forceExit = forceExit;
|
|
270
|
+
})).pipe(Effect.provide(Layer.mergeAll(ServiceDescriptorMapLive(services), DevRuntimeConfigLive(runtimeConfig), DevGeneratedEnvLive(envGenerated), ShellEnvLive(shellEnv))), Effect.catchDefect((defect) => Effect.logError("[Dev] Unhandled defect in orchestrator:", defect).pipe(Effect.andThen(Effect.die(defect)))));
|
|
202
271
|
process.on("SIGINT", handleSignal);
|
|
203
272
|
process.on("SIGTERM", handleSignal);
|
|
204
273
|
Effect.runPromiseExit(program).then((exit) => {
|
|
274
|
+
clearInterval(orphanWatch);
|
|
275
|
+
if (forceExitTimer) clearTimeout(forceExitTimer);
|
|
276
|
+
process.exit(Exit.isSuccess(exit) ? 0 : 1);
|
|
277
|
+
}).catch((error) => {
|
|
278
|
+
clearInterval(orphanWatch);
|
|
205
279
|
if (forceExitTimer) clearTimeout(forceExitTimer);
|
|
206
|
-
|
|
280
|
+
console.error("[Dev] Failed to observe application exit:", error);
|
|
281
|
+
process.exit(1);
|
|
207
282
|
});
|
|
208
283
|
};
|
|
209
284
|
const devApp = runApp;
|
package/dist/dev-session.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-session.mjs","names":[],"sources":["../src/dev-session.ts"],"sourcesContent":["import * as NodeContext from \"@effect/platform-node/NodeContext\";\nimport { Deferred, Effect, Exit } from \"effect\";\nimport {\n type DevViewHandle,\n type LogEntry,\n type ProcessState,\n renderDevView,\n} from \"./components/dev-view\";\nimport { renderStreamingView } from \"./components/streaming-view\";\nimport { getProjectRoot } from \"./config\";\nimport { createDevLogger } from \"./dev-logs\";\nimport {\n getProcessStates,\n makeDevProcess,\n type ProcessCallbacks,\n type ProcessHandle,\n} from \"./orchestrator\";\nimport { registerStandalone, unregisterPid } from \"./process-registry\";\nimport {\n type AppOrchestrator,\n DevRuntimeConfig,\n DevRuntimeConfigLive,\n type ServiceDescriptor,\n ServiceDescriptorMap,\n ServiceDescriptorMapLive,\n} from \"./service-descriptor\";\nimport type { RuntimeConfig } from \"./types\";\n\nconst LOG_NOISE_PATTERNS = [\n /\\[ Federation Runtime \\] Version .* from (host|ui) of shared singleton module/,\n /Executing an Effect versioned \\d+\\.\\d+\\.\\d+ with a Runtime of version/,\n /you may want to dedupe the effect dependencies/,\n];\n\nconst SSR_LOG_ALLOWLIST = [\n /\\bready\\s+built in\\b/i,\n /\\bcompiled\\b.*successfully/i,\n /\\berror\\b/i,\n /\\bfailed\\b/i,\n /\\bexception\\b/i,\n];\n\nconst shouldDisplayLog = (source: string, line: string, isError?: boolean): boolean => {\n if (process.env.DEBUG === \"true\" || process.env.DEBUG === \"1\") return true;\n if (source === \"ui-ssr\") {\n if (isError) return true;\n return SSR_LOG_ALLOWLIST.some((pattern) => pattern.test(line));\n }\n return !LOG_NOISE_PATTERNS.some((pattern) => pattern.test(line));\n};\n\nconst isInteractiveSupported = (): boolean => {\n return process.stdin.isTTY === true && process.stdout.isTTY === true;\n};\n\nconst STARTUP_ORDER = [\"ui-ssr\", \"ui\", \"auth\", \"api\", \"plugin\", \"host-build\", \"host\"];\n\nconst sortByOrder = (packages: string[]): string[] => {\n return [...packages].sort((a, b) => {\n const aIdx = a.startsWith(\"plugin:\")\n ? STARTUP_ORDER.indexOf(\"plugin\")\n : STARTUP_ORDER.indexOf(a);\n const bIdx = b.startsWith(\"plugin:\")\n ? STARTUP_ORDER.indexOf(\"plugin\")\n : STARTUP_ORDER.indexOf(b);\n if (aIdx === -1 && bIdx === -1) return 0;\n if (aIdx === -1) return 1;\n if (bIdx === -1) return -1;\n return aIdx - bIdx;\n });\n};\n\nfunction formatLogLine(entry: LogEntry): string {\n const ts = new Date(entry.timestamp).toISOString();\n const prefix = entry.isError ? \"ERR\" : \"OUT\";\n return `[${ts}] [${entry.source}] [${prefix}] ${entry.line}`;\n}\n\nexport const runDevSession = (\n orchestrator: AppOrchestrator,\n onShutdownReady?: (requestShutdown: () => void) => void,\n) =>\n Effect.gen(function* () {\n const configDir = getProjectRoot();\n const services = yield* ServiceDescriptorMap;\n const runtimeConfig = yield* DevRuntimeConfig;\n const orderedPackages = sortByOrder(orchestrator.packages);\n const initialProcesses: ProcessState[] = getProcessStates(\n orderedPackages,\n services,\n orchestrator.port,\n );\n\n if (process.env.DEBUG === \"true\" || process.env.DEBUG === \"1\") {\n console.error(\"[DEBUG session] orchestrator.packages:\", orchestrator.packages.join(\", \"));\n console.error(\"[DEBUG session] orderedPackages:\", orderedPackages.join(\", \"));\n console.error(\"[DEBUG session] services keys:\", [...services.keys()].join(\", \"));\n console.error(\n \"[DEBUG session] initialProcesses:\",\n initialProcesses.map((p) => `${p.name}=${p.source}`).join(\", \"),\n );\n }\n\n const logger = yield* Effect.promise(() =>\n createDevLogger(configDir, orchestrator.description),\n );\n\n const shutdown = yield* Deferred.make<void>();\n\n onShutdownReady?.(() => {\n void Effect.runPromise(Deferred.succeed(shutdown, undefined));\n });\n\n const isWorkspaceChild = process.env.BOS_WORKSPACE_CHILD === \"1\";\n if (!isWorkspaceChild) {\n const regPorts: Record<string, number> = {};\n const addPort = (key: string, value: number | undefined | null) => {\n if (value != null) regPorts[key] = value;\n };\n addPort(\"host\", runtimeConfig.host.port);\n addPort(\"api\", runtimeConfig.api.port);\n addPort(\"ui\", runtimeConfig.ui.port);\n addPort(\"auth\", runtimeConfig.auth?.port);\n addPort(\n \"uiSsr\",\n runtimeConfig.ui.ssrUrl\n ? Number.parseInt(new URL(runtimeConfig.ui.ssrUrl).port, 10)\n : undefined,\n );\n if (runtimeConfig.plugins) {\n for (const [id, plugin] of Object.entries(runtimeConfig.plugins)) {\n addPort(`plugin:${id}`, plugin.port);\n addPort(`plugin-ui:${id}`, plugin.ui?.port);\n }\n }\n registerStandalone({\n pid: process.pid,\n configDir,\n ports: regPorts,\n startedAt: Date.now(),\n description: orchestrator.description,\n });\n }\n\n const allLogs: LogEntry[] = [];\n let view: DevViewHandle | null = null;\n let shouldExportLogs = false;\n\n const requestShutdownAndExport = () => {\n shouldExportLogs = true;\n void Effect.runPromise(Deferred.succeed(shutdown, undefined));\n };\n\n const useInteractive = orchestrator.interactive ?? isInteractiveSupported();\n view = useInteractive\n ? renderDevView(\n initialProcesses,\n orchestrator.description,\n orchestrator.env,\n () => void Effect.runPromise(Deferred.succeed(shutdown, undefined)),\n requestShutdownAndExport,\n )\n : renderStreamingView(\n initialProcesses,\n orchestrator.description,\n orchestrator.env,\n () => void Effect.runPromise(Deferred.succeed(shutdown, undefined)),\n );\n\n const callbacks: ProcessCallbacks = {\n onStatus: (name, status, message) => {\n view?.updateProcess(name, status, message);\n },\n onLog: (name, line, isError) => {\n const entry: LogEntry = {\n id: `${Date.now()}-${allLogs.length + 1}`,\n source: name,\n line,\n timestamp: Date.now(),\n isError,\n };\n allLogs.push(entry);\n if (shouldDisplayLog(name, line, isError)) {\n view?.addLog(name, line, isError);\n }\n if (!orchestrator.noLogs) {\n void logger.write(entry);\n }\n },\n };\n\n const startProcess = (pkg: string) => {\n const portOverride = pkg === \"host\" ? orchestrator.port : undefined;\n return makeDevProcess(pkg, callbacks, portOverride).pipe(\n Effect.tapError((err) =>\n Effect.sync(() => {\n callbacks.onLog(pkg, `Failed to start: ${err}`, true);\n callbacks.onStatus(pkg, \"error\");\n }),\n ),\n Effect.catchAll(() =>\n Effect.succeed({\n name: pkg,\n pid: undefined,\n kill: Effect.void,\n waitForReady: Effect.void,\n waitForExit: Effect.never,\n } satisfies ProcessHandle),\n ),\n );\n };\n\n const startGroup = (packages: string[]) =>\n Effect.forEach(packages, startProcess, { concurrency: \"unbounded\" });\n\n const awaitReady = (pkg: string, handle: ProcessHandle) =>\n handle.waitForReady.pipe(\n Effect.timeout(\"120 seconds\"),\n Effect.catchAll((err) =>\n Effect.sync(() => {\n callbacks.onLog(\n pkg,\n `Timed out or failed: ${err instanceof Error ? err.message : String(err)}`,\n true,\n );\n }),\n ),\n );\n\n const nonHostPackages = orderedPackages.filter((pkg) => pkg !== \"host\");\n const hostPackages = orderedPackages.filter((pkg) => pkg === \"host\");\n\n const nonHostHandles = yield* startGroup(nonHostPackages);\n\n yield* Effect.forEach(\n nonHostHandles.map((handle, index) => ({\n handle,\n pkg: nonHostPackages[index] ?? handle.name,\n })),\n ({ handle, pkg }) => awaitReady(pkg, handle),\n { concurrency: \"unbounded\" },\n );\n\n const hostHandles = yield* startGroup(hostPackages);\n\n yield* Effect.forEach(\n hostHandles.map((handle, index) => ({ handle, pkg: hostPackages[index] ?? handle.name })),\n ({ handle, pkg }) => awaitReady(pkg, handle),\n { concurrency: \"unbounded\" },\n );\n\n const allHandles = [...nonHostHandles, ...hostHandles];\n\n yield* Effect.addFinalizer(() =>\n Effect.gen(function* () {\n yield* Effect.forEach(allHandles, (h) => h.kill.pipe(Effect.ignore), {\n concurrency: \"unbounded\",\n });\n\n yield* Effect.sleep(\"200 millis\");\n\n view?.unmount();\n\n if (!isWorkspaceChild) {\n try {\n unregisterPid(process.pid);\n } catch {\n // best-effort; pruneDead cleans stale entries on next ps/kill\n }\n }\n\n if (shouldExportLogs) {\n console.log(\"\\n\");\n console.log(\"═\".repeat(70));\n console.log(` SESSION LOGS: ${orchestrator.description}`);\n console.log(` Started: ${new Date(allLogs[0]?.timestamp || Date.now()).toISOString()}`);\n console.log(` Total entries: ${allLogs.length}`);\n console.log(\"═\".repeat(70));\n console.log(\"\");\n for (const entry of allLogs) {\n console.log(formatLogLine(entry));\n }\n console.log(\"\");\n console.log(\"═\".repeat(70));\n console.log(` Full logs saved to: ${logger.logFile}`);\n console.log(\"═\".repeat(70));\n console.log(\"\");\n }\n }),\n );\n\n yield* Deferred.await(shutdown);\n });\n\nconst runApp = (\n orchestrator: AppOrchestrator,\n services: Map<string, ServiceDescriptor>,\n runtimeConfig: RuntimeConfig,\n) => {\n let requestShutdown: (() => void) | null = null;\n let signalCount = 0;\n let forceExitTimer: ReturnType<typeof setTimeout> | null = null;\n\n const forceExit = () => {\n console.log(\"\\n[Dev] Force exit\");\n process.exit(0);\n };\n\n const program = Effect.scoped(\n runDevSession(orchestrator, (shutdown) => {\n requestShutdown = shutdown;\n }),\n ).pipe(\n Effect.provide(ServiceDescriptorMapLive(services)),\n Effect.provide(DevRuntimeConfigLive(runtimeConfig)),\n Effect.provide(NodeContext.layer),\n Effect.catchAllDefect((defect) =>\n Effect.sync(() => {\n console.error(\"[Dev] Unhandled defect in orchestrator:\", defect);\n }),\n ),\n );\n\n const handleSignal = () => {\n signalCount++;\n if (signalCount > 1) {\n forceExit();\n return;\n }\n console.log(\"\\n[Dev] Shutting down...\");\n forceExitTimer = setTimeout(forceExit, 5000);\n requestShutdown?.();\n };\n\n process.on(\"SIGINT\", handleSignal);\n process.on(\"SIGTERM\", handleSignal);\n\n Effect.runPromiseExit(program).then((exit) => {\n if (forceExitTimer) clearTimeout(forceExitTimer);\n process.exit(Exit.isSuccess(exit) ? 0 : 0);\n });\n};\n\nexport const devApp = runApp;\n\nexport const startApp = runApp;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dev-session.mjs","names":[],"sources":["../src/dev-session.ts"],"sourcesContent":["import { Clock, DateTime, Deferred, Effect, Exit, Layer } from \"effect\";\nimport { probePortBindable } from \"./app\";\nimport {\n createDevRenderer,\n type DevProcessState,\n type DevRendererHandle,\n} from \"./components/dev-render\";\nimport { createLogPipeline, isDebug, type LogEvent, resolveLogLevel } from \"./dev-log-pipeline\";\nimport { createDevLogger, formatLogLine } from \"./dev-logs\";\nimport { getProcessEnv } from \"./env/process-env\";\nimport { ShellEnvLive } from \"./env/project-env\";\nimport { ownerOfPort } from \"./infra/port-ownership\";\nimport {\n getProcessStates,\n makeDevProcess,\n type ProcessCallbacks,\n type ProcessHandle,\n} from \"./orchestrator\";\nimport { reapGroup } from \"./process-kill\";\nimport {\n isPidAlive,\n readRegistry,\n registerStandalone,\n unregisterPid,\n updateChildPids,\n writeRegistry,\n} from \"./process-registry\";\nimport {\n type AppOrchestrator,\n DevGeneratedEnvLive,\n DevRuntimeConfig,\n DevRuntimeConfigLive,\n isAuthMirrorPluginEntry,\n type ServiceDescriptor,\n ServiceDescriptorMap,\n ServiceDescriptorMapLive,\n} from \"./service-descriptor\";\nimport type { RuntimeConfig } from \"./types\";\n\nconst adoptOrphanedChildren = (configDir: string): void => {\n try {\n const entries = readRegistry().filter(\n (entry) => entry.pid > 1 && entry.configDir === configDir && !isPidAlive(entry.pid),\n );\n if (entries.length === 0) return;\n const reaped: number[] = [];\n for (const entry of entries) {\n for (const childPid of entry.childPids ?? []) {\n if (childPid === process.pid) continue;\n if (isPidAlive(childPid)) {\n reapGroup(childPid);\n reaped.push(childPid);\n }\n }\n }\n if (reaped.length > 0) {\n console.error(\n `[Dev] Reaped ${reaped.length} orphaned child process(es) from dead session(s): ${reaped.join(\", \")}`,\n );\n }\n const deadPids = new Set(entries.map((entry) => entry.pid));\n writeRegistry(readRegistry().filter((entry) => !deadPids.has(entry.pid)));\n } catch {\n // best-effort; registry hygiene is non-critical for the running session\n }\n};\n\nconst isInteractiveSupported = (): boolean => {\n return process.stdin.isTTY === true && process.stdout.isTTY === true;\n};\n\nconst STARTUP_ORDER = [\"ui\", \"auth\", \"api\", \"plugin\", \"host-build\", \"host\"];\n\nconst sortByOrder = (packages: string[]): string[] => {\n return [...packages].sort((a, b) => {\n const aIdx = a.startsWith(\"plugin:\")\n ? STARTUP_ORDER.indexOf(\"plugin\")\n : STARTUP_ORDER.indexOf(a);\n const bIdx = b.startsWith(\"plugin:\")\n ? STARTUP_ORDER.indexOf(\"plugin\")\n : STARTUP_ORDER.indexOf(b);\n if (aIdx === -1 && bIdx === -1) return 0;\n if (aIdx === -1) return 1;\n if (bIdx === -1) return -1;\n return aIdx - bIdx;\n });\n};\n\nexport interface DevSessionControls {\n requestShutdown: () => void;\n emergencyKill: () => void;\n requestShutdownEscalating: () => void;\n forceExit: () => void;\n restoreView: () => void;\n rearmForceExitTimer: () => void;\n}\n\nexport const runDevSession = (\n configDir: string,\n orchestrator: AppOrchestrator,\n onShutdownReady?: (controls: DevSessionControls) => void,\n) =>\n Effect.gen(function* () {\n adoptOrphanedChildren(configDir);\n const services = yield* ServiceDescriptorMap;\n const runtimeConfig = yield* DevRuntimeConfig;\n const orderedPackages = sortByOrder(orchestrator.packages);\n const initialProcesses: DevProcessState[] = getProcessStates(\n orderedPackages,\n services,\n orchestrator.port,\n );\n\n if (isDebug(getProcessEnv(\"DEBUG\"))) {\n yield* Effect.logError(\n `[DEBUG session] orchestrator.packages: ${orchestrator.packages.join(\", \")}`,\n );\n yield* Effect.logError(`[DEBUG session] orderedPackages: ${orderedPackages.join(\", \")}`);\n yield* Effect.logError(`[DEBUG session] services keys: ${[...services.keys()].join(\", \")}`);\n yield* Effect.logError(\n `[DEBUG session] initialProcesses: ${initialProcesses.map((p) => `${p.name}=${p.source}`).join(\", \")}`,\n );\n }\n\n const logger = yield* Effect.promise(() =>\n createDevLogger(configDir, orchestrator.description),\n );\n\n const shutdown = yield* Deferred.make<void>();\n\n const effectContext = yield* Effect.context();\n const controls: DevSessionControls = {\n requestShutdown: () => {\n void Effect.runPromiseWith(effectContext)(Deferred.succeed(shutdown, undefined));\n },\n emergencyKill: () => {},\n requestShutdownEscalating: () => {},\n forceExit: () => {},\n restoreView: () => {},\n rearmForceExitTimer: () => {},\n };\n\n onShutdownReady?.(controls);\n\n const isWorkspaceChild = getProcessEnv(\"BOS_WORKSPACE_CHILD\") === \"1\";\n let ownedPorts: number[] = [];\n if (!isWorkspaceChild) {\n const regPorts: Record<string, number> = {};\n const addPort = (key: string, value: number | undefined | null) => {\n if (value != null) regPorts[key] = value;\n };\n addPort(\"host\", runtimeConfig.host.port);\n addPort(\"api\", runtimeConfig.api.port);\n addPort(\"ui\", runtimeConfig.ui.port);\n addPort(\"auth\", runtimeConfig.auth?.port);\n if (runtimeConfig.plugins) {\n for (const [id, plugin] of Object.entries(runtimeConfig.plugins)) {\n if (!isAuthMirrorPluginEntry(runtimeConfig.auth, id, plugin)) {\n addPort(`plugin:${id}`, plugin.port);\n }\n addPort(`plugin-ui:${id}`, plugin.ui?.port);\n }\n }\n registerStandalone({\n pid: process.pid,\n configDir,\n ports: regPorts,\n startedAt: yield* Clock.currentTimeMillis,\n description: orchestrator.description,\n });\n ownedPorts = Object.values(regPorts);\n }\n\n let view: DevRendererHandle | null = null;\n let shouldExportLogs = false;\n\n const logLevel = resolveLogLevel();\n const allLogs: LogEvent[] = [];\n const pipeline = createLogPipeline({\n level: logLevel,\n sinks: {\n display: (event) => {\n view?.addLog(event.source, event.line, event.level === \"error\");\n },\n file: (event) => {\n if (orchestrator.noLogs) return;\n void logger.write(event);\n },\n export: (event) => {\n allLogs.push(event);\n },\n },\n });\n\n const useInteractive = isInteractiveSupported() && orchestrator.interactive !== false;\n view = createDevRenderer(\n initialProcesses,\n orchestrator.description,\n orchestrator.env,\n () => controls.requestShutdownEscalating(),\n () => {\n shouldExportLogs = true;\n controls.requestShutdownEscalating();\n },\n { interactive: useInteractive, onForceExit: () => controls.forceExit() },\n );\n controls.restoreView = () => {\n if (useInteractive) view?.unmount();\n };\n\n const callbacks: ProcessCallbacks = {\n onStatus: (name, status, message) => {\n view?.updateProcess(name, status, message);\n },\n onLog: (name, line, isError) => {\n pipeline.ingest({ source: name, line, isError });\n },\n };\n\n const spawned: ProcessHandle[] = [];\n\n controls.emergencyKill = () => {\n for (const handle of spawned) {\n if (handle.pid === undefined) continue;\n reapGroup(handle.pid);\n }\n };\n\n yield* Effect.addFinalizer(() =>\n Effect.gen(function* () {\n controls.rearmForceExitTimer();\n\n yield* Effect.forEach(spawned, (h) => h.kill.pipe(Effect.ignore), {\n concurrency: \"unbounded\",\n });\n\n yield* Effect.sleep(\"200 millis\");\n\n for (const port of ownedPorts) {\n const bindable = yield* probePortBindable(port);\n if (!bindable) {\n const owner = yield* ownerOfPort(port);\n yield* Effect.logError(\n `[Dev] Port ${port} still bound after teardown${\n owner\n ? ` — pid ${owner.pid} (${owner.command})`\n : \" — owner unknown (lsof unavailable)\"\n }`,\n );\n }\n }\n\n if (!isWorkspaceChild) {\n yield* Effect.sync(() => {\n try {\n unregisterPid(process.pid);\n } catch {\n // best-effort; pruneDead cleans stale entries on next ps/kill\n }\n });\n }\n\n pipeline.flush();\n\n view?.unmount();\n\n if (shouldExportLogs) {\n const now = yield* Clock.currentTimeMillis;\n const startedMs = allLogs[0]?.timestamp || now;\n yield* Effect.log(\"\");\n yield* Effect.log(\"═\".repeat(70));\n yield* Effect.log(` SESSION LOGS: ${orchestrator.description}`);\n yield* Effect.log(` Started: ${DateTime.formatIso(DateTime.makeUnsafe(startedMs))}`);\n yield* Effect.log(` Filtered entries: ${allLogs.length} (level: ${logLevel})`);\n yield* Effect.log(\"═\".repeat(70));\n yield* Effect.log(\"\");\n for (const event of allLogs) {\n yield* Effect.log(formatLogLine(event));\n }\n yield* Effect.log(\"\");\n yield* Effect.log(\"═\".repeat(70));\n yield* Effect.log(` Full logs saved to: ${logger.logFile}`);\n yield* Effect.log(\"═\".repeat(70));\n yield* Effect.log(\"\");\n }\n }),\n );\n\n const startProcess = (pkg: string) => {\n const portOverride = pkg === \"host\" ? orchestrator.port : undefined;\n return makeDevProcess(pkg, callbacks, portOverride).pipe(\n Effect.tap((handle) => Effect.sync(() => spawned.push(handle))),\n Effect.flatMap((handle) =>\n Effect.acquireRelease(Effect.succeed(handle), () => handle.kill.pipe(Effect.ignore)),\n ),\n Effect.tapError((err) =>\n Effect.sync(() => {\n callbacks.onLog(pkg, `Failed to start: ${String(err)}`, true);\n callbacks.onStatus(pkg, \"error\");\n }),\n ),\n Effect.orElseSucceed(\n () =>\n ({\n name: pkg,\n pid: undefined,\n kill: Effect.void,\n waitForReady: Effect.void,\n waitForExit: Effect.never,\n }) satisfies ProcessHandle,\n ),\n );\n };\n\n const startGroup = (packages: string[]) =>\n Effect.forEach(packages, startProcess, { concurrency: \"unbounded\" });\n\n const awaitReady = (pkg: string, handle: ProcessHandle) =>\n handle.waitForReady.pipe(\n Effect.timeout(\"120 seconds\"),\n Effect.catch((err) =>\n Effect.sync(() => {\n callbacks.onLog(\n pkg,\n `Timed out or failed: ${err instanceof Error ? err.message : String(err)}`,\n true,\n );\n }),\n ),\n );\n\n const nonHostPackages = orderedPackages.filter((pkg) => pkg !== \"host\");\n const hostPackages = orderedPackages.filter((pkg) => pkg === \"host\");\n\n const startupPhase = Effect.gen(function* () {\n const nonHostHandles = yield* startGroup(nonHostPackages);\n\n yield* Effect.forEach(\n nonHostHandles.map((handle, index) => ({\n handle,\n pkg: nonHostPackages[index] ?? handle.name,\n })),\n ({ handle, pkg }) => awaitReady(pkg, handle),\n { concurrency: \"unbounded\" },\n );\n\n const hostHandles = yield* startGroup(hostPackages);\n\n yield* Effect.forEach(\n hostHandles.map((handle, index) => ({\n handle,\n pkg: hostPackages[index] ?? handle.name,\n })),\n ({ handle, pkg }) => awaitReady(pkg, handle),\n { concurrency: \"unbounded\" },\n );\n\n return { nonHostHandles, hostHandles };\n });\n\n const startup = yield* Effect.raceFirst(\n startupPhase,\n Deferred.await(shutdown).pipe(Effect.as(null)),\n );\n\n if (startup === null) return;\n\n const allHandles = [...startup.nonHostHandles, ...startup.hostHandles];\n\n const childPids = allHandles\n .map((handle) => Number(handle.pid))\n .filter((pid) => Number.isFinite(pid) && pid > 1 && pid !== process.pid);\n\n if (!isWorkspaceChild && childPids.length > 0) {\n yield* Effect.sync(() => {\n try {\n updateChildPids(process.pid, childPids);\n } catch {\n // best-effort; registry hygiene is non-critical for the running session\n }\n });\n }\n\n yield* Deferred.await(shutdown);\n });\n\nconst runApp = (\n configDir: string,\n orchestrator: AppOrchestrator,\n services: Map<string, ServiceDescriptor>,\n runtimeConfig: RuntimeConfig,\n envGenerated: Record<string, string>,\n shellEnv: Record<string, string>,\n) => {\n let controls: DevSessionControls | null = null;\n let signalCount = 0;\n let forceExitTimer: ReturnType<typeof setTimeout> | null = null;\n\n const forceExit = () => {\n controls?.restoreView();\n console.log(\"\\n[Dev] Force exit\");\n controls?.emergencyKill();\n process.exit(0);\n };\n\n // Orphan watch: when the wrapper chain above this process dies (playwright\n // tree-kills its webServer with SIGKILL — no signal handler runs, detached\n // group escapes), this orchestrator is reparented. Detect that and reap the\n // whole service tree — the alternatives are zombie port squatters that\n // poison the next run. Covers shell aborts (Ctrl+C killing only the\n // wrapper) the same way.\n const initialPpid = process.ppid;\n const orphanWatch = setInterval(() => {\n if (process.ppid !== initialPpid) {\n console.error(\"\\n[Dev] Parent process died — force exiting (orphaned service tree)\");\n forceExit();\n }\n }, 200);\n orphanWatch.unref?.();\n\n const requestShutdownEscalating = () => {\n signalCount++;\n if (signalCount > 1) {\n forceExit();\n return;\n }\n controls?.restoreView();\n console.log(\"\\n[Dev] Shutting down...\");\n forceExitTimer = setTimeout(forceExit, 5000);\n forceExitTimer.unref?.();\n controls?.requestShutdown();\n };\n const handleSignal = requestShutdownEscalating;\n\n const program = Effect.scoped(\n runDevSession(configDir, orchestrator, (sessionControls) => {\n controls = sessionControls;\n sessionControls.requestShutdownEscalating = requestShutdownEscalating;\n sessionControls.rearmForceExitTimer = () => {\n if (forceExitTimer) clearTimeout(forceExitTimer);\n forceExitTimer = setTimeout(forceExit, 5000);\n forceExitTimer.unref?.();\n };\n sessionControls.forceExit = forceExit;\n }),\n ).pipe(\n Effect.provide(\n Layer.mergeAll(\n ServiceDescriptorMapLive(services),\n DevRuntimeConfigLive(runtimeConfig),\n DevGeneratedEnvLive(envGenerated),\n ShellEnvLive(shellEnv),\n ),\n ),\n Effect.catchDefect((defect) =>\n Effect.logError(\"[Dev] Unhandled defect in orchestrator:\", defect).pipe(\n Effect.andThen(Effect.die(defect)),\n ),\n ),\n );\n\n process.on(\"SIGINT\", handleSignal);\n process.on(\"SIGTERM\", handleSignal);\n\n void Effect.runPromiseExit(program)\n .then((exit) => {\n clearInterval(orphanWatch);\n if (forceExitTimer) clearTimeout(forceExitTimer);\n process.exit(Exit.isSuccess(exit) ? 0 : 1);\n })\n .catch((error: unknown) => {\n clearInterval(orphanWatch);\n if (forceExitTimer) clearTimeout(forceExitTimer);\n console.error(\"[Dev] Failed to observe application exit:\", error);\n process.exit(1);\n });\n};\n\nexport const devApp = runApp;\n\nexport const startApp = runApp;\n"],"mappings":";;;;;;;;;;;;;;AAuCA,MAAM,yBAAyB,cAA4B;CACzD,IAAI;EACF,MAAM,UAAU,aAAa,CAAC,CAAC,QAC5B,UAAU,MAAM,MAAM,KAAK,MAAM,cAAc,aAAa,CAAC,WAAW,MAAM,GAAG,CACpF;EACA,IAAI,QAAQ,WAAW,GAAG;EAC1B,MAAM,SAAmB,CAAC;EAC1B,KAAK,MAAM,SAAS,SAClB,KAAK,MAAM,YAAY,MAAM,aAAa,CAAC,GAAG;GAC5C,IAAI,aAAa,QAAQ,KAAK;GAC9B,IAAI,WAAW,QAAQ,GAAG;IACxB,UAAU,QAAQ;IAClB,OAAO,KAAK,QAAQ;GACtB;EACF;EAEF,IAAI,OAAO,SAAS,GAClB,QAAQ,MACN,gBAAgB,OAAO,OAAO,oDAAoD,OAAO,KAAK,IAAI,GACpG;EAEF,MAAM,WAAW,IAAI,IAAI,QAAQ,KAAK,UAAU,MAAM,GAAG,CAAC;EAC1D,cAAc,aAAa,CAAC,CAAC,QAAQ,UAAU,CAAC,SAAS,IAAI,MAAM,GAAG,CAAC,CAAC;CAC1E,QAAQ,CAER;AACF;AAEA,MAAM,+BAAwC;CAC5C,OAAO,QAAQ,MAAM,UAAU,QAAQ,QAAQ,OAAO,UAAU;AAClE;AAEA,MAAM,gBAAgB;CAAC;CAAM;CAAQ;CAAO;CAAU;CAAc;AAAM;AAE1E,MAAM,eAAe,aAAiC;CACpD,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM;EAClC,MAAM,OAAO,EAAE,WAAW,SAAS,IAC/B,cAAc,QAAQ,QAAQ,IAC9B,cAAc,QAAQ,CAAC;EAC3B,MAAM,OAAO,EAAE,WAAW,SAAS,IAC/B,cAAc,QAAQ,QAAQ,IAC9B,cAAc,QAAQ,CAAC;EAC3B,IAAI,SAAS,MAAM,SAAS,IAAI,OAAO;EACvC,IAAI,SAAS,IAAI,OAAO;EACxB,IAAI,SAAS,IAAI,OAAO;EACxB,OAAO,OAAO;CAChB,CAAC;AACH;AAWA,MAAa,iBACX,WACA,cACA,oBAEA,OAAO,IAAI,aAAa;CACtB,sBAAsB,SAAS;CAC/B,MAAM,WAAW,OAAO;CACxB,MAAM,gBAAgB,OAAO;CAC7B,MAAM,kBAAkB,YAAY,aAAa,QAAQ;CACzD,MAAM,mBAAsC,iBAC1C,iBACA,UACA,aAAa,IACf;CAEA,IAAI,QAAQ,cAAc,OAAO,CAAC,GAAG;EACnC,OAAO,OAAO,SACZ,0CAA0C,aAAa,SAAS,KAAK,IAAI,GAC3E;EACA,OAAO,OAAO,SAAS,oCAAoC,gBAAgB,KAAK,IAAI,GAAG;EACvF,OAAO,OAAO,SAAS,kCAAkC,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG;EAC1F,OAAO,OAAO,SACZ,qCAAqC,iBAAiB,KAAK,MAAM,GAAG,EAAE,KAAK,GAAG,EAAE,QAAQ,CAAC,CAAC,KAAK,IAAI,GACrG;CACF;CAEA,MAAM,SAAS,OAAO,OAAO,cAC3B,gBAAgB,WAAW,aAAa,WAAW,CACrD;CAEA,MAAM,WAAW,OAAO,SAAS,KAAW;CAE5C,MAAM,gBAAgB,OAAO,OAAO,QAAQ;CAC5C,MAAM,WAA+B;EACnC,uBAAuB;GACrB,AAAK,OAAO,eAAe,aAAa,CAAC,CAAC,SAAS,QAAQ,UAAU,MAAS,CAAC;EACjF;EACA,qBAAqB,CAAC;EACtB,iCAAiC,CAAC;EAClC,iBAAiB,CAAC;EAClB,mBAAmB,CAAC;EACpB,2BAA2B,CAAC;CAC9B;CAEA,kBAAkB,QAAQ;CAE1B,MAAM,mBAAmB,cAAc,qBAAqB,MAAM;CAClE,IAAI,aAAuB,CAAC;CAC5B,IAAI,CAAC,kBAAkB;EACrB,MAAM,WAAmC,CAAC;EAC1C,MAAM,WAAW,KAAa,UAAqC;GACjE,IAAI,SAAS,MAAM,SAAS,OAAO;EACrC;EACA,QAAQ,QAAQ,cAAc,KAAK,IAAI;EACvC,QAAQ,OAAO,cAAc,IAAI,IAAI;EACrC,QAAQ,MAAM,cAAc,GAAG,IAAI;EACnC,QAAQ,QAAQ,cAAc,MAAM,IAAI;EACxC,IAAI,cAAc,SAChB,KAAK,MAAM,CAAC,IAAI,WAAW,OAAO,QAAQ,cAAc,OAAO,GAAG;GAChE,IAAI,CAAC,wBAAwB,cAAc,MAAM,IAAI,MAAM,GACzD,QAAQ,UAAU,MAAM,OAAO,IAAI;GAErC,QAAQ,aAAa,MAAM,OAAO,IAAI,IAAI;EAC5C;EAEF,mBAAmB;GACjB,KAAK,QAAQ;GACb;GACA,OAAO;GACP,WAAW,OAAO,MAAM;GACxB,aAAa,aAAa;EAC5B,CAAC;EACD,aAAa,OAAO,OAAO,QAAQ;CACrC;CAEA,IAAI,OAAiC;CACrC,IAAI,mBAAmB;CAEvB,MAAM,WAAW,gBAAgB;CACjC,MAAM,UAAsB,CAAC;CAC7B,MAAM,WAAW,kBAAkB;EACjC,OAAO;EACP,OAAO;GACL,UAAU,UAAU;IAClB,MAAM,OAAO,MAAM,QAAQ,MAAM,MAAM,MAAM,UAAU,OAAO;GAChE;GACA,OAAO,UAAU;IACf,IAAI,aAAa,QAAQ;IACzB,AAAK,OAAO,MAAM,KAAK;GACzB;GACA,SAAS,UAAU;IACjB,QAAQ,KAAK,KAAK;GACpB;EACF;CACF,CAAC;CAED,MAAM,iBAAiB,uBAAuB,KAAK,aAAa,gBAAgB;CAChF,OAAO,kBACL,kBACA,aAAa,aACb,aAAa,WACP,SAAS,0BAA0B,SACnC;EACJ,mBAAmB;EACnB,SAAS,0BAA0B;CACrC,GACA;EAAE,aAAa;EAAgB,mBAAmB,SAAS,UAAU;CAAE,CACzE;CACA,SAAS,oBAAoB;EAC3B,IAAI,gBAAgB,MAAM,QAAQ;CACpC;CAEA,MAAM,YAA8B;EAClC,WAAW,MAAM,QAAQ,YAAY;GACnC,MAAM,cAAc,MAAM,QAAQ,OAAO;EAC3C;EACA,QAAQ,MAAM,MAAM,YAAY;GAC9B,SAAS,OAAO;IAAE,QAAQ;IAAM;IAAM;GAAQ,CAAC;EACjD;CACF;CAEA,MAAM,UAA2B,CAAC;CAElC,SAAS,sBAAsB;EAC7B,KAAK,MAAM,UAAU,SAAS;GAC5B,IAAI,OAAO,QAAQ,QAAW;GAC9B,UAAU,OAAO,GAAG;EACtB;CACF;CAEA,OAAO,OAAO,mBACZ,OAAO,IAAI,aAAa;EACtB,SAAS,oBAAoB;EAE7B,OAAO,OAAO,QAAQ,UAAU,MAAM,EAAE,KAAK,KAAK,OAAO,MAAM,GAAG,EAChE,aAAa,YACf,CAAC;EAED,OAAO,OAAO,MAAM,YAAY;EAEhC,KAAK,MAAM,QAAQ,YAEjB,IAAI,EAAC,OADmB,kBAAkB,IAAI,IAC/B;GACb,MAAM,QAAQ,OAAO,YAAY,IAAI;GACrC,OAAO,OAAO,SACZ,cAAc,KAAK,6BACjB,QACI,UAAU,MAAM,IAAI,IAAI,MAAM,QAAQ,KACtC,uCAER;EACF;EAGF,IAAI,CAAC,kBACH,OAAO,OAAO,WAAW;GACvB,IAAI;IACF,cAAc,QAAQ,GAAG;GAC3B,QAAQ,CAER;EACF,CAAC;EAGH,SAAS,MAAM;EAEf,MAAM,QAAQ;EAEd,IAAI,kBAAkB;GACpB,MAAM,MAAM,OAAO,MAAM;GACzB,MAAM,YAAY,QAAQ,EAAE,EAAE,aAAa;GAC3C,OAAO,OAAO,IAAI,EAAE;GACpB,OAAO,OAAO,IAAI,IAAI,OAAO,EAAE,CAAC;GAChC,OAAO,OAAO,IAAI,mBAAmB,aAAa,aAAa;GAC/D,OAAO,OAAO,IAAI,cAAc,SAAS,UAAU,SAAS,WAAW,SAAS,CAAC,GAAG;GACpF,OAAO,OAAO,IAAI,uBAAuB,QAAQ,OAAO,WAAW,SAAS,EAAE;GAC9E,OAAO,OAAO,IAAI,IAAI,OAAO,EAAE,CAAC;GAChC,OAAO,OAAO,IAAI,EAAE;GACpB,KAAK,MAAM,SAAS,SAClB,OAAO,OAAO,IAAI,cAAc,KAAK,CAAC;GAExC,OAAO,OAAO,IAAI,EAAE;GACpB,OAAO,OAAO,IAAI,IAAI,OAAO,EAAE,CAAC;GAChC,OAAO,OAAO,IAAI,yBAAyB,OAAO,SAAS;GAC3D,OAAO,OAAO,IAAI,IAAI,OAAO,EAAE,CAAC;GAChC,OAAO,OAAO,IAAI,EAAE;EACtB;CACF,CAAC,CACH;CAEA,MAAM,gBAAgB,QAAgB;EACpC,MAAM,eAAe,QAAQ,SAAS,aAAa,OAAO;EAC1D,OAAO,eAAe,KAAK,WAAW,YAAY,CAAC,CAAC,KAClD,OAAO,KAAK,WAAW,OAAO,WAAW,QAAQ,KAAK,MAAM,CAAC,CAAC,GAC9D,OAAO,SAAS,WACd,OAAO,eAAe,OAAO,QAAQ,MAAM,SAAS,OAAO,KAAK,KAAK,OAAO,MAAM,CAAC,CACrF,GACA,OAAO,UAAU,QACf,OAAO,WAAW;GAChB,UAAU,MAAM,KAAK,oBAAoB,OAAO,GAAG,KAAK,IAAI;GAC5D,UAAU,SAAS,KAAK,OAAO;EACjC,CAAC,CACH,GACA,OAAO,qBAEF;GACC,MAAM;GACN,KAAK;GACL,MAAM,OAAO;GACb,cAAc,OAAO;GACrB,aAAa,OAAO;EACtB,EACJ,CACF;CACF;CAEA,MAAM,cAAc,aAClB,OAAO,QAAQ,UAAU,cAAc,EAAE,aAAa,YAAY,CAAC;CAErE,MAAM,cAAc,KAAa,WAC/B,OAAO,aAAa,KAClB,OAAO,QAAQ,aAAa,GAC5B,OAAO,OAAO,QACZ,OAAO,WAAW;EAChB,UAAU,MACR,KACA,wBAAwB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,KACvE,IACF;CACF,CAAC,CACH,CACF;CAEF,MAAM,kBAAkB,gBAAgB,QAAQ,QAAQ,QAAQ,MAAM;CACtE,MAAM,eAAe,gBAAgB,QAAQ,QAAQ,QAAQ,MAAM;CAEnE,MAAM,eAAe,OAAO,IAAI,aAAa;EAC3C,MAAM,iBAAiB,OAAO,WAAW,eAAe;EAExD,OAAO,OAAO,QACZ,eAAe,KAAK,QAAQ,WAAW;GACrC;GACA,KAAK,gBAAgB,UAAU,OAAO;EACxC,EAAE,IACD,EAAE,QAAQ,UAAU,WAAW,KAAK,MAAM,GAC3C,EAAE,aAAa,YAAY,CAC7B;EAEA,MAAM,cAAc,OAAO,WAAW,YAAY;EAElD,OAAO,OAAO,QACZ,YAAY,KAAK,QAAQ,WAAW;GAClC;GACA,KAAK,aAAa,UAAU,OAAO;EACrC,EAAE,IACD,EAAE,QAAQ,UAAU,WAAW,KAAK,MAAM,GAC3C,EAAE,aAAa,YAAY,CAC7B;EAEA,OAAO;GAAE;GAAgB;EAAY;CACvC,CAAC;CAED,MAAM,UAAU,OAAO,OAAO,UAC5B,cACA,SAAS,MAAM,QAAQ,CAAC,CAAC,KAAK,OAAO,GAAG,IAAI,CAAC,CAC/C;CAEA,IAAI,YAAY,MAAM;CAItB,MAAM,YAAY,CAFE,GAAG,QAAQ,gBAAgB,GAAG,QAAQ,WAE/B,CAAC,CACzB,KAAK,WAAW,OAAO,OAAO,GAAG,CAAC,CAAC,CACnC,QAAQ,QAAQ,OAAO,SAAS,GAAG,KAAK,MAAM,KAAK,QAAQ,QAAQ,GAAG;CAEzE,IAAI,CAAC,oBAAoB,UAAU,SAAS,GAC1C,OAAO,OAAO,WAAW;EACvB,IAAI;GACF,gBAAgB,QAAQ,KAAK,SAAS;EACxC,QAAQ,CAER;CACF,CAAC;CAGH,OAAO,SAAS,MAAM,QAAQ;AAChC,CAAC;AAEH,MAAM,UACJ,WACA,cACA,UACA,eACA,cACA,aACG;CACH,IAAI,WAAsC;CAC1C,IAAI,cAAc;CAClB,IAAI,iBAAuD;CAE3D,MAAM,kBAAkB;EACtB,UAAU,YAAY;EACtB,QAAQ,IAAI,oBAAoB;EAChC,UAAU,cAAc;EACxB,QAAQ,KAAK,CAAC;CAChB;CAQA,MAAM,cAAc,QAAQ;CAC5B,MAAM,cAAc,kBAAkB;EACpC,IAAI,QAAQ,SAAS,aAAa;GAChC,QAAQ,MAAM,qEAAqE;GACnF,UAAU;EACZ;CACF,GAAG,GAAG;CACN,YAAY,QAAQ;CAEpB,MAAM,kCAAkC;EACtC;EACA,IAAI,cAAc,GAAG;GACnB,UAAU;GACV;EACF;EACA,UAAU,YAAY;EACtB,QAAQ,IAAI,0BAA0B;EACtC,iBAAiB,WAAW,WAAW,GAAI;EAC3C,eAAe,QAAQ;EACvB,UAAU,gBAAgB;CAC5B;CACA,MAAM,eAAe;CAErB,MAAM,UAAU,OAAO,OACrB,cAAc,WAAW,eAAe,oBAAoB;EAC1D,WAAW;EACX,gBAAgB,4BAA4B;EAC5C,gBAAgB,4BAA4B;GAC1C,IAAI,gBAAgB,aAAa,cAAc;GAC/C,iBAAiB,WAAW,WAAW,GAAI;GAC3C,eAAe,QAAQ;EACzB;EACA,gBAAgB,YAAY;CAC9B,CAAC,CACH,CAAC,CAAC,KACA,OAAO,QACL,MAAM,SACJ,yBAAyB,QAAQ,GACjC,qBAAqB,aAAa,GAClC,oBAAoB,YAAY,GAChC,aAAa,QAAQ,CACvB,CACF,GACA,OAAO,aAAa,WAClB,OAAO,SAAS,2CAA2C,MAAM,CAAC,CAAC,KACjE,OAAO,QAAQ,OAAO,IAAI,MAAM,CAAC,CACnC,CACF,CACF;CAEA,QAAQ,GAAG,UAAU,YAAY;CACjC,QAAQ,GAAG,WAAW,YAAY;CAElC,AAAK,OAAO,eAAe,OAAO,CAAC,CAChC,MAAM,SAAS;EACd,cAAc,WAAW;EACzB,IAAI,gBAAgB,aAAa,cAAc;EAC/C,QAAQ,KAAK,KAAK,UAAU,IAAI,IAAI,IAAI,CAAC;CAC3C,CAAC,CAAC,CACD,OAAO,UAAmB;EACzB,cAAc,WAAW;EACzB,IAAI,gBAAgB,aAAa,cAAc;EAC/C,QAAQ,MAAM,6CAA6C,KAAK;EAChE,QAAQ,KAAK,CAAC;CAChB,CAAC;AACL;AAEA,MAAa,SAAS;AAEtB,MAAa,WAAW"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/env/process-env.ts
|
|
2
|
+
const getProcessEnv = (key) => process.env[key];
|
|
3
|
+
const setProcessEnv = (key, value) => {
|
|
4
|
+
process.env[key] = value;
|
|
5
|
+
};
|
|
6
|
+
const deleteProcessEnv = (key) => {
|
|
7
|
+
delete process.env[key];
|
|
8
|
+
};
|
|
9
|
+
const processEnvRecord = () => process.env;
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
exports.deleteProcessEnv = deleteProcessEnv;
|
|
13
|
+
exports.getProcessEnv = getProcessEnv;
|
|
14
|
+
exports.processEnvRecord = processEnvRecord;
|
|
15
|
+
exports.setProcessEnv = setProcessEnv;
|
|
16
|
+
//# sourceMappingURL=process-env.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-env.cjs","names":[],"sources":["../../src/env/process-env.ts"],"sourcesContent":["export const getProcessEnv = (key: string): string | undefined => process.env[key];\n\nexport const setProcessEnv = (key: string, value: string): void => {\n process.env[key] = value;\n};\n\nexport const deleteProcessEnv = (key: string): void => {\n delete process.env[key];\n};\n\nexport const processEnvRecord = (): Record<string, string | undefined> => process.env;\n"],"mappings":";AAAA,MAAa,iBAAiB,QAAoC,QAAQ,IAAI;AAE9E,MAAa,iBAAiB,KAAa,UAAwB;CACjE,QAAQ,IAAI,OAAO;AACrB;AAEA,MAAa,oBAAoB,QAAsB;CACrD,OAAO,QAAQ,IAAI;AACrB;AAEA,MAAa,yBAA6D,QAAQ"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/env/process-env.ts
|
|
2
|
+
const getProcessEnv = (key) => process.env[key];
|
|
3
|
+
const setProcessEnv = (key, value) => {
|
|
4
|
+
process.env[key] = value;
|
|
5
|
+
};
|
|
6
|
+
const deleteProcessEnv = (key) => {
|
|
7
|
+
delete process.env[key];
|
|
8
|
+
};
|
|
9
|
+
const processEnvRecord = () => process.env;
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
export { deleteProcessEnv, getProcessEnv, processEnvRecord, setProcessEnv };
|
|
13
|
+
//# sourceMappingURL=process-env.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-env.mjs","names":[],"sources":["../../src/env/process-env.ts"],"sourcesContent":["export const getProcessEnv = (key: string): string | undefined => process.env[key];\n\nexport const setProcessEnv = (key: string, value: string): void => {\n process.env[key] = value;\n};\n\nexport const deleteProcessEnv = (key: string): void => {\n delete process.env[key];\n};\n\nexport const processEnvRecord = (): Record<string, string | undefined> => process.env;\n"],"mappings":";AAAA,MAAa,iBAAiB,QAAoC,QAAQ,IAAI;AAE9E,MAAa,iBAAiB,KAAa,UAAwB;CACjE,QAAQ,IAAI,OAAO;AACrB;AAEA,MAAa,oBAAoB,QAAsB;CACrD,OAAO,QAAQ,IAAI;AACrB;AAEA,MAAa,yBAA6D,QAAQ"}
|