@sasjs/utils 2.33.1 → 2.36.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 (74) hide show
  1. package/.github/dependabot.yml +1 -1
  2. package/.github/reviewer-lottery.yml +0 -2
  3. package/.github/workflows/publish.yml +5 -1
  4. package/.github/workflows/{build.yml → run-tests-windows.yml} +9 -6
  5. package/.github/workflows/run-tests.yml +39 -0
  6. package/.prettierrc +2 -1
  7. package/file/file.d.ts +3 -1
  8. package/file/file.js +8 -5
  9. package/file/file.js.map +1 -1
  10. package/file/getAbsolutePath.d.ts +1 -0
  11. package/file/getAbsolutePath.js +15 -0
  12. package/file/getAbsolutePath.js.map +1 -0
  13. package/file/index.d.ts +2 -1
  14. package/file/index.js +14 -1
  15. package/file/index.js.map +1 -1
  16. package/formatter/index.d.ts +1 -1
  17. package/formatter/index.js +2 -1
  18. package/formatter/index.js.map +1 -1
  19. package/formatter/string.d.ts +1 -0
  20. package/formatter/string.js +5 -1
  21. package/formatter/string.js.map +1 -1
  22. package/index.d.ts +1 -0
  23. package/index.js +1 -0
  24. package/index.js.map +1 -1
  25. package/package.json +25 -20
  26. package/sasjsCli/getDependencies.d.ts +6 -0
  27. package/sasjsCli/getDependencies.js +260 -0
  28. package/sasjsCli/getDependencies.js.map +1 -0
  29. package/sasjsCli/getDependencyPaths.d.ts +1 -0
  30. package/sasjsCli/getDependencyPaths.js +140 -0
  31. package/sasjsCli/getDependencyPaths.js.map +1 -0
  32. package/sasjsCli/getInitTerm.d.ts +26 -0
  33. package/sasjsCli/getInitTerm.js +221 -0
  34. package/sasjsCli/getInitTerm.js.map +1 -0
  35. package/sasjsCli/getList.d.ts +6 -0
  36. package/sasjsCli/getList.js +42 -0
  37. package/sasjsCli/getList.js.map +1 -0
  38. package/sasjsCli/index.d.ts +7 -0
  39. package/sasjsCli/index.js +20 -0
  40. package/sasjsCli/index.js.map +1 -0
  41. package/sasjsCli/loadDependenciesFile.d.ts +15 -0
  42. package/sasjsCli/loadDependenciesFile.js +136 -0
  43. package/sasjsCli/loadDependenciesFile.js.map +1 -0
  44. package/sasjsCli/prioritiseDependencyOverrides.d.ts +1 -0
  45. package/sasjsCli/prioritiseDependencyOverrides.js +55 -0
  46. package/sasjsCli/prioritiseDependencyOverrides.js.map +1 -0
  47. package/sasjsCli/validateFileRef.d.ts +1 -0
  48. package/sasjsCli/validateFileRef.js +17 -0
  49. package/sasjsCli/validateFileRef.js.map +1 -0
  50. package/types/config.d.ts +4 -7
  51. package/types/configuration.d.ts +1 -0
  52. package/types/index.d.ts +1 -0
  53. package/types/index.js +1 -0
  54. package/types/index.js.map +1 -1
  55. package/types/sasJsFileType.d.ts +5 -0
  56. package/types/sasJsFileType.js +10 -0
  57. package/types/sasJsFileType.js.map +1 -0
  58. package/types/target.d.ts +3 -0
  59. package/types/target.js +12 -0
  60. package/types/target.js.map +1 -1
  61. package/updateCli +3 -0
  62. package/updateServer +3 -0
  63. package/utils/chunk.d.ts +1 -0
  64. package/utils/chunk.js +12 -0
  65. package/utils/chunk.js.map +1 -0
  66. package/utils/diff.d.ts +1 -0
  67. package/utils/diff.js +39 -0
  68. package/utils/diff.js.map +1 -0
  69. package/utils/index.d.ts +3 -1
  70. package/utils/index.js +16 -4
  71. package/utils/index.js.map +1 -1
  72. package/utils/utils.d.ts +1 -0
  73. package/utils/utils.js +3 -1
  74. package/utils/utils.js.map +1 -1
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ 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;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __read = (this && this.__read) || function (o, n) {
39
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
40
+ if (!m) return o;
41
+ var i = m.call(o), r, ar = [], e;
42
+ try {
43
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
44
+ }
45
+ catch (error) { e = { error: error }; }
46
+ finally {
47
+ try {
48
+ if (r && !r.done && (m = i["return"])) m.call(i);
49
+ }
50
+ finally { if (e) throw e.error; }
51
+ }
52
+ return ar;
53
+ };
54
+ var __importDefault = (this && this.__importDefault) || function (mod) {
55
+ return (mod && mod.__esModule) ? mod : { "default": mod };
56
+ };
57
+ Object.defineProperty(exports, "__esModule", { value: true });
58
+ exports.getDependencies = exports.DependencyType = void 0;
59
+ var utils_1 = require("../utils");
60
+ var _1 = require("./");
61
+ var utils_2 = require("../utils");
62
+ var find_1 = __importDefault(require("find"));
63
+ var file_1 = require("../file");
64
+ var formatter_1 = require("../formatter");
65
+ // REFACTOR: move logic supporting SAS Macros dependencies to this file
66
+ var DependencyType;
67
+ (function (DependencyType) {
68
+ DependencyType["Macro"] = "Macro";
69
+ DependencyType["Include"] = "Include";
70
+ DependencyType["Binary"] = "Binary";
71
+ })(DependencyType = exports.DependencyType || (exports.DependencyType = {}));
72
+ var getDepInfo = function (depType, fileContent) {
73
+ var header = '';
74
+ switch (depType) {
75
+ case DependencyType.Binary:
76
+ header = 'Binary Files';
77
+ break;
78
+ case DependencyType.Include:
79
+ header = fileContent.includes('<h4> SAS Includes </h4>')
80
+ ? 'SAS Includes'
81
+ : 'SAS Programs';
82
+ break;
83
+ default:
84
+ break;
85
+ }
86
+ var depInfo = {
87
+ name: header,
88
+ header: "<h4> " + header + " </h4>",
89
+ config: (depType === DependencyType.Include
90
+ ? 'Program'
91
+ : depType).toLowerCase() + "Folders",
92
+ type: depType
93
+ };
94
+ return depInfo;
95
+ };
96
+ var getDependencies = function (fileName, fileContent, folders, depType) { return __awaiter(void 0, void 0, void 0, function () {
97
+ var depInfo, deps, uniqDeps, foundDeps_1, foundDepsNames_1, notFoundDeps, depFolder;
98
+ return __generator(this, function (_a) {
99
+ switch (_a.label) {
100
+ case 0:
101
+ folders = utils_1.uniqArray(folders);
102
+ depInfo = getDepInfo(depType, fileContent);
103
+ deps = deconstructDependency(_1.getList(depInfo.header, fileContent), depInfo);
104
+ uniqDeps = [];
105
+ deps.forEach(function (dep) {
106
+ return uniqDeps.find(function (d) { return dep.fileName === d.fileName; }) || uniqDeps.push(dep);
107
+ });
108
+ if (!uniqDeps.length) return [3 /*break*/, 2];
109
+ foundDeps_1 = [];
110
+ foundDepsNames_1 = [];
111
+ return [4 /*yield*/, utils_2.asyncForEach(folders, function (folder) { return __awaiter(void 0, void 0, void 0, function () {
112
+ return __generator(this, function (_a) {
113
+ switch (_a.label) {
114
+ case 0: return [4 /*yield*/, utils_2.asyncForEach(uniqDeps, function (dep) { return __awaiter(void 0, void 0, void 0, function () {
115
+ var filePaths, encodedFileContent, depContent;
116
+ return __generator(this, function (_a) {
117
+ switch (_a.label) {
118
+ case 0:
119
+ filePaths = find_1.default.fileSync(dep.fileName, folder);
120
+ if (!filePaths.length) return [3 /*break*/, 2];
121
+ return [4 /*yield*/, file_1.readFile(filePaths[0], depType === DependencyType.Binary ? 'base64' : undefined)];
122
+ case 1:
123
+ encodedFileContent = _a.sent();
124
+ depContent = compileDep(depType, encodedFileContent, dep.fileRef);
125
+ foundDeps_1.push(depContent);
126
+ foundDepsNames_1.push(dep.fileName);
127
+ _a.label = 2;
128
+ case 2: return [2 /*return*/];
129
+ }
130
+ });
131
+ }); })];
132
+ case 1:
133
+ _a.sent();
134
+ return [2 /*return*/];
135
+ }
136
+ });
137
+ }); })];
138
+ case 1:
139
+ _a.sent();
140
+ notFoundDeps = deps
141
+ .filter(function (dep) { return !foundDepsNames_1.includes(dep.fileName); })
142
+ .map(function (dep, i) { return i + 1 + ". '" + dep.fileName + "' with fileRef '" + dep.fileRef + "'"; })
143
+ .join('\n');
144
+ if (notFoundDeps.length) {
145
+ depFolder = depInfo.config.replace(/([A-Z]+)/g, ' $1');
146
+ depFolder = formatter_1.capitalizeFirstChar(depFolder);
147
+ throw new Error("Unable to load dependencies for: " + (fileName || '') + "\n" +
148
+ ("The following files were listed under " + depInfo.name + " but could not be found:\n") +
149
+ (notFoundDeps + "\n") +
150
+ ("Please check that they exist in the folder(s) listed in the `" + depInfo.config + "` array in your sasjsconfig.json file.\n") +
151
+ (depFolder + ":\n") +
152
+ folders.map(function (folder) { return "- " + folder; }).join('\n'));
153
+ }
154
+ return [2 /*return*/, foundDeps_1.join('\n')];
155
+ case 2: return [2 /*return*/, ''];
156
+ }
157
+ });
158
+ }); };
159
+ exports.getDependencies = getDependencies;
160
+ var deconstructDependency = function (deps, depInfo) {
161
+ return deps.map(function (dep) {
162
+ var _a = __read(dep.split(' ').filter(function (f) { return !!f; }), 2), fileName = _a[0], fileRef = _a[1];
163
+ if (!fileName) {
164
+ throw new Error(depInfo.name + " entry is empty. Please specify " + depInfo.name + " dependencies in the format: @li <filename> <fileref>");
165
+ }
166
+ if (!fileRef && depInfo.type !== DependencyType.Macro) {
167
+ throw new Error(depInfo.name + " " + fileName + " is missing fileref. Please specify " + depInfo.name + " dependencies in the format: @li <filename> <fileref>");
168
+ }
169
+ if (depInfo.type !== DependencyType.Macro)
170
+ _1.validateFileRef(fileRef);
171
+ return { fileName: fileName, fileRef: fileRef };
172
+ });
173
+ };
174
+ var compileDep = function (depType, fileContent, fileRef) {
175
+ var output = '';
176
+ if (depType === DependencyType.Binary) {
177
+ output = [
178
+ "filename _sjstmp \"%sysfunc(pathname(work))/base64_" + fileRef + "\" recfm=n;",
179
+ "data _null_;",
180
+ "file _sjstmp;\n"
181
+ ].join("\n");
182
+ var sourceLines = fileContent
183
+ .replace(/\r\n/g, '\n')
184
+ .split('\n')
185
+ .filter(function (l) { return !!l; });
186
+ sourceLines.forEach(function (line) {
187
+ var chunkedLines = utils_2.chunk(line);
188
+ if (chunkedLines.length === 1) {
189
+ output += "put '" + chunkedLines[0].split("'").join("''") + "';\n";
190
+ }
191
+ else {
192
+ var combinedLines_1 = '';
193
+ chunkedLines.forEach(function (chunkedLine, index) {
194
+ var text = "put '" + chunkedLine.split("'").join("''") + "'";
195
+ if (index !== chunkedLines.length - 1) {
196
+ text += '@;\n';
197
+ }
198
+ else {
199
+ text += ';\n';
200
+ }
201
+ combinedLines_1 += text;
202
+ });
203
+ output += combinedLines_1;
204
+ }
205
+ });
206
+ output += "run;\n";
207
+ var sasCodeToDecodeBase64 = [
208
+ "filename " + fileRef + " \"%sysfunc(pathname(work))/sasjs_" + fileRef + "\";",
209
+ "data _null_;",
210
+ "length filein 8 fileout 8;",
211
+ "filein = fopen(\"_sjstmp\",'I',4,'B');",
212
+ "fileout = fopen(\"" + fileRef + "\",'O',3,'B');",
213
+ "char= '20'x;",
214
+ "do while(fread(filein)=0);",
215
+ "length raw $4;",
216
+ "do i=1 to 4;",
217
+ "rc=fget(filein,char,1);",
218
+ "substr(raw,i,1)=char;",
219
+ "end;",
220
+ "rc = fput(fileout,input(raw,$base64X4.));",
221
+ "rc = fwrite(fileout);",
222
+ "end;",
223
+ "rc = fclose(filein);",
224
+ "rc = fclose(fileout);",
225
+ "run;",
226
+ "filename _sjstmp clear;"
227
+ ];
228
+ output += sasCodeToDecodeBase64.join("\n");
229
+ }
230
+ else if (depType === DependencyType.Include) {
231
+ output = "filename " + fileRef + " temp;\ndata _null_;\nfile " + fileRef + " lrecl=32767;\n";
232
+ var sourceLines = fileContent
233
+ .replace(/\r\n/g, '\n')
234
+ .split('\n')
235
+ .filter(function (l) { return !!l; });
236
+ sourceLines.forEach(function (line) {
237
+ var chunkedLines = utils_2.chunk(line);
238
+ if (chunkedLines.length === 1) {
239
+ output += "put '" + chunkedLines[0].split("'").join("''") + "';\n";
240
+ }
241
+ else {
242
+ var combinedLines_2 = '';
243
+ chunkedLines.forEach(function (chunkedLine, index) {
244
+ var text = "put '" + chunkedLine.split("'").join("''") + "'";
245
+ if (index !== chunkedLines.length - 1) {
246
+ text += '@;\n';
247
+ }
248
+ else {
249
+ text += ';\n';
250
+ }
251
+ combinedLines_2 += text;
252
+ });
253
+ output += combinedLines_2;
254
+ }
255
+ });
256
+ output += 'run;';
257
+ }
258
+ return output;
259
+ };
260
+ //# sourceMappingURL=getDependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDependencies.js","sourceRoot":"","sources":["../../src/sasjsCli/getDependencies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function getDependencyPaths(fileContent: string, macroFolders: string[], macroCorePath: string): Promise<string[]>;
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ 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;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __read = (this && this.__read) || function (o, n) {
39
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
40
+ if (!m) return o;
41
+ var i = m.call(o), r, ar = [], e;
42
+ try {
43
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
44
+ }
45
+ catch (error) { e = { error: error }; }
46
+ finally {
47
+ try {
48
+ if (r && !r.done && (m = i["return"])) m.call(i);
49
+ }
50
+ finally { if (e) throw e.error; }
51
+ }
52
+ return ar;
53
+ };
54
+ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
55
+ for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
56
+ to[j] = from[i];
57
+ return to;
58
+ };
59
+ var __importDefault = (this && this.__importDefault) || function (mod) {
60
+ return (mod && mod.__esModule) ? mod : { "default": mod };
61
+ };
62
+ Object.defineProperty(exports, "__esModule", { value: true });
63
+ exports.getDependencyPaths = void 0;
64
+ var find_1 = __importDefault(require("find"));
65
+ var file_1 = require("../file");
66
+ var utils_1 = require("../utils");
67
+ var _1 = require("./");
68
+ function getDependencyPaths(fileContent, macroFolders, macroCorePath) {
69
+ return __awaiter(this, void 0, void 0, function () {
70
+ var sourcePaths, dependenciesHeader, dependencies, dependencyPaths, foundDependencies, notFoundDependencies, errorMessage;
71
+ var _this = this;
72
+ return __generator(this, function (_a) {
73
+ switch (_a.label) {
74
+ case 0:
75
+ sourcePaths = __spreadArray(__spreadArray([], __read(macroFolders)), [macroCorePath]);
76
+ dependenciesHeader = fileContent.includes('<h4> SAS Macros </h4>')
77
+ ? '<h4> SAS Macros </h4>'
78
+ : '<h4> Dependencies </h4>';
79
+ dependencies = _1.getList(dependenciesHeader, fileContent).filter(function (d) {
80
+ return d.endsWith('.sas');
81
+ });
82
+ dependencyPaths = [];
83
+ foundDependencies = [];
84
+ return [4 /*yield*/, utils_1.asyncForEach(sourcePaths, function (sourcePath) { return __awaiter(_this, void 0, void 0, function () {
85
+ var errorMessage;
86
+ var _this = this;
87
+ return __generator(this, function (_a) {
88
+ switch (_a.label) {
89
+ case 0: return [4 /*yield*/, file_1.folderExists(sourcePath)];
90
+ case 1:
91
+ if (!_a.sent()) return [3 /*break*/, 3];
92
+ return [4 /*yield*/, utils_1.asyncForEach(dependencies, function (dep) { return __awaiter(_this, void 0, void 0, function () {
93
+ var filePaths, fileContent_1, _a, _b, _c, _d;
94
+ return __generator(this, function (_e) {
95
+ switch (_e.label) {
96
+ case 0:
97
+ filePaths = find_1.default.fileSync(dep, sourcePath);
98
+ if (!filePaths.length) return [3 /*break*/, 3];
99
+ return [4 /*yield*/, file_1.readFile(filePaths[0])];
100
+ case 1:
101
+ fileContent_1 = _e.sent();
102
+ foundDependencies.push(dep);
103
+ _b = (_a = dependencyPaths.push).apply;
104
+ _c = [dependencyPaths];
105
+ _d = [[]];
106
+ return [4 /*yield*/, getDependencyPaths(fileContent_1, macroFolders, macroCorePath)];
107
+ case 2:
108
+ _b.apply(_a, _c.concat([__spreadArray.apply(void 0, _d.concat([__read.apply(void 0, [(_e.sent())])]))]));
109
+ _e.label = 3;
110
+ case 3:
111
+ dependencyPaths.push.apply(dependencyPaths, __spreadArray([], __read(filePaths)));
112
+ return [2 /*return*/];
113
+ }
114
+ });
115
+ }); })];
116
+ case 2:
117
+ _a.sent();
118
+ return [3 /*break*/, 4];
119
+ case 3:
120
+ errorMessage = "Error listing dependency paths: Source path " + sourcePath + " does not exist.";
121
+ throw errorMessage;
122
+ case 4: return [2 /*return*/];
123
+ }
124
+ });
125
+ }); })];
126
+ case 1:
127
+ _a.sent();
128
+ notFoundDependencies = utils_1.diff(dependencies, foundDependencies);
129
+ if (notFoundDependencies.length) {
130
+ errorMessage = 'Unable to locate dependencies: ' + notFoundDependencies.join(', ');
131
+ throw errorMessage;
132
+ }
133
+ dependencyPaths = _1.prioritiseDependencyOverrides(dependencies, dependencyPaths, macroFolders);
134
+ return [2 /*return*/, __spreadArray([], __read(new Set(dependencyPaths)))];
135
+ }
136
+ });
137
+ });
138
+ }
139
+ exports.getDependencyPaths = getDependencyPaths;
140
+ //# sourceMappingURL=getDependencyPaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDependencyPaths.js","sourceRoot":"","sources":["../../src/sasjsCli/getDependencyPaths.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAuB;AACvB,gCAAgD;AAChD,kCAA6C;AAC7C,uBAA2D;AAE3D,SAAsB,kBAAkB,CACtC,WAAmB,EACnB,YAAsB,EACtB,aAAqB;;;;;;;oBAEf,WAAW,0CAAO,YAAY,KAAE,aAAa,EAAC,CAAA;oBAE9C,kBAAkB,GAAG,WAAW,CAAC,QAAQ,CAAC,uBAAuB,CAAC;wBACtE,CAAC,CAAC,uBAAuB;wBACzB,CAAC,CAAC,yBAAyB,CAAA;oBAEzB,YAAY,GAAG,UAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,UAAC,CAAC;wBACnE,OAAA,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAAlB,CAAkB,CACnB,CAAA;oBAEG,eAAe,GAAa,EAAE,CAAA;oBAC5B,iBAAiB,GAAa,EAAE,CAAA;oBAEtC,qBAAM,oBAAY,CAAC,WAAW,EAAE,UAAO,UAAU;;;;;4CAC3C,qBAAM,mBAAY,CAAC,UAAU,CAAC,EAAA;;6CAA9B,SAA8B,EAA9B,wBAA8B;wCAChC,qBAAM,oBAAY,CAAC,YAAY,EAAE,UAAO,GAAG;;;;;4DACnC,SAAS,GAAG,cAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;iEAC5C,SAAS,CAAC,MAAM,EAAhB,wBAAgB;4DACE,qBAAM,eAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAA;;4DAA1C,gBAAc,SAA4B;4DAChD,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;iEAC3B,CAAA,KAAA,eAAe,CAAC,IAAI,CAAA;kEAApB,eAAe;;4DACT,qBAAM,kBAAkB,CAC1B,aAAW,EACX,YAAY,EACZ,aAAa,CACd,EAAA;;4DALH,qFACK,CAAC,SAIH,CAAC,SACH;;;4DAEH,eAAe,CAAC,IAAI,OAApB,eAAe,2BAAS,SAAS,IAAC;;;;iDACnC,CAAC,EAAA;;wCAdF,SAcE,CAAA;;;wCAEI,YAAY,GAAG,iDAA+C,UAAU,qBAAkB,CAAA;wCAEhG,MAAM,YAAY,CAAA;;;;6BAErB,CAAC,EAAA;;oBAtBF,SAsBE,CAAA;oBACI,oBAAoB,GAAG,YAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAA;oBAElE,IAAI,oBAAoB,CAAC,MAAM,EAAE;wBACzB,YAAY,GAChB,iCAAiC,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;wBAErE,MAAM,YAAY,CAAA;qBACnB;oBAED,eAAe,GAAG,gCAA6B,CAC7C,YAAY,EACZ,eAAe,EACf,YAAY,CACb,CAAA;oBAED,+CAAW,IAAI,GAAG,CAAC,eAAe,CAAC,IAAC;;;;CACrC;AAzDD,gDAyDC"}
@@ -0,0 +1,26 @@
1
+ import { Configuration, SASJsFileType, Target } from '../types';
2
+ export declare enum ProgramType {
3
+ Init = "init",
4
+ Term = "term"
5
+ }
6
+ interface getInitTermParams {
7
+ configuration?: Configuration;
8
+ target?: Target;
9
+ fileType: SASJsFileType;
10
+ buildSourceFolder: string;
11
+ }
12
+ export declare const getInitTerm: ({ configuration, target, fileType, buildSourceFolder }: getInitTermParams) => Promise<{
13
+ init: string;
14
+ initPath: string;
15
+ term: string;
16
+ termPath: string;
17
+ startUpVars: string;
18
+ }>;
19
+ export declare const getProgram: ({ target, configuration, buildSourceFolder, fileType }: getInitTermParams, programType: ProgramType) => Promise<{
20
+ content: string;
21
+ filePath: string;
22
+ }>;
23
+ export declare const mockGetProgram: (module: {
24
+ getProgram: (param: getInitTermParams, programType: ProgramType) => {};
25
+ }, fakeInit: string, fakeTerm: string) => void;
26
+ export {};