123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- 'use strict';
- function getReplacement(replace, isArray, i) {
- if (isArray && typeof replace[i] === 'undefined') {
- return null;
- }
- if (isArray) {
- return replace[i];
- }
- return replace;
- }
- module.exports = function makeReplacements(contents, from, to, file, count) {
-
- if (!Array.isArray(from)) {
- from = [from];
- }
-
- const isArray = Array.isArray(to);
- const result = {file};
-
- if (count) {
- result.numMatches = 0;
- result.numReplacements = 0;
- }
-
- const newContents = from.reduce((contents, item, i) => {
-
- if (typeof item === 'function') {
- item = item(file);
- }
-
- let replacement = getReplacement(to, isArray, i);
- if (replacement === null) {
- return contents;
- }
-
- if (typeof replacement === 'function') {
- const original = replacement;
- replacement = (...args) => original(...args, file);
- }
-
- if (count) {
- const matches = contents.match(item);
- if (matches) {
- const replacements = matches.filter(match => match !== replacement);
- result.numMatches += matches.length;
- result.numReplacements += replacements.length;
- }
- }
-
- return contents.replace(item, replacement);
- }, contents);
-
- result.hasChanged = (newContents !== contents);
-
- return [result, newContents];
- };
|