@sasjs/utils 3.4.0 → 3.5.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 (85) hide show
  1. package/.github/workflows/publish.yml +1 -1
  2. package/auth/auth.js +6 -8
  3. package/auth/auth.js.map +1 -1
  4. package/compileTree/compileTree.js +37 -89
  5. package/compileTree/compileTree.js.map +1 -1
  6. package/conversion/convertJsDateToSasDate.js +6 -6
  7. package/conversion/convertJsDateToSasDate.js.map +1 -1
  8. package/conversion/convertSasDateToJsDate.js +8 -8
  9. package/conversion/convertSasDateToJsDate.js.map +1 -1
  10. package/error/errorModifier.js +3 -14
  11. package/error/errorModifier.js.map +1 -1
  12. package/error/serverTypeError.js +9 -54
  13. package/error/serverTypeError.js.map +1 -1
  14. package/file/csvFile.js +72 -159
  15. package/file/csvFile.js.map +1 -1
  16. package/file/file.d.ts +1 -1
  17. package/file/file.js +121 -264
  18. package/file/file.js.map +1 -1
  19. package/file/getAbsolutePath.js +5 -7
  20. package/file/getAbsolutePath.js.map +1 -1
  21. package/formatter/number.js +2 -3
  22. package/formatter/number.js.map +1 -1
  23. package/formatter/regexp.js +1 -1
  24. package/formatter/regexp.js.map +1 -1
  25. package/formatter/string.js +2 -6
  26. package/formatter/string.js.map +1 -1
  27. package/fs/generateCompileProgram.js +36 -145
  28. package/fs/generateCompileProgram.js.map +1 -1
  29. package/fs/hash.js +83 -186
  30. package/fs/hash.js.map +1 -1
  31. package/fs/internal/helper.js +60 -99
  32. package/fs/internal/helper.js.map +1 -1
  33. package/fs/sync.js +86 -192
  34. package/fs/sync.js.map +1 -1
  35. package/input/readAndValidateInput.js +80 -163
  36. package/input/readAndValidateInput.js.map +1 -1
  37. package/input/validators.js +9 -13
  38. package/input/validators.js.map +1 -1
  39. package/logger/isLowerThanOrEqualTo.js +2 -2
  40. package/logger/isLowerThanOrEqualTo.js.map +1 -1
  41. package/logger/isNullOrUndefined.js +1 -1
  42. package/logger/isNullOrUndefined.js.map +1 -1
  43. package/logger/logger.js +45 -104
  44. package/logger/logger.js.map +1 -1
  45. package/package.json +2 -3
  46. package/sasjsCli/getDependencies.js +122 -198
  47. package/sasjsCli/getDependencies.js.map +1 -1
  48. package/sasjsCli/getDependencyPaths.js +40 -131
  49. package/sasjsCli/getDependencyPaths.js.map +1 -1
  50. package/sasjsCli/getInitTerm.js +90 -192
  51. package/sasjsCli/getInitTerm.js.map +1 -1
  52. package/sasjsCli/getList.js +13 -13
  53. package/sasjsCli/getList.js.map +1 -1
  54. package/sasjsCli/getPreCode.js +41 -79
  55. package/sasjsCli/getPreCode.js.map +1 -1
  56. package/sasjsCli/loadDependenciesFile.js +63 -160
  57. package/sasjsCli/loadDependenciesFile.js.map +1 -1
  58. package/sasjsCli/prioritiseDependencyOverrides.js +10 -39
  59. package/sasjsCli/prioritiseDependencyOverrides.js.map +1 -1
  60. package/sasjsCli/validateFileRef.js +1 -1
  61. package/sasjsCli/validateFileRef.js.map +1 -1
  62. package/time/timestamp.js +16 -18
  63. package/time/timestamp.js.map +1 -1
  64. package/types/macro.js +1 -3
  65. package/types/macro.js.map +1 -1
  66. package/types/target.js +86 -197
  67. package/types/target.js.map +1 -1
  68. package/types/targetValidators.js +32 -32
  69. package/types/targetValidators.js.map +1 -1
  70. package/utils/base64.js +7 -7
  71. package/utils/base64.js.map +1 -1
  72. package/utils/bytesToSize.js +6 -8
  73. package/utils/bytesToSize.js.map +1 -1
  74. package/utils/chunk.js +2 -3
  75. package/utils/chunk.js.map +1 -1
  76. package/utils/diff.js +7 -36
  77. package/utils/diff.js.map +1 -1
  78. package/utils/executor.js +2 -2
  79. package/utils/executor.js.map +1 -1
  80. package/utils/fileTree.js +25 -37
  81. package/utils/fileTree.js.map +1 -1
  82. package/utils/url.js +2 -2
  83. package/utils/url.js.map +1 -1
  84. package/utils/utils.js +15 -63
  85. package/utils/utils.js.map +1 -1
