@sasjs/cli 3.19.5 → 3.20.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 (30) hide show
  1. package/build/commands/deploy/deploy.js +54 -108
  2. package/build/commands/deploy/spec/cbd.spec.js +31 -8
  3. package/build/commands/docs/internal/getDotFileContent.d.ts +2 -2
  4. package/build/commands/docs/internal/getDotFileContent.js +4 -4
  5. package/build/commands/fs/fsCommand.d.ts +11 -0
  6. package/build/commands/fs/fsCommand.js +335 -0
  7. package/build/commands/fs/internal/executeCode.d.ts +4 -0
  8. package/build/commands/fs/internal/executeCode.js +126 -0
  9. package/build/commands/fs/internal/extractHashArray.d.ts +1 -0
  10. package/build/commands/fs/internal/extractHashArray.js +20 -0
  11. package/build/commands/fs/spec/executeCode.spec.d.ts +1 -0
  12. package/build/commands/fs/spec/executeCode.spec.js +197 -0
  13. package/build/commands/fs/spec/extractHashArray.spec.d.ts +1 -0
  14. package/build/commands/fs/spec/extractHashArray.spec.js +14 -0
  15. package/build/commands/fs/spec/fsCommand.spec.d.ts +1 -0
  16. package/build/commands/fs/spec/fsCommand.spec.js +297 -0
  17. package/build/commands/job/internal/execute/sas9.d.ts +1 -1
  18. package/build/commands/job/internal/execute/sasjs.d.ts +3 -4
  19. package/build/commands/job/internal/execute/sasjs.js +36 -20
  20. package/build/commands/job/jobCommand.d.ts +4 -8
  21. package/build/commands/job/jobCommand.js +64 -98
  22. package/build/commands/job/spec/execute.spec.js +52 -7
  23. package/build/commands/request/spec/request.spec.server.sas9.js +2 -0
  24. package/build/commands/run/run.js +70 -107
  25. package/build/types/command/commandFactory.js +2 -0
  26. package/build/utils/config.d.ts +28 -1
  27. package/build/utils/config.js +71 -1
  28. package/build/utils/index.d.ts +1 -0
  29. package/build/utils/index.js +1 -0
  30. package/package.json +4 -4
@@ -42,7 +42,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
42
42
  exports.deploy = void 0;
43
43
  var path_1 = __importDefault(require("path"));
44
44
  var os_1 = __importDefault(require("os"));
45
- var node_1 = __importDefault(require("@sasjs/adapter/node"));
45
+ var node_1 = require("@sasjs/adapter/node");
46
46
  var config_1 = require("../../utils/config");
47
47
  var utils_1 = require("../../utils/utils");
48
48
  var utils_2 = require("@sasjs/utils");
@@ -94,7 +94,7 @@ function deploy(target, isLocal, sasjs) {
94
94
  case 4:
95
95
  streamConfig = _j.sent();
96
96
  if (!(target.serverType === utils_2.ServerType.Sasjs)) return [3 /*break*/, 6];
97
- return [4 /*yield*/, deployToSasjs(target, sasjs, streamConfig)];
97
+ return [4 /*yield*/, deployToSasjs(target, streamConfig)];
98
98
  case 5:
99
99
  _j.sent();
100
100
  return [3 /*break*/, 8];
@@ -117,7 +117,7 @@ function deploy(target, isLocal, sasjs) {
117
117
  .split('\n');
118
118
  deployScriptName = path_1.default.basename(deployScript);
119
119
  if (!(target.serverType === utils_2.ServerType.SasViya)) return [3 /*break*/, 3];
120
- return [4 /*yield*/, deployToSasViya(deployScriptName, target, isLocal, linesToExecute, logFilePath, streamConfig)];
120
+ return [4 /*yield*/, deployToSasViya(deployScriptName, target, linesToExecute, logFilePath, streamConfig)];
121
121
  case 2:
122
122
  _e.sent();
123
123
  return [3 /*break*/, 5];
@@ -151,59 +151,17 @@ function deploy(target, isLocal, sasjs) {
151
151
  });
152
152
  }
