Skip to content

Commit e07a02e

Browse files
committed
reducing SDK method stubbing
1 parent 4e19d8e commit e07a02e

36 files changed

Lines changed: 219 additions & 206 deletions

packages/b2c-cli/src/commands/code/delete.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,10 @@ export default class CodeDelete extends InstanceCommand<typeof CodeDelete> {
5151
}),
5252
};
5353

54-
protected async confirm(message: string): Promise<boolean> {
55-
return confirm(message);
56-
}
54+
protected operations = {
55+
confirm,
56+
deleteCodeVersion: async (codeVersion: string) => deleteCodeVersion(this.instance, codeVersion),
57+
};
5758

5859
async run(): Promise<void> {
5960
this.requireOAuthCredentials();
@@ -63,7 +64,7 @@ export default class CodeDelete extends InstanceCommand<typeof CodeDelete> {
6364

6465
// Confirm deletion unless --force is used
6566
if (!this.flags.force) {
66-
const confirmed = await this.confirm(
67+
const confirmed = await this.operations.confirm(
6768
t(
6869
'commands.code.delete.confirm',
6970
'Are you sure you want to delete code version "{{codeVersion}}" on {{hostname}}? (y/n)',
@@ -84,7 +85,7 @@ export default class CodeDelete extends InstanceCommand<typeof CodeDelete> {
8485
}),
8586
);
8687

87-
await deleteCodeVersion(this.instance, codeVersion);
88+
await this.operations.deleteCodeVersion(codeVersion);
8889
this.log(t('commands.code.delete.deleted', 'Code version {{codeVersion}} deleted successfully', {codeVersion}));
8990
}
9091
}

packages/b2c-cli/src/commands/code/deploy.ts

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -47,17 +47,14 @@ export default class CodeDeploy extends CartridgeCommand<typeof CodeDeploy> {
4747
}),
4848
};
4949

50-
protected async deleteCartridges(cartridges: Parameters<typeof deleteCartridges>[1]) {
51-
return deleteCartridges(this.instance, cartridges);
52-
}
53-
54-
protected async getActiveCodeVersion() {
55-
return getActiveCodeVersion(this.instance);
56-
}
57-
58-
protected async reloadCodeVersion(codeVersion: string) {
59-
return reloadCodeVersion(this.instance, codeVersion);
60-
}
50+
protected operations = {
51+
uploadCartridges: async (cartridges: Parameters<typeof uploadCartridges>[1]) =>
52+
uploadCartridges(this.instance, cartridges),
53+
deleteCartridges: async (cartridges: Parameters<typeof deleteCartridges>[1]) =>
54+
deleteCartridges(this.instance, cartridges),
55+
getActiveCodeVersion: async () => getActiveCodeVersion(this.instance),
56+
reloadCodeVersion: async (codeVersion: string) => reloadCodeVersion(this.instance, codeVersion),
57+
};
6158

