@sasjs/cli 3.5.0 → 3.6.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.
@@ -101,8 +101,11 @@ function getPreCodeForServicePack(serverType) {
101
101
  '/* so we provide instead as __program */\n' +
102
102
  '%global __program _program;\n' +
103
103
  '%let _program=%sysfunc(coalescec(&__program,&_program));\n' +
104
- '%macro webout(action,ds,dslabel=,fmt=,missing=NULL);\n' +
105
- '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing)\n' +
104
+ '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO);\n' +
105
+ ' %mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt\n' +
106
+ ' ,missing=&missing\n' +
107
+ ' ,showmeta=&showmeta\n' +
108
+ ' )' +
106
109
  '%mend;\n';
107
110
  return [3 /*break*/, 14];
108
111
  case 5:
@@ -119,8 +122,11 @@ function getPreCodeForServicePack(serverType) {
119
122
  case 8:
120
123
  content = _g + _l.sent();
121
124
  content +=
122
- ' %macro webout(action,ds,dslabel=,fmt=,missing=NULL);\n' +
123
- ' %mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing)\n' +
125
+ ' %macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO);\n' +
126
+ ' %mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt\n' +
127
+ ' ,missing=&missing\n' +
128
+ ' ,showmeta=&showmeta\n' +
129
+ ' )' +
124
130
  ' %mend;\n';
125
131
  return [3 /*break*/, 14];
126
132
  case 9:
@@ -137,8 +143,11 @@ function getPreCodeForServicePack(serverType) {
137
143
  case 12:
138
144
  content = _k + _l.sent();
139
145
  content +=
140
- ' %macro webout(action,ds,dslabel=,fmt=,missing=NULL);\n' +
141
- ' %ms_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing)\n' +
146
+ ' %macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO);\n' +
147
+ ' %ms_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt\n' +
148
+ ' ,missing=&missing\n' +
149
+ ' ,showmeta=&showmeta\n' +
150
+ ' )' +
142
151
  ' %mend;\n';
143
152
  return [3 /*break*/, 14];
144
153
  case 13: throw new error_1.ServerTypeError();
@@ -42,7 +42,7 @@ var config_1 = require("../../../utils/config");
42
42
  function loadDependencies(target, filePath, macroFolders, programFolders, type) {
43
43
  var _a;
44
44
  return __awaiter(this, void 0, void 0, function () {
45
- var fileContent, configuration, _b, buildSourceFolder, macroCorePath;
45
+ var fileContent, configuration, _b, buildSourceFolder, macroCorePath, binaryFolders;
46
46
  return __generator(this, function (_c) {
47
47
  switch (_c.label) {
48
48
  case 0:
@@ -54,6 +54,9 @@ function loadDependencies(target, filePath, macroFolders, programFolders, type)
54
54
  case 2:
55
55
  configuration = (_c.sent()).configuration;
56
56
  _b = process.sasjsConstants, buildSourceFolder = _b.buildSourceFolder, macroCorePath = _b.macroCorePath;
57
+ return [4 /*yield*/, config_1.getBinaryFolders(target)];
58
+ case 3:
59
+ binaryFolders = _c.sent();
57
60
  headerSyntaxNotices(fileContent);
58
61
  return [4 /*yield*/, utils_1.loadDependenciesFile({
59
62
  fileContent: fileContent,
@@ -64,9 +67,10 @@ function loadDependencies(target, filePath, macroFolders, programFolders, type)
64
67
  macroFolders: macroFolders,
65
68
  programFolders: programFolders,
66
69
  buildSourceFolder: buildSourceFolder,
67
- macroCorePath: macroCorePath
70
+ macroCorePath: macroCorePath,
71
+ binaryFolders: binaryFolders
68
72
  })];
69
- case 3: return [2 /*return*/, _c.sent()];
73
+ case 4: return [2 /*return*/, _c.sent()];
70
74
  }
71
75
  });
72
76
  });
@@ -128,10 +128,10 @@ describe('compileTestFile', function () {
128
128
  return [4 /*yield*/, utils_1.readFile(compiledTestFilePath)];
129
129
  case 2:
130
130
  testFileContent = _a.apply(void 0, [_b.sent()]);
131
- testVar = replaceLineBreaks("* Test Variables start;\n\n%let " + Object.keys(target.testConfig.macroVars)[0] + "=" + Object.values(target.testConfig.macroVars)[0] + ";\n\n*Test Variables end;");
131
+ testVar = replaceLineBreaks("* Test Variables start;\n\n%let " + Object.keys(target.testConfig.macroVars)[0] + "=" + Object.values(target.testConfig.macroVars)[0] + ";\n\n* Test Variables end;");
132
132
  testInit = replaceLineBreaks("* TestInit start;\n/**\n @file\n @brief setting up the test\n\n <h4> SAS Macros </h4>\n**/\n\n%put testing, init;\n* TestInit end;");
133
133
  testTerm = replaceLineBreaks("* TestTerm start;\n/**\n @file\n @brief ending the test\n\n <h4> SAS Macros </h4>\n**/\n\n%put testing, termed;\n* TestTerm end;");
134
- mvWebout = "%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=Y,stream=Y);";
134
+ mvWebout = "%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=Y,stream=Y,missing=NULL<br> ,showmeta=NO<br>);";
135
135
  expect(testFileContent.indexOf(testVar)).toBeGreaterThan(-1);
136
136
  expect(testFileContent.indexOf(testInit)).toBeGreaterThan(-1);
137
137
  expect(testFileContent.indexOf(testTerm)).toBeGreaterThan(-1);
@@ -61,6 +61,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
61
61
  var path_1 = __importDefault(require("path"));
62
62
  var utils_1 = require("@sasjs/utils");
63
63
  var internalModule = __importStar(require("@sasjs/utils/sasjsCli/getInitTerm"));
64
+ var getInitTerm_1 = require("@sasjs/utils/sasjsCli/getInitTerm");
64
65
  var test_1 = require("../../../utils/test");
65
66
  var compileJobFile_1 = require("../internal/compileJobFile");
66
67
  var utils_2 = require("@sasjs/utils");
@@ -106,18 +107,7 @@ describe('compileJobFile', function () {
106
107
  return __generator(this, function (_a) {
107
108
  switch (_a.label) {
108
109
  case 0:
109
- jest.spyOn(internalModule, 'getInit').mockImplementation(function () {
110
- return Promise.resolve({
111
- content: "\n* JobInit start;\n" + fakeJobInit + "\n* JobInit end;",
112
- filePath: ''
113
- });
114
- });
115
- jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
116
- return Promise.resolve({
117
- content: "\n* JobTerm start;\n" + fakeJobTerm + "\n* JobTerm end;",
118
- filePath: ''
119
- });
120
- });
110
+ getInitTerm_1.mockGetProgram(internalModule, fakeJobInit, fakeJobTerm);
121
111
  filePath = path_1.default.join(__dirname, './service.sas');
122
112
  buildPath = path_1.default.join(process.projectDir, 'sasjsbuild');
123
113
  destinationPath = path_1.default.join(buildPath, 'service.sas');
@@ -61,6 +61,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
61
61
  var path_1 = __importDefault(require("path"));
62
62
  var utils_1 = require("@sasjs/utils");
63
63
  var internalModule = __importStar(require("@sasjs/utils/sasjsCli/getInitTerm"));
64
+ var getInitTerm_1 = require("@sasjs/utils/sasjsCli/getInitTerm");
64
65
  var test_1 = require("../../../utils/test");
65
66
  var compileServiceFile_1 = require("../internal/compileServiceFile");
66
67
  var utils_2 = require("@sasjs/utils");
@@ -107,18 +108,7 @@ describe('compileServiceFile', function () {
107
108
  return __generator(this, function (_a) {
108
109
  switch (_a.label) {
109
110
  case 0:
110
- jest.spyOn(internalModule, 'getInit').mockImplementation(function () {
111
- return Promise.resolve({
112
- content: "\n* ServiceInit start;\n" + fakeJobInit + "\n* ServiceInit end;",
113
- filePath: ''
114
- });
115
- });
116
- jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
117
- return Promise.resolve({
118
- content: "\n* ServiceTerm start;\n" + fakeJobTerm + "\n* ServiceTerm end;",
119
- filePath: ''
120
- });
121
- });
111
+ getInitTerm_1.mockGetProgram(internalModule, fakeJobInit, fakeJobTerm);
122
112
  filePath = path_1.default.join(__dirname, './service.sas');
123
113
  buildPath = path_1.default.join(process.projectDir, 'sasjsbuild');
124
114
  destinationPath = path_1.default.join(buildPath, 'service.sas');
@@ -72,6 +72,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
72
72
  var path_1 = __importDefault(require("path"));
73
73
  var utils_1 = require("@sasjs/utils");
74
74
  var internalModule = __importStar(require("@sasjs/utils/sasjsCli/getInitTerm"));
75
+ var getInitTerm_1 = require("@sasjs/utils/sasjsCli/getInitTerm");
75
76
  var test_1 = require("../../../utils/test");
76
77
  var loadDependencies_1 = require("../internal/loadDependencies");
77
78
  var fakeInit = "/**\n @file serviceinit.sas\n @brief this file is called with every service\n @details This file is included in *every* service, *after* the macros and *before* the service code.\n\n <h4> SAS Macros </h4>\n @li mf_abort.sas\n\n**/\n\noptions\n DATASTMTCHK=ALLKEYWORDS /* some sites have this enabled */\n PS=MAX /* reduce log size slightly */\n;\n%put service is starting!!;";
@@ -121,7 +122,7 @@ var serviceConfig = function (root) {
121
122
  }
122
123
  });
123
124
  };
124
- var compiledVars = function (type) { return "* " + type + " Variables start;\n\n%let macrovar1=macro " + type.toLowerCase() + " value configuration 1;\n%let macrovar2=macro " + type.toLowerCase() + " value target 2;\n%let macrovar3=macro " + type.toLowerCase() + " value target 3;\n\n*" + type + " Variables end;"; };
125
+ var compiledVars = function (type) { return "* " + type + " Variables start;\n\n%let macrovar1=macro " + type.toLowerCase() + " value configuration 1;\n%let macrovar2=macro " + type.toLowerCase() + " value target 2;\n%let macrovar3=macro " + type.toLowerCase() + " value target 3;\n\n* " + type + " Variables end;"; };
125
126
  describe('loadDependencies', function () {
126
127
  var appName = "cli-tests-load-dependencies-" + utils_1.generateTimestamp();
127
128
  var temp = test_1.generateTestTarget(appName, '/Public/app', {
@@ -162,18 +163,7 @@ describe('loadDependencies', function () {
162
163
  return __generator(this, function (_a) {
163
164
  switch (_a.label) {
164
165
  case 0:
165
- jest.spyOn(internalModule, 'getInit').mockImplementation(function () {
166
- return Promise.resolve({
167
- content: "\n* ServiceInit start;\n" + fakeInit + "\n* ServiceInit end;",
168
- filePath: ''
169
- });
170
- });
171
- jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
172
- return Promise.resolve({
173
- content: "\n* ServiceTerm start;\n" + fakeTerm + "\n* ServiceTerm end;",
174
- filePath: ''
175
- });
176
- });
166
+ getInitTerm_1.mockGetProgram(internalModule, fakeInit, fakeTerm);
177
167
  return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [], [], utils_1.SASJsFileType.service)];
178
168
  case 1:
179
169
  dependencies = _a.sent();
@@ -193,18 +183,7 @@ describe('loadDependencies', function () {
193
183
  return __generator(this, function (_a) {
194
184
  switch (_a.label) {
195
185
  case 0:
196
- jest.spyOn(internalModule, 'getInit').mockImplementation(function () {
197
- return Promise.resolve({
198
- content: "\n* JobInit start;\n" + fakeInit + "\n* JobInit end;",
199
- filePath: ''
200
- });
201
- });
202
- jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
203
- return Promise.resolve({
204
- content: "\n* JobTerm start;\n" + fakeTerm + "\n* JobTerm end;",
205
- filePath: ''
206
- });
207
- });
186
+ getInitTerm_1.mockGetProgram(internalModule, fakeInit, fakeTerm);
208
187
  return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [], [], utils_1.SASJsFileType.job)];
209
188
  case 1:
210
189
  dependencies = _a.sent();
@@ -224,18 +203,7 @@ describe('loadDependencies', function () {
224
203
  return __generator(this, function (_a) {
225
204
  switch (_a.label) {
226
205
  case 0:
227
- jest.spyOn(internalModule, 'getInit').mockImplementation(function () {
228
- return Promise.resolve({
229
- content: "\n* ServiceInit start;\n" + fakeInit2 + "\n* ServiceInit end;",
230
- filePath: ''
231
- });
232
- });
233
- jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
234
- return Promise.resolve({
235
- content: "\n* ServiceTerm start;\n" + fakeTerm2 + "\n* ServiceTerm end;",
236
- filePath: ''
237
- });
238
- });
206
+ getInitTerm_1.mockGetProgram(internalModule, fakeInit2, fakeTerm2);
239
207
  return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [], [], utils_1.SASJsFileType.service)];
240
208
  case 1:
241
209
  dependencies = _a.sent();
@@ -255,18 +223,7 @@ describe('loadDependencies', function () {
255
223
  return __generator(this, function (_a) {
256
224
  switch (_a.label) {
257
225
  case 0:
258
- jest.spyOn(internalModule, 'getInit').mockImplementation(function () {
259
- return Promise.resolve({
260
- content: "\n* JobInit start;\n" + fakeInit2 + "\n* JobInit end;",
261
- filePath: ''
262
- });
263
- });
264
- jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
265
- return Promise.resolve({
266
- content: "\n* JobTerm start;\n" + fakeTerm2 + "\n* JobTerm end;",
267
- filePath: ''
268
- });
269
- });
226
+ getInitTerm_1.mockGetProgram(internalModule, fakeInit2, fakeTerm2);
270
227
  return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [], [], utils_1.SASJsFileType.job)];
271
228
  case 1:
272
229
  dependencies = _a.sent();
@@ -286,18 +243,7 @@ describe('loadDependencies', function () {
286
243
  return __generator(this, function (_a) {
287
244
  switch (_a.label) {
288
245
  case 0:
289
- jest.spyOn(internalModule, 'getInit').mockImplementation(function () {
290
- return Promise.resolve({
291
- content: "\n* ServiceInit start;\n" + fakeJobInit + "\n* ServiceInit end;",
292
- filePath: ''
293
- });
294
- });
295
- jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
296
- return Promise.resolve({
297
- content: "\n* ServiceTerm start;\n" + fakeTerm + "\n* ServiceTerm end;",
298
- filePath: ''
299
- });
300
- });
246
+ getInitTerm_1.mockGetProgram(internalModule, fakeJobInit, fakeTerm);
301
247
  return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [path_1.default.join(__dirname, './macros')], [path_1.default.join(__dirname, './'), path_1.default.join(__dirname, './services')], utils_1.SASJsFileType.service)];
302
248
  case 1:
303
249
  dependencies = _a.sent();
@@ -317,18 +263,7 @@ describe('loadDependencies', function () {
317
263
  return __generator(this, function (_a) {
318
264
  switch (_a.label) {
319
265
  case 0:
320
- jest.spyOn(internalModule, 'getInit').mockImplementation(function () {
321
- return Promise.resolve({
322
- content: "\n* JobInit start;\n" + fakeJobInit + "\n* JobInit end;",
323
- filePath: ''
324
- });
325
- });
326
- jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
327
- return Promise.resolve({
328
- content: "\n* JobTerm start;\n" + fakeTerm + "\n* JobTerm end;",
329
- filePath: ''
330
- });
331
- });
266
+ getInitTerm_1.mockGetProgram(internalModule, fakeJobInit, fakeTerm);
332
267
  return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [path_1.default.join(__dirname, './macros')], [path_1.default.join(__dirname, './'), path_1.default.join(__dirname, './services')], utils_1.SASJsFileType.job)];
333
268
  case 1:
334
269
  dependencies = _a.sent();
@@ -348,18 +283,7 @@ describe('loadDependencies', function () {
348
283
  return __generator(this, function (_a) {
349
284
  switch (_a.label) {
350
285
  case 0:
351
- jest.spyOn(internalModule, 'getInit').mockImplementation(function () {
352
- return Promise.resolve({
353
- content: "\n* ServiceInit start;\n" + fakeJobInit2 + "\n* ServiceInit end;",
354
- filePath: ''
355
- });
356
- });
357
- jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
358
- return Promise.resolve({
359
- content: "\n* ServiceTerm start;\n" + fakeTerm2 + "\n* ServiceTerm end;",
360
- filePath: ''
361
- });
362
- });
286
+ getInitTerm_1.mockGetProgram(internalModule, fakeJobInit2, fakeTerm2);
363
287
  return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [path_1.default.join(__dirname, './macros')], [path_1.default.join(__dirname, './'), path_1.default.join(__dirname, './services')], utils_1.SASJsFileType.service)];
364
288
  case 1:
365
289
  dependencies = _a.sent();
@@ -379,18 +303,7 @@ describe('loadDependencies', function () {
379
303
  return __generator(this, function (_a) {
380
304
  switch (_a.label) {
381
305
  case 0:
382
- jest.spyOn(internalModule, 'getInit').mockImplementation(function () {
383
- return Promise.resolve({
384
- content: "\n* JobInit start;\n" + fakeJobInit2 + "\n* JobInit end;",
385
- filePath: ''
386
- });
387
- });
388
- jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
389
- return Promise.resolve({
390
- content: "\n* JobTerm start;\n" + fakeTerm2 + "\n* JobTerm end;",
391
- filePath: ''
392
- });
393
- });
306
+ getInitTerm_1.mockGetProgram(internalModule, fakeJobInit2, fakeTerm2);
394
307
  return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [path_1.default.join(__dirname, './macros')], [path_1.default.join(__dirname, './'), path_1.default.join(__dirname, './services')], utils_1.SASJsFileType.job)];
395
308
  case 1:
396
309
  dependencies = _a.sent();
@@ -410,18 +323,7 @@ describe('loadDependencies', function () {
410
323
  return __generator(this, function (_a) {
411
324
  switch (_a.label) {
412
325
  case 0:
413
- jest.spyOn(internalModule, 'getInit').mockImplementation(function () {
414
- return Promise.resolve({
415
- content: "\n* JobInit start;\n" + fakeJobInit + "\n* JobInit end;",
416
- filePath: ''
417
- });
418
- });
419
- jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
420
- return Promise.resolve({
421
- content: "\n* JobTerm start;\n" + fakeTerm2 + "\n* JobTerm end;",
422
- filePath: ''
423
- });
424
- });
326
+ getInitTerm_1.mockGetProgram(internalModule, fakeJobInit, fakeTerm2);
425
327
  return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [path_1.default.join(__dirname, './macros')], [path_1.default.join(__dirname, './'), path_1.default.join(__dirname, './services')], utils_1.SASJsFileType.job)];
426
328
  case 1:
427
329
  dependencies = _a.sent();
@@ -444,18 +346,7 @@ describe('loadDependencies', function () {
444
346
  return __generator(this, function (_a) {
445
347
  switch (_a.label) {
446
348
  case 0:
447
- jest.spyOn(internalModule, 'getInit').mockImplementation(function () {
448
- return Promise.resolve({
449
- content: "\n* JobInit start;\n" + fakeInit2 + "\n* JobInit end;",
450
- filePath: ''
451
- });
452
- });
453
- jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
454
- return Promise.resolve({
455
- content: "\n* JobTerm start;\n" + fakeJobInit + "\n* JobTerm end;",
456
- filePath: ''
457
- });
458
- });
349
+ getInitTerm_1.mockGetProgram(internalModule, fakeInit2, fakeJobInit);
459
350
  return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [path_1.default.join(__dirname, './macros')], [path_1.default.join(__dirname, './'), path_1.default.join(__dirname, './services')], utils_1.SASJsFileType.job)];
460
351
  case 1:
461
352
  dependencies = _a.sent();
@@ -477,18 +368,7 @@ describe('loadDependencies', function () {
477
368
  return __generator(this, function (_a) {
478
369
  switch (_a.label) {
479
370
  case 0:
480
- jest.spyOn(internalModule, 'getInit').mockImplementation(function () {
481
- return Promise.resolve({
482
- content: "\n* ServiceInit start;\n" + fakeJobInit + "\n* ServiceInit end;",
483
- filePath: ''
484
- });
485
- });
486
- jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
487
- return Promise.resolve({
488
- content: "\n* ServiceTerm start;\n" + fakeTerm2 + "\n* ServiceTerm end;",
489
- filePath: ''
490
- });
491
- });
371
+ getInitTerm_1.mockGetProgram(internalModule, fakeJobInit, fakeTerm2);
492
372
  return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [path_1.default.join(__dirname, './macros')], [path_1.default.join(__dirname, './'), path_1.default.join(__dirname, './services')], utils_1.SASJsFileType.service)];
493
373
  case 1:
494
374
  dependencies = _a.sent();
@@ -511,18 +391,7 @@ describe('loadDependencies', function () {
511
391
  return __generator(this, function (_a) {
512
392
  switch (_a.label) {
513
393
  case 0:
514
- jest.spyOn(internalModule, 'getInit').mockImplementation(function () {
515
- return Promise.resolve({
516
- content: "\n* ServiceInit start;\n" + fakeInit2 + "\n* ServiceInit end;",
517
- filePath: ''
518
- });
519
- });
520
- jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
521
- return Promise.resolve({
522
- content: "\n* ServiceTerm start;\n" + fakeJobInit + "\n* ServiceTerm end;",
523
- filePath: ''
524
- });
525
- });
394
+ getInitTerm_1.mockGetProgram(internalModule, fakeInit2, fakeJobInit);
526
395
  return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [path_1.default.join(__dirname, './macros')], [path_1.default.join(__dirname, './'), path_1.default.join(__dirname, './services')], utils_1.SASJsFileType.service)];
527
396
  case 1:
528
397
  dependencies = _a.sent();
@@ -119,8 +119,11 @@ describe('sasjs cbd with server type SASJS', function () {
119
119
  return [4 /*yield*/, utils_1.readFile(macroCorePath + "/server/ms_webout.sas")];
120
120
  case 7:
121
121
  ms_webout = _a.sent();
122
- webout = ' %macro webout(action,ds,dslabel=,fmt=,missing=NULL);\n' +
123
- ' %ms_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing)\n' +
122
+ webout = ' %macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO);\n' +
123
+ ' %ms_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt\n' +
124
+ ' ,missing=&missing\n' +
125
+ ' ,showmeta=&showmeta\n' +
126
+ ' )' +
124
127
  ' %mend;\n';
125
128
  expect(sasjs.deployToSASjs).toHaveBeenCalledWith({
126
129
  members: [
@@ -136,13 +139,13 @@ describe('sasjs cbd with server type SASJS', function () {
136
139
  name: 'appinit',
137
140
  type: 'service',
138
141
  code: utils_3.removeComments("" + mf_getuser + mp_jsonout + ms_webout + webout +
139
- '/* provide additional debug info */\n%global _program;\n%put &=syscc;\n%put user=%mf_getuser();\n%put pgm=&_program;\n%put timestamp=%sysfunc(datetime(),datetime19.);\n* Service Variables start;\n*Service Variables end;\n* Dependencies start;\n* Dependencies end;\n* Programs start;\n*Programs end;\n* Service start;\nproc sql;\ncreate table areas as select distinct area\n from sashelp.springs;\n%webout(OPEN)\n%webout(OBJ,areas)\n%webout(CLOSE)\n* Service end;')
142
+ '/* provide additional debug info */\n%global _program;\n%put &=syscc;\n%put user=%mf_getuser();\n%put pgm=&_program;\n%put timestamp=%sysfunc(datetime(),datetime19.);\n* Service Variables start;\n* Service Variables end;\n* SAS Macros start;\n* SAS Macros end;\n* SAS Includes start;\n* SAS Includes end;\n* Binary Files start;\n* Binary Files end;\n* Service start;\nproc sql;\ncreate table areas as select distinct area\n from sashelp.springs;\n%webout(OPEN)\n%webout(OBJ,areas)\n%webout(CLOSE)\n* Service end;')
140
143
  },
141
144
  {
142
145
  name: 'getdata',
143
146
  type: 'service',
144
147
  code: utils_3.removeComments("" + mf_getuser + mp_jsonout + ms_webout + webout +
145
- '/* provide additional debug info */\n%global _program;\n%put &=syscc;\n%put user=%mf_getuser();\n%put pgm=&_program;\n%put timestamp=%sysfunc(datetime(),datetime19.);\n* Service Variables start;\n*Service Variables end;\n* Dependencies start;\n* Dependencies end;\n* Programs start;\n*Programs end;\n* Service start;\n%webout(FETCH)\nproc sql;\ncreate table springs as select * from sashelp.springs\n where area in (select area from work.areas);\n%webout(OPEN)\n%webout(OBJ,springs)\n%webout(CLOSE)\n* Service end;')
148
+ '/* provide additional debug info */\n%global _program;\n%put &=syscc;\n%put user=%mf_getuser();\n%put pgm=&_program;\n%put timestamp=%sysfunc(datetime(),datetime19.);\n* Service Variables start;\n* Service Variables end;\n* SAS Macros start;\n* SAS Macros end;\n* SAS Includes start;\n* SAS Includes end;\n* Binary Files start;\n* Binary Files end;\n* Service start;\n%webout(FETCH)\nproc sql;\ncreate table springs as select * from sashelp.springs\n where area in (select area from work.areas);\n%webout(OPEN)\n%webout(OBJ,springs)\n%webout(CLOSE)\n* Service end;')
146
149
  }
147
150
  ]
148
151
  }
@@ -92,6 +92,14 @@ var expectedDataObj = {
92
92
  }
93
93
  ]
94
94
  };
95
+ var getOutputJson = function () { return __awaiter(void 0, void 0, void 0, function () { var _a, _b; return __generator(this, function (_c) {
96
+ switch (_c.label) {
97
+ case 0:
98
+ _b = (_a = JSON).parse;
99
+ return [4 /*yield*/, utils_1.readFile(path_1.default.join(process.projectDir, 'output.json'))];
100
+ case 1: return [2 /*return*/, _b.apply(_a, [_c.sent()])];
101
+ }
102
+ }); }); };
95
103
  describe('sasjs request without compute API', function () {
96
104
  var appName = 'cli-tests-request-' + utils_2.generateTimestamp();
97
105
  var target = test_1.generateTestTarget(appName, "/Public/app/cli-tests/" + appName, {
@@ -157,69 +165,77 @@ describe('sasjs request without compute API', function () {
157
165
  });
158
166
  }); });
159
167
  it("should execute service 'sendArr' with absolute path", function () { return __awaiter(void 0, void 0, void 0, function () {
160
- var rawData, output;
161
- return __generator(this, function (_a) {
162
- switch (_a.label) {
168
+ var _a, _b;
169
+ return __generator(this, function (_c) {
170
+ switch (_c.label) {
163
171
  case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/sendArr", dataPathRel, undefined, authConfig)).toResolve()];
164
172
  case 1:
165
- _a.sent();
166
- return [4 /*yield*/, utils_1.readFile(process.projectDir + "/output.json")];
173
+ _c.sent();
174
+ _a = expect;
175
+ return [4 /*yield*/, getOutputJson()];
167
176
  case 2:
168
- rawData = _a.sent();
169
- output = JSON.parse(rawData);
170
- expect(output.table1).toEqual(expectedDataArr.table1);
171
- expect(output.table2).toEqual(expectedDataArr.table2);
177
+ _a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataArr.table1);
178
+ _b = expect;
179
+ return [4 /*yield*/, getOutputJson()];
180
+ case 3:
181
+ _b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataArr.table2);
172
182
  return [2 /*return*/];
173
183
  }
174
184
  });
175
185
  }); });
176
186
  it("should execute service 'sendObj' with absolute path", function () { return __awaiter(void 0, void 0, void 0, function () {
177
- var rawData, output;
178
- return __generator(this, function (_a) {
179
- switch (_a.label) {
187
+ var _a, _b;
188
+ return __generator(this, function (_c) {
189
+ switch (_c.label) {
180
190
  case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/sendObj", dataPathRel, undefined, authConfig)).toResolve()];
181
191
  case 1:
182
- _a.sent();
183
- return [4 /*yield*/, utils_1.readFile(process.projectDir + "/output.json")];
192
+ _c.sent();
193
+ _a = expect;
194
+ return [4 /*yield*/, getOutputJson()];
184
195
  case 2:
185
- rawData = _a.sent();
186
- output = JSON.parse(rawData);
187
- expect(output.table1).toEqual(expectedDataObj.table1);
188
- expect(output.table2).toEqual(expectedDataObj.table2);
196
+ _a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataObj.table1);
197
+ _b = expect;
198
+ return [4 /*yield*/, getOutputJson()];
199
+ case 3:
200
+ _b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataObj.table2);
189
201
  return [2 /*return*/];
190
202
  }
191
203
  });
192
204
  }); });
193
205
  it("should execute service 'sendArr' with relative path", function () { return __awaiter(void 0, void 0, void 0, function () {
194
- var rawData, output;
195
- return __generator(this, function (_a) {
196
- switch (_a.label) {
206
+ var _a, _b;
207
+ return __generator(this, function (_c) {
208
+ switch (_c.label) {
197
209
  case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, 'services/runRequest/sendArr', dataPathRel, undefined, authConfig)).toResolve()];
198
210
  case 1:
199
- _a.sent();
200
- return [4 /*yield*/, utils_1.readFile(process.projectDir + "/output.json")];
211
+ _c.sent();
212
+ _a = expect;
213
+ return [4 /*yield*/, getOutputJson()];
201
214
  case 2:
202
- rawData = _a.sent();
203
- output = JSON.parse(rawData);
204
- expect(output.table1).toEqual(expectedDataArr.table1);
205
- expect(output.table2).toEqual(expectedDataArr.table2);
215
+ _a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataArr.table1);
216
+ _b = expect;
217
+ return [4 /*yield*/, getOutputJson()];
218
+ case 3:
219
+ _b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataArr.table2);
206
220
  return [2 /*return*/];
207
221
  }
208
222
  });
209
223
  }); });
210
224
  it("should execute service 'sendObj' with relative path", function () { return __awaiter(void 0, void 0, void 0, function () {
211
- var rawData, output;
212
- return __generator(this, function (_a) {
213
- switch (_a.label) {
225
+ var _a, _b;
226
+ return __generator(this, function (_c) {
227
+ switch (_c.label) {
214
228
  case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, 'services/runRequest/sendObj', dataPathRel, undefined, authConfig)).toResolve()];
215
229
  case 1:
216
- _a.sent();
217
- return [4 /*yield*/, utils_1.readFile(process.projectDir + "/output.json")];
230
+ _c.sent();
231
+ _a = expect;
232
+ return [4 /*yield*/, getOutputJson()];
218
233
  case 2:
219
- rawData = _a.sent();
220
- output = JSON.parse(rawData);
221
- expect(output.table1).toEqual(expectedDataObj.table1);
222
- expect(output.table2).toEqual(expectedDataObj.table2);
234
+ _a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataObj.table1);
235
+ _b = expect;
236
+ return [4 /*yield*/, getOutputJson()];
237
+ case 3:
238
+ _b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataObj.table2);
223
239
  return [2 /*return*/];
224
240
  }
225
241
  });
@@ -231,7 +247,7 @@ describe('sasjs request without compute API', function () {
231
247
  case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/sendArr", dataPathRel, undefined, authConfig, undefined, undefined, './myoutput.json')).toResolve()];
232
248
  case 1:
233
249
  _a.sent();
234
- return [4 /*yield*/, utils_1.readFile(process.projectDir + "/myoutput.json")];
250
+ return [4 /*yield*/, utils_1.readFile(path_1.default.join(process.projectDir, 'myoutput.json'))];
235
251
  case 2:
236
252
  rawData = _a.sent();
237
253
  output = JSON.parse(rawData);
@@ -246,13 +262,13 @@ describe('sasjs request without compute API', function () {
246
262
  return __generator(this, function (_a) {
247
263
  switch (_a.label) {
248
264
  case 0:
249
- jobPath = utils_3.prefixAppLoc(target.appLoc, process.currentDir);
265
+ jobPath = utils_3.prefixAppLoc(target.appLoc, 'services/runRequest/err');
250
266
  log = getLogFilePath_1.getLogFilePath('./mylog.txt', jobPath || '');
251
- return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/err", dataPathRel, undefined, authConfig, log, jobPath)).toResolve()];
267
+ return [4 /*yield*/, expect(request_1.runSasJob(target, false, jobPath, dataPathRel, undefined, authConfig, log, jobPath)).toResolve()];
252
268
  case 1:
253
269
  _a.sent();
254
- rawLogDataStats = fs_1.statSync(process.projectDir + "/mylog.txt");
255
- rawDataStats = fs_1.statSync(process.projectDir + "/output.json");
270
+ rawLogDataStats = fs_1.statSync(log);
271
+ rawDataStats = fs_1.statSync(path_1.default.join(process.projectDir, 'output.json'));
256
272
  expect(rawLogDataStats.size).toBeGreaterThan(10);
257
273
  expect(rawDataStats.size).toBeGreaterThan(10);
258
274
  return [2 /*return*/];
@@ -264,13 +280,13 @@ describe('sasjs request without compute API', function () {
264
280
  return __generator(this, function (_a) {
265
281
  switch (_a.label) {
266
282
  case 0:
267
- jobPath = utils_3.prefixAppLoc(target.appLoc, process.currentDir);
283
+ jobPath = utils_3.prefixAppLoc(target.appLoc, 'services/runRequest/err');
268
284
  log = getLogFilePath_1.getLogFilePath('', jobPath || '');
269
- return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/err", dataPathRel, undefined, authConfig, log, jobPath)).toResolve()];
285
+ return [4 /*yield*/, expect(request_1.runSasJob(target, false, jobPath, dataPathRel, undefined, authConfig, log, jobPath)).toResolve()];
270
286
  case 1:
271
287
  _a.sent();
272
- rawLogDataStats = fs_1.statSync(process.projectDir + "/" + target.name + ".log");
273
- rawDataStats = fs_1.statSync(process.projectDir + "/output.json");
288
+ rawLogDataStats = fs_1.statSync(log);
289
+ rawDataStats = fs_1.statSync(path_1.default.join(process.projectDir, 'output.json'));
274
290
  expect(rawLogDataStats.size).toBeGreaterThan(10);
275
291
  expect(rawDataStats.size).toBeGreaterThan(10);
276
292
  return [2 /*return*/];
@@ -339,69 +355,77 @@ describe('sasjs request with SAS9', function () {
339
355
  });
340
356
  }); });
341
357
  it("should execute service 'sendArr' with absolute path", function () { return __awaiter(void 0, void 0, void 0, function () {
342
- var rawData, output;
343
- return __generator(this, function (_a) {
344
- switch (_a.label) {
358
+ var _a, _b;
359
+ return __generator(this, function (_c) {
360
+ switch (_c.label) {
345
361
  case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/sendArr", dataPathRel)).toResolve()];
346
362
  case 1:
347
- _a.sent();
348
- return [4 /*yield*/, utils_1.readFile(process.projectDir + "/output.json")];
363
+ _c.sent();
364
+ _a = expect;
365
+ return [4 /*yield*/, getOutputJson()];
349
366
  case 2:
350
- rawData = _a.sent();
351
- output = JSON.parse(rawData);
352
- expect(output.table1).toEqual(expectedDataArr.table1);
353
- expect(output.table2).toEqual(expectedDataArr.table2);
367
+ _a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataArr.table1);
368
+ _b = expect;
369
+ return [4 /*yield*/, getOutputJson()];
370
+ case 3:
371
+ _b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataArr.table2);
354
372
  return [2 /*return*/];
355
373
  }
356
374
  });
357
375
  }); });
358
376
  it("should execute service 'sendObj' with absolute path", function () { return __awaiter(void 0, void 0, void 0, function () {
359
- var rawData, output;
360
- return __generator(this, function (_a) {
361
- switch (_a.label) {
377
+ var _a, _b;
378
+ return __generator(this, function (_c) {
379
+ switch (_c.label) {
362
380
  case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/sendObj", dataPathRel)).toResolve()];
363
381
  case 1:
364
- _a.sent();
365
- return [4 /*yield*/, utils_1.readFile(process.projectDir + "/output.json")];
382
+ _c.sent();
383
+ _a = expect;
384
+ return [4 /*yield*/, getOutputJson()];
366
385
  case 2:
367
- rawData = _a.sent();
368
- output = JSON.parse(rawData);
369
- expect(output.table1).toEqual(expectedDataObj.table1);
370
- expect(output.table2).toEqual(expectedDataObj.table2);
386
+ _a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataObj.table1);
387
+ _b = expect;
388
+ return [4 /*yield*/, getOutputJson()];
389
+ case 3:
390
+ _b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataObj.table2);
371
391
  return [2 /*return*/];
372
392
  }
373
393
  });
374
394
  }); });
375
395
  it("should execute service 'sendArr' with relative path", function () { return __awaiter(void 0, void 0, void 0, function () {
376
- var rawData, output;
377
- return __generator(this, function (_a) {
378
- switch (_a.label) {
396
+ var _a, _b;
397
+ return __generator(this, function (_c) {
398
+ switch (_c.label) {
379
399
  case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, 'services/runRequest/sendArr', dataPathRel)).toResolve()];
380
400
  case 1:
381
- _a.sent();
382
- return [4 /*yield*/, utils_1.readFile(process.projectDir + "/output.json")];
401
+ _c.sent();
402
+ _a = expect;
403
+ return [4 /*yield*/, getOutputJson()];
383
404
  case 2:
384
- rawData = _a.sent();
385
- output = JSON.parse(rawData);
386
- expect(output.table1).toEqual(expectedDataArr.table1);
387
- expect(output.table2).toEqual(expectedDataArr.table2);
405
+ _a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataArr.table1);
406
+ _b = expect;
407
+ return [4 /*yield*/, getOutputJson()];
408
+ case 3:
409
+ _b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataArr.table2);
388
410
  return [2 /*return*/];
389
411
  }
390
412
  });
391
413
  }); });
392
414
  it("should execute service 'sendObj' with relative path", function () { return __awaiter(void 0, void 0, void 0, function () {
393
- var rawData, output;
394
- return __generator(this, function (_a) {
395
- switch (_a.label) {
415
+ var _a, _b;
416
+ return __generator(this, function (_c) {
417
+ switch (_c.label) {
396
418
  case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, 'services/runRequest/sendObj', dataPathRel)).toResolve()];
397
419
  case 1:
398
- _a.sent();
399
- return [4 /*yield*/, utils_1.readFile(process.projectDir + "/output.json")];
420
+ _c.sent();
421
+ _a = expect;
422
+ return [4 /*yield*/, getOutputJson()];
400
423
  case 2:
401
- rawData = _a.sent();
402
- output = JSON.parse(rawData);
403
- expect(output.table1).toEqual(expectedDataObj.table1);
404
- expect(output.table2).toEqual(expectedDataObj.table2);
424
+ _a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataObj.table1);
425
+ _b = expect;
426
+ return [4 /*yield*/, getOutputJson()];
427
+ case 3:
428
+ _b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataObj.table2);
405
429
  return [2 /*return*/];
406
430
  }
407
431
  });
@@ -413,7 +437,7 @@ describe('sasjs request with SAS9', function () {
413
437
  case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/sendArr", dataPathRel, undefined, undefined, undefined, undefined, './myoutput.json')).toResolve()];
414
438
  case 1:
415
439
  _a.sent();
416
- return [4 /*yield*/, utils_1.readFile(process.projectDir + "/myoutput.json")];
440
+ return [4 /*yield*/, utils_1.readFile(path_1.default.join(process.projectDir, 'myoutput.json'))];
417
441
  case 2:
418
442
  rawData = _a.sent();
419
443
  output = JSON.parse(rawData);
@@ -428,13 +452,13 @@ describe('sasjs request with SAS9', function () {
428
452
  return __generator(this, function (_a) {
429
453
  switch (_a.label) {
430
454
  case 0:
431
- jobPath = utils_3.prefixAppLoc(target.appLoc, process.currentDir);
455
+ jobPath = utils_3.prefixAppLoc(target.appLoc, 'services/runRequest/err');
432
456
  log = getLogFilePath_1.getLogFilePath('./mylog.txt', jobPath || '');
433
- return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/err", dataPathRel, undefined, undefined, log, jobPath)).toResolve()];
457
+ return [4 /*yield*/, expect(request_1.runSasJob(target, false, jobPath, dataPathRel, undefined, undefined, log, jobPath)).toResolve()];
434
458
  case 1:
435
459
  _a.sent();
436
- rawLogDataStats = fs_1.statSync(process.projectDir + "/mylog.txt");
437
- rawDataStats = fs_1.statSync(process.projectDir + "/output.json");
460
+ rawLogDataStats = fs_1.statSync(log);
461
+ rawDataStats = fs_1.statSync(path_1.default.join(process.projectDir, 'output.json'));
438
462
  expect(rawLogDataStats.size).toBeGreaterThan(10);
439
463
  expect(rawDataStats.size).toBeGreaterThan(10);
440
464
  return [2 /*return*/];
@@ -446,13 +470,13 @@ describe('sasjs request with SAS9', function () {
446
470
  return __generator(this, function (_a) {
447
471
  switch (_a.label) {
448
472
  case 0:
449
- jobPath = utils_3.prefixAppLoc(target.appLoc, process.currentDir);
473
+ jobPath = utils_3.prefixAppLoc(target.appLoc, 'services/runRequest/err');
450
474
  log = getLogFilePath_1.getLogFilePath('', jobPath || '');
451
- return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/err", dataPathRel, undefined, undefined, log, jobPath)).toResolve()];
475
+ return [4 /*yield*/, expect(request_1.runSasJob(target, false, jobPath, dataPathRel, undefined, undefined, log, jobPath)).toResolve()];
452
476
  case 1:
453
477
  _a.sent();
454
- rawLogDataStats = fs_1.statSync(process.projectDir + "/" + target.name + ".log");
455
- rawDataStats = fs_1.statSync(process.projectDir + "/output.json");
478
+ rawLogDataStats = fs_1.statSync(log);
479
+ rawDataStats = fs_1.statSync(path_1.default.join(process.projectDir, 'output.json'));
456
480
  expect(rawLogDataStats.size).toBeGreaterThan(10);
457
481
  expect(rawDataStats.size).toBeGreaterThan(10);
458
482
  return [2 /*return*/];
@@ -520,69 +544,77 @@ describe("sasjs request with compute API", function () {
520
544
  });
521
545
  }); });
522
546
  it("should execute service 'sendArr' with absolute path", function () { return __awaiter(void 0, void 0, void 0, function () {
523
- var rawData, output;
524
- return __generator(this, function (_a) {
525
- switch (_a.label) {
547
+ var _a, _b;
548
+ return __generator(this, function (_c) {
549
+ switch (_c.label) {
526
550
  case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/sendArr", dataPathRel, configPathRel, authConfig)).toResolve()];
527
551
  case 1:
528
- _a.sent();
529
- return [4 /*yield*/, utils_1.readFile(process.projectDir + "/output.json")];
552
+ _c.sent();
553
+ _a = expect;
554
+ return [4 /*yield*/, getOutputJson()];
530
555
  case 2:
531
- rawData = _a.sent();
532
- output = JSON.parse(rawData);
533
- expect(output.table1).toEqual(expectedDataArr.table1);
534
- expect(output.table2).toEqual(expectedDataArr.table2);
556
+ _a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataArr.table1);
557
+ _b = expect;
558
+ return [4 /*yield*/, getOutputJson()];
559
+ case 3:
560
+ _b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataArr.table2);
535
561
  return [2 /*return*/];
536
562
  }
537
563
  });
538
564
  }); });
539
565
  it("should execute service 'sendObj' with absolute path", function () { return __awaiter(void 0, void 0, void 0, function () {
540
- var rawData, output;
541
- return __generator(this, function (_a) {
542
- switch (_a.label) {
566
+ var _a, _b;
567
+ return __generator(this, function (_c) {
568
+ switch (_c.label) {
543
569
  case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/sendObj", dataPathRel, configPathRel, authConfig)).toResolve()];
544
570
  case 1:
545
- _a.sent();
546
- return [4 /*yield*/, utils_1.readFile(process.projectDir + "/output.json")];
571
+ _c.sent();
572
+ _a = expect;
573
+ return [4 /*yield*/, getOutputJson()];
547
574
  case 2:
548
- rawData = _a.sent();
549
- output = JSON.parse(rawData);
550
- expect(output.table1).toEqual(expectedDataObj.table1);
551
- expect(output.table2).toEqual(expectedDataObj.table2);
575
+ _a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataObj.table1);
576
+ _b = expect;
577
+ return [4 /*yield*/, getOutputJson()];
578
+ case 3:
579
+ _b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataObj.table2);
552
580
  return [2 /*return*/];
553
581
  }
554
582
  });
555
583
  }); });
556
584
  it("should execute service 'sendArr' with relative path", function () { return __awaiter(void 0, void 0, void 0, function () {
557
- var rawData, output;
558
- return __generator(this, function (_a) {
559
- switch (_a.label) {
585
+ var _a, _b;
586
+ return __generator(this, function (_c) {
587
+ switch (_c.label) {
560
588
  case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, 'services/runRequest/sendArr', dataPathRel, undefined, authConfig)).toResolve()];
561
589
  case 1:
562
- _a.sent();
563
- return [4 /*yield*/, utils_1.readFile(process.projectDir + "/output.json")];
590
+ _c.sent();
591
+ _a = expect;
592
+ return [4 /*yield*/, getOutputJson()];
564
593
  case 2:
565
- rawData = _a.sent();
566
- output = JSON.parse(rawData);
567
- expect(output.table1).toEqual(expectedDataArr.table1);
568
- expect(output.table2).toEqual(expectedDataArr.table2);
594
+ _a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataArr.table1);
595
+ _b = expect;
596
+ return [4 /*yield*/, getOutputJson()];
597
+ case 3:
598
+ _b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataArr.table2);
569
599
  return [2 /*return*/];
570
600
  }
571
601
  });
572
602
  }); });
573
603
  it("should execute service 'sendObj' with relative path", function () { return __awaiter(void 0, void 0, void 0, function () {
574
- var rawData, output;
575
- return __generator(this, function (_a) {
576
- switch (_a.label) {
604
+ var _a, _b;
605
+ return __generator(this, function (_c) {
606
+ switch (_c.label) {
577
607
  case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, 'services/runRequest/sendObj', dataPathRel, undefined, authConfig)).toResolve()];
578
608
  case 1:
579
- _a.sent();
580
- return [4 /*yield*/, utils_1.readFile(process.projectDir + "/output.json")];
609
+ _c.sent();
610
+ _a = expect;
611
+ return [4 /*yield*/, getOutputJson()];
581
612
  case 2:
582
- rawData = _a.sent();
583
- output = JSON.parse(rawData);
584
- expect(output.table1).toEqual(expectedDataObj.table1);
585
- expect(output.table2).toEqual(expectedDataObj.table2);
613
+ _a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataObj.table1);
614
+ _b = expect;
615
+ return [4 /*yield*/, getOutputJson()];
616
+ case 3:
617
+ _b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataObj.table2);
586
618
  return [2 /*return*/];
587
619
  }
588
620
  });
@@ -76,7 +76,7 @@ var saveLog = function (outDirectory, test, log, lineBreak) {
76
76
  return __generator(this, function (_a) {
77
77
  switch (_a.label) {
78
78
  case 0:
79
- logPath = path_1.default.join(outDirectory, 'logs', test.replace(file_1.sasFileRegExp, '').split(path_1.default.sep).slice(1).join('_') + '.log');
79
+ logPath = path_1.default.join(outDirectory, 'logs', test.replace(file_1.sasFileRegExp, '').split('/').slice(1).join('_') + '.log');
80
80
  return [4 /*yield*/, utils_1.createFile(logPath, log)];
81
81
  case 1:
82
82
  _a.sent();
package/build/config.json CHANGED
@@ -235,6 +235,7 @@
235
235
  },
236
236
  "macroFolders": ["sasjs/macros"],
237
237
  "programFolders": ["sasjs/programs"],
238
+ "binaryFolders": ["sasjs/binaries"],
238
239
  "serverType": "SASVIYA",
239
240
  "targets": [
240
241
  {
@@ -39,6 +39,7 @@ export declare function getFolders(): Promise<any>;
39
39
  * @param {Target} target- the target to check program folders for.
40
40
  */
41
41
  export declare function getProgramFolders(target: Target): Promise<string[]>;
42
+ export declare function getBinaryFolders(target: Target): Promise<string[]>;
42
43
  /**
43
44
  * Returns SAS macro folders from configuration.
44
45
  * This list includes both common and target-specific folders.
@@ -71,7 +71,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
71
71
  return (mod && mod.__esModule) ? mod : { "default": mod };
72
72
  };
73
73
  Object.defineProperty(exports, "__esModule", { value: true });
74
- exports.getTestTearDown = exports.getTestSetUp = exports.overrideEnvVariables = exports.getAccessToken = exports.getAuthConfig = exports.getProjectRoot = exports.sanitizeAppLoc = exports.getMacroCorePath = exports.getStreamConfig = exports.getMacroFolders = exports.getProgramFolders = exports.getFolders = exports.saveToLocalConfig = exports.saveLocalConfigFile = exports.getLocalOrGlobalConfig = exports.getLocalConfig = exports.removeFromLocalConfig = exports.removeFromGlobalConfig = exports.saveToGlobalConfig = exports.saveGlobalRcFile = exports.getLocalRcFile = exports.getGlobalRcFile = exports.findTargetInConfiguration = exports.getConfiguration = void 0;
74
+ exports.getTestTearDown = exports.getTestSetUp = exports.overrideEnvVariables = exports.getAccessToken = exports.getAuthConfig = exports.getProjectRoot = exports.sanitizeAppLoc = exports.getMacroCorePath = exports.getStreamConfig = exports.getMacroFolders = exports.getBinaryFolders = exports.getProgramFolders = exports.getFolders = exports.saveToLocalConfig = exports.saveLocalConfigFile = exports.getLocalOrGlobalConfig = exports.getLocalConfig = exports.removeFromLocalConfig = exports.removeFromGlobalConfig = exports.saveToGlobalConfig = exports.saveGlobalRcFile = exports.getLocalRcFile = exports.getGlobalRcFile = exports.findTargetInConfiguration = exports.getConfiguration = void 0;
75
75
  var node_1 = __importDefault(require("@sasjs/adapter/node"));
76
76
  var utils_1 = require("@sasjs/utils");
77
77
  var auth_1 = require("./auth");
@@ -641,6 +641,32 @@ function getProgramFolders(target) {
641
641
  });
642
642
  }
643
643
  exports.getProgramFolders = getProgramFolders;
644
+ function getBinaryFolders(target) {
645
+ return __awaiter(this, void 0, void 0, function () {
646
+ var binaryFolders, localConfig, buildSourceFolder;
647
+ return __generator(this, function (_a) {
648
+ switch (_a.label) {
649
+ case 0:
650
+ binaryFolders = [];
651
+ return [4 /*yield*/, getLocalConfig().catch(function () { return null; })];
652
+ case 1:
653
+ localConfig = _a.sent();
654
+ if (localConfig === null || localConfig === void 0 ? void 0 : localConfig.binaryFolders) {
655
+ binaryFolders = binaryFolders.concat(localConfig.binaryFolders);
656
+ }
657
+ if (target === null || target === void 0 ? void 0 : target.binaryFolders) {
658
+ binaryFolders = binaryFolders.concat(target.binaryFolders);
659
+ }
660
+ buildSourceFolder = process.sasjsConstants.buildSourceFolder;
661
+ binaryFolders = binaryFolders.map(function (binaryFolder) {
662
+ return utils_1.getAbsolutePath(binaryFolder, buildSourceFolder);
663
+ });
664
+ return [2 /*return*/, __spreadArray([], __read(new Set(binaryFolders)))];
665
+ }
666
+ });
667
+ });
668
+ }
669
+ exports.getBinaryFolders = getBinaryFolders;
644
670
  /**
645
671
  * Returns SAS macro folders from configuration.
646
672
  * This list includes both common and target-specific folders.
@@ -6,9 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getLogFilePath = void 0;
7
7
  var path_1 = __importDefault(require("path"));
8
8
  var getLogFilePath = function (logArg, jobPath) {
9
- if (logArg === undefined || !jobPath || jobPath === '') {
9
+ if (logArg === undefined || !jobPath || jobPath === '')
10
10
  return undefined;
11
- }
12
11
  if (logArg) {
13
12
  var currentDirPath = path_1.default.isAbsolute(logArg)
14
13
  ? ''
@@ -350,7 +350,9 @@ var verifyPackageJsonContent = function (parentFolderName) {
350
350
  case 2:
351
351
  packageJsonContent = _a.sent();
352
352
  packageJson = JSON.parse(packageJsonContent);
353
- expect(packageJson.dependencies).toEqual(expect.objectContaining({ '@sasjs/core': expect.anything() }));
353
+ expect(parentFolderName.includes('minimal')
354
+ ? packageJson.devDependencies
355
+ : packageJson.dependencies).toEqual(expect.objectContaining({ '@sasjs/core': expect.anything() }));
354
356
  return [2 /*return*/];
355
357
  }
356
358
  });
@@ -410,7 +410,7 @@ function executeShellScript(filePath, logFilePath) {
410
410
  return __generator(this, function (_b) {
411
411
  switch (_b.label) {
412
412
  case 0:
413
- shellCommand = exports.isWindows() ? "" + filePath : "bash " + filePath;
413
+ shellCommand = exports.isWindows() ? "sh " + filePath : "bash " + filePath;
414
414
  result = shelljs_1.default.exec(shellCommand, { silent: true });
415
415
  if (!result.code) return [3 /*break*/, 1];
416
416
  (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error("Error: " + result.stderr);
package/package.json CHANGED
@@ -49,10 +49,10 @@
49
49
  "access": "public"
50
50
  },
51
51
  "dependencies": {
52
- "@sasjs/adapter": "3.3.1",
53
- "@sasjs/core": "^3.8.0",
52
+ "@sasjs/adapter": "3.4.1",
53
+ "@sasjs/core": "3.10.0",
54
54
  "@sasjs/lint": "1.11.2",
55
- "@sasjs/utils": "2.34.1",
55
+ "@sasjs/utils": "2.36.0",
56
56
  "chalk": "4.1.2",
57
57
  "csv-stringify": "5.6.5",
58
58
  "dotenv": "10.0.0",
@@ -67,7 +67,7 @@
67
67
  "node-graphviz": "0.1.0",
68
68
  "ora": "5.4.1",
69
69
  "rimraf": "3.0.2",
70
- "shelljs": "0.8.4",
70
+ "shelljs": "0.8.5",
71
71
  "xml": "1.0.1",
72
72
  "yargs": "17.2.1"
73
73
  },
@@ -97,5 +97,5 @@
97
97
  "typescript": "4.3.5",
98
98
  "util": "0.12.4"
99
99
  },
100
- "version": "3.5.0"
100
+ "version": "3.6.2"
101
101
  }