153
153
  exports.deploy = deploy;
154
- /**
155
- * Returns configuration object of SAS Adapter and authentication configuration
156
- * @param {Target} target- the target to get auth configuration from.
157
- * @param {boolean} isLocal- flag indicating if specified target is
158
- * from local sasjsconfig or global sasjsconfig file.
159
- * @returns an object containing a SAS Adapter configuration object `sasjs`
160
- * and auth configuration `authConfig`.
161
- */
162
- function getSASjsAndAuthConfig(target, isLocal) {
163
- return __awaiter(this, void 0, void 0, function () {
164
- var sasjs, authConfig, e_1;
165
- return __generator(this, function (_a) {
166
- switch (_a.label) {
167
- case 0:
168
- sasjs = new node_1.default({
169
- serverUrl: target.serverUrl,
170
- appLoc: target.appLoc,
171
- serverType: target.serverType,
172
- httpsAgentOptions: target.httpsAgentOptions,
173
- debug: true,
174
- useComputeApi: true
175
- });
176
- _a.label = 1;
177
- case 1:
178
- _a.trys.push([1, 3, , 4]);
179
- return [4 /*yield*/, (0, config_1.getAuthConfig)(target)];
180
- case 2:
181
- authConfig = _a.sent();
182
- return [3 /*break*/, 4];
183
- case 3:
184
- e_1 = _a.sent();
185
- throw new Error("Deployment failed. Request is not authenticated.\nPlease add the following variables to your .env".concat(isLocal ? ".".concat(target.name) : '', " file:\nCLIENT, SECRET, ACCESS_TOKEN, REFRESH_TOKEN"));
186
- case 4: return [2 /*return*/, {
187
- sasjs: sasjs,
188
- authConfig: authConfig
189
- }];
190
- }
191
- });
192
- });
193
- }
194
154
  /**
195
155
  * Deploys app to `SASVIYA` server through deployScript.
196
- * @param {string} deployScriptName- name of deploy script.
197
- * @param {Target} target- the target having deploy configuration.
198
- * @param {boolean} isLocal- flag indicating if specified target is
199
- * from local sasjsconfig or global sasjsconfig file.
156
+ * @param {string} deployScriptName - name of deploy script.
157
+ * @param {Target} target - the target having deploy configuration.
200
158
  * @param {string[]} linesToExecute - array of SAS code lines of deploy script to execute.
201
159
  * @param {string} logFolder - optional path to log folder,
202
160
  * log file name will be <deploy-script-name>.log
203
161
  * @param {object} streamConfig - optional configuration object of StreamConfig
204
162
  * for printing web app url on console.
205
163
  */
