@sasjs/cli 3.27.0 → 3.27.2
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/deploy/internal/executeDeployScriptSasViya.js +26 -13
- package/build/commands/testing/internal/saveOutput.d.ts +4 -7
- package/build/commands/testing/internal/saveOutput.js +20 -28
- package/build/commands/testing/spec/testing.spec.js +56 -20
- package/build/commands/testing/test.js +43 -21
- package/build/config.json +13 -60
- package/build/types/testing.d.ts +14 -0
- package/build/utils/spec/setConstants.spec.js +11 -10
- package/package.json +2 -2
|
@@ -54,11 +54,11 @@ var utils_1 = require("@sasjs/utils");
|
|
|
54
54
|
* for printing web app url on console.
|
|
55
55
|
*/
|
|
56
56
|
function executeDeployScriptSasViya(deployScriptName, target, linesToExecute, logFilePath, streamConfig) {
|
|
57
|
-
var _a, _b, _c, _d;
|
|
57
|
+
var _a, _b, _c, _d, _e;
|
|
58
58
|
return __awaiter(this, void 0, void 0, function () {
|
|
59
|
-
var contextName,
|
|
60
|
-
return __generator(this, function (
|
|
61
|
-
switch (
|
|
59
|
+
var contextName, _f, sasjs, authConfig, executionResult, log, appLoc, webAppStreamUrl;
|
|
60
|
+
return __generator(this, function (_g) {
|
|
61
|
+
switch (_g.label) {
|
|
62
62
|
case 0:
|
|
63
63
|
(_a = process.logger) === null || _a === void 0 ? void 0 : _a.info("Sending ".concat(deployScriptName, " to SAS server for execution."));
|
|
64
64
|
contextName = target.contextName;
|
|
@@ -67,7 +67,7 @@ function executeDeployScriptSasViya(deployScriptName, target, linesToExecute, lo
|
|
|
67
67
|
}
|
|
68
68
|
return [4 /*yield*/, (0, config_1.getSASjsAndAuthConfig)(target)];
|
|
69
69
|
case 1:
|
|
70
|
-
|
|
70
|
+
_f = _g.sent(), sasjs = _f.sasjs, authConfig = _f.authConfig;
|
|
71
71
|
return [4 /*yield*/, sasjs
|
|
72
72
|
.executeScript({
|
|
73
73
|
fileName: deployScriptName,
|
|
@@ -77,15 +77,24 @@ function executeDeployScriptSasViya(deployScriptName, target, linesToExecute, lo
|
|
|
77
77
|
})
|
|
78
78
|
.catch(function (err) {
|
|
79
79
|
process.logger.error('executeScriptSASViya Error', err);
|
|
80
|
+
if (err.log)
|
|
81
|
+
return { log: err.log, completedWithError: true };
|
|
82
|
+
throw err;
|
|
80
83
|
})];
|
|
81
84
|
case 2:
|
|
82
|
-
executionResult =
|
|
85
|
+
executionResult = _g.sent();
|
|
83
86
|
try {
|
|
84
|
-
|
|
85
|
-
|
|
87
|
+
if (typeof executionResult.log === 'string') {
|
|
88
|
+
log = executionResult.log;
|
|
89
|
+
}
|
|
90
|
+
else if (executionResult.log.items) {
|
|
91
|
+
log = executionResult.log.items
|
|
86
92
|
.map(function (i) { return i.line; })
|
|
87
|
-
.join(os_1.default.EOL)
|
|
88
|
-
|
|
93
|
+
.join(os_1.default.EOL);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
log = JSON.stringify(executionResult.log).replace(/\\n/g, os_1.default.EOL);
|
|
97
|
+
}
|
|
89
98
|
}
|
|
90
99
|
catch (e) {
|
|
91
100
|
(_b = process.logger) === null || _b === void 0 ? void 0 : _b.error("An error occurred when parsing the execution response: ".concat(e.message));
|
|
@@ -93,12 +102,16 @@ function executeDeployScriptSasViya(deployScriptName, target, linesToExecute, lo
|
|
|
93
102
|
}
|
|
94
103
|
return [4 /*yield*/, (0, utils_1.createFile)(logFilePath, log)];
|
|
95
104
|
case 3:
|
|
96
|
-
|
|
97
|
-
(
|
|
105
|
+
_g.sent();
|
|
106
|
+
if (executionResult.completedWithError) {
|
|
107
|
+
(_c = process.logger) === null || _c === void 0 ? void 0 : _c.error("Log is available at ".concat(logFilePath));
|
|
108
|
+
throw new Error('Deployment process completed with error');
|
|
109
|
+
}
|
|
110
|
+
(_d = process.logger) === null || _d === void 0 ? void 0 : _d.success("Deployment completed! Log is available at ".concat(logFilePath));
|
|
98
111
|
if (streamConfig === null || streamConfig === void 0 ? void 0 : streamConfig.streamWeb) {
|
|
99
112
|
appLoc = encodeURI(target.appLoc);
|
|
100
113
|
webAppStreamUrl = "".concat(target.serverUrl, "/SASJobExecution?_FILE=").concat(appLoc, "/services/").concat(streamConfig.streamServiceName, ".html&_debug=2");
|
|
101
|
-
(
|
|
114
|
+
(_e = process.logger) === null || _e === void 0 ? void 0 : _e.info("Web app is available at ".concat(webAppStreamUrl));
|
|
102
115
|
}
|
|
103
116
|
return [2 /*return*/];
|
|
104
117
|
}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { TestResults, TestResultCsv } from '../../../types';
|
|
2
2
|
export declare const saveLog: (outDirectory: string, test: string, log: string, lineBreak?: boolean) => Promise<void>;
|
|
3
|
-
export declare const saveResultJson: (
|
|
4
|
-
export declare const saveResultCsv: (
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}>;
|
|
8
|
-
export declare const saveResultXml: (outDirectory: string, result: TestResults) => Promise<string>;
|
|
9
|
-
export declare const saveCoverageLcov: (outDirectory: string, tests: string[]) => Promise<string>;
|
|
3
|
+
export declare const saveResultJson: (jsonPath: string, result: TestResults) => Promise<void>;
|
|
4
|
+
export declare const saveResultCsv: (csvPath: string, result: TestResults, options?: {}) => Promise<TestResultCsv[]>;
|
|
5
|
+
export declare const saveResultXml: (xmlPath: string, result: TestResults) => Promise<void>;
|
|
6
|
+
export declare const saveCoverageLcov: (coverageReportPath: string, tests: string[]) => Promise<void>;
|
|
@@ -91,31 +91,27 @@ var saveLog = function (outDirectory, test, log, lineBreak) {
|
|
|
91
91
|
});
|
|
92
92
|
};
|
|
93
93
|
exports.saveLog = saveLog;
|
|
94
|
-
var saveResultJson = function (
|
|
95
|
-
var finaleResult,
|
|
94
|
+
var saveResultJson = function (jsonPath, result) { return __awaiter(void 0, void 0, void 0, function () {
|
|
95
|
+
var finaleResult, err_1;
|
|
96
96
|
return __generator(this, function (_a) {
|
|
97
97
|
switch (_a.label) {
|
|
98
98
|
case 0:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
catch (err) {
|
|
103
|
-
(0, displayResult_1.displayError)(err, 'Error while converting test results into a string.');
|
|
104
|
-
return [2 /*return*/, false];
|
|
105
|
-
}
|
|
106
|
-
filePath = path_1.default.join(outDirectory, "".concat(resultFileName, ".json"));
|
|
107
|
-
if (!finaleResult) return [3 /*break*/, 2];
|
|
108
|
-
return [4 /*yield*/, (0, utils_1.createFile)(filePath, finaleResult)];
|
|
99
|
+
_a.trys.push([0, 2, , 3]);
|
|
100
|
+
finaleResult = JSON.stringify(result, null, 2);
|
|
101
|
+
return [4 /*yield*/, (0, utils_1.createFile)(jsonPath, finaleResult)];
|
|
109
102
|
case 1:
|
|
110
103
|
_a.sent();
|
|
111
104
|
return [3 /*break*/, 3];
|
|
112
|
-
case 2:
|
|
113
|
-
|
|
105
|
+
case 2:
|
|
106
|
+
err_1 = _a.sent();
|
|
107
|
+
(0, displayResult_1.displayError)(err_1, 'Error while converting test results into a string.');
|
|
108
|
+
throw new Error('Error while converting test results into a string.');
|
|
109
|
+
case 3: return [2 /*return*/];
|
|
114
110
|
}
|
|
115
111
|
});
|
|
116
112
|
}); };
|
|
117
113
|
exports.saveResultJson = saveResultJson;
|
|
118
|
-
var saveResultCsv = function (
|
|
114
|
+
var saveResultCsv = function (csvPath, result, options) {
|
|
119
115
|
if (options === void 0) { options = {
|
|
120
116
|
header: true,
|
|
121
117
|
columns: {
|
|
@@ -155,7 +151,6 @@ var saveResultCsv = function (outDirectory, result, options) {
|
|
|
155
151
|
});
|
|
156
152
|
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
157
153
|
return (0, csv_stringify_1.default)(csvData, options || {}, function (err, output) { return __awaiter(void 0, void 0, void 0, function () {
|
|
158
|
-
var csvPath;
|
|
159
154
|
return __generator(this, function (_a) {
|
|
160
155
|
switch (_a.label) {
|
|
161
156
|
case 0:
|
|
@@ -163,13 +158,12 @@ var saveResultCsv = function (outDirectory, result, options) {
|
|
|
163
158
|
(0, displayResult_1.displayError)(err, 'Error while saving CSV file');
|
|
164
159
|
reject(err);
|
|
165
160
|
}
|
|
166
|
-
csvPath = path_1.default.join(outDirectory, "".concat(resultFileName, ".csv"));
|
|
167
161
|
return [4 /*yield*/, (0, utils_1.createFile)(csvPath, output).catch(function (err) {
|
|
168
162
|
return (0, displayResult_1.displayError)(err, 'Error while creating CSV file.');
|
|
169
163
|
})];
|
|
170
164
|
case 1:
|
|
171
165
|
_a.sent();
|
|
172
|
-
return [2 /*return*/, resolve(
|
|
166
|
+
return [2 /*return*/, resolve(csvData)];
|
|
173
167
|
}
|
|
174
168
|
});
|
|
175
169
|
}); });
|
|
@@ -178,12 +172,11 @@ var saveResultCsv = function (outDirectory, result, options) {
|
|
|
178
172
|
});
|
|
179
173
|
};
|
|
180
174
|
exports.saveResultCsv = saveResultCsv;
|
|
181
|
-
var saveResultXml = function (
|
|
182
|
-
var
|
|
175
|
+
var saveResultXml = function (xmlPath, result) { return __awaiter(void 0, void 0, void 0, function () {
|
|
176
|
+
var getFailures, resultXml, xmlString;
|
|
183
177
|
return __generator(this, function (_a) {
|
|
184
178
|
switch (_a.label) {
|
|
185
179
|
case 0:
|
|
186
|
-
filePath = path_1.default.join(outDirectory, "".concat(resultFileName, ".xml"));
|
|
187
180
|
getFailures = function (testCase) {
|
|
188
181
|
if (Array.isArray(testCase.result)) {
|
|
189
182
|
return testCase.result
|
|
@@ -258,16 +251,16 @@ var saveResultXml = function (outDirectory, result) { return __awaiter(void 0, v
|
|
|
258
251
|
], false)
|
|
259
252
|
};
|
|
260
253
|
xmlString = (0, xml_1.default)(resultXml, { declaration: true, indent: ' ' });
|
|
261
|
-
return [4 /*yield*/, (0, utils_1.createFile)(
|
|
254
|
+
return [4 /*yield*/, (0, utils_1.createFile)(xmlPath, xmlString)];
|
|
262
255
|
case 1:
|
|
263
256
|
_a.sent();
|
|
264
|
-
return [2 /*return
|
|
257
|
+
return [2 /*return*/];
|
|
265
258
|
}
|
|
266
259
|
});
|
|
267
260
|
}); };
|
|
268
261
|
exports.saveResultXml = saveResultXml;
|
|
269
|
-
var saveCoverageLcov = function (
|
|
270
|
-
var testsPrefixRegExp, coverageReport, coveringFile
|
|
262
|
+
var saveCoverageLcov = function (coverageReportPath, tests) { return __awaiter(void 0, void 0, void 0, function () {
|
|
263
|
+
var testsPrefixRegExp, coverageReport, coveringFile;
|
|
271
264
|
return __generator(this, function (_a) {
|
|
272
265
|
switch (_a.label) {
|
|
273
266
|
case 0:
|
|
@@ -297,11 +290,10 @@ var saveCoverageLcov = function (outDirectory, tests) { return __awaiter(void 0,
|
|
|
297
290
|
}); })];
|
|
298
291
|
case 1:
|
|
299
292
|
_a.sent();
|
|
300
|
-
|
|
301
|
-
return [4 /*yield*/, (0, utils_1.createFile)(filePath, coverageReport.join('\n'))];
|
|
293
|
+
return [4 /*yield*/, (0, utils_1.createFile)(coverageReportPath, coverageReport.join('\n'))];
|
|
302
294
|
case 2:
|
|
303
295
|
_a.sent();
|
|
304
|
-
return [2 /*return
|
|
296
|
+
return [2 /*return*/];
|
|
305
297
|
}
|
|
306
298
|
});
|
|
307
299
|
}); };
|
|
@@ -123,11 +123,27 @@ describe('sasjs test', function () {
|
|
|
123
123
|
});
|
|
124
124
|
}); });
|
|
125
125
|
it('should execute tests and create result CSV, XML and JSON files using default source and output locations', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
126
|
-
var
|
|
126
|
+
var resultsFolderPath, resultsJsonPath, resultsCsvPath, resultsXmlPath, coverageReportPath, expectedResultsJson, expectedResultsCsv, resultsJson, parsedResults, resultsCsv, resultsXml, expectedResultsXml, coverageLcovPath, coverageLcov;
|
|
127
127
|
return __generator(this, function (_a) {
|
|
128
128
|
switch (_a.label) {
|
|
129
129
|
case 0:
|
|
130
|
+
resultsFolderPath = path_1.default.join(__dirname, target.name, 'sasjsresults');
|
|
131
|
+
resultsJsonPath = path_1.default.join(resultsFolderPath, 'testResults.json');
|
|
132
|
+
resultsCsvPath = path_1.default.join(resultsFolderPath, 'testResults.csv');
|
|
133
|
+
resultsXmlPath = path_1.default.join(resultsFolderPath, 'testResults.xml');
|
|
134
|
+
coverageReportPath = path_1.default.join(resultsFolderPath, 'coverage.lcov');
|
|
130
135
|
expectedResultsJson = {
|
|
136
|
+
csv_result_path: resultsCsvPath,
|
|
137
|
+
xml_result_path: resultsXmlPath,
|
|
138
|
+
coverage_report_path: coverageReportPath,
|
|
139
|
+
tests_that_pass: '2/7 (29%)',
|
|
140
|
+
tests_with_results: '7/8 (88%)',
|
|
141
|
+
target_name: target.name,
|
|
142
|
+
target_server_url: target.serverUrl,
|
|
143
|
+
target_server_type: target.serverType,
|
|
144
|
+
local_date_time: expect.anything(),
|
|
145
|
+
local_user_id: expect.anything(),
|
|
146
|
+
local_machine_name: expect.anything(),
|
|
131
147
|
sasjs_test_meta: [
|
|
132
148
|
{
|
|
133
149
|
test_target: 'testsetup',
|
|
@@ -222,8 +238,6 @@ describe('sasjs test', function () {
|
|
|
222
238
|
return [4 /*yield*/, (0, test_1.runTest)(target, undefined, undefined, undefined, true)];
|
|
223
239
|
case 1:
|
|
224
240
|
_a.sent();
|
|
225
|
-
resultsFolderPath = path_1.default.join(__dirname, target.name, 'sasjsresults');
|
|
226
|
-
resultsJsonPath = path_1.default.join(resultsFolderPath, 'testResults.json');
|
|
227
241
|
return [4 /*yield*/, expect((0, utils_1.folderExists)(resultsFolderPath)).resolves.toEqual(true)];
|
|
228
242
|
case 2:
|
|
229
243
|
_a.sent();
|
|
@@ -233,7 +247,6 @@ describe('sasjs test', function () {
|
|
|
233
247
|
return [4 /*yield*/, (0, utils_1.readFile)(resultsJsonPath)];
|
|
234
248
|
case 4:
|
|
235
249
|
resultsJson = _a.sent();
|
|
236
|
-
resultsCsvPath = path_1.default.join(resultsFolderPath, 'testResults.csv');
|
|
237
250
|
return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsCsvPath)).resolves.toEqual(true)];
|
|
238
251
|
case 5:
|
|
239
252
|
_a.sent();
|
|
@@ -245,7 +258,6 @@ describe('sasjs test', function () {
|
|
|
245
258
|
resultsCsv = _a.sent();
|
|
246
259
|
resultsCsv = resultsCsv.replace(/\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b/g, 'sasjs_test_id');
|
|
247
260
|
expect(resultsCsv).toEqual(expectedResultsCsv);
|
|
248
|
-
resultsXmlPath = path_1.default.join(resultsFolderPath, 'testResults.xml');
|
|
249
261
|
return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsXmlPath)).resolves.toEqual(true)];
|
|
250
262
|
case 7:
|
|
251
263
|
_a.sent();
|
|
@@ -269,11 +281,32 @@ describe('sasjs test', function () {
|
|
|
269
281
|
});
|
|
270
282
|
}); });
|
|
271
283
|
it('should execute filtered tests and create result CSV, XML and JSON files using custom source and output locations', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
272
|
-
var
|
|
284
|
+
var outputFolder, movedTestFlow, resultsFolderPath, resultsJsonPath, resultsCsvPath, resultsXmlPath, coverageReportPath, expectedResultsJson, expectedResultsCsv, resultsJson, parsedResults, resultsCsv, logFolder, logPath, log, resultsXml, expectedResultsXml;
|
|
273
285
|
return __generator(this, function (_a) {
|
|
274
286
|
switch (_a.label) {
|
|
275
287
|
case 0:
|
|
288
|
+
outputFolder = 'customOutPut';
|
|
289
|
+
movedTestFlow = 'movedTestFlow.json';
|
|
290
|
+
return [4 /*yield*/, (0, utils_1.copy)(path_1.default.join(__dirname, target.name, 'sasjsbuild', 'testFlow.json'), path_1.default.join(__dirname, target.name, movedTestFlow))];
|
|
291
|
+
case 1:
|
|
292
|
+
_a.sent();
|
|
293
|
+
resultsFolderPath = path_1.default.join(__dirname, target.name, outputFolder);
|
|
294
|
+
resultsJsonPath = path_1.default.join(resultsFolderPath, 'testResults.json');
|
|
295
|
+
resultsCsvPath = path_1.default.join(resultsFolderPath, 'testResults.csv');
|
|
296
|
+
resultsXmlPath = path_1.default.join(resultsFolderPath, 'testResults.xml');
|
|
297
|
+
coverageReportPath = path_1.default.join(resultsFolderPath, 'coverage.lcov');
|
|
276
298
|
expectedResultsJson = {
|
|
299
|
+
csv_result_path: resultsCsvPath,
|
|
300
|
+
xml_result_path: resultsXmlPath,
|
|
301
|
+
coverage_report_path: coverageReportPath,
|
|
302
|
+
tests_that_pass: '0/4 (0%)',
|
|
303
|
+
tests_with_results: '4/5 (80%)',
|
|
304
|
+
target_name: target.name,
|
|
305
|
+
target_server_url: target.serverUrl,
|
|
306
|
+
target_server_type: target.serverType,
|
|
307
|
+
local_date_time: expect.anything(),
|
|
308
|
+
local_user_id: expect.anything(),
|
|
309
|
+
local_machine_name: expect.anything(),
|
|
277
310
|
sasjs_test_meta: [
|
|
278
311
|
{
|
|
279
312
|
test_target: 'testsetup',
|
|
@@ -327,16 +360,9 @@ describe('sasjs test', function () {
|
|
|
327
360
|
]
|
|
328
361
|
};
|
|
329
362
|
expectedResultsCsv = "test_target,test_loc,sasjs_test_id,test_suite_result,test_description,test_url\ntestsetup,tests/testsetup.sas,sasjs_test_id,not provided,,".concat(testUrlLink('testsetup'), "\nstandalone,tests/jobs/jobs/standalone.test.sas,sasjs_test_id,not provided,,").concat(testUrlLink('jobs/jobs/standalone.test'), "\ndostuff,tests/services/admin/dostuff.test.0.sas,sasjs_test_id,FAIL,dostuff 0 test description,").concat(testUrlLink('services/admin/dostuff.test.0'), "\ntestteardown,tests/testteardown.sas,sasjs_test_id,not provided,,").concat(testUrlLink('testteardown'), "\n");
|
|
330
|
-
outputFolder = 'customOutPut';
|
|
331
|
-
movedTestFlow = 'movedTestFlow.json';
|
|
332
|
-
return [4 /*yield*/, (0, utils_1.copy)(path_1.default.join(__dirname, target.name, 'sasjsbuild', 'testFlow.json'), path_1.default.join(__dirname, target.name, movedTestFlow))];
|
|
333
|
-
case 1:
|
|
334
|
-
_a.sent();
|
|
335
363
|
return [4 /*yield*/, (0, test_1.runTest)(target, ['jobs/standalone', 'shouldFail', 'services/admin/dostuff.test.0'], outputFolder, movedTestFlow, true)];
|
|
336
364
|
case 2:
|
|
337
365
|
_a.sent();
|
|
338
|
-
resultsFolderPath = path_1.default.join(__dirname, target.name, outputFolder);
|
|
339
|
-
resultsJsonPath = path_1.default.join(resultsFolderPath, 'testResults.json');
|
|
340
366
|
return [4 /*yield*/, expect((0, utils_1.folderExists)(resultsFolderPath)).resolves.toEqual(true)];
|
|
341
367
|
case 3:
|
|
342
368
|
_a.sent();
|
|
@@ -346,7 +372,6 @@ describe('sasjs test', function () {
|
|
|
346
372
|
return [4 /*yield*/, (0, utils_1.readFile)(resultsJsonPath)];
|
|
347
373
|
case 5:
|
|
348
374
|
resultsJson = _a.sent();
|
|
349
|
-
resultsCsvPath = path_1.default.join(resultsFolderPath, 'testResults.csv');
|
|
350
375
|
return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsCsvPath)).resolves.toEqual(true)];
|
|
351
376
|
case 6:
|
|
352
377
|
_a.sent();
|
|
@@ -373,7 +398,6 @@ describe('sasjs test', function () {
|
|
|
373
398
|
case 9:
|
|
374
399
|
log = _a.sent();
|
|
375
400
|
expect(log.length).toBeGreaterThan(0);
|
|
376
|
-
resultsXmlPath = path_1.default.join(resultsFolderPath, 'testResults.xml');
|
|
377
401
|
return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsXmlPath)).resolves.toEqual(true)];
|
|
378
402
|
case 10:
|
|
379
403
|
_a.sent();
|
|
@@ -426,11 +450,27 @@ describe('sasjs test', function () {
|
|
|
426
450
|
});
|
|
427
451
|
}); });
|
|
428
452
|
it('should execute tests and create result CSV, XML and JSON files using default source and output locations', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
429
|
-
var
|
|
453
|
+
var resultsFolderPath, resultsJsonPath, resultsCsvPath, resultsXmlPath, coverageReportPath, expectedResultsJson, expectedResultsCsv, resultsJson, parsedResults, resultsCsv, resultsXml, expectedResultsXml, coverageLcovPath, coverageLcov;
|
|
430
454
|
return __generator(this, function (_a) {
|
|
431
455
|
switch (_a.label) {
|
|
432
456
|
case 0:
|
|
457
|
+
resultsFolderPath = path_1.default.join(__dirname, target.name, 'sasjsresults');
|
|
458
|
+
resultsJsonPath = path_1.default.join(resultsFolderPath, 'testResults.json');
|
|
459
|
+
resultsCsvPath = path_1.default.join(resultsFolderPath, 'testResults.csv');
|
|
460
|
+
resultsXmlPath = path_1.default.join(resultsFolderPath, 'testResults.xml');
|
|
461
|
+
coverageReportPath = path_1.default.join(resultsFolderPath, 'coverage.lcov');
|
|
433
462
|
expectedResultsJson = {
|
|
463
|
+
csv_result_path: resultsCsvPath,
|
|
464
|
+
xml_result_path: resultsXmlPath,
|
|
465
|
+
coverage_report_path: coverageReportPath,
|
|
466
|
+
tests_that_pass: '2/8 (25%)',
|
|
467
|
+
tests_with_results: '8/8 (100%)',
|
|
468
|
+
target_name: target.name,
|
|
469
|
+
target_server_url: target.serverUrl,
|
|
470
|
+
target_server_type: target.serverType,
|
|
471
|
+
local_date_time: expect.anything(),
|
|
472
|
+
local_user_id: expect.anything(),
|
|
473
|
+
local_machine_name: expect.anything(),
|
|
434
474
|
sasjs_test_meta: [
|
|
435
475
|
{
|
|
436
476
|
test_target: 'testsetup',
|
|
@@ -536,8 +576,6 @@ describe('sasjs test', function () {
|
|
|
536
576
|
return [4 /*yield*/, (0, test_1.runTest)(target, undefined, undefined, undefined, true)];
|
|
537
577
|
case 1:
|
|
538
578
|
_a.sent();
|
|
539
|
-
resultsFolderPath = path_1.default.join(__dirname, target.name, 'sasjsresults');
|
|
540
|
-
resultsJsonPath = path_1.default.join(resultsFolderPath, 'testResults.json');
|
|
541
579
|
return [4 /*yield*/, expect((0, utils_1.folderExists)(resultsFolderPath)).resolves.toEqual(true)];
|
|
542
580
|
case 2:
|
|
543
581
|
_a.sent();
|
|
@@ -547,7 +585,6 @@ describe('sasjs test', function () {
|
|
|
547
585
|
return [4 /*yield*/, (0, utils_1.readFile)(resultsJsonPath)];
|
|
548
586
|
case 4:
|
|
549
587
|
resultsJson = _a.sent();
|
|
550
|
-
resultsCsvPath = path_1.default.join(resultsFolderPath, 'testResults.csv');
|
|
551
588
|
return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsCsvPath)).resolves.toEqual(true)];
|
|
552
589
|
case 5:
|
|
553
590
|
_a.sent();
|
|
@@ -559,7 +596,6 @@ describe('sasjs test', function () {
|
|
|
559
596
|
resultsCsv = _a.sent();
|
|
560
597
|
resultsCsv = resultsCsv.replace(/\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b/g, 'sasjs_test_id');
|
|
561
598
|
expect(resultsCsv).toEqual(expectedResultsCsv);
|
|
562
|
-
resultsXmlPath = path_1.default.join(resultsFolderPath, 'testResults.xml');
|
|
563
599
|
return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsXmlPath)).resolves.toEqual(true)];
|
|
564
600
|
case 7:
|
|
565
601
|
_a.sent();
|
|
@@ -76,6 +76,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
76
76
|
};
|
|
77
77
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
78
78
|
exports.getTestUrl = exports.runTest = void 0;
|
|
79
|
+
var os_1 = __importDefault(require("os"));
|
|
79
80
|
var saveOutput_1 = require("./internal/saveOutput");
|
|
80
81
|
var types_1 = require("../../types");
|
|
81
82
|
var file_1 = require("../../utils/file");
|
|
@@ -88,10 +89,10 @@ var utils_2 = require("../../utils/utils");
|
|
|
88
89
|
var createSASjsInstance_1 = require("../../utils/createSASjsInstance");
|
|
89
90
|
// interface
|
|
90
91
|
function runTest(target, testRegExps, outDirectory, flowSourcePath, force) {
|
|
91
|
-
var _a, _b;
|
|
92
|
+
var _a, _b, _c;
|
|
92
93
|
if (testRegExps === void 0) { testRegExps = []; }
|
|
93
94
|
return __awaiter(this, void 0, void 0, function () {
|
|
94
|
-
var testFlowData, testFlow, flow, sasjs, authConfig, username, password,
|
|
95
|
+
var testFlowData, testFlow, flow, sasjs, authConfig, username, password, _d, sas9CredentialsError, e_1, result, isCodeExamplePrinted, printCodeExample, resultFileName, jsonPath, xmlPath, csvPath, coverageReportPath, csvData, resultTable, testSuites, testsCount, passedTestsCount, testsWithResultsCount, resultProvidedTests, passedTests, testsWithResultsPercentage, passingTestsPercentage, errorMessage, failedTestsCount, testsWithoutResultCount;
|
|
95
96
|
var _this = this;
|
|
96
97
|
return __generator(this, function (_e) {
|
|
97
98
|
switch (_e.label) {
|
|
@@ -157,8 +158,8 @@ function runTest(target, testRegExps, outDirectory, flowSourcePath, force) {
|
|
|
157
158
|
contextName: target.contextName,
|
|
158
159
|
useComputeApi: false
|
|
159
160
|
});
|
|
160
|
-
|
|
161
|
-
switch (
|
|
161
|
+
_d = target.serverType;
|
|
162
|
+
switch (_d) {
|
|
162
163
|
case utils_1.ServerType.SasViya: return [3 /*break*/, 2];
|
|
163
164
|
case utils_1.ServerType.Sas9: return [3 /*break*/, 4];
|
|
164
165
|
case utils_1.ServerType.Sasjs: return [3 /*break*/, 5];
|
|
@@ -343,20 +344,29 @@ function runTest(target, testRegExps, outDirectory, flowSourcePath, force) {
|
|
|
343
344
|
}); })];
|
|
344
345
|
case 12:
|
|
345
346
|
_e.sent();
|
|
346
|
-
|
|
347
|
+
resultFileName = 'testResults';
|
|
348
|
+
jsonPath = path_1.default.join(outDirectory, "".concat(resultFileName, ".json"));
|
|
349
|
+
xmlPath = path_1.default.join(outDirectory, "".concat(resultFileName, ".xml"));
|
|
350
|
+
csvPath = path_1.default.join(outDirectory, "".concat(resultFileName, ".csv"));
|
|
351
|
+
coverageReportPath = path_1.default.join(outDirectory, 'coverage.lcov');
|
|
352
|
+
result.local_date_time = new Date().toISOString();
|
|
353
|
+
result.local_user_id = os_1.default.userInfo().username;
|
|
354
|
+
result.local_machine_name = os_1.default.hostname();
|
|
355
|
+
result.target_name = target.name;
|
|
356
|
+
result.target_server_type = target.serverType;
|
|
357
|
+
result.target_server_url = target.serverUrl;
|
|
358
|
+
result.csv_result_path = csvPath;
|
|
359
|
+
result.xml_result_path = xmlPath;
|
|
360
|
+
result.coverage_report_path = coverageReportPath;
|
|
361
|
+
return [4 /*yield*/, (0, saveOutput_1.saveResultXml)(xmlPath, result)];
|
|
347
362
|
case 13:
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
return [2 /*return*/];
|
|
351
|
-
return [4 /*yield*/, (0, saveOutput_1.saveResultXml)(outDirectory, result)];
|
|
363
|
+
_e.sent();
|
|
364
|
+
return [4 /*yield*/, (0, saveOutput_1.saveResultCsv)(csvPath, result)];
|
|
352
365
|
case 14:
|
|
353
|
-
|
|
354
|
-
return [4 /*yield*/, (0, saveOutput_1.
|
|
366
|
+
csvData = _e.sent();
|
|
367
|
+
return [4 /*yield*/, (0, saveOutput_1.saveCoverageLcov)(coverageReportPath, flow)];
|
|
355
368
|
case 15:
|
|
356
|
-
|
|
357
|
-
return [4 /*yield*/, (0, saveOutput_1.saveCoverageLcov)(outDirectory, flow)];
|
|
358
|
-
case 16:
|
|
359
|
-
coverageReportPath = _e.sent();
|
|
369
|
+
_e.sent();
|
|
360
370
|
resultTable = {};
|
|
361
371
|
if (Array.isArray(csvData)) {
|
|
362
372
|
testSuites = csvData.reduce(function (acc, item) {
|
|
@@ -395,20 +405,32 @@ function runTest(target, testRegExps, outDirectory, flowSourcePath, force) {
|
|
|
395
405
|
testsCount = flow.length;
|
|
396
406
|
passedTestsCount = Object.values(resultTable).filter(function (res) { return res.test_suite_result === types_1.TestResultStatus.pass; }).length;
|
|
397
407
|
testsWithResultsCount = Object.values(resultTable).filter(function (res) { return res.test_suite_result !== types_1.TestResultStatus.notProvided; }).length;
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
408
|
+
resultProvidedTests = testsWithResultsCount + '/' + testsCount;
|
|
409
|
+
passedTests = passedTestsCount + '/' + testsWithResultsCount;
|
|
410
|
+
testsWithResultsPercentage = Math.round((testsWithResultsCount / testsCount) * 100 || 0) + '%';
|
|
411
|
+
passingTestsPercentage = Math.round((passedTestsCount / testsWithResultsCount) * 100 || 0) + '%';
|
|
412
|
+
result.tests_with_results = "".concat(resultProvidedTests, " (").concat(testsWithResultsPercentage, ")");
|
|
413
|
+
result.tests_that_pass = "".concat(passedTests, " (").concat(passingTestsPercentage, ")");
|
|
414
|
+
(_b = process.logger) === null || _b === void 0 ? void 0 : _b.info("Tests provided results: ".concat(resultProvidedTests, " (").concat(chalk_1.default.greenBright(testsWithResultsPercentage), ")"));
|
|
415
|
+
(_c = process.logger) === null || _c === void 0 ? void 0 : _c.info("\n Tests that pass: ".concat(passedTests, " (").concat(chalk_1.default.greenBright(passingTestsPercentage), ")\n "));
|
|
416
|
+
errorMessage = '';
|
|
401
417
|
if (!force) {
|
|
402
418
|
failedTestsCount = testsWithResultsCount - passedTestsCount;
|
|
403
419
|
testsWithoutResultCount = testsCount - testsWithResultsCount;
|
|
404
|
-
|
|
420
|
+
result.failed_to_complete = failedTestsCount;
|
|
421
|
+
result.completed_with_failures = testsWithoutResultCount;
|
|
405
422
|
if (testsWithoutResultCount > 0)
|
|
406
423
|
errorMessage = "".concat(testsWithoutResultCount, " ").concat(testsWithoutResultCount === 1 ? 'test' : 'tests', " failed to complete!\n");
|
|
407
424
|
if (failedTestsCount > 0)
|
|
408
425
|
errorMessage += "".concat(failedTestsCount, " ").concat(failedTestsCount === 1 ? 'test' : 'tests', " completed with failures!");
|
|
409
|
-
if (errorMessage)
|
|
410
|
-
return [2 /*return*/, Promise.reject(errorMessage)];
|
|
411
426
|
}
|
|
427
|
+
return [4 /*yield*/, (0, saveOutput_1.saveResultJson)(jsonPath, result)];
|
|
428
|
+
case 16:
|
|
429
|
+
_e.sent();
|
|
430
|
+
(0, displayResult_1.displaySuccess)("Tests execution finished. The results are stored at:\n ".concat(jsonPath, "\n ").concat(csvPath, "\n ").concat(xmlPath));
|
|
431
|
+
(0, displayResult_1.displaySuccess)("Tests coverage report:\n ".concat(coverageReportPath));
|
|
432
|
+
if (errorMessage)
|
|
433
|
+
return [2 /*return*/, Promise.reject(errorMessage)];
|
|
412
434
|
return [2 /*return*/];
|
|
413
435
|
}
|
|
414
436
|
});
|
package/build/config.json
CHANGED
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
},
|
|
37
37
|
{
|
|
38
38
|
"fileName": "buildinitviya.sas",
|
|
39
|
-
"content": "/**\n @file buildinitviya.sas\n @brief this executed as part of the generation of the Viya build script\n @details This file is inserted *after* the build macros and *before* the service code.\n\n For an explanation of this part, see: https://sasjs.io/sasjs/sasjs-cli/#viya-deployment-script\n\n <h4> SAS Macros </h4>\n\n**/\n\n
|
|
39
|
+
"content": "/**\n @file buildinitviya.sas\n @brief this executed as part of the generation of the Viya build script\n @details This file is inserted *after* the build macros and *before* the service code.\n\n For an explanation of this part, see: https://sasjs.io/sasjs/sasjs-cli/#viya-deployment-script\n\n <h4> SAS Macros </h4>\n\n**/\n\n%put buildinit script;\n\n"
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
"fileName": "buildterm.sas",
|
|
@@ -195,27 +195,9 @@
|
|
|
195
195
|
],
|
|
196
196
|
"config": {
|
|
197
197
|
"$schema": "https://cli.sasjs.io/sasjsconfig-schema.json",
|
|
198
|
-
"docConfig": {
|
|
199
|
-
"displayMacroCore": true,
|
|
200
|
-
"enableLineage": true,
|
|
201
|
-
"outDirectory": "",
|
|
202
|
-
"dataControllerUrl": "",
|
|
203
|
-
"doxyContent": {
|
|
204
|
-
"favIcon": "favicon.ico",
|
|
205
|
-
"footer": "new_footer.html",
|
|
206
|
-
"header": "new_header.html",
|
|
207
|
-
"layout": "DoxygenLayout.xml",
|
|
208
|
-
"logo": "logo.png",
|
|
209
|
-
"readMe": "../../README.md",
|
|
210
|
-
"stylesheet": "new_stylesheet.css",
|
|
211
|
-
"path": "./sasjs/doxy/"
|
|
212
|
-
}
|
|
213
|
-
},
|
|
214
198
|
"buildConfig": {
|
|
215
199
|
"initProgram": "sasjs/build/buildinit.sas",
|
|
216
200
|
"termProgram": "sasjs/build/buildterm.sas",
|
|
217
|
-
"buildOutputFolder": "sasjsbuild",
|
|
218
|
-
"buildResultsFolder": "sasjsresults",
|
|
219
201
|
"macroVars": {
|
|
220
202
|
"name": "value",
|
|
221
203
|
"numvar": "42"
|
|
@@ -236,15 +218,12 @@
|
|
|
236
218
|
"macroFolders": ["sasjs/macros"],
|
|
237
219
|
"programFolders": ["sasjs/programs"],
|
|
238
220
|
"binaryFolders": ["sasjs/binaries"],
|
|
239
|
-
"
|
|
221
|
+
"defaultTarget": "viya",
|
|
240
222
|
"targets": [
|
|
241
223
|
{
|
|
242
224
|
"name": "viya",
|
|
243
225
|
"serverType": "SASVIYA",
|
|
244
|
-
"serverUrl": "
|
|
245
|
-
"httpsAgentOptions": {
|
|
246
|
-
"allowInsecureRequests": false
|
|
247
|
-
},
|
|
226
|
+
"serverUrl": "",
|
|
248
227
|
"appLoc": "/Public/app",
|
|
249
228
|
"contextName": "SAS Job Execution compute context",
|
|
250
229
|
"buildConfig": {
|
|
@@ -256,10 +235,6 @@
|
|
|
256
235
|
"extravar": "this too"
|
|
257
236
|
}
|
|
258
237
|
},
|
|
259
|
-
"deployConfig": {
|
|
260
|
-
"deployServicePack": true,
|
|
261
|
-
"deployScripts": ["sasjsbuild/myviyadeploy.sas"]
|
|
262
|
-
},
|
|
263
238
|
"serviceConfig": {
|
|
264
239
|
"serviceFolders": ["sasjs/targets/viya/services/admin"],
|
|
265
240
|
"initProgram": "sasjs/build/serviceinit.sas",
|
|
@@ -269,52 +244,30 @@
|
|
|
269
244
|
"extravar": "this too"
|
|
270
245
|
}
|
|
271
246
|
},
|
|
272
|
-
"
|
|
273
|
-
"jobFolders": [],
|
|
274
|
-
"initProgram": "",
|
|
275
|
-
"termProgram": "",
|
|
276
|
-
"macroVars": {}
|
|
277
|
-
},
|
|
278
|
-
"streamConfig": {
|
|
279
|
-
"assetPaths": [],
|
|
280
|
-
"streamWeb": false,
|
|
281
|
-
"streamWebFolder": "webv",
|
|
282
|
-
"webSourcePath": "dist"
|
|
283
|
-
},
|
|
284
|
-
"macroFolders": ["sasjs/targets/viya/macros"],
|
|
285
|
-
"programFolders": []
|
|
247
|
+
"macroFolders": ["sasjs/targets/viya/macros"]
|
|
286
248
|
},
|
|
287
249
|
{
|
|
288
250
|
"name": "sas9",
|
|
289
251
|
"serverType": "SAS9",
|
|
290
|
-
"serverUrl": "
|
|
252
|
+
"serverUrl": "",
|
|
291
253
|
"appLoc": "/User Folders/&sysuserid/My Folder",
|
|
292
254
|
"serverName": "Foundation",
|
|
293
255
|
"repositoryName": "SASApp",
|
|
294
|
-
"buildConfig": {
|
|
295
|
-
"buildOutputFileName": "mysas9deploy.sas",
|
|
296
|
-
"initProgram": "",
|
|
297
|
-
"termProgram": "",
|
|
298
|
-
"macroVars": {}
|
|
299
|
-
},
|
|
300
256
|
"deployConfig": {
|
|
301
257
|
"deployScripts": ["sasjs/build/deploysas9.sh"],
|
|
302
258
|
"deployServicePack": false
|
|
303
259
|
},
|
|
304
260
|
"serviceConfig": {
|
|
305
261
|
"serviceFolders": ["sasjs/targets/sas9/services/admin"],
|
|
306
|
-
"
|
|
307
|
-
"termProgram": "sasjs/build/servicetermother.sas",
|
|
308
|
-
"macroVars": {}
|
|
262
|
+
"termProgram": "sasjs/build/servicetermother.sas"
|
|
309
263
|
},
|
|
310
|
-
"
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
"
|
|
317
|
-
"programFolders": []
|
|
264
|
+
"macroFolders": ["sasjs/targets/sas9/macros"]
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"name": "sasjs",
|
|
268
|
+
"serverType": "SASJS",
|
|
269
|
+
"serverUrl": "",
|
|
270
|
+
"appLoc": "/Public/app"
|
|
318
271
|
}
|
|
319
272
|
]
|
|
320
273
|
}
|
package/build/types/testing.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ServerType } from '@sasjs/utils';
|
|
1
2
|
export interface TestFlow {
|
|
2
3
|
testSetUp?: string;
|
|
3
4
|
testTearDown?: string;
|
|
@@ -41,6 +42,19 @@ export interface TestResult {
|
|
|
41
42
|
}
|
|
42
43
|
export interface TestResults {
|
|
43
44
|
sasjs_test_meta: TestDescription[];
|
|
45
|
+
csv_result_path?: string;
|
|
46
|
+
xml_result_path?: string;
|
|
47
|
+
coverage_report_path?: string;
|
|
48
|
+
failed_to_complete?: number;
|
|
49
|
+
completed_with_failures?: number;
|
|
50
|
+
tests_with_results?: string;
|
|
51
|
+
tests_that_pass?: string;
|
|
52
|
+
target_name?: string;
|
|
53
|
+
target_server_url?: string;
|
|
54
|
+
target_server_type?: ServerType;
|
|
55
|
+
local_date_time?: string;
|
|
56
|
+
local_user_id?: string;
|
|
57
|
+
local_machine_name?: string;
|
|
44
58
|
}
|
|
45
59
|
export interface TestResultCsv {
|
|
46
60
|
test_target: string;
|
|
@@ -156,26 +156,27 @@ describe('setConstants', function () {
|
|
|
156
156
|
return [4 /*yield*/, (0, setConstants_1.setConstants)()];
|
|
157
157
|
case 1:
|
|
158
158
|
_a.sent();
|
|
159
|
-
verifySasjsConstants();
|
|
159
|
+
verifySasjsConstants(undefined, false, false);
|
|
160
160
|
return [2 /*return*/];
|
|
161
161
|
}
|
|
162
162
|
});
|
|
163
163
|
}); });
|
|
164
164
|
});
|
|
165
|
-
var verifySasjsConstants = function (appFolder, hasSasjsCore) {
|
|
165
|
+
var verifySasjsConstants = function (appFolder, hasSasjsCore, isLocal) {
|
|
166
166
|
if (hasSasjsCore === void 0) { hasSasjsCore = false; }
|
|
167
|
+
if (isLocal === void 0) { isLocal = true; }
|
|
167
168
|
var prefixAppFolder = appFolder !== null && appFolder !== void 0 ? appFolder : require('os').homedir();
|
|
168
169
|
var sasjsConstants = process.sasjsConstants;
|
|
169
170
|
expect(sasjsConstants.buildSourceFolder).toEqual(prefixAppFolder);
|
|
170
171
|
expect(sasjsConstants.buildSourceDbFolder).toEqual([prefixAppFolder, 'sasjs', 'db'].join(path_1.default.sep));
|
|
171
|
-
expect(sasjsConstants.buildDestinationFolder).toEqual(
|
|
172
|
-
expect(sasjsConstants.buildDestinationServicesFolder).toEqual(
|
|
173
|
-
expect(sasjsConstants.buildDestinationJobsFolder).toEqual(
|
|
174
|
-
expect(sasjsConstants.buildDestinationDbFolder).toEqual(
|
|
175
|
-
expect(sasjsConstants.buildDestinationDocsFolder).toEqual(
|
|
176
|
-
expect(sasjsConstants.buildDestinationResultsFolder).toEqual(
|
|
177
|
-
expect(sasjsConstants.buildDestinationResultsLogsFolder).toEqual(
|
|
178
|
-
expect(sasjsConstants.buildDestinationTestFolder).toEqual(
|
|
172
|
+
expect(sasjsConstants.buildDestinationFolder).toEqual(path_1.default.join(prefixAppFolder, isLocal ? '' : '.sasjs', 'sasjsbuild'));
|
|
173
|
+
expect(sasjsConstants.buildDestinationServicesFolder).toEqual(path_1.default.join(prefixAppFolder, isLocal ? '' : '.sasjs', 'sasjsbuild', 'services'));
|
|
174
|
+
expect(sasjsConstants.buildDestinationJobsFolder).toEqual(path_1.default.join(prefixAppFolder, isLocal ? '' : '.sasjs', 'sasjsbuild', 'jobs'));
|
|
175
|
+
expect(sasjsConstants.buildDestinationDbFolder).toEqual(path_1.default.join(prefixAppFolder, isLocal ? '' : '.sasjs', 'sasjsbuild', 'db'));
|
|
176
|
+
expect(sasjsConstants.buildDestinationDocsFolder).toEqual(path_1.default.join(prefixAppFolder, isLocal ? '' : '.sasjs', 'sasjsbuild', 'docs'));
|
|
177
|
+
expect(sasjsConstants.buildDestinationResultsFolder).toEqual(path_1.default.join(prefixAppFolder, isLocal ? '' : '.sasjs', 'sasjsresults'));
|
|
178
|
+
expect(sasjsConstants.buildDestinationResultsLogsFolder).toEqual(path_1.default.join(prefixAppFolder, isLocal ? '' : '.sasjs', 'sasjsresults', 'logs'));
|
|
179
|
+
expect(sasjsConstants.buildDestinationTestFolder).toEqual(path_1.default.join(prefixAppFolder, isLocal ? '' : '.sasjs', 'sasjsbuild', 'tests'));
|
|
179
180
|
var corePath = hasSasjsCore
|
|
180
181
|
? 'core'
|
|
181
182
|
: path_1.default.join('cli', 'node_modules', '@sasjs', 'core');
|
package/package.json
CHANGED
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"access": "public"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@sasjs/adapter": "4.1.
|
|
53
|
+
"@sasjs/adapter": "4.1.3",
|
|
54
54
|
"@sasjs/core": "4.45.4",
|
|
55
55
|
"@sasjs/lint": "2.2.0",
|
|
56
56
|
"@sasjs/utils": "2.52.0",
|
|
@@ -101,5 +101,5 @@
|
|
|
101
101
|
"typescript": "4.5.4",
|
|
102
102
|
"util": "0.12.4"
|
|
103
103
|
},
|
|
104
|
-
"version": "3.27.
|
|
104
|
+
"version": "3.27.2"
|
|
105
105
|
}
|