@sasjs/utils 2.48.2 → 2.49.1
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/fs/generateCompileProgram.d.ts +1 -0
- package/fs/generateCompileProgram.js +154 -0
- package/fs/generateCompileProgram.js.map +1 -0
- package/fs/hash.d.ts +22 -0
- package/fs/hash.js +225 -0
- package/fs/hash.js.map +1 -0
- package/fs/index.d.ts +3 -0
- package/fs/index.js +13 -0
- package/fs/index.js.map +1 -0
- package/fs/internal/helper.d.ts +4 -0
- package/fs/internal/helper.js +125 -0
- package/fs/internal/helper.js.map +1 -0
- package/fs/sync.d.ts +6 -0
- package/fs/sync.js +208 -0
- package/fs/sync.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/macros/mf_abort.sas +27 -0
- package/macros/mf_dedup.sas +53 -0
- package/macros/mf_deletefile.sas +31 -0
- package/macros/mf_existds.sas +30 -0
- package/macros/mf_existfeature.sas +59 -0
- package/macros/mf_existfileref.sas +33 -0
- package/macros/mf_existfunction.sas +37 -0
- package/macros/mf_existvar.sas +39 -0
- package/macros/mf_existvarlist.sas +56 -0
- package/macros/mf_fmtdttm.sas +42 -0
- package/macros/mf_getapploc.sas +78 -0
- package/macros/mf_getattrc.sas +34 -0
- package/macros/mf_getattrn.sas +34 -0
- package/macros/mf_getengine.sas +54 -0
- package/macros/mf_getfilesize.sas +64 -0
- package/macros/mf_getfmtlist.sas +61 -0
- package/macros/mf_getfmtname.sas +44 -0
- package/macros/mf_getkeyvalue.sas +32 -0
- package/macros/mf_getplatform.sas +75 -0
- package/macros/mf_getquotedstr.sas +57 -0
- package/macros/mf_getschema.sas +43 -0
- package/macros/mf_getuniquefileref.sas +60 -0
- package/macros/mf_getuniquelibref.sas +57 -0
- package/macros/mf_getuniquename.sas +22 -0
- package/macros/mf_getuser.sas +44 -0
- package/macros/mf_getvalue.sas +36 -0
- package/macros/mf_getvarcount.sas +49 -0
- package/macros/mf_getvarformat.sas +72 -0
- package/macros/mf_getvarlen.sas +56 -0
- package/macros/mf_getvarlist.sas +74 -0
- package/macros/mf_getvarnum.sas +58 -0
- package/macros/mf_getvartype.sas +52 -0
- package/macros/mf_getxengine.sas +43 -0
- package/macros/mf_increment.sas +29 -0
- package/macros/mf_isblank.sas +27 -0
- package/macros/mf_isdir.sas +34 -0
- package/macros/mf_isint.sas +36 -0
- package/macros/mf_islibds.sas +40 -0
- package/macros/mf_loc.sas +29 -0
- package/macros/mf_mkdir.sas +67 -0
- package/macros/mf_mval.sas +19 -0
- package/macros/mf_nobs.sas +26 -0
- package/macros/mf_trimstr.sas +50 -0
- package/macros/mf_uid.sas +21 -0
- package/macros/mf_verifymacvars.sas +72 -0
- package/macros/mf_wordsinstr1andstr2.sas +53 -0
- package/macros/mf_wordsinstr1butnotstr2.sas +54 -0
- package/macros/mf_writefile.sas +67 -0
- package/macros/mp_abort.sas +301 -0
- package/macros/mp_appendfile.sas +57 -0
- package/macros/mp_applyformats.sas +181 -0
- package/macros/mp_assert.sas +56 -0
- package/macros/mp_assertcols.sas +145 -0
- package/macros/mp_assertcolvals.sas +168 -0
- package/macros/mp_assertdsobs.sas +121 -0
- package/macros/mp_assertscope.sas +147 -0
- package/macros/mp_base64copy.sas +117 -0
- package/macros/mp_binarycopy.sas +79 -0
- package/macros/mp_chop.sas +194 -0
- package/macros/mp_cleancsv.sas +78 -0
- package/macros/mp_cntlout.sas +85 -0
- package/macros/mp_copyfolder.sas +84 -0
- package/macros/mp_coretable.sas +73 -0
- package/macros/mp_createconstraints.sas +70 -0
- package/macros/mp_createwebservice.sas +32 -0
- package/macros/mp_csv2ds.sas +140 -0
- package/macros/mp_deleteconstraints.sas +52 -0
- package/macros/mp_deletefolder.sas +70 -0
- package/macros/mp_dictionary.sas +52 -0
- package/macros/mp_dirlist.sas +263 -0
- package/macros/mp_distinctfmtvalues.sas +50 -0
- package/macros/mp_dropmembers.sas +46 -0
- package/macros/mp_ds2cards.sas +291 -0
- package/macros/mp_ds2csv.sas +212 -0
- package/macros/mp_ds2ddl.sas +30 -0
- package/macros/mp_ds2fmtds.sas +105 -0
- package/macros/mp_ds2inserts.sas +180 -0
- package/macros/mp_ds2md.sas +103 -0
- package/macros/mp_ds2squeeze.sas +120 -0
- package/macros/mp_dsmeta.sas +110 -0
- package/macros/mp_filtercheck.sas +251 -0
- package/macros/mp_filtergenerate.sas +105 -0
- package/macros/mp_filterstore.sas +254 -0
- package/macros/mp_filtervalidate.sas +105 -0
- package/macros/mp_getcols.sas +67 -0
- package/macros/mp_getconstraints.sas +115 -0
- package/macros/mp_getdbml.sas +335 -0
- package/macros/mp_getddl.sas +400 -0
- package/macros/mp_getformats.sas +124 -0
- package/macros/mp_getmaxvarlengths.sas +130 -0
- package/macros/mp_getpk.sas +281 -0
- package/macros/mp_gsubfile.sas +58 -0
- package/macros/mp_guesspk.sas +332 -0
- package/macros/mp_hashdataset.sas +91 -0
- package/macros/mp_hashdirectory.sas +162 -0
- package/macros/mp_include.sas +106 -0
- package/macros/mp_init.sas +76 -0
- package/macros/mp_jsonout.sas +406 -0
- package/macros/mp_lib2cards.sas +78 -0
- package/macros/mp_lib2inserts.sas +77 -0
- package/macros/mp_loadformat.sas +303 -0
- package/macros/mp_lockanytable.sas +243 -0
- package/macros/mp_lockfilecheck.sas +103 -0
- package/macros/mp_makedata.sas +107 -0
- package/macros/mp_md5.sas +58 -0
- package/macros/mp_perflog.sas +43 -0
- package/macros/mp_prevobs.sas +88 -0
- package/macros/mp_recursivejoin.sas +90 -0
- package/macros/mp_replace.sas +151 -0
- package/macros/mp_reseterror.sas +27 -0
- package/macros/mp_resetoption.sas +39 -0
- package/macros/mp_retainedkey.sas +247 -0
- package/macros/mp_runddl.sas +49 -0
- package/macros/mp_searchcols.sas +103 -0
- package/macros/mp_searchdata.sas +131 -0
- package/macros/mp_setkeyvalue.sas +55 -0
- package/macros/mp_sortinplace.sas +122 -0
- package/macros/mp_stackdiffs.sas +592 -0
- package/macros/mp_storediffs.sas +230 -0
- package/macros/mp_stprequests.sas +74 -0
- package/macros/mp_streamfile.sas +212 -0
- package/macros/mp_testjob.sas +92 -0
- package/macros/mp_testservice.sas +39 -0
- package/macros/mp_testwritespeedlibrary.sas +59 -0
- package/macros/mp_tree.sas +71 -0
- package/macros/mp_unzip.sas +90 -0
- package/macros/mp_updatevarlength.sas +93 -0
- package/macros/mp_validatecol.sas +97 -0
- package/macros/mp_wait4file.sas +35 -0
- package/macros/mp_webin.sas +59 -0
- package/macros/mp_zip.sas +85 -0
- package/package.json +5 -2
- package/scripts/copySASjsCore.ts +36 -0
- package/types/hash.d.ts +9 -0
- package/types/hash.js +3 -0
- package/types/hash.js.map +1 -0
- package/types/index.d.ts +1 -0
- package/types/index.js +1 -0
- package/types/index.js.map +1 -1
- package/utils/index.d.ts +1 -1
- package/utils/index.js +2 -1
- package/utils/index.js.map +1 -1
- package/utils/utils.d.ts +1 -0
- package/utils/utils.js +7 -1
- package/utils/utils.js.map +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const generateCompileProgram: (folderPath: string) => Promise<string>;
|
|
@@ -0,0 +1,154 @@
|
|
|
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 __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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
50
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
|
+
};
|
|
52
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
+
exports.generateCompileProgram = void 0;
|
|
54
|
+
var path_1 = __importDefault(require("path"));
|
|
55
|
+
var file_1 = require("../file");
|
|
56
|
+
var helper_1 = require("./internal/helper");
|
|
57
|
+
var generateCompileProgram = function (folderPath) { return __awaiter(void 0, void 0, void 0, function () {
|
|
58
|
+
var compiledMacrosCode, initialProgramContent, folderCreationCode;
|
|
59
|
+
return __generator(this, function (_a) {
|
|
60
|
+
switch (_a.label) {
|
|
61
|
+
case 0: return [4 /*yield*/, (0, helper_1.getCompiledMacrosCode)(['mf_mkdir.sas'])];
|
|
62
|
+
case 1:
|
|
63
|
+
compiledMacrosCode = _a.sent();
|
|
64
|
+
initialProgramContent = (0, helper_1.getInitialCode)();
|
|
65
|
+
return [4 /*yield*/, fileAndDirectoryCreationCode(folderPath)];
|
|
66
|
+
case 2:
|
|
67
|
+
folderCreationCode = _a.sent();
|
|
68
|
+
return [2 /*return*/, compiledMacrosCode + initialProgramContent + folderCreationCode];
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}); };
|
|
72
|
+
exports.generateCompileProgram = generateCompileProgram;
|
|
73
|
+
var fileAndDirectoryCreationCode = function (resourcePath, pathRelativeTo, resultCode) {
|
|
74
|
+
if (pathRelativeTo === void 0) { pathRelativeTo = resourcePath; }
|
|
75
|
+
if (resultCode === void 0) { resultCode = ''; }
|
|
76
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
77
|
+
var _a, files, files_1, files_1_1, file, e_1_1, subFolders, subFolders_1, subFolders_1_1, folder, folderPath, e_2_1;
|
|
78
|
+
var e_1, _b, e_2, _c;
|
|
79
|
+
return __generator(this, function (_d) {
|
|
80
|
+
switch (_d.label) {
|
|
81
|
+
case 0: return [4 /*yield*/, (0, file_1.isFolder)(resourcePath)];
|
|
82
|
+
case 1:
|
|
83
|
+
if (!!(_d.sent())) return [3 /*break*/, 3];
|
|
84
|
+
_a = resultCode;
|
|
85
|
+
return [4 /*yield*/, (0, helper_1.generateCodeForFileCreation)(resourcePath, pathRelativeTo)];
|
|
86
|
+
case 2:
|
|
87
|
+
resultCode = _a + _d.sent();
|
|
88
|
+
return [2 /*return*/, resultCode];
|
|
89
|
+
case 3: return [4 /*yield*/, (0, file_1.listFilesInFolder)(resourcePath)];
|
|
90
|
+
case 4:
|
|
91
|
+
files = _d.sent();
|
|
92
|
+
_d.label = 5;
|
|
93
|
+
case 5:
|
|
94
|
+
_d.trys.push([5, 10, 11, 12]);
|
|
95
|
+
files_1 = __values(files), files_1_1 = files_1.next();
|
|
96
|
+
_d.label = 6;
|
|
97
|
+
case 6:
|
|
98
|
+
if (!!files_1_1.done) return [3 /*break*/, 9];
|
|
99
|
+
file = files_1_1.value;
|
|
100
|
+
return [4 /*yield*/, fileAndDirectoryCreationCode(path_1.default.join(resourcePath, file), pathRelativeTo, resultCode)];
|
|
101
|
+
case 7:
|
|
102
|
+
resultCode = _d.sent();
|
|
103
|
+
_d.label = 8;
|
|
104
|
+
case 8:
|
|
105
|
+
files_1_1 = files_1.next();
|
|
106
|
+
return [3 /*break*/, 6];
|
|
107
|
+
case 9: return [3 /*break*/, 12];
|
|
108
|
+
case 10:
|
|
109
|
+
e_1_1 = _d.sent();
|
|
110
|
+
e_1 = { error: e_1_1 };
|
|
111
|
+
return [3 /*break*/, 12];
|
|
112
|
+
case 11:
|
|
113
|
+
try {
|
|
114
|
+
if (files_1_1 && !files_1_1.done && (_b = files_1.return)) _b.call(files_1);
|
|
115
|
+
}
|
|
116
|
+
finally { if (e_1) throw e_1.error; }
|
|
117
|
+
return [7 /*endfinally*/];
|
|
118
|
+
case 12: return [4 /*yield*/, (0, file_1.listSubFoldersInFolder)(resourcePath)];
|
|
119
|
+
case 13:
|
|
120
|
+
subFolders = _d.sent();
|
|
121
|
+
_d.label = 14;
|
|
122
|
+
case 14:
|
|
123
|
+
_d.trys.push([14, 19, 20, 21]);
|
|
124
|
+
subFolders_1 = __values(subFolders), subFolders_1_1 = subFolders_1.next();
|
|
125
|
+
_d.label = 15;
|
|
126
|
+
case 15:
|
|
127
|
+
if (!!subFolders_1_1.done) return [3 /*break*/, 18];
|
|
128
|
+
folder = subFolders_1_1.value;
|
|
129
|
+
folderPath = path_1.default.join(resourcePath, folder);
|
|
130
|
+
resultCode = "".concat(resultCode, "\n%mf_mkdir(&fsTarget").concat(folderPath.replace(pathRelativeTo, ''), ")\n");
|
|
131
|
+
return [4 /*yield*/, fileAndDirectoryCreationCode(folderPath, pathRelativeTo, resultCode)];
|
|
132
|
+
case 16:
|
|
133
|
+
resultCode = _d.sent();
|
|
134
|
+
_d.label = 17;
|
|
135
|
+
case 17:
|
|
136
|
+
subFolders_1_1 = subFolders_1.next();
|
|
137
|
+
return [3 /*break*/, 15];
|
|
138
|
+
case 18: return [3 /*break*/, 21];
|
|
139
|
+
case 19:
|
|
140
|
+
e_2_1 = _d.sent();
|
|
141
|
+
e_2 = { error: e_2_1 };
|
|
142
|
+
return [3 /*break*/, 21];
|
|
143
|
+
case 20:
|
|
144
|
+
try {
|
|
145
|
+
if (subFolders_1_1 && !subFolders_1_1.done && (_c = subFolders_1.return)) _c.call(subFolders_1);
|
|
146
|
+
}
|
|
147
|
+
finally { if (e_2) throw e_2.error; }
|
|
148
|
+
return [7 /*endfinally*/];
|
|
149
|
+
case 21: return [2 /*return*/, resultCode];
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=generateCompileProgram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateCompileProgram.js","sourceRoot":"","sources":["../../src/fs/generateCompileProgram.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAuB;AACvB,gCAA6E;AAC7E,4CAI0B;AAEnB,IAAM,sBAAsB,GAAG,UAAO,UAAkB;;;;oBAClC,qBAAM,IAAA,8BAAqB,EAAC,CAAC,cAAc,CAAC,CAAC,EAAA;;gBAAlE,kBAAkB,GAAG,SAA6C;gBAElE,qBAAqB,GAAG,IAAA,uBAAc,GAAE,CAAA;gBAEnB,qBAAM,4BAA4B,CAAC,UAAU,CAAC,EAAA;;gBAAnE,kBAAkB,GAAG,SAA8C;gBAEzE,sBAAO,kBAAkB,GAAG,qBAAqB,GAAG,kBAAkB,EAAA;;;KACvE,CAAA;AARY,QAAA,sBAAsB,0BAQlC;AAED,IAAM,4BAA4B,GAAG,UACnC,YAAoB,EACpB,cAAqC,EACrC,UAAuB;IADvB,+BAAA,EAAA,6BAAqC;IACrC,2BAAA,EAAA,eAAuB;;;;;;wBAEjB,qBAAM,IAAA,eAAQ,EAAC,YAAY,CAAC,EAAA;;yBAA9B,CAAC,CAAC,SAA4B,CAAC,EAA/B,wBAA+B;oBACjC,KAAA,UAAU,CAAA;oBAAI,qBAAM,IAAA,oCAA2B,EAC7C,YAAY,EACZ,cAAc,CACf,EAAA;;oBAHD,UAAU,GAAV,KAAc,SAGb,CAAA;oBACD,sBAAO,UAAU,EAAA;wBAGL,qBAAM,IAAA,wBAAiB,EAAC,YAAY,CAAC,EAAA;;oBAA7C,KAAK,GAAG,SAAqC;;;;oBAChC,UAAA,SAAA,KAAK,CAAA;;;;oBAAb,IAAI;oBACA,qBAAM,4BAA4B,CAC7C,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAC7B,cAAc,EACd,UAAU,CACX,EAAA;;oBAJD,UAAU,GAAG,SAIZ,CAAA;;;;;;;;;;;;;;;;yBAGgB,qBAAM,IAAA,6BAAsB,EAAC,YAAY,CAAC,EAAA;;oBAAvD,UAAU,GAAG,SAA0C;;;;oBACxC,eAAA,SAAA,UAAU,CAAA;;;;oBAApB,MAAM;oBACT,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;oBAElD,UAAU,GAAG,UAAG,UAAU,kCACT,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,QAC1D,CAAA;oBAEgB,qBAAM,4BAA4B,CAC7C,UAAU,EACV,cAAc,EACd,UAAU,CACX,EAAA;;oBAJD,UAAU,GAAG,SAIZ,CAAA;;;;;;;;;;;;;;;;yBAGH,sBAAO,UAAU,EAAA;;;;CAClB,CAAA"}
|
package/fs/hash.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { HashedFolder } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Hashes each file in each directory, and then hashes the hashes to create a hash for each directory also.
|
|
4
|
+
*
|
|
5
|
+
* Whilst files are hashed in their entirety, the logic for creating a folder hash is as follows:
|
|
6
|
+
*
|
|
7
|
+
* Sort the files and subfolders by name (case sensitive, uppercase then lower)
|
|
8
|
+
* Take the first 100 hashes, concatenate and hash
|
|
9
|
+
* Concatenate this hash with another 100 hashes and hash again
|
|
10
|
+
* Continue until the end of the folder. This is the folder hash
|
|
11
|
+
* If a folder contains other folders, start from the bottom of the tree - the folder hashes cascade upwards so you know immediately if there is a change in a sub/sub directory
|
|
12
|
+
* If the folder has no content (empty) then it is ignored. No hash created.
|
|
13
|
+
*
|
|
14
|
+
* @param {string} folderPath - absolute folder path
|
|
15
|
+
*/
|
|
16
|
+
export declare const getHash: (folderPath: string) => Promise<HashedFolder>;
|
|
17
|
+
/**
|
|
18
|
+
* It returns a hashed folder tree that contains the local directory resources that are not synced with remote
|
|
19
|
+
*/
|
|
20
|
+
export declare function compareHashes(localHash: HashedFolder, remoteHashMap: {
|
|
21
|
+
[key: string]: string;
|
|
22
|
+
}): HashedFolder;
|
package/fs/hash.js
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
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 __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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
50
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
|
+
};
|
|
52
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
+
exports.compareHashes = exports.getHash = void 0;
|
|
54
|
+
var fs_extra_1 = __importDefault(require("fs-extra"));
|
|
55
|
+
var path_1 = __importDefault(require("path"));
|
|
56
|
+
var crypto_1 = require("crypto");
|
|
57
|
+
var file_1 = require("../file");
|
|
58
|
+
/**
|
|
59
|
+
* Hashes each file in each directory, and then hashes the hashes to create a hash for each directory also.
|
|
60
|
+
*
|
|
61
|
+
* Whilst files are hashed in their entirety, the logic for creating a folder hash is as follows:
|
|
62
|
+
*
|
|
63
|
+
* Sort the files and subfolders by name (case sensitive, uppercase then lower)
|
|
64
|
+
* Take the first 100 hashes, concatenate and hash
|
|
65
|
+
* Concatenate this hash with another 100 hashes and hash again
|
|
66
|
+
* Continue until the end of the folder. This is the folder hash
|
|
67
|
+
* If a folder contains other folders, start from the bottom of the tree - the folder hashes cascade upwards so you know immediately if there is a change in a sub/sub directory
|
|
68
|
+
* If the folder has no content (empty) then it is ignored. No hash created.
|
|
69
|
+
*
|
|
70
|
+
* @param {string} folderPath - absolute folder path
|
|
71
|
+
*/
|
|
72
|
+
var getHash = function (folderPath) { return __awaiter(void 0, void 0, void 0, function () {
|
|
73
|
+
return __generator(this, function (_a) {
|
|
74
|
+
switch (_a.label) {
|
|
75
|
+
case 0: return [4 /*yield*/, hashFolder(folderPath)];
|
|
76
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}); };
|
|
80
|
+
exports.getHash = getHash;
|
|
81
|
+
/**
|
|
82
|
+
* It returns a hashed folder tree that contains the local directory resources that are not synced with remote
|
|
83
|
+
*/
|
|
84
|
+
function compareHashes(localHash, remoteHashMap) {
|
|
85
|
+
return hashDifference(localHash, remoteHashMap);
|
|
86
|
+
}
|
|
87
|
+
exports.compareHashes = compareHashes;
|
|
88
|
+
var hashDifference = function (localHash, remoteHashMap, hashedDiff) {
|
|
89
|
+
var e_1, _a;
|
|
90
|
+
if (hashedDiff === void 0) { hashedDiff = {
|
|
91
|
+
hash: localHash.hash,
|
|
92
|
+
absolutePath: localHash.absolutePath,
|
|
93
|
+
relativePath: localHash.relativePath,
|
|
94
|
+
isFile: false,
|
|
95
|
+
members: []
|
|
96
|
+
}; }
|
|
97
|
+
try {
|
|
98
|
+
for (var _b = __values(localHash.members), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
99
|
+
var member = _c.value;
|
|
100
|
+
if (remoteHashMap[member.relativePath] !== member.hash) {
|
|
101
|
+
if (member.isFile) {
|
|
102
|
+
hashedDiff.members.push(member);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
var diff = hashDifference(member, remoteHashMap, {
|
|
106
|
+
hash: member.hash,
|
|
107
|
+
absolutePath: member.absolutePath,
|
|
108
|
+
relativePath: member.relativePath,
|
|
109
|
+
isFile: false,
|
|
110
|
+
members: []
|
|
111
|
+
});
|
|
112
|
+
hashedDiff.members.push(diff);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
118
|
+
finally {
|
|
119
|
+
try {
|
|
120
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
121
|
+
}
|
|
122
|
+
finally { if (e_1) throw e_1.error; }
|
|
123
|
+
}
|
|
124
|
+
return hashedDiff;
|
|
125
|
+
};
|
|
126
|
+
var hashFile = function (filePath) { return __awaiter(void 0, void 0, void 0, function () {
|
|
127
|
+
var fileContent, hash;
|
|
128
|
+
return __generator(this, function (_a) {
|
|
129
|
+
fileContent = fs_extra_1.default.readFileSync(filePath);
|
|
130
|
+
if (fileContent.length) {
|
|
131
|
+
hash = (0, crypto_1.createHash)('md5');
|
|
132
|
+
hash.update(fileContent);
|
|
133
|
+
return [2 /*return*/, hash.digest('hex').toUpperCase()];
|
|
134
|
+
}
|
|
135
|
+
return [2 /*return*/];
|
|
136
|
+
});
|
|
137
|
+
}); };
|
|
138
|
+
var hashFolder = function (folderPath, pathRelativeTo, hashedFolder) {
|
|
139
|
+
if (pathRelativeTo === void 0) { pathRelativeTo = folderPath; }
|
|
140
|
+
if (hashedFolder === void 0) { hashedFolder = {
|
|
141
|
+
hash: '',
|
|
142
|
+
absolutePath: folderPath,
|
|
143
|
+
relativePath: (0, file_1.getRelativePath)(pathRelativeTo, folderPath),
|
|
144
|
+
isFile: false,
|
|
145
|
+
members: []
|
|
146
|
+
}; }
|
|
147
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
148
|
+
var filesAndFolders, concatenatedHash, chunkSize, i, resources, resources_1, resources_1_1, resource, resourcePath, hashedSubFolder, hash, e_2_1, hash;
|
|
149
|
+
var e_2, _a;
|
|
150
|
+
return __generator(this, function (_b) {
|
|
151
|
+
switch (_b.label) {
|
|
152
|
+
case 0: return [4 /*yield*/, (0, file_1.listFilesAndSubFoldersInFolder)(folderPath, false)];
|
|
153
|
+
case 1:
|
|
154
|
+
filesAndFolders = _b.sent();
|
|
155
|
+
filesAndFolders.sort();
|
|
156
|
+
concatenatedHash = '';
|
|
157
|
+
chunkSize = 100;
|
|
158
|
+
i = 0;
|
|
159
|
+
_b.label = 2;
|
|
160
|
+
case 2:
|
|
161
|
+
if (!(i < filesAndFolders.length)) return [3 /*break*/, 15];
|
|
162
|
+
resources = filesAndFolders.slice(i, i + chunkSize);
|
|
163
|
+
_b.label = 3;
|
|
164
|
+
case 3:
|
|
165
|
+
_b.trys.push([3, 11, 12, 13]);
|
|
166
|
+
resources_1 = (e_2 = void 0, __values(resources)), resources_1_1 = resources_1.next();
|
|
167
|
+
_b.label = 4;
|
|
168
|
+
case 4:
|
|
169
|
+
if (!!resources_1_1.done) return [3 /*break*/, 10];
|
|
170
|
+
resource = resources_1_1.value;
|
|
171
|
+
resourcePath = path_1.default.join(folderPath, resource);
|
|
172
|
+
return [4 /*yield*/, (0, file_1.isFolder)(resourcePath)];
|
|
173
|
+
case 5:
|
|
174
|
+
if (!_b.sent()) return [3 /*break*/, 7];
|
|
175
|
+
return [4 /*yield*/, hashFolder(resourcePath, pathRelativeTo)];
|
|
176
|
+
case 6:
|
|
177
|
+
hashedSubFolder = _b.sent();
|
|
178
|
+
hashedFolder.members.push(hashedSubFolder);
|
|
179
|
+
concatenatedHash += hashedSubFolder.hash;
|
|
180
|
+
return [3 /*break*/, 9];
|
|
181
|
+
case 7: return [4 /*yield*/, hashFile(resourcePath)];
|
|
182
|
+
case 8:
|
|
183
|
+
hash = _b.sent();
|
|
184
|
+
if (!hash)
|
|
185
|
+
return [3 /*break*/, 9];
|
|
186
|
+
hashedFolder.members.push({
|
|
187
|
+
hash: hash,
|
|
188
|
+
absolutePath: resourcePath,
|
|
189
|
+
relativePath: (0, file_1.getRelativePath)(pathRelativeTo, resourcePath),
|
|
190
|
+
isFile: true
|
|
191
|
+
});
|
|
192
|
+
concatenatedHash += hash;
|
|
193
|
+
_b.label = 9;
|
|
194
|
+
case 9:
|
|
195
|
+
resources_1_1 = resources_1.next();
|
|
196
|
+
return [3 /*break*/, 4];
|
|
197
|
+
case 10: return [3 /*break*/, 13];
|
|
198
|
+
case 11:
|
|
199
|
+
e_2_1 = _b.sent();
|
|
200
|
+
e_2 = { error: e_2_1 };
|
|
201
|
+
return [3 /*break*/, 13];
|
|
202
|
+
case 12:
|
|
203
|
+
try {
|
|
204
|
+
if (resources_1_1 && !resources_1_1.done && (_a = resources_1.return)) _a.call(resources_1);
|
|
205
|
+
}
|
|
206
|
+
finally { if (e_2) throw e_2.error; }
|
|
207
|
+
return [7 /*endfinally*/];
|
|
208
|
+
case 13:
|
|
209
|
+
if (concatenatedHash !== '') {
|
|
210
|
+
hash = (0, crypto_1.createHash)('md5');
|
|
211
|
+
hash.update(concatenatedHash);
|
|
212
|
+
concatenatedHash = hash.digest('hex').toUpperCase();
|
|
213
|
+
}
|
|
214
|
+
_b.label = 14;
|
|
215
|
+
case 14:
|
|
216
|
+
i += chunkSize;
|
|
217
|
+
return [3 /*break*/, 2];
|
|
218
|
+
case 15:
|
|
219
|
+
hashedFolder.hash = concatenatedHash;
|
|
220
|
+
return [2 /*return*/, hashedFolder];
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
};
|
|
225
|
+
//# sourceMappingURL=hash.js.map
|
package/fs/hash.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/fs/hash.ts"],"names":[],"mappings":"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"}
|
package/fs/index.d.ts
ADDED
package/fs/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findResourcesNotPresentLocally = exports.generateProgramToSyncHashDiff = exports.generateProgramToGetRemoteHash = exports.generateCompileProgram = exports.compareHashes = exports.getHash = void 0;
|
|
4
|
+
var hash_1 = require("./hash");
|
|
5
|
+
Object.defineProperty(exports, "getHash", { enumerable: true, get: function () { return hash_1.getHash; } });
|
|
6
|
+
Object.defineProperty(exports, "compareHashes", { enumerable: true, get: function () { return hash_1.compareHashes; } });
|
|
7
|
+
var generateCompileProgram_1 = require("./generateCompileProgram");
|
|
8
|
+
Object.defineProperty(exports, "generateCompileProgram", { enumerable: true, get: function () { return generateCompileProgram_1.generateCompileProgram; } });
|
|
9
|
+
var sync_1 = require("./sync");
|
|
10
|
+
Object.defineProperty(exports, "generateProgramToGetRemoteHash", { enumerable: true, get: function () { return sync_1.generateProgramToGetRemoteHash; } });
|
|
11
|
+
Object.defineProperty(exports, "generateProgramToSyncHashDiff", { enumerable: true, get: function () { return sync_1.generateProgramToSyncHashDiff; } });
|
|
12
|
+
Object.defineProperty(exports, "findResourcesNotPresentLocally", { enumerable: true, get: function () { return sync_1.findResourcesNotPresentLocally; } });
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
package/fs/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fs/index.ts"],"names":[],"mappings":";;;AAAA,+BAA+C;AAAtC,+FAAA,OAAO,OAAA;AAAE,qGAAA,aAAa,OAAA;AAC/B,mEAAiE;AAAxD,gIAAA,sBAAsB,OAAA;AAC/B,+BAIe;AAHb,sHAAA,8BAA8B,OAAA;AAC9B,qHAAA,6BAA6B,OAAA;AAC7B,sHAAA,8BAA8B,OAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const generateCodeForFileCreation: (filePath: string, pathRelativeTo: string) => Promise<string>;
|
|
2
|
+
export declare const chunkFileContent: (fileContent: string) => string;
|
|
3
|
+
export declare const getInitialCode: () => string;
|
|
4
|
+
export declare const getCompiledMacrosCode: (macros: string[]) => Promise<string>;
|
|
@@ -0,0 +1,125 @@
|
|
|
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 __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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
50
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
|
+
};
|
|
52
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
+
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(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
|
+
}); };
|
|
69
|
+
exports.generateCodeForFileCreation = generateCodeForFileCreation;
|
|
70
|
+
var chunkFileContent = function (fileContent) {
|
|
71
|
+
var chunkedLines = (0, utils_1.chunk)(fileContent);
|
|
72
|
+
if (chunkedLines.length === 1) {
|
|
73
|
+
return " put '".concat(chunkedLines[0].split("'").join("''"), "';\n");
|
|
74
|
+
}
|
|
75
|
+
var combinedLines = '';
|
|
76
|
+
chunkedLines.forEach(function (chunkedLine, index) {
|
|
77
|
+
var text = " put '".concat(chunkedLine.split("'").join("''"), "'").concat(index !== chunkedLines.length - 1 ? '@;\n' : ';\n');
|
|
78
|
+
combinedLines += text;
|
|
79
|
+
});
|
|
80
|
+
return combinedLines;
|
|
81
|
+
};
|
|
82
|
+
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"; };
|
|
84
|
+
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
|
+
}); };
|
|
124
|
+
exports.getCompiledMacrosCode = getCompiledMacrosCode;
|
|
125
|
+
//# sourceMappingURL=helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/fs/internal/helper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAuB;AACvB,qCAAkD;AAClD,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,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,4dAuB/D,EAAA;;;KACA,CAAA;AArCY,QAAA,2BAA2B,+BAqCvC;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"}
|
package/fs/sync.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { HashedFolder } from '../types';
|
|
2
|
+
export declare const generateProgramToGetRemoteHash: (remotePath: string) => Promise<string>;
|
|
3
|
+
export declare const generateProgramToSyncHashDiff: (hashedFolder: HashedFolder, remotePath: string) => Promise<string>;
|
|
4
|
+
export declare const findResourcesNotPresentLocally: (localHash: HashedFolder, remoteHashMap: {
|
|
5
|
+
[key: string]: string;
|
|
6
|
+
}) => string[];
|