@catladder/cli 4.1.0 → 4.2.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.
Files changed (125) hide show
  1. package/dist/bundles/catenv/index.js +1 -1
  2. package/dist/bundles/cli/index.js +5 -5
  3. package/dist/cli/src/cli.js +21 -7
  4. package/dist/cli/src/cli.js.map +1 -1
  5. package/dist/cli/src/commands/availability.d.ts +5 -0
  6. package/dist/cli/src/commands/availability.js +26 -0
  7. package/dist/cli/src/commands/availability.js.map +1 -0
  8. package/dist/cli/src/commands/general/commandKubeCurrentContext.js +1 -1
  9. package/dist/cli/src/commands/general/commandKubeCurrentContext.js.map +1 -1
  10. package/dist/cli/src/commands/general/commandKubeGetShell.js +1 -1
  11. package/dist/cli/src/commands/general/commandKubeGetShell.js.map +1 -1
  12. package/dist/cli/src/commands/general/commandKubeListNamespaces.js +1 -1
  13. package/dist/cli/src/commands/general/commandKubeListNamespaces.js.map +1 -1
  14. package/dist/cli/src/commands/general/commandKubeListPods.js +1 -1
  15. package/dist/cli/src/commands/general/commandKubeListPods.js.map +1 -1
  16. package/dist/cli/src/commands/general/commandKubeListSecrets.js +1 -1
  17. package/dist/cli/src/commands/general/commandKubeListSecrets.js.map +1 -1
  18. package/dist/cli/src/commands/general/commandKubePortForward.js +1 -1
  19. package/dist/cli/src/commands/general/commandKubePortForward.js.map +1 -1
  20. package/dist/cli/src/commands/general/commandKubeStopPortforward.js +1 -1
  21. package/dist/cli/src/commands/general/commandKubeStopPortforward.js.map +1 -1
  22. package/dist/cli/src/commands/index.d.ts +9 -8
  23. package/dist/cli/src/commands/index.js +57 -55
  24. package/dist/cli/src/commands/index.js.map +1 -1
  25. package/dist/cli/src/commands/mongodb/commandMongoDestroyMember.js +2 -0
  26. package/dist/cli/src/commands/mongodb/commandMongoDestroyMember.js.map +1 -1
  27. package/dist/cli/src/commands/mongodb/commandMongoGetShell.js +2 -0
  28. package/dist/cli/src/commands/mongodb/commandMongoGetShell.js.map +1 -1
  29. package/dist/cli/src/commands/mongodb/commandMongoPortForward.js +2 -0
  30. package/dist/cli/src/commands/mongodb/commandMongoPortForward.js.map +1 -1
  31. package/dist/cli/src/commands/project/commandCloudSqlProxy.js +2 -0
  32. package/dist/cli/src/commands/project/commandCloudSqlProxy.js.map +1 -1
  33. package/dist/cli/src/commands/project/commandOpenLogs.js +18 -3
  34. package/dist/cli/src/commands/project/commandOpenLogs.js.map +1 -1
  35. package/dist/cli/src/commands/project/commandPortForward.js +2 -0
  36. package/dist/cli/src/commands/project/commandPortForward.js.map +1 -1
  37. package/dist/cli/src/commands/project/commandProjectRestoreDb.js +5 -3
  38. package/dist/cli/src/commands/project/commandProjectRestoreDb.js.map +1 -1
  39. package/dist/cli/src/commands/project/{commandDeletePods.d.ts → k8s/commandDeletePods.d.ts} +1 -1
  40. package/dist/cli/src/commands/project/{commandDeletePods.js → k8s/commandDeletePods.js} +9 -7
  41. package/dist/cli/src/commands/project/k8s/commandDeletePods.js.map +1 -0
  42. package/dist/cli/src/commands/project/{commandDeleteProject.d.ts → k8s/commandDeleteProject.d.ts} +1 -1
  43. package/dist/cli/src/commands/project/{commandDeleteProject.js → k8s/commandDeleteProject.js} +6 -4
  44. package/dist/cli/src/commands/project/k8s/commandDeleteProject.js.map +1 -0
  45. package/dist/cli/src/commands/project/{commandGetShell.d.ts → k8s/commandGetShell.d.ts} +1 -1
  46. package/dist/cli/src/commands/project/{commandGetShell.js → k8s/commandGetShell.js} +9 -7
  47. package/dist/cli/src/commands/project/k8s/commandGetShell.js.map +1 -0
  48. package/dist/cli/src/commands/project/{commandListPods.d.ts → k8s/commandListPods.d.ts} +1 -1
  49. package/dist/cli/src/commands/project/{commandListPods.js → k8s/commandListPods.js} +7 -5
  50. package/dist/cli/src/commands/project/k8s/commandListPods.js.map +1 -0
  51. package/dist/cli/src/commands/project/{commandPauseProject.d.ts → k8s/commandNamespace.d.ts} +1 -1
  52. package/dist/cli/src/commands/project/{commandNamespace.js → k8s/commandNamespace.js} +6 -4
  53. package/dist/cli/src/commands/project/k8s/commandNamespace.js.map +1 -0
  54. package/dist/cli/src/commands/project/{commandNamespace.d.ts → k8s/commandPauseProject.d.ts} +1 -1
  55. package/dist/cli/src/commands/project/{commandPauseProject.js → k8s/commandPauseProject.js} +6 -4
  56. package/dist/cli/src/commands/project/{commandPauseProject.js.map → k8s/commandPauseProject.js.map} +1 -1
  57. package/dist/cli/src/commands/project/{commandTriggerCronjob.d.ts → k8s/commandTriggerCronjob.d.ts} +2 -2
  58. package/dist/cli/src/commands/project/{commandTriggerCronjob.js → k8s/commandTriggerCronjob.js} +10 -8
  59. package/dist/cli/src/commands/project/k8s/commandTriggerCronjob.js.map +1 -0
  60. package/dist/cli/src/config/getProjectConfig.js +3 -15
  61. package/dist/cli/src/config/getProjectConfig.js.map +1 -1
  62. package/dist/cli/src/core/types.d.ts +2 -0
  63. package/dist/cli/src/core/types.js +0 -1
  64. package/dist/cli/src/core/types.js.map +1 -1
  65. package/dist/pipeline/src/build/artifacts/createBuildJobArtifact.d.ts +1 -1
  66. package/dist/pipeline/src/build/artifacts/createBuildJobArtifact.js +8 -8
  67. package/dist/pipeline/src/build/artifacts/createBuildJobArtifact.js.map +1 -1
  68. package/dist/pipeline/src/build/base/createAppBuildJob.d.ts +1 -1
  69. package/dist/pipeline/src/build/base/createAppBuildJob.js +2 -2
  70. package/dist/pipeline/src/build/base/createAppBuildJob.js.map +1 -1
  71. package/dist/pipeline/src/build/base/index.d.ts +2 -2
  72. package/dist/pipeline/src/build/base/index.js +4 -4
  73. package/dist/pipeline/src/build/base/index.js.map +1 -1
  74. package/dist/pipeline/src/build/custom/buildJob.d.ts +1 -1
  75. package/dist/pipeline/src/build/custom/buildJob.js +1 -1
  76. package/dist/pipeline/src/build/custom/buildJob.js.map +1 -1
  77. package/dist/pipeline/src/build/custom/index.d.ts +1 -1
  78. package/dist/pipeline/src/build/custom/index.js +2 -2
  79. package/dist/pipeline/src/build/custom/index.js.map +1 -1
  80. package/dist/pipeline/src/build/rails/build.d.ts +1 -1
  81. package/dist/pipeline/src/build/rails/build.js +1 -1
  82. package/dist/pipeline/src/build/rails/build.js.map +1 -1
  83. package/dist/pipeline/src/build/rails/index.d.ts +1 -1
  84. package/dist/pipeline/src/build/rails/index.js +2 -2
  85. package/dist/pipeline/src/build/rails/index.js.map +1 -1
  86. package/dist/pipeline/src/constants.js +1 -1
  87. package/dist/pipeline/src/context/createComponentContext.js +3 -3
  88. package/dist/pipeline/src/context/createComponentContext.js.map +1 -1
  89. package/dist/pipeline/src/context/createWorkspaceContext.js +1 -1
  90. package/dist/pipeline/src/context/createWorkspaceContext.js.map +1 -1
  91. package/dist/pipeline/src/types/context.d.ts +1 -1
  92. package/dist/tsconfig.tsbuildinfo +1 -1
  93. package/package.json +1 -1
  94. package/src/cli.ts +25 -9
  95. package/src/commands/availability.ts +22 -0
  96. package/src/commands/general/commandKubeCurrentContext.ts +1 -1
  97. package/src/commands/general/commandKubeGetShell.ts +1 -1
  98. package/src/commands/general/commandKubeListNamespaces.ts +1 -1
  99. package/src/commands/general/commandKubeListPods.ts +1 -1
  100. package/src/commands/general/commandKubeListSecrets.ts +1 -1
  101. package/src/commands/general/commandKubePortForward.ts +1 -1
  102. package/src/commands/general/commandKubeStopPortforward.ts +1 -1
  103. package/src/commands/index.ts +11 -11
  104. package/src/commands/mongodb/commandMongoDestroyMember.ts +2 -0
  105. package/src/commands/mongodb/commandMongoGetShell.ts +2 -0
  106. package/src/commands/mongodb/commandMongoPortForward.ts +2 -0
  107. package/src/commands/project/commandCloudSqlProxy.ts +2 -0
  108. package/src/commands/project/commandOpenLogs.ts +22 -3
  109. package/src/commands/project/commandPortForward.ts +2 -0
  110. package/src/commands/project/commandProjectRestoreDb.ts +5 -3
  111. package/src/commands/project/{commandDeletePods.ts → k8s/commandDeletePods.ts} +10 -8
  112. package/src/commands/project/{commandDeleteProject.ts → k8s/commandDeleteProject.ts} +6 -4
  113. package/src/commands/project/{commandGetShell.ts → k8s/commandGetShell.ts} +9 -7
  114. package/src/commands/project/{commandListPods.ts → k8s/commandListPods.ts} +7 -5
  115. package/src/commands/project/{commandNamespace.ts → k8s/commandNamespace.ts} +6 -4
  116. package/src/commands/project/{commandPauseProject.ts → k8s/commandPauseProject.ts} +6 -4
  117. package/src/commands/project/{commandTriggerCronjob.ts → k8s/commandTriggerCronjob.ts} +10 -8
  118. package/src/config/getProjectConfig.ts +3 -13
  119. package/src/core/types.ts +3 -0
  120. package/dist/cli/src/commands/project/commandDeletePods.js.map +0 -1
  121. package/dist/cli/src/commands/project/commandDeleteProject.js.map +0 -1
  122. package/dist/cli/src/commands/project/commandGetShell.js.map +0 -1
  123. package/dist/cli/src/commands/project/commandListPods.js.map +0 -1
  124. package/dist/cli/src/commands/project/commandNamespace.js.map +0 -1
  125. package/dist/cli/src/commands/project/commandTriggerCronjob.js.map +0 -1
