Sha256: 87af51fa5d47423e1871227738533113fbe89dfe4120e9ae6c761cb92783bc2f
Contents?: true
Size: 1 KB
Versions: 10
Compression:
Stored size: 1 KB
Contents
/** * The MIT License (MIT) * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com> */ 'use strict'; var NodePath = require('../../traverse/node-path'); var _require = require('../../transform/utils'), disjunctionToList = _require.disjunctionToList, listToDisjunction = _require.listToDisjunction; /** * Removes duplicates from a disjunction sequence: * * /(ab|bc|ab)+(xy|xy)+/ -> /(ab|bc)+(xy)+/ */ module.exports = { Disjunction: function Disjunction(path) { var node = path.node; // Make unique nodes. var uniqueNodesMap = {}; var parts = disjunctionToList(node).filter(function (part) { var encoded = part ? NodePath.getForNode(part).jsonEncode() : 'null'; // Already recorded this part, filter out. if (uniqueNodesMap.hasOwnProperty(encoded)) { return false; } uniqueNodesMap[encoded] = part; return true; }); // Replace with the optimized disjunction. path.replace(listToDisjunction(parts)); } };
Version data entries
10 entries across 10 versions & 3 rubygems