@sasjs/cli 3.19.6 → 3.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/build/commands/deploy/deploy.js +54 -108
  2. package/build/commands/deploy/spec/cbd.spec.js +31 -8
  3. package/build/commands/fs/fsCommand.d.ts +11 -0
  4. package/build/commands/fs/fsCommand.js +335 -0
  5. package/build/commands/fs/internal/executeCode.d.ts +4 -0
  6. package/build/commands/fs/internal/executeCode.js +126 -0
  7. package/build/commands/fs/internal/extractHashArray.d.ts +1 -0
  8. package/build/commands/fs/internal/extractHashArray.js +20 -0
  9. package/build/commands/fs/spec/executeCode.spec.d.ts +1 -0
  10. package/build/commands/fs/spec/executeCode.spec.js +197 -0
  11. package/build/commands/fs/spec/extractHashArray.spec.d.ts +1 -0
  12. package/build/commands/fs/spec/extractHashArray.spec.js +14 -0
  13. package/build/commands/fs/spec/fsCommand.spec.d.ts +1 -0
  14. package/build/commands/fs/spec/fsCommand.spec.js +297 -0
  15. package/build/commands/job/internal/execute/sas9.d.ts +1 -1
  16. package/build/commands/job/internal/execute/sasjs.d.ts +3 -4
  17. package/build/commands/job/internal/execute/sasjs.js +36 -20
  18. package/build/commands/job/jobCommand.d.ts +4 -8
  19. package/build/commands/job/jobCommand.js +64 -98
  20. package/build/commands/job/spec/execute.spec.js +52 -7
  21. package/build/commands/request/spec/request.spec.server.sas9.js +2 -0
  22. package/build/commands/run/run.js +70 -107
  23. package/build/types/command/commandFactory.js +2 -0
  24. package/build/utils/config.d.ts +28 -1
  25. package/build/utils/config.js +71 -1
  26. package/build/utils/index.d.ts +1 -0
  27. package/build/utils/index.js +1 -0
  28. package/package.json +4 -4
