@vendure/cloud 0.2.0 → 0.3.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 +42 -7
- package/dist/cli/arguments.d.ts +5 -0
- package/dist/cli/arguments.d.ts.map +1 -0
- package/dist/cli/arguments.js +57 -0
- package/dist/cli/arguments.js.map +1 -0
- package/dist/cli/command.d.ts +26 -0
- package/dist/cli/command.d.ts.map +1 -0
- package/dist/cli/command.js +84 -0
- package/dist/cli/command.js.map +1 -0
- package/dist/cli/commands/deployment/arguments.d.ts +3 -0
- package/dist/cli/commands/deployment/arguments.d.ts.map +1 -0
- package/dist/cli/commands/deployment/arguments.js +13 -0
- package/dist/cli/commands/deployment/arguments.js.map +1 -0
- package/dist/cli/commands/deployment/build-logs.d.ts +3 -0
- package/dist/cli/commands/deployment/build-logs.d.ts.map +1 -0
- package/dist/cli/commands/deployment/build-logs.js +98 -0
- package/dist/cli/commands/deployment/build-logs.js.map +1 -0
- package/dist/cli/commands/deployment/deploy.d.ts +3 -0
- package/dist/cli/commands/deployment/deploy.d.ts.map +1 -0
- package/dist/cli/commands/deployment/deploy.js +306 -0
- package/dist/cli/commands/deployment/deploy.js.map +1 -0
- package/dist/cli/commands/deployment/index.d.ts +3 -0
- package/dist/cli/commands/deployment/index.d.ts.map +1 -0
- package/dist/cli/commands/deployment/index.js +177 -0
- package/dist/cli/commands/deployment/index.js.map +1 -0
- package/dist/cli/commands/deployment/list.d.ts +3 -0
- package/dist/cli/commands/deployment/list.d.ts.map +1 -0
- package/dist/cli/commands/deployment/list.js +77 -0
- package/dist/cli/commands/deployment/list.js.map +1 -0
- package/dist/cli/commands/deployment/logs.d.ts +3 -0
- package/dist/cli/commands/deployment/logs.d.ts.map +1 -0
- package/dist/cli/commands/deployment/logs.js +88 -0
- package/dist/cli/commands/deployment/logs.js.map +1 -0
- package/dist/cli/commands/deployment/options.d.ts +11 -0
- package/dist/cli/commands/deployment/options.d.ts.map +1 -0
- package/dist/cli/commands/deployment/options.js +37 -0
- package/dist/cli/commands/deployment/options.js.map +1 -0
- package/dist/cli/commands/deployment/plan-format.d.ts +8 -0
- package/dist/cli/commands/deployment/plan-format.d.ts.map +1 -0
- package/dist/cli/commands/deployment/plan-format.js +25 -0
- package/dist/cli/commands/deployment/plan-format.js.map +1 -0
- package/dist/cli/commands/deployment/plan.d.ts +3 -0
- package/dist/cli/commands/deployment/plan.d.ts.map +1 -0
- package/dist/cli/commands/deployment/plan.js +54 -0
- package/dist/cli/commands/deployment/plan.js.map +1 -0
- package/dist/cli/commands/deployment/rollback.d.ts +3 -0
- package/dist/cli/commands/deployment/rollback.d.ts.map +1 -0
- package/dist/cli/commands/deployment/rollback.js +97 -0
- package/dist/cli/commands/deployment/rollback.js.map +1 -0
- package/dist/cli/commands/deployment/shared.d.ts +5 -0
- package/dist/cli/commands/deployment/shared.d.ts.map +1 -0
- package/dist/cli/commands/deployment/shared.js +23 -0
- package/dist/cli/commands/deployment/shared.js.map +1 -0
- package/dist/cli/commands/deployment/show.d.ts +3 -0
- package/dist/cli/commands/deployment/show.d.ts.map +1 -0
- package/dist/cli/commands/deployment/show.js +71 -0
- package/dist/cli/commands/deployment/show.js.map +1 -0
- package/dist/cli/commands/deployment/source.d.ts +14 -0
- package/dist/cli/commands/deployment/source.d.ts.map +1 -0
- package/dist/cli/commands/deployment/source.js +19 -0
- package/dist/cli/commands/deployment/source.js.map +1 -0
- package/dist/cli/commands/deployment/status.d.ts +3 -0
- package/dist/cli/commands/deployment/status.d.ts.map +1 -0
- package/dist/cli/commands/deployment/status.js +59 -0
- package/dist/cli/commands/deployment/status.js.map +1 -0
- package/dist/cli/commands/deployment/teardown.d.ts +3 -0
- package/dist/cli/commands/deployment/teardown.d.ts.map +1 -0
- package/dist/cli/commands/deployment/teardown.js +178 -0
- package/dist/cli/commands/deployment/teardown.js.map +1 -0
- package/dist/cli/commands/identity-context/context.d.ts +3 -0
- package/dist/cli/commands/identity-context/context.d.ts.map +1 -0
- package/dist/cli/commands/identity-context/context.js +47 -0
- package/dist/cli/commands/identity-context/context.js.map +1 -0
- package/dist/cli/commands/identity-context/index.d.ts +2 -0
- package/dist/cli/commands/identity-context/index.d.ts.map +1 -0
- package/dist/cli/commands/identity-context/index.js +94 -0
- package/dist/cli/commands/identity-context/index.js.map +1 -0
- package/dist/cli/commands/identity-context/keys.d.ts +5 -0
- package/dist/cli/commands/identity-context/keys.d.ts.map +1 -0
- package/dist/cli/commands/identity-context/keys.js +52 -0
- package/dist/cli/commands/identity-context/keys.js.map +1 -0
- package/dist/cli/commands/identity-context/login.d.ts +2 -0
- package/dist/cli/commands/identity-context/login.d.ts.map +1 -0
- package/dist/cli/commands/identity-context/login.js +158 -0
- package/dist/cli/commands/identity-context/login.js.map +1 -0
- package/dist/cli/commands/identity-context/logout.d.ts +2 -0
- package/dist/cli/commands/identity-context/logout.d.ts.map +1 -0
- package/dist/cli/commands/identity-context/logout.js +12 -0
- package/dist/cli/commands/identity-context/logout.js.map +1 -0
- package/dist/cli/commands/identity-context/org-switch.d.ts +3 -0
- package/dist/cli/commands/identity-context/org-switch.d.ts.map +1 -0
- package/dist/cli/commands/identity-context/org-switch.js +71 -0
- package/dist/cli/commands/identity-context/org-switch.js.map +1 -0
- package/dist/cli/commands/identity-context/use.d.ts +3 -0
- package/dist/cli/commands/identity-context/use.d.ts.map +1 -0
- package/dist/cli/commands/identity-context/use.js +23 -0
- package/dist/cli/commands/identity-context/use.js.map +1 -0
- package/dist/cli/commands/identity-context/whoami.d.ts +3 -0
- package/dist/cli/commands/identity-context/whoami.d.ts.map +1 -0
- package/dist/cli/commands/identity-context/whoami.js +80 -0
- package/dist/cli/commands/identity-context/whoami.js.map +1 -0
- package/dist/cli/commands/index.d.ts +4 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +67 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/project-config/config/build-fields.d.ts +4 -0
- package/dist/cli/commands/project-config/config/build-fields.d.ts.map +1 -0
- package/dist/cli/commands/project-config/config/build-fields.js +16 -0
- package/dist/cli/commands/project-config/config/build-fields.js.map +1 -0
- package/dist/cli/commands/project-config/config/build.d.ts +4 -0
- package/dist/cli/commands/project-config/config/build.d.ts.map +1 -0
- package/dist/cli/commands/project-config/config/build.js +46 -0
- package/dist/cli/commands/project-config/config/build.js.map +1 -0
- package/dist/cli/commands/project-config/config/desired-state.d.ts +4 -0
- package/dist/cli/commands/project-config/config/desired-state.d.ts.map +1 -0
- package/dist/cli/commands/project-config/config/desired-state.js +34 -0
- package/dist/cli/commands/project-config/config/desired-state.js.map +1 -0
- package/dist/cli/commands/project-config/config/index.d.ts +2 -0
- package/dist/cli/commands/project-config/config/index.d.ts.map +1 -0
- package/dist/cli/commands/project-config/config/index.js +177 -0
- package/dist/cli/commands/project-config/config/index.js.map +1 -0
- package/dist/cli/commands/project-config/config/runtime.d.ts +3 -0
- package/dist/cli/commands/project-config/config/runtime.d.ts.map +1 -0
- package/dist/cli/commands/project-config/config/runtime.js +38 -0
- package/dist/cli/commands/project-config/config/runtime.js.map +1 -0
- package/dist/cli/commands/project-config/config/search.d.ts +3 -0
- package/dist/cli/commands/project-config/config/search.d.ts.map +1 -0
- package/dist/cli/commands/project-config/config/search.js +54 -0
- package/dist/cli/commands/project-config/config/search.js.map +1 -0
- package/dist/cli/commands/project-config/config/set.d.ts +2 -0
- package/dist/cli/commands/project-config/config/set.d.ts.map +1 -0
- package/dist/cli/commands/project-config/config/set.js +14 -0
- package/dist/cli/commands/project-config/config/set.js.map +1 -0
- package/dist/cli/commands/project-config/config/show.d.ts +6 -0
- package/dist/cli/commands/project-config/config/show.d.ts.map +1 -0
- package/dist/cli/commands/project-config/config/show.js +33 -0
- package/dist/cli/commands/project-config/config/show.js.map +1 -0
- package/dist/cli/commands/project-config/env/add.d.ts +3 -0
- package/dist/cli/commands/project-config/env/add.d.ts.map +1 -0
- package/dist/cli/commands/project-config/env/add.js +22 -0
- package/dist/cli/commands/project-config/env/add.js.map +1 -0
- package/dist/cli/commands/project-config/env/get.d.ts +3 -0
- package/dist/cli/commands/project-config/env/get.d.ts.map +1 -0
- package/dist/cli/commands/project-config/env/get.js +12 -0
- package/dist/cli/commands/project-config/env/get.js.map +1 -0
- package/dist/cli/commands/project-config/env/import.d.ts +3 -0
- package/dist/cli/commands/project-config/env/import.d.ts.map +1 -0
- package/dist/cli/commands/project-config/env/import.js +45 -0
- package/dist/cli/commands/project-config/env/import.js.map +1 -0
- package/dist/cli/commands/project-config/env/index.d.ts +2 -0
- package/dist/cli/commands/project-config/env/index.d.ts.map +1 -0
- package/dist/cli/commands/project-config/env/index.js +103 -0
- package/dist/cli/commands/project-config/env/index.js.map +1 -0
- package/dist/cli/commands/project-config/env/list.d.ts +3 -0
- package/dist/cli/commands/project-config/env/list.d.ts.map +1 -0
- package/dist/cli/commands/project-config/env/list.js +25 -0
- package/dist/cli/commands/project-config/env/list.js.map +1 -0
- package/dist/cli/commands/project-config/env/metadata-options.d.ts +9 -0
- package/dist/cli/commands/project-config/env/metadata-options.d.ts.map +1 -0
- package/dist/cli/commands/project-config/env/metadata-options.js +32 -0
- package/dist/cli/commands/project-config/env/metadata-options.js.map +1 -0
- package/dist/cli/commands/project-config/env/pull.d.ts +3 -0
- package/dist/cli/commands/project-config/env/pull.d.ts.map +1 -0
- package/dist/cli/commands/project-config/env/pull.js +50 -0
- package/dist/cli/commands/project-config/env/pull.js.map +1 -0
- package/dist/cli/commands/project-config/env/read-value.d.ts +3 -0
- package/dist/cli/commands/project-config/env/read-value.d.ts.map +1 -0
- package/dist/cli/commands/project-config/env/read-value.js +20 -0
- package/dist/cli/commands/project-config/env/read-value.js.map +1 -0
- package/dist/cli/commands/project-config/env/rm.d.ts +3 -0
- package/dist/cli/commands/project-config/env/rm.d.ts.map +1 -0
- package/dist/cli/commands/project-config/env/rm.js +23 -0
- package/dist/cli/commands/project-config/env/rm.js.map +1 -0
- package/dist/cli/commands/project-config/env/run.d.ts +3 -0
- package/dist/cli/commands/project-config/env/run.d.ts.map +1 -0
- package/dist/cli/commands/project-config/env/run.js +28 -0
- package/dist/cli/commands/project-config/env/run.js.map +1 -0
- package/dist/cli/commands/project-config/env/update.d.ts +3 -0
- package/dist/cli/commands/project-config/env/update.d.ts.map +1 -0
- package/dist/cli/commands/project-config/env/update.js +32 -0
- package/dist/cli/commands/project-config/env/update.js.map +1 -0
- package/dist/cli/commands/project-config/environment/create.d.ts +3 -0
- package/dist/cli/commands/project-config/environment/create.d.ts.map +1 -0
- package/dist/cli/commands/project-config/environment/create.js +33 -0
- package/dist/cli/commands/project-config/environment/create.js.map +1 -0
- package/dist/cli/commands/project-config/environment/delete.d.ts +3 -0
- package/dist/cli/commands/project-config/environment/delete.d.ts.map +1 -0
- package/dist/cli/commands/project-config/environment/delete.js +42 -0
- package/dist/cli/commands/project-config/environment/delete.js.map +1 -0
- package/dist/cli/commands/project-config/environment/find.d.ts +7 -0
- package/dist/cli/commands/project-config/environment/find.d.ts.map +1 -0
- package/dist/cli/commands/project-config/environment/find.js +18 -0
- package/dist/cli/commands/project-config/environment/find.js.map +1 -0
- package/dist/cli/commands/project-config/environment/index.d.ts +2 -0
- package/dist/cli/commands/project-config/environment/index.d.ts.map +1 -0
- package/dist/cli/commands/project-config/environment/index.js +76 -0
- package/dist/cli/commands/project-config/environment/index.js.map +1 -0
- package/dist/cli/commands/project-config/environment/initial-superadmin.d.ts +3 -0
- package/dist/cli/commands/project-config/environment/initial-superadmin.d.ts.map +1 -0
- package/dist/cli/commands/project-config/environment/initial-superadmin.js +13 -0
- package/dist/cli/commands/project-config/environment/initial-superadmin.js.map +1 -0
- package/dist/cli/commands/project-config/environment/list.d.ts +3 -0
- package/dist/cli/commands/project-config/environment/list.d.ts.map +1 -0
- package/dist/cli/commands/project-config/environment/list.js +23 -0
- package/dist/cli/commands/project-config/environment/list.js.map +1 -0
- package/dist/cli/commands/project-config/environment/show.d.ts +3 -0
- package/dist/cli/commands/project-config/environment/show.d.ts.map +1 -0
- package/dist/cli/commands/project-config/environment/show.js +30 -0
- package/dist/cli/commands/project-config/environment/show.js.map +1 -0
- package/dist/cli/commands/project-config/environment/update.d.ts +3 -0
- package/dist/cli/commands/project-config/environment/update.d.ts.map +1 -0
- package/dist/cli/commands/project-config/environment/update.js +19 -0
- package/dist/cli/commands/project-config/environment/update.js.map +1 -0
- package/dist/cli/commands/project-config/index.d.ts +3 -0
- package/dist/cli/commands/project-config/index.d.ts.map +1 -0
- package/dist/cli/commands/project-config/index.js +27 -0
- package/dist/cli/commands/project-config/index.js.map +1 -0
- package/dist/cli/commands/project-config/init/build-detection.d.ts +11 -0
- package/dist/cli/commands/project-config/init/build-detection.d.ts.map +1 -0
- package/dist/cli/commands/project-config/init/build-detection.js +113 -0
- package/dist/cli/commands/project-config/init/build-detection.js.map +1 -0
- package/dist/cli/commands/project-config/init/index.d.ts +2 -0
- package/dist/cli/commands/project-config/init/index.d.ts.map +1 -0
- package/dist/cli/commands/project-config/init/index.js +48 -0
- package/dist/cli/commands/project-config/init/index.js.map +1 -0
- package/dist/cli/commands/project-config/init/init.d.ts +14 -0
- package/dist/cli/commands/project-config/init/init.d.ts.map +1 -0
- package/dist/cli/commands/project-config/init/init.js +367 -0
- package/dist/cli/commands/project-config/init/init.js.map +1 -0
- package/dist/cli/commands/project-config/options.d.ts +10 -0
- package/dist/cli/commands/project-config/options.d.ts.map +1 -0
- package/dist/cli/commands/project-config/options.js +80 -0
- package/dist/cli/commands/project-config/options.js.map +1 -0
- package/dist/cli/commands/project-config/project/create.d.ts +3 -0
- package/dist/cli/commands/project-config/project/create.d.ts.map +1 -0
- package/dist/cli/commands/project-config/project/create.js +20 -0
- package/dist/cli/commands/project-config/project/create.js.map +1 -0
- package/dist/cli/commands/project-config/project/delete.d.ts +3 -0
- package/dist/cli/commands/project-config/project/delete.d.ts.map +1 -0
- package/dist/cli/commands/project-config/project/delete.js +28 -0
- package/dist/cli/commands/project-config/project/delete.js.map +1 -0
- package/dist/cli/commands/project-config/project/index.d.ts +2 -0
- package/dist/cli/commands/project-config/project/index.d.ts.map +1 -0
- package/dist/cli/commands/project-config/project/index.js +88 -0
- package/dist/cli/commands/project-config/project/index.js.map +1 -0
- package/dist/cli/commands/project-config/project/link.d.ts +3 -0
- package/dist/cli/commands/project-config/project/link.d.ts.map +1 -0
- package/dist/cli/commands/project-config/project/link.js +45 -0
- package/dist/cli/commands/project-config/project/link.js.map +1 -0
- package/dist/cli/commands/project-config/project/list.d.ts +3 -0
- package/dist/cli/commands/project-config/project/list.d.ts.map +1 -0
- package/dist/cli/commands/project-config/project/list.js +15 -0
- package/dist/cli/commands/project-config/project/list.js.map +1 -0
- package/dist/cli/commands/project-config/project/show.d.ts +3 -0
- package/dist/cli/commands/project-config/project/show.d.ts.map +1 -0
- package/dist/cli/commands/project-config/project/show.js +33 -0
- package/dist/cli/commands/project-config/project/show.js.map +1 -0
- package/dist/cli/commands/project-config/project/unlink.d.ts +3 -0
- package/dist/cli/commands/project-config/project/unlink.d.ts.map +1 -0
- package/dist/cli/commands/project-config/project/unlink.js +21 -0
- package/dist/cli/commands/project-config/project/unlink.js.map +1 -0
- package/dist/cli/commands/project-config/project/update.d.ts +3 -0
- package/dist/cli/commands/project-config/project/update.d.ts.map +1 -0
- package/dist/cli/commands/project-config/project/update.js +18 -0
- package/dist/cli/commands/project-config/project/update.js.map +1 -0
- package/dist/cli/commands/project-config/source/connect.d.ts +15 -0
- package/dist/cli/commands/project-config/source/connect.d.ts.map +1 -0
- package/dist/cli/commands/project-config/source/connect.js +208 -0
- package/dist/cli/commands/project-config/source/connect.js.map +1 -0
- package/dist/cli/commands/project-config/source/disconnect.d.ts +3 -0
- package/dist/cli/commands/project-config/source/disconnect.d.ts.map +1 -0
- package/dist/cli/commands/project-config/source/disconnect.js +27 -0
- package/dist/cli/commands/project-config/source/disconnect.js.map +1 -0
- package/dist/cli/commands/project-config/source/index.d.ts +2 -0
- package/dist/cli/commands/project-config/source/index.d.ts.map +1 -0
- package/dist/cli/commands/project-config/source/index.js +74 -0
- package/dist/cli/commands/project-config/source/index.js.map +1 -0
- package/dist/cli/commands/project-config/source/map.d.ts +3 -0
- package/dist/cli/commands/project-config/source/map.d.ts.map +1 -0
- package/dist/cli/commands/project-config/source/map.js +93 -0
- package/dist/cli/commands/project-config/source/map.js.map +1 -0
- package/dist/cli/commands/project-config/source/repos.d.ts +3 -0
- package/dist/cli/commands/project-config/source/repos.d.ts.map +1 -0
- package/dist/cli/commands/project-config/source/repos.js +18 -0
- package/dist/cli/commands/project-config/source/repos.js.map +1 -0
- package/dist/cli/commands/project-config/source/status.d.ts +3 -0
- package/dist/cli/commands/project-config/source/status.d.ts.map +1 -0
- package/dist/cli/commands/project-config/source/status.js +72 -0
- package/dist/cli/commands/project-config/source/status.js.map +1 -0
- package/dist/cli/commands/runtime-data/backup.d.ts +5 -0
- package/dist/cli/commands/runtime-data/backup.d.ts.map +1 -0
- package/dist/cli/commands/runtime-data/backup.js +107 -0
- package/dist/cli/commands/runtime-data/backup.js.map +1 -0
- package/dist/cli/commands/runtime-data/index.d.ts +2 -0
- package/dist/cli/commands/runtime-data/index.d.ts.map +1 -0
- package/dist/cli/commands/runtime-data/index.js +206 -0
- package/dist/cli/commands/runtime-data/index.js.map +1 -0
- package/dist/cli/commands/runtime-data/resource.d.ts +11 -0
- package/dist/cli/commands/runtime-data/resource.d.ts.map +1 -0
- package/dist/cli/commands/runtime-data/resource.js +147 -0
- package/dist/cli/commands/runtime-data/resource.js.map +1 -0
- package/dist/cli/commands/runtime-data/restore.d.ts +3 -0
- package/dist/cli/commands/runtime-data/restore.d.ts.map +1 -0
- package/dist/cli/commands/runtime-data/restore.js +119 -0
- package/dist/cli/commands/runtime-data/restore.js.map +1 -0
- package/dist/cli/commands/runtime-data/seeds.d.ts +6 -0
- package/dist/cli/commands/runtime-data/seeds.d.ts.map +1 -0
- package/dist/cli/commands/runtime-data/seeds.js +213 -0
- package/dist/cli/commands/runtime-data/seeds.js.map +1 -0
- package/dist/cli/commands/runtime-data/tunnel.d.ts +16 -0
- package/dist/cli/commands/runtime-data/tunnel.d.ts.map +1 -0
- package/dist/cli/commands/runtime-data/tunnel.js +249 -0
- package/dist/cli/commands/runtime-data/tunnel.js.map +1 -0
- package/dist/cli/host-arguments.d.ts +7 -0
- package/dist/cli/host-arguments.d.ts.map +1 -0
- package/dist/cli/host-arguments.js +46 -0
- package/dist/cli/host-arguments.js.map +1 -0
- package/dist/cli/host-nodes.d.ts +30 -0
- package/dist/cli/host-nodes.d.ts.map +1 -0
- package/dist/cli/host-nodes.js +17 -0
- package/dist/cli/host-nodes.js.map +1 -0
- package/dist/cli/index.d.ts +29 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +60 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/lib/api-client.d.ts +19 -0
- package/dist/cli/lib/api-client.d.ts.map +1 -0
- package/dist/cli/lib/api-client.js +111 -0
- package/dist/cli/lib/api-client.js.map +1 -0
- package/dist/cli/lib/auth.d.ts +132 -0
- package/dist/cli/lib/auth.d.ts.map +1 -0
- package/dist/cli/lib/auth.js +505 -0
- package/dist/cli/lib/auth.js.map +1 -0
- package/dist/cli/lib/config.d.ts +7 -0
- package/dist/cli/lib/config.d.ts.map +1 -0
- package/dist/cli/lib/config.js +11 -0
- package/dist/cli/lib/config.js.map +1 -0
- package/dist/cli/lib/context.d.ts +10 -0
- package/dist/cli/lib/context.d.ts.map +1 -0
- package/dist/cli/lib/context.js +42 -0
- package/dist/cli/lib/context.js.map +1 -0
- package/dist/cli/lib/contract/build-settings.d.ts +36 -0
- package/dist/cli/lib/contract/build-settings.d.ts.map +1 -0
- package/dist/cli/lib/contract/build-settings.js +73 -0
- package/dist/cli/lib/contract/build-settings.js.map +1 -0
- package/dist/cli/lib/contract/database.d.ts +47 -0
- package/dist/cli/lib/contract/database.d.ts.map +1 -0
- package/dist/cli/lib/contract/database.js +29 -0
- package/dist/cli/lib/contract/database.js.map +1 -0
- package/dist/cli/lib/contract/deployment-resource-labels.d.ts +11 -0
- package/dist/cli/lib/contract/deployment-resource-labels.d.ts.map +1 -0
- package/dist/cli/lib/contract/deployment-resource-labels.js +80 -0
- package/dist/cli/lib/contract/deployment-resource-labels.js.map +1 -0
- package/dist/cli/lib/contract/deployments.d.ts +128 -0
- package/dist/cli/lib/contract/deployments.d.ts.map +1 -0
- package/dist/cli/lib/contract/deployments.js +46 -0
- package/dist/cli/lib/contract/deployments.js.map +1 -0
- package/dist/cli/lib/contract/desired-state.d.ts +104 -0
- package/dist/cli/lib/contract/desired-state.d.ts.map +1 -0
- package/dist/cli/lib/contract/desired-state.js +171 -0
- package/dist/cli/lib/contract/desired-state.js.map +1 -0
- package/dist/cli/lib/contract/foreign-credentials.d.ts +49 -0
- package/dist/cli/lib/contract/foreign-credentials.d.ts.map +1 -0
- package/dist/cli/lib/contract/foreign-credentials.js +71 -0
- package/dist/cli/lib/contract/foreign-credentials.js.map +1 -0
- package/dist/cli/lib/contract/logs.d.ts +44 -0
- package/dist/cli/lib/contract/logs.d.ts.map +1 -0
- package/dist/cli/lib/contract/logs.js +66 -0
- package/dist/cli/lib/contract/logs.js.map +1 -0
- package/dist/cli/lib/contract/projects.d.ts +31 -0
- package/dist/cli/lib/contract/projects.d.ts.map +1 -0
- package/dist/cli/lib/contract/projects.js +9 -0
- package/dist/cli/lib/contract/projects.js.map +1 -0
- package/dist/cli/lib/contract/public-error-details.d.ts +4 -0
- package/dist/cli/lib/contract/public-error-details.d.ts.map +1 -0
- package/dist/cli/lib/contract/public-error-details.js +248 -0
- package/dist/cli/lib/contract/public-error-details.js.map +1 -0
- package/dist/cli/lib/contract/runtime-operations.d.ts +87 -0
- package/dist/cli/lib/contract/runtime-operations.d.ts.map +1 -0
- package/dist/cli/lib/contract/runtime-operations.js +67 -0
- package/dist/cli/lib/contract/runtime-operations.js.map +1 -0
- package/dist/cli/lib/contract/seeds.d.ts +31 -0
- package/dist/cli/lib/contract/seeds.d.ts.map +1 -0
- package/dist/cli/lib/contract/seeds.js +43 -0
- package/dist/cli/lib/contract/seeds.js.map +1 -0
- package/dist/cli/lib/contract/source-repository.d.ts +73 -0
- package/dist/cli/lib/contract/source-repository.d.ts.map +1 -0
- package/dist/cli/lib/contract/source-repository.js +31 -0
- package/dist/cli/lib/contract/source-repository.js.map +1 -0
- package/dist/cli/lib/contract/wire-types.d.ts +47 -0
- package/dist/cli/lib/contract/wire-types.d.ts.map +1 -0
- package/dist/cli/lib/contract/wire-types.js +13 -0
- package/dist/cli/lib/contract/wire-types.js.map +1 -0
- package/dist/cli/lib/contract/wire-values.d.ts +6 -0
- package/dist/cli/lib/contract/wire-values.d.ts.map +1 -0
- package/dist/cli/lib/contract/wire-values.js +21 -0
- package/dist/cli/lib/contract/wire-values.js.map +1 -0
- package/dist/cli/lib/dotenv.d.ts +2 -0
- package/dist/cli/lib/dotenv.d.ts.map +1 -0
- package/dist/cli/lib/dotenv.js +28 -0
- package/dist/cli/lib/dotenv.js.map +1 -0
- package/dist/cli/lib/env-file.d.ts +2 -0
- package/dist/cli/lib/env-file.d.ts.map +1 -0
- package/dist/cli/lib/env-file.js +26 -0
- package/dist/cli/lib/env-file.js.map +1 -0
- package/dist/cli/lib/env-preflight.d.ts +24 -0
- package/dist/cli/lib/env-preflight.d.ts.map +1 -0
- package/dist/cli/lib/env-preflight.js +265 -0
- package/dist/cli/lib/env-preflight.js.map +1 -0
- package/dist/cli/lib/error-output.d.ts +3 -0
- package/dist/cli/lib/error-output.d.ts.map +1 -0
- package/dist/cli/lib/error-output.js +2 -0
- package/dist/cli/lib/error-output.js.map +1 -0
- package/dist/cli/lib/errors.d.ts +37 -0
- package/dist/cli/lib/errors.d.ts.map +1 -0
- package/dist/cli/lib/errors.js +147 -0
- package/dist/cli/lib/errors.js.map +1 -0
- package/dist/cli/lib/file-lock.d.ts +23 -0
- package/dist/cli/lib/file-lock.d.ts.map +1 -0
- package/dist/cli/lib/file-lock.js +121 -0
- package/dist/cli/lib/file-lock.js.map +1 -0
- package/dist/cli/lib/format.d.ts +6 -0
- package/dist/cli/lib/format.d.ts.map +1 -0
- package/dist/cli/lib/format.js +44 -0
- package/dist/cli/lib/format.js.map +1 -0
- package/dist/cli/lib/id-prefix.d.ts +6 -0
- package/dist/cli/lib/id-prefix.d.ts.map +1 -0
- package/dist/cli/lib/id-prefix.js +18 -0
- package/dist/cli/lib/id-prefix.js.map +1 -0
- package/dist/cli/lib/invocation.d.ts +6 -0
- package/dist/cli/lib/invocation.d.ts.map +1 -0
- package/dist/cli/lib/invocation.js +34 -0
- package/dist/cli/lib/invocation.js.map +1 -0
- package/dist/cli/lib/log-stream.d.ts +7 -0
- package/dist/cli/lib/log-stream.d.ts.map +1 -0
- package/dist/cli/lib/log-stream.js +179 -0
- package/dist/cli/lib/log-stream.js.map +1 -0
- package/dist/cli/lib/logger.d.ts +5 -0
- package/dist/cli/lib/logger.d.ts.map +1 -0
- package/dist/cli/lib/logger.js +52 -0
- package/dist/cli/lib/logger.js.map +1 -0
- package/dist/cli/lib/open-browser.d.ts +2 -0
- package/dist/cli/lib/open-browser.d.ts.map +1 -0
- package/dist/cli/lib/open-browser.js +8 -0
- package/dist/cli/lib/open-browser.js.map +1 -0
- package/dist/cli/lib/organization.d.ts +3 -0
- package/dist/cli/lib/organization.d.ts.map +1 -0
- package/dist/cli/lib/organization.js +20 -0
- package/dist/cli/lib/organization.js.map +1 -0
- package/dist/cli/lib/project-link.d.ts +12 -0
- package/dist/cli/lib/project-link.d.ts.map +1 -0
- package/dist/cli/lib/project-link.js +69 -0
- package/dist/cli/lib/project-link.js.map +1 -0
- package/dist/cli/lib/resolve.d.ts +20 -0
- package/dist/cli/lib/resolve.d.ts.map +1 -0
- package/dist/cli/lib/resolve.js +88 -0
- package/dist/cli/lib/resolve.js.map +1 -0
- package/dist/cli/lib/sleep.d.ts +2 -0
- package/dist/cli/lib/sleep.d.ts.map +1 -0
- package/dist/cli/lib/sleep.js +4 -0
- package/dist/cli/lib/sleep.js.map +1 -0
- package/dist/cli/lib/slug.d.ts +3 -0
- package/dist/cli/lib/slug.d.ts.map +1 -0
- package/dist/cli/lib/slug.js +13 -0
- package/dist/cli/lib/slug.js.map +1 -0
- package/dist/cli/lib/source-repository-link.d.ts +5 -0
- package/dist/cli/lib/source-repository-link.d.ts.map +1 -0
- package/dist/cli/lib/source-repository-link.js +28 -0
- package/dist/cli/lib/source-repository-link.js.map +1 -0
- package/dist/cli/lib/types.d.ts +58 -0
- package/dist/cli/lib/types.d.ts.map +1 -0
- package/dist/cli/lib/types.js +10 -0
- package/dist/cli/lib/types.js.map +1 -0
- package/dist/cli/root-options.d.ts +14 -0
- package/dist/cli/root-options.d.ts.map +1 -0
- package/dist/cli/root-options.js +53 -0
- package/dist/cli/root-options.js.map +1 -0
- package/dist/cli-plugin.d.ts +22 -0
- package/dist/cli-plugin.d.ts.map +1 -0
- package/dist/cli-plugin.js +30 -0
- package/dist/cli-plugin.js.map +1 -0
- package/dist/cloud-config-module.d.ts +3 -0
- package/dist/cloud-config-module.d.ts.map +1 -0
- package/dist/cloud-config-module.js +16 -0
- package/dist/cloud-config-module.js.map +1 -0
- package/dist/dev/cli-host.d.ts +3 -0
- package/dist/dev/cli-host.d.ts.map +1 -0
- package/dist/dev/cli-host.js +72 -0
- package/dist/dev/cli-host.js.map +1 -0
- package/dist/dev/dev-command.d.ts +7 -0
- package/dist/dev/dev-command.d.ts.map +1 -0
- package/dist/dev/dev-command.js +122 -0
- package/dist/dev/dev-command.js.map +1 -0
- package/dist/dev/dev-config.d.ts +4 -0
- package/dist/dev/dev-config.d.ts.map +1 -0
- package/dist/dev/dev-config.js +28 -0
- package/dist/dev/dev-config.js.map +1 -0
- package/dist/dev/dev-migrate.d.ts +2 -0
- package/dist/dev/dev-migrate.d.ts.map +1 -0
- package/dist/dev/dev-migrate.js +17 -0
- package/dist/dev/dev-migrate.js.map +1 -0
- package/dist/dev/dev-process.d.ts +2 -0
- package/dist/dev/dev-process.d.ts.map +1 -0
- package/dist/dev/dev-process.js +14 -0
- package/dist/dev/dev-process.js.map +1 -0
- package/dist/dev/dev-server.d.ts +2 -0
- package/dist/dev/dev-server.d.ts.map +1 -0
- package/dist/dev/dev-server.js +15 -0
- package/dist/dev/dev-server.js.map +1 -0
- package/dist/dev/dev-worker.d.ts +2 -0
- package/dist/dev/dev-worker.d.ts.map +1 -0
- package/dist/dev/dev-worker.js +11 -0
- package/dist/dev/dev-worker.js.map +1 -0
- package/dist/dev/local-services.d.ts +23 -0
- package/dist/dev/local-services.d.ts.map +1 -0
- package/dist/dev/local-services.js +288 -0
- package/dist/dev/local-services.js.map +1 -0
- package/dist/dev/project-layout.d.ts +11 -0
- package/dist/dev/project-layout.d.ts.map +1 -0
- package/dist/dev/project-layout.js +89 -0
- package/dist/dev/project-layout.js.map +1 -0
- package/dist/entrypoint.js +3 -12
- package/dist/entrypoint.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/local-asset-server.d.ts +4 -0
- package/dist/local-asset-server.d.ts.map +1 -0
- package/dist/local-asset-server.js +24 -0
- package/dist/local-asset-server.js.map +1 -0
- package/dist/local-cache-plugin.d.ts +5 -0
- package/dist/local-cache-plugin.d.ts.map +1 -0
- package/dist/local-cache-plugin.js +68 -0
- package/dist/local-cache-plugin.js.map +1 -0
- package/dist/local-cache.d.ts +17 -0
- package/dist/local-cache.d.ts.map +1 -0
- package/dist/local-cache.js +144 -0
- package/dist/local-cache.js.map +1 -0
- package/dist/local-dashboard-plugin.d.ts +9 -0
- package/dist/local-dashboard-plugin.d.ts.map +1 -0
- package/dist/local-dashboard-plugin.js +37 -0
- package/dist/local-dashboard-plugin.js.map +1 -0
- package/dist/local-database.d.ts +15 -0
- package/dist/local-database.d.ts.map +1 -0
- package/dist/local-database.js +64 -0
- package/dist/local-database.js.map +1 -0
- package/dist/local-runtime.d.ts +15 -2
- package/dist/local-runtime.d.ts.map +1 -1
- package/dist/local-runtime.js +145 -28
- package/dist/local-runtime.js.map +1 -1
- package/package.json +63 -7
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { createReadStream } from "node:fs";
|
|
2
|
+
import { stat } from "node:fs/promises";
|
|
3
|
+
import { basename } from "node:path";
|
|
4
|
+
import * as prompts from "@clack/prompts";
|
|
5
|
+
import { cloudInvocation, createAuthenticatedClient, formatBytes, formatDateTime, formatTable, requiredArgument, resolveEnvironment, sleep, } from "../../index.js";
|
|
6
|
+
import { SEED_CONTENT_TYPE, SEED_UPLOAD_PRECONDITION_HEADER, SEED_UPLOAD_PRECONDITION_VALUE, isValidSeedName, } from "../../lib/contract/seeds.js";
|
|
7
|
+
const POLL_INTERVAL_MS = 3_000;
|
|
8
|
+
// Long enough for a real dump. The apply runs as a task in the environment's Cell and the platform
|
|
9
|
+
// stops it at its own, longer deadline, so a client giving up here abandons the wait rather than the
|
|
10
|
+
// work: the operation goes on and its outcome is on the record the id names.
|
|
11
|
+
const APPLY_TIMEOUT_MS = 60 * 60 * 1000;
|
|
12
|
+
// Postgres restore does not repopulate the search index — that runs separately
|
|
13
|
+
// (CLO-220 automates it). Until then, tell the operator search is empty.
|
|
14
|
+
const SEARCH_WARNING = "The search index was not rebuilt. Products won't appear in search until a reindex runs (Admin UI → Products → reindex, or your app's reindex job).";
|
|
15
|
+
export async function pushSeed({ args, globals }) {
|
|
16
|
+
const name = requiredArgument(args, 0, "name");
|
|
17
|
+
const file = requiredArgument(args, 1, "file");
|
|
18
|
+
assertValidSeedName(name);
|
|
19
|
+
if (!file.endsWith(".gz")) {
|
|
20
|
+
throw new Error(`Seed artifacts must be gzipped plain-SQL ('.gz'). "${basename(file)}" does not end with .gz.`);
|
|
21
|
+
}
|
|
22
|
+
const info = await stat(file).catch(() => {
|
|
23
|
+
throw new Error(`File not found: ${file}`);
|
|
24
|
+
});
|
|
25
|
+
if (!info.isFile()) {
|
|
26
|
+
throw new Error(`Not a file: ${file}`);
|
|
27
|
+
}
|
|
28
|
+
const client = createAuthenticatedClient(globals);
|
|
29
|
+
const spinner = globals.json ? null : prompts.spinner();
|
|
30
|
+
spinner?.start(`Uploading ${basename(file)} as seed "${name}"...`);
|
|
31
|
+
// Request a short-lived presigned upload URL, then PUT the bytes straight to
|
|
32
|
+
// storage — the CLI never holds bucket credentials. Two signed headers must be
|
|
33
|
+
// echoed exactly: the Content-Type the URL was signed with, and the create-only
|
|
34
|
+
// precondition, which is part of the signature rather than a header the client
|
|
35
|
+
// may choose. The file is streamed (not buffered) with a known Content-Length,
|
|
36
|
+
// so a multi-GB dump never has to fit in the CLI's memory.
|
|
37
|
+
const ticket = await client.post(`/seeds/${encodeURIComponent(name)}/upload-url`);
|
|
38
|
+
// `duplex: "half"` is required when the body is a stream but isn't in the DOM
|
|
39
|
+
// RequestInit type; the intersection lets us pass it without a cast.
|
|
40
|
+
const uploadInit = {
|
|
41
|
+
method: "PUT",
|
|
42
|
+
headers: {
|
|
43
|
+
"content-type": SEED_CONTENT_TYPE,
|
|
44
|
+
"content-length": String(info.size),
|
|
45
|
+
[SEED_UPLOAD_PRECONDITION_HEADER]: SEED_UPLOAD_PRECONDITION_VALUE,
|
|
46
|
+
},
|
|
47
|
+
body: fileToWebStream(file),
|
|
48
|
+
duplex: "half",
|
|
49
|
+
};
|
|
50
|
+
const response = await fetch(ticket.uploadUrl, uploadInit);
|
|
51
|
+
if (response.status === 412) {
|
|
52
|
+
spinner?.stop("Upload rejected");
|
|
53
|
+
throw new Error(`A seed named "${name}" already exists. Delete it first with \`${cloudInvocation()} seed rm ${name}\`, or use a different name.`);
|
|
54
|
+
}
|
|
55
|
+
if (!response.ok) {
|
|
56
|
+
spinner?.stop("Upload failed");
|
|
57
|
+
throw new Error(`Upload failed: HTTP ${response.status} ${response.statusText}`);
|
|
58
|
+
}
|
|
59
|
+
spinner?.stop("Upload complete.");
|
|
60
|
+
if (globals.json) {
|
|
61
|
+
writeCompactJson({ name, sizeBytes: info.size });
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
prompts.log.success(`Seed "${name}" uploaded (${formatBytes(info.size)}).`);
|
|
65
|
+
prompts.log.info(`Apply it with \`${cloudInvocation()} seed apply ${name} -e <environment>\`.`);
|
|
66
|
+
}
|
|
67
|
+
export async function listSeeds({ globals }) {
|
|
68
|
+
const client = createAuthenticatedClient(globals);
|
|
69
|
+
// In JSON mode, keep stdout to the machine-readable payload only — no spinner
|
|
70
|
+
// or notes, which clack writes to stdout and would corrupt the output.
|
|
71
|
+
const spinner = globals.json ? null : prompts.spinner();
|
|
72
|
+
spinner?.start("Fetching seeds...");
|
|
73
|
+
const seeds = await client.get("/seeds");
|
|
74
|
+
spinner?.stop("Done.");
|
|
75
|
+
if (globals.json) {
|
|
76
|
+
writeCompactJson(seeds);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (seeds.length === 0) {
|
|
80
|
+
prompts.log.info(`No seeds yet. Upload one with \`${cloudInvocation()} seed push <name> <file.gz>\`.`);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const rows = seeds
|
|
84
|
+
.slice()
|
|
85
|
+
.sort((a, b) => a.name.localeCompare(b.name))
|
|
86
|
+
.map((s) => [s.name, formatBytes(s.sizeBytes), formatDateTime(s.updatedAt)]);
|
|
87
|
+
prompts.note(formatTable(["NAME", "SIZE", "UPDATED"], rows), "Seeds");
|
|
88
|
+
prompts.log.info(`Apply one with \`${cloudInvocation()} seed apply <name> -e <environment>\`.`);
|
|
89
|
+
}
|
|
90
|
+
export async function applySeed({ args, options, globals }) {
|
|
91
|
+
const name = requiredArgument(args, 0, "name");
|
|
92
|
+
assertValidSeedName(name);
|
|
93
|
+
// Applying a seed overwrites the environment's entire database, so confirm
|
|
94
|
+
// unless `--yes`. JSON / non-interactive callers must pass `--yes` — checked
|
|
95
|
+
// before resolving the environment so it fails fast without a network call.
|
|
96
|
+
const needsConfirmation = options.yes !== true;
|
|
97
|
+
if (needsConfirmation && (globals.json || !process.stdin.isTTY)) {
|
|
98
|
+
throw new Error("Applying a seed overwrites all data in the target environment. Re-run with --yes to proceed non-interactively.");
|
|
99
|
+
}
|
|
100
|
+
const { project, environment } = await resolveEnvironment(globals);
|
|
101
|
+
if (needsConfirmation) {
|
|
102
|
+
const confirmed = await prompts.confirm({
|
|
103
|
+
initialValue: false,
|
|
104
|
+
message: `Apply seed "${name}" to ${project.slug} / ${environment.slug}? All current data in the database will be overwritten.`,
|
|
105
|
+
});
|
|
106
|
+
if (prompts.isCancel(confirmed) || !confirmed) {
|
|
107
|
+
prompts.log.info("Apply cancelled.");
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const client = createAuthenticatedClient(globals);
|
|
112
|
+
const spinner = globals.json ? null : prompts.spinner();
|
|
113
|
+
spinner?.start(`Applying seed "${name}" to ${project.slug} / ${environment.slug}...`);
|
|
114
|
+
let started;
|
|
115
|
+
try {
|
|
116
|
+
started = await client.post(`/environments/${environment.id}/seed`, { name });
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
spinner?.stop("Seed could not be started");
|
|
120
|
+
throw error;
|
|
121
|
+
}
|
|
122
|
+
const startTime = Date.now();
|
|
123
|
+
let current = { operationId: started.operationId, status: "pending" };
|
|
124
|
+
while (current.status === "pending") {
|
|
125
|
+
if (Date.now() - startTime > APPLY_TIMEOUT_MS) {
|
|
126
|
+
spinner?.stop("Seeding is taking longer than expected");
|
|
127
|
+
throw new Error(`Seed apply ${started.operationId} has not finished after an hour. It is still running, and Vendure Cloud will finish or stop it on its own — do not deploy this environment or apply another seed to it until then.`);
|
|
128
|
+
}
|
|
129
|
+
await sleep(POLL_INTERVAL_MS);
|
|
130
|
+
current = await client.get(`/environments/${environment.id}/seed/${encodeURIComponent(started.operationId)}`);
|
|
131
|
+
}
|
|
132
|
+
if (current.status !== "success") {
|
|
133
|
+
spinner?.stop("Seed apply failed");
|
|
134
|
+
// The control plane's own sentence when it has one — it is written for a customer and says what
|
|
135
|
+
// to do next. The status alone is the fallback, for a control plane that predates the field.
|
|
136
|
+
throw new Error(current.errorDetails ??
|
|
137
|
+
`Seed apply ${started.operationId} ended with status "${current.status}".`);
|
|
138
|
+
}
|
|
139
|
+
spinner?.stop("Seed applied.");
|
|
140
|
+
if (globals.json) {
|
|
141
|
+
writeCompactJson({
|
|
142
|
+
operationId: current.operationId,
|
|
143
|
+
status: current.status,
|
|
144
|
+
environmentId: environment.id,
|
|
145
|
+
});
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
prompts.log.success(`Seed "${name}" applied to ${project.slug} / ${environment.slug}.`);
|
|
149
|
+
prompts.log.warn(SEARCH_WARNING);
|
|
150
|
+
}
|
|
151
|
+
export async function removeSeed({ args, options, globals }) {
|
|
152
|
+
const name = requiredArgument(args, 0, "name");
|
|
153
|
+
assertValidSeedName(name);
|
|
154
|
+
// A seed can be referenced by an environment's config, so confirm before
|
|
155
|
+
// deleting. `--yes` bypasses for scripts; JSON mode has no TTY to prompt on and
|
|
156
|
+
// therefore requires `--yes`.
|
|
157
|
+
if (options.yes !== true) {
|
|
158
|
+
if (globals.json || !process.stdin.isTTY) {
|
|
159
|
+
throw new Error(`Refusing to delete seed "${name}" without confirmation — pass --yes.`);
|
|
160
|
+
}
|
|
161
|
+
const confirmed = await prompts.confirm({
|
|
162
|
+
initialValue: false,
|
|
163
|
+
message: `Delete seed "${name}"? Environments configured to use it will fail to seed until it is replaced.`,
|
|
164
|
+
});
|
|
165
|
+
if (prompts.isCancel(confirmed) || !confirmed) {
|
|
166
|
+
prompts.log.info("Deletion cancelled.");
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const client = createAuthenticatedClient(globals);
|
|
171
|
+
const result = await client.delete(`/seeds/${encodeURIComponent(name)}`);
|
|
172
|
+
if (globals.json) {
|
|
173
|
+
writeCompactJson(result);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
prompts.log.success(`Seed "${result.name}" deleted.`);
|
|
177
|
+
}
|
|
178
|
+
// Client-side pre-validation for a fast, clear error; the control plane is the
|
|
179
|
+
// authority. Delegates to the single seed-name rule the wire contract carries
|
|
180
|
+
// (CLO-217) so the two never drift.
|
|
181
|
+
function assertValidSeedName(name) {
|
|
182
|
+
if (!isValidSeedName(name)) {
|
|
183
|
+
throw new Error(`Invalid seed name "${name}". Use lowercase letters, numbers and hyphens (max 63 characters), e.g. "flowtech-preview-slim".`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// One line, no indentation. `writeJson` pretty-prints, which is what `resource` has always written
|
|
187
|
+
// and what these four have never written; a script reading a seed command's stdout line by line
|
|
188
|
+
// would stop working on the change.
|
|
189
|
+
function writeCompactJson(value) {
|
|
190
|
+
process.stdout.write(`${JSON.stringify(value)}\n`);
|
|
191
|
+
}
|
|
192
|
+
// Bridges a file read stream to a web ReadableStream for a streaming upload body,
|
|
193
|
+
// so a multi-GB dump is never held in memory. Driving the file's async iterator
|
|
194
|
+
// from `pull` gives natural backpressure — a chunk is only read when the upload
|
|
195
|
+
// consumer asks for one.
|
|
196
|
+
function fileToWebStream(path) {
|
|
197
|
+
const iterator = createReadStream(path)[Symbol.asyncIterator]();
|
|
198
|
+
return new ReadableStream({
|
|
199
|
+
async pull(controller) {
|
|
200
|
+
const { done, value } = await iterator.next();
|
|
201
|
+
if (done) {
|
|
202
|
+
controller.close();
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
controller.enqueue(value);
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
async cancel() {
|
|
209
|
+
await iterator.return?.();
|
|
210
|
+
},
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=seeds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeds.js","sourceRoot":"","sources":["../../../../src/cli/commands/runtime-data/seeds.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ApiClient, type CloudCommandInput } from "../../index.js";
|
|
2
|
+
import type { TunnelTicket } from "../../lib/contract/database.js";
|
|
3
|
+
export interface TunnelHandle {
|
|
4
|
+
port: number;
|
|
5
|
+
database: TunnelTicket["database"];
|
|
6
|
+
close: () => Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare function buildConnectionString(database: TunnelTicket["database"], port: number): string;
|
|
9
|
+
export declare function openDatabaseTunnel({ options, globals }: CloudCommandInput): Promise<number>;
|
|
10
|
+
export declare function startDbTunnel(options: {
|
|
11
|
+
client: ApiClient;
|
|
12
|
+
environmentId: string;
|
|
13
|
+
apiUrl: string;
|
|
14
|
+
requestedPort?: number;
|
|
15
|
+
}): Promise<TunnelHandle>;
|
|
16
|
+
//# sourceMappingURL=tunnel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/runtime-data/tunnel.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,iBAAiB,EAKvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAenE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAiBD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9F;AAED,wBAAsB,kBAAkB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8CjG;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC3C,MAAM,EAAE,SAAS,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,YAAY,CAAC,CA6BxB"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import net from "node:net";
|
|
2
|
+
import * as prompts from "@clack/prompts";
|
|
3
|
+
import { createAuthenticatedClient, getApiUrl, logger, resolveEnvironment, } from "../../index.js";
|
|
4
|
+
// Local tunnel to the environment database. Per accepted TCP connection the
|
|
5
|
+
// CLI mints a single-use ticket over HTTPS and opens one WebSocket to the
|
|
6
|
+
// control plane, which relays to the database. The ticket travels as the
|
|
7
|
+
// FIRST WS message — never in the URL.
|
|
8
|
+
//
|
|
9
|
+
// Uses the runtime's built-in WebSocket, which Node has had since 22.
|
|
10
|
+
const DEFAULT_PORT = 5432;
|
|
11
|
+
// Gateway close codes (mirror apps/control-plane database-tunnel.gateway.ts).
|
|
12
|
+
const CLOSE_IDLE_TIMEOUT = 4410;
|
|
13
|
+
const CLOSE_MAX_DURATION = 4411;
|
|
14
|
+
// Local connection string for the tunnel. The relay is a transparent pipe and
|
|
15
|
+
// TLS is negotiated end-to-end with the database (ADR-0006), so the client must
|
|
16
|
+
// request TLS — `sslmode=require` (not `verify-full`), because the client dials
|
|
17
|
+
// 127.0.0.1 and the cert belongs to the remote DB: encrypt without hostname
|
|
18
|
+
// verification.
|
|
19
|
+
//
|
|
20
|
+
// This is libpq semantics (psql and other libpq clients consume this string),
|
|
21
|
+
// where `require` means "encrypt, do not verify the CA". The managed app runs
|
|
22
|
+
// node-postgres, whose `PGSSLMODE` handling differs — there the equivalent value
|
|
23
|
+
// is `no-verify`, injected as a managed env var (ADR-0011). Same intent, different
|
|
24
|
+
// driver: don't unify the two values.
|
|
25
|
+
//
|
|
26
|
+
// Host is `127.0.0.1`, not `localhost`: the listener binds IPv4 loopback, and
|
|
27
|
+
// `localhost` resolves to IPv6 (`::1`) first on many systems — a client using it
|
|
28
|
+
// would miss the tunnel (and may hit a local Postgres bound on `::1:5432`).
|
|
29
|
+
export function buildConnectionString(database, port) {
|
|
30
|
+
const sslSuffix = database.tlsEnabled ? "?sslmode=require" : "";
|
|
31
|
+
return `postgres://${encodeURIComponent(database.username)}:${encodeURIComponent(database.password)}@127.0.0.1:${port}/${encodeURIComponent(database.database)}${sslSuffix}`;
|
|
32
|
+
}
|
|
33
|
+
export async function openDatabaseTunnel({ options, globals }) {
|
|
34
|
+
const requestedPort = readPort(options.port);
|
|
35
|
+
const { project, environment } = await resolveEnvironment(globals);
|
|
36
|
+
const client = createAuthenticatedClient(globals);
|
|
37
|
+
const spinner = prompts.spinner();
|
|
38
|
+
spinner.start(`Opening tunnel to ${project.slug} / ${environment.slug} database...`);
|
|
39
|
+
let handle;
|
|
40
|
+
try {
|
|
41
|
+
handle = await startDbTunnel({
|
|
42
|
+
client,
|
|
43
|
+
environmentId: environment.id,
|
|
44
|
+
apiUrl: getApiUrl(),
|
|
45
|
+
requestedPort,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
spinner.stop("Could not open tunnel");
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
const { database, port } = handle;
|
|
53
|
+
const connectionString = buildConnectionString(database, port);
|
|
54
|
+
// Printed as plain lines, not a boxed note: the connection string is long
|
|
55
|
+
// enough to overflow a clack note box and fragment its borders.
|
|
56
|
+
spinner.stop(`Tunnel open on 127.0.0.1:${port}`);
|
|
57
|
+
prompts.log.message(connectionString);
|
|
58
|
+
prompts.log.info("Press Ctrl-C to close the tunnel.");
|
|
59
|
+
// The command runs until Ctrl-C — the net server holds the event loop — and then answers with
|
|
60
|
+
// the code the host exits on. `vcloud` called `process.exit` from the signal handler itself;
|
|
61
|
+
// answering instead leaves the exiting where every other command in this family leaves it, and
|
|
62
|
+
// is what makes the teardown observable from a test.
|
|
63
|
+
return await new Promise((resolve) => {
|
|
64
|
+
process.once("SIGINT", () => {
|
|
65
|
+
void handle
|
|
66
|
+
.close()
|
|
67
|
+
.then(() => {
|
|
68
|
+
prompts.outro("Tunnel closed.");
|
|
69
|
+
resolve(0);
|
|
70
|
+
})
|
|
71
|
+
// Never hang on Ctrl-C: if teardown rejects, answer non-zero anyway.
|
|
72
|
+
.catch(() => resolve(1));
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
export async function startDbTunnel(options) {
|
|
77
|
+
const { client, environmentId, apiUrl, requestedPort } = options;
|
|
78
|
+
// The first ticket is minted purely to validate access and fetch the
|
|
79
|
+
// connection credentials — every TCP connection mints its own.
|
|
80
|
+
const initial = await client.post(`/environments/${environmentId}/database/tunnel-tickets`);
|
|
81
|
+
const wsUrl = `${apiUrl.replace(/^http/, "ws")}${initial.wsPath}`;
|
|
82
|
+
const activeSockets = new Set();
|
|
83
|
+
const server = net.createServer((socket) => {
|
|
84
|
+
activeSockets.add(socket);
|
|
85
|
+
socket.on("close", () => activeSockets.delete(socket));
|
|
86
|
+
void relayConnection(socket, client, environmentId, wsUrl);
|
|
87
|
+
});
|
|
88
|
+
const port = await listenWithFallback(server, requestedPort);
|
|
89
|
+
return {
|
|
90
|
+
port,
|
|
91
|
+
database: initial.database,
|
|
92
|
+
close: async () => {
|
|
93
|
+
for (const socket of activeSockets) {
|
|
94
|
+
socket.destroy();
|
|
95
|
+
}
|
|
96
|
+
await new Promise((resolve) => server.close(() => resolve()));
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
async function relayConnection(socket, client, environmentId, wsUrl) {
|
|
101
|
+
// Buffer client bytes (psql sends its startup packet immediately) until
|
|
102
|
+
// the relay is ready. The data listener is attached right away and the queue
|
|
103
|
+
// is kept here rather than left to pause()/resume(), so no byte can arrive
|
|
104
|
+
// while the socket is paused and be dropped by the runtime underneath.
|
|
105
|
+
let ready = false;
|
|
106
|
+
let wsSend = null;
|
|
107
|
+
const pending = [];
|
|
108
|
+
let closed = false;
|
|
109
|
+
let activeWs = null;
|
|
110
|
+
// Idempotent teardown, wired before the ticket-mint await below. The `error`
|
|
111
|
+
// listener must exist from the start: a net.Socket with no 'error' handler
|
|
112
|
+
// throws on a peer RST, and during the mint window there is no other handler —
|
|
113
|
+
// an early RST would otherwise crash the relay. `activeWs` is null until the
|
|
114
|
+
// mint resolves and the WS is created; teardown closes it once it exists. The
|
|
115
|
+
// `closed` flag also lets us skip opening a doomed WS if the client went away
|
|
116
|
+
// mid-mint.
|
|
117
|
+
const teardown = () => {
|
|
118
|
+
// Re-entrant: the `activeWs.close()` below can dispatch the WS `error` event
|
|
119
|
+
// synchronously, whose listener calls teardown again (CLO-550).
|
|
120
|
+
if (closed) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
closed = true;
|
|
124
|
+
socket.destroy();
|
|
125
|
+
if (activeWs &&
|
|
126
|
+
(activeWs.readyState === WebSocket.OPEN || activeWs.readyState === WebSocket.CONNECTING)) {
|
|
127
|
+
activeWs.close();
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
socket.on("error", teardown);
|
|
131
|
+
socket.on("close", teardown);
|
|
132
|
+
socket.on("data", (chunk) => {
|
|
133
|
+
if (ready && wsSend) {
|
|
134
|
+
wsSend(chunk);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
pending.push(chunk);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
let ticket;
|
|
141
|
+
try {
|
|
142
|
+
ticket = await client.post(`/environments/${environmentId}/database/tunnel-tickets`);
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
logger.warn({ error: error instanceof Error ? error.message : error }, "Tunnel ticket mint failed");
|
|
146
|
+
prompts.log.warn("Connection rejected — could not authorize the tunnel.");
|
|
147
|
+
teardown();
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (closed) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const ws = new WebSocket(wsUrl);
|
|
154
|
+
activeWs = ws;
|
|
155
|
+
ws.binaryType = "arraybuffer";
|
|
156
|
+
ws.addEventListener("open", () => {
|
|
157
|
+
ws.send(JSON.stringify({ ticket: ticket.ticket }));
|
|
158
|
+
});
|
|
159
|
+
ws.addEventListener("message", (event) => {
|
|
160
|
+
if (!ready) {
|
|
161
|
+
// First message is the relay handshake.
|
|
162
|
+
if (typeof event.data === "string") {
|
|
163
|
+
try {
|
|
164
|
+
const message = JSON.parse(event.data);
|
|
165
|
+
if (message &&
|
|
166
|
+
typeof message === "object" &&
|
|
167
|
+
message.type === "ready") {
|
|
168
|
+
ready = true;
|
|
169
|
+
wsSend = (chunk) => ws.send(chunk);
|
|
170
|
+
for (const chunk of pending) {
|
|
171
|
+
wsSend(chunk);
|
|
172
|
+
}
|
|
173
|
+
pending.length = 0;
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// Fall through — unexpected handshake, tear down.
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
logger.warn({ data: String(event.data) }, "Unexpected tunnel handshake message");
|
|
182
|
+
teardown();
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (typeof event.data === "string") {
|
|
186
|
+
return; // Control messages after handshake are ignored.
|
|
187
|
+
}
|
|
188
|
+
socket.write(Buffer.from(event.data));
|
|
189
|
+
});
|
|
190
|
+
ws.addEventListener("close", (event) => {
|
|
191
|
+
if (!ready && event.code !== 1000) {
|
|
192
|
+
prompts.log.warn("Connection rejected by the tunnel endpoint.");
|
|
193
|
+
logger.warn({ code: event.code, reason: event.reason }, "Tunnel WS closed before ready");
|
|
194
|
+
}
|
|
195
|
+
else if (event.code === CLOSE_IDLE_TIMEOUT) {
|
|
196
|
+
prompts.log.warn("Connection closed: idle timeout. Reconnect to continue.");
|
|
197
|
+
}
|
|
198
|
+
else if (event.code === CLOSE_MAX_DURATION) {
|
|
199
|
+
prompts.log.warn("Connection closed: maximum tunnel duration reached. Reconnect to continue.");
|
|
200
|
+
}
|
|
201
|
+
socket.destroy();
|
|
202
|
+
});
|
|
203
|
+
ws.addEventListener("error", () => {
|
|
204
|
+
logger.warn("Tunnel WS error");
|
|
205
|
+
teardown();
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
// `--port` is declared with a mandatory value, so the host hands over the string the customer
|
|
209
|
+
// typed or nothing at all. Anything else is a shape this command did not declare.
|
|
210
|
+
function readPort(value) {
|
|
211
|
+
if (value === undefined)
|
|
212
|
+
return undefined;
|
|
213
|
+
const port = typeof value === "string" ? Number.parseInt(value, 10) : Number.NaN;
|
|
214
|
+
if (Number.isNaN(port) || port < 0 || port > 65535) {
|
|
215
|
+
throw new Error(`Invalid port "${String(value)}".`);
|
|
216
|
+
}
|
|
217
|
+
return port;
|
|
218
|
+
}
|
|
219
|
+
async function listenWithFallback(server, requestedPort) {
|
|
220
|
+
const preferred = requestedPort ?? DEFAULT_PORT;
|
|
221
|
+
try {
|
|
222
|
+
await listen(server, preferred);
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
const code = error instanceof Error && "code" in error ? error.code : undefined;
|
|
226
|
+
if (requestedPort !== undefined || (code !== "EADDRINUSE" && code !== "EACCES")) {
|
|
227
|
+
throw error;
|
|
228
|
+
}
|
|
229
|
+
prompts.log.warn(`Port ${preferred} is in use — picking a free port.`);
|
|
230
|
+
await listen(server, 0);
|
|
231
|
+
}
|
|
232
|
+
return server.address().port;
|
|
233
|
+
}
|
|
234
|
+
function listen(server, port) {
|
|
235
|
+
return new Promise((resolve, reject) => {
|
|
236
|
+
const onError = (error) => {
|
|
237
|
+
server.removeListener("listening", onListening);
|
|
238
|
+
reject(error);
|
|
239
|
+
};
|
|
240
|
+
const onListening = () => {
|
|
241
|
+
server.removeListener("error", onError);
|
|
242
|
+
resolve();
|
|
243
|
+
};
|
|
244
|
+
server.once("error", onError);
|
|
245
|
+
server.once("listening", onListening);
|
|
246
|
+
server.listen(port, "127.0.0.1");
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=tunnel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../../../src/cli/commands/runtime-data/tunnel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface CommandContext {
|
|
2
|
+
inheritedOptions: Record<string, unknown>;
|
|
3
|
+
commandPath: string[];
|
|
4
|
+
}
|
|
5
|
+
export declare function readCommandContext(args: readonly unknown[]): CommandContext;
|
|
6
|
+
export declare function readCommandOptions(args: readonly unknown[]): Record<string, unknown>;
|
|
7
|
+
//# sourceMappingURL=host-arguments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-arguments.d.ts","sourceRoot":"","sources":["../../src/cli/host-arguments.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,cAAc,CAe3E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQpF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Reading what a CLI host passed a command action.
|
|
2
|
+
//
|
|
3
|
+
// The Vendure CLI host appends three values after everything Commander supplies — the parsed
|
|
4
|
+
// options, the Commander command, then its own context — and reads them back by counting from the
|
|
5
|
+
// end. `@vendure/cli` exports `readCommandContext` and `readCommandOptions` for that, and this is a
|
|
6
|
+
// restatement of them rather than a call to them.
|
|
7
|
+
//
|
|
8
|
+
// It is a restatement for the same reason `dev/cli-host.ts` is one, and for one more. The first:
|
|
9
|
+
// `import("@vendure/cli")` answers with whichever copy sits nearest this package, which in a
|
|
10
|
+
// workspace is not always the copy that is running, so reading the convention from it proves
|
|
11
|
+
// nothing about the host that actually called. Reaching the running host needs a helper it does not
|
|
12
|
+
// expose (CLO-646). The second: the same actions run under the transitional `vcloud` executable,
|
|
13
|
+
// which is not the Vendure CLI and does not install it — resolving the host there would fail on a
|
|
14
|
+
// customer's machine, and bundling it would pull the whole Vendure CLI, `vite` and `ts-morph`
|
|
15
|
+
// included, into a standalone binary that never runs any of it.
|
|
16
|
+
//
|
|
17
|
+
// A restated convention is a cross-component claim, so it is held by a test rather than by this
|
|
18
|
+
// comment: `test/cli-host-arguments.test.ts` reads the same argument list with these and with the
|
|
19
|
+
// host's own exported readers and requires the same answer.
|
|
20
|
+
const CONTEXT_FROM_END = 1;
|
|
21
|
+
const OPTIONS_FROM_END = 3;
|
|
22
|
+
// Throws rather than defaulting, because a tail that is not there is a calling convention that has
|
|
23
|
+
// moved. A command run with the wrong context would resolve the wrong VC Environment.
|
|
24
|
+
export function readCommandContext(args) {
|
|
25
|
+
const context = args[args.length - CONTEXT_FROM_END];
|
|
26
|
+
if (!isPlainObject(context) || !Array.isArray(context.commandPath)) {
|
|
27
|
+
throw new Error("No CliCommandContext found. Pass the full argument list a command action received.");
|
|
28
|
+
}
|
|
29
|
+
const commandPath = context.commandPath.filter((segment) => typeof segment === "string");
|
|
30
|
+
const inheritedOptions = context.inheritedOptions;
|
|
31
|
+
return {
|
|
32
|
+
inheritedOptions: isPlainObject(inheritedOptions) ? inheritedOptions : {},
|
|
33
|
+
commandPath,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function readCommandOptions(args) {
|
|
37
|
+
const options = args[args.length - OPTIONS_FROM_END];
|
|
38
|
+
if (!isPlainObject(options)) {
|
|
39
|
+
throw new Error("No parsed options found. Pass the full argument list a command action received.");
|
|
40
|
+
}
|
|
41
|
+
return options;
|
|
42
|
+
}
|
|
43
|
+
function isPlainObject(value) {
|
|
44
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=host-arguments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-arguments.js","sourceRoot":"","sources":["../../src/cli/host-arguments.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,6FAA6F;AAC7F,kGAAkG;AAClG,oGAAoG;AACpG,kDAAkD;AAClD,EAAE;AACF,iGAAiG;AACjG,6FAA6F;AAC7F,6FAA6F;AAC7F,oGAAoG;AACpG,iGAAiG;AACjG,kGAAkG;AAClG,8FAA8F;AAC9F,gEAAgE;AAChE,EAAE;AACF,gGAAgG;AAChG,kGAAkG;AAClG,4DAA4D;AAE5D,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAO3B,mGAAmG;AACnG,sFAAsF;AACtF,MAAM,UAAU,kBAAkB,CAAC,IAAwB;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC;IACrD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAC5C,CAAC,OAAO,EAAqB,EAAE,CAAC,OAAO,OAAO,KAAK,QAAQ,CAC5D,CAAC;IACF,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAClD,OAAO;QACL,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;QACzE,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAwB;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC;IACrD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface CloudCommandArgument {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
required?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface CloudCommandOption {
|
|
7
|
+
long: string;
|
|
8
|
+
short?: string;
|
|
9
|
+
description: string;
|
|
10
|
+
required?: boolean;
|
|
11
|
+
defaultValue?: string;
|
|
12
|
+
subOptions?: CloudCommandOption[];
|
|
13
|
+
}
|
|
14
|
+
export type CloudCommandAction = (...args: unknown[]) => Promise<void | number>;
|
|
15
|
+
export interface CloudCommand {
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
arguments?: CloudCommandArgument[];
|
|
19
|
+
options?: CloudCommandOption[];
|
|
20
|
+
action: CloudCommandAction;
|
|
21
|
+
subcommands?: CloudCommandNode[];
|
|
22
|
+
}
|
|
23
|
+
export interface CloudCommandGroupNode {
|
|
24
|
+
name: string;
|
|
25
|
+
description: string;
|
|
26
|
+
options?: CloudCommandOption[];
|
|
27
|
+
subcommands: CloudCommandNode[];
|
|
28
|
+
}
|
|
29
|
+
export type CloudCommandNode = CloudCommand | CloudCommandGroupNode;
|
|
30
|
+
//# sourceMappingURL=host-nodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-nodes.d.ts","sourceRoot":"","sources":["../../src/cli/host-nodes.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACnC;AAMD,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;AAKhF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACnC,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAGD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAED,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// The Vendure CLI host's command shape, restated rather than imported from `@vendure/cli`.
|
|
2
|
+
//
|
|
3
|
+
// Loading the CLI plugin must resolve no package, and that covers a type-only import. TypeScript
|
|
4
|
+
// erases one, so it cannot fail a `vendure` run, but it still has to resolve the specifier to
|
|
5
|
+
// compile. `@vendure/cli` is an optional peer dependency here, and `apps/vc-builder/Dockerfile`
|
|
6
|
+
// compiles this package on its own — where an import that resolves only inside the workspace shows
|
|
7
|
+
// up as TS2307. `test/cli-published-surface.test.ts` counts a type-only reach for that reason.
|
|
8
|
+
//
|
|
9
|
+
// Only as much of the host's shape as this package fills in. `replaces` is absent because it takes
|
|
10
|
+
// over a built-in `vendure` command; the `dev` extension is the only thing here that does that, and
|
|
11
|
+
// a hosted Cloud command that set it would displace a Core command silently.
|
|
12
|
+
//
|
|
13
|
+
// Nothing keeps these in step with the host by construction. The suites that hand the declared tree
|
|
14
|
+
// to the host's own `defineCliPlugin` do: `test/cli-plugin.test.ts` for the whole inventory,
|
|
15
|
+
// `test/cli-boundary.test.ts` and each family's tree suite for the parts.
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=host-nodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-nodes.js","sourceRoot":"","sources":["../../src/cli/host-nodes.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,EAAE;AACF,iGAAiG;AACjG,8FAA8F;AAC9F,gGAAgG;AAChG,mGAAmG;AACnG,+FAA+F;AAC/F,EAAE;AACF,mGAAmG;AACnG,oGAAoG;AACpG,6EAA6E;AAC7E,EAAE;AACF,oGAAoG;AACpG,6FAA6F;AAC7F,0EAA0E"}
|