astx
Version:
super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring
50 lines (39 loc) • 5.8 kB
JavaScript
// Adapted from the print-diff package
// https://github.com/LinusU/node-print-diff/blob/master/LICENSE
// The MIT License (MIT)
// Copyright (c) 2015 Linus Unnebäck
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
import * as diff from 'diff'
import chalk from 'chalk'
const originalColor = chalk.red
const modifiedColor = chalk.green
function rework(line) {
switch (line[0]) {
case '+':
return modifiedColor(line)
case '-':
return originalColor(line)
}
return line
}
export default function formatDiff(actual, expected) {
const patch = diff.createPatch('string', actual, expected)
const lines = patch.split('\n').slice(4).map(rework)
return `${originalColor('- original')} ${modifiedColor('+ modified')}
${lines.join('\n')}
`
} //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWZmIiwiY2hhbGsiLCJvcmlnaW5hbENvbG9yIiwicmVkIiwibW9kaWZpZWRDb2xvciIsImdyZWVuIiwicmV3b3JrIiwibGluZSIsImZvcm1hdERpZmYiLCJhY3R1YWwiLCJleHBlY3RlZCIsInBhdGNoIiwiY3JlYXRlUGF0Y2giLCJsaW5lcyIsInNwbGl0Iiwic2xpY2UiLCJtYXAiLCJqb2luIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvZm9ybWF0RGlmZi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBZGFwdGVkIGZyb20gdGhlIHByaW50LWRpZmYgcGFja2FnZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0xpbnVzVS9ub2RlLXByaW50LWRpZmYvYmxvYi9tYXN0ZXIvTElDRU5TRVxuXG4vLyBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuLy8gQ29weXJpZ2h0IChjKSAyMDE1IExpbnVzIFVubmViw6Rja1xuXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuLy8gY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuLy8gU09GVFdBUkUuXG5cbmltcG9ydCAqIGFzIGRpZmYgZnJvbSAnZGlmZidcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcblxuY29uc3Qgb3JpZ2luYWxDb2xvciA9IGNoYWxrLnJlZFxuY29uc3QgbW9kaWZpZWRDb2xvciA9IGNoYWxrLmdyZWVuXG5cbmZ1bmN0aW9uIHJld29yayhsaW5lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGxpbmVbMF0pIHtcbiAgICBjYXNlICcrJzpcbiAgICAgIHJldHVybiBtb2RpZmllZENvbG9yKGxpbmUpXG4gICAgY2FzZSAnLSc6XG4gICAgICByZXR1cm4gb3JpZ2luYWxDb2xvcihsaW5lKVxuICB9XG4gIHJldHVybiBsaW5lXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdERpZmYoYWN0dWFsOiBzdHJpbmcsIGV4cGVjdGVkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXRjaCA9IGRpZmYuY3JlYXRlUGF0Y2goJ3N0cmluZycsIGFjdHVhbCwgZXhwZWN0ZWQpXG4gIGNvbnN0IGxpbmVzID0gcGF0Y2guc3BsaXQoJ1xcbicpLnNsaWNlKDQpLm1hcChyZXdvcmspXG5cbiAgcmV0dXJuIGAke29yaWdpbmFsQ29sb3IoJy0gb3JpZ2luYWwnKX0gJHttb2RpZmllZENvbG9yKCcrIG1vZGlmaWVkJyl9XG5cbiR7bGluZXMuam9pbignXFxuJyl9XG5gXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTyxLQUFLQSxJQUFaLE1BQXNCLE1BQXRCO0FBQ0EsT0FBT0MsS0FBUCxNQUFrQixPQUFsQjs7QUFFQSxNQUFNQyxhQUFhLEdBQUdELEtBQUssQ0FBQ0UsR0FBNUI7QUFDQSxNQUFNQyxhQUFhLEdBQUdILEtBQUssQ0FBQ0ksS0FBNUI7O0FBRUEsU0FBU0MsTUFBVCxDQUFnQkMsSUFBaEIsRUFBc0M7RUFDcEMsUUFBUUEsSUFBSSxDQUFDLENBQUQsQ0FBWjtJQUNFLEtBQUssR0FBTDtNQUNFLE9BQU9ILGFBQWEsQ0FBQ0csSUFBRCxDQUFwQjtJQUNGLEtBQUssR0FBTDtNQUNFLE9BQU9MLGFBQWEsQ0FBQ0ssSUFBRCxDQUFwQixDQUpKOztFQU1BLE9BQU9BLElBQVA7QUFDRDs7QUFFRCxlQUFlLFNBQVNDLFVBQVQsQ0FBb0JDLE1BQXBCLEVBQW9DQyxRQUFwQyxFQUE4RDtFQUMzRSxNQUFNQyxLQUFLLEdBQUdYLElBQUksQ0FBQ1ksV0FBTCxDQUFpQixRQUFqQixFQUEyQkgsTUFBM0IsRUFBbUNDLFFBQW5DLENBQWQ7RUFDQSxNQUFNRyxLQUFLLEdBQUdGLEtBQUssQ0FBQ0csS0FBTixDQUFZLElBQVosRUFBa0JDLEtBQWxCLENBQXdCLENBQXhCLEVBQTJCQyxHQUEzQixDQUErQlYsTUFBL0IsQ0FBZDs7RUFFQSxPQUFRLEdBQUVKLGFBQWEsQ0FBQyxZQUFELENBQWUsSUFBR0UsYUFBYSxDQUFDLFlBQUQsQ0FBZTtBQUN2RTtBQUNBLEVBQUVTLEtBQUssQ0FBQ0ksSUFBTixDQUFXLElBQVgsQ0FBaUI7QUFDbkIsQ0FIRTtBQUlEIn0=