@@ -0,0 +1,197 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
69
+ return (mod && mod.__esModule) ? mod : { "default": mod };
70
+ };
71
+ Object.defineProperty(exports, "__esModule", { value: true });
72
+ var node_1 = __importDefault(require("@sasjs/adapter/node"));
73
+ var utils_1 = require("@sasjs/utils");
74
+ var executeCode_1 = require("../internal/executeCode");
75
+ var configUtils = __importStar(require("../../../utils/config"));
76
+ var utilsModule = __importStar(require("../../../utils/utils"));
77
+ var targetConfig = {
78
+ name: 'test',
79
+ appLoc: '/Public/test/',
80
+ serverType: utils_1.ServerType.Sasjs
81
+ };
82
+ var authConfig = {
83
+ access_token: '',
84
+ refresh_token: '',
85
+ client: '',
86
+ secret: ''
87
+ };
88
+ var mockedResponse = {
89
+ log: 'mocked response'
90
+ };
91
+ describe('executeCode', function () {
92
+ beforeAll(function () {
93
+ process.projectDir = __dirname;
94
+ });
95
+ describe('on viya', function () {
96
+ var target = new utils_1.Target(__assign(__assign({}, targetConfig), { serverType: utils_1.ServerType.SasViya }));
97
+ beforeEach(function () {
98
+ mockGetSASjsAndAuthConfig(target);
99
+ jest
100
+ .spyOn(node_1.default.prototype, 'executeScript')
101
+ .mockImplementation(function () { return Promise.resolve(mockedResponse); });
102
+ });
103
+ it('should execute code on SASViya', function () { return __awaiter(void 0, void 0, void 0, function () {
104
+ var result;
105
+ return __generator(this, function (_a) {
106
+ switch (_a.label) {
107
+ case 0: return [4 /*yield*/, (0, executeCode_1.executeCode)(target, '')];
108
+ case 1:
109
+ result = _a.sent();
110
+ expect(result).toEqual(mockedResponse);
111
+ return [2 /*return*/];
112
+ }
113
+ });
114
+ }); });
115
+ });
116
+ describe('on sas9', function () {
117
+ var target = new utils_1.Target(__assign(__assign({}, targetConfig), { serverType: utils_1.ServerType.Sas9 }));
118
+ beforeEach(function () {
119
+ mockExecuteScript();
120
+ jest.spyOn(configUtils, 'getSASjsAndAuthConfig').mockImplementation(function () {
121
+ return Promise.resolve({
122
+ sasjs: configUtils.getSASjs(target),
123
+ authConfigSas9: {
124
+ userName: '',
125
+ password: ''
126
+ }
127
+ });
128
+ });
129
+ });
130
+ it('should execute code on SAS9', function () { return __awaiter(void 0, void 0, void 0, function () {
131
+ var result;
132
+ return __generator(this, function (_a) {
133
+ switch (_a.label) {
134
+ case 0: return [4 /*yield*/, (0, executeCode_1.executeCode)(target, '')];
135
+ case 1:
136
+ result = _a.sent();
137
+ expect(result).toEqual(mockedResponse);
138
+ return [2 /*return*/];
139
+ }
140
+ });
141
+ }); });
142
+ });
143
+ describe('on sasjs', function () {
144
+ var target = new utils_1.Target(__assign(__assign({}, targetConfig), { serverType: utils_1.ServerType.Sasjs }));
145
+ beforeEach(function () {
146
+ mockExecuteScript();
147
+ });
148
+ it('should execute code on SASjs Server when running in desktop mode', function () { return __awaiter(void 0, void 0, void 0, function () {
149
+ var result;
150
+ return __generator(this, function (_a) {
151
+ switch (_a.label) {
152
+ case 0:
153
+ jest
154
+ .spyOn(utilsModule, 'isSasJsServerInServerMode')
155
+ .mockImplementation(function () { return Promise.resolve(false); });
156
+ return [4 /*yield*/, (0, executeCode_1.executeCode)(target, '')];
157
+ case 1:
158
+ result = _a.sent();
159
+ expect(result).toEqual(mockedResponse);
160
+ return [2 /*return*/];
161
+ }
162
+ });
163
+ }); });
164
+ it('should execute code on SASjs Server when running in server mode', function () { return __awaiter(void 0, void 0, void 0, function () {
165
+ var result;
166
+ return __generator(this, function (_a) {
167
+ switch (_a.label) {
168
+ case 0:
169
+ jest
170
+ .spyOn(utilsModule, 'isSasJsServerInServerMode')
171
+ .mockImplementation(function () { return Promise.resolve(true); });
172
+ jest
173
+ .spyOn(configUtils, 'getAuthConfig')
174
+ .mockImplementation(function () { return Promise.resolve(authConfig); });
175
+ return [4 /*yield*/, (0, executeCode_1.executeCode)(target, '')];
176
+ case 1:
177
+ result = _a.sent();
178
+ expect(result).toEqual(mockedResponse);
179
+ return [2 /*return*/];
180
+ }
181
+ });
182
+ }); });
183
+ });
184
+ });
185
+ var mockExecuteScript = function () {
186
+ jest
187
+ .spyOn(node_1.default.prototype, 'executeScript')
188
+ .mockImplementation(function () { return Promise.resolve(mockedResponse.log); });
189
+ };
190
+ var mockGetSASjsAndAuthConfig = function (target) {
191
+ jest.spyOn(configUtils, 'getSASjsAndAuthConfig').mockImplementation(function () {
192
+ return Promise.resolve({
193
+ sasjs: configUtils.getSASjs(target),
194
+ authConfig: authConfig
195
+ });
196
+ });
197
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var extractHashArray_1 = require("../internal/extractHashArray");
4
+ var log = "\n>>weboutBEGIN<<\n{\n \"hashes\": [{\n \"FILE_HASH\": \"someCharacters\",\n \"FILE_PATH\": \"path/to/folder/file\"\n }]\n}\n>>weboutEND<<\n";
5
+ var logWithInvalidJsonInWebout = "\n>>weboutBEGIN<<\n{\n \"invalid Json\"\n}\n>>weboutEND<<\n";
6
+ describe('extractHashArray', function () {
7
+ it('should extract hashed array from webout', function () {
8
+ var hashes = (0, extractHashArray_1.extractHashArray)(log);
9
+ expect(hashes).toBeArrayOfSize(1);
10
+ });
11
+ it('should throw error when log does not contain webout', function () {
12
+ expect(function () { return (0, extractHashArray_1.extractHashArray)(logWithInvalidJsonInWebout); }).toThrow('An error occurred while extracting hashes array from webout.');
13
+ });
14
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
22
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23
+ return new (P || (P = Promise))(function (resolve, reject) {
24
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
25
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
26
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
27
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
28
+ });
29
+ };
30
+ var __generator = (this && this.__generator) || function (thisArg, body) {
31
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
32
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
33
+ function verb(n) { return function (v) { return step([n, v]); }; }
34
+ function step(op) {
35
+ if (f) throw new TypeError("Generator is already executing.");
36
+ while (_) try {
37
+ 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;
38
+ if (y = 0, t) op = [op[0] & 2, t.value];
39
+ switch (op[0]) {
40
+ case 0: case 1: t = op; break;
41
+ case 4: _.label++; return { value: op[1], done: false };
42
+ case 5: _.label++; y = op[1]; op = [0]; continue;
43
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
44
+ default:
45
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
46
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
47
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
48
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
49
+ if (t[2]) _.ops.pop();
50
+ _.trys.pop(); continue;
51
+ }
52
+ op = body.call(thisArg, _);
53
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
54
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
55
+ }
56
+ };
57
+ var __read = (this && this.__read) || function (o, n) {
58
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
59
+ if (!m) return o;
60
+ var i = m.call(o), r, ar = [], e;
61
+ try {
62
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
63
+ }
64
+ catch (error) { e = { error: error }; }
65
+ finally {
66
+ try {
67
+ if (r && !r.done && (m = i["return"])) m.call(i);
68
+ }
69
+ finally { if (e) throw e.error; }
70
+ }
71
+ return ar;
72
+ };
73
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
74
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
75
+ if (ar || !(i in from)) {
76
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
77
+ ar[i] = from[i];
78
+ }
79
+ }
80
+ return to.concat(ar || Array.prototype.slice.call(from));
81
+ };
82
+ Object.defineProperty(exports, "__esModule", { value: true });
83
+ var utils_1 = require("@sasjs/utils");
84
+ var command_1 = require("../../../types/command");
85
+ var fsCommand_1 = require("../fsCommand");
86
+ var utils_2 = require("../../../utils");
87
+ var FSModule = __importStar(require("@sasjs/utils/fs"));
88
+ var FileModule = __importStar(require("@sasjs/utils/file"));
89
+ var configUtils = __importStar(require("../../../utils/config"));
90
+ var executeCodeModule = __importStar(require("../internal/executeCode"));
91
+ var extractHashArrayModule = __importStar(require("../internal/extractHashArray"));
92
+ var defaultArgs = ['node', 'sasjs', 'fs'];
93
+ var target = new utils_1.Target({
94
+ name: 'test',
95
+ appLoc: '/Public/test/',
96
+ serverType: utils_1.ServerType.Sasjs
97
+ });
98
+ describe('FSCommand', function () {
99
+ beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
100
+ return __generator(this, function (_a) {
101
+ switch (_a.label) {
102
+ case 0: return [4 /*yield*/, (0, utils_2.setConstants)()];
103
+ case 1:
104
+ _a.sent();
105
+ process.projectDir = __dirname;
106
+ return [2 /*return*/];
107
+ }
108
+ });
109
+ }); });
110
+ describe('compile', function () {
111
+ beforeEach(function () {
112
+ jest
113
+ .spyOn(FSModule, 'generateCompileProgram')
114
+ .mockImplementation(function () { return Promise.resolve(''); });
115
+ process.logger = new utils_1.Logger(utils_1.LogLevel.Off);
116
+ jest.spyOn(process.logger, 'error');
117
+ });
118
+ it('should compile a sas program for creating a copy of local folder on remote server', function () { return __awaiter(void 0, void 0, void 0, function () {
119
+ var returnCode;
120
+ return __generator(this, function (_a) {
121
+ switch (_a.label) {
122
+ case 0:
123
+ jest
124
+ .spyOn(FileModule, 'createFile')
125
+ .mockImplementation(function () { return Promise.resolve(); });
126
+ return [4 /*yield*/, executeCommandWrapper([
127
+ 'compile',
128
+ 'localFolder',
129
+ '-o',
130
+ 'compiledProgram'
131
+ ])];
132
+ case 1:
133
+ returnCode = _a.sent();
134
+ expect(returnCode).toEqual(command_1.ReturnCode.Success);
135
+ return [2 /*return*/];
136
+ }
137
+ });
138
+ }); });
139
+ it('should display an error message', function () { return __awaiter(void 0, void 0, void 0, function () {
140
+ var returnCode;
141
+ return __generator(this, function (_a) {
142
+ switch (_a.label) {
143
+ case 0:
144
+ jest
145
+ .spyOn(FileModule, 'createFile')
146
+ .mockImplementation(function () { return Promise.reject(); });
147
+ return [4 /*yield*/, executeCommandWrapper(['compile', 'localFolder'])];
148
+ case 1:
149
+ returnCode = _a.sent();
150
+ expect(returnCode).toEqual(command_1.ReturnCode.InternalError);
151
+ expect(process.logger.error).toHaveBeenCalledWith('An error has occurred when creating program file.\n');
152
+ return [2 /*return*/];
153
+ }
154
+ });
155
+ }); });
156
+ });
157
+ describe('sync', function () {
158
+ beforeEach(function () {
159
+ process.logger = new utils_1.Logger(utils_1.LogLevel.Off);
160
+ jest.spyOn(process.logger, 'info');
161
+ jest
162
+ .spyOn(FileModule, 'createFile')
163
+ .mockImplementation(function () { return Promise.resolve(); });
164
+ jest
165
+ .spyOn(configUtils, 'findTargetInConfiguration')
166
+ .mockImplementation(function () {
167
+ return Promise.resolve({ target: target, isLocal: true });
168
+ });
169
+ jest
170
+ .spyOn(FSModule, 'generateProgramToGetRemoteHash')
171
+ .mockImplementation(function () { return Promise.resolve(''); });
172
+ jest
173
+ .spyOn(FSModule, 'generateProgramToSyncHashDiff')
174
+ .mockImplementation(function () { return Promise.resolve(''); });
175
+ jest
176
+ .spyOn(executeCodeModule, 'executeCode')
177
+ .mockImplementation(function () { return Promise.resolve({ log: '' }); });
178
+ jest.spyOn(FSModule, 'getHash').mockImplementation(function () {
179
+ return Promise.resolve({
180
+ absolutePath: '',
181
+ relativePath: '',
182
+ hash: '',
183
+ isFile: false,
184
+ members: []
185
+ });
186
+ });
187
+ jest.spyOn(FSModule, 'compareHashes').mockImplementation(function () { return ({
188
+ absolutePath: '',
189
+ relativePath: '',
190
+ hash: '',
191
+ isFile: false,
192
+ members: []
193
+ }); });
194
+ });
195
+ it('should sync a local folder with folder on remote server', function () { return __awaiter(void 0, void 0, void 0, function () {
196
+ var returnCode;
197
+ return __generator(this, function (_a) {
198
+ switch (_a.label) {
199
+ case 0:
200
+ jest
201
+ .spyOn(extractHashArrayModule, 'extractHashArray')
202
+ .mockImplementationOnce(function () { return [
203
+ {
204
+ FILE_PATH: 'mocked-file',
205
+ FILE_HASH: 'hashOfMockedFile'
206
+ }
207
+ ]; });
208
+ jest
209
+ .spyOn(extractHashArrayModule, 'extractHashArray')
210
+ .mockImplementationOnce(function () { return [
211
+ {
212
+ FILE_PATH: 'synced-file',
213
+ FILE_HASH: 'hashOfSyncedFile'
214
+ }
215
+ ]; });
216
+ return [4 /*yield*/, executeCommandWrapper([
217
+ 'sync',
218
+ 'localFolder',
219
+ 'remoteFolder'
220
+ ])];
221
+ case 1:
222
+ returnCode = _a.sent();
223
+ expect(returnCode).toEqual(command_1.ReturnCode.Success);
224
+ expect(process.logger.info).toHaveBeenCalledWith('generating program to get remote hash');
225
+ expect(process.logger.info).toHaveBeenCalledWith('executing program to get remote hash');
226
+ expect(process.logger.info).toHaveBeenCalledWith('extracting hashes from log');
227
+ expect(process.logger.info).toHaveBeenCalledWith('creating the hash of local folder');
228
+ expect(process.logger.info).toHaveBeenCalledWith('Extract differences from local and remote hash');
229
+ expect(process.logger.info).toHaveBeenCalledWith('generating program to sync differences');
230
+ expect(process.logger.info).toHaveBeenCalledWith('executing program to sync differences');
231
+ return [2 /*return*/];
232
+ }
233
+ });
234
+ }); });
235
+ it('should not execute sync program when local and remote folders are already in sync', function () { return __awaiter(void 0, void 0, void 0, function () {
236
+ var returnCode;
237
+ return __generator(this, function (_a) {
238
+ switch (_a.label) {
239
+ case 0:
240
+ jest
241
+ .spyOn(extractHashArrayModule, 'extractHashArray')
242
+ .mockImplementation(function () { return [
243
+ {
244
+ FILE_PATH: 'mocked-file',
245
+ FILE_HASH: 'hashOfMockedFile'
246
+ }
247
+ ]; });
248
+ jest.spyOn(FSModule, 'getHash').mockImplementation(function () {
249
+ return Promise.resolve({
250
+ absolutePath: '',
251
+ relativePath: FileModule.getRelativePath('remoteFolder', 'mocked-file'),
252
+ hash: 'hashOfMockedFile',
253
+ isFile: true,
254
+ members: []
255
+ });
256
+ });
257
+ return [4 /*yield*/, executeCommandWrapper([
258
+ 'sync',
259
+ 'localFolder',
260
+ 'remoteFolder'
261
+ ])];
262
+ case 1:
263
+ returnCode = _a.sent();
264
+ expect(returnCode).toEqual(command_1.ReturnCode.Success);
265
+ expect(process.logger.info).toHaveBeenCalledWith('There are no differences between Remote and Local directory. Already synced.');
266
+ return [2 /*return*/];
267
+ }
268
+ });
269
+ }); });
270
+ });
271
+ describe('invalid subCommand', function () {
272
+ it('should return ReturnCode.InvalidCommand when subCommand is unknown', function () { return __awaiter(void 0, void 0, void 0, function () {
273
+ var returnCode;
274
+ return __generator(this, function (_a) {
275
+ switch (_a.label) {
276
+ case 0: return [4 /*yield*/, executeCommandWrapper(['subCommand'])];
277
+ case 1:
278
+ returnCode = _a.sent();
279
+ expect(returnCode).toEqual(command_1.ReturnCode.InvalidCommand);
280
+ return [2 /*return*/];
281
+ }
282
+ });
283
+ }); });
284
+ });
285
+ });
286
+ var executeCommandWrapper = function (additionalParams) { return __awaiter(void 0, void 0, void 0, function () {
287
+ var args, command;
288
+ return __generator(this, function (_a) {
289
+ switch (_a.label) {
290
+ case 0:
291
+ args = __spreadArray(__spreadArray([], __read(defaultArgs), false), __read(additionalParams), false);
292
+ command = new fsCommand_1.FSCommand(args);
293
+ return [4 /*yield*/, command.execute()];
294
+ case 1: return [2 /*return*/, _a.sent()];
295
+ }
296
+ });
297
+ }); };
@@ -9,6 +9,6 @@ import SASjs from '@sasjs/adapter/node';
9
9
  * @param {string | undefined} source - An optional path to a JSON file containing input macro variables.
