@sasjs/cli 3.7.7 → 3.8.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 (26) hide show
  1. package/build/commands/compile/compile.js +5 -6
  2. package/build/commands/compile/internal/checkCompileStatus.js +3 -4
  3. package/build/commands/compile/internal/compileTestFile.d.ts +3 -2
  4. package/build/commands/compile/internal/compileTestFile.js +26 -13
  5. package/build/commands/compile/internal/getAllFolders.d.ts +6 -0
  6. package/build/commands/compile/internal/{getAllJobFolders.js → getAllFolders.js} +49 -23
  7. package/build/commands/compile/internal/identifySasFile.js +3 -4
  8. package/build/commands/compile/internal/spec/compileTestFile.spec.js +37 -0
  9. package/build/commands/compile/internal/spec/getAllFolders.spec.d.ts +1 -0
  10. package/build/commands/compile/internal/spec/getAllFolders.spec.js +184 -0
  11. package/build/commands/compile/spec/copyFilesToBuildFolder.spec.js +2 -4
  12. package/build/commands/deploy/deploy.js +27 -21
  13. package/build/commands/job/internal/execute/index.d.ts +1 -0
  14. package/build/commands/job/internal/execute/index.js +1 -0
  15. package/build/commands/job/internal/execute/sas9.d.ts +14 -0
  16. package/build/commands/job/internal/execute/sas9.js +139 -0
  17. package/build/commands/job/jobCommand.d.ts +4 -0
  18. package/build/commands/job/jobCommand.js +86 -32
  19. package/build/commands/job/spec/jobCommand.spec.js +406 -251
  20. package/build/commands/testing/test.js +3 -4
  21. package/build/utils/test.d.ts +2 -2
  22. package/build/utils/test.js +8 -5
  23. package/package.json +3 -3
  24. package/build/commands/compile/internal/getAllJobFolders.d.ts +0 -2
  25. package/build/commands/compile/internal/getAllServiceFolders.d.ts +0 -2
  26. package/build/commands/compile/internal/getAllServiceFolders.js +0 -91
@@ -77,8 +77,7 @@ var web_1 = require("../web/web");
77
77
  var file_1 = require("../../utils/file");
78
78
  var checkCompileStatus_1 = require("./internal/checkCompileStatus");
79
79
  var compileModule = __importStar(require("./compile"));
80
- var getAllJobFolders_1 = require("./internal/getAllJobFolders");
81
- var getAllServiceFolders_1 = require("./internal/getAllServiceFolders");
80
+ var getAllFolders_1 = require("./internal/getAllFolders");
82
81
  var compileServiceFile_1 = require("./internal/compileServiceFile");
83
82
  var compileJobFile_1 = require("./internal/compileJobFile");
84
83
  var compileTestFile_1 = require("./internal/compileTestFile");
