@sasjs/cli 4.4.0 → 4.4.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.
|
@@ -86,18 +86,18 @@ function runSasCode(target, filePath, compile, logFile, source) {
|
|
|
86
86
|
var _a;
|
|
87
87
|
if (compile === void 0) { compile = false; }
|
|
88
88
|
return __awaiter(this, void 0, void 0, function () {
|
|
89
|
-
var isTempFile, sourcefilePathParts, sourceFolderPath, sasFilePath, sasFileContent, linesToExecute, macroVars, macroVarStatements;
|
|
90
|
-
var
|
|
91
|
-
return __generator(this, function (
|
|
92
|
-
switch (
|
|
89
|
+
var isTempFile, sourcefilePathParts, sourceFolderPath, sasFilePath, sasFileContent, linesToExecute, macroVars, macroVarStatements, _b;
|
|
90
|
+
var _c;
|
|
91
|
+
return __generator(this, function (_d) {
|
|
92
|
+
switch (_d.label) {
|
|
93
93
|
case 0:
|
|
94
94
|
isTempFile = false;
|
|
95
95
|
if (!isUrl(filePath)) return [3 /*break*/, 2];
|
|
96
96
|
;
|
|
97
97
|
return [4 /*yield*/, createFileFromUrl(filePath)];
|
|
98
98
|
case 1:
|
|
99
|
-
(
|
|
100
|
-
|
|
99
|
+
(_c = _d.sent(), isTempFile = _c.isTempFile, filePath = _c.tempFilePath);
|
|
100
|
+
_d.label = 2;
|
|
101
101
|
case 2:
|
|
102
102
|
if (!compile) return [3 /*break*/, 5];
|
|
103
103
|
if (!/\.sas$/i.test(filePath)) return [3 /*break*/, 4];
|
|
@@ -106,41 +106,46 @@ function runSasCode(target, filePath, compile, logFile, source) {
|
|
|
106
106
|
sourceFolderPath = sourcefilePathParts.join(path_1.default.sep);
|
|
107
107
|
return [4 /*yield*/, (0, __1.compileSingleFile)(target, 'identify', filePath, (0, internal_1.getDestinationServicePath)(sourceFolderPath), true)];
|
|
108
108
|
case 3:
|
|
109
|
-
(filePath = (
|
|
109
|
+
(filePath = (_d.sent()).destinationPath);
|
|
110
110
|
(_a = process.logger) === null || _a === void 0 ? void 0 : _a.success("File Compiled and placed at: ".concat(filePath, " ."));
|
|
111
111
|
return [3 /*break*/, 5];
|
|
112
112
|
case 4:
|
|
113
113
|
process.logger.info('Compile flag has no effect on files with extension type other than sas');
|
|
114
|
-
|
|
114
|
+
_d.label = 5;
|
|
115
115
|
case 5:
|
|
116
116
|
sasFilePath = (0, utils_1.getAbsolutePath)(filePath, process.currentDir);
|
|
117
117
|
return [4 /*yield*/, (0, utils_1.readFile)(sasFilePath)];
|
|
118
118
|
case 6:
|
|
119
|
-
sasFileContent =
|
|
119
|
+
sasFileContent = _d.sent();
|
|
120
120
|
linesToExecute = sasFileContent.replace(/\r\n/g, '\n').split('\n');
|
|
121
121
|
if (!source) return [3 /*break*/, 8];
|
|
122
122
|
return [4 /*yield*/, (0, parseSourceFile_1.parseSourceFile)(source)];
|
|
123
123
|
case 7:
|
|
124
|
-
macroVars =
|
|
124
|
+
macroVars = _d.sent();
|
|
125
125
|
macroVarStatements = (0, utils_2.convertToSASStatements)(macroVars).split('\n');
|
|
126
126
|
linesToExecute = __spreadArray(__spreadArray([], __read(macroVarStatements), false), __read(linesToExecute), false);
|
|
127
|
-
|
|
127
|
+
_d.label = 8;
|
|
128
128
|
case 8:
|
|
129
129
|
if (!isTempFile) return [3 /*break*/, 10];
|
|
130
130
|
return [4 /*yield*/, (0, utils_1.deleteFile)(filePath)];
|
|
131
131
|
case 9:
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
_d.sent();
|
|
133
|
+
_d.label = 10;
|
|
134
134
|
case 10:
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
case
|
|
143
|
-
case
|
|
135
|
+
_b = target.serverType;
|
|
136
|
+
switch (_b) {
|
|
137
|
+
case utils_1.ServerType.SasViya: return [3 /*break*/, 11];
|
|
138
|
+
case utils_1.ServerType.Sas9: return [3 /*break*/, 13];
|
|
139
|
+
case utils_1.ServerType.Sasjs: return [3 /*break*/, 15];
|
|
140
|
+
}
|
|
141
|
+
return [3 /*break*/, 17];
|
|
142
|
+
case 11: return [4 /*yield*/, executeOnSasViya(filePath, target, linesToExecute, logFile)];
|
|
143
|
+
case 12: return [2 /*return*/, _d.sent()];
|
|
144
|
+
case 13: return [4 /*yield*/, executeOnSas9(target, linesToExecute, logFile)];
|
|
145
|
+
case 14: return [2 /*return*/, _d.sent()];
|
|
146
|
+
case 15: return [4 /*yield*/, executeOnSasJS(filePath, target, linesToExecute, logFile)];
|
|
147
|
+
case 16: return [2 /*return*/, _d.sent()];
|
|
148
|
+
case 17: return [2 /*return*/];
|
|
144
149
|
}
|
|
145
150
|
});
|
|
146
151
|
});
|
|
@@ -245,10 +250,12 @@ function executeOnSas9(target, linesToExecute, logFile) {
|
|
|
245
250
|
function executeOnSasJS(filePath, target, linesToExecute, logFile) {
|
|
246
251
|
var _a;
|
|
247
252
|
return __awaiter(this, void 0, void 0, function () {
|
|
248
|
-
var authConfig, _b,
|
|
253
|
+
var sasjs, authConfig, _b, fileExtension, log;
|
|
249
254
|
return __generator(this, function (_c) {
|
|
250
255
|
switch (_c.label) {
|
|
251
|
-
case 0:
|
|
256
|
+
case 0:
|
|
257
|
+
sasjs = (0, config_1.getSASjs)(target);
|
|
258
|
+
return [4 /*yield*/, (0, utils_2.isSasJsServerInServerMode)(target)];
|
|
252
259
|
case 1:
|
|
253
260
|
if (!(_c.sent())) return [3 /*break*/, 3];
|
|
254
261
|
return [4 /*yield*/, (0, config_1.getAuthConfig)(target)];
|
|
@@ -260,7 +267,6 @@ function executeOnSasJS(filePath, target, linesToExecute, logFile) {
|
|
|
260
267
|
_c.label = 4;
|
|
261
268
|
case 4:
|
|
262
269
|
authConfig = _b;
|
|
263
|
-
sasjs = (0, config_1.getSASjs)(target);
|
|
264
270
|
fileExtension = path_1.default.extname(filePath).slice(1);
|
|
265
271
|
return [4 /*yield*/, sasjs.executeScript({
|
|
266
272
|
linesOfCode: linesToExecute,
|
|
@@ -268,12 +274,15 @@ function executeOnSasJS(filePath, target, linesToExecute, logFile) {
|
|
|
268
274
|
authConfig: authConfig
|
|
269
275
|
})];
|
|
270
276
|
case 5:
|
|
271
|
-
|
|
277
|
+
log = (_c.sent()).log;
|
|
278
|
+
if (!log) {
|
|
279
|
+
throw new node_1.ErrorResponse('We were not able to fetch the log this time.');
|
|
280
|
+
}
|
|
272
281
|
(_a = process.logger) === null || _a === void 0 ? void 0 : _a.success('Job execution completed!');
|
|
273
|
-
return [4 /*yield*/, createOutputFile(
|
|
282
|
+
return [4 /*yield*/, createOutputFile(log, logFile)];
|
|
274
283
|
case 6:
|
|
275
284
|
_c.sent();
|
|
276
|
-
return [2 /*return*/, { log:
|
|
285
|
+
return [2 /*return*/, { log: log }];
|
|
277
286
|
}
|
|
278
287
|
});
|
|
279
288
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
35
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
36
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
37
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
38
|
+
function step(op) {
|
|
39
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
40
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
41
|
+
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;
|
|
42
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
43
|
+
switch (op[0]) {
|
|
44
|
+
case 0: case 1: t = op; break;
|
|
45
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
46
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
47
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
48
|
+
default:
|
|
49
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
50
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
51
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
52
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
53
|
+
if (t[2]) _.ops.pop();
|
|
54
|
+
_.trys.pop(); continue;
|
|
55
|
+
}
|
|
56
|
+
op = body.call(thisArg, _);
|
|
57
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
58
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
|
+
var utils_1 = require("@sasjs/utils");
|
|
63
|
+
var run_1 = require("../run");
|
|
64
|
+
var utilsModule = __importStar(require("../../../utils/utils"));
|
|
65
|
+
var configModule = __importStar(require("../../../utils/config"));
|
|
66
|
+
var saveLogModule = __importStar(require("../../../utils/saveLog"));
|
|
67
|
+
var fileModule = __importStar(require("@sasjs/utils/file"));
|
|
68
|
+
var getAbsolutePathModule = __importStar(require("@sasjs/utils/file/getAbsolutePath"));
|
|
69
|
+
var node_1 = __importStar(require("@sasjs/adapter/node"));
|
|
70
|
+
var utils_2 = require("../../../utils");
|
|
71
|
+
var sasjs = new node_1.default();
|
|
72
|
+
describe('sasjs run', function () {
|
|
73
|
+
describe('SASJS', function () {
|
|
74
|
+
var target = new utils_1.Target({
|
|
75
|
+
name: 'test',
|
|
76
|
+
appLoc: '/Public/test/',
|
|
77
|
+
serverType: utils_1.ServerType.Sasjs,
|
|
78
|
+
contextName: 'test context'
|
|
79
|
+
});
|
|
80
|
+
var logData = 'SAS log';
|
|
81
|
+
var filePath = 'test.sas';
|
|
82
|
+
beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
83
|
+
return __generator(this, function (_a) {
|
|
84
|
+
switch (_a.label) {
|
|
85
|
+
case 0: return [4 /*yield*/, (0, utils_2.setConstants)(false)];
|
|
86
|
+
case 1:
|
|
87
|
+
_a.sent();
|
|
88
|
+
return [2 /*return*/];
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}); });
|
|
92
|
+
beforeEach(function () {
|
|
93
|
+
setupMocks(filePath, logData);
|
|
94
|
+
});
|
|
95
|
+
it('should saveLog function with correct log data', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
96
|
+
return __generator(this, function (_a) {
|
|
97
|
+
switch (_a.label) {
|
|
98
|
+
case 0:
|
|
99
|
+
jest
|
|
100
|
+
.spyOn(sasjs, 'executeScript')
|
|
101
|
+
.mockImplementation(function () { return Promise.resolve({ log: logData }); });
|
|
102
|
+
jest.spyOn(saveLogModule, 'saveLog').mockImplementation();
|
|
103
|
+
process.sasjsConstants.buildDestinationResultsFolder = __dirname;
|
|
104
|
+
return [4 /*yield*/, (0, run_1.runSasCode)(target, filePath, false, '')];
|
|
105
|
+
case 1:
|
|
106
|
+
_a.sent();
|
|
107
|
+
expect(utils_2.saveLog).toHaveBeenCalledWith(logData, expect.stringMatching(/sasjs-run-\d{14}\.log$/), '', false, undefined);
|
|
108
|
+
return [2 /*return*/];
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}); });
|
|
112
|
+
it('should throw an error if log is not returned by @sasjs/adapter', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
113
|
+
var expectedError;
|
|
114
|
+
return __generator(this, function (_a) {
|
|
115
|
+
switch (_a.label) {
|
|
116
|
+
case 0:
|
|
117
|
+
jest
|
|
118
|
+
.spyOn(sasjs, 'executeScript')
|
|
119
|
+
.mockImplementation(function () { return Promise.resolve({}); });
|
|
120
|
+
expectedError = new node_1.ErrorResponse('We were not able to fetch the log this time.');
|
|
121
|
+
return [4 /*yield*/, expect((0, run_1.runSasCode)(target, filePath, false, '')).rejects.toEqual(expectedError)];
|
|
122
|
+
case 1:
|
|
123
|
+
_a.sent();
|
|
124
|
+
return [2 /*return*/];
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
}); });
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
var setupMocks = function (filePath, logData) {
|
|
131
|
+
jest
|
|
132
|
+
.spyOn(getAbsolutePathModule, 'getAbsolutePath')
|
|
133
|
+
.mockImplementation(function () { return filePath; });
|
|
134
|
+
jest
|
|
135
|
+
.spyOn(fileModule, 'readFile')
|
|
136
|
+
.mockImplementation(function () { return Promise.resolve('test SAS code;'); });
|
|
137
|
+
jest
|
|
138
|
+
.spyOn(utilsModule, 'isSasJsServerInServerMode')
|
|
139
|
+
.mockImplementation(function () { return Promise.resolve(true); });
|
|
140
|
+
jest.spyOn(configModule, 'getAuthConfig').mockImplementation(function () {
|
|
141
|
+
return Promise.resolve({
|
|
142
|
+
access_token: 'test_access_token',
|
|
143
|
+
refresh_token: 'test_refresh_token',
|
|
144
|
+
client: 'test_client',
|
|
145
|
+
secret: ''
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
jest.spyOn(configModule, 'getSASjs').mockImplementation(function (target) { return sasjs; });
|
|
149
|
+
};
|
package/package.json
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"preinstall": "npm run nodeVersionMessage",
|
|
23
23
|
"prepare": "git rev-parse --git-dir && git config core.hooksPath ./.git-hooks || true"
|
|
24
24
|
},
|
|
25
|
-
"testServerTypes": "sasjs
|
|
25
|
+
"testServerTypes": "sasjs",
|
|
26
26
|
"release": {
|
|
27
27
|
"branches": [
|
|
28
28
|
"main"
|
|
@@ -50,13 +50,13 @@
|
|
|
50
50
|
"access": "public"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@sasjs/adapter": "4.5.
|
|
54
|
-
"@sasjs/core": "4.
|
|
55
|
-
"@sasjs/lint": "2.3.
|
|
53
|
+
"@sasjs/adapter": "4.5.1",
|
|
54
|
+
"@sasjs/core": "4.46.3",
|
|
55
|
+
"@sasjs/lint": "2.3.1",
|
|
56
56
|
"@sasjs/utils": "3.3.0",
|
|
57
57
|
"adm-zip": "0.5.9",
|
|
58
58
|
"chalk": "4.1.2",
|
|
59
|
-
"dotenv": "
|
|
59
|
+
"dotenv": "16.0.3",
|
|
60
60
|
"esm": "3.2.25",
|
|
61
61
|
"find": "0.3.0",
|
|
62
62
|
"js-base64": "3.7.2",
|
|
@@ -102,5 +102,5 @@
|
|
|
102
102
|
"typescript": "4.9.5",
|
|
103
103
|
"util": "0.12.4"
|
|
104
104
|
},
|
|
105
|
-
"version": "4.4.
|
|
105
|
+
"version": "4.4.2"
|
|
106
106
|
}
|