aboutsummaryrefslogtreecommitdiff
path: root/node_modules/csso/lib/compressor/restructure/prepare/createDeclarationIndexer.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/csso/lib/compressor/restructure/prepare/createDeclarationIndexer.js')
-rw-r--r--node_modules/csso/lib/compressor/restructure/prepare/createDeclarationIndexer.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/node_modules/csso/lib/compressor/restructure/prepare/createDeclarationIndexer.js b/node_modules/csso/lib/compressor/restructure/prepare/createDeclarationIndexer.js
new file mode 100644
index 00000000..c5235309
--- /dev/null
+++ b/node_modules/csso/lib/compressor/restructure/prepare/createDeclarationIndexer.js
@@ -0,0 +1,32 @@
+var translate = require('../../../utils/translate.js');
+
+function Index() {
+ this.seed = 0;
+ this.map = Object.create(null);
+}
+
+Index.prototype.resolve = function(str) {
+ var index = this.map[str];
+
+ if (!index) {
+ index = ++this.seed;
+ this.map[str] = index;
+ }
+
+ return index;
+};
+
+module.exports = function createDeclarationIndexer() {
+ var names = new Index();
+ var values = new Index();
+
+ return function markDeclaration(node) {
+ var property = node.property.name;
+ var value = translate(node.value);
+
+ node.id = names.resolve(property) + (values.resolve(value) << 12);
+ node.length = property.length + 1 + value.length;
+
+ return node;
+ };
+};