package/package.json CHANGED
@@ -53,7 +53,7 @@
53
53
  }
54
54
  ],
55
55
  "license": "MIT",
56
- "version": "4.1.0",
56
+ "version": "4.2.0",
57
57
  "scripts": {
58
58
  "lint": "eslint \"src/**/*.ts\"",
59
59
  "lint:fix": "eslint \"src/**/*.ts\" --fix",
package/src/cli.ts CHANGED
@@ -1,14 +1,16 @@
1
+ import type { ComponentContext } from "@catladder/pipeline";
1
2
  import { Command } from "commander";
2
- import packageInfos from "./packageInfos";
3
- import { stopAllPortForwards } from "./utils/portForwards";
4
3
  import { createTerminalContext } from "./adapters/terminal";
5
- import type { CommandDef } from "./core/types";
6
4
  import {
7
- getCompletions,
8
5
  generateZshCompletionScript,
6
+ getCompletions,
9
7
  installCompletions,
10
8
  uninstallCompletions,
11
9
  } from "./completion";
10
+ import { getAllPipelineContexts } from "./config/getProjectConfig";
11
+ import type { CommandDef } from "./core/types";
12
+ import packageInfos from "./packageInfos";
13
+ import { stopAllPortForwards } from "./utils/portForwards";
12
14
 
13
15
  // Import all commands
14
16
  import * as commands from "./commands";
@@ -150,10 +152,24 @@ function registerCommand(def: CommandDef): void {
150
152
  });
