@quantum-hub/qhubctl 1.16.0 → 1.17.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.
@@ -83,10 +83,10 @@ async function createDatapool(client, suggestedName) {
83
83
  catch (err) {
84
84
  if (err instanceof HubPlatformError) {
85
85
  const errorMessage = err.body || err.message || 'Unknown API error occurred';
86
- throw new Error(`Failed to create data pool (HTTP ${err.statusCode}): ${JSON.stringify(errorMessage)}`);
86
+ throw new Error(`Failed to create data pool (HTTP ${err.statusCode}): ${JSON.stringify(errorMessage)}`, { cause: err });
87
87
  }
88
88
  const msg = err instanceof Error ? err.message : String(err);
89
- throw new Error(`Failed to create data pool: ${msg}`);
89
+ throw new Error(`Failed to create data pool: ${msg}`, { cause: err });
90
90
  }
91
91
  }
92
92
  async function selectExistingDatapool(client) {
@@ -40,7 +40,7 @@ async function determineOutputPath(opts) {
40
40
  fs.mkdirpSync(outputDir);
41
41
  }
42
42
  catch (err) {
43
- throw new Error(`Cannot create output directory: ${outputDir}. ${getErrorMessage(err)}`);
43
+ throw new Error(`Cannot create output directory: ${outputDir}. ${getErrorMessage(err)}`, { cause: err });
44
44
  }
45
45
  }
46
46
  }
@@ -163,7 +163,7 @@ async function generateFromCode(entrypoint) {
163
163
  }
164
164
  catch (err) {
165
165
  const errorMessage = getErrorMessage(err);
166
- throw new Error(`Failed to generate OpenAPI description:\n${errorMessage}`);
166
+ throw new Error(`Failed to generate OpenAPI description:\n${errorMessage}`, { cause: err });
167
167
  }
168
168
  }
