update-file-content
Version:
A simple utility for executing RegEx replacement on files, powered by stream.
110 lines (104 loc) • 3.67 kB
JavaScript
import { exec } from "child_process";
import { createReadStream, createWriteStream, unlink } from "fs";
import { join, basename, extname } from "path";
import { updateFileContent } from "../src/index.mjs";
import { root_directory } from "./helpers/__dirname.mjs";
const source = join(root_directory, "./src");
const destination = join(root_directory, "./build");
const validation = join(root_directory, "./test");
["./index.mjs", "./streams.mjs", "./transform.mjs"].forEach(
filename => {
createReadStream(join(source, filename))
.pipe(
createWriteStream(join(destination, filename))
); // .mjs
updateFileContent({ // .js
readStream: createReadStream(join(source, filename)),
writeStream:
createWriteStream (
join (
destination,
basename(filename).replace(extname(filename), "").concat(".js")
)
),
replace: [
{
search: `import { process_stream, rw_stream } from "./streams.mjs";`,
replacement:
`const streams = require("./streams.js");\n`
+ `const { process_stream, rw_stream } = streams;`
},
{
search: `import { Readable, Writable } from "stream";`,
replacement:
`const stream = require("stream");\n`
+ `const { Readable, Writable } = stream;`
},
{
search: `import { Transform, NukableTransform } from "./transform.mjs";`,
replacement:
`const _$_ = require("./transform.js");\n`
+ `const { Transform, NukableTransform } = _$_;`
},
{
search: `import { Transform as Node_Transform } from "stream";`,
replacement:
`const Node_Transform = require("stream").Transform;`
},
{ // import default
search: /import\s+([^{}]+?)\s+from\s*['"](.+?)['"];?/,
replacement: "const $1 = require(\"$2\");",
full_replacement: true
},
{ // destructuring a single property without renaming.
search: /import\s+\{\s*([^,]+?)\s*\}\s+from\s*['"](.+?)['"];?/,
replacement: "const $1 = require(\"$2\").$1;",
full_replacement: true
},
{
search: /(export)\s*\{.+?\};?/,
replacement: "module.exports =",
full_replacement: false
}
]
})
}
);
["./test.mjs"].forEach(
filename => {
const temp_dst = join (
validation,
basename(filename).replace(extname(filename), "").concat(".tmp.mjs")
);
updateFileContent({ // .js
readStream: createReadStream(join(validation, filename)),
writeStream:
createWriteStream (temp_dst),
replace: [
{
search: `import { updateFileContent, updateFiles } from "../src/index.mjs";`,
replacement:
`import _$ from "../build/index.js";\n`
+ `const { updateFileContent, updateFiles } = _$;`
}
]
})
.then(() => new Promise((resolve, reject) => {
exec(`mocha ${temp_dst}`, (err, stdout, stderr) => {
if(err) return reject(err);
return resolve(console.info(stdout));
})
})
)
.then(() => new Promise((resolve, reject) => {
exec(`npm run example/npm`, (err, stdout, stderr) => {
if(err) return reject(err);
return resolve(console.info(stdout));
});
})
)
.then(() => new Promise((resolve, reject) =>
unlink(temp_dst, err => err ? reject(err) : resolve())
))
}
);