@@ -171,10 +170,10 @@ function copyFilesToBuildFolder(target) {
171
170
  _c.label = 2;
172
171
  case 2:
173
172
  _c.trys.push([2, 7, , 8]);
174
- return [4 /*yield*/, (0, getAllServiceFolders_1.getAllServiceFolders)(target)];
173
+ return [4 /*yield*/, (0, getAllFolders_1.getAllFolders)(target, getAllFolders_1.SasFileType.Service)];
175
174
  case 3:
176
175
  serviceFolders = _c.sent();
177
- return [4 /*yield*/, (0, getAllJobFolders_1.getAllJobFolders)(target)
176
+ return [4 /*yield*/, (0, getAllFolders_1.getAllFolders)(target, getAllFolders_1.SasFileType.Job)
178
177
  // REFACTOR
179
178
  ];
180
179
  case 4:
@@ -231,10 +230,10 @@ function compileJobsServicesTests(target) {
231
230
  switch (_b.label) {
232
231
  case 0:
233
232
  _b.trys.push([0, 13, , 14]);
234
- return [4 /*yield*/, (0, getAllServiceFolders_1.getAllServiceFolders)(target)];
233
+ return [4 /*yield*/, (0, getAllFolders_1.getAllFolders)(target, getAllFolders_1.SasFileType.Service)];
235
234
  case 1:
236
235
  serviceFolders = _b.sent();
237
- return [4 /*yield*/, (0, getAllJobFolders_1.getAllJobFolders)(target)];
236
+ return [4 /*yield*/, (0, getAllFolders_1.getAllFolders)(target, getAllFolders_1.SasFileType.Job)];
238
237
  case 2:
239
238
  jobFolders = _b.sent();
240
239
  return [4 /*yield*/, (0, config_1.getMacroFolders)(target)];
@@ -39,8 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.checkCompileStatus = void 0;
40
40
  var utils_1 = require("@sasjs/utils");
41
41
  var compareFolders_1 = require("./compareFolders");
42
- var getAllJobFolders_1 = require("./getAllJobFolders");
43
- var getAllServiceFolders_1 = require("./getAllServiceFolders");
42
+ var getAllFolders_1 = require("./getAllFolders");
44
43
  var getDestinationPath_1 = require("./getDestinationPath");
45
44
  function checkCompileStatus(target, exceptions) {
46
45
  return __awaiter(this, void 0, void 0, function () {
@@ -87,7 +86,7 @@ var checkServiceFolders = function (target, exceptions) { return __awaiter(void
87
86
  var serviceFolders, areServiceFoldersMatching, reasons;
88
87
  return __generator(this, function (_a) {
89
88
  switch (_a.label) {
90
- case 0: return [4 /*yield*/, (0, getAllServiceFolders_1.getAllServiceFolders)(target)];
89
+ case 0: return [4 /*yield*/, (0, getAllFolders_1.getAllFolders)(target, getAllFolders_1.SasFileType.Service)];
91
90
  case 1:
92
91
  serviceFolders = _a.sent();
93
92
  areServiceFoldersMatching = true;
@@ -126,7 +125,7 @@ var checkJobFolders = function (target, exceptions) { return __awaiter(void 0, v
126
125
  var jobFolders, areJobFoldersMatching, reasons;
127
126
  return __generator(this, function (_a) {
128
127
  switch (_a.label) {
129
- case 0: return [4 /*yield*/, (0, getAllJobFolders_1.getAllJobFolders)(target)];
128
+ case 0: return [4 /*yield*/, (0, getAllFolders_1.getAllFolders)(target, getAllFolders_1.SasFileType.Job)];
130
129
  case 1:
131
130
  jobFolders = _a.sent();
132
131
  areJobFoldersMatching = true;
@@ -1,5 +1,6 @@
1
- import { Target } from '@sasjs/utils';
1
+ import { TestFlow } from '../../../types';
2
+ import { Target, Configuration } from '@sasjs/utils';
2
3
  export declare function compileTestFile(target: Target, filePath: string, testVar?: string, saveToRoot?: boolean, removeOriginalFile?: boolean): Promise<void>;
3
4
  export declare function moveTestFile(filePath: string): Promise<void>;
4
5
  export declare function copyTestMacroFiles(folderAbsolutePath: string): Promise<void>;
5
- export declare const compileTestFlow: (target: Target) => Promise<void>;
6
+ export declare const compileTestFlow: (target: Target, config?: Configuration | undefined) => Promise<TestFlow | undefined>;
@@ -200,22 +200,35 @@ function copyTestMacroFiles(folderAbsolutePath) {
200
200
  });
201
201
  }
202
202
  exports.copyTestMacroFiles = copyTestMacroFiles;
203
- var compileTestFlow = function (target) { return __awaiter(void 0, void 0, void 0, function () {
204
- var _a, buildDestinationFolder, buildDestinationTestFolder, testFiles, testFlow, testSetUp, testTearDown, testSetUpFileName_1, testTearDownFileName_1;
205
- var _b, _c;
206
- return __generator(this, function (_d) {
207
- switch (_d.label) {
203
+ var compileTestFlow = function (target, config) { return __awaiter(void 0, void 0, void 0, function () {
204
+ var _a, buildDestinationFolder, buildDestinationTestFolder, testFiles, _b, testFlow, testSetUp, testTearDown, testSetUpFileName_1, testTearDownFileName_1;
205
+ var _c, _d, _e, _f;
206
+ return __generator(this, function (_g) {
207
+ switch (_g.label) {
208
208
  case 0:
209
+ if (target.testConfig &&
210
+ Object.keys(target.testConfig).includes('testFolders')) {
211
+ process.logger.warn("'testFolders' is not supported 'testConfig' entry, please use 'serviceFolders' entry in 'serviceConfig' or 'jobFolders' entry in 'jobConfig'.");
212
+ }
209
213
  _a = process.sasjsConstants, buildDestinationFolder = _a.buildDestinationFolder, buildDestinationTestFolder = _a.buildDestinationTestFolder;
210
214
  return [4 /*yield*/, (0, utils_1.folderExists)(buildDestinationTestFolder)];
211
215
  case 1:
212
- if (!_d.sent()) return [3 /*break*/, 4];
216
+ if (!_g.sent()) return [3 /*break*/, 7];
213
217
  return [4 /*yield*/, (0, utils_1.listFilesAndSubFoldersInFolder)(buildDestinationTestFolder)];
214
218
  case 2:
215
- testFiles = (_d.sent()).map(function (file) { return path_1.default.join('tests', file); });
219
+ testFiles = (_g.sent()).map(function (file) { return path_1.default.join('tests', file); });
220
+ _b = config;
221
+ if (_b) return [3 /*break*/, 5];
222
+ return [4 /*yield*/, (0, config_1.getLocalOrGlobalConfig)()];
223
+ case 3: return [4 /*yield*/, (_g.sent()).configuration];
224
+ case 4:
225
+ _b = (_g.sent());
226
+ _g.label = 5;
227
+ case 5:
228
+ config = _b;
216
229
  testFlow = { tests: [] };
217
- testSetUp = (_b = target.testConfig) === null || _b === void 0 ? void 0 : _b.testSetUp;
218
- testTearDown = (_c = target.testConfig) === null || _c === void 0 ? void 0 : _c.testTearDown;
230
+ testSetUp = ((_c = target.testConfig) === null || _c === void 0 ? void 0 : _c.testSetUp) || ((_d = config.testConfig) === null || _d === void 0 ? void 0 : _d.testSetUp);
231
+ testTearDown = ((_e = target.testConfig) === null || _e === void 0 ? void 0 : _e.testTearDown) || ((_f = config.testConfig) === null || _f === void 0 ? void 0 : _f.testTearDown);
219
232
  if (testFiles.length) {
220
233
  if (testSetUp) {
221
234
  testSetUpFileName_1 = getFileName(testSetUp);
@@ -236,10 +249,10 @@ var compileTestFlow = function (target) { return __awaiter(void 0, void 0, void
236
249
  return file.split(path_1.default.sep).join('/');
237
250
  });
238
251
  return [4 /*yield*/, printTestCoverage(testFlow, buildDestinationFolder, target)];
239
- case 3:
240
- _d.sent();
241
- _d.label = 4;
242
- case 4: return [2 /*return*/];
252
+ case 6:
253
+ _g.sent();
254
+ return [2 /*return*/, Promise.resolve(testFlow)];
255
+ case 7: return [2 /*return*/];
243
256
  }
244
257
  });
245
258
  }); };
@@ -0,0 +1,6 @@
1
+ import { Target, Configuration } from '@sasjs/utils';
2
+ export declare enum SasFileType {
3
+ Service = "service",
4
+ Job = "job"
5
+ }
6
+ export declare const getAllFolders: (target: Target, type: SasFileType, rootConfig?: Configuration | undefined) => Promise<string[]>;
@@ -61,29 +61,55 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
61
61
  return to.concat(ar || Array.prototype.slice.call(from));
62
62
  };
63
63
  Object.defineProperty(exports, "__esModule", { value: true });
64
- exports.getAllJobFolders = void 0;
64
+ exports.getAllFolders = exports.SasFileType = void 0;
65
65
  var utils_1 = require("@sasjs/utils");
66
66
  var config_1 = require("../../../utils/config");
67
- function getAllJobFolders(target) {
68
- var _a, _b;
69
- return __awaiter(this, void 0, void 0, function () {
70
- var configuration, allJobs, buildSourceFolder;
71
- return __generator(this, function (_c) {
72
- switch (_c.label) {
73
- case 0: return [4 /*yield*/, (0, config_1.getLocalOrGlobalConfig)()];
74
- case 1:
75
- configuration = (_c.sent()).configuration;
76
- allJobs = [];
77
- if ((_a = configuration === null || configuration === void 0 ? void 0 : configuration.jobConfig) === null || _a === void 0 ? void 0 : _a.jobFolders)
78
- allJobs = __spreadArray([], __read(configuration.jobConfig.jobFolders), false);
79
- if ((_b = target === null || target === void 0 ? void 0 : target.jobConfig) === null || _b === void 0 ? void 0 : _b.jobFolders)
80
- allJobs = __spreadArray(__spreadArray([], __read(allJobs), false), __read(target.jobConfig.jobFolders), false);
81
- allJobs = allJobs.filter(function (s) { return !!s; });
82
- buildSourceFolder = process.sasjsConstants.buildSourceFolder;
83
- allJobs = allJobs.map(function (job) { return (0, utils_1.getAbsolutePath)(job, buildSourceFolder); });
84
- return [2 /*return*/, __spreadArray([], __read(new Set(allJobs)), false)];
85
- }
86
- });
67
+ var SasFileType;
68
+ (function (SasFileType) {
69
+ SasFileType["Service"] = "service";
70
+ SasFileType["Job"] = "job";
71
+ })(SasFileType = exports.SasFileType || (exports.SasFileType = {}));
72
+ var getAllFolders = function (target, type, rootConfig) { return __awaiter(void 0, void 0, void 0, function () {
73
+ var configuration, _a, allFolders, config, folders, addFolders, buildSourceFolder;
74
+ return __generator(this, function (_b) {
75
+ switch (_b.label) {
76
+ case 0:
77
+ _a = rootConfig;
78
+ if (_a) return [3 /*break*/, 3];
79
+ return [4 /*yield*/, (0, config_1.getLocalOrGlobalConfig)()];
80
+ case 1: return [4 /*yield*/, (_b.sent()).configuration];
81
+ case 2:
82
+ _a = (_b.sent());
83
+ _b.label = 3;
84
+ case 3:
85
+ configuration = _a;
86
+ addFolders = function (folders) {
87
+ allFolders = __spreadArray(__spreadArray([], __read((allFolders || [])), false), __read((folders || [])), false);
88
+ };
89
+ if (type === SasFileType.Service) {
90
+ config = configuration.serviceConfig;
91
+ folders = config === null || config === void 0 ? void 0 : config.serviceFolders;
92
+ addFolders(folders);
93
+ config = target.serviceConfig;
94
+ folders = config === null || config === void 0 ? void 0 : config.serviceFolders;
95
+ }
96
+ else {
97
+ config = configuration.jobConfig;
98
+ folders = config === null || config === void 0 ? void 0 : config.jobFolders;
99
+ addFolders(folders);
100
+ config = target.jobConfig;
101
+ folders = config === null || config === void 0 ? void 0 : config.jobFolders;
102
+ }
103
+ addFolders(folders);
104
+ if (!allFolders)
105
+ return [2 /*return*/, []];
106
+ allFolders = allFolders.filter(function (p) { return !!p; });
107
+ buildSourceFolder = process.sasjsConstants.buildSourceFolder;
108
+ allFolders = allFolders.map(function (sasFile) {
109
+ return (0, utils_1.getAbsolutePath)(sasFile, buildSourceFolder);
110
+ });
111
+ return [2 /*return*/, __spreadArray([], __read(new Set(allFolders)), false)];
112
+ }
87
113
  });
88
- }
89
- exports.getAllJobFolders = getAllJobFolders;
114
+ }); };
115
+ exports.getAllFolders = getAllFolders;
@@ -37,19 +37,18 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.identifySasFile = void 0;
40
- var getAllJobFolders_1 = require("./getAllJobFolders");
41
- var getAllServiceFolders_1 = require("./getAllServiceFolders");
40
+ var getAllFolders_1 = require("./getAllFolders");
42
41
  var identifySasFile = function (target, sourcePath) { return __awaiter(void 0, void 0, void 0, function () {
43
42
  var serviceFolders, isService, jobFolders, isJob;
44
43
  return __generator(this, function (_a) {
45
44
  switch (_a.label) {
46
- case 0: return [4 /*yield*/, (0, getAllServiceFolders_1.getAllServiceFolders)(target)];
45
+ case 0: return [4 /*yield*/, (0, getAllFolders_1.getAllFolders)(target, getAllFolders_1.SasFileType.Service)];
47
46
  case 1:
48
47
  serviceFolders = _a.sent();
49
48
  isService = serviceFolders.find(function (folder) { return sourcePath.includes(folder); });
50
49
  if (isService)
51
50
  return [2 /*return*/, 'service'];
52
- return [4 /*yield*/, (0, getAllJobFolders_1.getAllJobFolders)(target)];
51
+ return [4 /*yield*/, (0, getAllFolders_1.getAllFolders)(target, getAllFolders_1.SasFileType.Job)];
53
52
  case 2:
54
53
  jobFolders = _a.sent();
55
54
  isJob = jobFolders.find(function (folder) { return sourcePath.includes(folder); });
@@ -330,6 +330,43 @@ describe('compileTestFile', function () {
330
330
  }
331
331
  });
332
332
  }); });
333
+ it('should log a warning is testFolders was used in root or target configuration', function () { return __awaiter(void 0, void 0, void 0, function () {
334
+ var testTarget, testConfig, expectedWarn;
335
+ return __generator(this, function (_a) {
336
+ testTarget = {
337
+ name: 'viya',
338
+ serverUrl: '',
339
+ serverType: utils_1.ServerType.SasViya,
340
+ appLoc: '/Public/sasjs/jobs',
341
+ macroFolders: [],
342
+ programFolders: [],
343
+ binaryFolders: [],
344
+ testConfig: {
345
+ testSetUp: '',
346
+ testTearDown: '',
347
+ macroVars: {},
348
+ initProgram: '',
349
+ termProgram: '',
350
+ testFolders: ['tests']
351
+ }
352
+ };
353
+ testConfig = {
354
+ macroFolders: ['macros'],
355
+ testConfig: {
356
+ testFolders: ['tests']
357
+ },
358
+ defaultTarget: 'viya',
359
+ targets: [testTarget]
360
+ };
361
+ expectedWarn = "'testFolders' is not supported 'testConfig' entry, please use 'serviceFolders' entry in 'serviceConfig' or 'jobFolders' entry in 'jobConfig'.";
362
+ jest.spyOn(process.logger, 'warn');
363
+ (0, compileTestFile_1.compileTestFlow)(testTarget);
364
+ expect(process.logger.warn).toHaveBeenCalledWith(expectedWarn);
365
+ (0, compileTestFile_1.compileTestFlow)(testTarget, testConfig);
366
+ expect(process.logger.warn).toHaveBeenCalledWith(expectedWarn);
367
+ return [2 /*return*/];
368
+ });
369
+ }); });
333
370
  });
334
371
  });
335
372
  describe('isTestFile', function () {
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || function (mod) {
26
+ if (mod && mod.__esModule) return mod;
27
+ var result = {};
28
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
29
+ __setModuleDefault(result, mod);
30
+ return result;
31
+ };
32
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
33
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
34
+ return new (P || (P = Promise))(function (resolve, reject) {
35
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
36
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
37
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
38
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
39
+ });
40
+ };
41
+ var __generator = (this && this.__generator) || function (thisArg, body) {
42
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
43
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
44
+ function verb(n) { return function (v) { return step([n, v]); }; }
45
+ function step(op) {
46
+ if (f) throw new TypeError("Generator is already executing.");
47
+ while (_) try {
48
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
49
+ if (y = 0, t) op = [op[0] & 2, t.value];
50
+ switch (op[0]) {
51
+ case 0: case 1: t = op; break;
52
+ case 4: _.label++; return { value: op[1], done: false };
53
+ case 5: _.label++; y = op[1]; op = [0]; continue;
54
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
55
+ default:
56
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
57
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
58
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
59
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
60
+ if (t[2]) _.ops.pop();
61
+ _.trys.pop(); continue;
62
+ }
63
+ op = body.call(thisArg, _);
64
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
65
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
66
+ }
67
+ };
68
+ var __read = (this && this.__read) || function (o, n) {
69
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
70
+ if (!m) return o;
71
+ var i = m.call(o), r, ar = [], e;
72
+ try {
73
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
74
+ }
75
+ catch (error) { e = { error: error }; }
76
+ finally {
77
+ try {
78
+ if (r && !r.done && (m = i["return"])) m.call(i);
79
+ }
80
+ finally { if (e) throw e.error; }
81
+ }
82
+ return ar;
83
+ };
84
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
85
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
86
+ if (ar || !(i in from)) {
87
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
88
+ ar[i] = from[i];
89
+ }
90
+ }
91
+ return to.concat(ar || Array.prototype.slice.call(from));
92
+ };
93
+ var __importDefault = (this && this.__importDefault) || function (mod) {
94
+ return (mod && mod.__esModule) ? mod : { "default": mod };
95
+ };
96
+ Object.defineProperty(exports, "__esModule", { value: true });
97
+ var getAllFolders_1 = require("../getAllFolders");
98
+ var utils_1 = require("@sasjs/utils");
99
+ var test_1 = require("../../../../utils/test");
100
+ var configUtils = __importStar(require("../../../../utils/config"));
101
+ var utils_2 = require("../../../../utils");
102
+ var path_1 = __importDefault(require("path"));
103
+ describe('getAllFolders', function () {
104
+ var config;
105
+ var target;
106
+ beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
107
+ var _a, _b, temp;
108
+ var _c, _d;
109
+ return __generator(this, function (_e) {
110
+ switch (_e.label) {
111
+ case 0: return [4 /*yield*/, (0, utils_2.setConstants)()];
112
+ case 1:
113
+ _e.sent();
114
+ _b = (_a = JSON).parse;
115
+ return [4 /*yield*/, (0, utils_1.readFile)(path_1.default.join(__dirname, '..', '..', '..', '..', 'config.json'))];
116
+ case 2:
117
+ (config = _b.apply(_a, [_e.sent()]).config);
118
+ config.jobConfig = {
119
+ jobFolders: ['sasjs/targets/viya/jobs'],
120
+ initProgram: '',
121
+ termProgram: '',
122
+ macroVars: {}
123
+ };
124
+ temp = (0, test_1.generateTestTarget)('testTarget', '/Public/app', {
125
+ serviceFolders: [
126
+ path_1.default.join('sasjs', 'targetServices'),
127
+ (_c = config.serviceConfig) === null || _c === void 0 ? void 0 : _c.serviceFolders[0] // duplicate
128
+ ],
129
+ initProgram: '',
130
+ termProgram: '',
131
+ macroVars: {}
132
+ }, utils_1.ServerType.SasViya, {
133
+ jobFolders: [
134
+ path_1.default.join('sasjs', 'targetJobs'),
135
+ (_d = config.jobConfig) === null || _d === void 0 ? void 0 : _d.jobFolders[0] // duplicate
136
+ ],
137
+ initProgram: '',
138
+ termProgram: '',
139
+ macroVars: {}
140
+ });
141
+ target = new utils_1.Target(__assign({}, temp.toJson()));
142
+ return [2 /*return*/];
143
+ }
144
+ });
145
+ }); });
146
+ beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
147
+ return [2 /*return*/];
148
+ }); }); });
149
+ it('should get all service and job folders', function () { return __awaiter(void 0, void 0, void 0, function () {
150
+ var buildSourceFolder;
151
+ var _a, _b, _c, _d;
152
+ return __generator(this, function (_e) {
153
+ switch (_e.label) {
154
+ case 0:
155
+ jest
156
+ .spyOn(configUtils, 'getLocalOrGlobalConfig')
157
+ .mockImplementation(function () { return __awaiter(void 0, void 0, void 0, function () {
158
+ return __generator(this, function (_a) {
159
+ return [2 /*return*/, Promise.resolve({
160
+ configuration: config,
161
+ isLocal: true
162
+ })];
163
+ });
164
+ }); });
165
+ buildSourceFolder = process.sasjsConstants.buildSourceFolder;
166
+ return [4 /*yield*/, expect((0, getAllFolders_1.getAllFolders)(target, getAllFolders_1.SasFileType.Service, config)).resolves.toEqual(__spreadArray([], __read(new Set(Array.prototype.concat((_a = config.serviceConfig) === null || _a === void 0 ? void 0 : _a.serviceFolders.map(function (folder) {
167
+ return path_1.default.join(buildSourceFolder, folder);
168
+ }), (_b = target.serviceConfig) === null || _b === void 0 ? void 0 : _b.serviceFolders.map(function (folder) {
169
+ return path_1.default.join(buildSourceFolder, folder);
170
+ })))), false))];
171
+ case 1:
172
+ _e.sent();
173
+ return [4 /*yield*/, expect((0, getAllFolders_1.getAllFolders)(target, getAllFolders_1.SasFileType.Job, config)).resolves.toEqual(__spreadArray([], __read(new Set(Array.prototype.concat((_c = config.jobConfig) === null || _c === void 0 ? void 0 : _c.jobFolders.map(function (folder) {
174
+ return path_1.default.join(buildSourceFolder, folder);
175
+ }), (_d = target.jobConfig) === null || _d === void 0 ? void 0 : _d.jobFolders.map(function (folder) {
176
+ return path_1.default.join(buildSourceFolder, folder);
177
+ })))), false))];
178
+ case 2:
179
+ _e.sent();
180
+ return [2 /*return*/];
181
+ }
182
+ });
183
+ }); });
184
+ });
@@ -58,7 +58,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
58
58
  var config_1 = require("../../../utils/config");
59
59
  var test_1 = require("../../../utils/test");
60
60
  var utils_1 = require("@sasjs/utils");
61
- var getAllServiceFoldersModule = __importStar(require("../internal/getAllServiceFolders"));
61
+ var getAllFoldersModule = __importStar(require("../internal/getAllFolders"));
62
62
  var compileModule = __importStar(require("../compile"));
63
63
  describe('copyFilesToBuildFolder', function () {
64
64
  var appName;
@@ -106,9 +106,7 @@ describe('copyFilesToBuildFolder', function () {
106
106
  return __generator(this, function (_a) {
107
107
  switch (_a.label) {
108
108
  case 0:
109
- jest
110
- .spyOn(getAllServiceFoldersModule, 'getAllServiceFolders')
111
- .mockImplementation(function () {
109
+ jest.spyOn(getAllFoldersModule, 'getAllFolders').mockImplementation(function () {
112
110
  throw new Error('Test Error');
113
111
  });
114
112
  return [4 /*yield*/, (0, config_1.findTargetInConfiguration)('viya')];
@@ -259,11 +259,11 @@ function deployToSasViya(deployScriptName, target, isLocal, linesToExecute, logF
259
259
  * for printing web app url on console.
260
260
  */
261
261
  function deployToSas9(deployScriptName, target, linesToExecute, logFolder, streamConfig) {
262
- var _a, _b, _c, _d;
262
+ var _a, _b, _c, _d, _e;
263
263
  return __awaiter(this, void 0, void 0, function () {
264
- var username, password, sas9CredentialsError, sasjs, executionResult, appLoc, webAppStreamUrl;
265
- return __generator(this, function (_e) {
266
- switch (_e.label) {
264
+ var username, password, sas9CredentialsError, sasjs, completedWithError, executionResult, logContent, logFilePath, appLoc, webAppStreamUrl;
265
+ return __generator(this, function (_f) {
266
+ switch (_f.label) {
267
267
  case 0:
268
268
  if (target.authConfigSas9) {
269
269
  username = target.authConfigSas9.userName;
@@ -284,6 +284,7 @@ function deployToSas9(deployScriptName, target, linesToExecute, logFolder, strea
284
284
  appLoc: target.appLoc,
285
285
  serverType: target.serverType
286
286
  });
287
+ completedWithError = false;
287
288
  return [4 /*yield*/, sasjs
288
289
  .executeScriptSAS9(linesToExecute, username, password)
289
290
  .catch(function (err) {
@@ -292,30 +293,35 @@ function deployToSas9(deployScriptName, target, linesToExecute, logFolder, strea
292
293
  if (err && err.errorCode === 404) {
293
294
  (0, utils_1.displaySasjsRunnerError)(username);
294
295
  }
296
+ completedWithError = true;
297
+ return err;
295
298
  })];
296
299
  case 1:
297
- executionResult = _e.sent();
298
- if (!executionResult) return [3 /*break*/, 5];
299
- if (!logFolder) return [3 /*break*/, 3];
300
- return [4 /*yield*/, (0, utils_2.createFile)(path_1.default.join(logFolder, "".concat(deployScriptName.replace('.sas', ''), ".log")), executionResult !== null && executionResult !== void 0 ? executionResult : '')];
300
+ executionResult = _f.sent();
301
+ if (!executionResult) {
302
+ return [2 /*return*/, (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error('Error getting execution log')];
303
+ }
304
+ if (!logFolder) {
305
+ return [2 /*return*/, (_b = process.logger) === null || _b === void 0 ? void 0 : _b.error('Unable to create log file.')];
306
+ }
307
+ logContent = completedWithError
308
+ ? executionResult.result
309
+ : executionResult;
310
+ logFilePath = path_1.default.join(logFolder, "".concat(deployScriptName.replace('.sas', ''), ".log"));
311
+ return [4 /*yield*/, (0, utils_2.createFile)(logFilePath, logContent !== null && logContent !== void 0 ? logContent : '')];
301
312
  case 2:
302
- _e.sent();
303
- (_a = process.logger) === null || _a === void 0 ? void 0 : _a.success("Deployment completed! Log is available at ".concat(path_1.default.join(logFolder, "".concat(deployScriptName.replace('.sas', ''), ".log"))));
304
- return [3 /*break*/, 4];
305
- case 3:
306
- (_b = process.logger) === null || _b === void 0 ? void 0 : _b.error('Unable to create log file.');
307
- _e.label = 4;
308
- case 4:
313
+ _f.sent();
314
+ if (completedWithError) {
315
+ (_c = process.logger) === null || _c === void 0 ? void 0 : _c.error("Deployment failed with errors! Log is available at ".concat(logFilePath));
316
+ throw new Error("Deployment failed.");
317
+ }
318
+ (_d = process.logger) === null || _d === void 0 ? void 0 : _d.success("Deployment completed! Log is available at ".concat(logFilePath));
309
319
  if (streamConfig === null || streamConfig === void 0 ? void 0 : streamConfig.streamWeb) {
310
320
  appLoc = target.appLoc.replace(/\ /g, '%20');
311
321
  webAppStreamUrl = "".concat(target.serverUrl, "/SASStoredProcess/?_PROGRAM=").concat(appLoc, "/services/").concat(streamConfig.streamServiceName);
312
- (_c = process.logger) === null || _c === void 0 ? void 0 : _c.info("Web app is available at ".concat(webAppStreamUrl));
322
+ (_e = process.logger) === null || _e === void 0 ? void 0 : _e.info("Web app is available at ".concat(webAppStreamUrl));
313
323
  }
314
- return [3 /*break*/, 6];
315
- case 5:
316
- (_d = process.logger) === null || _d === void 0 ? void 0 : _d.error('Error getting execution log');
317
- _e.label = 6;
318
- case 6: return [2 /*return*/];
324
+ return [2 /*return*/];
319
325
  }
320
326
  });
321
327
  });
@@ -1,2 +1,3 @@
1
1
  export * from './viya';
2
2
  export * from './sasjs';
3
+ export * from './sas9';
@@ -12,3 +12,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./viya"), exports);
14
14
  __exportStar(require("./sasjs"), exports);
15
+ __exportStar(require("./sas9"), exports);
@@ -0,0 +1,14 @@
1
+ import SASjs from '@sasjs/adapter/node';
2
+ /**
3
+ * Triggers an existing Stored Process for execution as a "job". See online documentation here: https://cli.sasjs.io/job/
4
+ * @param {object} sasjs - Configuration object of the SASJS adapter.
5
+ * @param {object} config - An object containing the username and password for authentication.
6
+ * @param {string} jobPath - Location of the Stored Process in SAS metadata (_program).
7
+ * @param {string | undefined} logFile - If provided, the CLI will write the log here.
8
+ * @param {string | undefined} output - If provided, and valid JSON is returned (ie using the SASjs macros), it will be written to this file location.
9
+ * @param {string | undefined} source - An optional path to a JSON file containing input macro variables.
10
+ */
11
+ export declare function executeJobSas9(sasjs: SASjs, config: {
12
+ username: string;
13
+ password: string;
14
+ }, jobPath: string, logFile?: string, output?: string, source?: string): Promise<any>;