@guaracloud/cli 0.1.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 (160) hide show
  1. package/bin/dev.js +4 -0
  2. package/bin/run.js +4 -0
  3. package/dist/commands/config/get.d.ts +10 -0
  4. package/dist/commands/config/get.d.ts.map +1 -0
  5. package/dist/commands/config/get.js +21 -0
  6. package/dist/commands/config/get.js.map +1 -0
  7. package/dist/commands/config/list.d.ts +7 -0
  8. package/dist/commands/config/list.d.ts.map +1 -0
  9. package/dist/commands/config/list.js +31 -0
  10. package/dist/commands/config/list.js.map +1 -0
  11. package/dist/commands/config/reset.d.ts +7 -0
  12. package/dist/commands/config/reset.d.ts.map +1 -0
  13. package/dist/commands/config/reset.js +25 -0
  14. package/dist/commands/config/reset.js.map +1 -0
  15. package/dist/commands/config/set.d.ts +11 -0
  16. package/dist/commands/config/set.d.ts.map +1 -0
  17. package/dist/commands/config/set.js +29 -0
  18. package/dist/commands/config/set.js.map +1 -0
  19. package/dist/commands/deploy.d.ts +25 -0
  20. package/dist/commands/deploy.d.ts.map +1 -0
  21. package/dist/commands/deploy.js +115 -0
  22. package/dist/commands/deploy.js.map +1 -0
  23. package/dist/commands/deployments/list.d.ts +7 -0
  24. package/dist/commands/deployments/list.d.ts.map +1 -0
  25. package/dist/commands/deployments/list.js +40 -0
  26. package/dist/commands/deployments/list.js.map +1 -0
  27. package/dist/commands/domains/add.d.ts +17 -0
  28. package/dist/commands/domains/add.d.ts.map +1 -0
  29. package/dist/commands/domains/add.js +41 -0
  30. package/dist/commands/domains/add.js.map +1 -0
  31. package/dist/commands/domains/list.d.ts +7 -0
  32. package/dist/commands/domains/list.d.ts.map +1 -0
  33. package/dist/commands/domains/list.js +32 -0
  34. package/dist/commands/domains/list.js.map +1 -0
  35. package/dist/commands/domains/remove.d.ts +17 -0
  36. package/dist/commands/domains/remove.d.ts.map +1 -0
  37. package/dist/commands/domains/remove.js +60 -0
  38. package/dist/commands/domains/remove.js.map +1 -0
  39. package/dist/commands/env/list.d.ts +7 -0
  40. package/dist/commands/env/list.d.ts.map +1 -0
  41. package/dist/commands/env/list.js +32 -0
  42. package/dist/commands/env/list.js.map +1 -0
  43. package/dist/commands/env/set.d.ts +18 -0
  44. package/dist/commands/env/set.d.ts.map +1 -0
  45. package/dist/commands/env/set.js +70 -0
  46. package/dist/commands/env/set.js.map +1 -0
  47. package/dist/commands/env/unset.d.ts +8 -0
  48. package/dist/commands/env/unset.d.ts.map +1 -0
  49. package/dist/commands/env/unset.js +36 -0
  50. package/dist/commands/env/unset.js.map +1 -0
  51. package/dist/commands/link.d.ts +16 -0
  52. package/dist/commands/link.d.ts.map +1 -0
  53. package/dist/commands/link.js +123 -0
  54. package/dist/commands/link.js.map +1 -0
  55. package/dist/commands/login.d.ts +28 -0
  56. package/dist/commands/login.d.ts.map +1 -0
  57. package/dist/commands/login.js +190 -0
  58. package/dist/commands/login.js.map +1 -0
  59. package/dist/commands/logout.d.ts +7 -0
  60. package/dist/commands/logout.d.ts.map +1 -0
  61. package/dist/commands/logout.js +33 -0
  62. package/dist/commands/logout.js.map +1 -0
  63. package/dist/commands/logs.d.ts +24 -0
  64. package/dist/commands/logs.d.ts.map +1 -0
  65. package/dist/commands/logs.js +174 -0
  66. package/dist/commands/logs.js.map +1 -0
  67. package/dist/commands/open.d.ts +17 -0
  68. package/dist/commands/open.d.ts.map +1 -0
  69. package/dist/commands/open.js +78 -0
  70. package/dist/commands/open.js.map +1 -0
  71. package/dist/commands/projects/create.d.ts +19 -0
  72. package/dist/commands/projects/create.d.ts.map +1 -0
  73. package/dist/commands/projects/create.js +79 -0
  74. package/dist/commands/projects/create.js.map +1 -0
  75. package/dist/commands/projects/info.d.ts +7 -0
  76. package/dist/commands/projects/info.d.ts.map +1 -0
  77. package/dist/commands/projects/info.js +39 -0
  78. package/dist/commands/projects/info.js.map +1 -0
  79. package/dist/commands/projects/list.d.ts +7 -0
  80. package/dist/commands/projects/list.d.ts.map +1 -0
  81. package/dist/commands/projects/list.js +38 -0
  82. package/dist/commands/projects/list.js.map +1 -0
  83. package/dist/commands/rollback.d.ts +17 -0
  84. package/dist/commands/rollback.d.ts.map +1 -0
  85. package/dist/commands/rollback.js +63 -0
  86. package/dist/commands/rollback.js.map +1 -0
  87. package/dist/commands/scale.d.ts +18 -0
  88. package/dist/commands/scale.d.ts.map +1 -0
  89. package/dist/commands/scale.js +96 -0
  90. package/dist/commands/scale.js.map +1 -0
  91. package/dist/commands/services/create.d.ts +23 -0
  92. package/dist/commands/services/create.d.ts.map +1 -0
  93. package/dist/commands/services/create.js +146 -0
  94. package/dist/commands/services/create.js.map +1 -0
  95. package/dist/commands/services/delete.d.ts +7 -0
  96. package/dist/commands/services/delete.d.ts.map +1 -0
  97. package/dist/commands/services/delete.js +41 -0
  98. package/dist/commands/services/delete.js.map +1 -0
  99. package/dist/commands/services/info.d.ts +7 -0
  100. package/dist/commands/services/info.d.ts.map +1 -0
  101. package/dist/commands/services/info.js +46 -0
  102. package/dist/commands/services/info.js.map +1 -0
  103. package/dist/commands/services/list.d.ts +7 -0
  104. package/dist/commands/services/list.d.ts.map +1 -0
  105. package/dist/commands/services/list.js +40 -0
  106. package/dist/commands/services/list.js.map +1 -0
  107. package/dist/commands/services/restart.d.ts +7 -0
  108. package/dist/commands/services/restart.d.ts.map +1 -0
  109. package/dist/commands/services/restart.js +27 -0
  110. package/dist/commands/services/restart.js.map +1 -0
  111. package/dist/commands/services/start.d.ts +7 -0
  112. package/dist/commands/services/start.d.ts.map +1 -0
  113. package/dist/commands/services/start.js +27 -0
  114. package/dist/commands/services/start.js.map +1 -0
  115. package/dist/commands/services/stop.d.ts +7 -0
  116. package/dist/commands/services/stop.d.ts.map +1 -0
  117. package/dist/commands/services/stop.js +27 -0
  118. package/dist/commands/services/stop.js.map +1 -0
  119. package/dist/commands/status.d.ts +11 -0
  120. package/dist/commands/status.d.ts.map +1 -0
  121. package/dist/commands/status.js +87 -0
  122. package/dist/commands/status.js.map +1 -0
  123. package/dist/commands/unlink.d.ts +7 -0
  124. package/dist/commands/unlink.d.ts.map +1 -0
  125. package/dist/commands/unlink.js +43 -0
  126. package/dist/commands/unlink.js.map +1 -0
  127. package/dist/commands/whoami.d.ts +7 -0
  128. package/dist/commands/whoami.d.ts.map +1 -0
  129. package/dist/commands/whoami.js +46 -0
  130. package/dist/commands/whoami.js.map +1 -0
  131. package/dist/index.d.ts +2 -0
  132. package/dist/index.d.ts.map +1 -0
  133. package/dist/index.js +2 -0
  134. package/dist/index.js.map +1 -0
  135. package/dist/lib/api-client.d.ts +96 -0
  136. package/dist/lib/api-client.d.ts.map +1 -0
  137. package/dist/lib/api-client.js +256 -0
  138. package/dist/lib/api-client.js.map +1 -0
  139. package/dist/lib/auth.d.ts +68 -0
  140. package/dist/lib/auth.d.ts.map +1 -0
  141. package/dist/lib/auth.js +180 -0
  142. package/dist/lib/auth.js.map +1 -0
  143. package/dist/lib/base-command.d.ts +94 -0
  144. package/dist/lib/base-command.d.ts.map +1 -0
  145. package/dist/lib/base-command.js +184 -0
  146. package/dist/lib/base-command.js.map +1 -0
  147. package/dist/lib/context.d.ts +58 -0
  148. package/dist/lib/context.d.ts.map +1 -0
  149. package/dist/lib/context.js +147 -0
  150. package/dist/lib/context.js.map +1 -0
  151. package/dist/lib/errors.d.ts +34 -0
  152. package/dist/lib/errors.d.ts.map +1 -0
  153. package/dist/lib/errors.js +143 -0
  154. package/dist/lib/errors.js.map +1 -0
  155. package/dist/lib/output.d.ts +19 -0
  156. package/dist/lib/output.d.ts.map +1 -0
  157. package/dist/lib/output.js +75 -0
  158. package/dist/lib/output.js.map +1 -0
  159. package/oclif.manifest.json +2880 -0
  160. package/package.json +92 -0
