@frsource/frs-replace 4.1.1 → 5.0.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/LICENSE +21 -201
- package/README.md +181 -236
- package/bin/cli.mjs +213 -0
- package/dist/async.d.ts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/dist/sync.d.ts +3 -0
- package/dist/types.d.ts +27 -0
- package/dist/utils.d.ts +3 -0
- package/package.json +64 -35
- package/async.js +0 -1
- package/bin/cli.js +0 -148
- package/index.js +0 -4
- package/src/async.js +0 -104
- package/src/sync.js +0 -88
- package/src/utils.js +0 -22
- package/sync.js +0 -1
package/src/async.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
const write = require('write')
|
|
2
|
-
const path = require('path')
|
|
3
|
-
const fs = require('fs')
|
|
4
|
-
const fastGlob = require('fast-glob')
|
|
5
|
-
const { writeError, getReplaceFn } = require('./utils')
|
|
6
|
-
|
|
7
|
-
const inputStrategyMap = {
|
|
8
|
-
join: (results, outputJoinString) =>
|
|
9
|
-
results.then(results => [
|
|
10
|
-
Promise.all(results).then(results => {
|
|
11
|
-
const len = results.length
|
|
12
|
-
let result = (results[0] && results[0][1]) || ''
|
|
13
|
-
for (let i = 1; i < len; ++i) {
|
|
14
|
-
result += outputJoinString + results[i][1]
|
|
15
|
-
}
|
|
16
|
-
return ['', result]
|
|
17
|
-
})
|
|
18
|
-
]),
|
|
19
|
-
flatten: results =>
|
|
20
|
-
results.then(results => results.map(async result => {
|
|
21
|
-
result = await result
|
|
22
|
-
result[0] = result[0].substring(result[0].lastIndexOf(path.sep))
|
|
23
|
-
return result
|
|
24
|
-
})),
|
|
25
|
-
'preserve-structure': results => results
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const multipleFilesOutput = (results, output, outputWriteOptions) => {
|
|
29
|
-
return results.then(results => results.map(
|
|
30
|
-
async result => {
|
|
31
|
-
result = await result
|
|
32
|
-
result[0] = path.join(output, result[0])
|
|
33
|
-
await write(result[0], result[1], outputWriteOptions)
|
|
34
|
-
return result
|
|
35
|
-
}
|
|
36
|
-
))
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const outputStrategyMap = {
|
|
40
|
-
join: (results, output, outputWriteOptions) =>
|
|
41
|
-
results.then(results => [
|
|
42
|
-
results[0].then(async result => {
|
|
43
|
-
await write(output, result[1], outputWriteOptions)
|
|
44
|
-
result[0] = output
|
|
45
|
-
return result
|
|
46
|
-
})
|
|
47
|
-
]),
|
|
48
|
-
flatten: multipleFilesOutput,
|
|
49
|
-
'preserve-structure': multipleFilesOutput
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
module.exports = async ({
|
|
53
|
-
input,
|
|
54
|
-
inputReadOptions = 'utf8',
|
|
55
|
-
inputGlobOptions,
|
|
56
|
-
content,
|
|
57
|
-
strategy = 'join',
|
|
58
|
-
output,
|
|
59
|
-
outputWriteOptions = 'utf8',
|
|
60
|
-
outputJoinString = '\n',
|
|
61
|
-
needle,
|
|
62
|
-
replacement
|
|
63
|
-
}) => {
|
|
64
|
-
let results
|
|
65
|
-
const replaceFn = getReplaceFn(needle, replacement)
|
|
66
|
-
|
|
67
|
-
if (content !== undefined) {
|
|
68
|
-
results = Promise.resolve([['', replaceFn(content)]])
|
|
69
|
-
} else if (input !== undefined) {
|
|
70
|
-
const fileStream = fastGlob.stream(input, inputGlobOptions)
|
|
71
|
-
const replacePromises = []
|
|
72
|
-
|
|
73
|
-
fileStream.on('error', writeError)
|
|
74
|
-
fileStream.on('data', path => replacePromises.push(new Promise((resolve, reject) =>
|
|
75
|
-
fs.readFile(path, inputReadOptions, (error, data) => {
|
|
76
|
-
/* c8 ignore next */
|
|
77
|
-
if (error) return reject(error)
|
|
78
|
-
|
|
79
|
-
resolve([path, replaceFn(data)])
|
|
80
|
-
})
|
|
81
|
-
)))
|
|
82
|
-
results = new Promise(resolve =>
|
|
83
|
-
fileStream.once('end', () =>
|
|
84
|
-
resolve(replacePromises)
|
|
85
|
-
)
|
|
86
|
-
).catch(writeError)
|
|
87
|
-
} else {
|
|
88
|
-
writeError('at least one input source must be defined!')
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
if (!inputStrategyMap[strategy]) writeError('unsupported strategy used! Possible values are: "join", "preserve-structure" or "flatten"')
|
|
92
|
-
results = inputStrategyMap[strategy](results, outputJoinString)
|
|
93
|
-
|
|
94
|
-
if (output !== undefined) {
|
|
95
|
-
output = path.normalize(output)
|
|
96
|
-
if (typeof outputWriteOptions === 'string') {
|
|
97
|
-
outputWriteOptions = { encoding: outputWriteOptions }
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
results = outputStrategyMap[strategy](results, output, outputWriteOptions)
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return results
|
|
104
|
-
}
|
package/src/sync.js
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
const write = require('write')
|
|
2
|
-
const path = require('path')
|
|
3
|
-
const fs = require('fs')
|
|
4
|
-
const fastGlob = require('fast-glob')
|
|
5
|
-
|
|
6
|
-
const { writeError, getReplaceFn } = require('./utils')
|
|
7
|
-
|
|
8
|
-
const inputStrategyMap = {
|
|
9
|
-
join: (results, len, outputJoinString) => {
|
|
10
|
-
let result = (results[0] && results[0][1]) || ''
|
|
11
|
-
for (let i = 1; i < len; ++i) {
|
|
12
|
-
result += outputJoinString + results[i][1]
|
|
13
|
-
}
|
|
14
|
-
return [[['', result]], 1]
|
|
15
|
-
},
|
|
16
|
-
flatten: (results, len) => {
|
|
17
|
-
for (let i = 0; i < len; ++i) {
|
|
18
|
-
const result = results[i]
|
|
19
|
-
result[0] = result[0].substring(result[0].lastIndexOf(path.sep))
|
|
20
|
-
}
|
|
21
|
-
return [results, len]
|
|
22
|
-
},
|
|
23
|
-
'preserve-structure': (...args) => args
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const multipleFilesOutputStrategy = (results, len, output, outputWriteOptions) => {
|
|
27
|
-
for (let i = 0; i < len; ++i) {
|
|
28
|
-
const result = results[i]
|
|
29
|
-
result[0] = path.join(output, result[0])
|
|
30
|
-
write.sync(result[0], result[1], outputWriteOptions)
|
|
31
|
-
}
|
|
32
|
-
return results
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const outputStrategyMap = {
|
|
36
|
-
join: (results, len, output, outputWriteOptions) => {
|
|
37
|
-
write.sync(output, results[0][1], outputWriteOptions)
|
|
38
|
-
results[0][0] = output
|
|
39
|
-
return results
|
|
40
|
-
},
|
|
41
|
-
flatten: multipleFilesOutputStrategy,
|
|
42
|
-
'preserve-structure': multipleFilesOutputStrategy
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
module.exports = ({
|
|
46
|
-
input,
|
|
47
|
-
inputReadOptions = 'utf8',
|
|
48
|
-
inputGlobOptions,
|
|
49
|
-
content,
|
|
50
|
-
strategy = 'join',
|
|
51
|
-
output,
|
|
52
|
-
outputWriteOptions = 'utf8',
|
|
53
|
-
outputJoinString = '\n',
|
|
54
|
-
needle,
|
|
55
|
-
replacement
|
|
56
|
-
}) => {
|
|
57
|
-
let results
|
|
58
|
-
const replaceFn = getReplaceFn(needle, replacement)
|
|
59
|
-
|
|
60
|
-
if (content !== undefined) {
|
|
61
|
-
results = [['', replaceFn(content)]]
|
|
62
|
-
} else if (input !== undefined) {
|
|
63
|
-
results = []
|
|
64
|
-
const files = fastGlob.sync(input, inputGlobOptions)
|
|
65
|
-
const len = files.length
|
|
66
|
-
for (let i = 0; i < len; ++i) {
|
|
67
|
-
const filePath = files[i]
|
|
68
|
-
results.push([filePath, replaceFn(fs.readFileSync(filePath, inputReadOptions))])
|
|
69
|
-
}
|
|
70
|
-
} else {
|
|
71
|
-
writeError('at least one input source must be defined!')
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
let len
|
|
75
|
-
if (!inputStrategyMap[strategy]) writeError('unsupported strategy used! Possible values are: "join", "preserve-structure" or "flatten"');
|
|
76
|
-
[results, len] = inputStrategyMap[strategy](results, results.length, outputJoinString)
|
|
77
|
-
|
|
78
|
-
if (output !== undefined) {
|
|
79
|
-
output = path.normalize(output)
|
|
80
|
-
if (typeof outputWriteOptions === 'string') {
|
|
81
|
-
outputWriteOptions = { encoding: outputWriteOptions }
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
results = outputStrategyMap[strategy](results, len, output, outputWriteOptions)
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
return results
|
|
88
|
-
}
|
package/src/utils.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
const writeError = msg => { throw new Error(`@frsource/frs-replace :: ${msg}`) }
|
|
2
|
-
|
|
3
|
-
const getReplaceFn = (needle, replacement) =>
|
|
4
|
-
typeof needle === 'string'
|
|
5
|
-
? content => {
|
|
6
|
-
const needleLen = needle.length
|
|
7
|
-
let result = ''
|
|
8
|
-
let i
|
|
9
|
-
let endIndex = 0
|
|
10
|
-
|
|
11
|
-
while ((i = content.indexOf(needle, endIndex)) !== -1) {
|
|
12
|
-
result += content.slice(endIndex, i) + replacement
|
|
13
|
-
endIndex = i + needleLen
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
result += content.slice(endIndex, content.length)
|
|
17
|
-
|
|
18
|
-
return result
|
|
19
|
-
}
|
|
20
|
-
: content => content.replace(needle, replacement)
|
|
21
|
-
|
|
22
|
-
module.exports = { writeError, getReplaceFn }
|
package/sync.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
module.exports = require('./src/sync')
|