169
169
  const EXAMPLES = `
@@ -197,7 +197,7 @@ export const openapiCommand = new Command('openapi')
197
197
  catch (err) {
198
198
  throw new Error(`Invalid entrypoint format: ${getErrorMessage(err)}\n\n` +
199
199
  'Expected format: "package.module:function"\nExample: "src.program:run"\n\n' +
200
- 'Use --help for more examples.');
200
+ 'Use --help for more examples.', { cause: err });
201
201
  }
202
202
  const outputPath = await determineOutputPath(opts);
203
203
  const shouldGenerateFile = isProjectSupported(opts);
@@ -229,7 +229,7 @@ export const openapiCommand = new Command('openapi')
229
229
  }
230
230
  catch (err) {
231
231
  spin.fail('Failed');
232
- throw new Error(`Failed to write file ${outputPath}: ${getErrorMessage(err)}`);
232
+ throw new Error(`Failed to write file ${outputPath}: ${getErrorMessage(err)}`, { cause: err });
233
233
  }
234
234
  const relativePath = path.relative(process.cwd(), outputPath);
235
235
  const displayPath = relativePath.startsWith('..') ? outputPath : relativePath;
@@ -1,7 +1,6 @@
1
1
  import { confirm } from '@inquirer/prompts';
2
2
  import { Command } from 'commander';
3
- import asyncWaitUntil from 'async-wait-until';
4
- const { waitUntil } = asyncWaitUntil;
3
+ import { waitUntil } from 'async-wait-until';
5
4
  import fsExtra from 'fs-extra';
6
5
  const { readJsonSync } = fsExtra;
7
6
  import fs from 'node:fs';
@@ -55,7 +55,7 @@ async function buildServiceJob(qhubService, service, silentMode) {
55
55
  }
56
56
  catch (err) {
57
57
  spin?.fail();
58
- throw new Error('Error while waiting for the build job to finish: ' + err);
58
+ throw new Error('Error while waiting for the build job to finish: ' + err, { cause: err });
59
59
  }
60
60
  if (spin) {
61
61
  if (buildJob?.status === HubPlatform.BuildJobDto.Status.Success)
@@ -124,10 +124,9 @@ export const upCommand = new Command('up')
124
124
  serviceExistsInPlatform = false;
125
125
  }
126
126
  }
127
- let createNewService = true;
128
127
  if (serviceConfig.serviceId && !serviceExistsInPlatform) {
129
128
  stdout(`We could not find a service with id '${serviceConfig.serviceId}' in the current context!`);
130
- createNewService = await confirm({ message: 'Do you want to create a new service?' });
129
+ const createNewService = await confirm({ message: 'Do you want to create a new service?' });
131
130
  if (!createNewService)
132
131
  process.exit(0);
133
132
  }
@@ -19,7 +19,7 @@ export const cloneRepository = async (url, targetDirectory) => {
19
19
  }
20
20
  catch (error) {
21
21
  console.error(error);
22
- throw new Error('Failed to download starter template.');
22
+ throw new Error('Failed to download starter template.', { cause: error });
23
23
  }
24
24
  // Remove git metadata so the project directory is a clean working tree
25
25
  await fs.remove(`${targetDirectory}/.git`);
@@ -20,13 +20,13 @@ export default class AuthService {
20
20
  catch (error) {
21
21
  if (error instanceof PlatformError) {
22
22
  if (error.response.status === 401) {
23
- throw new Error('Invalid API key');
23
+ throw new Error('Invalid API key', { cause: error });
24
24
  }
25
25
  const errorMessage = await error.getErrorMessage();
26
- throw new Error(errorMessage);
26
+ throw new Error(errorMessage, { cause: error });
27
27
  }
28
28
  console.error(JSON.stringify(error));
29
- throw new Error('Internal error occurred, please contact your Quantum Hub administrator');
29
+ throw new Error('Internal error occurred, please contact your Quantum Hub administrator', { cause: error });
30
30
  }
31
31
  }
32
32
  }
@@ -23,7 +23,7 @@ export default class QuantumHubService extends CommandService {
23
23
  }
24
24
  catch (error) {
25
25
  const errorMessage = await handleError(error);
26
- throw new Error(errorMessage);
26
+ throw new Error(errorMessage, { cause: error });
27
27
  }
28
28
  }
29
29
  async createService(serviceConfig, sourceCode, apiDefinition) {
@@ -57,7 +57,7 @@ export default class QuantumHubService extends CommandService {
57
57
  }
58
58
  catch (error) {
59
59
  const errorMessage = await handleError(error);
60
- throw new Error(errorMessage);
60
+ throw new Error(errorMessage, { cause: error });
61
61
  }
62
62
  }
63
63
  async getBuildJob(id) {
@@ -66,7 +66,7 @@ export default class QuantumHubService extends CommandService {
66
66
  }
67
67
  catch (error) {
68
68
  const errorMessage = await handleError(error);
69
- throw new Error(errorMessage);
69
+ throw new Error(errorMessage, { cause: error });
70
70
  }
71
71
  }
72
72
  async getBuildLogs(id) {
@@ -78,7 +78,7 @@ export default class QuantumHubService extends CommandService {
78
78
  return [];
79
79
  }
80
80
  const errorMessage = await handleError(error);
81
- throw new Error(errorMessage);
81
+ throw new Error(errorMessage, { cause: error });
82
82
  }
83
83
  }
84
84
  async getJobById(id) {
@@ -87,7 +87,7 @@ export default class QuantumHubService extends CommandService {
87
87
  }
88
88
  catch (error) {
89
89
  const errorMessage = await handleError(error);
90
- throw new Error(errorMessage);
90
+ throw new Error(errorMessage, { cause: error });
91
91
  }
92
92
  }
93
93
  async getService(id) {
@@ -96,7 +96,7 @@ export default class QuantumHubService extends CommandService {
96
96
  }
97
97
  catch (error) {
98
98
  const errorMessage = await handleError(error);
99
- throw new Error(errorMessage);
99
+ throw new Error(errorMessage, { cause: error });
100
100
  }
101
101
  }
102
102
  async getServices() {
@@ -105,7 +105,7 @@ export default class QuantumHubService extends CommandService {
105
105
  }
106
106
  catch (error) {
107
107
  const errorMessage = await handleError(error);
108
- throw new Error(errorMessage);
108
+ throw new Error(errorMessage, { cause: error });
109
109
  }
110
110
  }
111
111
  async runJob(request) {
@@ -114,7 +114,7 @@ export default class QuantumHubService extends CommandService {
114
114
  }
115
115
  catch (error) {
116
116
  const errorMessage = await handleError(error);
117
- throw new Error(errorMessage);
117
+ throw new Error(errorMessage, { cause: error });
118
118
  }
119
119
  }
120
120
  async updateDescription(serviceConfig, description) {
@@ -123,7 +123,7 @@ export default class QuantumHubService extends CommandService {
123
123
  }
124
124
  catch (error) {
125
125
  const errorMessage = await handleError(error);
126
- throw new Error(errorMessage);
126
+ throw new Error(errorMessage, { cause: error });
127
127
  }
128
128
  }
129
129
  async updateOpenapi(serviceConfig, openapi) {
@@ -132,7 +132,7 @@ export default class QuantumHubService extends CommandService {
132
132
  }
133
133
  catch (error) {
134
134
  const errorMessage = await handleError(error);
135
- throw new Error(errorMessage);
135
+ throw new Error(errorMessage, { cause: error });
136
136
  }
137
137
  }
138
138
  async updateService(serviceConfig, description, sourceCode, openapi) {
@@ -169,7 +169,7 @@ export default class QuantumHubService extends CommandService {
169
169
  }
170
170
  catch (error) {
171
171
  const errorMessage = await handleError(error);
172
- throw new Error(errorMessage);
172
+ throw new Error(errorMessage, { cause: error });
173
173
  }
174
174
  }
175
175
  async uploadSourceCode(serviceId, sourceCode) {
@@ -26,7 +26,7 @@ export default class UserService {
26
26
  }
27
27
  catch (error) {
28
28
  const errorMessage = await handleError(error);
29
- throw new Error(errorMessage);
29
+ throw new Error(errorMessage, { cause: error });
30
30
  }
31
31
  }
32
32
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quantum-hub/qhubctl",
3
- "version": "1.16.0",
3
+ "version": "1.17.0",
4
4
  "description": "Kipu Quantum Hub CLI",
5
5
  "author": "Kipu Quantum GmbH",
6
6
  "contributors": [
@@ -27,7 +27,7 @@
27
27
  "dependencies": {
28
28
  "@inquirer/prompts": "^8",
29
29
  "@quantum-hub/qhub-api": "^1",
30
- "adm-zip": "^0.5.16",
30
+ "adm-zip": "^0.5.17",
31
31
  "async-wait-until": "^2",
32
32
  "commander": "^14",
33
33
  "fs-extra": "^11",
@@ -39,21 +39,21 @@
39
39
  "yaml": "^2"
40
40
  },
41
41
  "devDependencies": {
42
- "@eslint/js": "^9",
43
- "@types/adm-zip": "^0.5.7",
42
+ "@eslint/js": "^10",
43
+ "@types/adm-zip": "^0.5.8",
44
44
  "@types/chai": "^5",
45
45
  "@types/fs-extra": "^11",
46
46
  "@types/mocha": "^10",
47
- "@types/node": "^24",
47
+ "@types/node": "^25",
48
48
  "@types/update-notifier": "^6",
49
- "chai": "^5",
50
- "eslint": "^9",
49
+ "chai": "^6",
50
+ "eslint": "^10",
51
51
  "mocha": "^11",
52
- "nyc": "^17",
52
+ "nyc": "^18",
53
53
  "shx": "^0.4.0",
54
54
  "ts-node": "^10",
55
55
  "tsx": "^4",
56
- "typescript": "^5",
56
+ "typescript": "^6",
57
57
  "typescript-eslint": "^8"
58
58
  },
59
59
  "scripts": {