@@ -0,0 +1,63 @@
1
+ import * as clack from '@clack/prompts';
2
+ import { Flags } from '@oclif/core';
3
+ import chalk from 'chalk';
4
+ import { BaseCommand } from '../lib/base-command.js';
5
+ import { CliError } from '../lib/errors.js';
6
+ import { successMessage } from '../lib/output.js';
7
+ export default class Rollback extends BaseCommand {
8
+ static description = 'Rollback to a previous deployment.';
9
+ static examples = [
10
+ '<%= config.bin %> rollback',
11
+ '<%= config.bin %> rollback --deployment <id>',
12
+ '<%= config.bin %> rollback --deployment <id> --json',
13
+ ];
14
+ static flags = {
15
+ ...BaseCommand.baseFlags,
16
+ deployment: Flags.string({
17
+ char: 'd',
18
+ description: 'Deployment ID to rollback to.',
19
+ }),
20
+ };
21
+ async run() {
22
+ const { flags } = await this.parse(Rollback);
23
+ const typedFlags = flags;
24
+ const client = await this.initApiClient(typedFlags);
25
+ const [projectId, serviceId] = await this.requireService(typedFlags, client);
26
+ let targetDeploymentId = typedFlags.deployment;
27
+ // ── Interactive picker if no --deployment flag ─────────────────────
28
+ if (!targetDeploymentId) {
29
+ if (typedFlags.json || typedFlags.quiet) {
30
+ throw new CliError('Deployment ID required.', 1, 'Pass --deployment <id> when using --json or --quiet.');
31
+ }
32
+ const response = await client.listDeployments(projectId, serviceId, { limit: 100 });
33
+ const healthy = response.data.filter((d) => d.status === 'healthy' && d.image_tag);
34
+ if (healthy.length === 0) {
35
+ throw new CliError('No healthy deployments available for rollback.', 1, 'There are no previous healthy deployments with a valid image to rollback to.');
36
+ }
37
+ const selected = await clack.select({
38
+ message: 'Select deployment to rollback to:',
39
+ options: healthy.map((d) => ({
40
+ value: d.id,
41
+ label: `${d.id.slice(0, 8)} \u2014 ${d.branch ?? '\u2014'} (${d.commit_sha?.slice(0, 7) ?? '\u2014'})`,
42
+ hint: d.created_at,
43
+ })),
44
+ });
45
+ if (clack.isCancel(selected)) {
46
+ throw new CliError('Rollback cancelled.', 0);
47
+ }
48
+ targetDeploymentId = selected;
49
+ }
50
+ const { data: rollback } = await client.rollbackDeployment(projectId, serviceId, targetDeploymentId);
51
+ if (typedFlags.json) {
52
+ this.outputJson(rollback);
53
+ return;
54
+ }
55
+ if (typedFlags.quiet) {
56
+ this.outputQuiet(rollback.id);
57
+ return;
58
+ }
59
+ this.log(successMessage(`Rollback initiated.`));
60
+ this.log(` New deployment: ${chalk.bold(rollback.id.slice(0, 8))} (${rollback.status})`);
61
+ }
62
+ }
63
+ //# sourceMappingURL=rollback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { BaseCommand } from '../lib/base-command.js';
2
+ export default class Scale extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ cpu: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ memory: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ service: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ };
16
+ run(): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=scale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scale.d.ts","sourceRoot":"","sources":["../../src/commands/scale.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAoB,MAAM,wBAAwB,CAAC;AAwDvE,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW;IAC5C,OAAgB,WAAW,SAA4C;IAEvE,OAAgB,QAAQ,WAItB;IAEF,OAAgB,KAAK;;;;;;;;;;MAQnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoE3B"}
@@ -0,0 +1,96 @@
1
+ import { Flags } from '@oclif/core';
2
+ import chalk from 'chalk';
3
+ import { BaseCommand } from '../lib/base-command.js';
4
+ import { CliError } from '../lib/errors.js';
5
+ import { successMessage } from '../lib/output.js';
6
+ // ─── Helpers ────────────────────────────────────────────────────────────────
7
+ /**
8
+ * Convert a vCPU float (e.g. 0.25, 0.5, 1) to Kubernetes millicore string.
9
+ */
10
+ function vcpuToMillicores(vcpu) {
11
+ const value = Number.parseFloat(vcpu);
12
+ if (Number.isNaN(value) || value <= 0) {
13
+ throw new CliError(`Invalid CPU value: ${vcpu}. Use a number like 0.25, 0.5, 1.`);
14
+ }
15
+ // If it's already an integer >= 1, use plain format (e.g. "1", "2")
16
+ if (Number.isInteger(value) && value >= 1) {
17
+ return String(value);
18
+ }
19
+ return `${String(Math.round(value * 1000))}m`;
20
+ }
21
+ /**
22
+ * Convert a memory value in MB to Kubernetes format (Mi).
23
+ */
24
+ function mbToK8sMemory(mb) {
25
+ if (mb <= 0) {
26
+ throw new CliError(`Invalid memory value: ${String(mb)}. Use a positive number in MB.`);
27
+ }
28
+ return `${String(mb)}Mi`;
29
+ }
30
+ // ─── Command ────────────────────────────────────────────────────────────────
31
+ export default class Scale extends BaseCommand {
32
+ static description = 'Scale service CPU or memory resources.';
33
+ static examples = [
34
+ '<%= config.bin %> scale --cpu 0.5 --memory 512',
35
+ '<%= config.bin %> scale --cpu 1 --memory 1024 --project my-project --service my-api',
36
+ '<%= config.bin %> scale --memory 256 --json',
37
+ ];
38
+ static flags = {
39
+ ...BaseCommand.baseFlags,
40
+ cpu: Flags.string({
41
+ description: 'CPU in vCPUs (e.g., 0.25, 0.5, 1).',
42
+ }),
43
+ memory: Flags.integer({
44
+ description: 'Memory in MB (e.g., 256, 512, 1024).',
45
+ }),
46
+ };
47
+ async run() {
48
+ const { flags } = await this.parse(Scale);
49
+ const typedFlags = flags;
50
+ if (!typedFlags.cpu && typedFlags.memory === undefined) {
51
+ throw new CliError('At least one of --cpu or --memory is required.', 1, 'Run `guara scale --cpu 0.5 --memory 512` to scale a service.');
52
+ }
53
+ const client = await this.initApiClient(typedFlags);
54
+ const [projectId, serviceId] = await this.requireService(typedFlags, client);
55
+ // Fetch current service to show before state
56
+ const { data: before } = await client.getService(projectId, serviceId);
57
+ // Build scaling DTO
58
+ const dto = {};
59
+ if (typedFlags.cpu) {
60
+ const k8sCpu = vcpuToMillicores(typedFlags.cpu);
61
+ dto.cpu_request = k8sCpu;
62
+ dto.cpu_limit = k8sCpu;
63
+ }
64
+ if (typedFlags.memory !== undefined) {
65
+ const k8sMemory = mbToK8sMemory(typedFlags.memory);
66
+ dto.memory_request = k8sMemory;
67
+ dto.memory_limit = k8sMemory;
68
+ }
69
+ const { data: after } = await client.updateScaling(projectId, serviceId, dto);
70
+ const result = {
71
+ project: projectId,
72
+ service: serviceId,
73
+ cpu: typedFlags.cpu,
74
+ memory: typedFlags.memory !== undefined ? String(typedFlags.memory) : undefined,
75
+ before: before.resources,
76
+ after: after.resources,
77
+ };
78
+ if (typedFlags.json) {
79
+ this.outputJson(result);
80
+ return;
81
+ }
82
+ if (typedFlags.quiet) {
83
+ this.outputQuiet('ok');
84
+ return;
85
+ }
86
+ this.log(successMessage(`Service ${chalk.bold(serviceId)} scaled.`));
87
+ this.log('');
88
+ if (typedFlags.cpu) {
89
+ this.log(` CPU: ${chalk.dim(before.resources.cpu_request)} ${chalk.dim('\u2192')} ${chalk.green(after.resources.cpu_request)}`);
90
+ }
91
+ if (typedFlags.memory !== undefined) {
92
+ this.log(` Memory: ${chalk.dim(before.resources.memory_request)} ${chalk.dim('\u2192')} ${chalk.green(after.resources.memory_request)}`);
93
+ }
94
+ }
95
+ }
96
+ //# sourceMappingURL=scale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scale.js","sourceRoot":"","sources":["../../src/commands/scale.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class ServicesCreate extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ 'build-method': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ repo: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ branch: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ port: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ 'root-dir': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ public: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ service: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
20
+ };
21
+ run(): Promise<void>;
22
+ }
23
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/services/create.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAkB1E,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAW;IACrD,OAAgB,WAAW,SAAwC;IAEnE,OAAgB,QAAQ,WAItB;IAEF,OAAgB,KAAK;;;;;;;;;;;;;;;MA2BnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyI3B"}
@@ -0,0 +1,146 @@
1
+ import * as clack from '@clack/prompts';
2
+ import { Flags } from '@oclif/core';
3
+ import chalk from 'chalk';
4
+ import { BaseCommand } from '../../lib/base-command.js';
5
+ import { CliError } from '../../lib/errors.js';
6
+ import { infoBlock, statusColor, successMessage } from '../../lib/output.js';
7
+ // ─── Command ────────────────────────────────────────────────────────────────
8
+ export default class ServicesCreate extends BaseCommand {
9
+ static description = 'Create a new service in a project.';
10
+ static examples = [
11
+ '<%= config.bin %> services create --name my-api --build-method dockerfile --port 3000',
12
+ '<%= config.bin %> services create --name my-api --build-method buildpack --repo https://github.com/user/repo --port 8080',
13
+ '<%= config.bin %> services create',
14
+ ];
15
+ static flags = {
16
+ ...BaseCommand.baseFlags,
17
+ name: Flags.string({
18
+ char: 'n',
19
+ description: 'Service name.',
20
+ }),
21
+ 'build-method': Flags.string({
22
+ char: 'b',
23
+ description: 'Build method.',
24
+ options: ['dockerfile', 'buildpack'],
25
+ }),
26
+ repo: Flags.string({
27
+ description: 'GitHub repository URL.',
28
+ }),
29
+ branch: Flags.string({
30
+ description: 'Git branch (default: main).',
31
+ }),
32
+ port: Flags.integer({
33
+ description: 'Container port.',
34
+ }),
35
+ 'root-dir': Flags.string({
36
+ description: 'Root directory for the build (default: .).',
37
+ }),
38
+ public: Flags.boolean({
39
+ description: 'Make service publicly accessible.',
40
+ default: false,
41
+ }),
42
+ };
43
+ async run() {
44
+ const { flags } = await this.parse(ServicesCreate);
45
+ const typedFlags = flags;
46
+ const client = await this.initApiClient(typedFlags);
47
+ const projectId = await this.requireProject(typedFlags, client);
48
+ const isInteractive = !typedFlags.json && !typedFlags.quiet;
49
+ let serviceName = typedFlags.name;
50
+ let buildMethod = typedFlags['build-method'];
51
+ let port = typedFlags.port;
52
+ // ── Interactive prompts when flags are missing ───────────────────────
53
+ if (!serviceName) {
54
+ if (!isInteractive) {
55
+ throw new CliError('No service name specified.', 1, 'Pass --name <name> when using --json or --quiet.');
56
+ }
57
+ const nameInput = await clack.text({
58
+ message: 'Service name:',
59
+ placeholder: 'my-api',
60
+ validate: (value) => {
61
+ if (!value.trim())
62
+ return 'Service name is required.';
63
+ return undefined;
64
+ },
65
+ });
66
+ if (clack.isCancel(nameInput)) {
67
+ throw new CliError('Service creation cancelled.', 0);
68
+ }
69
+ serviceName = nameInput;
70
+ }
71
+ if (!buildMethod) {
72
+ if (!isInteractive) {
73
+ throw new CliError('No build method specified.', 1, 'Pass --build-method <dockerfile|buildpack> when using --json or --quiet.');
74
+ }
75
+ const methodInput = await clack.select({
76
+ message: 'Build method:',
77
+ options: [
78
+ { value: 'dockerfile', label: 'Dockerfile' },
79
+ { value: 'buildpack', label: 'Buildpack (auto-detect)' },
80
+ ],
81
+ });
82
+ if (clack.isCancel(methodInput)) {
83
+ throw new CliError('Service creation cancelled.', 0);
84
+ }
85
+ buildMethod = methodInput;
86
+ }
87
+ if (port === undefined) {
88
+ if (!isInteractive) {
89
+ throw new CliError('No port specified.', 1, 'Pass --port <number> when using --json or --quiet.');
90
+ }
91
+ const portInput = await clack.text({
92
+ message: 'Container port:',
93
+ placeholder: '3000',
94
+ validate: (value) => {
95
+ const n = Number(value);
96
+ if (!Number.isInteger(n) || n < 1 || n > 65535) {
97
+ return 'Port must be an integer between 1 and 65535.';
98
+ }
99
+ return undefined;
100
+ },
101
+ });
102
+ if (clack.isCancel(portInput)) {
103
+ throw new CliError('Service creation cancelled.', 0);
104
+ }
105
+ port = Number(portInput);
106
+ }
107
+ // ── Build DTO and create service ────────────────────────────────────
108
+ const dto = {
109
+ name: serviceName,
110
+ build_method: buildMethod,
111
+ port,
112
+ is_public: typedFlags.public,
113
+ };
114
+ if (typedFlags.repo) {
115
+ dto.github_repo_url = typedFlags.repo;
116
+ }
117
+ if (typedFlags.branch) {
118
+ dto.github_branch = typedFlags.branch;
119
+ }
120
+ if (typedFlags['root-dir']) {
121
+ dto.github_root_directory = typedFlags['root-dir'];
122
+ }
123
+ const response = await client.createService(projectId, dto);
124
+ const service = response.data;
125
+ if (typedFlags.json) {
126
+ this.outputJson(service);
127
+ return;
128
+ }
129
+ if (typedFlags.quiet) {
130
+ this.outputQuiet(service.slug);
131
+ return;
132
+ }
133
+ this.log(successMessage(`Service ${chalk.bold(service.name)} created.`));
134
+ this.log('');
135
+ this.log(infoBlock('Service', [
136
+ ['Name', service.name],
137
+ ['Slug', service.slug],
138
+ ['Status', statusColor(service.status)],
139
+ ['Build', service.build_method],
140
+ ['Port', String(service.port)],
141
+ ['URL', service.url],
142
+ ['ID', chalk.dim(service.id)],
143
+ ]));
144
+ }
145
+ }
146
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/services/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class ServicesDelete extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/services/delete.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAI1E,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAW;IACrD,OAAgB,WAAW,SAAuB;IAElD,OAAgB,QAAQ,WAGtB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwC3B"}
@@ -0,0 +1,41 @@
1
+ import * as clack from '@clack/prompts';
2
+ import chalk from 'chalk';
3
+ import { BaseCommand } from '../../lib/base-command.js';
4
+ import { CliError } from '../../lib/errors.js';
5
+ import { successMessage } from '../../lib/output.js';
6
+ export default class ServicesDelete extends BaseCommand {
7
+ static description = 'Delete a service.';
8
+ static examples = [
9
+ '<%= config.bin %> services delete --project my-project --service my-api --yes',
10
+ '<%= config.bin %> services delete --json --yes',
11
+ ];
12
+ async run() {
13
+ const { flags } = await this.parse(ServicesDelete);
14
+ const typedFlags = flags;
15
+ const client = await this.initApiClient(typedFlags);
16
+ const [projectId, serviceId] = await this.requireService(typedFlags, client);
17
+ // ── Confirmation ──────────────────────────────────────────────────────
18
+ if (!typedFlags.yes) {
19
+ if (typedFlags.json || typedFlags.quiet) {
20
+ throw new CliError('Confirmation required.', 1, 'Pass --yes to confirm deletion when using --json or --quiet.');
21
+ }
22
+ const confirmed = await clack.confirm({
23
+ message: `Delete service "${serviceId}" from project "${projectId}"? This cannot be undone.`,
24
+ });
25
+ if (clack.isCancel(confirmed) || !confirmed) {
26
+ throw new CliError('Deletion cancelled.', 0);
27
+ }
28
+ }
29
+ await client.deleteService(projectId, serviceId);
30
+ if (typedFlags.json) {
31
+ this.outputJson({ project: projectId, service: serviceId, action: 'delete' });
32
+ return;
33
+ }
34
+ if (typedFlags.quiet) {
35
+ this.outputQuiet(serviceId);
36
+ return;
37
+ }
38
+ this.log(successMessage(`Service ${chalk.bold(serviceId)} deleted.`));
39
+ }
40
+ }
41
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/services/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAW;IACrD,MAAM,CAAU,WAAW,GAAG,mBAAmB,CAAC;IAElD,MAAM,CAAU,QAAQ,GAAG;QACzB,+EAA+E;QAC/E,gDAAgD;KACjD,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,KAAoB,CAAC;QAExC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAE7E,yEAAyE;QACzE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;YACpB,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACxC,MAAM,IAAI,QAAQ,CAChB,wBAAwB,EACxB,CAAC,EACD,8DAA8D,CAC/D,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;gBACpC,OAAO,EAAE,mBAAmB,SAAS,mBAAmB,SAAS,2BAA2B;aAC7F,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC5C,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAEjD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC9E,OAAO;QACT,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IACxE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class ServicesInfo extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/commands/services/info.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAG1E,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,OAAgB,WAAW,SAAgC;IAE3D,OAAgB,QAAQ,WAGtB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgD3B"}
@@ -0,0 +1,46 @@
1
+ import chalk from 'chalk';
2
+ import { BaseCommand } from '../../lib/base-command.js';
3
+ import { infoBlock, statusColor } from '../../lib/output.js';
4
+ export default class ServicesInfo extends BaseCommand {
5
+ static description = 'Show details of a service.';
6
+ static examples = [
7
+ '<%= config.bin %> services info --project my-project --service my-api',
8
+ '<%= config.bin %> services info --json',
9
+ ];
10
+ async run() {
11
+ const { flags } = await this.parse(ServicesInfo);
12
+ const typedFlags = flags;
13
+ const client = await this.initApiClient(typedFlags);
14
+ const [projectId, serviceId] = await this.requireService(typedFlags, client);
15
+ const response = await client.getService(projectId, serviceId);
16
+ const service = response.data;
17
+ if (typedFlags.json) {
18
+ this.outputJson(service);
19
+ return;
20
+ }
21
+ if (typedFlags.quiet) {
22
+ this.outputQuiet(service.slug);
23
+ return;
24
+ }
25
+ const fields = [
26
+ ['Name', service.name],
27
+ ['Slug', service.slug],
28
+ ['Status', statusColor(service.status)],
29
+ ['Health', statusColor(service.health_status)],
30
+ ['Build', service.build_method],
31
+ ['Port', String(service.port)],
32
+ ['URL', service.url],
33
+ ];
34
+ if (service.github_repo_url) {
35
+ fields.push(['Repository', service.github_repo_url]);
36
+ fields.push(['Branch', service.github_branch]);
37
+ fields.push(['Root Dir', service.github_root_directory]);
38
+ }
39
+ fields.push(['CPU', `${service.resources.cpu_request} / ${service.resources.cpu_limit}`], ['Memory', `${service.resources.memory_request} / ${service.resources.memory_limit}`], [
40
+ 'Autoscaling',
41
+ service.autoscaling.enabled ? `up to ${String(service.autoscaling.max_replicas)}` : 'off',
42
+ ], ['Created', new Date(service.created_at).toLocaleString()], ['ID', chalk.dim(service.id)]);
43
+ this.log(infoBlock('Service', fields));
44
+ }
45
+ }
46
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/commands/services/info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,MAAM,CAAU,WAAW,GAAG,4BAA4B,CAAC;IAE3D,MAAM,CAAU,QAAQ,GAAG;QACzB,uEAAuE;QACvE,wCAAwC;KACzC,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,KAAoB,CAAC;QAExC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;QAE9B,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAA4B;YACtC,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;YACtB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;YACtB,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACvC,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC9C,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC;YAC/B,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC;SACrB,CAAC;QAEF,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,CAAC,IAAI,CACT,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAC5E,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,cAAc,MAAM,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,EACrF;YACE,aAAa;YACb,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK;SAC1F,EACD,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC,EAC1D,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAC9B,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACzC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class ServicesList extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/services/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAG1E,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,OAAgB,WAAW,SAAqC;IAEhE,OAAgB,QAAQ,WAItB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuC3B"}
@@ -0,0 +1,40 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ import { formatTable, statusColor } from '../../lib/output.js';
3
+ export default class ServicesList extends BaseCommand {
4
+ static description = 'List all services in a project.';
5
+ static examples = [
6
+ '<%= config.bin %> services list --project my-project',
7
+ '<%= config.bin %> services list --json',
8
+ '<%= config.bin %> services list --quiet',
9
+ ];
10
+ async run() {
11
+ const { flags } = await this.parse(ServicesList);
12
+ const typedFlags = flags;
13
+ const client = await this.initApiClient(typedFlags);
14
+ const projectId = await this.requireProject(typedFlags, client);
15
+ const response = await client.listServices(projectId, { limit: 100 });
16
+ const services = response.data;
17
+ if (typedFlags.json) {
18
+ this.outputJson(services);
19
+ return;
20
+ }
21
+ if (typedFlags.quiet) {
22
+ this.outputQuiet(services.map((s) => s.slug));
23
+ return;
24
+ }
25
+ if (services.length === 0) {
26
+ this.log('No services found. Create one with `guara services create`.');
27
+ return;
28
+ }
29
+ this.log(formatTable(['Name', 'Slug', 'Status', 'Health', 'Build', 'Port', 'URL'], services.map((s) => [
30
+ s.name,
31
+ s.slug,
32
+ statusColor(s.status),
33
+ statusColor(s.health_status),
34
+ s.build_method,
35
+ String(s.port),
36
+ s.url,
37
+ ])));
38
+ }
39
+ }
40
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/services/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,MAAM,CAAU,WAAW,GAAG,iCAAiC,CAAC;IAEhE,MAAM,CAAU,QAAQ,GAAG;QACzB,sDAAsD;QACtD,wCAAwC;QACxC,yCAAyC;KAC1C,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,KAAoB,CAAC;QAExC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;QAE/B,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CACN,WAAW,CACT,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAC5D,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAClB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,IAAI;YACN,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;YACrB,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC;YAC5B,CAAC,CAAC,YAAY;YACd,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YACd,CAAC,CAAC,GAAG;SACN,CAAC,CACH,CACF,CAAC;IACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class ServicesRestart extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=restart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../../../src/commands/services/restart.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAG1E,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;IACtD,OAAgB,WAAW,SAA6C;IAExE,OAAgB,QAAQ,WAGtB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB3B"}
@@ -0,0 +1,27 @@
1
+ import chalk from 'chalk';
2
+ import { BaseCommand } from '../../lib/base-command.js';
3
+ import { successMessage } from '../../lib/output.js';
4
+ export default class ServicesRestart extends BaseCommand {
5
+ static description = 'Trigger a rolling restart of a service.';
6
+ static examples = [
7
+ '<%= config.bin %> services restart --project my-project --service my-api',
8
+ '<%= config.bin %> services restart --json',
9
+ ];
10
+ async run() {
11
+ const { flags } = await this.parse(ServicesRestart);
12
+ const typedFlags = flags;
13
+ const client = await this.initApiClient(typedFlags);
14
+ const [projectId, serviceId] = await this.requireService(typedFlags, client);
15
+ await client.restartService(projectId, serviceId);
16
+ if (typedFlags.json) {
17
+ this.outputJson({ project: projectId, service: serviceId, action: 'restart' });
18
+ return;
19
+ }
20
+ if (typedFlags.quiet) {
21
+ this.outputQuiet(serviceId);
22
+ return;
23
+ }
24
+ this.log(successMessage(`Rolling restart triggered for ${chalk.bold(serviceId)}.`));
25
+ }
26
+ }
27
+ //# sourceMappingURL=restart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.js","sourceRoot":"","sources":["../../../src/commands/services/restart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;IACtD,MAAM,CAAU,WAAW,GAAG,yCAAyC,CAAC;IAExE,MAAM,CAAU,QAAQ,GAAG;QACzB,0EAA0E;QAC1E,2CAA2C;KAC5C,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,KAAoB,CAAC;QAExC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC7E,MAAM,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAElD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/E,OAAO;QACT,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,iCAAiC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACtF,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class ServicesStart extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/commands/services/start.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAoB,MAAM,2BAA2B,CAAC;AAG1E,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,OAAgB,WAAW,SAA8B;IAEzD,OAAgB,QAAQ,WAGtB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB3B"}