@sasjs/cli 4.0.6 → 4.1.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/build/build.js +3 -3
  2. package/build/commands/compile/compile.js +52 -55
  3. package/build/commands/compile/compileCommand.js +5 -3
  4. package/build/commands/compile/compileSingleFile.d.ts +5 -0
  5. package/build/commands/compile/compileSingleFile.js +36 -25
  6. package/build/commands/compile/internal/checkCompileStatus.js +7 -9
  7. package/build/commands/compile/internal/compileFile.js +2 -2
  8. package/build/commands/compile/internal/compileTestFile.d.ts +1 -1
  9. package/build/commands/compile/internal/compileTestFile.js +16 -14
  10. package/build/commands/compile/internal/getAllFolders.d.ts +3 -2
  11. package/build/commands/compile/internal/getAllFolders.js +1 -0
  12. package/build/commands/compile/internal/identifySasFile.d.ts +2 -1
  13. package/build/commands/compile/internal/identifySasFile.js +20 -11
  14. package/build/commands/compile/internal/index.d.ts +9 -0
  15. package/build/commands/compile/internal/index.js +25 -0
  16. package/build/commands/compile/internal/spec/compileTestFile.spec.js +4 -4
  17. package/build/commands/compile/internal/spec/getAllFolders.spec.js +3 -3
  18. package/build/commands/compile/spec/compareFolders.spec.js +8 -8
  19. package/build/commands/compile/spec/compile.spec.js +42 -0
  20. package/build/commands/compile/spec/compileFile.spec.js +5 -6
  21. package/build/commands/compile/spec/compileSingleFile.spec.d.ts +1 -0
  22. package/build/commands/compile/spec/compileSingleFile.spec.js +162 -0
  23. package/build/commands/compile/spec/loadDependencies.spec.js +13 -13
  24. package/build/commands/run/run.js +2 -2
  25. package/build/types/command/commandBase.js +1 -1
  26. package/package.json +1 -1
  27. package/build/commands/compile/internal/getServerType.d.ts +0 -9
  28. package/build/commands/compile/internal/getServerType.js +0 -60
@@ -95,7 +95,7 @@ var compressAndSave_1 = require("../../utils/compressAndSave");
95
95
  var config_1 = require("../../utils/config");
96
96
  var file_1 = require("../../utils/file");
97
97
  var compile_1 = require("../compile/compile");
98
- var loadDependencies_1 = require("../compile/internal/loadDependencies");
98
+ var internal_1 = require("../compile/internal");
99
99
  var config_2 = require("./internal/config");
100
100
  var getLaunchPageCode_1 = require("./internal/getLaunchPageCode");