10
10
  */
11
11
  export declare function executeJobSas9(sasjs: SASjs, config: {
12
- username: string;
12
+ userName: string;
13
13
  password: string;
14
14
  }, jobPath: string, logFile?: string, output?: string, source?: string): Promise<any>;
@@ -1,6 +1,5 @@
1
- import SASjs from '@sasjs/adapter/node';
2
- import { AuthConfig } from '@sasjs/utils';
3
- export declare function executeJobSasjs(sasjs: SASjs, jobPath: string, logFile?: string, output?: string, authConfig?: AuthConfig): Promise<{
1
+ import { Target } from '@sasjs/utils';
2
+ export declare function executeJobSasjs(target: Target, jobPath: string, logFile?: string, output?: string): Promise<{
4
3
  result: any;
5
4
  log: any;
6
- } | undefined>;
5
+ }>;
@@ -37,31 +37,47 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.executeJobSasjs = void 0;
40
- var utils_1 = require("../utils");
41
- function executeJobSasjs(sasjs, jobPath, logFile, output, authConfig) {
40
+ var node_1 = require("@sasjs/adapter/node");
41
+ var utils_1 = require("../../../../utils");
42
+ var utils_2 = require("../utils");
43
+ function executeJobSasjs(target, jobPath, logFile, output) {
44
+ var _a;
42
45
  return __awaiter(this, void 0, void 0, function () {
43
- var response;
44
- return __generator(this, function (_a) {
45
- switch (_a.label) {
46
- case 0: return [4 /*yield*/, sasjs.executeJobSASjs({
47
- _program: jobPath
48
- }, authConfig)];
46
+ var authConfig, _b, sasjsApiClient, response;
47
+ return __generator(this, function (_c) {
48
+ switch (_c.label) {
49
+ case 0: return [4 /*yield*/, (0, utils_1.isSasJsServerInServerMode)(target)];
49
50
  case 1:
50
- response = _a.sent();
51
- if (!response) return [3 /*break*/, 5];
52
- process.logger.success('Job executed successfully!');
53
- if (!(!!logFile && response.log)) return [3 /*break*/, 3];
54
- return [4 /*yield*/, (0, utils_1.saveLog)(response.log, logFile, jobPath, false)];
51
+ if (!(_c.sent())) return [3 /*break*/, 3];
52
+ return [4 /*yield*/, (0, utils_1.getAuthConfig)(target)];
55
53
  case 2:
56
- _a.sent();
57
- _a.label = 3;
54
+ _b = _c.sent();
55
+ return [3 /*break*/, 4];
58
56
  case 3:
59
- if (!(!!output && response.result)) return [3 /*break*/, 5];
60
- return [4 /*yield*/, (0, utils_1.saveOutput)(response.result, output, false)];
57
+ _b = undefined;
58
+ _c.label = 4;
61
59
  case 4:
62
- _a.sent();
63
- _a.label = 5;
64
- case 5: return [2 /*return*/, response];
60
+ authConfig = _b;
61
+ sasjsApiClient = new node_1.SASjsApiClient(new node_1.SasjsRequestClient(target.serverUrl, target.httpsAgentOptions));
62
+ return [4 /*yield*/, sasjsApiClient.executeJob({
63
+ _program: jobPath
64
+ }, target.appLoc, authConfig)];
65
+ case 5:
66
+ response = _c.sent();
67
+ if (!response) return [3 /*break*/, 9];
68
+ (_a = process.logger) === null || _a === void 0 ? void 0 : _a.success('Job executed successfully!');
69
+ if (!(!!logFile && response.log)) return [3 /*break*/, 7];
70
+ return [4 /*yield*/, (0, utils_2.saveLog)(response.log, logFile, jobPath, false)];
71
+ case 6:
72
+ _c.sent();
73
+ _c.label = 7;
74
+ case 7:
75
+ if (!(!!output && response.result)) return [3 /*break*/, 9];
76
+ return [4 /*yield*/, (0, utils_2.saveOutput)(response.result, output, false)];
77
+ case 8:
78
+ _c.sent();
79
+ _c.label = 9;
80
+ case 9: return [2 /*return*/, response];
65
81
  }
66
82
  });
67
83
  });
@@ -1,15 +1,11 @@
1
- import SASjs from '@sasjs/adapter/node';
2
- import { AuthConfig, Target } from '@sasjs/utils';
1
+ import { Target } from '@sasjs/utils';
3
2
  import { ReturnCode } from '../../types/command';
4
3
  import { TargetCommand } from '../../types/command/targetCommand';
5
4
  export declare class JobCommand extends TargetCommand {
6
5
  private jobSubCommands;
7
6
  constructor(args: string[]);
8
7
  execute(): Promise<ReturnCode>;
9
- executeJobSasjs(sasjs: SASjs, target: Target, authConfig: AuthConfig | undefined): Promise<ReturnCode>;
10
- executeJobSas9(sasjs: SASjs, target: Target, config: {
11
- username: string;
12
- password: string;
13
- }): Promise<ReturnCode>;
14
- executeJobViya(target: Target, sasjs: SASjs, authConfig: AuthConfig): Promise<ReturnCode>;
8
+ executeJobSasjs(target: Target): Promise<ReturnCode>;
9
+ executeJobSas9(target: Target): Promise<ReturnCode>;
10
+ executeJobViya(target: Target): Promise<ReturnCode>;
15
11
  }