From 7914defba8acc055274c60e6bf3f7bc3fa8b7943 Mon Sep 17 00:00:00 2001 From: SukkaW Date: Thu, 22 Oct 2020 17:18:57 +0800 Subject: [PATCH] Fix: use timsort to be compatible with Node.js 10 --- lib/modules/sortAttributes.es6 | 6 +++++- lib/modules/sortAttributesWithLists.es6 | 5 ++++- package.json | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/modules/sortAttributes.es6 b/lib/modules/sortAttributes.es6 index efc1d8a..258ce82 100644 --- a/lib/modules/sortAttributes.es6 +++ b/lib/modules/sortAttributes.es6 @@ -1,3 +1,5 @@ +import { sort as timSort } from 'timsort'; + const validOptions = new Set(['frequency', 'alphabetical']); const processModuleOptions = options => { @@ -29,7 +31,9 @@ class AttributeTokenChain { _sortOrder.push(item); } - this.sortOrder = _sortOrder.sort((a, b) => b[1] - a[1]).map(i => i[0]); + timSort(_sortOrder, (a, b) => b[1] - a[1]); + + this.sortOrder = _sortOrder.map(i => i[0]); } sortFromNodeAttrs(nodeAttrs) { diff --git a/lib/modules/sortAttributesWithLists.es6 b/lib/modules/sortAttributesWithLists.es6 index ee23213..6e54c98 100644 --- a/lib/modules/sortAttributesWithLists.es6 +++ b/lib/modules/sortAttributesWithLists.es6 @@ -1,4 +1,5 @@ // class, rel, ping +import { sort as timSort } from 'timsort'; import { attributesWithLists } from './collapseAttributeWhitespace'; const validOptions = new Set(['frequency', 'alphabetical']); @@ -29,7 +30,9 @@ class AttributeTokenChain { _sortOrder.push(item); } - this.sortOrder = _sortOrder.sort((a, b) => b[1] - a[1]).map(i => i[0]); + timSort(_sortOrder, (a, b) => b[1] - a[1]); + + this.sortOrder = _sortOrder.map(i => i[0]); } sortFromNodeAttrsArray(attrValuesArray) { diff --git a/package.json b/package.json index 5c18eec..fe65c38 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "relateurl": "^0.2.7", "svgo": "^1.3.2", "terser": "^4.8.0", + "timsort": "^0.3.0", "uncss": "^0.17.3" }, "devDependencies": {