@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/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')