151
153
  }
152
154
 
153
- // Register all commands
154
- for (const cmd of Object.values(commands)) {
155
- if (cmd && typeof cmd === "object" && "name" in cmd && "execute" in cmd) {
156
- registerCommand(cmd as CommandDef);
155
+ // Register all commands (async to support isAvailable checks)
156
+ async function registerAllCommands() {
157
+ // Fetch contexts once for all isAvailable checks
158
+ let contexts: ComponentContext[] = [];
159
+ try {
160
+ contexts = await getAllPipelineContexts();
161
+ } catch {
162
+ // No config available (e.g. outside a project) — contexts stays empty
163
+ }
164
+
165
+ for (const cmd of Object.values(commands)) {
166
+ if (cmd && typeof cmd === "object" && "name" in cmd && "execute" in cmd) {
167
+ const def = cmd as CommandDef;
168
+ if (def.isAvailable) {
169
+ if (!def.isAvailable(contexts)) continue;
170
+ }
171
+ registerCommand(def);
172
+ }
157
173
  }
158
174
  }
159
175
 
@@ -211,4 +227,4 @@ process.on("exit", () => {
211
227
  stopAllPortForwards();
212
228
  });
213
229
 
214
- program.parse();
230
+ registerAllCommands().then(() => program.parse());
@@ -0,0 +1,22 @@
1
+ import type { ComponentContext, DeployConfigType } from "@catladder/pipeline";
2
+ import { isOfDeployType } from "@catladder/pipeline";
3
+
4
+ /** Returns an isAvailable function that checks if ANY component uses one of the given deploy types */
5
+ export function hasDeployType(
6
+ ...types: DeployConfigType[]
7
+ ): (contexts: ComponentContext[]) => boolean {
8
+ return (contexts) =>
9
+ contexts.some((ctx) => isOfDeployType(ctx.deploy?.config, ...types));
10
+ }
11
+
12
+ /** Returns an isAvailable function that checks if ANY component has cloudSql configured */
13
+ export function hasCloudSql(): (contexts: ComponentContext[]) => boolean {
14
+ return (contexts) =>
15
+ contexts.some((ctx) => {
16
+ const cfg = ctx.deploy?.config;
17
+ if (isOfDeployType(cfg, "google-cloudrun")) return !!cfg.cloudSql;
18
+ if (isOfDeployType(cfg, "kubernetes"))
19
+ return !!cfg.values?.cloudsql?.enabled;
20
+ return false;
21
+ });
22
+ }
@@ -2,7 +2,7 @@ import { defineCommand } from "../../core/defineCommand";
2
2
  import { getCurrentContext } from "../../utils/cluster";
3
3
 
4
4
  export const commandKubeCurrentContext = defineCommand({
5
- name: "kube current-context",
5
+ name: "k8s current-context",
6
6
  description: "show current kubernetes context",
7
7
  group: "general",
8
8
  inputs: {},
@@ -4,7 +4,7 @@ import { getk8sApi } from "../../k8sApi";
4
4
  import { getShell } from "../../utils/shell";
5
5
 
6
6
  export const commandKubeGetShell = defineCommand({
7
- name: "kube get-shell",
7
+ name: "k8s get-shell",
8
8
  description: "get a shell to a pod in the environment",
9
9
  group: "general",
10
10
  inputs: {
@@ -2,7 +2,7 @@ import { defineCommand } from "../../core/defineCommand";
2
2
  import { getk8sApi } from "../../k8sApi";
3
3
 
4
4
  export const commandKubeListNamespaces = defineCommand({
5
- name: "kube list-namespaces",
5
+ name: "k8s list-namespaces",
6
6
  description: "list all namespaces",
7
7
  group: "general",
8
8
  inputs: {},
@@ -2,7 +2,7 @@ import { defineCommand } from "../../core/defineCommand";
2
2
  import { getk8sApi } from "../../k8sApi";
3
3
 
4
4
  export const commandKubeListPods = defineCommand({
5
- name: "kube list-pods",
5
+ name: "k8s list-pods",
6
6
  description: "list all pods of namespace",
7
7
  group: "general",
8
8
  inputs: {
@@ -2,7 +2,7 @@ import { defineCommand } from "../../core/defineCommand";
2
2
  import { getk8sApi } from "../../k8sApi";
3
3
 
4
4
  export const commandKubeListSecrets = defineCommand({
5
- name: "kube list-secrets",
5
+ name: "k8s list-secrets",
6
6
  description: "show secrets",
7
7
  group: "general",
8
8
  inputs: {
@@ -3,7 +3,7 @@ import { getk8sApi } from "../../k8sApi";
3
3
  import { startKubePortForward } from "../../kubernetes/portForward";
4
4
 
5
5
  export const commandKubePortForward = defineCommand({
6
- name: "kube port-forward",
6
+ name: "k8s port-forward",
7
7
  description: "start port-forwarding",
8
8
  group: "general",
9
9
  inputs: {
@@ -2,7 +2,7 @@ import { defineCommand } from "../../core/defineCommand";
2
2
  import { stopPortForward } from "../../utils/portForwards";
3
3
 
4
4
  export const commandKubeStopPortforward = defineCommand({
5
- name: "kube stop-portforward",
5
+ name: "k8s stop-portforward",
6
6
  description: "stop a running port forward",
7
7
  group: "general",
8
8
  inputs: {
@@ -8,24 +8,15 @@ export { commandKubeGetShell } from "./general/commandKubeGetShell";
8
8
  export { commandKubePortForward } from "./general/commandKubePortForward";
9
9
 
10
10
  // Project commands
11
- export { commandNamespace } from "./project/commandNamespace";
12
11
  export { commandEnvVars } from "./project/commandEnvVars";
13
- export { commandListPods } from "./project/commandListPods";
14
- export { commandGetShell } from "./project/commandGetShell";
15
12
  export { commandPortForward } from "./project/commandPortForward";
16
- export { commandDeletePods } from "./project/commandDeletePods";
17
- export { commandPauseProject } from "./project/commandPauseProject";
18
- export { commandDeleteProject } from "./project/commandDeleteProject";
19
13
  export { commandOpenEnv } from "./project/commandOpenEnv";
20
- export { commandOpenLogs } from "./project/commandOpenLogs";
21
14
  export { commandOpenGit } from "./project/commandOpenGit";
22
15
  export { commandCloudSqlProxy } from "./project/commandCloudSqlProxy";
23
16
  export { commandConfigSecrets } from "./project/commandConfigSecrets";
24
17
  export { commandSecretsClearBackups } from "./project/commandSecretsClearBackups";
25
- export {
26
- commandTriggerCronjobGeneral,
27
- commandTriggerCronjobProject,
28
- } from "./project/commandTriggerCronjob";
18
+ export { commandOpenLogs } from "./project/commandOpenLogs";
19
+ export { commandTriggerCronjobGeneral } from "./project/k8s/commandTriggerCronjob";
29
20
  export { commandRenewToken } from "./project/commandRenewToken";
30
21
  export { commandGetMyTotalWorktime } from "./project/commandGetMyTotalWorktime";
31
22
  export { commandSetup } from "./project/commandSetup";
@@ -33,6 +24,15 @@ export { commandCiJobOpen, commandCiJobLog } from "./project/commandGitlabCi";
33
24
  export { commandProjectRestoreDb } from "./project/commandProjectRestoreDb";
34
25
  export { commandSecurityEvaluate } from "./project/commandSecurityEvaluate";
35
26
 
27
+ // Project k8s commands
28
+ export { commandNamespace } from "./project/k8s/commandNamespace";
29
+ export { commandListPods } from "./project/k8s/commandListPods";
30
+ export { commandGetShell } from "./project/k8s/commandGetShell";
31
+ export { commandDeletePods } from "./project/k8s/commandDeletePods";
32
+ export { commandPauseProject } from "./project/k8s/commandPauseProject";
33
+ export { commandDeleteProject } from "./project/k8s/commandDeleteProject";
34
+ export { commandTriggerCronjobProject } from "./project/k8s/commandTriggerCronjob";
35
+
36
36
  // MongoDB commands
37
37
  export { commandMongoGetShell } from "./mongodb/commandMongoGetShell";
38
38
  export { commandMongoPortForward } from "./mongodb/commandMongoPortForward";
@@ -6,6 +6,7 @@ import { getProjectNamespace } from "../../utils/projects";
6
6
  import { ensureCluster } from "../../apps/cli/commands/project/utils/ensureCluster";
7
7
  import { getMongoDbPodsWithReplInfo } from "../../apps/cli/commands/mongodb/utils";
8
8
  import { envAndComponents } from "../../apps/cli/commands/project/utils/autocompletions";
9
+ import { hasDeployType } from "../availability";
9
10
 
10
11
  const removeFinalizer = async (
11
12
  namespace: string,
@@ -37,6 +38,7 @@ export const commandMongoDestroyMember = defineCommand({
37
38
  name: "project mongo destroy-member",
38
39
  description: "DESTROY a member of a replicaset in order to reinitialize it",
39
40
  group: "mongodb",
41
+ isAvailable: hasDeployType("kubernetes"),
40
42
  inputs: {
41
43
  envComponent: {
42
44
  type: "string",
@@ -7,11 +7,13 @@ import {
7
7
  getProjectMongodbAllPodsSortedWithLabel,
8
8
  } from "../../apps/cli/commands/mongodb/utils";
9
9
  import { envAndComponents } from "../../apps/cli/commands/project/utils/autocompletions";
10
+ import { hasDeployType } from "../availability";
10
11
 
11
12
  export const commandMongoGetShell = defineCommand({
12
13
  name: "project mongo get-shell",
13
14
  description: "get a shell to a mongodb in the environment",
14
15
  group: "mongodb",
16
+ isAvailable: hasDeployType("kubernetes"),
15
17
  inputs: {
16
18
  envComponent: {
17
19
  type: "string",
@@ -7,11 +7,13 @@ import { ensureCluster } from "../../apps/cli/commands/project/utils/ensureClust
7
7
  import { getProjectMongodbAllPodsSortedWithLabel } from "../../apps/cli/commands/mongodb/utils";
8
8
  import clipboard from "clipboardy";
9
9
  import { envAndComponents } from "../../apps/cli/commands/project/utils/autocompletions";
10
+ import { hasDeployType } from "../availability";
10
11
 
11
12
  export const commandMongoPortForward = defineCommand({
12
13
  name: "project mongo port-forward",
13
14
  description: "port forward to a mongodb",
14
15
  group: "mongodb",
16
+ isAvailable: hasDeployType("kubernetes"),
15
17
  inputs: {
16
18
  envComponent: {
17
19
  type: "string",
@@ -18,6 +18,7 @@ import {
18
18
  import { logError, logLines, logWarning } from "../../utils/log";
19
19
  import type { IO } from "../../core/types";
20
20
  import { envAndComponents } from "../../apps/cli/commands/project/utils/autocompletions";
21
+ import { hasCloudSql } from "../availability";
21
22
 
22
23
  type ProxyInfo = {
23
24
  instanceName: string;
@@ -94,6 +95,7 @@ export const commandCloudSqlProxy = defineCommand({
94
95
  name: "project cloudsql proxy",
95
96
  description: "proxy to cloud sql db",
96
97
  group: "project",
98
+ isAvailable: hasCloudSql(),
97
99
  inputs: {
98
100
  envComponent: {
99
101
  type: "string",
@@ -1,15 +1,19 @@
1
+ import { isOfDeployType } from "@catladder/pipeline";
1
2
  import { defineCommand } from "../../core/defineCommand";
2
3
  import {
3
4
  getPipelineContextByChoice,
4
5
  parseChoice,
5
6
  } from "../../config/getProjectConfig";
6
7
  import { openGoogleCloudLogs } from "../../kubernetes/openKubernetesDashboards";
8
+ import { openGoogleCloudDashboard } from "../../gcloud/openDashboard";
7
9
  import { envAndComponents } from "../../apps/cli/commands/project/utils/autocompletions";
10
+ import { hasDeployType } from "../availability";
8
11
 
9
12
  export const commandOpenLogs = defineCommand({
10
- name: "project open logs",
11
- description: "open google cloud logs (stackdriver logs)",
13
+ name: "project logs open",
14
+ description: "open logs for a component (Google Cloud Logging)",
12
15
  group: "project",
16
+ isAvailable: hasDeployType("kubernetes", "google-cloudrun"),
13
17
  inputs: {
14
18
  envComponent: {
15
19
  type: "string",
@@ -22,6 +26,21 @@ export const commandOpenLogs = defineCommand({
22
26
  const envComponent = await ctx.get("envComponent");
23
27
  const { env, componentName } = parseChoice(envComponent);
24
28
  const context = await getPipelineContextByChoice(env, componentName);
25
- await openGoogleCloudLogs(ctx, context);
29
+ const deployConfig = context.deploy?.config;
30
+
31
+ if (isOfDeployType(deployConfig, "kubernetes")) {
32
+ await openGoogleCloudLogs(ctx, context);
33
+ } else if (isOfDeployType(deployConfig, "google-cloudrun")) {
34
+ const serviceName = context.environment.fullName.toLowerCase();
35
+ await openGoogleCloudDashboard(
36
+ ctx,
37
+ `run/detail/${deployConfig.region}/${serviceName}/observability/logs`,
38
+ {
39
+ project: deployConfig.projectId,
40
+ },
41
+ );
42
+ } else {
43
+ ctx.log(`Unsupported deploy type for open-logs: ${deployConfig?.type}`);
44
+ }
26
45
  },
27
46
  });
@@ -10,11 +10,13 @@ import { isOfDeployType } from "@catladder/pipeline";
10
10
  import { startPortForwardCommand } from "../../utils/portForwards";
11
11
  import open from "open";
12
12
  import { envAndComponents } from "../../apps/cli/commands/project/utils/autocompletions";
13
+ import { hasDeployType } from "../availability";
13
14
 
14
15
  export const commandPortForward = defineCommand({
15
16
  name: "project port-forward",
16
17
  description: "start port-forwarding",
17
18
  group: "project",
19
+ isAvailable: hasDeployType("kubernetes", "google-cloudrun"),
18
20
  inputs: {
19
21
  envComponent: {
20
22
  type: "string",
@@ -4,6 +4,7 @@ import {
4
4
  getEnvVarsResolved,
5
5
  getPipelineContextByChoice,
6
6
  } from "../../config/getProjectConfig";
7
+ import { hasCloudSql } from "../availability";
7
8
  import type { CloudSqlBackgroundProxy } from "../../gcloud/cloudSql/startProxy";
8
9
  import { startCloudSqlProxyInBackground } from "../../gcloud/cloudSql/startProxy";
9
10
  import { parseConnectionString } from "../../gcloud/cloudSql/parseConnectionString";
@@ -11,7 +12,7 @@ import { spawnCopyDb } from "../../gcloud/cloudSql/copyDb";
11
12
  import type { ComponentContext } from "@catladder/pipeline";
12
13
  import { isOfDeployType } from "@catladder/pipeline";
13
14
 
14
- const hasCloudSql = (context: ComponentContext) => {
15
+ const componentHasCloudSql = (context: ComponentContext) => {
15
16
  const deployConfig = context.deploy?.config;
16
17
  if (isOfDeployType(deployConfig, "google-cloudrun")) {
17
18
  return !!deployConfig.cloudSql;
@@ -26,6 +27,7 @@ export const commandProjectRestoreDb = defineCommand({
26
27
  name: "project cloudsql restore-db",
27
28
  description: "restores a project db from one source to another target",
28
29
  group: "project",
30
+ isAvailable: hasCloudSql(),
29
31
  inputs: {
30
32
  source: {
31
33
  type: "string",
@@ -41,7 +43,7 @@ export const commandProjectRestoreDb = defineCommand({
41
43
  return a.localeCompare(b);
42
44
  };
43
45
  return allContexts
44
- .filter(hasCloudSql)
46
+ .filter(componentHasCloudSql)
45
47
  .map((c: any) => `${c.env}:${c.name}`)
46
48
  .sort(sortByEnv);
47
49
  },
@@ -60,7 +62,7 @@ export const commandProjectRestoreDb = defineCommand({
60
62
  return a.localeCompare(b);
61
63
  };
62
64
  return allContexts
63
- .filter(hasCloudSql)
65
+ .filter(componentHasCloudSql)
64
66
  .map((c: any) => {
65
67
  const value = `${c.env}:${c.name}`;
66
68
  const isProd = c.environment.envType === "prod";
@@ -1,15 +1,17 @@
1
- import { defineCommand } from "../../core/defineCommand";
2
- import { getk8sApi } from "../../k8sApi";
3
- import { getProjectPodNames } from "../../kubernetes";
4
- import { logError } from "../../utils/log";
5
- import { getProjectNamespace } from "../../utils/projects";
6
- import { ensureCluster } from "../../apps/cli/commands/project/utils/ensureCluster";
7
- import { envAndComponents } from "../../apps/cli/commands/project/utils/autocompletions";
1
+ import { defineCommand } from "../../../core/defineCommand";
2
+ import { getk8sApi } from "../../../k8sApi";
3
+ import { getProjectPodNames } from "../../../kubernetes";
4
+ import { logError } from "../../../utils/log";
5
+ import { getProjectNamespace } from "../../../utils/projects";
6
+ import { ensureCluster } from "../../../apps/cli/commands/project/utils/ensureCluster";
7
+ import { envAndComponents } from "../../../apps/cli/commands/project/utils/autocompletions";
8
+ import { hasDeployType } from "../../availability";
8
9
 
9
10
  export const commandDeletePods = defineCommand({
10
- name: "project delete-pods",
11
+ name: "project k8s delete-pods",
11
12
  description: "delete / restart pods",
12
13
  group: "project",
14
+ isAvailable: hasDeployType("kubernetes"),
13
15
 
14
16
  inputs: {
15
17
  envComponent: {
@@ -1,12 +1,14 @@
1
1
  import { exec } from "child-process-promise";
2
- import { defineCommand } from "../../core/defineCommand";
3
- import { getProjectNamespace } from "../../utils/projects";
4
- import { envAndComponents } from "../../apps/cli/commands/project/utils/autocompletions";
2
+ import { defineCommand } from "../../../core/defineCommand";
3
+ import { getProjectNamespace } from "../../../utils/projects";
4
+ import { envAndComponents } from "../../../apps/cli/commands/project/utils/autocompletions";
5
+ import { hasDeployType } from "../../availability";
5
6
 
6
7
  export const commandDeleteProject = defineCommand({
7
- name: "project delete",
8
+ name: "project k8s delete",
8
9
  description: "deletes a environment of a project (it deletes the namespace)",
9
10
  group: "project",
11
+ isAvailable: hasDeployType("kubernetes"),
10
12
  inputs: {
11
13
  envComponent: {
12
14
  type: "string",
@@ -1,15 +1,17 @@
1
- import { defineCommand } from "../../core/defineCommand";
2
- import { getProjectPods } from "../../kubernetes";
1
+ import { defineCommand } from "../../../core/defineCommand";
2
+ import { getProjectPods } from "../../../kubernetes";
3
3
 
4
- import { getProjectNamespace } from "../../utils/projects";
5
- import { getShell } from "../../utils/shell";
6
- import { ensureCluster } from "../../apps/cli/commands/project/utils/ensureCluster";
7
- import { envAndComponents } from "../../apps/cli/commands/project/utils/autocompletions";
4
+ import { getProjectNamespace } from "../../../utils/projects";
5
+ import { getShell } from "../../../utils/shell";
6
+ import { ensureCluster } from "../../../apps/cli/commands/project/utils/ensureCluster";
7
+ import { envAndComponents } from "../../../apps/cli/commands/project/utils/autocompletions";
8
+ import { hasDeployType } from "../../availability";
8
9
 
9
10
  export const commandGetShell = defineCommand({
10
- name: "project get-shell",
11
+ name: "project k8s get-shell",
11
12
  description: "get a shell to a pod in the environment",
12
13
  group: "project",
14
+ isAvailable: hasDeployType("kubernetes"),
13
15
  inputs: {
14
16
  envComponent: {
15
17
  type: "string",
@@ -1,14 +1,16 @@
1
1
  import { stringify } from "yaml";
2
2
  import { pick } from "lodash";
3
- import { defineCommand } from "../../core/defineCommand";
4
- import { getProjectPods } from "../../kubernetes";
5
- import { ensureCluster } from "../../apps/cli/commands/project/utils/ensureCluster";
6
- import { envAndComponents } from "../../apps/cli/commands/project/utils/autocompletions";
3
+ import { defineCommand } from "../../../core/defineCommand";
4
+ import { getProjectPods } from "../../../kubernetes";
5
+ import { ensureCluster } from "../../../apps/cli/commands/project/utils/ensureCluster";
6
+ import { envAndComponents } from "../../../apps/cli/commands/project/utils/autocompletions";
7
+ import { hasDeployType } from "../../availability";
7
8
 
8
9
  export const commandListPods = defineCommand({
9
- name: "project list-pods",
10
+ name: "project k8s list-pods",
10
11
  description: "list pods of local project",
11
12
  group: "project",
13
+ isAvailable: hasDeployType("kubernetes"),
12
14
  inputs: {
13
15
  envComponent: {
14
16
  type: "string",
@@ -1,11 +1,13 @@
1
- import { defineCommand } from "../../core/defineCommand";
2
- import { getProjectNamespace } from "../../utils/projects";
3
- import { envAndComponents } from "../../apps/cli/commands/project/utils/autocompletions";
1
+ import { defineCommand } from "../../../core/defineCommand";
2
+ import { getProjectNamespace } from "../../../utils/projects";
3
+ import { envAndComponents } from "../../../apps/cli/commands/project/utils/autocompletions";
4
+ import { hasDeployType } from "../../availability";
4
5
 
5
6
  export const commandNamespace = defineCommand({
6
- name: "project namespace",
7
+ name: "project k8s namespace",
7
8
  description: "show namespace of local project",
8
9
  group: "project",
10
+ isAvailable: hasDeployType("kubernetes"),
9
11
  inputs: {
10
12
  envComponent: {
11
13
  type: "string",
@@ -1,12 +1,14 @@
1
1
  import { exec } from "child-process-promise";
2
- import { defineCommand } from "../../core/defineCommand";
3
- import { getProjectNamespace } from "../../utils/projects";
4
- import { envAndComponents } from "../../apps/cli/commands/project/utils/autocompletions";
2
+ import { defineCommand } from "../../../core/defineCommand";
3
+ import { getProjectNamespace } from "../../../utils/projects";
4
+ import { envAndComponents } from "../../../apps/cli/commands/project/utils/autocompletions";
5
+ import { hasDeployType } from "../../availability";
5
6
 
6
7
  export const commandPauseProject = defineCommand({
7
- name: "project pause",
8
+ name: "project k8s pause",
8
9
  description: "halts all running pods (scales to 0)",
9
10
  group: "project",
11
+ isAvailable: hasDeployType("kubernetes"),
10
12
  inputs: {
11
13
  envComponent: {
12
14
  type: "string",
@@ -1,11 +1,12 @@
1
1
  import type { V1ObjectMeta } from "@kubernetes/client-node";
2
2
  import { V1Job } from "@kubernetes/client-node";
3
- import { defineCommand } from "../../core/defineCommand";
4
- import { getk8sApiBatch, getk8sApiBatchBeta } from "../../k8sApi";
5
- import { logError } from "../../utils/log";
6
- import { getProjectNamespace } from "../../utils/projects";
7
- import { ensureCluster } from "../../apps/cli/commands/project/utils/ensureCluster";
8
- import { envAndComponents } from "../../apps/cli/commands/project/utils/autocompletions";
3
+ import { defineCommand } from "../../../core/defineCommand";
4
+ import { getk8sApiBatch, getk8sApiBatchBeta } from "../../../k8sApi";
5
+ import { logError } from "../../../utils/log";
6
+ import { getProjectNamespace } from "../../../utils/projects";
7
+ import { ensureCluster } from "../../../apps/cli/commands/project/utils/ensureCluster";
8
+ import { envAndComponents } from "../../../apps/cli/commands/project/utils/autocompletions";
9
+ import { hasDeployType } from "../../availability";
9
10
 
10
11
  const getCronjobChoices = async (namespace: string) => {
11
12
  const {
@@ -46,7 +47,7 @@ const runCronjob = async (
46
47
  };
47
48
 
48
49
  export const commandTriggerCronjobGeneral = defineCommand({
49
- name: "kube trigger-cronjob",
50
+ name: "k8s trigger-cronjob",
50
51
  description: "trigger cronjob",
51
52
  group: "general",
52
53
  inputs: {
@@ -69,9 +70,10 @@ export const commandTriggerCronjobGeneral = defineCommand({
69
70
  });
70
71
 
71
72
  export const commandTriggerCronjobProject = defineCommand({
72
- name: "project trigger-cronjob",
73
+ name: "project k8s trigger-cronjob",
73
74
  description: "trigger cronjob",
74
75
  group: "project",
76
+ isAvailable: hasDeployType("kubernetes"),
75
77
  inputs: {
76
78
  envComponent: {
77
79
  type: "string",
@@ -16,35 +16,25 @@ import { getAllVariables, getVariableValueByRawName } from "../utils/gitlab";
16
16
 
17
17
  import { getGitRoot } from "../utils/projects";
18
18
 
19
- import { watch } from "fs";
20
-
21
19
  export { parseChoice } from "./parseChoice";
22
20
 
23
21
  let currentConfig: Config | null = null;
24
22
 
25
- // reload the config on change
26
- const reloadConfigAndObserve = async () => {
23
+ const loadConfig = async () => {
27
24
  const gitRoot = await getGitRoot();
28
25
  if (!gitRoot) {
29
26
  return;
30
27
  }
31
28
  const result = await readConfig(gitRoot);
32
29
  if (!result) {
33
- // can't do anything, there is no config
34
30
  return;
35
31
  }
36
- const { config, path } = result;
37
- const watcher = watch(path, () => {
38
- watcher.close();
39
- reloadConfigAndObserve();
40
- });
41
- currentConfig = config;
32
+ currentConfig = result.config;
42
33
  };
43
34
 
44
35
  export const getProjectConfig = async () => {
45
36
  if (!currentConfig) {
46
- // initially
47
- await reloadConfigAndObserve();
37
+ await loadConfig();
48
38
  }
49
39
  return currentConfig as Config;
50
40
  };
package/src/core/types.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import type { ComponentContext } from "@catladder/pipeline";
2
+
1
3
  // ─── Input Definitions ───────────────────────────────────────────────
2
4
 
3
5
  export type PromptChoice = string | { name: string; value: string };
@@ -123,6 +125,7 @@ export interface CommandDef<TInputs extends InputsSchema = InputsSchema> {
123
125
  description: string;
124
126
  group?: string;
125
127
  inputs: TInputs;
128
+ isAvailable?: (contexts: ComponentContext[]) => boolean;
126
129
  execute: (ctx: CommandContext<TInputs>) => Promise<void>;
127
130
  }
128
131
 
@@ -1 +0,0 @@
1
- {"version":3,"file":"commandDeletePods.js","sourceRoot":"","sources":["../../../../../src/commands/project/commandDeletePods.ts"],"names":[],"mappings":";;;AAAA,4DAAyD;AACzD,yCAAyC;AACzC,iDAAsD;AAEtD,mDAA2D;AAC3D,uFAAoF;AACpF,2FAAyF;AAE5E,QAAA,iBAAiB,GAAG,IAAA,6BAAa,EAAC;IAC7C,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,uBAAuB;IACpC,KAAK,EAAE,SAAS;IAEhB,MAAM,EAAE;QACN,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,uBAAuB;YAChC,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAA,kCAAgB,GAAE;SACxC;QACD,gBAAgB,EAAE;YAChB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,uCAAuC;YAChD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,IAAA,+BAAkB,EAAC,MAAM,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;SAC1E;KACF;IAED,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,IAAA,6BAAa,EAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,MAAM,IAAA,8BAAmB,EAAC,YAAY,CAAC,CAAC;QAE1D,MAAM,gBAAgB,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAE3D,GAAG,CAAC,GAAG,CACL,oEAAoE,CACrE,CAAC;QACF,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACZ,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEZ,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAE5D,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACZ,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,IAAI,cAAc,EAAE,CAAC;YACnB,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;gBACvC,MAAM,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBAC7D,GAAG,CAAC,GAAG,CAAC,gBAAgB,OAAO,GAAG,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"commandDeleteProject.js","sourceRoot":"","sources":["../../../../../src/commands/project/commandDeleteProject.ts"],"names":[],"mappings":";;;AAAA,iEAA6C;AAC7C,4DAAyD;AACzD,mDAA2D;AAC3D,2FAAyF;AAE5E,QAAA,oBAAoB,GAAG,IAAA,6BAAa,EAAC;IAChD,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,+DAA+D;IAC5E,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE;QACN,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,uBAAuB;YAChC,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAA,kCAAgB,GAAE;SACxC;KACF;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,MAAM,IAAA,8BAAmB,EAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,OAAO,CACtC,sEAAsE,CACvE,CAAC;QACF,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QACD,MAAM,WAAW,GAAG,4BAA4B,SAAS,EAAE,CAAC;QAC5D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,4BAAI,EAAC,WAAW,EAAE;YACzC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;SACnC,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;CACF,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"commandGetShell.js","sourceRoot":"","sources":["../../../../../src/commands/project/commandGetShell.ts"],"names":[],"mappings":";;;AAAA,4DAAyD;AACzD,iDAAkD;AAElD,mDAA2D;AAC3D,6CAA6C;AAC7C,uFAAoF;AACpF,2FAAyF;AAE5E,QAAA,eAAe,GAAG,IAAA,6BAAa,EAAC;IAC3C,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,yCAAyC;IACtD,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE;QACN,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,uBAAuB;YAChC,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAA,kCAAgB,GAAE;SACxC;QACD,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACrB,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACnD,MAAM,IAAI,GAAG,MAAM,IAAA,2BAAc,EAAC,YAAY,CAAC,CAAC;gBAChD,OAAO,IAAI;qBACR,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC;qBAC/C,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,IAAA,6BAAa,EAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,MAAM,IAAA,8BAAmB,EAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,IAAA,gBAAQ,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;CACF,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"commandListPods.js","sourceRoot":"","sources":["../../../../../src/commands/project/commandListPods.ts"],"names":[],"mappings":";;;AAAA,+BAAiC;AACjC,mCAA8B;AAC9B,4DAAyD;AACzD,iDAAkD;AAClD,uFAAoF;AACpF,2FAAyF;AAE5E,QAAA,eAAe,GAAG,IAAA,6BAAa,EAAC;IAC3C,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,4BAA4B;IACzC,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE;QACN,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,uBAAuB;YAChC,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAA,kCAAgB,GAAE;SACxC;KACF;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,IAAA,6BAAa,EAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,IAAA,2BAAc,EAAC,YAAY,CAAC,CAAC;QAChD,GAAG,CAAC,GAAG,CACL,IAAA,gBAAS,EACP,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,IAAA,aAAI,EAAC,CAAC,EAAE,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC,CAAC,CACrE,CACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"commandNamespace.js","sourceRoot":"","sources":["../../../../../src/commands/project/commandNamespace.ts"],"names":[],"mappings":";;;AAAA,4DAAyD;AACzD,mDAA2D;AAC3D,2FAAyF;AAE5E,QAAA,gBAAgB,GAAG,IAAA,6BAAa,EAAC;IAC5C,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,iCAAiC;IAC9C,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE;QACN,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,uBAAuB;YAChC,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAA,kCAAgB,GAAE;SACxC;KACF;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACnD,GAAG,CAAC,GAAG,CAAC,MAAM,IAAA,8BAAmB,EAAC,YAAY,CAAC,CAAC,CAAC;IACnD,CAAC;CACF,CAAC,CAAC"}