6259
async run(): Promise<DeployResult> {
6360
this.requireWebDavCredentials();
@@ -71,7 +68,7 @@ export default class CodeDeploy extends CartridgeCommand<typeof CodeDeploy> {
7168
this.warn(
7269
t('commands.code.deploy.noCodeVersion', 'No code version specified, discovering active code version...'),
7370
);
74-
const activeVersion = await this.getActiveCodeVersion();
71+
const activeVersion = await this.operations.getActiveCodeVersion();
7572
if (!activeVersion?.id) {
7673
this.error(
7774
t('commands.code.deploy.noActiveVersion', 'No active code version found. Specify one with --code-version.'),
@@ -131,17 +128,17 @@ export default class CodeDeploy extends CartridgeCommand<typeof CodeDeploy> {
131128
try {
132129
// Optionally delete existing cartridges first
133130
if (this.flags.delete) {
134-
await this.deleteCartridges(cartridges);
131+
await this.operations.deleteCartridges(cartridges);
135132
}
136133

137134
// Upload cartridges
138-
await this.uploadCartridges(cartridges);
135+
await this.operations.uploadCartridges(cartridges);
139136

140137
// Optionally reload code version
141138
let reloaded = false;
142139
if (this.flags.reload) {
143140
try {
144-
await this.reloadCodeVersion(version);
141+
await this.operations.reloadCodeVersion(version);
145142
reloaded = true;
146143
} catch (error) {
147144
this.logger?.debug(`Could not reload code version: ${error instanceof Error ? error.message : error}`);
@@ -188,8 +185,4 @@ export default class CodeDeploy extends CartridgeCommand<typeof CodeDeploy> {
188185
throw error;
189186
}
190187
}
191-
192-
protected async uploadCartridges(cartridges: Parameters<typeof uploadCartridges>[1]) {
193-
return uploadCartridges(this.instance, cartridges);
194-
}
195188
}

packages/b2c-cli/src/commands/code/watch.ts

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,22 @@ export default class CodeWatch extends CartridgeCommand<typeof CodeWatch> {
2727
...CartridgeCommand.cartridgeFlags,
2828
};
2929

30+
protected operations = {
31+
watchCartridges: async () =>
32+
watchCartridges(this.instance, this.cartridgePath, {
33+
...this.cartridgeOptions,
34+
onUpload: (files) => {
35+
this.log(t('commands.code.watch.uploaded', '[UPLOAD] {{count}} file(s)', {count: files.length}));
36+
},
37+
onDelete: (files) => {
38+
this.log(t('commands.code.watch.deleted', '[DELETE] {{count}} file(s)', {count: files.length}));
39+
},
40+
onError: (error) => {
41+
this.warn(t('commands.code.watch.error', 'Error: {{message}}', {message: error.message}));
42+
},
43+
}),
44+
};
45+
3046
async run(): Promise<void> {
3147
this.requireWebDavCredentials();
3248
this.requireOAuthCredentials();
@@ -41,7 +57,7 @@ export default class CodeWatch extends CartridgeCommand<typeof CodeWatch> {
4157
}
4258

4359
try {
44-
const result = await this.watchCartridges();
60+
const result = await this.operations.watchCartridges();
4561

4662
this.log(
4763
t('commands.code.watch.watching', 'Watching {{count}} cartridge(s)...', {count: result.cartridges.length}),
@@ -67,19 +83,4 @@ export default class CodeWatch extends CartridgeCommand<typeof CodeWatch> {
6783
throw error;
6884
}
6985
}
70-
71-
protected async watchCartridges() {
72-
return watchCartridges(this.instance, this.cartridgePath, {
73-
...this.cartridgeOptions,
74-
onUpload: (files) => {
75-
this.log(t('commands.code.watch.uploaded', '[UPLOAD] {{count}} file(s)', {count: files.length}));
76-
},
77-
onDelete: (files) => {
78-
this.log(t('commands.code.watch.deleted', '[DELETE] {{count}} file(s)', {count: files.length}));
79-
},
80-
onError: (error) => {
81-
this.warn(t('commands.code.watch.error', 'Error: {{message}}', {message: error.message}));
82-
},
83-
});
84-
}
8586
}

packages/b2c-cli/src/commands/docs/download.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ export default class DocsDownload extends InstanceCommand<typeof DocsDownload> {
3737
}),
3838
};
3939

40-
protected async downloadDocs(input: Parameters<typeof downloadDocs>[1]) {
41-
return downloadDocs(this.instance, input);
42-
}
40+
protected operations = {
41+
downloadDocs: async (input: Parameters<typeof downloadDocs>[1]) => downloadDocs(this.instance, input),
42+
};
4343

4444
async run(): Promise<DownloadDocsResult> {
4545
this.requireServer();
@@ -54,7 +54,7 @@ export default class DocsDownload extends InstanceCommand<typeof DocsDownload> {
5454
}),
5555
);
5656

57-
const result = await this.downloadDocs({
57+
const result = await this.operations.downloadDocs({
5858
outputDir,
5959
keepArchive,
6060
});

packages/b2c-cli/src/commands/docs/read.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,15 @@ export default class DocsRead extends BaseCommand<typeof DocsRead> {
5757
}),
5858
};
5959

60-
protected readDocByQuery(query: string) {
61-
return readDocByQuery(query);
62-
}
60+
protected operations = {
61+
readDocByQuery,
62+
};
6363

6464
async run(): Promise<ReadDocsResult> {
6565
const {query} = this.args;
6666
const {raw} = this.flags;
6767

68-
const result = this.readDocByQuery(query);
68+
const result = this.operations.readDocByQuery(query);
6969

7070
if (!result) {
7171
this.error(t('commands.docs.read.notFound', 'No documentation found matching: {{query}}', {query}), {

packages/b2c-cli/src/commands/docs/schema.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,18 @@ export default class DocsSchema extends BaseCommand<typeof DocsSchema> {
4545
}),
4646
};
4747

48-
protected listSchemas() {
49-
return listSchemas();
50-
}
51-
52-
protected readSchemaByQuery(query: string) {
53-
return readSchemaByQuery(query);
54-
}
48+
protected operations = {
49+
listSchemas,
50+
readSchemaByQuery,
51+
};
5552

5653
async run(): Promise<ListResult | SchemaResult> {
5754
const {query} = this.args;
5855
const {list} = this.flags;
5956

6057
// List mode
6158
if (list) {
62-
const entries = this.listSchemas();
59+
const entries = this.operations.listSchemas();
6360

6461
if (this.jsonEnabled()) {
6562
return {entries};
@@ -80,7 +77,7 @@ export default class DocsSchema extends BaseCommand<typeof DocsSchema> {
8077
this.error(t('commands.docs.schema.queryRequired', 'Schema name is required. Use --list to see all schemas.'));
8178
}
8279

83-
const result = this.readSchemaByQuery(query);
80+
const result = this.operations.readSchemaByQuery(query);
8481

8582
if (!result) {
8683
this.error(t('commands.docs.schema.notFound', 'No schema found matching: {{query}}', {query}), {

packages/b2c-cli/src/commands/docs/search.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,17 +70,18 @@ export default class DocsSearch extends BaseCommand<typeof DocsSearch> {
7070
}),
7171
};
7272

73-
protected listDocs() {
74-
return listDocs();
75-
}
73+
protected operations = {
74+
listDocs,
75+
searchDocs,
76+
};
7677

7778
async run(): Promise<ListDocsResponse | SearchDocsResponse> {
7879
const {query} = this.args;
7980
const {limit, list} = this.flags;
8081

8182
// List mode
8283
if (list) {
83-
const entries = this.listDocs();
84+
const entries = this.operations.listDocs();
8485

8586
if (this.jsonEnabled()) {
8687
return {entries};
@@ -113,7 +114,7 @@ export default class DocsSearch extends BaseCommand<typeof DocsSearch> {
113114
);
114115
}
115116

116-
const results = this.searchDocs(query, limit);
117+
const results = this.operations.searchDocs(query, limit);
117118

118119
const response: SearchDocsResponse = {
119120
query,
@@ -140,8 +141,4 @@ export default class DocsSearch extends BaseCommand<typeof DocsSearch> {
140141

141142
return response;
142143
}
143-
144-
protected searchDocs(query: string, limit: number) {
145-
return searchDocs(query, limit);
146-
}
147144
}

packages/b2c-cli/src/commands/job/export.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,14 @@ export default class JobExport extends JobCommand<typeof JobExport> {
9696
}),
9797
};
9898

99+
protected operations = {
100+
siteArchiveExportToPath: async (
101+
dataUnits: Parameters<typeof siteArchiveExportToPath>[1],
102+
output: Parameters<typeof siteArchiveExportToPath>[2],
103+
options: Parameters<typeof siteArchiveExportToPath>[3],
104+
) => siteArchiveExportToPath(this.instance, dataUnits, output, options),
105+
};
106+
99107
async run(): Promise<SiteArchiveExportResult & {localPath?: string}> {
100108
this.requireOAuthCredentials();
101109
this.requireWebDavCredentials();
@@ -173,7 +181,7 @@ export default class JobExport extends JobCommand<typeof JobExport> {
173181
this.log(t('commands.job.export.dataUnits', 'Data units: {{dataUnits}}', {dataUnits: JSON.stringify(dataUnits)}));
174182

175183
try {
176-
const result = await this.siteArchiveExportToPath(dataUnits, output, {
184+
const result = await this.operations.siteArchiveExportToPath(dataUnits, output, {
177185
keepArchive: keepArchive || noDownload,
178186
extractZip: !zipOnly,
179187
waitOptions: {
@@ -254,14 +262,6 @@ export default class JobExport extends JobCommand<typeof JobExport> {
254262
}
255263
}
256264

257-
protected async siteArchiveExportToPath(
258-
dataUnits: Parameters<typeof siteArchiveExportToPath>[1],
259-
output: Parameters<typeof siteArchiveExportToPath>[2],
260-
options: Parameters<typeof siteArchiveExportToPath>[3],
261-
) {
262-
return siteArchiveExportToPath(this.instance, dataUnits, output, options);
263-
}
264-
265265
private buildDataUnits(params: {
266266
dataUnitsJson?: string;
267267
site?: string[];

packages/b2c-cli/src/commands/job/import.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,13 @@ export default class JobImport extends JobCommand<typeof JobImport> {
5656
}),
5757
};
5858

59+
protected operations = {
60+
siteArchiveImport: async (
61+
target: Parameters<typeof siteArchiveImport>[1],
62+
options: Parameters<typeof siteArchiveImport>[2],
63+
) => siteArchiveImport(this.instance, target, options),
64+
};
65+
5966
async run(): Promise<SiteArchiveImportResult> {
6067
this.requireOAuthCredentials();
6168
this.requireWebDavCredentials();
@@ -107,7 +114,7 @@ export default class JobImport extends JobCommand<typeof JobImport> {
107114
try {
108115
const importTarget = remote ? {remoteFilename: target} : target;
109116

110-
const result = await this.siteArchiveImport(importTarget, {
117+
const result = await this.operations.siteArchiveImport(importTarget, {
111118
keepArchive,
112119
waitOptions: {
113120
timeout: timeout ? timeout * 1000 : undefined,
@@ -178,11 +185,4 @@ export default class JobImport extends JobCommand<typeof JobImport> {
178185
throw error;
179186
}
180187
}
181-
182-
protected async siteArchiveImport(
183-
target: Parameters<typeof siteArchiveImport>[1],
184-
options: Parameters<typeof siteArchiveImport>[2],
185-
) {
186-
return siteArchiveImport(this.instance, target, options);
187-
}
188188
}

packages/b2c-cli/src/commands/job/run.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,12 @@ export default class JobRun extends JobCommand<typeof JobRun> {
6666
}),
6767
};
6868

69-
protected async executeJob(jobId: string, options: Parameters<typeof executeJob>[2]) {
70-
return executeJob(this.instance, jobId, options);
71-
}
69+
protected operations = {
70+
executeJob: async (jobId: string, options: Parameters<typeof executeJob>[2]) =>
71+
executeJob(this.instance, jobId, options),
72+
waitForJob: async (jobId: string, executionId: string, options: Parameters<typeof waitForJob>[3]) =>
73+
waitForJob(this.instance, jobId, executionId, options),
74+
};
7275

7376
async run(): Promise<JobExecution> {
7477
this.requireOAuthCredentials();
@@ -110,7 +113,7 @@ export default class JobRun extends JobCommand<typeof JobRun> {
110113

111114
let execution: JobExecution;
112115
try {
113-
execution = await this.executeJob(jobId, {
116+
execution = await this.operations.executeJob(jobId, {
114117
parameters: rawBody ? undefined : parameters,
115118
body: rawBody,
116119
waitForRunning: !noWaitRunning,
@@ -147,10 +150,6 @@ export default class JobRun extends JobCommand<typeof JobRun> {
147150
return execution;
148151
}
149152

150-
protected async waitForJob(jobId: string, executionId: string, options: Parameters<typeof waitForJob>[3]) {
151-
return waitForJob(this.instance, jobId, executionId, options);
152-
}
153-
154153
private handleExecutionError(error: unknown, context: B2COperationContext): never {
155154
// Run afterOperation hooks with failure (fire-and-forget, errors ignored)
156155
this.runAfterHooks(context, {
@@ -221,7 +220,7 @@ export default class JobRun extends JobCommand<typeof JobRun> {
221220
this.log(t('commands.job.run.waiting', 'Waiting for job to complete...'));
222221

223222
try {
224-
const execution = await this.waitForJob(jobId, executionId, {
223+
const execution = await this.operations.waitForJob(jobId, executionId, {
225224
timeout: timeout ? timeout * 1000 : undefined,
226225
onProgress: (exec, elapsed) => {
227226
if (!this.jsonEnabled()) {

0 commit comments

Comments
 (0)