206
- function deployToSasViya(deployScriptName, target, isLocal, linesToExecute, logFolder, streamConfig) {
164
+ function deployToSasViya(deployScriptName, target, linesToExecute, logFolder, streamConfig) {
207
165
  var _a, _b, _c, _d, _e;
208
166
  return __awaiter(this, void 0, void 0, function () {
209
167
  var contextName, _f, sasjs, authConfig, executionResult, log, appLoc, webAppStreamUrl;
@@ -215,11 +173,16 @@ function deployToSasViya(deployScriptName, target, isLocal, linesToExecute, logF
215
173
  if (!contextName) {
216
174
  throw new Error('Compute Context Name is required for SAS Viya deployments.\n Please ensure that `contextName` is present in your build target configuration or in your .env file, and try again.\n');
217
175
  }
218
- return [4 /*yield*/, getSASjsAndAuthConfig(target, isLocal)];
176
+ return [4 /*yield*/, (0, config_1.getSASjsAndAuthConfig)(target)];
219
177
  case 1:
220
178
  _f = _g.sent(), sasjs = _f.sasjs, authConfig = _f.authConfig;
221
179
  return [4 /*yield*/, sasjs
222
- .executeScriptSASViya(deployScriptName, linesToExecute, contextName, authConfig)
180
+ .executeScript({
181
+ fileName: deployScriptName,
182
+ linesOfCode: linesToExecute,
183
+ contextName: contextName,
184
+ authConfig: authConfig
185
+ })
223
186
  .catch(function (err) {
224
187
  process.logger.error('executeScriptSASViya Error', err);
225
188
  })];
@@ -258,8 +221,8 @@ function deployToSasViya(deployScriptName, target, isLocal, linesToExecute, logF
258
221
  }
259
222
  /**
260
223
  * Deploys app to `SAS9` server through deployScript.
261
- * @param {string} deployScriptName- name of deploy script.
262
- * @param {Target} target- the target having deploy configuration.
224
+ * @param {string} deployScriptName - name of deploy script.
225
+ * @param {Target} target - the target having deploy configuration.
263
226
  * @param {string[]} linesToExecute - array of SAS code lines of deploy script to execute.
264
227
  * @param {string} logFolder - optional path to log folder,
265
228
  * log file name will be <deploy-script-name>.log
@@ -269,43 +232,31 @@ function deployToSasViya(deployScriptName, target, isLocal, linesToExecute, logF
269
232
  function deployToSas9(deployScriptName, target, linesToExecute, logFolder, streamConfig) {
270
233
  var _a, _b, _c, _d, _e;
271
234
  return __awaiter(this, void 0, void 0, function () {
272
- var username, password, sas9CredentialsError, sasjs, completedWithError, executionResult, logContent, logFilePath, appLoc, webAppStreamUrl;
273
- return __generator(this, function (_f) {
274
- switch (_f.label) {
275
- case 0:
276
- if (target.authConfigSas9) {
277
- username = target.authConfigSas9.userName;
278
- password = target.authConfigSas9.password;
279
- }
280
- else {
281
- username = process.env.SAS_USERNAME;
282
- password = process.env.SAS_PASSWORD;
283
- }
284
- if (!username || !password) {
285
- sas9CredentialsError = process.sasjsConstants.sas9CredentialsError;
286
- throw new Error(sas9CredentialsError);
287
- }
288
- password = (0, utils_2.decodeFromBase64)(password);
289
- sasjs = new node_1.default({
290
- serverUrl: target.serverUrl,
291
- httpsAgentOptions: target.httpsAgentOptions,
292
- appLoc: target.appLoc,
293
- serverType: target.serverType
294
- });
235
+ var _f, sasjs, authConfigSas9, userName, password, completedWithError, executionResult, logContent, logFilePath, appLoc, webAppStreamUrl;
236
+ return __generator(this, function (_g) {
237
+ switch (_g.label) {
238
+ case 0: return [4 /*yield*/, (0, config_1.getSASjsAndAuthConfig)(target)];
239
+ case 1:
240
+ _f = _g.sent(), sasjs = _f.sasjs, authConfigSas9 = _f.authConfigSas9;
241
+ userName = authConfigSas9.userName;
242
+ password = (0, utils_2.decodeFromBase64)(authConfigSas9.userName);
295
243
  completedWithError = false;
296
244
  return [4 /*yield*/, sasjs
297
- .executeScriptSAS9(linesToExecute, username, password)
245
+ .executeScript({
246
+ linesOfCode: linesToExecute,
247
+ authConfigSas9: { userName: userName, password: password }
248
+ })
298
249
  .catch(function (err) {
299
250
  var _a;
300
251
  (_a = process.logger) === null || _a === void 0 ? void 0 : _a.log(formatErrorString(err));
301
252
  if (err && err.errorCode === 404) {
302
- (0, utils_1.displaySasjsRunnerError)(username);
253
+ (0, utils_1.displaySasjsRunnerError)(userName);
303
254
  }
304
255
  completedWithError = true;
305
256
  return err;
306
257
  })];
307
- case 1:
308
- executionResult = _f.sent();
258
+ case 2:
259
+ executionResult = _g.sent();
309
260
  if (!executionResult) {
310
261
  return [2 /*return*/, (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error('Error getting execution log')];
311
262
  }
@@ -317,8 +268,8 @@ function deployToSas9(deployScriptName, target, linesToExecute, logFolder, strea
317
268
  : executionResult;
318
269
  logFilePath = path_1.default.join(logFolder, "".concat(deployScriptName.replace('.sas', ''), ".log"));
319
270
  return [4 /*yield*/, (0, utils_2.createFile)(logFilePath, logContent !== null && logContent !== void 0 ? logContent : '')];
320
- case 2:
321
- _f.sent();
271
+ case 3:
272
+ _g.sent();
322
273
  if (completedWithError) {
323
274
  (_c = process.logger) === null || _c === void 0 ? void 0 : _c.error("Deployment failed with errors! Log is available at ".concat(logFilePath));
324
275
  throw new Error("Deployment failed.");
@@ -336,49 +287,44 @@ function deployToSas9(deployScriptName, target, linesToExecute, logFolder, strea
336
287
  }
337
288
  /**
338
289
  * Deploys app to `SASJS` server.
339
- * @param {Target} target- the target having deploy configuration.
340
- * @param {object} sasjs - optional configuration object of SAS adapter.
290
+ * @param {Target} target - the target having deploy configuration.
341
291
  * @param {object} streamConfig - optional config for deploying streaming app.
342
292
  */
343
- function deployToSasjs(target, sasjs, streamConfig) {
293
+ function deployToSasjs(target, streamConfig) {
344
294
  var _a, _b, _c;
345
295
  return __awaiter(this, void 0, void 0, function () {
346
- var buildDestinationFolder, finalFilePathJSON, jsonContent, payload, authConfig, e_2, result, webAppStreamUrl;
347
- return __generator(this, function (_d) {
348
- switch (_d.label) {
296
+ var buildDestinationFolder, finalFilePathJSON, jsonContent, payload, authConfig, _d, sasjsApiClient, result, webAppStreamUrl;
297
+ return __generator(this, function (_e) {
298
+ switch (_e.label) {
349
299
  case 0:
350
300
  buildDestinationFolder = process.sasjsConstants.buildDestinationFolder;
351
301
  finalFilePathJSON = path_1.default.join(buildDestinationFolder, "".concat(target.name, ".json"));
352
302
  return [4 /*yield*/, (0, utils_2.readFile)(finalFilePathJSON)];
353
303
  case 1:
354
- jsonContent = _d.sent();
304
+ jsonContent = _e.sent();
355
305
  payload = JSON.parse(jsonContent);
356
- if (!!sasjs) return [3 /*break*/, 5];
357
- sasjs = new node_1.default({
358
- serverUrl: target.serverUrl,
359
- appLoc: target.appLoc,
360
- serverType: target.serverType,
361
- httpsAgentOptions: target.httpsAgentOptions,
362
- debug: true
363
- });
364
- _d.label = 2;
306
+ return [4 /*yield*/, (0, utils_1.isSasJsServerInServerMode)(target)];
365
307
  case 2:
366
- _d.trys.push([2, 4, , 5]);
308
+ if (!(_e.sent())) return [3 /*break*/, 4];
367
309
  return [4 /*yield*/, (0, config_1.getAuthConfig)(target)];
368
310
  case 3:
369
- authConfig = _d.sent();
311
+ _d = _e.sent();
370
312
  return [3 /*break*/, 5];
371
313
  case 4:
372
- e_2 = _d.sent();
373
- return [3 /*break*/, 5];
374
- case 5: return [4 /*yield*/, sasjs
375
- .deployToSASjs(payload, undefined, authConfig)
376
- .catch(function (err) {
377
- var _a;
378
- (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error('deployToSASjs Error', err);
379
- })];
314
+ _d = undefined;
315
+ _e.label = 5;
316
+ case 5:
317
+ authConfig = _d;
318
+ console.log(326);
319
+ sasjsApiClient = new node_1.SASjsApiClient(new node_1.SasjsRequestClient(target.serverUrl, target.httpsAgentOptions));
320
+ return [4 /*yield*/, sasjsApiClient
321
+ .deploy(payload, target.appLoc, authConfig)
322
+ .catch(function (err) {
323
+ var _a;
324
+ (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error('deployToSASjs Error', err);
325
+ })];
380
326
  case 6:
381
- result = _d.sent();
327
+ result = _e.sent();
382
328
  if ((result === null || result === void 0 ? void 0 : result.status) === 'failure') {
383
329
  (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error(result.message);
384
330
  if (result.example) {
@@ -1,4 +1,23 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
2
21
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
22
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
23
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -40,10 +59,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
40
59
  };
41
60
  Object.defineProperty(exports, "__esModule", { value: true });
42
61
  var path_1 = __importDefault(require("path"));
43
- var node_1 = __importDefault(require("@sasjs/adapter/node"));
62
+ var node_1 = require("@sasjs/adapter/node");
44
63
  var js_base64_1 = require("js-base64");
45
64
  var utils_1 = require("@sasjs/utils");
46
65
  var test_1 = require("../../../utils/test");
66
+ var utilsModule = __importStar(require("../../../utils/utils"));
47
67
  var types_1 = require("../../../types");
48
68
  var build_1 = require("../../build/build");
49
69
  var deploy_1 = require("../deploy");
@@ -79,18 +99,21 @@ describe('sasjs cbd with server type SASJS', function () {
79
99
  });
80
100
  }); });
81
101
  it("should deploy compile and build to sasjs/server", function () { return __awaiter(void 0, void 0, void 0, function () {
82
- var sasjs, customTarget, macroCorePath, mf_getuser, _a, mp_jsonout, ms_webout, webout, mocksPath, appinitJSPath, getdataJSPath, appinitJSContents, getdataJSContents, depsInserts, appinit, getdata, getCode;
102
+ var deployMock, customTarget, macroCorePath, mf_getuser, _a, mp_jsonout, ms_webout, webout, mocksPath, appinitJSPath, getdataJSPath, appinitJSContents, getdataJSContents, depsInserts, appinit, getdata, getCode;
83
103
  return __generator(this, function (_b) {
84
104
  switch (_b.label) {
85
105
  case 0:
86
- sasjs = new node_1.default();
87
- jest.mock('@sasjs/adapter');
88
- jest.spyOn(sasjs, 'deployToSASjs').mockImplementation(function () {
106
+ deployMock = jest
107
+ .spyOn(node_1.SASjsApiClient.prototype, 'deploy')
108
+ .mockImplementation(function () {
89
109
  return Promise.resolve({
90
110
  status: 'success',
91
111
  message: 'message'
92
112
  });
93
113
  });
114
+ jest
115
+ .spyOn(utilsModule, 'isSasJsServerInServerMode')
116
+ .mockImplementation(function () { return Promise.resolve(false); });
94
117
  return [4 /*yield*/, (0, test_1.updateConfig)({
95
118
  serviceConfig: {
96
119
  serviceFolders: ['sasjs/services/common']
@@ -114,7 +137,7 @@ describe('sasjs cbd with server type SASJS', function () {
114
137
  return [4 /*yield*/, expect((0, build_1.build)(customTarget)).toResolve()];
115
138
  case 4:
116
139
  _b.sent();
117
- return [4 /*yield*/, (0, deploy_1.deploy)(customTarget, true, sasjs)];
140
+ return [4 /*yield*/, (0, deploy_1.deploy)(customTarget, true)];
118
141
  case 5:
119
142
  _b.sent();
120
143
  macroCorePath = process.sasjsConstants.macroCorePath;
@@ -150,7 +173,7 @@ describe('sasjs cbd with server type SASJS', function () {
150
173
  getCode = function (file) {
151
174
  return "".concat(mf_getuser).concat(mp_jsonout).concat(ms_webout).concat(webout, "/* provide additional debug info */\n%global _program;\n%put &=syscc;\n%put user=%mf_getuser();\n%put pgm=&_program;\n%put timestamp=%sysfunc(datetime(),datetime19.);").concat(depsInserts).concat(file, "* Service end;");
152
175
  };
153
- expect(sasjs.deployToSASjs).toHaveBeenCalledWith({
176
+ expect(deployMock).toHaveBeenCalledWith({
154
177
  appLoc: target.appLoc,
155
178
  fileTree: {
156
179
  members: [
@@ -188,7 +211,7 @@ describe('sasjs cbd with server type SASJS', function () {
188
211
  }
189
212
  ]
190
213
  }
191
- }, undefined, undefined);
214
+ }, target.appLoc, undefined);
192
215
  return [2 /*return*/];
193
216
  }
194
217
  });
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Returns Dot-code
3
- * @param {string[]} folderList- dot-code will be generated against provided folderList
4
- * @param {string} serverUrl- prefixes with links to Libs(Inputs/Outputs)
3
+ * @param {string[]} folderList - dot-code will be generated against provided folderList
4
+ * @param {string} serverUrl - prefixes with links to Libs(Inputs/Outputs)
5
5
  */
6
6
  export declare function getDotFileContent(folderList: string[], serverUrl: string): Promise<string>;
@@ -49,8 +49,8 @@ var populateNodeDictionary_1 = require("./populateNodeDictionary");
49
49
  var populateParamNodeTypes_1 = require("./populateParamNodeTypes");
50
50
  /**
51
51
  * Returns Dot-code
52
- * @param {string[]} folderList- dot-code will be generated against provided folderList
53
- * @param {string} serverUrl- prefixes with links to Libs(Inputs/Outputs)
52
+ * @param {string[]} folderList - dot-code will be generated against provided folderList
53
+ * @param {string} serverUrl - prefixes with links to Libs(Inputs/Outputs)
54
54
  */
55
55
  function getDotFileContent(folderList, serverUrl) {
56
56
  return __awaiter(this, void 0, void 0, function () {
@@ -69,7 +69,7 @@ function getDotFileContent(folderList, serverUrl) {
69
69
  var _this = this;
70
70
  return __generator(this, function (_a) {
71
71
  switch (_a.label) {
72
- case 0: return [4 /*yield*/, (0, utils_1.listFilesInFolder)(folder)];
72
+ case 0: return [4 /*yield*/, (0, utils_1.listFilesAndSubFoldersInFolder)(folder)];
73
73
  case 1:
74
74
  filesNamesInPath = (_a.sent()).filter(function (f) { return f.endsWith('.sas'); });
75
75
  return [4 /*yield*/, (0, utils_1.asyncForEach)(filesNamesInPath, function (fileName) { return __awaiter(_this, void 0, void 0, function () {
@@ -84,7 +84,7 @@ function getDotFileContent(folderList, serverUrl) {
84
84
  fileBrief = (0, file_1.getBrief)(fileContent);
85
85
  if (fileBrief === undefined)
86
86
  return [2 /*return*/];
87
- fileName = fileName.toUpperCase();
87
+ fileName = fileName.split(path_1.default.sep).pop().toUpperCase();
88
88
  fileInputs = (0, getFileInputs_1.getFileInputs)(fileName, fileContent, paramNodes);
89
89
  fileOutputs = (0, getFileOutputs_1.getFileOutputs)(fileContent, paramNodes);
90
90
  if (fileInputs.length === 0 && fileOutputs.length === 0)
@@ -0,0 +1,11 @@
1
+ import { ReturnCode } from '../../types/command';
2
+ import { TargetCommand } from '../../types/command/targetCommand';
3
+ export declare class FSCommand extends TargetCommand {
4
+ constructor(args: string[]);
5
+ get localFolder(): string;
6
+ get remoteFolder(): string;
7
+ getOutputPath(): Promise<string>;
8
+ execute(): Promise<ReturnCode>;
9
+ compile(): Promise<ReturnCode>;
10
+ sync(): Promise<ReturnCode>;
11
+ }