@@ -8,118 +8,79 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
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 __values = (this && this.__values) || function(o) {
39
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
40
- if (m) return m.call(o);
41
- if (o && typeof o.length === "number") return {
42
- next: function () {
43
- if (o && i >= o.length) o = void 0;
44
- return { value: o && o[i++], done: !o };
45
- }
46
- };
47
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
48
- };
49
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
50
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
51
13
  };
52
14
  Object.defineProperty(exports, "__esModule", { value: true });
53
15
  exports.getCompiledMacrosCode = exports.getInitialCode = exports.chunkFileContent = exports.generateCodeForFileCreation = void 0;
54
- var path_1 = __importDefault(require("path"));
55
- var utils_1 = require("../../utils");
56
- var file_1 = require("../../file");
57
- var generateCodeForFileCreation = function (filePath, pathRelativeTo) { return __awaiter(void 0, void 0, void 0, function () {
58
- var base64EncodedFileContent, chunkedFileContent;
59
- return __generator(this, function (_a) {
60
- switch (_a.label) {
61
- case 0: return [4 /*yield*/, (0, file_1.base64EncodeFile)(filePath)];
62
- case 1:
63
- base64EncodedFileContent = _a.sent();
64
- chunkedFileContent = (0, exports.chunkFileContent)(base64EncodedFileContent);
65
- return [2 /*return*/, "\nfilename _in64 temp lrecl=99999999;\ndata _null_;\nfile _in64;\n".concat(chunkedFileContent, "\nrun;\n\nfilename _out64 \"&fsTarget").concat((0, utils_1.generatePathForSas)(filePath.replace(pathRelativeTo, '')), "\";\n\n/* convert from base64 */\ndata _null_;\nlength filein 8 fileout 8;\nfilein = fopen(\"_in64\",'I',4,'B');\nfileout = fopen(\"_out64\",'O',3,'B');\nchar= '20'x;\ndo while(fread(filein)=0);\n length raw $4 ;\n do i=1 to 4;\n rc=fget(filein,char,1);\n substr(raw,i,1)=char;\n end;\n rc = fput(fileout, input(raw,$base64X4.));\n rc =fwrite(fileout);\nend;\nrc = fclose(filein);\nrc = fclose(fileout);\nrun;\n\nfilename _in64 clear;\nfilename _out64 clear;\n")];
66
- }
67
- });
68
- }); };
16
+ const path_1 = __importDefault(require("path"));
17
+ const utils_1 = require("../../utils");
18
+ const file_1 = require("../../file");
19
+ const generateCodeForFileCreation = (filePath, pathRelativeTo) => __awaiter(void 0, void 0, void 0, function* () {
20
+ const base64EncodedFileContent = yield (0, file_1.base64EncodeFile)(filePath);
21
+ const chunkedFileContent = (0, exports.chunkFileContent)(base64EncodedFileContent);
22
+ return `
23
+ filename _in64 temp lrecl=99999999;
24
+ data _null_;
25
+ file _in64;
26
+ ${chunkedFileContent}
27
+ run;
28
+
29
+ filename _out64 "&fsTarget${(0, utils_1.generatePathForSas)(filePath.replace(pathRelativeTo, ''))}";
30
+
31
+ /* convert from base64 */
32
+ data _null_;
33
+ length filein 8 fileout 8;
34
+ filein = fopen("_in64",'I',4,'B');
35
+ fileout = fopen("_out64",'O',3,'B');
36
+ char= '20'x;
37
+ do while(fread(filein)=0);
38
+ length raw $4 ;
39
+ do i=1 to 4;
40
+ rc=fget(filein,char,1);
41
+ substr(raw,i,1)=char;
42
+ end;
43
+ rc = fput(fileout, input(raw,$base64X4.));
44
+ rc =fwrite(fileout);
45
+ end;
46
+ rc = fclose(filein);
47
+ rc = fclose(fileout);
48
+ run;
49
+
50
+ filename _in64 clear;
51
+ filename _out64 clear;
52
+ `;
53
+ });
69
54
  exports.generateCodeForFileCreation = generateCodeForFileCreation;