101
101
  function build(target) {
@@ -550,7 +550,7 @@ var getDepsContent = function (deps, target, macroFolders) { return __awaiter(vo
550
550
  switch (_a.label) {
551
551
  case 0:
552
552
  dependenciesContent = '';
553
- compileTree = (0, loadDependencies_1.getCompileTree)(target);
553
+ compileTree = (0, internal_1.getCompileTree)(target);
554
554
  return [4 /*yield*/, (0, utils_1.asyncForEach)(deps, function (fp) { return __awaiter(void 0, void 0, void 0, function () {
555
555
  var _a, _b;
556
556
  return __generator(this, function (_c) {
@@ -558,7 +558,7 @@ var getDepsContent = function (deps, target, macroFolders) { return __awaiter(vo
558
558
  case 0:
559
559
  _a = dependenciesContent;
560
560
  _b = '\n';
561
- return [4 /*yield*/, (0, loadDependencies_1.loadDependencies)(target, fp, macroFolders, [], types_1.SASJsFileType.file, compileTree)];
561
+ return [4 /*yield*/, (0, internal_1.loadDependencies)(target, fp, macroFolders, [], types_1.SASJsFileType.file, compileTree)];
562
562
  case 1:
563
563
  dependenciesContent = _a + (_b +
564
564
  (_c.sent()));
@@ -76,18 +76,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
76
76
  exports.compileJobsServicesTests = exports.copyFilesToBuildFolder = exports.compile = void 0;
77
77
  var utils_1 = require("@sasjs/utils");
78
78
  var types_1 = require("@sasjs/utils/types");
79
+ var error_1 = require("@sasjs/utils/error");
79
80
  var path_1 = __importDefault(require("path"));
80
81
  var config_1 = require("../../utils/config");
81
82
  var file_1 = require("../../utils/file");
82
83
  var web_1 = require("../web/web");
83
84
  var compileModule = __importStar(require("./compile"));
84
- var checkCompileStatus_1 = require("./internal/checkCompileStatus");
85
- var compileFile_1 = require("./internal/compileFile");
86
- var getAllFolders_1 = require("./internal/getAllFolders");
87
- var compileTestFile_1 = require("./internal/compileTestFile");
88
- var copySyncFolder_1 = require("./internal/copySyncFolder");
89
- var getDestinationPath_1 = require("./internal/getDestinationPath");
90
- var loadDependencies_1 = require("./internal/loadDependencies");
85
+ var internal_1 = require("./internal");
91
86
  function compile(target, forceCompile) {
92
87
  var _a, _b;
93
88
  if (forceCompile === void 0) { forceCompile = false; }
@@ -96,7 +91,7 @@ function compile(target, forceCompile) {
96
91
  var _this = this;
97
92
  return __generator(this, function (_c) {
98
93
  switch (_c.label) {
99
- case 0: return [4 /*yield*/, (0, checkCompileStatus_1.checkCompileStatus)(target, ['tests'])
94
+ case 0: return [4 /*yield*/, (0, internal_1.checkCompileStatus)(target, ['tests'])
100
95
  // no need to compile again
101
96
  ];
102
97
  case 1:
@@ -114,7 +109,7 @@ function compile(target, forceCompile) {
114
109
  })];
115
110
  case 2:
116
111
  _c.sent();
117
- compileTree = (0, loadDependencies_1.getCompileTree)(target);
112
+ compileTree = (0, internal_1.getCompileTree)(target);
118
113
  return [4 /*yield*/, compileModule.compileJobsServicesTests(target, compileTree)];
119
114
  case 3:
120
115
  _c.sent();
@@ -127,7 +122,7 @@ function compile(target, forceCompile) {
127
122
  programFolders_1 = _c.sent();
128
123
  return [4 /*yield*/, (0, utils_1.asyncForEach)(macroFolders, function (macroFolder) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
129
124
  switch (_a.label) {
130
- case 0: return [4 /*yield*/, (0, compileTestFile_1.copyTestMacroFiles)(macroFolder)];
125
+ case 0: return [4 /*yield*/, (0, internal_1.copyTestMacroFiles)(macroFolder)];
131
126
  case 1: return [2 /*return*/, _a.sent()];
132
127
  }
133
128
  }); }); })];
@@ -144,7 +139,7 @@ function compile(target, forceCompile) {
144
139
  return [4 /*yield*/, (0, utils_1.asyncForEach)(macroTestFiles, function (macroTestFile) { return __awaiter(_this, void 0, void 0, function () {
145
140
  return __generator(this, function (_a) {
146
141
  switch (_a.label) {
147
- case 0: return [4 /*yield*/, (0, compileFile_1.compileFile)(target, path_1.default.join(buildMacroTestFolder_1, macroTestFile), macroFolders, programFolders_1, undefined, compileTree, types_1.SASJsFileType.service, '')];
142
+ case 0: return [4 /*yield*/, (0, internal_1.compileFile)(target, path_1.default.join(buildMacroTestFolder_1, macroTestFile), macroFolders, programFolders_1, undefined, compileTree, types_1.SASJsFileType.service, '')];
148
143
  case 1: return [2 /*return*/, _a.sent()];
149
144
  }
150
145
  });
@@ -155,7 +150,7 @@ function compile(target, forceCompile) {
155
150
  case 11: return [4 /*yield*/, compileTree.saveTree()];
156
151
  case 12:
157
152
  _c.sent();
158
- return [4 /*yield*/, (0, compileTestFile_1.compileTestFlow)(target).catch(function (err) { var _a; return (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error('Test flow compilation has failed.'); })];
153
+ return [4 /*yield*/, (0, internal_1.compileTestFlow)(target).catch(function (err) { var _a; return (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error('Test flow compilation has failed.'); })];
159
154
  case 13:
160
155
  _c.sent();
161
156
  return [4 /*yield*/, compileWeb(target)];
@@ -173,7 +168,7 @@ exports.compile = compile;
173
168
  function copyFilesToBuildFolder(target) {
174
169
  var _a, _b;
175
170
  return __awaiter(this, void 0, void 0, function () {
176
- var buildDestinationFolder, serviceFolders, jobFolders, error_1;
171
+ var buildDestinationFolder, serviceFolders, jobFolders, error_2;
177
172
  var _this = this;
178
173
  return __generator(this, function (_c) {
179
174
  switch (_c.label) {
@@ -186,10 +181,10 @@ function copyFilesToBuildFolder(target) {
186
181
  _c.label = 2;
187
182
  case 2:
188
183
  _c.trys.push([2, 7, , 8]);
189
- return [4 /*yield*/, (0, getAllFolders_1.getAllFolders)(target, getAllFolders_1.SasFileType.Service)];
184
+ return [4 /*yield*/, (0, internal_1.getAllFolders)(target, internal_1.SasFileType.Service)];
190
185
  case 3:
191
186
  serviceFolders = _c.sent();
192
- return [4 /*yield*/, (0, getAllFolders_1.getAllFolders)(target, getAllFolders_1.SasFileType.Job)
187
+ return [4 /*yield*/, (0, internal_1.getAllFolders)(target, internal_1.SasFileType.Job)
193
188
  // REFACTOR
194
189
  ];
195
190
  case 4:
@@ -200,7 +195,7 @@ function copyFilesToBuildFolder(target) {
200
195
  return __generator(this, function (_a) {
201
196
  switch (_a.label) {
202
197
  case 0:
203
- destinationPath = (0, getDestinationPath_1.getDestinationServicePath)(serviceFolder);
198
+ destinationPath = (0, internal_1.getDestinationServicePath)(serviceFolder);
204
199
  return [4 /*yield*/, (0, utils_1.copy)(serviceFolder, destinationPath)];
205
200
  case 1:
206
201
  _a.sent();
@@ -216,7 +211,7 @@ function copyFilesToBuildFolder(target) {
216
211
  return __generator(this, function (_a) {
217
212
  switch (_a.label) {
218
213
  case 0:
219
- destinationPath = (0, getDestinationPath_1.getDestinationJobPath)(jobFolder);
214
+ destinationPath = (0, internal_1.getDestinationJobPath)(jobFolder);
220
215
  return [4 /*yield*/, (0, utils_1.copy)(jobFolder, destinationPath)];
221
216
  case 1:
222
217
  _a.sent();
@@ -228,9 +223,9 @@ function copyFilesToBuildFolder(target) {
228
223
  _c.sent();
229
224
  return [3 /*break*/, 8];
230
225
  case 7:
231
- error_1 = _c.sent();
226
+ error_2 = _c.sent();
232
227
  (_b = process.logger) === null || _b === void 0 ? void 0 : _b.error("An error has occurred when copying files to ".concat(buildDestinationFolder, " ."));
233
- throw error_1;
228
+ throw error_2;
234
229
  case 8: return [2 /*return*/];
235
230
  }
236
231
  });
@@ -238,43 +233,46 @@ function copyFilesToBuildFolder(target) {
238
233
  }
239
234
  exports.copyFilesToBuildFolder = copyFilesToBuildFolder;
240
235
  function compileJobsServicesTests(target, compileTree) {
241
- var _a;
242
236
  return __awaiter(this, void 0, void 0, function () {
243
- var serviceFolders, jobFolders, macroFolders_1, programFolders_2, testSetUp, testTearDown, error_2;
237
+ var serviceFolders, jobFolders, macroFolders_1, programFolders_2, testSetUp, testTearDown, error_3;
244
238
  var _this = this;
245
- return __generator(this, function (_b) {
246
- switch (_b.label) {
239
+ return __generator(this, function (_a) {
240
+ switch (_a.label) {
247
241
  case 0:
248
- _b.trys.push([0, 13, , 14]);
249
- return [4 /*yield*/, (0, getAllFolders_1.getAllFolders)(target, getAllFolders_1.SasFileType.Service)];
242
+ _a.trys.push([0, 13, , 14]);
243
+ return [4 /*yield*/, (0, internal_1.getAllFolders)(target, internal_1.SasFileType.Service)];
250
244
  case 1:
251
- serviceFolders = _b.sent();
252
- return [4 /*yield*/, (0, getAllFolders_1.getAllFolders)(target, getAllFolders_1.SasFileType.Job)];
245
+ serviceFolders = _a.sent();
246
+ return [4 /*yield*/, (0, internal_1.getAllFolders)(target, internal_1.SasFileType.Job)];
253
247
  case 2:
254
- jobFolders = _b.sent();
248
+ jobFolders = _a.sent();
255
249
  return [4 /*yield*/, (0, config_1.getMacroFolders)(target)];
256
250
  case 3:
257
- macroFolders_1 = _b.sent();
251
+ macroFolders_1 = _a.sent();
258
252
  return [4 /*yield*/, (0, config_1.getProgramFolders)(target)];
259
253
  case 4:
260
- programFolders_2 = _b.sent();
254
+ programFolders_2 = _a.sent();
261
255
  return [4 /*yield*/, (0, config_1.getTestSetUp)(target)];
262
256
  case 5:
263
- testSetUp = _b.sent();
257
+ testSetUp = _a.sent();
264
258
  return [4 /*yield*/, (0, config_1.getTestTearDown)(target)];
265
259
  case 6:
266
- testTearDown = _b.sent();
260
+ testTearDown = _a.sent();
267
261
  if (!testSetUp) return [3 /*break*/, 8];
268
- return [4 /*yield*/, (0, compileTestFile_1.compileTestFile)(target, testSetUp, '', true, false, compileTree).catch(function (err) { var _a; return (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error('Test set up compilation has failed.'); })];
262
+ return [4 /*yield*/, (0, internal_1.compileTestFile)(target, testSetUp, '', true, false, compileTree).catch(function (err) {
263
+ throw (0, error_1.prefixMessage)(err, 'Test set up compilation has failed. ');
264
+ })];
269
265
  case 7:
270
- _b.sent();
271
- _b.label = 8;
266
+ _a.sent();
267
+ _a.label = 8;
272
268
  case 8:
273
269
  if (!testTearDown) return [3 /*break*/, 10];
274
- return [4 /*yield*/, (0, compileTestFile_1.compileTestFile)(target, testTearDown, '', true, false, compileTree).catch(function (err) { var _a; return (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error('Test tear down compilation has failed.'); })];
270
+ return [4 /*yield*/, (0, internal_1.compileTestFile)(target, testTearDown, '', true, false, compileTree).catch(function (err) {
271
+ throw (0, error_1.prefixMessage)(err, 'Test tear down compilation has failed. ');
272
+ })];
275
273
  case 9:
276
- _b.sent();
277
- _b.label = 10;
274
+ _a.sent();
275
+ _a.label = 10;
278
276
  case 10: return [4 /*yield*/, (0, utils_1.asyncForEach)(serviceFolders, function (serviceFolder) { return __awaiter(_this, void 0, void 0, function () {
279
277
  return __generator(this, function (_a) {
280
278
  switch (_a.label) {
@@ -286,7 +284,7 @@ function compileJobsServicesTests(target, compileTree) {
286
284
  });
287
285
  }); })];
288
286
  case 11:
289
- _b.sent();
287
+ _a.sent();
290
288
  return [4 /*yield*/, (0, utils_1.asyncForEach)(jobFolders, function (jobFolder) { return __awaiter(_this, void 0, void 0, function () {
291
289
  return __generator(this, function (_a) {
292
290
  switch (_a.label) {
@@ -298,12 +296,11 @@ function compileJobsServicesTests(target, compileTree) {
298
296
  });
299
297
  }); })];
300
298
  case 12:
301
- _b.sent();
299
+ _a.sent();
302
300
  return [3 /*break*/, 14];
303
301
  case 13:
304
- error_2 = _b.sent();
305
- (_a = process.logger) === null || _a === void 0 ? void 0 : _a.error('An error has occurred when compiling your jobs and services.');
306
- throw error_2;
302
+ error_3 = _a.sent();
303
+ throw error_3;
307
304
  case 14: return [2 /*return*/];
308
305
  }
309
306
  });
@@ -341,7 +338,7 @@ var compileServiceFolder = function (target, serviceFolder, macroFolders, progra
341
338
  return __generator(this, function (_a) {
342
339
  switch (_a.label) {
343
340
  case 0:
344
- destinationPath = (0, getDestinationPath_1.getDestinationServicePath)(serviceFolder);
341
+ destinationPath = (0, internal_1.getDestinationServicePath)(serviceFolder);
345
342
  return [4 /*yield*/, (0, utils_1.listSubFoldersInFolder)(destinationPath)];
346
343
  case 1:
347
344
  subFolders = _a.sent();
@@ -376,11 +373,11 @@ var compileServiceFolder = function (target, serviceFolder, macroFolders, progra
376
373
  case 0:
377
374
  filePath = path_1.default.join(destinationPath, fileName);
378
375
  if (!(0, utils_1.isTestFile)(filePath)) return [3 /*break*/, 2];
379
- return [4 /*yield*/, (0, compileTestFile_1.compileTestFile)(target, filePath, '', false, undefined, compileTree)];
376
+ return [4 /*yield*/, (0, internal_1.compileTestFile)(target, filePath, '', false, undefined, compileTree)];
380
377
  case 1:
381
378
  _a.sent();
382
379
  return [3 /*break*/, 4];
383
- case 2: return [4 /*yield*/, (0, compileFile_1.compileFile)(target, filePath, macroFolders, programFolders, undefined, compileTree, types_1.SASJsFileType.service, serviceFolder)];
380
+ case 2: return [4 /*yield*/, (0, internal_1.compileFile)(target, filePath, macroFolders, programFolders, undefined, compileTree, types_1.SASJsFileType.service, serviceFolder)];
384
381
  case 3:
385
382
  _a.sent();
386
383
  _a.label = 4;
@@ -406,11 +403,11 @@ var compileServiceFolder = function (target, serviceFolder, macroFolders, progra
406
403
  case 0:
407
404
  filePath = path_1.default.join(destinationPath, subFolder, fileName);
408
405
  if (!(0, utils_1.isTestFile)(filePath)) return [3 /*break*/, 2];
409
- return [4 /*yield*/, (0, compileTestFile_1.compileTestFile)(target, filePath, '', false, undefined, compileTree)];
406
+ return [4 /*yield*/, (0, internal_1.compileTestFile)(target, filePath, '', false, undefined, compileTree)];
410
407
  case 1:
411
408
  _a.sent();
412
409
  return [3 /*break*/, 4];
413
- case 2: return [4 /*yield*/, (0, compileFile_1.compileFile)(target, filePath, macroFolders, programFolders, undefined, compileTree, types_1.SASJsFileType.service, sourceFolder)];
410
+ case 2: return [4 /*yield*/, (0, internal_1.compileFile)(target, filePath, macroFolders, programFolders, undefined, compileTree, types_1.SASJsFileType.service, sourceFolder)];
414
411
  case 3:
415
412
  _a.sent();
416
413
  _a.label = 4;
@@ -436,7 +433,7 @@ var compileJobFolder = function (target, jobFolder, macroFolders, programFolders
436
433
  return __generator(this, function (_a) {
437
434
  switch (_a.label) {
438
435
  case 0:
439
- destinationPath = (0, getDestinationPath_1.getDestinationJobPath)(jobFolder);
436
+ destinationPath = (0, internal_1.getDestinationJobPath)(jobFolder);
440
437
  return [4 /*yield*/, (0, utils_1.listSubFoldersInFolder)(destinationPath)];
441
438
  case 1:
442
439
  subFolders = _a.sent();
@@ -471,11 +468,11 @@ var compileJobFolder = function (target, jobFolder, macroFolders, programFolders
471
468
  case 0:
472
469
  filePath = path_1.default.join(destinationPath, fileName);
473
470
  if (!(0, utils_1.isTestFile)(fileName)) return [3 /*break*/, 2];
474
- return [4 /*yield*/, (0, compileTestFile_1.compileTestFile)(target, filePath, '', false, undefined, compileTree)];
471
+ return [4 /*yield*/, (0, internal_1.compileTestFile)(target, filePath, '', false, undefined, compileTree)];
475
472
  case 1:
476
473
  _a.sent();
477
474
  return [3 /*break*/, 4];
478
- case 2: return [4 /*yield*/, (0, compileFile_1.compileFile)(target, filePath, macroFolders, programFolders, undefined, compileTree, types_1.SASJsFileType.job, jobFolder)];
475
+ case 2: return [4 /*yield*/, (0, internal_1.compileFile)(target, filePath, macroFolders, programFolders, undefined, compileTree, types_1.SASJsFileType.job, jobFolder)];
479
476
  case 3:
480
477
  _a.sent();
481
478
  _a.label = 4;
@@ -501,11 +498,11 @@ var compileJobFolder = function (target, jobFolder, macroFolders, programFolders
501
498
  case 0:
502
499
  filePath = path_1.default.join(destinationPath, subFolder, fileName);
503
500
  if (!(0, utils_1.isTestFile)(filePath)) return [3 /*break*/, 2];
504
- return [4 /*yield*/, (0, compileTestFile_1.compileTestFile)(target, filePath, '', false, undefined, compileTree)];
501
+ return [4 /*yield*/, (0, internal_1.compileTestFile)(target, filePath, '', false, undefined, compileTree)];
505
502
  case 1:
506
503
  _a.sent();
507
504
  return [3 /*break*/, 4];
508
- case 2: return [4 /*yield*/, (0, compileFile_1.compileFile)(target, filePath, macroFolders, programFolders, undefined, compileTree, types_1.SASJsFileType.job, sourcePath)];
505
+ case 2: return [4 /*yield*/, (0, internal_1.compileFile)(target, filePath, macroFolders, programFolders, undefined, compileTree, types_1.SASJsFileType.job, sourcePath)];
509
506
  case 3:
510
507
  _a.sent();
511
508
  _a.label = 4;
@@ -558,13 +555,13 @@ var syncFolder = function (target) { return __awaiter(void 0, void 0, void 0, fu
558
555
  case 0:
559
556
  configuration = process.sasjsConfig;
560
557
  if (!configuration.syncFolder) return [3 /*break*/, 2];
561
- return [4 /*yield*/, (0, copySyncFolder_1.copySyncFolder)(configuration.syncFolder)];
558
+ return [4 /*yield*/, (0, internal_1.copySyncFolder)(configuration.syncFolder)];
562
559
  case 1:
563
560
  _a.sent();
564
561
  _a.label = 2;
565
562
  case 2:
566
563
  if (!target.syncFolder) return [3 /*break*/, 4];
567
- return [4 /*yield*/, (0, copySyncFolder_1.copySyncFolder)(target.syncFolder)];
564
+ return [4 /*yield*/, (0, internal_1.copySyncFolder)(target.syncFolder)];
568
565
  case 3:
569
566
  _a.sent();
570
567
  _a.label = 4;
@@ -67,6 +67,7 @@ var CompileSubCommand;
67
67
  (function (CompileSubCommand) {
68
68
  CompileSubCommand["Job"] = "job";
69
69
  CompileSubCommand["Service"] = "service";
70
+ CompileSubCommand["Test"] = "test";
70
71
  CompileSubCommand["Identify"] = "identify";
71
72
  })(CompileSubCommand || (CompileSubCommand = {}));
72
73
  var syntax = 'compile [subCommand]';
@@ -94,8 +95,9 @@ var CompileCommand = /** @class */ (function (_super) {
94
95
  var subCommand = args[3];
95
96
  if ([
96
97
  CompileSubCommand.Job,
97
- CompileSubCommand.Identify,
98
- CompileSubCommand.Service
98
+ CompileSubCommand.Service,
99
+ CompileSubCommand.Test,
100
+ CompileSubCommand.Identify
99
101
  ].includes(subCommand)) {
100
102
  parseOptions = subCommandParseOptions;
101
103
  }
@@ -169,7 +171,7 @@ var CompileCommand = /** @class */ (function (_super) {
169
171
  return command_1.ReturnCode.Success;
170
172
  })
171
173
  .catch(function (err) {
172
- (0, utils_1.displayError)(err, 'An error has occurred when compiling services.');
174
+ (0, utils_1.displayError)(err, 'An error has occurred during compilation.');
173
175
  return command_1.ReturnCode.InternalError;
174
176
  })];
175
177
  case 2: return [2 /*return*/, _a.sent()];
@@ -1,4 +1,9 @@
1
1
  import { Target } from '@sasjs/utils';
2
+ export declare enum CompileSingleFileSubCommands {
3
+ Job = "job",
4
+ Service = "service",
5
+ Test = "test"
6
+ }
2
7
  export declare function compileSingleFile(target: Target, subCommand: string | undefined, source: string, output: string, insertProgramVar?: boolean, currentFolder?: string): Promise<{
3
8
  destinationPath: string;
4
9
  }>;
@@ -39,28 +39,33 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
39
39
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
40
  };
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.compileSingleFile = void 0;
42
+ exports.compileSingleFile = exports.CompileSingleFileSubCommands = void 0;
43
43
  var path_1 = __importDefault(require("path"));
44
44
  var config_1 = require("../../utils/config");
45
45
  var utils_1 = require("@sasjs/utils");
46
- var compileFile_1 = require("./internal/compileFile");
47
- var identifySasFile_1 = require("./internal/identifySasFile");
48
- var loadDependencies_1 = require("./internal/loadDependencies");
46
+ var error_1 = require("@sasjs/utils/error");
47
+ var internal_1 = require("./internal");
48
+ var CompileSingleFileSubCommands;
49
+ (function (CompileSingleFileSubCommands) {
50
+ CompileSingleFileSubCommands["Job"] = "job";
51
+ CompileSingleFileSubCommands["Service"] = "service";
52
+ CompileSingleFileSubCommands["Test"] = "test";
53
+ })(CompileSingleFileSubCommands = exports.CompileSingleFileSubCommands || (exports.CompileSingleFileSubCommands = {}));
54
+ var isCompileSingleFileSubCommands = function (command) {
55
+ return Object.values(CompileSingleFileSubCommands).includes(command);
56
+ };
49
57
  function compileSingleFile(target, subCommand, source, output, insertProgramVar, currentFolder) {
50
58
  var _a;
51
59
  if (subCommand === void 0) { subCommand = 'identify'; }
52
60
  if (insertProgramVar === void 0) { insertProgramVar = false; }
53
61
  return __awaiter(this, void 0, void 0, function () {
54
- var subCommands, commandExample, sourcePath, outputPathParts, leafFolderName, parentOutputFolder, pathExists, sourceFileName, destinationPath, sourceFileNameWithoutExt, macroFolders, programFolders, psMaxOption, programVar, compileTree, sourceFolder, _b;
62
+ var commandExample, sourcePath, outputPathParts, leafFolderName, parentOutputFolder, pathExists, sourceFileName, destinationPath, sourceFileNameWithoutExt, macroFolders, programFolders, psMaxOption, programVar, compileTree, sourceFolder, _b;
55
63
  return __generator(this, function (_c) {
56
64
  switch (_c.label) {
57
65
  case 0:
58
- subCommands = {
59
- job: 'job',
60
- service: 'service'
61
- };
62
- if (!subCommands.hasOwnProperty(subCommand) && subCommand !== 'identify') {
63
- throw new Error("Unsupported context command. Supported commands are:\n".concat(Object.keys(subCommands).join('\n')));
66
+ if (!isCompileSingleFileSubCommands(subCommand) &&
67
+ subCommand !== 'identify') {
68
+ throw new Error("Unsupported context command. Supported commands are:\n".concat(Object.values(CompileSingleFileSubCommands).join('\n')));
64
69
  }
65
70
  commandExample = 'sasjs compile <command> --source myjob.sas --target targetName -output /some/folder';
66
71
  if (!source) {
@@ -71,18 +76,20 @@ function compileSingleFile(target, subCommand, source, output, insertProgramVar,
71
76
  return [4 /*yield*/, validateSourcePath(sourcePath)];
72
77
  case 1:
73
78
  if (!(_c.sent())) {
74
- throw new Error("Provide a path to source file (eg '".concat(commandExample, "')"));
79
+ throw new Error("Provide a valid path to source file (eg '".concat(commandExample, "')"));
75
80
  }
76
81
  if (!(subCommand === 'identify')) return [3 /*break*/, 3];
77
- return [4 /*yield*/, (0, identifySasFile_1.identifySasFile)(target, sourcePath)];
82
+ return [4 /*yield*/, (0, internal_1.identifySasFile)(target, sourcePath).catch(function (err) {
83
+ throw (0, error_1.prefixMessage)(err, 'Single file compilation failed. ');
84
+ })];
78
85
  case 2:
79
86
  subCommand = _c.sent();
80
87
  _c.label = 3;
81
88
  case 3:
82
89
  (_a = process.logger) === null || _a === void 0 ? void 0 : _a.info("Compiling source file:\n- ".concat(sourcePath));
83
90
  outputPathParts = output.split(path_1.default.sep);
84
- leafFolderName = source.split(path_1.default.sep).pop();
85
91
  outputPathParts.pop(), outputPathParts.pop();
92
+ leafFolderName = source.split(path_1.default.sep).pop();
86
93
  parentOutputFolder = outputPathParts.join(path_1.default.sep);
87
94
  return [4 /*yield*/, (0, utils_1.fileExists)(parentOutputFolder)];
88
95
  case 4:
@@ -111,28 +118,32 @@ function compileSingleFile(target, subCommand, source, output, insertProgramVar,
111
118
  programVar = insertProgramVar
112
119
  ? "%let _program=".concat(target.appLoc, "/").concat(subCommand, "s/").concat(leafFolderName, "/").concat(sourceFileNameWithoutExt, ";\n").concat(psMaxOption)
113
120
  : "".concat(psMaxOption);
114
- compileTree = (0, loadDependencies_1.getCompileTree)(target);
121
+ compileTree = (0, internal_1.getCompileTree)(target);
115
122
  sourceFolder = sourcePath
116
123
  .split(path_1.default.sep)
117
124
  .slice(0, sourcePath.split(path_1.default.sep).length - 1)
118
125
  .join(path_1.default.sep);
119
126
  _b = subCommand;
120
127
  switch (_b) {
121
- case subCommands.service: return [3 /*break*/, 11];
122
- case subCommands.job: return [3 /*break*/, 13];
128
+ case CompileSingleFileSubCommands.Service: return [3 /*break*/, 11];
129
+ case CompileSingleFileSubCommands.Job: return [3 /*break*/, 13];
130
+ case CompileSingleFileSubCommands.Test: return [3 /*break*/, 15];
123
131
  }
124
- return [3 /*break*/, 15];
125
- case 11: return [4 /*yield*/, (0, compileFile_1.compileFile)(target, destinationPath, macroFolders, programFolders, programVar, compileTree, utils_1.SASJsFileType.service, sourceFolder)];
132
+ return [3 /*break*/, 17];
133
+ case 11: return [4 /*yield*/, (0, internal_1.compileFile)(target, destinationPath, macroFolders, programFolders, programVar, compileTree, utils_1.SASJsFileType.service, sourceFolder)];
126
134
  case 12:
127
135
  _c.sent();
128
- return [3 /*break*/, 16];
129
- case 13: return [4 /*yield*/, (0, compileFile_1.compileFile)(target, destinationPath, macroFolders, programFolders, programVar, compileTree, utils_1.SASJsFileType.job, sourceFolder)];
136
+ return [3 /*break*/, 17];
137
+ case 13: return [4 /*yield*/, (0, internal_1.compileFile)(target, destinationPath, macroFolders, programFolders, programVar, compileTree, utils_1.SASJsFileType.job, sourceFolder)];
130
138
  case 14:
131
139
  _c.sent();
132
- return [3 /*break*/, 16];
133
- case 15: return [3 /*break*/, 16];
134
- case 16: return [4 /*yield*/, compileTree.saveTree()];
135
- case 17:
140
+ return [3 /*break*/, 17];
141
+ case 15: return [4 /*yield*/, (0, internal_1.compileTestFile)(target, sourcePath, programVar, undefined, false, compileTree, destinationPath)];
142
+ case 16:
143
+ _c.sent();
144
+ return [3 /*break*/, 17];
145
+ case 17: return [4 /*yield*/, compileTree.saveTree()];
146
+ case 18:
136
147
  _c.sent();
137
148
  return [2 /*return*/, { destinationPath: destinationPath }];
138
149
  }
@@ -38,9 +38,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.checkCompileStatus = void 0;
40
40
  var utils_1 = require("@sasjs/utils");
41
- var compareFolders_1 = require("./compareFolders");
42
- var getAllFolders_1 = require("./getAllFolders");
43
- var getDestinationPath_1 = require("./getDestinationPath");
41
+ var _1 = require("./");
44
42
  function checkCompileStatus(target, exceptions) {
45
43
  return __awaiter(this, void 0, void 0, function () {
46
44
  var buildDestinationFolder, pathExists, _a, areServiceFoldersMatching, serviceReasons, _b, areJobFoldersMatching, jobReasons, compiled;
@@ -86,7 +84,7 @@ var checkServiceFolders = function (target, exceptions) { return __awaiter(void
86
84
  var serviceFolders, areServiceFoldersMatching, reasons;
87
85
  return __generator(this, function (_a) {
88
86
  switch (_a.label) {
89
- case 0: return [4 /*yield*/, (0, getAllFolders_1.getAllFolders)(target, getAllFolders_1.SasFileType.Service)];
87
+ case 0: return [4 /*yield*/, (0, _1.getAllFolders)(target, _1.SasFileType.Service)];
90
88
  case 1:
91
89
  serviceFolders = _a.sent();
92
90
  areServiceFoldersMatching = true;
@@ -96,8 +94,8 @@ var checkServiceFolders = function (target, exceptions) { return __awaiter(void
96
94
  return __generator(this, function (_b) {
97
95
  switch (_b.label) {
98
96
  case 0:
99
- destinationPath = (0, getDestinationPath_1.getDestinationServicePath)(serviceFolder);
100
- return [4 /*yield*/, (0, compareFolders_1.compareFolders)(serviceFolder, destinationPath, exceptions)];
97
+ destinationPath = (0, _1.getDestinationServicePath)(serviceFolder);
98
+ return [4 /*yield*/, (0, _1.compareFolders)(serviceFolder, destinationPath, exceptions)];
101
99
  case 1:
102
100
  _a = _b.sent(), equal = _a.equal, reason = _a.reason;
103
101
  areServiceFoldersMatching = areServiceFoldersMatching && equal;
@@ -125,7 +123,7 @@ var checkJobFolders = function (target, exceptions) { return __awaiter(void 0, v
125
123
  var jobFolders, areJobFoldersMatching, reasons;
126
124
  return __generator(this, function (_a) {
127
125
  switch (_a.label) {
128
- case 0: return [4 /*yield*/, (0, getAllFolders_1.getAllFolders)(target, getAllFolders_1.SasFileType.Job)];
126
+ case 0: return [4 /*yield*/, (0, _1.getAllFolders)(target, _1.SasFileType.Job)];
129
127
  case 1:
130
128
  jobFolders = _a.sent();
131
129
  areJobFoldersMatching = true;
@@ -135,8 +133,8 @@ var checkJobFolders = function (target, exceptions) { return __awaiter(void 0, v
135
133
  return __generator(this, function (_b) {
136
134
  switch (_b.label) {
137
135
  case 0:
138
- destinationPath = (0, getDestinationPath_1.getDestinationJobPath)(jobFolder);
139
- return [4 /*yield*/, (0, compareFolders_1.compareFolders)(jobFolder, destinationPath, exceptions)];
136
+ destinationPath = (0, _1.getDestinationJobPath)(jobFolder);
137
+ return [4 /*yield*/, (0, _1.compareFolders)(jobFolder, destinationPath, exceptions)];
140
138
  case 1:
141
139
  _a = _b.sent(), equal = _a.equal, reason = _a.reason;
142
140
  areJobFoldersMatching = areJobFoldersMatching && equal;
@@ -42,7 +42,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
42
42
  exports.compileFile = void 0;
43
43
  var utils_1 = require("@sasjs/utils");
44
44
  var types_1 = require("@sasjs/utils/types");
45
- var loadDependencies_1 = require("./loadDependencies");
45
+ var _1 = require("./");
46
46
  var path_1 = __importDefault(require("path"));
47
47
  /**
48
48
  * Compiles file dependencies.
@@ -61,7 +61,7 @@ function compileFile(target, filePath, macroFolders, programFolders, programVar,
61
61
  var dependencies;
62
62
  return __generator(this, function (_a) {
63
63
  switch (_a.label) {
64
- case 0: return [4 /*yield*/, (0, loadDependencies_1.loadDependencies)(target, sourceFolder
64
+ case 0: return [4 /*yield*/, (0, _1.loadDependencies)(target, sourceFolder
65
65
  ? path_1.default.join(sourceFolder, filePath.split(path_1.default.sep).pop())
66
66
  : filePath, macroFolders, programFolders, (0, utils_1.isTestFile)(filePath) ? types_1.SASJsFileType.test : fileType, compileTree)];
67
67
  case 1:
@@ -1,5 +1,5 @@
1
1
  import { CompileTree, Configuration, Target } from '@sasjs/utils';
2
2
  import { TestFlow } from '../../../types';
3
- export declare function compileTestFile(target: Target, filePath: string, testVar: string | undefined, saveToRoot: boolean | undefined, removeOriginalFile: boolean | undefined, compileTree: CompileTree): Promise<void>;
3
+ export declare function compileTestFile(target: Target, filePath: string, testVar: string | undefined, saveToRoot: boolean | undefined, removeOriginalFile: boolean | undefined, compileTree: CompileTree, destinationPath?: string): Promise<void>;
4
4
  export declare function copyTestMacroFiles(folderAbsolutePath: string): Promise<void>;
5
5
  export declare const compileTestFlow: (target: Target, config?: Configuration) => Promise<TestFlow | undefined>;
@@ -71,18 +71,18 @@ var path_1 = __importDefault(require("path"));
71
71
  var types_1 = require("../../../types");
72
72
  var config_1 = require("../../../utils/config");
73
73
  var file_1 = require("../../../utils/file");
74
- var loadDependencies_1 = require("./loadDependencies");
74
+ var _1 = require("./");
75
75
  var getFileName = function (filePath) { return path_1.default.parse(filePath).base; };
76
- function compileTestFile(target, filePath, testVar, saveToRoot, removeOriginalFile, compileTree) {
76
+ function compileTestFile(target, filePath, testVar, saveToRoot, removeOriginalFile, compileTree, destinationPath) {
77
77
  if (testVar === void 0) { testVar = ''; }
78
78
  if (saveToRoot === void 0) { saveToRoot = true; }
79
79
  if (removeOriginalFile === void 0) { removeOriginalFile = true; }
80
80
  return __awaiter(this, void 0, void 0, function () {
81
- var dependencies, _a, _b, _c, buildDestinationFolder, buildDestinationTestFolder, buildDestinationFolderName, destinationPath;
81
+ var dependencies, _a, _b, _c, buildDestinationFolder, buildDestinationTestFolder, buildDestinationFolderName;
82
82
  return __generator(this, function (_d) {
83
83
  switch (_d.label) {
84
84
  case 0:
85
- _a = loadDependencies_1.loadDependencies;
85
+ _a = _1.loadDependencies;
86
86
  _b = [target,
87
87
  (0, utils_1.getAbsolutePath)(filePath, process.projectDir)];
88
88
  return [4 /*yield*/, (0, config_1.getMacroFolders)(target)];
@@ -98,16 +98,18 @@ function compileTestFile(target, filePath, testVar, saveToRoot, removeOriginalFi
98
98
  buildDestinationFolderName = buildDestinationFolder
99
99
  .split(path_1.default.sep)
100
100
  .pop();
101
- destinationPath = path_1.default.join(buildDestinationTestFolder, saveToRoot
102
- ? filePath.split(path_1.default.sep).pop() || ''
103
- : filePath
104
- .split(path_1.default.sep)
105
- .reduce(function (acc, item, i, arr) {
106
- return acc.length
107
- ? __spreadArray(__spreadArray([], __read(acc), false), [item], false) : arr[i - 1] === buildDestinationFolderName
108
- ? __spreadArray(__spreadArray([], __read(acc), false), [item], false) : acc;
109
- }, [])
110
- .join(path_1.default.sep));
101
+ destinationPath =
102
+ destinationPath ||
103
+ path_1.default.join(buildDestinationTestFolder, saveToRoot
104
+ ? filePath.split(path_1.default.sep).pop() || ''
105
+ : filePath
106
+ .split(path_1.default.sep)
107
+ .reduce(function (acc, item, i, arr) {
108
+ return acc.length
109
+ ? __spreadArray(__spreadArray([], __read(acc), false), [item], false) : arr[i - 1] === buildDestinationFolderName
110
+ ? __spreadArray(__spreadArray([], __read(acc), false), [item], false) : acc;
111
+ }, [])
112
+ .join(path_1.default.sep));
111
113
  return [4 /*yield*/, (0, utils_1.createFile)(destinationPath, dependencies)];
112
114
  case 4:
113
115
  _d.sent();
@@ -1,6 +1,7 @@
1
1
  import { Configuration, Target } from '@sasjs/utils';
2
2
  export declare enum SasFileType {
3
3
  Service = "service",
4
- Job = "job"
4
+ Job = "job",
5
+ Test = "test"
5
6
  }
6
- export declare const getAllFolders: (target: Target, type: SasFileType, rootConfig?: Configuration) => Promise<string[]>;
7
+ export declare const getAllFolders: (target: Target, type: SasFileType.Service | SasFileType.Job, rootConfig?: Configuration) => Promise<string[]>;