Comparing version 3.4.0 to 3.5.0
@@ -0,1 +1,5 @@ | ||
## 3.5.0 (January 14, 2018) | ||
- Migrated to [CSSTree](https://github.com/csstree/csstree) `1.0.0-alpha.27` | ||
## 3.4.0 (November 3, 2017) | ||
@@ -2,0 +6,0 @@ |
@@ -54,6 +54,6 @@ var resolveKeyword = require('css-tree').keyword; | ||
default: | ||
var keyword = resolveKeyword(node.name); | ||
if (keyword.name === 'keyframes' || | ||
keyword.name === 'media' || | ||
keyword.name === 'supports') { | ||
var name = resolveKeyword(node.name).basename; | ||
if (name === 'keyframes' || | ||
name === 'media' || | ||
name === 'supports') { | ||
@@ -60,0 +60,0 @@ // drop at-rule with no prelude |
@@ -1,2 +0,2 @@ | ||
var walk = require('css-tree').walkUp; | ||
var walk = require('css-tree').walk; | ||
var handlers = { | ||
@@ -13,7 +13,9 @@ Atrule: require('./Atrule'), | ||
module.exports = function(ast, options) { | ||
walk(ast, function(node, item, list) { | ||
if (handlers.hasOwnProperty(node.type)) { | ||
handlers[node.type].call(this, node, item, list, options); | ||
walk(ast, { | ||
leave: function(node, item, list) { | ||
if (handlers.hasOwnProperty(node.type)) { | ||
handlers[node.type].call(this, node, item, list, options); | ||
} | ||
} | ||
}); | ||
}; |
@@ -7,3 +7,3 @@ var List = require('css-tree').List; | ||
var restructure = require('./restructure'); | ||
var walkRules = require('css-tree').walkRules; | ||
var walk = require('css-tree').walk; | ||
@@ -58,5 +58,8 @@ function readChunk(children, specialComments) { | ||
walkRules(ast, function markScopes(node) { | ||
if (node.type === 'Atrule' && node.block !== null) { | ||
node.block.id = seed++; | ||
walk(ast, { | ||
visit: 'Atrule', | ||
enter: function markScopes(node) { | ||
if (node.block !== null) { | ||
node.block.id = seed++; | ||
} | ||
} | ||
@@ -63,0 +66,0 @@ }); |
var csstree = require('css-tree'); | ||
var parse = csstree.parse; | ||
var compress = require('./compress'); | ||
var translate = csstree.translate; | ||
var translateWithSourceMap = csstree.translateWithSourceMap; | ||
var generate = csstree.generate; | ||
@@ -26,3 +25,3 @@ function debugOutput(name, options, startTime, data) { | ||
if (level > 1 && ast) { | ||
var css = translate(ast, true); | ||
var css = generate(ast); | ||
@@ -106,6 +105,6 @@ // when level 2, limit css to 256 symbols | ||
// translate | ||
// generate | ||
if (options.sourceMap) { | ||
result = debugOutput('translateWithSourceMap', options, Date.now(), (function() { | ||
var tmp = translateWithSourceMap(compressResult.ast); | ||
result = debugOutput('generate(sourceMap: true)', options, Date.now(), (function() { | ||
var tmp = generate(compressResult.ast, { sourceMap: true }); | ||
tmp.map._file = filename; // since other tools can relay on file in source map transform chain | ||
@@ -116,4 +115,4 @@ tmp.map.setSourceContent(filename, source); | ||
} else { | ||
result = debugOutput('translate', options, Date.now(), { | ||
css: translate(compressResult.ast), | ||
result = debugOutput('generate', options, Date.now(), { | ||
css: generate(compressResult.ast), | ||
map: null | ||
@@ -120,0 +119,0 @@ }); |
@@ -6,5 +6,5 @@ var resolveKeyword = require('css-tree').keyword; | ||
// compress @keyframe selectors | ||
if (resolveKeyword(node.name).name === 'keyframes') { | ||
if (resolveKeyword(node.name).basename === 'keyframes') { | ||
compressKeyframes(node); | ||
} | ||
}; |
@@ -1,2 +0,2 @@ | ||
var walk = require('css-tree').walkUp; | ||
var walk = require('css-tree').walk; | ||
var handlers = { | ||
@@ -17,7 +17,9 @@ Atrule: require('./Atrule'), | ||
module.exports = function(ast) { | ||
walk(ast, function(node, item, list) { | ||
if (handlers.hasOwnProperty(node.type)) { | ||
handlers[node.type].call(this, node, item, list); | ||
walk(ast, { | ||
leave: function(node, item, list) { | ||
if (handlers.hasOwnProperty(node.type)) { | ||
handlers[node.type].call(this, node, item, list); | ||
} | ||
} | ||
}); | ||
}; |
@@ -17,5 +17,5 @@ var resolveName = require('css-tree').property; | ||
if (handlers.hasOwnProperty(property.name)) { | ||
handlers[property.name](node); | ||
if (handlers.hasOwnProperty(property.basename)) { | ||
handlers[property.basename](node); | ||
} | ||
}; |
var List = require('css-tree').List; | ||
var resolveKeyword = require('css-tree').keyword; | ||
var hasOwnProperty = Object.prototype.hasOwnProperty; | ||
var walkRulesRight = require('css-tree').walkRulesRight; | ||
var walk = require('css-tree').walk; | ||
function addRuleToMap(map, item, list, single) { | ||
var node = item.data; | ||
var name = resolveKeyword(node.name).name; | ||
var name = resolveKeyword(node.name).basename; | ||
var id = node.name.toLowerCase() + '/' + (node.prelude ? node.prelude.id : null); | ||
@@ -32,5 +32,5 @@ | ||
if (node.type === 'Atrule') { | ||
var keyword = resolveKeyword(node.name); | ||
var name = resolveKeyword(node.name).basename; | ||
switch (keyword.name) { | ||
switch (name) { | ||
case 'keyframes': | ||
@@ -49,4 +49,4 @@ addRuleToMap(collected, item, list, true); | ||
if (topInjectPoint === null && | ||
keyword.name !== 'charset' && | ||
keyword.name !== 'import') { | ||
name !== 'charset' && | ||
name !== 'import') { | ||
topInjectPoint = item; | ||
@@ -63,3 +63,6 @@ } | ||
for (var id in collected[atrule]) { | ||
ast.children.insertList(collected[atrule][id], atrule === 'media' ? null : topInjectPoint); | ||
ast.children.insertList( | ||
collected[atrule][id], | ||
atrule === 'media' ? null : topInjectPoint | ||
); | ||
} | ||
@@ -102,7 +105,7 @@ } | ||
walkRulesRight(ast, function(node, item, list) { | ||
if (node.type === 'Atrule') { | ||
processAtrule(node, item, list); | ||
} | ||
walk(ast, { | ||
visit: 'Atrule', | ||
reverse: true, | ||
enter: processAtrule | ||
}); | ||
}; |
@@ -1,2 +0,2 @@ | ||
var walkRules = require('css-tree').walkRules; | ||
var walk = require('css-tree').walk; | ||
var utils = require('./utils'); | ||
@@ -43,7 +43,6 @@ | ||
module.exports = function initialMergeRule(ast) { | ||
walkRules(ast, function(node, item, list) { | ||
if (node.type === 'Rule') { | ||
processRule(node, item, list); | ||
} | ||
walk(ast, { | ||
visit: 'Rule', | ||
enter: processRule | ||
}); | ||
}; |
var List = require('css-tree').List; | ||
var walkRulesRight = require('css-tree').walkRulesRight; | ||
var walk = require('css-tree').walk; | ||
@@ -37,7 +37,7 @@ function processRule(node, item, list) { | ||
module.exports = function disjoinRule(ast) { | ||
walkRulesRight(ast, function(node, item, list) { | ||
if (node.type === 'Rule') { | ||
processRule(node, item, list); | ||
} | ||
walk(ast, { | ||
visit: 'Rule', | ||
reverse: true, | ||
enter: processRule | ||
}); | ||
}; |
var List = require('css-tree').List; | ||
var translate = require('css-tree').translate; | ||
var walkRulesRight = require('css-tree').walkRulesRight; | ||
var generate = require('css-tree').generate; | ||
var walk = require('css-tree').walk; | ||
@@ -281,6 +281,6 @@ var REPLACE = 1; | ||
var stringValues = [ | ||
translate(sides.top.node), | ||
translate(sides.right.node), | ||
translate(sides.bottom.node), | ||
translate(sides.left.node) | ||
generate(sides.top.node), | ||
generate(sides.right.node), | ||
generate(sides.bottom.node), | ||
generate(sides.left.node) | ||
]; | ||
@@ -399,29 +399,29 @@ | ||
walkRulesRight(ast, function(node) { | ||
if (node.type !== 'Rule') { | ||
return; | ||
} | ||
walk(ast, { | ||
visit: 'Rule', | ||
reverse: true, | ||
enter: function(node) { | ||
var stylesheet = this.block || this.stylesheet; | ||
var ruleId = (node.pseudoSignature || '') + '|' + node.prelude.children.first().id; | ||
var ruleMap; | ||
var shorts; | ||
var stylesheet = this.block || this.stylesheet; | ||
var ruleId = (node.pseudoSignature || '') + '|' + node.prelude.children.first().id; | ||
var ruleMap; | ||
var shorts; | ||
if (!stylesheetMap.hasOwnProperty(stylesheet.id)) { | ||
ruleMap = { | ||
lastShortSelector: null | ||
}; | ||
stylesheetMap[stylesheet.id] = ruleMap; | ||
} else { | ||
ruleMap = stylesheetMap[stylesheet.id]; | ||
} | ||
if (!stylesheetMap.hasOwnProperty(stylesheet.id)) { | ||
ruleMap = { | ||
lastShortSelector: null | ||
}; | ||
stylesheetMap[stylesheet.id] = ruleMap; | ||
} else { | ||
ruleMap = stylesheetMap[stylesheet.id]; | ||
} | ||
if (ruleMap.hasOwnProperty(ruleId)) { | ||
shorts = ruleMap[ruleId]; | ||
} else { | ||
shorts = {}; | ||
ruleMap[ruleId] = shorts; | ||
} | ||
if (ruleMap.hasOwnProperty(ruleId)) { | ||
shorts = ruleMap[ruleId]; | ||
} else { | ||
shorts = {}; | ||
ruleMap[ruleId] = shorts; | ||
ruleMap.lastShortSelector = processRule.call(this, node, shorts, shortDeclarations, ruleMap.lastShortSelector); | ||
} | ||
ruleMap.lastShortSelector = processRule.call(this, node, shorts, shortDeclarations, ruleMap.lastShortSelector); | ||
}); | ||
@@ -428,0 +428,0 @@ |
var resolveProperty = require('css-tree').property; | ||
var resolveKeyword = require('css-tree').keyword; | ||
var walkRulesRight = require('css-tree').walkRulesRight; | ||
var translate = require('css-tree').translate; | ||
var walk = require('css-tree').walk; | ||
var generate = require('css-tree').generate; | ||
var fingerprintId = 1; | ||
@@ -68,6 +68,6 @@ var dontRestructure = { | ||
function getPropertyFingerprint(propertyName, declaration, fingerprints) { | ||
var realName = resolveProperty(propertyName).name; | ||
var realName = resolveProperty(propertyName).basename; | ||
if (realName === 'background') { | ||
return propertyName + ':' + translate(declaration.value); | ||
return propertyName + ':' + generate(declaration.value); | ||
} | ||
@@ -183,3 +183,3 @@ | ||
default: | ||
fingerprint = translate(declaration.value); | ||
fingerprint = generate(declaration.value); | ||
} | ||
@@ -196,4 +196,4 @@ | ||
if (NEEDLESS_TABLE.hasOwnProperty(property.name)) { | ||
var table = NEEDLESS_TABLE[property.name]; | ||
if (NEEDLESS_TABLE.hasOwnProperty(property.basename)) { | ||
var table = NEEDLESS_TABLE[property.basename]; | ||
@@ -273,28 +273,28 @@ for (var i = 0; i < table.length; i++) { | ||
walkRulesRight(ast, function(node, item, list) { | ||
if (node.type !== 'Rule') { | ||
return; | ||
} | ||
walk(ast, { | ||
visit: 'Rule', | ||
reverse: true, | ||
enter: function(node, item, list) { | ||
var stylesheet = this.block || this.stylesheet; | ||
var ruleId = (node.pseudoSignature || '') + '|' + node.prelude.children.first().id; | ||
var ruleMap; | ||
var props; | ||
var stylesheet = this.block || this.stylesheet; | ||
var ruleId = (node.pseudoSignature || '') + '|' + node.prelude.children.first().id; | ||
var ruleMap; | ||
var props; | ||
if (!stylesheetMap.hasOwnProperty(stylesheet.id)) { | ||
ruleMap = {}; | ||
stylesheetMap[stylesheet.id] = ruleMap; | ||
} else { | ||
ruleMap = stylesheetMap[stylesheet.id]; | ||
} | ||
if (!stylesheetMap.hasOwnProperty(stylesheet.id)) { | ||
ruleMap = {}; | ||
stylesheetMap[stylesheet.id] = ruleMap; | ||
} else { | ||
ruleMap = stylesheetMap[stylesheet.id]; | ||
} | ||
if (ruleMap.hasOwnProperty(ruleId)) { | ||
props = ruleMap[ruleId]; | ||
} else { | ||
props = {}; | ||
ruleMap[ruleId] = props; | ||
} | ||
if (ruleMap.hasOwnProperty(ruleId)) { | ||
props = ruleMap[ruleId]; | ||
} else { | ||
props = {}; | ||
ruleMap[ruleId] = props; | ||
processRule.call(this, node, item, list, props, fingerprints); | ||
} | ||
processRule.call(this, node, item, list, props, fingerprints); | ||
}); | ||
}; |
@@ -1,2 +0,2 @@ | ||
var walkRules = require('css-tree').walkRules; | ||
var walk = require('css-tree').walk; | ||
var utils = require('./utils'); | ||
@@ -82,7 +82,6 @@ | ||
module.exports = function mergeRule(ast) { | ||
walkRules(ast, function(node, item, list) { | ||
if (node.type === 'Rule') { | ||
processRule(node, item, list); | ||
} | ||
walk(ast, { | ||
visit: 'Rule', | ||
enter: processRule | ||
}); | ||
}; |
var List = require('css-tree').List; | ||
var walkRulesRight = require('css-tree').walkRulesRight; | ||
var walk = require('css-tree').walk; | ||
var utils = require('./utils'); | ||
@@ -152,7 +152,7 @@ | ||
module.exports = function restructRule(ast) { | ||
walkRulesRight(ast, function(node, item, list) { | ||
if (node.type === 'Rule') { | ||
processRule.call(this, node, item, list); | ||
} | ||
walk(ast, { | ||
visit: 'Rule', | ||
reverse: true, | ||
enter: processRule | ||
}); | ||
}; |
@@ -1,2 +0,2 @@ | ||
var translate = require('css-tree').translate; | ||
var generate = require('css-tree').generate; | ||
@@ -23,3 +23,3 @@ function Index() { | ||
return function markDeclaration(node) { | ||
var id = translate(node); | ||
var id = generate(node); | ||
@@ -26,0 +26,0 @@ node.id = ids.resolve(id); |
var resolveKeyword = require('css-tree').keyword; | ||
var walkRules = require('css-tree').walkRules; | ||
var translate = require('css-tree').translate; | ||
var walk = require('css-tree').walk; | ||
var generate = require('css-tree').generate; | ||
var createDeclarationIndexer = require('./createDeclarationIndexer'); | ||
var processSelector = require('./processSelector'); | ||
function walk(node, markDeclaration, options) { | ||
switch (node.type) { | ||
case 'Rule': | ||
module.exports = function prepare(ast, options) { | ||
var markDeclaration = createDeclarationIndexer(); | ||
walk(ast, { | ||
visit: 'Rule', | ||
enter: function processRule(node) { | ||
node.block.children.each(markDeclaration); | ||
processSelector(node, options.usage); | ||
break; | ||
} | ||
}); | ||
case 'Atrule': | ||
walk(ast, { | ||
visit: 'Atrule', | ||
enter: function(node) { | ||
if (node.prelude) { | ||
node.prelude.id = null; // pre-init property to avoid multiple hidden class for translate | ||
node.prelude.id = translate(node.prelude); | ||
node.prelude.id = null; // pre-init property to avoid multiple hidden class for generate | ||
node.prelude.id = generate(node.prelude); | ||
} | ||
@@ -22,3 +28,3 @@ | ||
// NOTE: still no clarification about problems with keyframes selector grouping (issue #197) | ||
if (resolveKeyword(node.name).name === 'keyframes') { | ||
if (resolveKeyword(node.name).basename === 'keyframes') { | ||
node.block.avoidRulesMerge = true; /* probably we don't need to prevent those merges for @keyframes | ||
@@ -32,11 +38,3 @@ TODO: need to be checked */ | ||
} | ||
break; | ||
} | ||
} | ||
module.exports = function prepare(ast, options) { | ||
var markDeclaration = createDeclarationIndexer(); | ||
walkRules(ast, function(node) { | ||
walk(node, markDeclaration, options); | ||
} | ||
}); | ||
@@ -43,0 +41,0 @@ |
@@ -1,2 +0,2 @@ | ||
var translate = require('css-tree').translate; | ||
var generate = require('css-tree').generate; | ||
var specificity = require('./specificity'); | ||
@@ -36,3 +36,3 @@ | ||
if (scope !== 0 && classScope !== scope) { | ||
throw new Error('Selector can\'t has classes from different scopes: ' + translate(simpleSelector)); | ||
throw new Error('Selector can\'t has classes from different scopes: ' + generate(simpleSelector)); | ||
} | ||
@@ -82,3 +82,3 @@ | ||
simpleSelector.id = null; // pre-init property to avoid multiple hidden class | ||
simpleSelector.id = translate(simpleSelector); | ||
simpleSelector.id = generate(simpleSelector); | ||
@@ -85,0 +85,0 @@ if (scope) { |
{ | ||
"name": "csso", | ||
"version": "3.4.0", | ||
"version": "3.5.0", | ||
"description": "CSS minifier with structural optimisations", | ||
@@ -56,7 +56,8 @@ "keywords": [ | ||
"browserify": "browserify -t package-json-versionify --standalone csso lib/index.js | uglifyjs --compress --mangle -o dist/csso-browser.js", | ||
"gh-pages": "git clone -b gh-pages https://github.com/css/csso.git .gh-pages && npm run browserify && cp dist/csso-browser.js .gh-pages/ && cd .gh-pages && git commit -am \"update\" && git push && cd .. && rm -rf .gh-pages", | ||
"prepublish": "npm run browserify" | ||
"gh-pages": "git clone --depth=1 -b gh-pages https://github.com/css/csso.git .gh-pages && npm run browserify && cp dist/csso-browser.js .gh-pages/ && cd .gh-pages && git commit -am \"update\" && git push && cd .. && rm -rf .gh-pages", | ||
"prepublish": "npm run browserify", | ||
"postpublish": "npm run gh-pages" | ||
}, | ||
"dependencies": { | ||
"css-tree": "1.0.0-alpha25" | ||
"css-tree": "1.0.0-alpha.27" | ||
}, | ||
@@ -63,0 +64,0 @@ "devDependencies": { |
@@ -178,7 +178,7 @@ [![NPM version](https://img.shields.io/npm/v/csso.svg)](https://www.npmjs.com/package/csso) | ||
Specify what comments to left: | ||
Specify what comments to leave: | ||
- `'exclamation'` or `true` – left all exclamation comments (i.e. `/*! .. */`) | ||
- `'first-exclamation'` – remove every comments except first one | ||
- `false` – remove every comments | ||
- `'exclamation'` or `true` – leave all exclamation comments (i.e. `/*! .. */`) | ||
- `'first-exclamation'` – remove every comment except first one | ||
- `false` – remove all comments | ||
@@ -185,0 +185,0 @@ - usage |
Sorry, the diff of this file is too big to display
Uses eval
Supply chain riskPackage uses eval() which is a dangerous function. This prevents the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses eval() which is a dangerous function. This prevents the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
3428
326695
+ Addedcss-tree@1.0.0-alpha.27(transitive)
- Removedcss-tree@1.0.0-alpha25(transitive)
Updatedcss-tree@1.0.0-alpha.27