-
Notifications
You must be signed in to change notification settings - Fork 0
/
replace-file-by-list.js
90 lines (69 loc) · 2.02 KB
/
replace-file-by-list.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// replace-file-by-list @ npm, replace files by a user-defined replacement list
var fs = require("fs");
var path = require("path");
/*
replace files by a user-defined replacement list
replaceFileByList( replaceList [, options] )
replaceList
[
filePath1, [
rplArg1a, rplArg1b,
rplArg2a, rplArg2b,
...
],
filePath2, [ ... ],
]
* rplArgNa, rplArgNb
a pair of arguments for String.replace(rplArgNa, rplArgNb)
options
.srcDir
optional, source dir path.
.destDir
optional, detination dir path.
default is same as srcDir, i.e. write to the source files.
.silent
don't output log message
return updated files count.
*/
module.exports = function (replaceList, options) {
//arguments
var { srcDir, destDir, silent } = { srcDir: "", destDir: "", ...options };
if (srcDir) srcDir = path.normalize(srcDir + "/");
//process
var i, imax = replaceList.length, ri, j, jmax;
var fnSrc, fnDest, fnDir, code0, code, codei, updateCount = 0;
function saveCode(fn, code0, code) {
if (code0 === code) {
if (!silent) console.log("!!! skip " + fn);
}
else {
fnDir = path.dirname(fn);
if (!fs.existsSync(fnDir)) fs.mkdirSync(fnDir, { recursive: true });
fs.writeFileSync(fn, code);
if (!silent) console.log("file updated, " + fn);
updateCount++;
}
}
for (i = 0; i < imax; i++) {
ri = replaceList[i];
if (typeof ri === "string") {
//save previous
if (fnDest) saveCode(fnDest, code0, code);
fnSrc = path.normalize(path.join(srcDir, ri));
fnDest = path.join(destDir, ri);
code = code0 = fs.readFileSync(fnSrc).toString();
continue;
}
if (!(ri instanceof Array)) continue;
jmax = ri.length;
for (j = 0; j < jmax; j += 2) {
codei = code.replace(ri[j], ri[j + 1]);
if (!silent) console.log(((codei === code) ? "! unchanged" : "updated") + ", " +
fnSrc.slice(srcDir.length) + ", replace (" + ri[j] + ") with (" + ri[j + 1] + ")");
if (codei !== code) code = codei;
}
}
//save last
if (fnDest) saveCode(fnDest, code0, code);
return updateCount;
}