| "use strict"; |
| |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.default = plugin; |
| function plugin(targets, nodeTypes, detect) { |
| class Plugin { |
| constructor(result) { |
| this.nodes = []; |
| this.result = result; |
| this.targets = targets; |
| this.nodeTypes = nodeTypes; |
| } |
| |
| push(node, metadata) { |
| node._stylehacks = Object.assign({}, metadata, { |
| message: `Bad ${metadata.identifier}: ${metadata.hack}`, |
| browsers: this.targets |
| }); |
| |
| this.nodes.push(node); |
| } |
| |
| any(node) { |
| if (~this.nodeTypes.indexOf(node.type)) { |
| detect.apply(this, arguments); |
| |
| return !!node._stylehacks; |
| } |
| |
| return false; |
| } |
| |
| detectAndResolve(...args) { |
| this.nodes = []; |
| |
| detect.apply(this, args); |
| |
| return this.resolve(); |
| } |
| |
| detectAndWarn(...args) { |
| this.nodes = []; |
| |
| detect.apply(this, args); |
| |
| return this.warn(); |
| } |
| |
| resolve() { |
| return this.nodes.forEach(node => node.remove()); |
| } |
| |
| warn() { |
| return this.nodes.forEach(node => { |
| const { message, browsers, identifier, hack } = node._stylehacks; |
| |
| return node.warn(this.result, message, { browsers, identifier, hack }); |
| }); |
| } |
| } |
| |
| return Plugin; |
| } |
| module.exports = exports["default"]; |