70
- var chunkFileContent = function (fileContent) {
71
- var chunkedLines = (0, utils_1.chunk)(fileContent);
55
+ const chunkFileContent = (fileContent) => {
56
+ const chunkedLines = (0, utils_1.chunk)(fileContent);
72
57
  if (chunkedLines.length === 1) {
73
- return " put '".concat(chunkedLines[0].split("'").join("''"), "';\n");
58
+ return ` put '${chunkedLines[0].split("'").join("''")}';\n`;
74
59
  }
75
- var combinedLines = '';
76
- chunkedLines.forEach(function (chunkedLine, index) {
77
- var text = " put '".concat(chunkedLine.split("'").join("''"), "'").concat(index !== chunkedLines.length - 1 ? '@;\n' : ';\n');
60
+ let combinedLines = '';
61
+ chunkedLines.forEach((chunkedLine, index) => {
62
+ const text = ` put '${chunkedLine.split("'").join("''")}'${index !== chunkedLines.length - 1 ? '@;\n' : ';\n'}`;
78
63
  combinedLines += text;
79
64
  });
80
65
  return combinedLines;
81
66
  };
82
67
  exports.chunkFileContent = chunkFileContent;
83
- var getInitialCode = function () { return "%global fsTarget;\n%let compiled_fsTarget=%sysfunc(pathname(work));\n%let fsTarget=%sysfunc(coalescec(&fsTarget,&compiled_fsTarget));\noptions nobomfile;\n\n%mf_mkdir(&fsTarget)\n"; };
68
+ const getInitialCode = () => `%global fsTarget;
69
+ %let compiled_fsTarget=%sysfunc(pathname(work));
70
+ %let fsTarget=%sysfunc(coalescec(&fsTarget,&compiled_fsTarget));
71
+ options nobomfile;
72
+
73
+ %mf_mkdir(&fsTarget)
74
+ `;
84
75
  exports.getInitialCode = getInitialCode;
85
- var getCompiledMacrosCode = function (macros) { return __awaiter(void 0, void 0, void 0, function () {
86
- var compiledCode, macros_1, macros_1_1, macro, macroPath, macroContent, e_1_1;
87
- var e_1, _a;
88
- return __generator(this, function (_b) {
89
- switch (_b.label) {
90
- case 0:
91
- compiledCode = '';
92
- _b.label = 1;
93
- case 1:
94
- _b.trys.push([1, 6, 7, 8]);
95
- macros_1 = __values(macros), macros_1_1 = macros_1.next();
96
- _b.label = 2;
97
- case 2:
98
- if (!!macros_1_1.done) return [3 /*break*/, 5];
99
- macro = macros_1_1.value;
100
- macroPath = path_1.default.join((0, utils_1.getMacrosPath)(), macro);
101
- return [4 /*yield*/, (0, file_1.readFile)(macroPath)];
102
- case 3:
103
- macroContent = _b.sent();
104
- compiledCode += macroContent + '\n';
105
- _b.label = 4;
106
- case 4:
107
- macros_1_1 = macros_1.next();
108
- return [3 /*break*/, 2];
109
- case 5: return [3 /*break*/, 8];
110
- case 6:
111
- e_1_1 = _b.sent();
112
- e_1 = { error: e_1_1 };
113
- return [3 /*break*/, 8];
114
- case 7:
115
- try {
116
- if (macros_1_1 && !macros_1_1.done && (_a = macros_1.return)) _a.call(macros_1);
117
- }
118
- finally { if (e_1) throw e_1.error; }
119
- return [7 /*endfinally*/];
120
- case 8: return [2 /*return*/, compiledCode];
121
- }
122
- });
123
- }); };
76
+ const getCompiledMacrosCode = (macros) => __awaiter(void 0, void 0, void 0, function* () {
77
+ let compiledCode = '';
78
+ for (const macro of macros) {
79
+ const macroPath = path_1.default.join((0, utils_1.getMacrosPath)(), macro);
80
+ const macroContent = yield (0, file_1.readFile)(macroPath);
81
+ compiledCode += macroContent + '\n';
82
+ }
83
+ return compiledCode;
84
+ });
124
85
  exports.getCompiledMacrosCode = getCompiledMacrosCode;
125
86
  //# sourceMappingURL=helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/fs/internal/helper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAuB;AACvB,qCAAsE;AACtE,mCAAuD;AAEhD,IAAM,2BAA2B,GAAG,UACzC,QAAgB,EAChB,cAAsB;;;;oBAEW,qBAAM,IAAA,uBAAgB,EAAC,QAAQ,CAAC,EAAA;;gBAA3D,wBAAwB,GAAG,SAAgC;gBAC3D,kBAAkB,GAAG,IAAA,wBAAgB,EAAC,wBAAwB,CAAC,CAAA;gBACrE,sBAAO,4EAIP,kBAAkB,kDAGQ,IAAA,0BAAkB,EAC1C,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CACrC,4dAuBF,EAAA;;;KACA,CAAA;AAvCY,QAAA,2BAA2B,+BAuCvC;AAEM,IAAM,gBAAgB,GAAG,UAAC,WAAmB;IAClD,IAAM,YAAY,GAAG,IAAA,aAAK,EAAC,WAAW,CAAC,CAAA;IAEvC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7B,OAAO,gBAAS,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAM,CAAA;KAC5D;IAED,IAAI,aAAa,GAAG,EAAE,CAAA;IAEtB,YAAY,CAAC,OAAO,CAAC,UAAC,WAAW,EAAE,KAAK;QACtC,IAAM,IAAI,GAAG,gBAAS,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cACrD,KAAK,KAAK,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAClD,CAAA;QAEF,aAAa,IAAI,IAAI,CAAA;IACvB,CAAC,CAAC,CAAA;IAEF,OAAO,aAAa,CAAA;AACtB,CAAC,CAAA;AAlBY,QAAA,gBAAgB,oBAkB5B;AAEM,IAAM,cAAc,GAAG,cAAM,OAAA,qLAMnC,EANmC,CAMnC,CAAA;AANY,QAAA,cAAc,kBAM1B;AAEM,IAAM,qBAAqB,GAAG,UAAO,MAAgB;;;;;;gBACtD,YAAY,GAAG,EAAE,CAAA;;;;gBAED,WAAA,SAAA,MAAM,CAAA;;;;gBAAf,KAAK;gBACR,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,IAAA,qBAAa,GAAE,EAAE,KAAK,CAAC,CAAA;gBAC9B,qBAAM,IAAA,eAAQ,EAAC,SAAS,CAAC,EAAA;;gBAAxC,YAAY,GAAG,SAAyB;gBAE9C,YAAY,IAAI,YAAY,GAAG,IAAI,CAAA;;;;;;;;;;;;;;;;oBAGrC,sBAAO,YAAY,EAAA;;;KACpB,CAAA;AAXY,QAAA,qBAAqB,yBAWjC"}
1
+ {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/fs/internal/helper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAuB;AACvB,uCAAsE;AACtE,qCAAuD;AAEhD,MAAM,2BAA2B,GAAG,CACzC,QAAgB,EAChB,cAAsB,EACtB,EAAE;IACF,MAAM,wBAAwB,GAAG,MAAM,IAAA,uBAAgB,EAAC,QAAQ,CAAC,CAAA;IACjE,MAAM,kBAAkB,GAAG,IAAA,wBAAgB,EAAC,wBAAwB,CAAC,CAAA;IACrE,OAAO;;;;EAIP,kBAAkB;;;4BAGQ,IAAA,0BAAkB,EAC1C,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CACrC;;;;;;;;;;;;;;;;;;;;;;;CAuBF,CAAA;AACD,CAAC,CAAA,CAAA;AAvCY,QAAA,2BAA2B,+BAuCvC;AAEM,MAAM,gBAAgB,GAAG,CAAC,WAAmB,EAAE,EAAE;IACtD,MAAM,YAAY,GAAG,IAAA,aAAK,EAAC,WAAW,CAAC,CAAA;IAEvC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7B,OAAO,SAAS,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;KAC5D;IAED,IAAI,aAAa,GAAG,EAAE,CAAA;IAEtB,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;QAC1C,MAAM,IAAI,GAAG,SAAS,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IACrD,KAAK,KAAK,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAC/C,EAAE,CAAA;QAEF,aAAa,IAAI,IAAI,CAAA;IACvB,CAAC,CAAC,CAAA;IAEF,OAAO,aAAa,CAAA;AACtB,CAAC,CAAA;AAlBY,QAAA,gBAAgB,oBAkB5B;AAEM,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC;;;;;;CAMnC,CAAA;AANY,QAAA,cAAc,kBAM1B;AAEM,MAAM,qBAAqB,GAAG,CAAO,MAAgB,EAAE,EAAE;IAC9D,IAAI,YAAY,GAAG,EAAE,CAAA;IAErB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC1B,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,IAAA,qBAAa,GAAE,EAAE,KAAK,CAAC,CAAA;QACnD,MAAM,YAAY,GAAG,MAAM,IAAA,eAAQ,EAAC,SAAS,CAAC,CAAA;QAE9C,YAAY,IAAI,YAAY,GAAG,IAAI,CAAA;KACpC;IAED,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA,CAAA;AAXY,QAAA,qBAAqB,yBAWjC"}
package/fs/sync.js CHANGED
@@ -8,217 +8,111 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
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 __values = (this && this.__values) || function(o) {
39
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
40
- if (m) return m.call(o);
41
- if (o && typeof o.length === "number") return {
42
- next: function () {
43
- if (o && i >= o.length) o = void 0;
44
- return { value: o && o[i++], done: !o };
45
- }
46
- };
47
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
48
- };
49
- var __read = (this && this.__read) || function (o, n) {
50
- var m = typeof Symbol === "function" && o[Symbol.iterator];
51
- if (!m) return o;
52
- var i = m.call(o), r, ar = [], e;
53
- try {
54
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
55
- }
56
- catch (error) { e = { error: error }; }
57
- finally {
58
- try {
59
- if (r && !r.done && (m = i["return"])) m.call(i);
60
- }
61
- finally { if (e) throw e.error; }
62
- }
63
- return ar;
64
- };
65
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
66
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
67
- if (ar || !(i in from)) {
68
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
69
- ar[i] = from[i];
70
- }
71
- }
72
- return to.concat(ar || Array.prototype.slice.call(from));
73
- };
74
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
75
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
76
13
  };
77
14
  Object.defineProperty(exports, "__esModule", { value: true });
78
15
  exports.findResourcesNotPresentLocally = exports.generateProgramToSyncHashDiff = exports.generateProgramToGetRemoteHash = void 0;
79
- var path_1 = __importDefault(require("path"));
80
- var helper_1 = require("./internal/helper");
81
- var utils_1 = require("../utils");
16
+ const path_1 = __importDefault(require("path"));
17
+ const helper_1 = require("./internal/helper");
18
+ const utils_1 = require("../utils");
82
19
  // we need to inject this line to generated sas program
83
20
  // ls means line size and ps means page size
84
21
  // bigger page = less chance of hitting the page number
85
- var OPTIONS = 'options ls=max ps=max;';
86
- var generateProgramToGetRemoteHash = function (remotePath) { return __awaiter(void 0, void 0, void 0, function () {
87
- var compiledMacrosCode, codeForHashCreation, code;
88
- return __generator(this, function (_a) {
89
- switch (_a.label) {
90
- case 0: return [4 /*yield*/, (0, helper_1.getCompiledMacrosCode)([
91
- 'mp_hashdirectory.sas',
92
- 'mp_jsonout.sas',
93
- 'mp_dirlist.sas',
94
- 'mf_existds.sas',
95
- 'mf_getvarlist.sas',
96
- 'mf_wordsinstr1butnotstr2.sas',
97
- 'mp_dropmembers.sas',
98
- 'mf_isblank.sas'
99
- ])];
100
- case 1:
101
- compiledMacrosCode = _a.sent();
102
- codeForHashCreation = getCodeForHashCreation();
103
- code = OPTIONS + compiledMacrosCode + codeForHashCreation;
104
- return [2 /*return*/, setTargetAtStart(code, remotePath)];
105
- }
106
- });
107
- }); };
22
+ const OPTIONS = 'options ls=max ps=max;';
23
+ const generateProgramToGetRemoteHash = (remotePath) => __awaiter(void 0, void 0, void 0, function* () {
24
+ const compiledMacrosCode = yield (0, helper_1.getCompiledMacrosCode)([
25
+ 'mp_hashdirectory.sas',
26
+ 'mp_jsonout.sas',
27
+ 'mp_dirlist.sas',
28
+ 'mf_existds.sas',
29
+ 'mf_getvarlist.sas',
30
+ 'mf_wordsinstr1butnotstr2.sas',
31
+ 'mp_dropmembers.sas',
32
+ 'mf_isblank.sas'
33
+ ]);
34
+ const codeForHashCreation = getCodeForHashCreation();
35
+ const code = OPTIONS + compiledMacrosCode + codeForHashCreation;
36
+ return setTargetAtStart(code, remotePath);
37
+ });
108
38
  exports.generateProgramToGetRemoteHash = generateProgramToGetRemoteHash;
109
- var generateProgramToSyncHashDiff = function (hashedFolder, remotePath) { return __awaiter(void 0, void 0, void 0, function () {
110
- var compiledMacrosCode, initialProgramContent, pathRelativeTo, folderCreationCode, codeForHashCreation, code;
111
- return __generator(this, function (_a) {
112
- switch (_a.label) {
113
- case 0: return [4 /*yield*/, (0, helper_1.getCompiledMacrosCode)([
114
- 'mp_hashdirectory.sas',
115
- 'mp_jsonout.sas',
116
- 'mf_mkdir.sas',
117
- 'mp_dirlist.sas',
118
- 'mf_existds.sas',
119
- 'mf_getvarlist.sas',
120
- 'mf_wordsinstr1butnotstr2.sas',
121
- 'mp_dropmembers.sas',
122
- 'mf_isblank.sas'
123
- ])];
124
- case 1:
125
- compiledMacrosCode = _a.sent();
126
- initialProgramContent = (0, helper_1.getInitialCode)();
127
- pathRelativeTo = hashedFolder.absolutePath.endsWith(path_1.default.sep)
128
- ? hashedFolder.absolutePath.slice(0, -1)
129
- : hashedFolder.absolutePath;
130
- return [4 /*yield*/, generateCodeForFolderCreation(hashedFolder, pathRelativeTo)];
131
- case 2:
132
- folderCreationCode = _a.sent();
133
- codeForHashCreation = getCodeForHashCreation();
134
- code = OPTIONS +
135
- compiledMacrosCode +
136
- initialProgramContent +
137
- folderCreationCode +
138
- codeForHashCreation;
139
- return [2 /*return*/, setTargetAtStart(code, remotePath)];
140
- }
141
- });
142
- }); };
39
+ const generateProgramToSyncHashDiff = (hashedFolder, remotePath) => __awaiter(void 0, void 0, void 0, function* () {
40
+ const compiledMacrosCode = yield (0, helper_1.getCompiledMacrosCode)([
41
+ 'mp_hashdirectory.sas',
42
+ 'mp_jsonout.sas',
43
+ 'mf_mkdir.sas',
44
+ 'mp_dirlist.sas',
45
+ 'mf_existds.sas',
46
+ 'mf_getvarlist.sas',
47
+ 'mf_wordsinstr1butnotstr2.sas',
48
+ 'mp_dropmembers.sas',
49
+ 'mf_isblank.sas'
50
+ ]);
51
+ const initialProgramContent = (0, helper_1.getInitialCode)();
52
+ const pathRelativeTo = hashedFolder.absolutePath.endsWith(path_1.default.sep)
53
+ ? hashedFolder.absolutePath.slice(0, -1)
54
+ : hashedFolder.absolutePath;
55
+ const folderCreationCode = yield generateCodeForFolderCreation(hashedFolder, pathRelativeTo);
56
+ const codeForHashCreation = getCodeForHashCreation();
57
+ const code = OPTIONS +
58
+ compiledMacrosCode +
59
+ initialProgramContent +
60
+ folderCreationCode +
61
+ codeForHashCreation;
62
+ return setTargetAtStart(code, remotePath);
63
+ });
143
64
  exports.generateProgramToSyncHashDiff = generateProgramToSyncHashDiff;
144
- var findResourcesNotPresentLocally = function (localHash, remoteHashMap) {
145
- var localHashedArray = convertHashFolderTreeToArray(localHash);
146
- var remoteHashedArray = Object.keys(remoteHashMap);
147
- return remoteHashedArray.filter(function (item) { return !localHashedArray.includes(item); });
65
+ const findResourcesNotPresentLocally = (localHash, remoteHashMap) => {
66
+ const localHashedArray = convertHashFolderTreeToArray(localHash);
67
+ const remoteHashedArray = Object.keys(remoteHashMap);
68
+ return remoteHashedArray.filter((item) => !localHashedArray.includes(item));
148
69
  };
149
70
  exports.findResourcesNotPresentLocally = findResourcesNotPresentLocally;
150
- var generateCodeForFolderCreation = function (hashedFolder, pathRelativeTo, resultCode) {
151
- if (resultCode === void 0) { resultCode = ''; }
152
- return __awaiter(void 0, void 0, void 0, function () {
153
- var _a, _b, member, _c, e_1_1;
154
- var e_1, _d;
155
- return __generator(this, function (_e) {
156
- switch (_e.label) {
157
- case 0:
158
- _e.trys.push([0, 7, 8, 9]);
159
- _a = __values(hashedFolder.members), _b = _a.next();
160
- _e.label = 1;
161
- case 1:
162
- if (!!_b.done) return [3 /*break*/, 6];
163
- member = _b.value;
164
- if (!member.isFile) return [3 /*break*/, 3];
165
- _c = resultCode;
166
- return [4 /*yield*/, (0, helper_1.generateCodeForFileCreation)(member.absolutePath, pathRelativeTo)];
167
- case 2:
168
- resultCode = _c + _e.sent();
169
- return [3 /*break*/, 5];
170
- case 3:
171
- resultCode += "%mf_mkdir(&fsTarget".concat((0, utils_1.generatePathForSas)(member.absolutePath.replace(pathRelativeTo, '')), ")\n");
172
- return [4 /*yield*/, generateCodeForFolderCreation(member, pathRelativeTo, resultCode)];
173
- case 4:
174
- resultCode = _e.sent();
175
- _e.label = 5;
176
- case 5:
177
- _b = _a.next();
178
- return [3 /*break*/, 1];
179
- case 6: return [3 /*break*/, 9];
180
- case 7:
181
- e_1_1 = _e.sent();
182
- e_1 = { error: e_1_1 };
183
- return [3 /*break*/, 9];
184
- case 8:
185
- try {
186
- if (_b && !_b.done && (_d = _a.return)) _d.call(_a);
187
- }
188
- finally { if (e_1) throw e_1.error; }
189
- return [7 /*endfinally*/];
190
- case 9: return [2 /*return*/, resultCode];
191
- }
192
- });
193
- });
194
- };
195
- var getCodeForHashCreation = function () {
196
- return "/* Get Hashes */\n%mp_hashdirectory(&fsTarget,maxDepth=MAX,outds=work.hashes)\n\n/* Prepare Response JSON */\nfilename tmp temp;\n%mp_jsonout(OPEN,jref=tmp)\n%mp_jsonout(OBJ,hashes,fmt=N,jref=tmp)\n%mp_jsonout(CLOSE,jref=tmp)\n\n/* Print to Log */\ndata _null_;\n retain eof;\n infile tmp end=eof lrecl=10000;\n if _n_=1 then putlog '>>weboutBEGIN<<';\n input;\n putlog _infile_;\n if eof then putlog '>>weboutEND<<';\nrun;\n";
71
+ const generateCodeForFolderCreation = (hashedFolder, pathRelativeTo, resultCode = '') => __awaiter(void 0, void 0, void 0, function* () {
72
+ for (const member of hashedFolder.members) {
73
+ if (member.isFile) {
74
+ resultCode += yield (0, helper_1.generateCodeForFileCreation)(member.absolutePath, pathRelativeTo);
75
+ }
76
+ else {
77
+ resultCode += `%mf_mkdir(&fsTarget${(0, utils_1.generatePathForSas)(member.absolutePath.replace(pathRelativeTo, ''))})\n`;
78
+ resultCode = yield generateCodeForFolderCreation(member, pathRelativeTo, resultCode);
79
+ }
80
+ }
81
+ return resultCode;
82
+ });
83
+ const getCodeForHashCreation = () => {
84
+ return `/* Get Hashes */
85
+ %mp_hashdirectory(&fsTarget,maxDepth=MAX,outds=work.hashes)
86
+
87
+ /* Prepare Response JSON */
88
+ filename tmp temp;
89
+ %mp_jsonout(OPEN,jref=tmp)
90
+ %mp_jsonout(OBJ,hashes,fmt=N,jref=tmp)
91
+ %mp_jsonout(CLOSE,jref=tmp)
92
+
93
+ /* Print to Log */
94
+ data _null_;
95
+ retain eof;
96
+ infile tmp end=eof lrecl=10000;
97
+ if _n_=1 then putlog '>>weboutBEGIN<<';
98
+ input;
99
+ putlog _infile_;
100
+ if eof then putlog '>>weboutEND<<';
101
+ run;
102
+ `;
197
103
  };
198
- var setTargetAtStart = function (code, targetPath) {
199
- return "%let fsTarget=".concat((0, utils_1.generatePathForSas)(targetPath), ";\n").concat(code);
104
+ const setTargetAtStart = (code, targetPath) => {
105
+ return `%let fsTarget=${(0, utils_1.generatePathForSas)(targetPath)};\n${code}`;
200
106
  };
201
107
  /**
202
108
  * convert hash folder tree to an array of relative paths,
203
109
  * the returned array will be used to check the resources that are present on remote but not local
204
110
  */
205
- var convertHashFolderTreeToArray = function (hashedFolder, array) {
206
- var e_2, _a;
207
- if (array === void 0) { array = []; }
111
+ const convertHashFolderTreeToArray = (hashedFolder, array = []) => {
208
112
  if (hashedFolder.isFile)
209
- return __spreadArray(__spreadArray([], __read(array), false), [hashedFolder.relativePath], false);
210
- try {
211
- for (var _b = __values(hashedFolder.members), _c = _b.next(); !_c.done; _c = _b.next()) {
212
- var member = _c.value;
213
- array = convertHashFolderTreeToArray(member, array);
214
- }
215
- }
216
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
217
- finally {
218
- try {
219
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
220
- }
221
- finally { if (e_2) throw e_2.error; }
113
+ return [...array, hashedFolder.relativePath];
114
+ for (const member of hashedFolder.members) {
115
+ array = convertHashFolderTreeToArray(member, array);
222
116
  }
223
117
  array.push(hashedFolder.relativePath);
224
118
  return array;
package/fs/sync.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/fs/sync.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAuB;AACvB,4CAI0B;AAE1B,kCAA6C;AAE7C,uDAAuD;AACvD,4CAA4C;AAC5C,uDAAuD;AACvD,IAAM,OAAO,GAAG,wBAAwB,CAAA;AAEjC,IAAM,8BAA8B,GAAG,UAAO,UAAkB;;;;oBAC1C,qBAAM,IAAA,8BAAqB,EAAC;oBACrD,sBAAsB;oBACtB,gBAAgB;oBAChB,gBAAgB;oBAChB,gBAAgB;oBAChB,mBAAmB;oBACnB,8BAA8B;oBAC9B,oBAAoB;oBACpB,gBAAgB;iBACjB,CAAC,EAAA;;gBATI,kBAAkB,GAAG,SASzB;gBAEI,mBAAmB,GAAG,sBAAsB,EAAE,CAAA;gBAE9C,IAAI,GAAG,OAAO,GAAG,kBAAkB,GAAG,mBAAmB,CAAA;gBAE/D,sBAAO,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAA;;;KAC1C,CAAA;AAjBY,QAAA,8BAA8B,kCAiB1C;AAEM,IAAM,6BAA6B,GAAG,UAC3C,YAA0B,EAC1B,UAAkB;;;;oBAES,qBAAM,IAAA,8BAAqB,EAAC;oBACrD,sBAAsB;oBACtB,gBAAgB;oBAChB,cAAc;oBACd,gBAAgB;oBAChB,gBAAgB;oBAChB,mBAAmB;oBACnB,8BAA8B;oBAC9B,oBAAoB;oBACpB,gBAAgB;iBACjB,CAAC,EAAA;;gBAVI,kBAAkB,GAAG,SAUzB;gBAEI,qBAAqB,GAAG,IAAA,uBAAc,GAAE,CAAA;gBAExC,cAAc,GAAG,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAI,CAAC,GAAG,CAAC;oBACjE,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAA;gBAEF,qBAAM,6BAA6B,CAC5D,YAAY,EACZ,cAAc,CACf,EAAA;;gBAHK,kBAAkB,GAAG,SAG1B;gBAEK,mBAAmB,GAAG,sBAAsB,EAAE,CAAA;gBAE9C,IAAI,GACR,OAAO;oBACP,kBAAkB;oBAClB,qBAAqB;oBACrB,kBAAkB;oBAClB,mBAAmB,CAAA;gBAErB,sBAAO,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAA;;;KAC1C,CAAA;AArCY,QAAA,6BAA6B,iCAqCzC;AAEM,IAAM,8BAA8B,GAAG,UAC5C,SAAuB,EACvB,aAAwC;IAExC,IAAM,gBAAgB,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAA;IAChE,IAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAEpD,OAAO,iBAAiB,CAAC,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAhC,CAAgC,CAAC,CAAA;AAC7E,CAAC,CAAA;AARY,QAAA,8BAA8B,kCAQ1C;AAED,IAAM,6BAA6B,GAAG,UACpC,YAA0B,EAC1B,cAAsB,EACtB,UAAuB;IAAvB,2BAAA,EAAA,eAAuB;;;;;;;;oBAEF,KAAA,SAAA,YAAY,CAAC,OAAO,CAAA;;;;oBAA9B,MAAM;yBACX,MAAM,CAAC,MAAM,EAAb,wBAAa;oBACf,KAAA,UAAU,CAAA;oBAAI,qBAAM,IAAA,oCAA2B,EAC7C,MAAM,CAAC,YAAY,EACnB,cAAc,CACf,EAAA;;oBAHD,UAAU,GAAV,KAAc,SAGb,CAAA;;;oBAED,UAAU,IAAI,6BAAsB,IAAA,0BAAkB,EACpD,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAChD,QAAK,CAAA;oBACO,qBAAM,6BAA6B,CAC9C,MAAsB,EACtB,cAAc,EACd,UAAU,CACX,EAAA;;oBAJD,UAAU,GAAG,SAIZ,CAAA;;;;;;;;;;;;;;;;wBAIL,sBAAO,UAAU,EAAA;;;;CAClB,CAAA;AAED,IAAM,sBAAsB,GAAG;IAC7B,OAAO,ibAkBR,CAAA;AACD,CAAC,CAAA;AAED,IAAM,gBAAgB,GAAG,UAAC,IAAY,EAAE,UAAkB;IACxD,OAAO,wBAAiB,IAAA,0BAAkB,EAAC,UAAU,CAAC,gBAAM,IAAI,CAAE,CAAA;AACpE,CAAC,CAAA;AAED;;;GAGG;AAEH,IAAM,4BAA4B,GAAG,UACnC,YAA0B,EAC1B,KAAoB;;IAApB,sBAAA,EAAA,UAAoB;IAEpB,IAAI,YAAY,CAAC,MAAM;QAAE,8CAAW,KAAK,YAAE,YAAY,CAAC,YAAY,UAAC;;QAErE,KAAqB,IAAA,KAAA,SAAA,YAAY,CAAC,OAAO,CAAA,gBAAA,4BAAE;YAAtC,IAAM,MAAM,WAAA;YACf,KAAK,GAAG,4BAA4B,CAAC,MAAsB,EAAE,KAAK,CAAC,CAAA;SACpE;;;;;;;;;IAED,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;IAErC,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/fs/sync.ts"],"names":[],"mappings":"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"}