@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.
- package/build/commands/compile/compile.js +5 -6
- package/build/commands/compile/internal/checkCompileStatus.js +3 -4
- package/build/commands/compile/internal/compileTestFile.d.ts +3 -2
- package/build/commands/compile/internal/compileTestFile.js +26 -13
- package/build/commands/compile/internal/getAllFolders.d.ts +6 -0
- package/build/commands/compile/internal/{getAllJobFolders.js → getAllFolders.js} +49 -23
- package/build/commands/compile/internal/identifySasFile.js +3 -4
- package/build/commands/compile/internal/spec/compileTestFile.spec.js +37 -0
- package/build/commands/compile/internal/spec/getAllFolders.spec.d.ts +1 -0
- package/build/commands/compile/internal/spec/getAllFolders.spec.js +184 -0
- package/build/commands/compile/spec/copyFilesToBuildFolder.spec.js +2 -4
- package/build/commands/deploy/deploy.js +27 -21
- package/build/commands/job/internal/execute/index.d.ts +1 -0
- package/build/commands/job/internal/execute/index.js +1 -0
- package/build/commands/job/internal/execute/sas9.d.ts +14 -0
- package/build/commands/job/internal/execute/sas9.js +139 -0
- package/build/commands/job/jobCommand.d.ts +4 -0
- package/build/commands/job/jobCommand.js +86 -32
- package/build/commands/job/spec/jobCommand.spec.js +406 -251
- package/build/commands/testing/test.js +3 -4
- package/build/utils/test.d.ts +2 -2
- package/build/utils/test.js +8 -5
- package/package.json +3 -3
- package/build/commands/compile/internal/getAllJobFolders.d.ts +0 -2
- package/build/commands/compile/internal/getAllServiceFolders.d.ts +0 -2
- 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
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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 {
|
|
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<
|
|
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
|
|
206
|
-
return __generator(this, function (
|
|
207
|
-
switch (
|
|
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 (!
|
|
216
|
+
if (!_g.sent()) return [3 /*break*/, 7];
|
|
213
217
|
return [4 /*yield*/, (0, utils_1.listFilesAndSubFoldersInFolder)(buildDestinationTestFolder)];
|
|
214
218
|
case 2:
|
|
215
|
-
testFiles = (
|
|
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 = (
|
|
218
|
-
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
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
case
|
|
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
|
}); };
|
|
@@ -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.
|
|
64
|
+
exports.getAllFolders = exports.SasFileType = void 0;
|
|
65
65
|
var utils_1 = require("@sasjs/utils");
|
|
66
66
|
var config_1 = require("../../../utils/config");
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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.
|
|
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
|
|
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,
|
|
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,
|
|
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 @@
|
|
|
1
|
+
export {};
|
|
@@ -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
|
|
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 (
|
|
266
|
-
switch (
|
|
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 =
|
|
298
|
-
if (!executionResult)
|
|
299
|
-
|
|
300
|
-
|
|
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
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
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
|
-
(
|
|
322
|
+
(_e = process.logger) === null || _e === void 0 ? void 0 : _e.info("Web app is available at ".concat(webAppStreamUrl));
|
|
313
323
|
}
|
|
314
|
-
return [
|
|
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
|
});
|
|
@@ -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>;
|