@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.
- package/.github/workflows/publish.yml +1 -1
- package/auth/auth.js +6 -8
- package/auth/auth.js.map +1 -1
- package/compileTree/compileTree.js +37 -89
- package/compileTree/compileTree.js.map +1 -1
- package/conversion/convertJsDateToSasDate.js +6 -6
- package/conversion/convertJsDateToSasDate.js.map +1 -1
- package/conversion/convertSasDateToJsDate.js +8 -8
- package/conversion/convertSasDateToJsDate.js.map +1 -1
- package/error/errorModifier.js +3 -14
- package/error/errorModifier.js.map +1 -1
- package/error/serverTypeError.js +9 -54
- package/error/serverTypeError.js.map +1 -1
- package/file/csvFile.js +72 -159
- package/file/csvFile.js.map +1 -1
- package/file/file.d.ts +1 -1
- package/file/file.js +121 -264
- package/file/file.js.map +1 -1
- package/file/getAbsolutePath.js +5 -7
- package/file/getAbsolutePath.js.map +1 -1
- package/formatter/number.js +2 -3
- package/formatter/number.js.map +1 -1
- package/formatter/regexp.js +1 -1
- package/formatter/regexp.js.map +1 -1
- package/formatter/string.js +2 -6
- package/formatter/string.js.map +1 -1
- package/fs/generateCompileProgram.js +36 -145
- package/fs/generateCompileProgram.js.map +1 -1
- package/fs/hash.js +83 -186
- package/fs/hash.js.map +1 -1
- package/fs/internal/helper.js +60 -99
- package/fs/internal/helper.js.map +1 -1
- package/fs/sync.js +86 -192
- package/fs/sync.js.map +1 -1
- package/input/readAndValidateInput.js +80 -163
- package/input/readAndValidateInput.js.map +1 -1
- package/input/validators.js +9 -13
- package/input/validators.js.map +1 -1
- package/logger/isLowerThanOrEqualTo.js +2 -2
- package/logger/isLowerThanOrEqualTo.js.map +1 -1
- package/logger/isNullOrUndefined.js +1 -1
- package/logger/isNullOrUndefined.js.map +1 -1
- package/logger/logger.js +45 -104
- package/logger/logger.js.map +1 -1
- package/package.json +2 -3
- package/sasjsCli/getDependencies.js +122 -198
- package/sasjsCli/getDependencies.js.map +1 -1
- package/sasjsCli/getDependencyPaths.js +40 -131
- package/sasjsCli/getDependencyPaths.js.map +1 -1
- package/sasjsCli/getInitTerm.js +90 -192
- package/sasjsCli/getInitTerm.js.map +1 -1
- package/sasjsCli/getList.js +13 -13
- package/sasjsCli/getList.js.map +1 -1
- package/sasjsCli/getPreCode.js +41 -79
- package/sasjsCli/getPreCode.js.map +1 -1
- package/sasjsCli/loadDependenciesFile.js +63 -160
- package/sasjsCli/loadDependenciesFile.js.map +1 -1
- package/sasjsCli/prioritiseDependencyOverrides.js +10 -39
- package/sasjsCli/prioritiseDependencyOverrides.js.map +1 -1
- package/sasjsCli/validateFileRef.js +1 -1
- package/sasjsCli/validateFileRef.js.map +1 -1
- package/time/timestamp.js +16 -18
- package/time/timestamp.js.map +1 -1
- package/types/macro.js +1 -3
- package/types/macro.js.map +1 -1
- package/types/target.js +86 -197
- package/types/target.js.map +1 -1
- package/types/targetValidators.js +32 -32
- package/types/targetValidators.js.map +1 -1
- package/utils/base64.js +7 -7
- package/utils/base64.js.map +1 -1
- package/utils/bytesToSize.js +6 -8
- package/utils/bytesToSize.js.map +1 -1
- package/utils/chunk.js +2 -3
- package/utils/chunk.js.map +1 -1
- package/utils/diff.js +7 -36
- package/utils/diff.js.map +1 -1
- package/utils/executor.js +2 -2
- package/utils/executor.js.map +1 -1
- package/utils/fileTree.js +25 -37
- package/utils/fileTree.js.map +1 -1
- package/utils/url.js +2 -2
- package/utils/url.js.map +1 -1
- package/utils/utils.js +15 -63
- package/utils/utils.js.map +1 -1
package/fs/internal/helper.js
CHANGED
|
@@ -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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
71
|
-
|
|
55
|
+
const chunkFileContent = (fileContent) => {
|
|
56
|
+
const chunkedLines = (0, utils_1.chunk)(fileContent);
|
|
72
57
|
if (chunkedLines.length === 1) {
|
|
73
|
-
return
|
|
58
|
+
return ` put '${chunkedLines[0].split("'").join("''")}';\n`;
|
|
74
59
|
}
|
|
75
|
-
|
|
76
|
-
chunkedLines.forEach(
|
|
77
|
-
|
|
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
|
-
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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":"
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
return remoteHashedArray.filter(
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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
|
-
|
|
199
|
-
return
|
|
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
|
-
|
|
206
|
-
var e_2, _a;
|
|
207
|
-
if (array === void 0) { array = []; }
|
|
111
|
+
const convertHashFolderTreeToArray = (hashedFolder, array = []) => {
|
|
208
112
|
if (hashedFolder.isFile)
|
|
209
|
-
return
|
|
210
|
-
|
|
211
|
-
|
|
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":"
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/fs/sync.ts"],"names":[],"mappings":"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"}
|