sugarss
Advanced tools
Comparing version 2.0.0 to 3.0.0
# Change Log | ||
This project adheres to [Semantic Versioning](http://semver.org/). | ||
## 3.0 | ||
* Removed support for Node.js 6.x, 8.x, 11.x, and 13.x versions. | ||
* Moved to PostCSS 8.0. | ||
* Added ES modules support. | ||
## 2.0 | ||
@@ -5,0 +10,0 @@ * Remove Node.js 9 and Node.js 4 support (by Aleks Hudochenkov). |
19
index.js
@@ -1,17 +0,4 @@ | ||
'use strict'; | ||
let stringify = require('./stringify') | ||
let parse = require('./parse') | ||
exports.__esModule = true; | ||
var _stringify = require('./stringify'); | ||
var _stringify2 = _interopRequireDefault(_stringify); | ||
var _parse = require('./parse'); | ||
var _parse2 = _interopRequireDefault(_parse); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
exports.default = { stringify: _stringify2.default, parse: _parse2.default }; | ||
module.exports = exports['default']; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmVzNiJdLCJuYW1lcyI6WyJzdHJpbmdpZnkiLCJwYXJzZSJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7O0FBQ0E7Ozs7OztrQkFFZSxFQUFFQSw4QkFBRixFQUFhQyxzQkFBYixFIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0cmluZ2lmeSBmcm9tICcuL3N0cmluZ2lmeSdcbmltcG9ydCBwYXJzZSBmcm9tICcuL3BhcnNlJ1xuXG5leHBvcnQgZGVmYXVsdCB7IHN0cmluZ2lmeSwgcGFyc2UgfVxuIl19 | ||
module.exports = { stringify, parse } |
41
liner.js
@@ -1,36 +0,17 @@ | ||
'use strict'; | ||
exports.__esModule = true; | ||
exports.default = liner; | ||
function liner(tokens) { | ||
var line = []; | ||
var result = [line]; | ||
var brackets = 0; | ||
for (var _iterator = tokens, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { | ||
var _ref; | ||
if (_isArray) { | ||
if (_i >= _iterator.length) break; | ||
_ref = _iterator[_i++]; | ||
} else { | ||
_i = _iterator.next(); | ||
if (_i.done) break; | ||
_ref = _i.value; | ||
} | ||
var token = _ref; | ||
line.push(token); | ||
module.exports = function liner (tokens) { | ||
let line = [] | ||
let result = [line] | ||
let brackets = 0 | ||
for (let token of tokens) { | ||
line.push(token) | ||
if (token[0] === '(') { | ||
brackets += 1; | ||
brackets += 1 | ||
} else if (token[0] === ')') { | ||
brackets -= 1; | ||
brackets -= 1 | ||
} else if (token[0] === 'newline' && brackets === 0) { | ||
line = []; | ||
result.push(line); | ||
line = [] | ||
result.push(line) | ||
} | ||
} | ||
return result; | ||
return result | ||
} | ||
module.exports = exports['default']; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpbmVyLmVzNiJdLCJuYW1lcyI6WyJsaW5lciIsInRva2VucyIsImxpbmUiLCJyZXN1bHQiLCJicmFja2V0cyIsInRva2VuIiwicHVzaCJdLCJtYXBwaW5ncyI6Ijs7O2tCQUF3QkEsSztBQUFULFNBQVNBLEtBQVQsQ0FBZ0JDLE1BQWhCLEVBQXdCO0FBQ3JDLE1BQUlDLE9BQU8sRUFBWDtBQUNBLE1BQUlDLFNBQVMsQ0FBQ0QsSUFBRCxDQUFiO0FBQ0EsTUFBSUUsV0FBVyxDQUFmO0FBQ0EsdUJBQWtCSCxNQUFsQixrSEFBMEI7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBLFFBQWpCSSxLQUFpQjs7QUFDeEJILFNBQUtJLElBQUwsQ0FBVUQsS0FBVjtBQUNBLFFBQUlBLE1BQU0sQ0FBTixNQUFhLEdBQWpCLEVBQXNCO0FBQ3BCRCxrQkFBWSxDQUFaO0FBQ0QsS0FGRCxNQUVPLElBQUlDLE1BQU0sQ0FBTixNQUFhLEdBQWpCLEVBQXNCO0FBQzNCRCxrQkFBWSxDQUFaO0FBQ0QsS0FGTSxNQUVBLElBQUlDLE1BQU0sQ0FBTixNQUFhLFNBQWIsSUFBMEJELGFBQWEsQ0FBM0MsRUFBOEM7QUFDbkRGLGFBQU8sRUFBUDtBQUNBQyxhQUFPRyxJQUFQLENBQVlKLElBQVo7QUFDRDtBQUNGO0FBQ0QsU0FBT0MsTUFBUDtBQUNEIiwiZmlsZSI6ImxpbmVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGluZXIgKHRva2Vucykge1xuICBsZXQgbGluZSA9IFtdXG4gIGxldCByZXN1bHQgPSBbbGluZV1cbiAgbGV0IGJyYWNrZXRzID0gMFxuICBmb3IgKGxldCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICBsaW5lLnB1c2godG9rZW4pXG4gICAgaWYgKHRva2VuWzBdID09PSAnKCcpIHtcbiAgICAgIGJyYWNrZXRzICs9IDFcbiAgICB9IGVsc2UgaWYgKHRva2VuWzBdID09PSAnKScpIHtcbiAgICAgIGJyYWNrZXRzIC09IDFcbiAgICB9IGVsc2UgaWYgKHRva2VuWzBdID09PSAnbmV3bGluZScgJiYgYnJhY2tldHMgPT09IDApIHtcbiAgICAgIGxpbmUgPSBbXVxuICAgICAgcmVzdWx0LnB1c2gobGluZSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuIl19 |
{ | ||
"name": "sugarss", | ||
"version": "2.0.0", | ||
"version": "3.0.0", | ||
"description": "Indent-based CSS syntax for PostCSS", | ||
@@ -17,4 +17,14 @@ "keywords": [ | ||
"dependencies": { | ||
"postcss": "^7.0.2" | ||
"postcss": "^8.0.2" | ||
}, | ||
"engines": { | ||
"node": ">=10.0" | ||
}, | ||
"exports": { | ||
".": { | ||
"require": "./index.js", | ||
"import": "./index.mjs" | ||
}, | ||
"./": "./" | ||
} | ||
} |
46
parse.js
@@ -1,39 +0,17 @@ | ||
'use strict'; | ||
let { Input } = require('postcss') | ||
exports.__esModule = true; | ||
exports.default = parse; | ||
let preprocess = require('./preprocess') | ||
let tokenizer = require('./tokenize') | ||
let Parser = require('./parser') | ||
let liner = require('./liner') | ||
var _input = require('postcss/lib/input'); | ||
module.exports = function parse (source, opts) { | ||
let input = new Input(source, opts) | ||
var _input2 = _interopRequireDefault(_input); | ||
let parser = new Parser(input) | ||
parser.tokens = tokenizer(input) | ||
parser.parts = preprocess(input, liner(parser.tokens)) | ||
parser.loop() | ||
var _preprocess = require('./preprocess'); | ||
var _preprocess2 = _interopRequireDefault(_preprocess); | ||
var _tokenize = require('./tokenize'); | ||
var _tokenize2 = _interopRequireDefault(_tokenize); | ||
var _parser = require('./parser'); | ||
var _parser2 = _interopRequireDefault(_parser); | ||
var _liner = require('./liner'); | ||
var _liner2 = _interopRequireDefault(_liner); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function parse(source, opts) { | ||
var input = new _input2.default(source, opts); | ||
var parser = new _parser2.default(input); | ||
parser.tokens = (0, _tokenize2.default)(input); | ||
parser.parts = (0, _preprocess2.default)(input, (0, _liner2.default)(parser.tokens)); | ||
parser.loop(); | ||
return parser.root; | ||
return parser.root | ||
} | ||
module.exports = exports['default']; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhcnNlLmVzNiJdLCJuYW1lcyI6WyJwYXJzZSIsInNvdXJjZSIsIm9wdHMiLCJpbnB1dCIsIklucHV0IiwicGFyc2VyIiwiUGFyc2VyIiwidG9rZW5zIiwicGFydHMiLCJsb29wIiwicm9vdCJdLCJtYXBwaW5ncyI6Ijs7O2tCQU93QkEsSzs7QUFQeEI7Ozs7QUFFQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0FBRWUsU0FBU0EsS0FBVCxDQUFnQkMsTUFBaEIsRUFBd0JDLElBQXhCLEVBQThCO0FBQzNDLE1BQUlDLFFBQVEsSUFBSUMsZUFBSixDQUFVSCxNQUFWLEVBQWtCQyxJQUFsQixDQUFaOztBQUVBLE1BQUlHLFNBQVMsSUFBSUMsZ0JBQUosQ0FBV0gsS0FBWCxDQUFiO0FBQ0FFLFNBQU9FLE1BQVAsR0FBZ0Isd0JBQVVKLEtBQVYsQ0FBaEI7QUFDQUUsU0FBT0csS0FBUCxHQUFlLDBCQUFXTCxLQUFYLEVBQWtCLHFCQUFNRSxPQUFPRSxNQUFiLENBQWxCLENBQWY7QUFDQUYsU0FBT0ksSUFBUDs7QUFFQSxTQUFPSixPQUFPSyxJQUFkO0FBQ0QiLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSW5wdXQgZnJvbSAncG9zdGNzcy9saWIvaW5wdXQnXG5cbmltcG9ydCBwcmVwcm9jZXNzIGZyb20gJy4vcHJlcHJvY2VzcydcbmltcG9ydCB0b2tlbml6ZXIgZnJvbSAnLi90b2tlbml6ZSdcbmltcG9ydCBQYXJzZXIgZnJvbSAnLi9wYXJzZXInXG5pbXBvcnQgbGluZXIgZnJvbSAnLi9saW5lcidcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyc2UgKHNvdXJjZSwgb3B0cykge1xuICBsZXQgaW5wdXQgPSBuZXcgSW5wdXQoc291cmNlLCBvcHRzKVxuXG4gIGxldCBwYXJzZXIgPSBuZXcgUGFyc2VyKGlucHV0KVxuICBwYXJzZXIudG9rZW5zID0gdG9rZW5pemVyKGlucHV0KVxuICBwYXJzZXIucGFydHMgPSBwcmVwcm9jZXNzKGlucHV0LCBsaW5lcihwYXJzZXIudG9rZW5zKSlcbiAgcGFyc2VyLmxvb3AoKVxuXG4gIHJldHVybiBwYXJzZXIucm9vdFxufVxuIl19 |
532
parser.js
@@ -1,165 +0,142 @@ | ||
'use strict'; | ||
let { Declaration, Comment, AtRule, Rule, Root } = require('postcss') | ||
exports.__esModule = true; | ||
module.exports = class Parser { | ||
constructor (input) { | ||
this.input = input | ||
var _declaration = require('postcss/lib/declaration'); | ||
this.pos = 0 | ||
this.root = new Root() | ||
this.current = this.root | ||
this.spaces = '' | ||
var _declaration2 = _interopRequireDefault(_declaration); | ||
this.extraIndent = false | ||
this.prevIndent = undefined | ||
this.step = undefined | ||
var _comment = require('postcss/lib/comment'); | ||
var _comment2 = _interopRequireDefault(_comment); | ||
var _atRule = require('postcss/lib/at-rule'); | ||
var _atRule2 = _interopRequireDefault(_atRule); | ||
var _rule = require('postcss/lib/rule'); | ||
var _rule2 = _interopRequireDefault(_rule); | ||
var _root = require('postcss/lib/root'); | ||
var _root2 = _interopRequireDefault(_root); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
var Parser = function () { | ||
function Parser(input) { | ||
_classCallCheck(this, Parser); | ||
this.input = input; | ||
this.pos = 0; | ||
this.root = new _root2.default(); | ||
this.current = this.root; | ||
this.spaces = ''; | ||
this.extraIndent = false; | ||
this.prevIndent = undefined; | ||
this.step = undefined; | ||
this.root.source = { input: input, start: { line: 1, column: 1 } }; | ||
this.root.source = { input, start: { line: 1, column: 1 } } | ||
} | ||
Parser.prototype.loop = function loop() { | ||
var part = void 0; | ||
loop () { | ||
let part | ||
while (this.pos < this.parts.length) { | ||
part = this.parts[this.pos]; | ||
part = this.parts[this.pos] | ||
if (part.comment) { | ||
this.comment(part); | ||
this.comment(part) | ||
} else if (part.atrule) { | ||
this.atrule(part); | ||
this.atrule(part) | ||
} else if (part.colon) { | ||
var next = this.nextNonComment(this.pos); | ||
let next = this.nextNonComment(this.pos) | ||
if (next.end || next.atrule) { | ||
this.decl(part); | ||
this.decl(part) | ||
} else { | ||
var moreIndent = next.indent.length > part.indent.length; | ||
let moreIndent = next.indent.length > part.indent.length | ||
if (!moreIndent) { | ||
this.decl(part); | ||
this.decl(part) | ||
} else if (moreIndent && next.colon) { | ||
this.rule(part); | ||
this.rule(part) | ||
} else if (moreIndent && !next.colon) { | ||
this.decl(part); | ||
this.decl(part) | ||
} | ||
} | ||
} else if (part.end) { | ||
this.root.raws.after = part.before; | ||
this.root.raws.after = part.before | ||
} else { | ||
this.rule(part); | ||
this.rule(part) | ||
} | ||
this.pos += 1; | ||
this.pos += 1 | ||
} | ||
for (var i = this.tokens.length - 1; i >= 0; i--) { | ||
for (let i = this.tokens.length - 1; i >= 0; i--) { | ||
if (this.tokens[i].length > 3) { | ||
var last = this.tokens[i]; | ||
let last = this.tokens[i] | ||
this.root.source.end = { | ||
line: last[4] || last[2], | ||
column: last[5] || last[3] | ||
}; | ||
break; | ||
} | ||
break | ||
} | ||
} | ||
}; | ||
} | ||
Parser.prototype.comment = function comment(part) { | ||
var token = part.tokens[0]; | ||
var node = new _comment2.default(); | ||
this.init(node, part); | ||
node.source.end = { line: token[4], column: token[5] }; | ||
this.commentText(node, token); | ||
}; | ||
comment (part) { | ||
let token = part.tokens[0] | ||
let node = new Comment() | ||
this.init(node, part) | ||
node.source.end = { line: token[4], column: token[5] } | ||
this.commentText(node, token) | ||
} | ||
Parser.prototype.atrule = function atrule(part) { | ||
var atword = part.tokens[0]; | ||
var params = part.tokens.slice(1); | ||
atrule (part) { | ||
let atword = part.tokens[0] | ||
let params = part.tokens.slice(1) | ||
var node = new _atRule2.default(); | ||
node.name = atword[1].slice(1); | ||
this.init(node, part); | ||
let node = new AtRule() | ||
node.name = atword[1].slice(1) | ||
this.init(node, part) | ||
if (node.name === '') this.unnamedAtrule(atword); | ||
if (node.name === '') this.unnamedAtrule(atword) | ||
while (!part.end && part.lastComma) { | ||
this.pos += 1; | ||
part = this.parts[this.pos]; | ||
params.push(['space', part.before + part.indent]); | ||
params = params.concat(part.tokens); | ||
this.pos += 1 | ||
part = this.parts[this.pos] | ||
params.push(['space', part.before + part.indent]) | ||
params = params.concat(part.tokens) | ||
} | ||
node.raws.afterName = this.firstSpaces(params); | ||
this.keepTrailingSpace(node, params); | ||
this.checkSemicolon(params); | ||
this.checkCurly(params); | ||
this.raw(node, 'params', params, atword); | ||
}; | ||
node.raws.afterName = this.firstSpaces(params) | ||
this.keepTrailingSpace(node, params) | ||
this.checkSemicolon(params) | ||
this.checkCurly(params) | ||
this.raw(node, 'params', params, atword) | ||
} | ||
Parser.prototype.decl = function decl(part) { | ||
var node = new _declaration2.default(); | ||
this.init(node, part); | ||
decl (part) { | ||
let node = new Declaration() | ||
this.init(node, part) | ||
var between = ''; | ||
var colon = 0; | ||
var value = []; | ||
var prop = ''; | ||
for (var i = 0; i < part.tokens.length; i++) { | ||
var token = part.tokens[i]; | ||
let between = '' | ||
let colon = 0 | ||
let value = [] | ||
let prop = '' | ||
for (let i = 0; i < part.tokens.length; i++) { | ||
let token = part.tokens[i] | ||
if (token[0] === ':') { | ||
between += token[1]; | ||
colon = token; | ||
value = part.tokens.slice(i + 1); | ||
break; | ||
between += token[1] | ||
colon = token | ||
value = part.tokens.slice(i + 1) | ||
break | ||
} else if (token[0] === 'comment' || token[0] === 'space') { | ||
between += token[1]; | ||
between += token[1] | ||
} else if (between !== '') { | ||
this.badProp(token); | ||
this.badProp(token) | ||
} else { | ||
prop += token[1]; | ||
prop += token[1] | ||
} | ||
} | ||
if (prop === '') this.unnamedDecl(part.tokens[0]); | ||
node.prop = prop; | ||
if (prop === '') this.unnamedDecl(part.tokens[0]) | ||
node.prop = prop | ||
var next = this.parts[this.pos + 1]; | ||
let next = this.parts[this.pos + 1] | ||
while (!next.end && !next.atrule && !next.colon && next.indent.length > part.indent.length) { | ||
value.push(['space', next.before + next.indent]); | ||
value = value.concat(next.tokens); | ||
this.pos += 1; | ||
next = this.parts[this.pos + 1]; | ||
while ( | ||
!next.end && | ||
!next.atrule && | ||
!next.colon && | ||
next.indent.length > part.indent.length | ||
) { | ||
value.push(['space', next.before + next.indent]) | ||
value = value.concat(next.tokens) | ||
this.pos += 1 | ||
next = this.parts[this.pos + 1] | ||
} | ||
var last = value[value.length - 1]; | ||
let last = value[value.length - 1] | ||
if (last && last[0] === 'comment') { | ||
value.pop(); | ||
var comment = new _comment2.default(); | ||
this.current.push(comment); | ||
value.pop() | ||
let comment = new Comment() | ||
this.current.push(comment) | ||
comment.source = { | ||
@@ -169,84 +146,84 @@ input: this.input, | ||
end: { line: last[4], column: last[5] } | ||
}; | ||
var prev = value[value.length - 1]; | ||
} | ||
let prev = value[value.length - 1] | ||
if (prev && prev[0] === 'space') { | ||
value.pop(); | ||
comment.raws.before = prev[1]; | ||
value.pop() | ||
comment.raws.before = prev[1] | ||
} | ||
this.commentText(comment, last); | ||
this.commentText(comment, last) | ||
} | ||
for (var _i = value.length - 1; _i > 0; _i--) { | ||
var t = value[_i][0]; | ||
if (t === 'word' && value[_i][1] === '!important') { | ||
node.important = true; | ||
if (_i > 0 && value[_i - 1][0] === 'space') { | ||
node.raws.important = value[_i - 1][1] + '!important'; | ||
value.splice(_i - 1, 2); | ||
for (let i = value.length - 1; i > 0; i--) { | ||
let t = value[i][0] | ||
if (t === 'word' && value[i][1] === '!important') { | ||
node.important = true | ||
if (i > 0 && value[i - 1][0] === 'space') { | ||
node.raws.important = value[i - 1][1] + '!important' | ||
value.splice(i - 1, 2) | ||
} else { | ||
node.raws.important = '!important'; | ||
value.splice(_i, 1); | ||
node.raws.important = '!important' | ||
value.splice(i, 1) | ||
} | ||
break; | ||
break | ||
} else if (t !== 'space' && t !== 'newline' && t !== 'comment') { | ||
break; | ||
break | ||
} | ||
} | ||
node.raws.between = between + this.firstSpaces(value); | ||
this.checkSemicolon(value); | ||
this.raw(node, 'value', value, colon); | ||
}; | ||
node.raws.between = between + this.firstSpaces(value) | ||
this.checkSemicolon(value) | ||
this.raw(node, 'value', value, colon) | ||
} | ||
Parser.prototype.rule = function rule(part) { | ||
var node = new _rule2.default(); | ||
this.init(node, part); | ||
rule (part) { | ||
let node = new Rule() | ||
this.init(node, part) | ||
var selector = part.tokens; | ||
var next = this.parts[this.pos + 1]; | ||
let selector = part.tokens | ||
let next = this.parts[this.pos + 1] | ||
while (!next.end && next.indent.length === part.indent.length) { | ||
selector.push(['space', next.before + next.indent]); | ||
selector = selector.concat(next.tokens); | ||
this.pos += 1; | ||
next = this.parts[this.pos + 1]; | ||
selector.push(['space', next.before + next.indent]) | ||
selector = selector.concat(next.tokens) | ||
this.pos += 1 | ||
next = this.parts[this.pos + 1] | ||
} | ||
this.keepTrailingSpace(node, selector); | ||
this.checkCurly(selector); | ||
this.raw(node, 'selector', selector); | ||
}; | ||
this.keepTrailingSpace(node, selector) | ||
this.checkCurly(selector) | ||
this.raw(node, 'selector', selector) | ||
} | ||
/* Helpers */ | ||
Parser.prototype.indent = function indent(part) { | ||
var indent = part.indent.length; | ||
var isPrev = typeof this.prevIndent !== 'undefined'; | ||
indent (part) { | ||
let indent = part.indent.length | ||
let isPrev = typeof this.prevIndent !== 'undefined' | ||
if (!isPrev && indent) this.indentedFirstLine(part); | ||
if (!isPrev && indent) this.indentedFirstLine(part) | ||
if (!this.step && indent) { | ||
this.step = indent; | ||
this.root.raws.indent = part.indent; | ||
this.step = indent | ||
this.root.raws.indent = part.indent | ||
} | ||
if (isPrev && this.prevIndent !== indent) { | ||
var diff = indent - this.prevIndent; | ||
let diff = indent - this.prevIndent | ||
if (diff > 0) { | ||
if (diff !== this.step) { | ||
this.wrongIndent(this.prevIndent + this.step, indent, part); | ||
this.wrongIndent(this.prevIndent + this.step, indent, part) | ||
} else if (this.current.last.push) { | ||
this.current = this.current.last; | ||
this.current = this.current.last | ||
} else { | ||
this.extraIndent = ''; | ||
for (var i = 0; i < diff; i++) { | ||
this.extraIndent += ' '; | ||
this.extraIndent = '' | ||
for (let i = 0; i < diff; i++) { | ||
this.extraIndent += ' ' | ||
} | ||
} | ||
} else if (diff % this.step !== 0) { | ||
var m = indent + diff % this.step; | ||
this.wrongIndent(m + ' or ' + (m + this.step), indent, part); | ||
let m = indent + (diff % this.step) | ||
this.wrongIndent(`${m} or ${m + this.step}`, indent, part) | ||
} else { | ||
for (var _i2 = 0; _i2 < -diff / this.step; _i2++) { | ||
this.current = this.current.parent; | ||
for (let i = 0; i < -diff / this.step; i++) { | ||
this.current = this.current.parent | ||
} | ||
@@ -256,15 +233,15 @@ } | ||
this.prevIndent = indent; | ||
}; | ||
this.prevIndent = indent | ||
} | ||
Parser.prototype.init = function init(node, part) { | ||
this.indent(part); | ||
init (node, part) { | ||
this.indent(part) | ||
if (!this.current.nodes) this.current.nodes = []; | ||
this.current.push(node); | ||
if (!this.current.nodes) this.current.nodes = [] | ||
this.current.push(node) | ||
node.raws.before = part.before + part.indent; | ||
node.raws.before = part.before + part.indent | ||
if (this.extraIndent) { | ||
node.raws.extraIndent = this.extraIndent; | ||
this.extraIndent = false; | ||
node.raws.extraIndent = this.extraIndent | ||
this.extraIndent = false | ||
} | ||
@@ -274,107 +251,78 @@ node.source = { | ||
input: this.input | ||
}; | ||
}; | ||
} | ||
} | ||
Parser.prototype.checkCurly = function checkCurly(tokens) { | ||
for (var _iterator = tokens, _isArray = Array.isArray(_iterator), _i3 = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { | ||
var _ref; | ||
if (_isArray) { | ||
if (_i3 >= _iterator.length) break; | ||
_ref = _iterator[_i3++]; | ||
} else { | ||
_i3 = _iterator.next(); | ||
if (_i3.done) break; | ||
_ref = _i3.value; | ||
} | ||
var token = _ref; | ||
checkCurly (tokens) { | ||
for (let token of tokens) { | ||
if (token[0] === '{') { | ||
this.error('Unnecessary curly bracket', token[2], token[3]); | ||
this.error('Unnecessary curly bracket', token[2], token[3]) | ||
} | ||
} | ||
}; | ||
} | ||
Parser.prototype.checkSemicolon = function checkSemicolon(tokens) { | ||
for (var _iterator2 = tokens, _isArray2 = Array.isArray(_iterator2), _i4 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { | ||
var _ref2; | ||
if (_isArray2) { | ||
if (_i4 >= _iterator2.length) break; | ||
_ref2 = _iterator2[_i4++]; | ||
} else { | ||
_i4 = _iterator2.next(); | ||
if (_i4.done) break; | ||
_ref2 = _i4.value; | ||
} | ||
var token = _ref2; | ||
checkSemicolon (tokens) { | ||
for (let token of tokens) { | ||
if (token[0] === ';') { | ||
this.error('Unnecessary semicolon', token[2], token[3]); | ||
this.error('Unnecessary semicolon', token[2], token[3]) | ||
} | ||
} | ||
}; | ||
} | ||
Parser.prototype.keepTrailingSpace = function keepTrailingSpace(node, tokens) { | ||
var lastSpace = tokens[tokens.length - 1]; | ||
keepTrailingSpace (node, tokens) { | ||
let lastSpace = tokens[tokens.length - 1] | ||
if (lastSpace && lastSpace[0] === 'space') { | ||
tokens.pop(); | ||
node.raws.sssBetween = lastSpace[1]; | ||
tokens.pop() | ||
node.raws.sssBetween = lastSpace[1] | ||
} | ||
}; | ||
} | ||
Parser.prototype.firstSpaces = function firstSpaces(tokens) { | ||
var result = ''; | ||
for (var i = 0; i < tokens.length; i++) { | ||
firstSpaces (tokens) { | ||
let result = '' | ||
for (let i = 0; i < tokens.length; i++) { | ||
if (tokens[i][0] === 'space' || tokens[i][0] === 'newline') { | ||
result += tokens.shift()[1]; | ||
i -= 1; | ||
result += tokens.shift()[1] | ||
i -= 1 | ||
} else { | ||
break; | ||
break | ||
} | ||
} | ||
return result; | ||
}; | ||
return result | ||
} | ||
Parser.prototype.raw = function raw(node, prop, tokens, altLast) { | ||
var token = void 0, | ||
type = void 0; | ||
var length = tokens.length; | ||
var value = ''; | ||
var clean = true; | ||
for (var i = 0; i < length; i += 1) { | ||
token = tokens[i]; | ||
type = token[0]; | ||
if (type === 'comment' || type === 'space' && i === length - 1) { | ||
clean = false; | ||
raw (node, prop, tokens, altLast) { | ||
let token, type | ||
let length = tokens.length | ||
let value = '' | ||
let clean = true | ||
for (let i = 0; i < length; i += 1) { | ||
token = tokens[i] | ||
type = token[0] | ||
if (type === 'comment' || (type === 'space' && i === length - 1)) { | ||
clean = false | ||
} else { | ||
value += token[1]; | ||
value += token[1] | ||
} | ||
} | ||
if (!clean) { | ||
var sss = tokens.reduce(function (all, i) { | ||
return all + i[1]; | ||
}, ''); | ||
var raw = tokens.reduce(function (all, i) { | ||
let sss = tokens.reduce((all, i) => all + i[1], '') | ||
let raw = tokens.reduce((all, i) => { | ||
if (i[0] === 'comment' && i[6] === 'inline') { | ||
return all + '/* ' + i[1].slice(2).trim() + ' */'; | ||
return all + '/* ' + i[1].slice(2).trim() + ' */' | ||
} else { | ||
return all + i[1]; | ||
return all + i[1] | ||
} | ||
}, ''); | ||
node.raws[prop] = { value: value, raw: raw }; | ||
if (sss !== raw) node.raws[prop].sss = sss; | ||
}, '') | ||
node.raws[prop] = { value, raw } | ||
if (sss !== raw) node.raws[prop].sss = sss | ||
} | ||
node[prop] = value; | ||
node[prop] = value | ||
var last = void 0; | ||
for (var _i5 = tokens.length - 1; _i5 >= 0; _i5--) { | ||
if (tokens[_i5].length > 2) { | ||
last = tokens[_i5]; | ||
break; | ||
let last | ||
for (let i = tokens.length - 1; i >= 0; i--) { | ||
if (tokens[i].length > 2) { | ||
last = tokens[i] | ||
break | ||
} | ||
} | ||
if (!last) last = altLast; | ||
if (!last) last = altLast | ||
@@ -384,69 +332,63 @@ node.source.end = { | ||
column: last[5] || last[3] | ||
}; | ||
}; | ||
} | ||
} | ||
Parser.prototype.nextNonComment = function nextNonComment(pos) { | ||
var next = pos; | ||
var part = void 0; | ||
nextNonComment (pos) { | ||
let next = pos | ||
let part | ||
while (next < this.parts.length) { | ||
next += 1; | ||
part = this.parts[next]; | ||
if (part.end || !part.comment) break; | ||
next += 1 | ||
part = this.parts[next] | ||
if (part.end || !part.comment) break | ||
} | ||
return part; | ||
}; | ||
return part | ||
} | ||
Parser.prototype.commentText = function commentText(node, token) { | ||
var text = token[1]; | ||
commentText (node, token) { | ||
let text = token[1] | ||
if (token[6] === 'inline') { | ||
node.raws.inline = true; | ||
text = text.slice(2); | ||
node.raws.inline = true | ||
text = text.slice(2) | ||
} else { | ||
text = text.slice(2, -2); | ||
text = text.slice(2, -2) | ||
} | ||
var match = text.match(/^(\s*)([^]*[^\s])(\s*)\n?$/); | ||
let match = text.match(/^(\s*)([^]*\S)(\s*)\n?$/) | ||
if (match) { | ||
node.text = match[2]; | ||
node.raws.left = match[1]; | ||
node.raws.inlineRight = match[3]; | ||
node.text = match[2] | ||
node.raws.left = match[1] | ||
node.raws.inlineRight = match[3] | ||
} else { | ||
node.text = ''; | ||
node.raws.left = ''; | ||
node.raws.inlineRight = ''; | ||
node.text = '' | ||
node.raws.left = '' | ||
node.raws.inlineRight = '' | ||
} | ||
}; | ||
} | ||
// Errors | ||
Parser.prototype.error = function error(msg, line, column) { | ||
throw this.input.error(msg, line, column); | ||
}; | ||
error (msg, line, column) { | ||
throw this.input.error(msg, line, column) | ||
} | ||
Parser.prototype.unnamedAtrule = function unnamedAtrule(token) { | ||
this.error('At-rule without name', token[2], token[3]); | ||
}; | ||
unnamedAtrule (token) { | ||
this.error('At-rule without name', token[2], token[3]) | ||
} | ||
Parser.prototype.unnamedDecl = function unnamedDecl(token) { | ||
this.error('Declaration without name', token[2], token[3]); | ||
}; | ||
unnamedDecl (token) { | ||
this.error('Declaration without name', token[2], token[3]) | ||
} | ||
Parser.prototype.indentedFirstLine = function indentedFirstLine(part) { | ||
this.error('First line should not have indent', part.number, 1); | ||
}; | ||
indentedFirstLine (part) { | ||
this.error('First line should not have indent', part.number, 1) | ||
} | ||
Parser.prototype.wrongIndent = function wrongIndent(expected, real, part) { | ||
var msg = 'Expected ' + expected + ' indent, but get ' + real; | ||
this.error(msg, part.number, 1); | ||
}; | ||
wrongIndent (expected, real, part) { | ||
let msg = `Expected ${expected} indent, but get ${real}` | ||
this.error(msg, part.number, 1) | ||
} | ||
Parser.prototype.badProp = function badProp(token) { | ||
this.error('Unexpected separator in property', token[2], token[3]); | ||
}; | ||
return Parser; | ||
}(); | ||
exports.default = Parser; | ||
module.exports = exports['default']; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhcnNlci5lczYiXSwibmFtZXMiOlsiUGFyc2VyIiwiaW5wdXQiLCJwb3MiLCJyb290IiwiUm9vdCIsImN1cnJlbnQiLCJzcGFjZXMiLCJleHRyYUluZGVudCIsInByZXZJbmRlbnQiLCJ1bmRlZmluZWQiLCJzdGVwIiwic291cmNlIiwic3RhcnQiLCJsaW5lIiwiY29sdW1uIiwibG9vcCIsInBhcnQiLCJwYXJ0cyIsImxlbmd0aCIsImNvbW1lbnQiLCJhdHJ1bGUiLCJjb2xvbiIsIm5leHQiLCJuZXh0Tm9uQ29tbWVudCIsImVuZCIsImRlY2wiLCJtb3JlSW5kZW50IiwiaW5kZW50IiwicnVsZSIsInJhd3MiLCJhZnRlciIsImJlZm9yZSIsImkiLCJ0b2tlbnMiLCJsYXN0IiwidG9rZW4iLCJub2RlIiwiQ29tbWVudCIsImluaXQiLCJjb21tZW50VGV4dCIsImF0d29yZCIsInBhcmFtcyIsInNsaWNlIiwiQXRSdWxlIiwibmFtZSIsInVubmFtZWRBdHJ1bGUiLCJsYXN0Q29tbWEiLCJwdXNoIiwiY29uY2F0IiwiYWZ0ZXJOYW1lIiwiZmlyc3RTcGFjZXMiLCJrZWVwVHJhaWxpbmdTcGFjZSIsImNoZWNrU2VtaWNvbG9uIiwiY2hlY2tDdXJseSIsInJhdyIsIkRlY2xhcmF0aW9uIiwiYmV0d2VlbiIsInZhbHVlIiwicHJvcCIsImJhZFByb3AiLCJ1bm5hbWVkRGVjbCIsInBvcCIsInByZXYiLCJ0IiwiaW1wb3J0YW50Iiwic3BsaWNlIiwiUnVsZSIsInNlbGVjdG9yIiwiaXNQcmV2IiwiaW5kZW50ZWRGaXJzdExpbmUiLCJkaWZmIiwid3JvbmdJbmRlbnQiLCJtIiwicGFyZW50Iiwibm9kZXMiLCJlcnJvciIsImxhc3RTcGFjZSIsInNzc0JldHdlZW4iLCJyZXN1bHQiLCJzaGlmdCIsImFsdExhc3QiLCJ0eXBlIiwiY2xlYW4iLCJzc3MiLCJyZWR1Y2UiLCJhbGwiLCJ0cmltIiwidGV4dCIsImlubGluZSIsIm1hdGNoIiwibGVmdCIsImlubGluZVJpZ2h0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QUFVQyxJLEVBQU0vRSxJLEVBQU07QUFDakMsUUFBSTRFLG9CQUFtQkUsUUFBbkIseUJBQWlEQyxJQUFyRDtBQUNBLFNBQUtwQixLQUFMLENBQVdpQixHQUFYLEVBQWdCNUUsS0FBSzZFLE1BQXJCLEVBQTZCLENBQTdCO0FBQ0QsRzs7bUJBRURsQyxPLG9CQUFTeEIsSyxFQUFPO0FBQ2QsU0FBS3dDLEtBQUwsQ0FBVyxrQ0FBWCxFQUErQ3hDLE1BQU0sQ0FBTixDQUEvQyxFQUF5REEsTUFBTSxDQUFOLENBQXpEO0FBQ0QsRzs7Ozs7a0JBOVhrQm5DLE0iLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERlY2xhcmF0aW9uIGZyb20gJ3Bvc3Rjc3MvbGliL2RlY2xhcmF0aW9uJ1xuaW1wb3J0IENvbW1lbnQgZnJvbSAncG9zdGNzcy9saWIvY29tbWVudCdcbmltcG9ydCBBdFJ1bGUgZnJvbSAncG9zdGNzcy9saWIvYXQtcnVsZSdcbmltcG9ydCBSdWxlIGZyb20gJ3Bvc3Rjc3MvbGliL3J1bGUnXG5pbXBvcnQgUm9vdCBmcm9tICdwb3N0Y3NzL2xpYi9yb290J1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJzZXIge1xuICBjb25zdHJ1Y3RvciAoaW5wdXQpIHtcbiAgICB0aGlzLmlucHV0ID0gaW5wdXRcblxuICAgIHRoaXMucG9zID0gMFxuICAgIHRoaXMucm9vdCA9IG5ldyBSb290KClcbiAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnJvb3RcbiAgICB0aGlzLnNwYWNlcyA9ICcnXG5cbiAgICB0aGlzLmV4dHJhSW5kZW50ID0gZmFsc2VcbiAgICB0aGlzLnByZXZJbmRlbnQgPSB1bmRlZmluZWRcbiAgICB0aGlzLnN0ZXAgPSB1bmRlZmluZWRcblxuICAgIHRoaXMucm9vdC5zb3VyY2UgPSB7IGlucHV0LCBzdGFydDogeyBsaW5lOiAxLCBjb2x1bW46IDEgfSB9XG4gIH1cblxuICBsb29wICgpIHtcbiAgICBsZXQgcGFydFxuICAgIHdoaWxlICh0aGlzLnBvcyA8IHRoaXMucGFydHMubGVuZ3RoKSB7XG4gICAgICBwYXJ0ID0gdGhpcy5wYXJ0c1t0aGlzLnBvc11cblxuICAgICAgaWYgKHBhcnQuY29tbWVudCkge1xuICAgICAgICB0aGlzLmNvbW1lbnQocGFydClcbiAgICAgIH0gZWxzZSBpZiAocGFydC5hdHJ1bGUpIHtcbiAgICAgICAgdGhpcy5hdHJ1bGUocGFydClcbiAgICAgIH0gZWxzZSBpZiAocGFydC5jb2xvbikge1xuICAgICAgICBsZXQgbmV4dCA9IHRoaXMubmV4dE5vbkNvbW1lbnQodGhpcy5wb3MpXG5cbiAgICAgICAgaWYgKG5leHQuZW5kIHx8IG5leHQuYXRydWxlKSB7XG4gICAgICAgICAgdGhpcy5kZWNsKHBhcnQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IG1vcmVJbmRlbnQgPSBuZXh0LmluZGVudC5sZW5ndGggPiBwYXJ0LmluZGVudC5sZW5ndGhcbiAgICAgICAgICBpZiAoIW1vcmVJbmRlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVjbChwYXJ0KVxuICAgICAgICAgIH0gZWxzZSBpZiAobW9yZUluZGVudCAmJiBuZXh0LmNvbG9uKSB7XG4gICAgICAgICAgICB0aGlzLnJ1bGUocGFydClcbiAgICAgICAgICB9IGVsc2UgaWYgKG1vcmVJbmRlbnQgJiYgIW5leHQuY29sb24pIHtcbiAgICAgICAgICAgIHRoaXMuZGVjbChwYXJ0KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwYXJ0LmVuZCkge1xuICAgICAgICB0aGlzLnJvb3QucmF3cy5hZnRlciA9IHBhcnQuYmVmb3JlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJ1bGUocGFydClcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MgKz0gMVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSB0aGlzLnRva2Vucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5zW2ldLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgbGV0IGxhc3QgPSB0aGlzLnRva2Vuc1tpXVxuICAgICAgICB0aGlzLnJvb3Quc291cmNlLmVuZCA9IHtcbiAgICAgICAgICBsaW5lOiBsYXN0WzRdIHx8IGxhc3RbMl0sXG4gICAgICAgICAgY29sdW1uOiBsYXN0WzVdIHx8IGxhc3RbM11cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbW1lbnQgKHBhcnQpIHtcbiAgICBsZXQgdG9rZW4gPSBwYXJ0LnRva2Vuc1swXVxuICAgIGxldCBub2RlID0gbmV3IENvbW1lbnQoKVxuICAgIHRoaXMuaW5pdChub2RlLCBwYXJ0KVxuICAgIG5vZGUuc291cmNlLmVuZCA9IHsgbGluZTogdG9rZW5bNF0sIGNvbHVtbjogdG9rZW5bNV0gfVxuICAgIHRoaXMuY29tbWVudFRleHQobm9kZSwgdG9rZW4pXG4gIH1cblxuICBhdHJ1bGUgKHBhcnQpIHtcbiAgICBsZXQgYXR3b3JkID0gcGFydC50b2tlbnNbMF1cbiAgICBsZXQgcGFyYW1zID0gcGFydC50b2tlbnMuc2xpY2UoMSlcblxuICAgIGxldCBub2RlID0gbmV3IEF0UnVsZSgpXG4gICAgbm9kZS5uYW1lID0gYXR3b3JkWzFdLnNsaWNlKDEpXG4gICAgdGhpcy5pbml0KG5vZGUsIHBhcnQpXG5cbiAgICBpZiAobm9kZS5uYW1lID09PSAnJykgdGhpcy51bm5hbWVkQXRydWxlKGF0d29yZClcblxuICAgIHdoaWxlICghcGFydC5lbmQgJiYgcGFydC5sYXN0Q29tbWEpIHtcbiAgICAgIHRoaXMucG9zICs9IDFcbiAgICAgIHBhcnQgPSB0aGlzLnBhcnRzW3RoaXMucG9zXVxuICAgICAgcGFyYW1zLnB1c2goWydzcGFjZScsIHBhcnQuYmVmb3JlICsgcGFydC5pbmRlbnRdKVxuICAgICAgcGFyYW1zID0gcGFyYW1zLmNvbmNhdChwYXJ0LnRva2VucylcbiAgICB9XG5cbiAgICBub2RlLnJhd3MuYWZ0ZXJOYW1lID0gdGhpcy5maXJzdFNwYWNlcyhwYXJhbXMpXG4gICAgdGhpcy5rZWVwVHJhaWxpbmdTcGFjZShub2RlLCBwYXJhbXMpXG4gICAgdGhpcy5jaGVja1NlbWljb2xvbihwYXJhbXMpXG4gICAgdGhpcy5jaGVja0N1cmx5KHBhcmFtcylcbiAgICB0aGlzLnJhdyhub2RlLCAncGFyYW1zJywgcGFyYW1zLCBhdHdvcmQpXG4gIH1cblxuICBkZWNsIChwYXJ0KSB7XG4gICAgbGV0IG5vZGUgPSBuZXcgRGVjbGFyYXRpb24oKVxuICAgIHRoaXMuaW5pdChub2RlLCBwYXJ0KVxuXG4gICAgbGV0IGJldHdlZW4gPSAnJ1xuICAgIGxldCBjb2xvbiA9IDBcbiAgICBsZXQgdmFsdWUgPSBbXVxuICAgIGxldCBwcm9wID0gJydcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnQudG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgdG9rZW4gPSBwYXJ0LnRva2Vuc1tpXVxuICAgICAgaWYgKHRva2VuWzBdID09PSAnOicpIHtcbiAgICAgICAgYmV0d2VlbiArPSB0b2tlblsxXVxuICAgICAgICBjb2xvbiA9IHRva2VuXG4gICAgICAgIHZhbHVlID0gcGFydC50b2tlbnMuc2xpY2UoaSArIDEpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKHRva2VuWzBdID09PSAnY29tbWVudCcgfHwgdG9rZW5bMF0gPT09ICdzcGFjZScpIHtcbiAgICAgICAgYmV0d2VlbiArPSB0b2tlblsxXVxuICAgICAgfSBlbHNlIGlmIChiZXR3ZWVuICE9PSAnJykge1xuICAgICAgICB0aGlzLmJhZFByb3AodG9rZW4pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wICs9IHRva2VuWzFdXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3AgPT09ICcnKSB0aGlzLnVubmFtZWREZWNsKHBhcnQudG9rZW5zWzBdKVxuICAgIG5vZGUucHJvcCA9IHByb3BcblxuICAgIGxldCBuZXh0ID0gdGhpcy5wYXJ0c1t0aGlzLnBvcyArIDFdXG5cbiAgICB3aGlsZSAoIW5leHQuZW5kICYmICFuZXh0LmF0cnVsZSAmJiAhbmV4dC5jb2xvbiAmJlxuICAgICAgICAgICAgICAgIG5leHQuaW5kZW50Lmxlbmd0aCA+IHBhcnQuaW5kZW50Lmxlbmd0aCkge1xuICAgICAgdmFsdWUucHVzaChbJ3NwYWNlJywgbmV4dC5iZWZvcmUgKyBuZXh0LmluZGVudF0pXG4gICAgICB2YWx1ZSA9IHZhbHVlLmNvbmNhdChuZXh0LnRva2VucylcbiAgICAgIHRoaXMucG9zICs9IDFcbiAgICAgIG5leHQgPSB0aGlzLnBhcnRzW3RoaXMucG9zICsgMV1cbiAgICB9XG5cbiAgICBsZXQgbGFzdCA9IHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdXG4gICAgaWYgKGxhc3QgJiYgbGFzdFswXSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICB2YWx1ZS5wb3AoKVxuICAgICAgbGV0IGNvbW1lbnQgPSBuZXcgQ29tbWVudCgpXG4gICAgICB0aGlzLmN1cnJlbnQucHVzaChjb21tZW50KVxuICAgICAgY29tbWVudC5zb3VyY2UgPSB7XG4gICAgICAgIGlucHV0OiB0aGlzLmlucHV0LFxuICAgICAgICBzdGFydDogeyBsaW5lOiBsYXN0WzJdLCBjb2x1bW46IGxhc3RbM10gfSxcbiAgICAgICAgZW5kOiB7IGxpbmU6IGxhc3RbNF0sIGNvbHVtbjogbGFzdFs1XSB9XG4gICAgICB9XG4gICAgICBsZXQgcHJldiA9IHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdXG4gICAgICBpZiAocHJldiAmJiBwcmV2WzBdID09PSAnc3BhY2UnKSB7XG4gICAgICAgIHZhbHVlLnBvcCgpXG4gICAgICAgIGNvbW1lbnQucmF3cy5iZWZvcmUgPSBwcmV2WzFdXG4gICAgICB9XG4gICAgICB0aGlzLmNvbW1lbnRUZXh0KGNvbW1lbnQsIGxhc3QpXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHZhbHVlLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgIGxldCB0ID0gdmFsdWVbaV1bMF1cbiAgICAgIGlmICh0ID09PSAnd29yZCcgJiYgdmFsdWVbaV1bMV0gPT09ICchaW1wb3J0YW50Jykge1xuICAgICAgICBub2RlLmltcG9ydGFudCA9IHRydWVcbiAgICAgICAgaWYgKGkgPiAwICYmIHZhbHVlW2kgLSAxXVswXSA9PT0gJ3NwYWNlJykge1xuICAgICAgICAgIG5vZGUucmF3cy5pbXBvcnRhbnQgPSB2YWx1ZVtpIC0gMV1bMV0gKyAnIWltcG9ydGFudCdcbiAgICAgICAgICB2YWx1ZS5zcGxpY2UoaSAtIDEsIDIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZS5yYXdzLmltcG9ydGFudCA9ICchaW1wb3J0YW50J1xuICAgICAgICAgIHZhbHVlLnNwbGljZShpLCAxKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKHQgIT09ICdzcGFjZScgJiYgdCAhPT0gJ25ld2xpbmUnICYmIHQgIT09ICdjb21tZW50Jykge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUucmF3cy5iZXR3ZWVuID0gYmV0d2VlbiArIHRoaXMuZmlyc3RTcGFjZXModmFsdWUpXG4gICAgdGhpcy5jaGVja1NlbWljb2xvbih2YWx1ZSlcbiAgICB0aGlzLnJhdyhub2RlLCAndmFsdWUnLCB2YWx1ZSwgY29sb24pXG4gIH1cblxuICBydWxlIChwYXJ0KSB7XG4gICAgbGV0IG5vZGUgPSBuZXcgUnVsZSgpXG4gICAgdGhpcy5pbml0KG5vZGUsIHBhcnQpXG5cbiAgICBsZXQgc2VsZWN0b3IgPSBwYXJ0LnRva2Vuc1xuICAgIGxldCBuZXh0ID0gdGhpcy5wYXJ0c1t0aGlzLnBvcyArIDFdXG5cbiAgICB3aGlsZSAoIW5leHQuZW5kICYmIG5leHQuaW5kZW50Lmxlbmd0aCA9PT0gcGFydC5pbmRlbnQubGVuZ3RoKSB7XG4gICAgICBzZWxlY3Rvci5wdXNoKFsnc3BhY2UnLCBuZXh0LmJlZm9yZSArIG5leHQuaW5kZW50XSlcbiAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IuY29uY2F0KG5leHQudG9rZW5zKVxuICAgICAgdGhpcy5wb3MgKz0gMVxuICAgICAgbmV4dCA9IHRoaXMucGFydHNbdGhpcy5wb3MgKyAxXVxuICAgIH1cblxuICAgIHRoaXMua2VlcFRyYWlsaW5nU3BhY2Uobm9kZSwgc2VsZWN0b3IpXG4gICAgdGhpcy5jaGVja0N1cmx5KHNlbGVjdG9yKVxuICAgIHRoaXMucmF3KG5vZGUsICdzZWxlY3RvcicsIHNlbGVjdG9yKVxuICB9XG5cbiAgLyogSGVscGVycyAqL1xuXG4gIGluZGVudCAocGFydCkge1xuICAgIGxldCBpbmRlbnQgPSBwYXJ0LmluZGVudC5sZW5ndGhcbiAgICBsZXQgaXNQcmV2ID0gdHlwZW9mIHRoaXMucHJldkluZGVudCAhPT0gJ3VuZGVmaW5lZCdcblxuICAgIGlmICghaXNQcmV2ICYmIGluZGVudCkgdGhpcy5pbmRlbnRlZEZpcnN0TGluZShwYXJ0KVxuXG4gICAgaWYgKCF0aGlzLnN0ZXAgJiYgaW5kZW50KSB7XG4gICAgICB0aGlzLnN0ZXAgPSBpbmRlbnRcbiAgICAgIHRoaXMucm9vdC5yYXdzLmluZGVudCA9IHBhcnQuaW5kZW50XG4gICAgfVxuXG4gICAgaWYgKGlzUHJldiAmJiB0aGlzLnByZXZJbmRlbnQgIT09IGluZGVudCkge1xuICAgICAgbGV0IGRpZmYgPSBpbmRlbnQgLSB0aGlzLnByZXZJbmRlbnRcbiAgICAgIGlmIChkaWZmID4gMCkge1xuICAgICAgICBpZiAoZGlmZiAhPT0gdGhpcy5zdGVwKSB7XG4gICAgICAgICAgdGhpcy53cm9uZ0luZGVudCh0aGlzLnByZXZJbmRlbnQgKyB0aGlzLnN0ZXAsIGluZGVudCwgcGFydClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnQubGFzdC5wdXNoKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5jdXJyZW50Lmxhc3RcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmV4dHJhSW5kZW50ID0gJydcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpZmY7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5leHRyYUluZGVudCArPSAnICdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGlmZiAlIHRoaXMuc3RlcCAhPT0gMCkge1xuICAgICAgICBsZXQgbSA9IGluZGVudCArIGRpZmYgJSB0aGlzLnN0ZXBcbiAgICAgICAgdGhpcy53cm9uZ0luZGVudChgJHsgbSB9IG9yICR7IG0gKyB0aGlzLnN0ZXAgfWAsIGluZGVudCwgcGFydClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgLWRpZmYgLyB0aGlzLnN0ZXA7IGkrKykge1xuICAgICAgICAgIHRoaXMuY3VycmVudCA9IHRoaXMuY3VycmVudC5wYXJlbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucHJldkluZGVudCA9IGluZGVudFxuICB9XG5cbiAgaW5pdCAobm9kZSwgcGFydCkge1xuICAgIHRoaXMuaW5kZW50KHBhcnQpXG5cbiAgICBpZiAoIXRoaXMuY3VycmVudC5ub2RlcykgdGhpcy5jdXJyZW50Lm5vZGVzID0gW11cbiAgICB0aGlzLmN1cnJlbnQucHVzaChub2RlKVxuXG4gICAgbm9kZS5yYXdzLmJlZm9yZSA9IHBhcnQuYmVmb3JlICsgcGFydC5pbmRlbnRcbiAgICBpZiAodGhpcy5leHRyYUluZGVudCkge1xuICAgICAgbm9kZS5yYXdzLmV4dHJhSW5kZW50ID0gdGhpcy5leHRyYUluZGVudFxuICAgICAgdGhpcy5leHRyYUluZGVudCA9IGZhbHNlXG4gICAgfVxuICAgIG5vZGUuc291cmNlID0ge1xuICAgICAgc3RhcnQ6IHsgbGluZTogcGFydC50b2tlbnNbMF1bMl0sIGNvbHVtbjogcGFydC50b2tlbnNbMF1bM10gfSxcbiAgICAgIGlucHV0OiB0aGlzLmlucHV0XG4gICAgfVxuICB9XG5cbiAgY2hlY2tDdXJseSAodG9rZW5zKSB7XG4gICAgZm9yIChsZXQgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgICBpZiAodG9rZW5bMF0gPT09ICd7Jykge1xuICAgICAgICB0aGlzLmVycm9yKCdVbm5lY2Vzc2FyeSBjdXJseSBicmFja2V0JywgdG9rZW5bMl0sIHRva2VuWzNdKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoZWNrU2VtaWNvbG9uICh0b2tlbnMpIHtcbiAgICBmb3IgKGxldCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgIGlmICh0b2tlblswXSA9PT0gJzsnKSB7XG4gICAgICAgIHRoaXMuZXJyb3IoJ1VubmVjZXNzYXJ5IHNlbWljb2xvbicsIHRva2VuWzJdLCB0b2tlblszXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBrZWVwVHJhaWxpbmdTcGFjZSAobm9kZSwgdG9rZW5zKSB7XG4gICAgbGV0IGxhc3RTcGFjZSA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV1cbiAgICBpZiAobGFzdFNwYWNlICYmIGxhc3RTcGFjZVswXSA9PT0gJ3NwYWNlJykge1xuICAgICAgdG9rZW5zLnBvcCgpXG4gICAgICBub2RlLnJhd3Muc3NzQmV0d2VlbiA9IGxhc3RTcGFjZVsxXVxuICAgIH1cbiAgfVxuXG4gIGZpcnN0U3BhY2VzICh0b2tlbnMpIHtcbiAgICBsZXQgcmVzdWx0ID0gJydcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRva2Vuc1tpXVswXSA9PT0gJ3NwYWNlJyB8fCB0b2tlbnNbaV1bMF0gPT09ICduZXdsaW5lJykge1xuICAgICAgICByZXN1bHQgKz0gdG9rZW5zLnNoaWZ0KClbMV1cbiAgICAgICAgaSAtPSAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICByYXcgKG5vZGUsIHByb3AsIHRva2VucywgYWx0TGFzdCkge1xuICAgIGxldCB0b2tlbiwgdHlwZVxuICAgIGxldCBsZW5ndGggPSB0b2tlbnMubGVuZ3RoXG4gICAgbGV0IHZhbHVlID0gJydcbiAgICBsZXQgY2xlYW4gPSB0cnVlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdG9rZW4gPSB0b2tlbnNbaV1cbiAgICAgIHR5cGUgPSB0b2tlblswXVxuICAgICAgaWYgKHR5cGUgPT09ICdjb21tZW50JyB8fCAodHlwZSA9PT0gJ3NwYWNlJyAmJiBpID09PSBsZW5ndGggLSAxKSkge1xuICAgICAgICBjbGVhbiA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSArPSB0b2tlblsxXVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWNsZWFuKSB7XG4gICAgICBsZXQgc3NzID0gdG9rZW5zLnJlZHVjZSgoYWxsLCBpKSA9PiBhbGwgKyBpWzFdLCAnJylcbiAgICAgIGxldCByYXcgPSB0b2tlbnMucmVkdWNlKChhbGwsIGkpID0+IHtcbiAgICAgICAgaWYgKGlbMF0gPT09ICdjb21tZW50JyAmJiBpWzZdID09PSAnaW5saW5lJykge1xuICAgICAgICAgIHJldHVybiBhbGwgKyAnLyogJyArIGlbMV0uc2xpY2UoMikudHJpbSgpICsgJyAqLydcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYWxsICsgaVsxXVxuICAgICAgICB9XG4gICAgICB9LCAnJylcbiAgICAgIG5vZGUucmF3c1twcm9wXSA9IHsgdmFsdWUsIHJhdyB9XG4gICAgICBpZiAoc3NzICE9PSByYXcpIG5vZGUucmF3c1twcm9wXS5zc3MgPSBzc3NcbiAgICB9XG4gICAgbm9kZVtwcm9wXSA9IHZhbHVlXG5cbiAgICBsZXQgbGFzdFxuICAgIGZvciAobGV0IGkgPSB0b2tlbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmICh0b2tlbnNbaV0ubGVuZ3RoID4gMikge1xuICAgICAgICBsYXN0ID0gdG9rZW5zW2ldXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIGlmICghbGFzdCkgbGFzdCA9IGFsdExhc3RcblxuICAgIG5vZGUuc291cmNlLmVuZCA9IHtcbiAgICAgIGxpbmU6IGxhc3RbNF0gfHwgbGFzdFsyXSxcbiAgICAgIGNvbHVtbjogbGFzdFs1XSB8fCBsYXN0WzNdXG4gICAgfVxuICB9XG5cbiAgbmV4dE5vbkNvbW1lbnQgKHBvcykge1xuICAgIGxldCBuZXh0ID0gcG9zXG4gICAgbGV0IHBhcnRcbiAgICB3aGlsZSAobmV4dCA8IHRoaXMucGFydHMubGVuZ3RoKSB7XG4gICAgICBuZXh0ICs9IDFcbiAgICAgIHBhcnQgPSB0aGlzLnBhcnRzW25leHRdXG4gICAgICBpZiAocGFydC5lbmQgfHwgIXBhcnQuY29tbWVudCkgYnJlYWtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnRcbiAgfVxuXG4gIGNvbW1lbnRUZXh0IChub2RlLCB0b2tlbikge1xuICAgIGxldCB0ZXh0ID0gdG9rZW5bMV1cbiAgICBpZiAodG9rZW5bNl0gPT09ICdpbmxpbmUnKSB7XG4gICAgICBub2RlLnJhd3MuaW5saW5lID0gdHJ1ZVxuICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMilcbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMiwgLTIpXG4gICAgfVxuXG4gICAgbGV0IG1hdGNoID0gdGV4dC5tYXRjaCgvXihcXHMqKShbXl0qW15cXHNdKShcXHMqKVxcbj8kLylcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIG5vZGUudGV4dCA9IG1hdGNoWzJdXG4gICAgICBub2RlLnJhd3MubGVmdCA9IG1hdGNoWzFdXG4gICAgICBub2RlLnJhd3MuaW5saW5lUmlnaHQgPSBtYXRjaFszXVxuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnRleHQgPSAnJ1xuICAgICAgbm9kZS5yYXdzLmxlZnQgPSAnJ1xuICAgICAgbm9kZS5yYXdzLmlubGluZVJpZ2h0ID0gJydcbiAgICB9XG4gIH1cblxuICAvLyBFcnJvcnNcblxuICBlcnJvciAobXNnLCBsaW5lLCBjb2x1bW4pIHtcbiAgICB0aHJvdyB0aGlzLmlucHV0LmVycm9yKG1zZywgbGluZSwgY29sdW1uKVxuICB9XG5cbiAgdW5uYW1lZEF0cnVsZSAodG9rZW4pIHtcbiAgICB0aGlzLmVycm9yKCdBdC1ydWxlIHdpdGhvdXQgbmFtZScsIHRva2VuWzJdLCB0b2tlblszXSlcbiAgfVxuXG4gIHVubmFtZWREZWNsICh0b2tlbikge1xuICAgIHRoaXMuZXJyb3IoJ0RlY2xhcmF0aW9uIHdpdGhvdXQgbmFtZScsIHRva2VuWzJdLCB0b2tlblszXSlcbiAgfVxuXG4gIGluZGVudGVkRmlyc3RMaW5lIChwYXJ0KSB7XG4gICAgdGhpcy5lcnJvcignRmlyc3QgbGluZSBzaG91bGQgbm90IGhhdmUgaW5kZW50JywgcGFydC5udW1iZXIsIDEpXG4gIH1cblxuICB3cm9uZ0luZGVudCAoZXhwZWN0ZWQsIHJlYWwsIHBhcnQpIHtcbiAgICBsZXQgbXNnID0gYEV4cGVjdGVkICR7IGV4cGVjdGVkIH0gaW5kZW50LCBidXQgZ2V0ICR7IHJlYWwgfWBcbiAgICB0aGlzLmVycm9yKG1zZywgcGFydC5udW1iZXIsIDEpXG4gIH1cblxuICBiYWRQcm9wICh0b2tlbikge1xuICAgIHRoaXMuZXJyb3IoJ1VuZXhwZWN0ZWQgc2VwYXJhdG9yIGluIHByb3BlcnR5JywgdG9rZW5bMl0sIHRva2VuWzNdKVxuICB9XG59XG4iXX0= | ||
badProp (token) { | ||
this.error('Unexpected separator in property', token[2], token[3]) | ||
} | ||
} |
@@ -1,40 +0,36 @@ | ||
'use strict'; | ||
exports.__esModule = true; | ||
exports.default = preprocess; | ||
function indentError(input, l, p) { | ||
throw input.error('Mixed tabs and spaces are not allowed', l, p + 1); | ||
function indentError (input, l, p) { | ||
throw input.error('Mixed tabs and spaces are not allowed', l, p + 1) | ||
} | ||
function preprocess(input, lines) { | ||
var indentType = void 0; | ||
var prevNumber = 0; | ||
var parts = lines.map(function (line) { | ||
var lastComma = false; | ||
var comment = false; | ||
var number = prevNumber + 1; | ||
var atrule = false; | ||
var indent = ''; | ||
var tokens = []; | ||
var colon = false; | ||
module.exports = function preprocess (input, lines) { | ||
let indentType | ||
let prevNumber = 0 | ||
let parts = lines.map(line => { | ||
let lastComma = false | ||
let comment = false | ||
let number = prevNumber + 1 | ||
let atrule = false | ||
let indent = '' | ||
let tokens = [] | ||
let colon = false | ||
if (line.length > 0) { | ||
if (line[0][0] === 'space') { | ||
indent = line[0][1]; | ||
tokens = line.slice(1); | ||
indent = line[0][1] | ||
tokens = line.slice(1) | ||
} else { | ||
indent = ''; | ||
tokens = line; | ||
indent = '' | ||
tokens = line | ||
} | ||
if (!indentType && indent.length) { | ||
indentType = indent[0] === ' ' ? 'space' : 'tab'; | ||
indentType = indent[0] === ' ' ? 'space' : 'tab' | ||
} | ||
if (indentType === 'space') { | ||
if (indent.indexOf('\t') !== -1) { | ||
indentError(input, number, indent.indexOf('\t')); | ||
if (indent.includes('\t')) { | ||
indentError(input, number, indent.indexOf('\t')) | ||
} | ||
} else if (indentType === 'tab') { | ||
if (indent.indexOf(' ') !== -1) { | ||
indentError(input, number, indent.indexOf(' ')); | ||
if (indent.includes(' ')) { | ||
indentError(input, number, indent.indexOf(' ')) | ||
} | ||
@@ -44,30 +40,34 @@ } | ||
if (tokens.length) { | ||
for (var i = tokens.length - 1; i >= 0; i--) { | ||
var type = tokens[i][0]; | ||
for (let i = tokens.length - 1; i >= 0; i--) { | ||
let type = tokens[i][0] | ||
if (type === ',') { | ||
lastComma = true; | ||
break; | ||
lastComma = true | ||
break | ||
} else if (type === 'space') { | ||
continue; | ||
continue | ||
} else if (type === 'comment') { | ||
continue; | ||
continue | ||
} else if (type === 'newline') { | ||
continue; | ||
continue | ||
} else { | ||
break; | ||
break | ||
} | ||
} | ||
comment = tokens[0][0] === 'comment'; | ||
atrule = tokens[0][0] === 'at-word'; | ||
comment = tokens[0][0] === 'comment' | ||
atrule = tokens[0][0] === 'at-word' | ||
var brackets = 0; | ||
for (var _i = 0; _i < tokens.length - 1; _i++) { | ||
var _type = tokens[_i][0]; | ||
var next = tokens[_i + 1][0]; | ||
if (_type === '(') { | ||
brackets += 1; | ||
} else if (_type === ')') { | ||
brackets -= 1; | ||
} else if (_type === ':' && brackets === 0 && (next === 'space' || next === 'newline')) { | ||
colon = true; | ||
let brackets = 0 | ||
for (let i = 0; i < tokens.length - 1; i++) { | ||
let type = tokens[i][0] | ||
let next = tokens[i + 1][0] | ||
if (type === '(') { | ||
brackets += 1 | ||
} else if (type === ')') { | ||
brackets -= 1 | ||
} else if ( | ||
type === ':' && | ||
brackets === 0 && | ||
(next === 'space' || next === 'newline') | ||
) { | ||
colon = true | ||
} | ||
@@ -77,47 +77,44 @@ } | ||
var last = tokens[tokens.length - 1]; | ||
if (last && last[0] === 'newline') prevNumber = last[2]; | ||
let last = tokens[tokens.length - 1] | ||
if (last && last[0] === 'newline') prevNumber = last[2] | ||
} | ||
return { | ||
number: number, | ||
indent: indent, | ||
colon: colon, | ||
tokens: tokens, | ||
atrule: atrule, | ||
comment: comment, | ||
lastComma: lastComma, | ||
number, | ||
indent, | ||
colon, | ||
tokens, | ||
atrule, | ||
comment, | ||
lastComma, | ||
before: '' | ||
}; | ||
}); | ||
parts = parts.reduceRight(function (all, i) { | ||
if (!i.tokens.length || i.tokens.every(function (j) { | ||
return j[0] === 'newline'; | ||
})) { | ||
var prev = all[0]; | ||
var before = i.indent + i.tokens.map(function (j) { | ||
return j[1]; | ||
}).join(''); | ||
prev.before = before + prev.before; | ||
} else { | ||
all.unshift(i); | ||
} | ||
return all; | ||
}, [{ end: true, before: '' }]); | ||
}) | ||
parts.forEach(function (part, i) { | ||
if (i === 0) return; | ||
parts = parts.reduceRight( | ||
(all, i) => { | ||
if (!i.tokens.length || i.tokens.every(j => j[0] === 'newline')) { | ||
let prev = all[0] | ||
let before = i.indent + i.tokens.map(j => j[1]).join('') | ||
prev.before = before + prev.before | ||
} else { | ||
all.unshift(i) | ||
} | ||
return all | ||
}, | ||
[{ end: true, before: '' }] | ||
) | ||
var prev = parts[i - 1]; | ||
var last = prev.tokens[prev.tokens.length - 1]; | ||
parts.forEach((part, i) => { | ||
if (i === 0) return | ||
let prev = parts[i - 1] | ||
let last = prev.tokens[prev.tokens.length - 1] | ||
if (last && last[0] === 'newline') { | ||
part.before = last[1] + part.before; | ||
prev.tokens.pop(); | ||
part.before = last[1] + part.before | ||
prev.tokens.pop() | ||
} | ||
}); | ||
}) | ||
return parts; | ||
return parts | ||
} | ||
module.exports = exports['default']; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInByZXByb2Nlc3MuZXM2Il0sIm5hbWVzIjpbInByZXByb2Nlc3MiLCJpbmRlbnRFcnJvciIsImlucHV0IiwibCIsInAiLCJlcnJvciIsImxpbmVzIiwiaW5kZW50VHlwZSIsInByZXZOdW1iZXIiLCJwYXJ0cyIsIm1hcCIsImxhc3RDb21tYSIsImNvbW1lbnQiLCJudW1iZXIiLCJhdHJ1bGUiLCJpbmRlbnQiLCJ0b2tlbnMiLCJjb2xvbiIsImxpbmUiLCJsZW5ndGgiLCJzbGljZSIsImluZGV4T2YiLCJpIiwidHlwZSIsImJyYWNrZXRzIiwibmV4dCIsImxhc3QiLCJiZWZvcmUiLCJyZWR1Y2VSaWdodCIsImFsbCIsImV2ZXJ5IiwiaiIsInByZXYiLCJqb2luIiwidW5zaGlmdCIsImVuZCIsImZvckVhY2giLCJwYXJ0IiwicG9wIl0sIm1hcHBpbmdzIjoiOzs7a0JBSXdCQSxVO0FBSnhCLFNBQVNDLFdBQVQsQ0FBc0JDLEtBQXRCLEVBQTZCQyxDQUE3QixFQUFnQ0MsQ0FBaEMsRUFBbUM7QUFDakMsUUFBTUYsTUFBTUcsS0FBTixDQUFZLHVDQUFaLEVBQXFERixDQUFyRCxFQUF3REMsSUFBSSxDQUE1RCxDQUFOO0FBQ0Q7O0FBRWMsU0FBU0osVUFBVCxDQUFxQkUsS0FBckIsRUFBNEJJLEtBQTVCLEVBQW1DO0FBQ2hELE1BQUlDLG1CQUFKO0FBQ0EsTUFBSUMsYUFBYSxDQUFqQjtBQUNBLE1BQUlDLFFBQVFILE1BQU1JLEdBQU4sQ0FBVSxnQkFBUTtBQUM1QixRQUFJQyxZQUFZLEtBQWhCO0FBQ0EsUUFBSUMsVUFBVSxLQUFkO0FBQ0EsUUFBSUMsU0FBU0wsYUFBYSxDQUExQjtBQUNBLFFBQUlNLFNBQVMsS0FBYjtBQUNBLFFBQUlDLFNBQVMsRUFBYjtBQUNBLFFBQUlDLFNBQVMsRUFBYjtBQUNBLFFBQUlDLFFBQVEsS0FBWjs7QUFFQSxRQUFJQyxLQUFLQyxNQUFMLEdBQWMsQ0FBbEIsRUFBcUI7QUFDbkIsVUFBSUQsS0FBSyxDQUFMLEVBQVEsQ0FBUixNQUFlLE9BQW5CLEVBQTRCO0FBQzFCSCxpQkFBU0csS0FBSyxDQUFMLEVBQVEsQ0FBUixDQUFUO0FBQ0FGLGlCQUFTRSxLQUFLRSxLQUFMLENBQVcsQ0FBWCxDQUFUO0FBQ0QsT0FIRCxNQUdPO0FBQ0xMLGlCQUFTLEVBQVQ7QUFDQUMsaUJBQVNFLElBQVQ7QUFDRDs7QUFFRCxVQUFJLENBQUNYLFVBQUQsSUFBZVEsT0FBT0ksTUFBMUIsRUFBa0M7QUFDaENaLHFCQUFhUSxPQUFPLENBQVAsTUFBYyxHQUFkLEdBQW9CLE9BQXBCLEdBQThCLEtBQTNDO0FBQ0Q7QUFDRCxVQUFJUixlQUFlLE9BQW5CLEVBQTRCO0FBQzFCLFlBQUlRLE9BQU9NLE9BQVAsQ0FBZSxJQUFmLE1BQXlCLENBQUMsQ0FBOUIsRUFBaUM7QUFDL0JwQixzQkFBWUMsS0FBWixFQUFtQlcsTUFBbkIsRUFBMkJFLE9BQU9NLE9BQVAsQ0FBZSxJQUFmLENBQTNCO0FBQ0Q7QUFDRixPQUpELE1BSU8sSUFBSWQsZUFBZSxLQUFuQixFQUEwQjtBQUMvQixZQUFJUSxPQUFPTSxPQUFQLENBQWUsR0FBZixNQUF3QixDQUFDLENBQTdCLEVBQWdDO0FBQzlCcEIsc0JBQVlDLEtBQVosRUFBbUJXLE1BQW5CLEVBQTJCRSxPQUFPTSxPQUFQLENBQWUsR0FBZixDQUEzQjtBQUNEO0FBQ0Y7O0FBRUQsVUFBSUwsT0FBT0csTUFBWCxFQUFtQjtBQUNqQixhQUFLLElBQUlHLElBQUlOLE9BQU9HLE1BQVAsR0FBZ0IsQ0FBN0IsRUFBZ0NHLEtBQUssQ0FBckMsRUFBd0NBLEdBQXhDLEVBQTZDO0FBQzNDLGNBQUlDLE9BQU9QLE9BQU9NLENBQVAsRUFBVSxDQUFWLENBQVg7QUFDQSxjQUFJQyxTQUFTLEdBQWIsRUFBa0I7QUFDaEJaLHdCQUFZLElBQVo7QUFDQTtBQUNELFdBSEQsTUFHTyxJQUFJWSxTQUFTLE9BQWIsRUFBc0I7QUFDM0I7QUFDRCxXQUZNLE1BRUEsSUFBSUEsU0FBUyxTQUFiLEVBQXdCO0FBQzdCO0FBQ0QsV0FGTSxNQUVBLElBQUlBLFNBQVMsU0FBYixFQUF3QjtBQUM3QjtBQUNELFdBRk0sTUFFQTtBQUNMO0FBQ0Q7QUFDRjtBQUNEWCxrQkFBVUksT0FBTyxDQUFQLEVBQVUsQ0FBVixNQUFpQixTQUEzQjtBQUNBRixpQkFBU0UsT0FBTyxDQUFQLEVBQVUsQ0FBVixNQUFpQixTQUExQjs7QUFFQSxZQUFJUSxXQUFXLENBQWY7QUFDQSxhQUFLLElBQUlGLEtBQUksQ0FBYixFQUFnQkEsS0FBSU4sT0FBT0csTUFBUCxHQUFnQixDQUFwQyxFQUF1Q0csSUFBdkMsRUFBNEM7QUFDMUMsY0FBSUMsUUFBT1AsT0FBT00sRUFBUCxFQUFVLENBQVYsQ0FBWDtBQUNBLGNBQUlHLE9BQU9ULE9BQU9NLEtBQUksQ0FBWCxFQUFjLENBQWQsQ0FBWDtBQUNBLGNBQUlDLFVBQVMsR0FBYixFQUFrQjtBQUNoQkMsd0JBQVksQ0FBWjtBQUNELFdBRkQsTUFFTyxJQUFJRCxVQUFTLEdBQWIsRUFBa0I7QUFDdkJDLHdCQUFZLENBQVo7QUFDRCxXQUZNLE1BRUEsSUFBSUQsVUFBUyxHQUFULElBQWdCQyxhQUFhLENBQTdCLEtBQ1dDLFNBQVMsT0FBVCxJQUFvQkEsU0FBUyxTQUR4QyxDQUFKLEVBQ3dEO0FBQzdEUixvQkFBUSxJQUFSO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFVBQUlTLE9BQU9WLE9BQU9BLE9BQU9HLE1BQVAsR0FBZ0IsQ0FBdkIsQ0FBWDtBQUNBLFVBQUlPLFFBQVFBLEtBQUssQ0FBTCxNQUFZLFNBQXhCLEVBQW1DbEIsYUFBYWtCLEtBQUssQ0FBTCxDQUFiO0FBQ3BDOztBQUVELFdBQU87QUFDTGIsb0JBREs7QUFFTEUsb0JBRks7QUFHTEUsa0JBSEs7QUFJTEQsb0JBSks7QUFLTEYsb0JBTEs7QUFNTEYsc0JBTks7QUFPTEQsMEJBUEs7QUFRTGdCLGNBQVE7QUFSSCxLQUFQO0FBVUQsR0EvRVcsQ0FBWjs7QUFpRkFsQixVQUFRQSxNQUFNbUIsV0FBTixDQUFrQixVQUFDQyxHQUFELEVBQU1QLENBQU4sRUFBWTtBQUNwQyxRQUFJLENBQUNBLEVBQUVOLE1BQUYsQ0FBU0csTUFBVixJQUFvQkcsRUFBRU4sTUFBRixDQUFTYyxLQUFULENBQWU7QUFBQSxhQUFLQyxFQUFFLENBQUYsTUFBUyxTQUFkO0FBQUEsS0FBZixDQUF4QixFQUFpRTtBQUMvRCxVQUFJQyxPQUFPSCxJQUFJLENBQUosQ0FBWDtBQUNBLFVBQUlGLFNBQVNMLEVBQUVQLE1BQUYsR0FBV08sRUFBRU4sTUFBRixDQUFTTixHQUFULENBQWE7QUFBQSxlQUFLcUIsRUFBRSxDQUFGLENBQUw7QUFBQSxPQUFiLEVBQXdCRSxJQUF4QixDQUE2QixFQUE3QixDQUF4QjtBQUNBRCxXQUFLTCxNQUFMLEdBQWNBLFNBQVNLLEtBQUtMLE1BQTVCO0FBQ0QsS0FKRCxNQUlPO0FBQ0xFLFVBQUlLLE9BQUosQ0FBWVosQ0FBWjtBQUNEO0FBQ0QsV0FBT08sR0FBUDtBQUNELEdBVE8sRUFTTCxDQUFDLEVBQUVNLEtBQUssSUFBUCxFQUFhUixRQUFRLEVBQXJCLEVBQUQsQ0FUSyxDQUFSOztBQVdBbEIsUUFBTTJCLE9BQU4sQ0FBYyxVQUFDQyxJQUFELEVBQU9mLENBQVAsRUFBYTtBQUN6QixRQUFJQSxNQUFNLENBQVYsRUFBYTs7QUFFYixRQUFJVSxPQUFPdkIsTUFBTWEsSUFBSSxDQUFWLENBQVg7QUFDQSxRQUFJSSxPQUFPTSxLQUFLaEIsTUFBTCxDQUFZZ0IsS0FBS2hCLE1BQUwsQ0FBWUcsTUFBWixHQUFxQixDQUFqQyxDQUFYO0FBQ0EsUUFBSU8sUUFBUUEsS0FBSyxDQUFMLE1BQVksU0FBeEIsRUFBbUM7QUFDakNXLFdBQUtWLE1BQUwsR0FBY0QsS0FBSyxDQUFMLElBQVVXLEtBQUtWLE1BQTdCO0FBQ0FLLFdBQUtoQixNQUFMLENBQVlzQixHQUFaO0FBQ0Q7QUFDRixHQVREOztBQVdBLFNBQU83QixLQUFQO0FBQ0QiLCJmaWxlIjoicHJlcHJvY2Vzcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGluZGVudEVycm9yIChpbnB1dCwgbCwgcCkge1xuICB0aHJvdyBpbnB1dC5lcnJvcignTWl4ZWQgdGFicyBhbmQgc3BhY2VzIGFyZSBub3QgYWxsb3dlZCcsIGwsIHAgKyAxKVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcmVwcm9jZXNzIChpbnB1dCwgbGluZXMpIHtcbiAgbGV0IGluZGVudFR5cGVcbiAgbGV0IHByZXZOdW1iZXIgPSAwXG4gIGxldCBwYXJ0cyA9IGxpbmVzLm1hcChsaW5lID0+IHtcbiAgICBsZXQgbGFzdENvbW1hID0gZmFsc2VcbiAgICBsZXQgY29tbWVudCA9IGZhbHNlXG4gICAgbGV0IG51bWJlciA9IHByZXZOdW1iZXIgKyAxXG4gICAgbGV0IGF0cnVsZSA9IGZhbHNlXG4gICAgbGV0IGluZGVudCA9ICcnXG4gICAgbGV0IHRva2VucyA9IFtdXG4gICAgbGV0IGNvbG9uID0gZmFsc2VcblxuICAgIGlmIChsaW5lLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChsaW5lWzBdWzBdID09PSAnc3BhY2UnKSB7XG4gICAgICAgIGluZGVudCA9IGxpbmVbMF1bMV1cbiAgICAgICAgdG9rZW5zID0gbGluZS5zbGljZSgxKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5kZW50ID0gJydcbiAgICAgICAgdG9rZW5zID0gbGluZVxuICAgICAgfVxuXG4gICAgICBpZiAoIWluZGVudFR5cGUgJiYgaW5kZW50Lmxlbmd0aCkge1xuICAgICAgICBpbmRlbnRUeXBlID0gaW5kZW50WzBdID09PSAnICcgPyAnc3BhY2UnIDogJ3RhYidcbiAgICAgIH1cbiAgICAgIGlmIChpbmRlbnRUeXBlID09PSAnc3BhY2UnKSB7XG4gICAgICAgIGlmIChpbmRlbnQuaW5kZXhPZignXFx0JykgIT09IC0xKSB7XG4gICAgICAgICAgaW5kZW50RXJyb3IoaW5wdXQsIG51bWJlciwgaW5kZW50LmluZGV4T2YoJ1xcdCcpKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGluZGVudFR5cGUgPT09ICd0YWInKSB7XG4gICAgICAgIGlmIChpbmRlbnQuaW5kZXhPZignICcpICE9PSAtMSkge1xuICAgICAgICAgIGluZGVudEVycm9yKGlucHV0LCBudW1iZXIsIGluZGVudC5pbmRleE9mKCcgJykpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRva2Vucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGxldCB0eXBlID0gdG9rZW5zW2ldWzBdXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICcsJykge1xuICAgICAgICAgICAgbGFzdENvbW1hID0gdHJ1ZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzcGFjZScpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnY29tbWVudCcpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnbmV3bGluZScpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbW1lbnQgPSB0b2tlbnNbMF1bMF0gPT09ICdjb21tZW50J1xuICAgICAgICBhdHJ1bGUgPSB0b2tlbnNbMF1bMF0gPT09ICdhdC13b3JkJ1xuXG4gICAgICAgIGxldCBicmFja2V0cyA9IDBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgbGV0IHR5cGUgPSB0b2tlbnNbaV1bMF1cbiAgICAgICAgICBsZXQgbmV4dCA9IHRva2Vuc1tpICsgMV1bMF1cbiAgICAgICAgICBpZiAodHlwZSA9PT0gJygnKSB7XG4gICAgICAgICAgICBicmFja2V0cyArPSAxXG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnKScpIHtcbiAgICAgICAgICAgIGJyYWNrZXRzIC09IDFcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICc6JyAmJiBicmFja2V0cyA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXh0ID09PSAnc3BhY2UnIHx8IG5leHQgPT09ICduZXdsaW5lJykpIHtcbiAgICAgICAgICAgIGNvbG9uID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgbGFzdCA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV1cbiAgICAgIGlmIChsYXN0ICYmIGxhc3RbMF0gPT09ICduZXdsaW5lJykgcHJldk51bWJlciA9IGxhc3RbMl1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbnVtYmVyLFxuICAgICAgaW5kZW50LFxuICAgICAgY29sb24sXG4gICAgICB0b2tlbnMsXG4gICAgICBhdHJ1bGUsXG4gICAgICBjb21tZW50LFxuICAgICAgbGFzdENvbW1hLFxuICAgICAgYmVmb3JlOiAnJ1xuICAgIH1cbiAgfSlcblxuICBwYXJ0cyA9IHBhcnRzLnJlZHVjZVJpZ2h0KChhbGwsIGkpID0+IHtcbiAgICBpZiAoIWkudG9rZW5zLmxlbmd0aCB8fCBpLnRva2Vucy5ldmVyeShqID0+IGpbMF0gPT09ICduZXdsaW5lJykpIHtcbiAgICAgIGxldCBwcmV2ID0gYWxsWzBdXG4gICAgICBsZXQgYmVmb3JlID0gaS5pbmRlbnQgKyBpLnRva2Vucy5tYXAoaiA9PiBqWzFdKS5qb2luKCcnKVxuICAgICAgcHJldi5iZWZvcmUgPSBiZWZvcmUgKyBwcmV2LmJlZm9yZVxuICAgIH0gZWxzZSB7XG4gICAgICBhbGwudW5zaGlmdChpKVxuICAgIH1cbiAgICByZXR1cm4gYWxsXG4gIH0sIFt7IGVuZDogdHJ1ZSwgYmVmb3JlOiAnJyB9XSlcblxuICBwYXJ0cy5mb3JFYWNoKChwYXJ0LCBpKSA9PiB7XG4gICAgaWYgKGkgPT09IDApIHJldHVyblxuXG4gICAgbGV0IHByZXYgPSBwYXJ0c1tpIC0gMV1cbiAgICBsZXQgbGFzdCA9IHByZXYudG9rZW5zW3ByZXYudG9rZW5zLmxlbmd0aCAtIDFdXG4gICAgaWYgKGxhc3QgJiYgbGFzdFswXSA9PT0gJ25ld2xpbmUnKSB7XG4gICAgICBwYXJ0LmJlZm9yZSA9IGxhc3RbMV0gKyBwYXJ0LmJlZm9yZVxuICAgICAgcHJldi50b2tlbnMucG9wKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHBhcnRzXG59XG4iXX0= |
181
README.md
@@ -1,2 +0,2 @@ | ||
# SugarSS [![Build Status][ci-img]][ci] | ||
# SugarSS | ||
@@ -43,5 +43,4 @@ <img align="right" width="120" height="155" | ||
[PreCSS]: https://github.com/jonathantneal/precss | ||
[ci-img]: https://img.shields.io/travis/postcss/sugarss.svg | ||
[ci]: https://travis-ci.org/postcss/sugarss | ||
## Syntax | ||
@@ -51,2 +50,3 @@ | ||
### Indent | ||
@@ -59,2 +59,3 @@ | ||
### Multiline | ||
@@ -81,3 +82,3 @@ | ||
In selector you can put a new line anywhere. Just keep same indent | ||
In a selector you can put a new line anywhere. Just keep same indent | ||
for every line of selector: | ||
@@ -91,4 +92,4 @@ | ||
In declaration value you can put new line anywhere. Just keep bigger indent | ||
for value: | ||
In a declaration value you can put a new line anywhere. Just keep a bigger indent | ||
for the value: | ||
@@ -106,2 +107,3 @@ ```sass | ||
### Comments | ||
@@ -119,3 +121,3 @@ | ||
There is no “silent” comments in SugarSS. Output CSS will contain all comments | ||
There is no “silent” comment in SugarSS. Output CSS will contain all comments | ||
from `.sss` source. But you can use [postcss-discard-comments] | ||
@@ -126,2 +128,3 @@ for Sass’s silent/loud comments behaviour. | ||
### Rule and Declarations | ||
@@ -131,5 +134,25 @@ | ||
So you must write a space after property name: `color: black` is good, | ||
So you must write a space after the property name: `color: black` is good, | ||
`color:black` is prohibited. | ||
### Other | ||
SugarSS is just a syntax, it change the way how you write CSS, | ||
but do not add preprocessor features build-in. | ||
Here are PostCSS plugins which could add you preprocessor features: | ||
* **[PreCSS]** adds variables, nested rules, extend rules, property lookup | ||
and CSS polyfills. | ||
* **[postcss-easy-import]** adds `@import` directive support with globbing. | ||
* **[postcss-mixins]** add `@mixin` support. | ||
* **[postcss-functions]** allows you to define own CSS functions in JS. | ||
[postcss-easy-import]: https://github.com/TrySound/postcss-easy-import | ||
[postcss-functions]: https://github.com/andyjansson/postcss-functions | ||
[postcss-mixins]: https://github.com/postcss/postcss-mixins | ||
[PreCSS]: https://github.com/jonathantneal/precss | ||
## Text Editors | ||
@@ -151,55 +174,120 @@ | ||
## Usage | ||
Install SugarSS via npm: | ||
SugarSS needs PostCSS compiler. Install [`postcss-loader`] for webpack, | ||
[`gulp-postcss`] for Gulp, [`postcss-cli`] for npm scripts. | ||
[Parcel] has build-in support for PostCSS. | ||
```sh | ||
npm install sugarss --save-dev | ||
Then install SugarSS: `npm install --save-dev sugarss` if you use npm | ||
and `yarn add --dev sugarss` if you use Yarn. | ||
You may also install `precss` to have nested rules, variables | ||
and other CSS syntax extensions: `npm install --save-dev precss` | ||
or `yarn add --dev precss` if you use Yarn. | ||
Then create `.postcssrc` file: | ||
```json | ||
{ | ||
"parser": "sugarss", | ||
"plugins": { | ||
"precss": {} | ||
} | ||
} | ||
``` | ||
### SugarSS to CSS | ||
[`postcss-loader`]: https://github.com/postcss/postcss-loader | ||
[`gulp-postcss`]: https://github.com/postcss/gulp-postcss | ||
[`postcss-cli`]: https://github.com/postcss/postcss-cli | ||
[Parcel]: https://parceljs.org/transforms.html | ||
Just set SugarSS to PostCSS `parser` option and PostCSS will compile | ||
SugarSS to CSS. | ||
[Gulp](https://github.com/postcss/gulp-postcss): | ||
### Imports | ||
```js | ||
var sugarss = require('sugarss'); | ||
var postcss = require('gulp-postcss'); | ||
var rename = require('gulp-rename'); | ||
If you doesn’t use Webpack or Parcel, you need some PostCSS plugin | ||
to process `@import` directives. | ||
gulp.task('style', function () { | ||
return gulp.src('src/**/*.sss') | ||
.pipe(postcss(plugins, { parser: sugarss })) | ||
.pipe(rename({ extname: '.css' })) | ||
.pipe(gulp.dest('build')); | ||
}); | ||
[postcss-import] doesn’t support `.sss` file extension, because this plugin | ||
implements W3C specification. If you want smarter `@import`, you should | ||
use [postcss-easy-import] with the `extensions` option. | ||
```diff js | ||
{ | ||
"parser": "sugarss", | ||
"plugins": { | ||
+ "postcss-easy-import": { | ||
+ "extensions": [ | ||
+ ".sss" | ||
+ ] | ||
+ }, | ||
"precss": {}, | ||
} | ||
} | ||
``` | ||
[Webpack](https://github.com/postcss/postcss-loader): | ||
[postcss-easy-import]: https://github.com/TrySound/postcss-easy-import | ||
[postcss-import]: https://github.com/postcss/postcss-import | ||
```js | ||
module: { | ||
loaders: [ | ||
{ | ||
test: /\.sss/, | ||
loader: "style-loader!css-loader!postcss-loader?parser=sugarss" | ||
} | ||
] | ||
### Mixins | ||
For mixins support, install [postcss-mixins] and add it to `.postcssrc` file: | ||
```diff js | ||
{ | ||
"parser": "sugarss", | ||
"plugins": { | ||
+ "postcss-mixins": { | ||
+ "mixinsDir": "./mixins" | ||
+ }, | ||
"precss": {}, | ||
} | ||
} | ||
``` | ||
[CLI](https://github.com/postcss/postcss-cli): | ||
Now you can define your mixins in `mixins/` dir. | ||
For example create `mixins/circle.sss` with: | ||
```sss | ||
@define-mixin circle $size | ||
border-radius: 50% | ||
width: $size | ||
height: $size | ||
``` | ||
postcss -u autoprefixer -p sugarss test.sss -o test.css | ||
### Functions | ||
To define custom functions you need to install [postcss-functions] | ||
and add it to `.postcssrc` file: | ||
```diff js | ||
{ | ||
"parser": "sugarss", | ||
"plugins": { | ||
+ "postcss-functions": { | ||
+ "glob": "./functions" | ||
+ }, | ||
"precss": {}, | ||
} | ||
} | ||
``` | ||
Then you can define functions in `functions/` dir. For example, | ||
`functions/foo.js` will define `foo()` function in CSS: | ||
```js | ||
module.exports = function (args) { | ||
return 'foo' | ||
} | ||
``` | ||
### SugarSS to SugarSS | ||
Sometimes we use PostCSS not to build CSS, but to fix source file. | ||
Sometimes we use PostCSS not to build CSS, but to fix source files. | ||
For example, to sort properties by [postcss-sorting]. | ||
For this cases, use `syntax` option, instead of `parser`: | ||
For this cases use the `syntax` option, instead of `parser`: | ||
@@ -216,5 +304,6 @@ ```js | ||
### CSS to SugarSS | ||
You can even compile existed CSS sources to SugarSS syntax. | ||
You can even compile existing CSS sources to SugarSS syntax. | ||
Just use `stringifier` option instead of `parser`: | ||
@@ -228,19 +317,5 @@ | ||
### Imports | ||
[postcss-import] doesn’t support `.sss` file extension, because this plugin | ||
implements W3C specification. If you want smarter `@import`, you should | ||
use [postcss-easy-import] with `extensions` option. | ||
```js | ||
var postcssPlugin = [ | ||
easyImport({ extensions: ['.sss'] }) | ||
] | ||
``` | ||
[postcss-easy-import]: https://github.com/TrySound/postcss-easy-import | ||
[postcss-import]: https://github.com/postcss/postcss-import | ||
## Thanks | ||
Cute project logo was made by [Maria Keller](http://www.mariakellerac.com/). |
@@ -1,8 +0,2 @@ | ||
'use strict'; | ||
exports.__esModule = true; | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
var defaultRaw = { | ||
const DEFAULT_RAWS = { | ||
colon: ': ', | ||
@@ -12,117 +6,110 @@ indent: ' ', | ||
commentRight: ' ' | ||
}; | ||
} | ||
var Stringifier = function () { | ||
function Stringifier(builder) { | ||
_classCallCheck(this, Stringifier); | ||
module.exports = class Stringifier { | ||
constructor (builder) { | ||
this.builder = builder | ||
} | ||
this.builder = builder; | ||
stringify (node, semicolon) { | ||
this[node.type](node, semicolon) | ||
} | ||
Stringifier.prototype.stringify = function stringify(node, semicolon) { | ||
this[node.type](node, semicolon); | ||
}; | ||
root (node) { | ||
this.body(node) | ||
if (node.raws.after) this.builder(node.raws.after) | ||
} | ||
Stringifier.prototype.root = function root(node) { | ||
this.body(node); | ||
if (node.raws.after) this.builder(node.raws.after); | ||
}; | ||
comment (node) { | ||
let left = DEFAULT_RAWS.commentLeft | ||
let right = DEFAULT_RAWS.commentRight | ||
if (this.has(node.raws.left)) left = node.raws.left | ||
Stringifier.prototype.comment = function comment(node) { | ||
var left = defaultRaw.commentLeft; | ||
var right = defaultRaw.commentRight; | ||
if (this.has(node.raws.left)) left = node.raws.left; | ||
if (node.raws.inline) { | ||
if (this.has(node.raws.inlineRight)) { | ||
right = node.raws.inlineRight; | ||
right = node.raws.inlineRight | ||
} else { | ||
right = ''; | ||
right = '' | ||
} | ||
if (node.raws.extraIndent) { | ||
this.builder(node.raws.extraIndent); | ||
this.builder(node.raws.extraIndent) | ||
} | ||
this.builder('//' + left + node.text + right, node); | ||
this.builder('//' + left + node.text + right, node) | ||
} else { | ||
if (this.has(node.raws.right)) right = node.raws.right; | ||
this.builder('/*' + left + node.text + right + '*/', node); | ||
if (this.has(node.raws.right)) right = node.raws.right | ||
this.builder('/*' + left + node.text + right + '*/', node) | ||
} | ||
}; | ||
} | ||
Stringifier.prototype.decl = function decl(node) { | ||
var between = node.raws.between || defaultRaw.colon; | ||
var string = node.prop + between + this.rawValue(node, 'value'); | ||
decl (node) { | ||
let between = node.raws.between || DEFAULT_RAWS.colon | ||
let string = node.prop + between + this.rawValue(node, 'value') | ||
if (node.important) { | ||
string += node.raws.important || ' !important'; | ||
string += node.raws.important || ' !important' | ||
} | ||
this.builder(string, node); | ||
}; | ||
this.builder(string, node) | ||
} | ||
Stringifier.prototype.rule = function rule(node) { | ||
this.block(node, this.rawValue(node, 'selector')); | ||
}; | ||
rule (node) { | ||
this.block(node, this.rawValue(node, 'selector')) | ||
} | ||
Stringifier.prototype.atrule = function atrule(node) { | ||
var name = '@' + node.name; | ||
var params = node.params ? this.rawValue(node, 'params') : ''; | ||
atrule (node) { | ||
let name = '@' + node.name | ||
let params = node.params ? this.rawValue(node, 'params') : '' | ||
if (this.has(node.raws.afterName)) { | ||
name += node.raws.afterName; | ||
name += node.raws.afterName | ||
} else if (params) { | ||
name += ' '; | ||
name += ' ' | ||
} | ||
this.block(node, name + params); | ||
}; | ||
this.block(node, name + params) | ||
} | ||
Stringifier.prototype.body = function body(node) { | ||
var indent = node.root().raws.indent || defaultRaw.indent; | ||
body (node) { | ||
let indent = node.root().raws.indent || DEFAULT_RAWS.indent | ||
for (var i = 0; i < node.nodes.length; i++) { | ||
var child = node.nodes[i]; | ||
var before = child.raws.before.replace(/[^\n]*$/, '') + this.indent(node, indent); | ||
if (child.type === 'comment' && child.raws.before.indexOf('\n') === -1) { | ||
before = child.raws.before; | ||
for (let i = 0; i < node.nodes.length; i++) { | ||
let child = node.nodes[i] | ||
let before = | ||
child.raws.before.replace(/[^\n]*$/, '') + this.indent(node, indent) | ||
if (child.type === 'comment' && !child.raws.before.includes('\n')) { | ||
before = child.raws.before | ||
} | ||
if (before) this.builder(before); | ||
this.stringify(child); | ||
if (before) this.builder(before) | ||
this.stringify(child) | ||
} | ||
}; | ||
} | ||
Stringifier.prototype.block = function block(node, start) { | ||
var between = node.raws.sssBetween || ''; | ||
this.builder(start + between, node, 'start'); | ||
if (this.has(node.nodes)) this.body(node); | ||
}; | ||
block (node, start) { | ||
let between = node.raws.sssBetween || '' | ||
this.builder(start + between, node, 'start') | ||
if (this.has(node.nodes)) this.body(node) | ||
} | ||
Stringifier.prototype.indent = function indent(node, step) { | ||
var result = ''; | ||
indent (node, step) { | ||
let result = '' | ||
while (node.parent) { | ||
result += step; | ||
node = node.parent; | ||
result += step | ||
node = node.parent | ||
} | ||
return result; | ||
}; | ||
return result | ||
} | ||
Stringifier.prototype.has = function has(value) { | ||
return typeof value !== 'undefined'; | ||
}; | ||
has (value) { | ||
return typeof value !== 'undefined' | ||
} | ||
Stringifier.prototype.rawValue = function rawValue(node, prop) { | ||
var value = node[prop]; | ||
var raw = node.raws[prop]; | ||
rawValue (node, prop) { | ||
let value = node[prop] | ||
let raw = node.raws[prop] | ||
if (raw && raw.value === value) { | ||
return raw.sss || raw.raw; | ||
return raw.sss || raw.raw | ||
} else { | ||
return value; | ||
return value | ||
} | ||
}; | ||
return Stringifier; | ||
}(); | ||
exports.default = Stringifier; | ||
module.exports = exports['default']; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0cmluZ2lmaWVyLmVzNiJdLCJuYW1lcyI6WyJkZWZhdWx0UmF3IiwiY29sb24iLCJpbmRlbnQiLCJjb21tZW50TGVmdCIsImNvbW1lbnRSaWdodCIsIlN0cmluZ2lmaWVyIiwiYnVpbGRlciIsInN0cmluZ2lmeSIsIm5vZGUiLCJzZW1pY29sb24iLCJ0eXBlIiwicm9vdCIsImJvZHkiLCJyYXdzIiwiYWZ0ZXIiLCJjb21tZW50IiwibGVmdCIsInJpZ2h0IiwiaGFzIiwiaW5saW5lIiwiaW5saW5lUmlnaHQiLCJleHRyYUluZGVudCIsInRleHQiLCJkZWNsIiwiYmV0d2VlbiIsInN0cmluZyIsInByb3AiLCJyYXdWYWx1ZSIsImltcG9ydGFudCIsInJ1bGUiLCJibG9jayIsImF0cnVsZSIsIm5hbWUiLCJwYXJhbXMiLCJhZnRlck5hbWUiLCJpIiwibm9kZXMiLCJsZW5ndGgiLCJjaGlsZCIsImJlZm9yZSIsInJlcGxhY2UiLCJpbmRleE9mIiwic3RhcnQiLCJzc3NCZXR3ZWVuIiwic3RlcCIsInJlc3VsdCIsInBhcmVudCIsInZhbHVlIiwicmF3Iiwic3NzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFNQSxhQUFhO0FBQ2pCQyxTQUFPLElBRFU7QUFFakJDLFVBQVEsSUFGUztBQUdqQkMsZUFBYSxHQUhJO0FBSWpCQyxnQkFBYztBQUpHLENBQW5COztJQU9xQkMsVztBQUNuQix1QkFBYUMsT0FBYixFQUFzQjtBQUFBOztBQUNwQixTQUFLQSxPQUFMLEdBQWVBLE9BQWY7QUFDRDs7d0JBRURDLFMsc0JBQVdDLEksRUFBTUMsUyxFQUFXO0FBQzFCLFNBQUtELEtBQUtFLElBQVYsRUFBZ0JGLElBQWhCLEVBQXNCQyxTQUF0QjtBQUNELEc7O3dCQUVERSxJLGlCQUFNSCxJLEVBQU07QUFDVixTQUFLSSxJQUFMLENBQVVKLElBQVY7QUFDQSxRQUFJQSxLQUFLSyxJQUFMLENBQVVDLEtBQWQsRUFBcUIsS0FBS1IsT0FBTCxDQUFhRSxLQUFLSyxJQUFMLENB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SXNCLE9BQU9BLElBQUlELEtBQUosS0FBY0EsS0FBekIsRUFBZ0M7QUFDOUIsYUFBT0MsSUFBSUMsR0FBSixJQUFXRCxJQUFJQSxHQUF0QjtBQUNELEtBRkQsTUFFTztBQUNMLGFBQU9ELEtBQVA7QUFDRDtBQUNGLEc7Ozs7O2tCQTFHa0IxQyxXIiwiZmlsZSI6InN0cmluZ2lmaWVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZGVmYXVsdFJhdyA9IHtcbiAgY29sb246ICc6ICcsXG4gIGluZGVudDogJyAgJyxcbiAgY29tbWVudExlZnQ6ICcgJyxcbiAgY29tbWVudFJpZ2h0OiAnICdcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5naWZpZXIge1xuICBjb25zdHJ1Y3RvciAoYnVpbGRlcikge1xuICAgIHRoaXMuYnVpbGRlciA9IGJ1aWxkZXJcbiAgfVxuXG4gIHN0cmluZ2lmeSAobm9kZSwgc2VtaWNvbG9uKSB7XG4gICAgdGhpc1tub2RlLnR5cGVdKG5vZGUsIHNlbWljb2xvbilcbiAgfVxuXG4gIHJvb3QgKG5vZGUpIHtcbiAgICB0aGlzLmJvZHkobm9kZSlcbiAgICBpZiAobm9kZS5yYXdzLmFmdGVyKSB0aGlzLmJ1aWxkZXIobm9kZS5yYXdzLmFmdGVyKVxuICB9XG5cbiAgY29tbWVudCAobm9kZSkge1xuICAgIGxldCBsZWZ0ID0gZGVmYXVsdFJhdy5jb21tZW50TGVmdFxuICAgIGxldCByaWdodCA9IGRlZmF1bHRSYXcuY29tbWVudFJpZ2h0XG4gICAgaWYgKHRoaXMuaGFzKG5vZGUucmF3cy5sZWZ0KSkgbGVmdCA9IG5vZGUucmF3cy5sZWZ0XG5cbiAgICBpZiAobm9kZS5yYXdzLmlubGluZSkge1xuICAgICAgaWYgKHRoaXMuaGFzKG5vZGUucmF3cy5pbmxpbmVSaWdodCkpIHtcbiAgICAgICAgcmlnaHQgPSBub2RlLnJhd3MuaW5saW5lUmlnaHRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJpZ2h0ID0gJydcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnJhd3MuZXh0cmFJbmRlbnQpIHtcbiAgICAgICAgdGhpcy5idWlsZGVyKG5vZGUucmF3cy5leHRyYUluZGVudClcbiAgICAgIH1cbiAgICAgIHRoaXMuYnVpbGRlcignLy8nICsgbGVmdCArIG5vZGUudGV4dCArIHJpZ2h0LCBub2RlKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5oYXMobm9kZS5yYXdzLnJpZ2h0KSkgcmlnaHQgPSBub2RlLnJhd3MucmlnaHRcbiAgICAgIHRoaXMuYnVpbGRlcignLyonICsgbGVmdCArIG5vZGUudGV4dCArIHJpZ2h0ICsgJyovJywgbm9kZSlcbiAgICB9XG4gIH1cblxuICBkZWNsIChub2RlKSB7XG4gICAgbGV0IGJldHdlZW4gPSBub2RlLnJhd3MuYmV0d2VlbiB8fCBkZWZhdWx0UmF3LmNvbG9uXG4gICAgbGV0IHN0cmluZyA9IG5vZGUucHJvcCArIGJldHdlZW4gKyB0aGlzLnJhd1ZhbHVlKG5vZGUsICd2YWx1ZScpXG5cbiAgICBpZiAobm9kZS5pbXBvcnRhbnQpIHtcbiAgICAgIHN0cmluZyArPSBub2RlLnJhd3MuaW1wb3J0YW50IHx8ICcgIWltcG9ydGFudCdcbiAgICB9XG5cbiAgICB0aGlzLmJ1aWxkZXIoc3RyaW5nLCBub2RlKVxuICB9XG5cbiAgcnVsZSAobm9kZSkge1xuICAgIHRoaXMuYmxvY2sobm9kZSwgdGhpcy5yYXdWYWx1ZShub2RlLCAnc2VsZWN0b3InKSlcbiAgfVxuXG4gIGF0cnVsZSAobm9kZSkge1xuICAgIGxldCBuYW1lID0gJ0AnICsgbm9kZS5uYW1lXG4gICAgbGV0IHBhcmFtcyA9IG5vZGUucGFyYW1zID8gdGhpcy5yYXdWYWx1ZShub2RlLCAncGFyYW1zJykgOiAnJ1xuXG4gICAgaWYgKHRoaXMuaGFzKG5vZGUucmF3cy5hZnRlck5hbWUpKSB7XG4gICAgICBuYW1lICs9IG5vZGUucmF3cy5hZnRlck5hbWVcbiAgICB9IGVsc2UgaWYgKHBhcmFtcykge1xuICAgICAgbmFtZSArPSAnICdcbiAgICB9XG5cbiAgICB0aGlzLmJsb2NrKG5vZGUsIG5hbWUgKyBwYXJhbXMpXG4gIH1cblxuICBib2R5IChub2RlKSB7XG4gICAgbGV0IGluZGVudCA9IG5vZGUucm9vdCgpLnJhd3MuaW5kZW50IHx8IGRlZmF1bHRSYXcuaW5kZW50XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUubm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjaGlsZCA9IG5vZGUubm9kZXNbaV1cbiAgICAgIGxldCBiZWZvcmUgPSBjaGlsZC5yYXdzLmJlZm9yZS5yZXBsYWNlKC9bXlxcbl0qJC8sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRlbnQobm9kZSwgaW5kZW50KVxuICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdjb21tZW50JyAmJlxuICAgICAgICAgICAgICAgICBjaGlsZC5yYXdzLmJlZm9yZS5pbmRleE9mKCdcXG4nKSA9PT0gLTEpIHtcbiAgICAgICAgYmVmb3JlID0gY2hpbGQucmF3cy5iZWZvcmVcbiAgICAgIH1cbiAgICAgIGlmIChiZWZvcmUpIHRoaXMuYnVpbGRlcihiZWZvcmUpXG4gICAgICB0aGlzLnN0cmluZ2lmeShjaGlsZClcbiAgICB9XG4gIH1cblxuICBibG9jayAobm9kZSwgc3RhcnQpIHtcbiAgICBsZXQgYmV0d2VlbiA9IG5vZGUucmF3cy5zc3NCZXR3ZWVuIHx8ICcnXG4gICAgdGhpcy5idWlsZGVyKHN0YXJ0ICsgYmV0d2Vlbiwgbm9kZSwgJ3N0YXJ0JylcbiAgICBpZiAodGhpcy5oYXMobm9kZS5ub2RlcykpIHRoaXMuYm9keShub2RlKVxuICB9XG5cbiAgaW5kZW50IChub2RlLCBzdGVwKSB7XG4gICAgbGV0IHJlc3VsdCA9ICcnXG4gICAgd2hpbGUgKG5vZGUucGFyZW50KSB7XG4gICAgICByZXN1bHQgKz0gc3RlcFxuICAgICAgbm9kZSA9IG5vZGUucGFyZW50XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGhhcyAodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJ1xuICB9XG5cbiAgcmF3VmFsdWUgKG5vZGUsIHByb3ApIHtcbiAgICBsZXQgdmFsdWUgPSBub2RlW3Byb3BdXG4gICAgbGV0IHJhdyA9IG5vZGUucmF3c1twcm9wXVxuICAgIGlmIChyYXcgJiYgcmF3LnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHJhdy5zc3MgfHwgcmF3LnJhd1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG4gIH1cbn1cbiJdfQ== | ||
} | ||
} |
@@ -1,17 +0,6 @@ | ||
'use strict'; | ||
let Stringifier = require('./stringifier') | ||
exports.__esModule = true; | ||
exports.default = stringify; | ||
var _stringifier = require('./stringifier'); | ||
var _stringifier2 = _interopRequireDefault(_stringifier); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function stringify(node, builder) { | ||
var str = new _stringifier2.default(builder); | ||
str.stringify(node); | ||
module.exports = function stringify (node, builder) { | ||
let str = new Stringifier(builder) | ||
str.stringify(node) | ||
} | ||
module.exports = exports['default']; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0cmluZ2lmeS5lczYiXSwibmFtZXMiOlsic3RyaW5naWZ5Iiwibm9kZSIsImJ1aWxkZXIiLCJzdHIiLCJTdHJpbmdpZmllciJdLCJtYXBwaW5ncyI6Ijs7O2tCQUV3QkEsUzs7QUFGeEI7Ozs7OztBQUVlLFNBQVNBLFNBQVQsQ0FBb0JDLElBQXBCLEVBQTBCQyxPQUExQixFQUFtQztBQUNoRCxNQUFJQyxNQUFNLElBQUlDLHFCQUFKLENBQWdCRixPQUFoQixDQUFWO0FBQ0FDLE1BQUlILFNBQUosQ0FBY0MsSUFBZDtBQUNEIiwiZmlsZSI6InN0cmluZ2lmeS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTdHJpbmdpZmllciBmcm9tICcuL3N0cmluZ2lmaWVyJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdHJpbmdpZnkgKG5vZGUsIGJ1aWxkZXIpIHtcbiAgbGV0IHN0ciA9IG5ldyBTdHJpbmdpZmllcihidWlsZGVyKVxuICBzdHIuc3RyaW5naWZ5KG5vZGUpXG59XG4iXX0= |
416
tokenize.js
@@ -1,62 +0,62 @@ | ||
'use strict'; | ||
const SINGLE_QUOTE = "'".charCodeAt(0) | ||
const DOUBLE_QUOTE = '"'.charCodeAt(0) | ||
const BACKSLASH = '\\'.charCodeAt(0) | ||
const SLASH = '/'.charCodeAt(0) | ||
const NEWLINE = '\n'.charCodeAt(0) | ||
const SPACE = ' '.charCodeAt(0) | ||
const FEED = '\f'.charCodeAt(0) | ||
const TAB = '\t'.charCodeAt(0) | ||
const CR = '\r'.charCodeAt(0) | ||
const OPEN_PARENTHESES = '('.charCodeAt(0) | ||
const CLOSE_PARENTHESES = ')'.charCodeAt(0) | ||
const OPEN_CURLY = '{'.charCodeAt(0) | ||
const CLOSE_CURLY = '}'.charCodeAt(0) | ||
const SEMICOLON = ';'.charCodeAt(0) | ||
const ASTERICK = '*'.charCodeAt(0) | ||
const COLON = ':'.charCodeAt(0) | ||
const AT = '@'.charCodeAt(0) | ||
const COMMA = ','.charCodeAt(0) | ||
exports.__esModule = true; | ||
exports.default = tokenize; | ||
var SINGLE_QUOTE = 39; | ||
var DOUBLE_QUOTE = 34; | ||
var BACKSLASH = 92; | ||
var SLASH = 47; | ||
var NEWLINE = 10; | ||
var SPACE = 32; | ||
var FEED = 12; | ||
var TAB = 9; | ||
var CR = 13; | ||
var OPEN_PARENTHESES = 40; | ||
var CLOSE_PARENTHESES = 41; | ||
var OPEN_CURLY = 123; | ||
var CLOSE_CURLY = 125; | ||
var SEMICOLON = 59; | ||
var ASTERICK = 42; | ||
var COLON = 58; | ||
var AT = 64; | ||
var COMMA = 44; | ||
const RE_AT_END = /[\t\n\f\r "'()/;\\{]/g | ||
const RE_NEW_LINE = /[\n\f\r]/g | ||
const RE_WORD_END = /[\t\n\f\r !"'(),:;@\\{}]|\/(?=\*)/g | ||
const RE_BAD_BRACKET = /.[\n"'(/\\]/ | ||
var RE_AT_END = /[ \n\t\r\f{()'"\\;/]/g; | ||
var RE_NEW_LINE = /[\r\f\n]/g; | ||
var RE_WORD_END = /[ \n\t\r\f(){}:;@!'"\\,]|\/(?=\*)/g; | ||
var RE_BAD_BRACKET = /.[\\/("'\n]/; | ||
module.exports = function tokenize (input) { | ||
let tokens = [] | ||
let css = input.css.valueOf() | ||
function tokenize(input) { | ||
var tokens = []; | ||
var css = input.css.valueOf(); | ||
let code, | ||
next, | ||
quote, | ||
lines, | ||
last, | ||
content, | ||
escape, | ||
nextLine, | ||
nextOffset, | ||
escaped, | ||
escapePos, | ||
prev, | ||
n | ||
var code = void 0, | ||
next = void 0, | ||
quote = void 0, | ||
lines = void 0, | ||
last = void 0, | ||
content = void 0, | ||
escape = void 0, | ||
nextLine = void 0, | ||
nextOffset = void 0, | ||
escaped = void 0, | ||
escapePos = void 0, | ||
prev = void 0, | ||
n = void 0; | ||
let length = css.length | ||
let offset = -1 | ||
let line = 1 | ||
let pos = 0 | ||
var length = css.length; | ||
var offset = -1; | ||
var line = 1; | ||
var pos = 0; | ||
function unclosed(what) { | ||
throw input.error('Unclosed ' + what, line, pos - offset); | ||
function unclosed (what) { | ||
throw input.error('Unclosed ' + what, line, pos - offset) | ||
} | ||
while (pos < length) { | ||
code = css.charCodeAt(pos); | ||
code = css.charCodeAt(pos) | ||
if (code === NEWLINE || code === FEED || code === CR && css.charCodeAt(pos + 1) !== NEWLINE) { | ||
offset = pos; | ||
line += 1; | ||
if ( | ||
code === NEWLINE || | ||
code === FEED || | ||
(code === CR && css.charCodeAt(pos + 1) !== NEWLINE) | ||
) { | ||
offset = pos | ||
line += 1 | ||
} | ||
@@ -67,222 +67,286 @@ | ||
if (css.charCodeAt(pos + 1) === NEWLINE) { | ||
offset = pos; | ||
line += 1; | ||
pos += 1; | ||
tokens.push(['newline', '\r\n', line - 1]); | ||
offset = pos | ||
line += 1 | ||
pos += 1 | ||
tokens.push(['newline', '\r\n', line - 1]) | ||
} else { | ||
tokens.push(['newline', '\r', line - 1]); | ||
tokens.push(['newline', '\r', line - 1]) | ||
} | ||
break; | ||
break | ||
case FEED: | ||
case NEWLINE: | ||
tokens.push(['newline', css.slice(pos, pos + 1), line - 1]); | ||
break; | ||
tokens.push(['newline', css.slice(pos, pos + 1), line - 1]) | ||
break | ||
case SPACE: | ||
case TAB: | ||
next = pos; | ||
next = pos | ||
do { | ||
next += 1; | ||
code = css.charCodeAt(next); | ||
} while (code === SPACE || code === TAB); | ||
next += 1 | ||
code = css.charCodeAt(next) | ||
} while (code === SPACE || code === TAB) | ||
tokens.push(['space', css.slice(pos, next)]); | ||
pos = next - 1; | ||
break; | ||
tokens.push(['space', css.slice(pos, next)]) | ||
pos = next - 1 | ||
break | ||
case OPEN_CURLY: | ||
tokens.push(['{', '{', line, pos - offset]); | ||
break; | ||
tokens.push(['{', '{', line, pos - offset]) | ||
break | ||
case CLOSE_CURLY: | ||
tokens.push(['}', '}', line, pos - offset]); | ||
break; | ||
tokens.push(['}', '}', line, pos - offset]) | ||
break | ||
case COLON: | ||
tokens.push([':', ':', line, pos - offset]); | ||
break; | ||
tokens.push([':', ':', line, pos - offset]) | ||
break | ||
case SEMICOLON: | ||
tokens.push([';', ';', line, pos - offset]); | ||
break; | ||
tokens.push([';', ';', line, pos - offset]) | ||
break | ||
case COMMA: | ||
tokens.push([',', ',', line, pos - offset]); | ||
break; | ||
tokens.push([',', ',', line, pos - offset]) | ||
break | ||
case OPEN_PARENTHESES: | ||
prev = tokens.length ? tokens[tokens.length - 1][1] : ''; | ||
n = css.charCodeAt(pos + 1); | ||
if (prev === 'url' && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) { | ||
next = pos; | ||
prev = tokens.length ? tokens[tokens.length - 1][1] : '' | ||
n = css.charCodeAt(pos + 1) | ||
if ( | ||
prev === 'url' && | ||
n !== SINGLE_QUOTE && | ||
n !== DOUBLE_QUOTE && | ||
n !== SPACE && | ||
n !== NEWLINE && | ||
n !== TAB && | ||
n !== FEED && | ||
n !== CR | ||
) { | ||
next = pos | ||
do { | ||
escaped = false; | ||
next = css.indexOf(')', next + 1); | ||
if (next === -1) unclosed('bracket'); | ||
escapePos = next; | ||
escaped = false | ||
next = css.indexOf(')', next + 1) | ||
if (next === -1) unclosed('bracket') | ||
escapePos = next | ||
while (css.charCodeAt(escapePos - 1) === BACKSLASH) { | ||
escapePos -= 1; | ||
escaped = !escaped; | ||
escapePos -= 1 | ||
escaped = !escaped | ||
} | ||
} while (escaped); | ||
} while (escaped) | ||
tokens.push(['brackets', css.slice(pos, next + 1), line, pos - offset, line, next - offset]); | ||
pos = next; | ||
tokens.push([ | ||
'brackets', | ||
css.slice(pos, next + 1), | ||
line, | ||
pos - offset, | ||
line, | ||
next - offset | ||
]) | ||
pos = next | ||
} else { | ||
next = css.indexOf(')', pos + 1); | ||
content = css.slice(pos, next + 1); | ||
next = css.indexOf(')', pos + 1) | ||
content = css.slice(pos, next + 1) | ||
if (next === -1 || RE_BAD_BRACKET.test(content)) { | ||
tokens.push(['(', '(', line, pos - offset]); | ||
tokens.push(['(', '(', line, pos - offset]) | ||
} else { | ||
tokens.push(['brackets', content, line, pos - offset, line, next - offset]); | ||
pos = next; | ||
tokens.push([ | ||
'brackets', | ||
content, | ||
line, | ||
pos - offset, | ||
line, | ||
next - offset | ||
]) | ||
pos = next | ||
} | ||
} | ||
break; | ||
break | ||
case CLOSE_PARENTHESES: | ||
tokens.push([')', ')', line, pos - offset]); | ||
break; | ||
tokens.push([')', ')', line, pos - offset]) | ||
break | ||
case SINGLE_QUOTE: | ||
case DOUBLE_QUOTE: | ||
quote = code === SINGLE_QUOTE ? '\'' : '"'; | ||
next = pos; | ||
quote = code === SINGLE_QUOTE ? "'" : '"' | ||
next = pos | ||
do { | ||
escaped = false; | ||
next = css.indexOf(quote, next + 1); | ||
if (next === -1) unclosed('quote'); | ||
escapePos = next; | ||
escaped = false | ||
next = css.indexOf(quote, next + 1) | ||
if (next === -1) unclosed('quote') | ||
escapePos = next | ||
while (css.charCodeAt(escapePos - 1) === BACKSLASH) { | ||
escapePos -= 1; | ||
escaped = !escaped; | ||
escapePos -= 1 | ||
escaped = !escaped | ||
} | ||
} while (escaped); | ||
} while (escaped) | ||
content = css.slice(pos, next + 1); | ||
lines = content.split('\n'); | ||
last = lines.length - 1; | ||
content = css.slice(pos, next + 1) | ||
lines = content.split('\n') | ||
last = lines.length - 1 | ||
if (last > 0) { | ||
nextLine = line + last; | ||
nextOffset = next - lines[last].length; | ||
nextLine = line + last | ||
nextOffset = next - lines[last].length | ||
} else { | ||
nextLine = line; | ||
nextOffset = offset; | ||
nextLine = line | ||
nextOffset = offset | ||
} | ||
tokens.push(['string', css.slice(pos, next + 1), line, pos - offset, nextLine, next - nextOffset]); | ||
tokens.push([ | ||
'string', | ||
css.slice(pos, next + 1), | ||
line, | ||
pos - offset, | ||
nextLine, | ||
next - nextOffset | ||
]) | ||
offset = nextOffset; | ||
line = nextLine; | ||
pos = next; | ||
break; | ||
offset = nextOffset | ||
line = nextLine | ||
pos = next | ||
break | ||
case AT: | ||
RE_AT_END.lastIndex = pos + 1; | ||
RE_AT_END.test(css); | ||
RE_AT_END.lastIndex = pos + 1 | ||
RE_AT_END.test(css) | ||
if (RE_AT_END.lastIndex === 0) { | ||
next = css.length - 1; | ||
next = css.length - 1 | ||
} else { | ||
next = RE_AT_END.lastIndex - 2; | ||
next = RE_AT_END.lastIndex - 2 | ||
} | ||
tokens.push(['at-word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]); | ||
pos = next; | ||
break; | ||
tokens.push([ | ||
'at-word', | ||
css.slice(pos, next + 1), | ||
line, | ||
pos - offset, | ||
line, | ||
next - offset | ||
]) | ||
pos = next | ||
break | ||
case BACKSLASH: | ||
next = pos; | ||
escape = true; | ||
next = pos | ||
escape = true | ||
nextLine = line; | ||
nextLine = line | ||
while (css.charCodeAt(next + 1) === BACKSLASH) { | ||
next += 1; | ||
escape = !escape; | ||
next += 1 | ||
escape = !escape | ||
} | ||
code = css.charCodeAt(next + 1); | ||
code = css.charCodeAt(next + 1) | ||
if (escape) { | ||
if (code === CR && css.charCodeAt(next + 2) === NEWLINE) { | ||
next += 2; | ||
nextLine += 1; | ||
nextOffset = next; | ||
next += 2 | ||
nextLine += 1 | ||
nextOffset = next | ||
} else if (code === CR || code === NEWLINE || code === FEED) { | ||
next += 1; | ||
nextLine += 1; | ||
nextOffset = next; | ||
next += 1 | ||
nextLine += 1 | ||
nextOffset = next | ||
} else { | ||
next += 1; | ||
next += 1 | ||
} | ||
} | ||
tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]); | ||
tokens.push([ | ||
'word', | ||
css.slice(pos, next + 1), | ||
line, | ||
pos - offset, | ||
line, | ||
next - offset | ||
]) | ||
if (nextLine !== line) { | ||
line = nextLine; | ||
offset = nextOffset; | ||
line = nextLine | ||
offset = nextOffset | ||
} | ||
pos = next; | ||
break; | ||
pos = next | ||
break | ||
default: | ||
n = css.charCodeAt(pos + 1); | ||
n = css.charCodeAt(pos + 1) | ||
if (code === SLASH && n === ASTERICK) { | ||
next = css.indexOf('*/', pos + 2) + 1; | ||
if (next === 0) unclosed('comment'); | ||
next = css.indexOf('*/', pos + 2) + 1 | ||
if (next === 0) unclosed('comment') | ||
content = css.slice(pos, next + 1); | ||
lines = content.split('\n'); | ||
last = lines.length - 1; | ||
content = css.slice(pos, next + 1) | ||
lines = content.split('\n') | ||
last = lines.length - 1 | ||
if (last > 0) { | ||
nextLine = line + last; | ||
nextOffset = next - lines[last].length; | ||
nextLine = line + last | ||
nextOffset = next - lines[last].length | ||
} else { | ||
nextLine = line; | ||
nextOffset = offset; | ||
nextLine = line | ||
nextOffset = offset | ||
} | ||
tokens.push(['comment', content, line, pos - offset, nextLine, next - nextOffset]); | ||
tokens.push([ | ||
'comment', | ||
content, | ||
line, | ||
pos - offset, | ||
nextLine, | ||
next - nextOffset | ||
]) | ||
offset = nextOffset; | ||
line = nextLine; | ||
pos = next; | ||
offset = nextOffset | ||
line = nextLine | ||
pos = next | ||
} else if (code === SLASH && n === SLASH) { | ||
RE_NEW_LINE.lastIndex = pos + 1; | ||
RE_NEW_LINE.test(css); | ||
RE_NEW_LINE.lastIndex = pos + 1 | ||
RE_NEW_LINE.test(css) | ||
if (RE_NEW_LINE.lastIndex === 0) { | ||
next = css.length - 1; | ||
next = css.length - 1 | ||
} else { | ||
next = RE_NEW_LINE.lastIndex - 2; | ||
next = RE_NEW_LINE.lastIndex - 2 | ||
} | ||
content = css.slice(pos, next + 1); | ||
content = css.slice(pos, next + 1) | ||
tokens.push(['comment', content, line, pos - offset, line, next - offset, 'inline']); | ||
tokens.push([ | ||
'comment', | ||
content, | ||
line, | ||
pos - offset, | ||
line, | ||
next - offset, | ||
'inline' | ||
]) | ||
pos = next; | ||
pos = next | ||
} else { | ||
RE_WORD_END.lastIndex = pos + 1; | ||
RE_WORD_END.test(css); | ||
RE_WORD_END.lastIndex = pos + 1 | ||
RE_WORD_END.test(css) | ||
if (RE_WORD_END.lastIndex === 0) { | ||
next = css.length - 1; | ||
next = css.length - 1 | ||
} else { | ||
next = RE_WORD_END.lastIndex - 2; | ||
next = RE_WORD_END.lastIndex - 2 | ||
} | ||
tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]); | ||
pos = next; | ||
tokens.push([ | ||
'word', | ||
css.slice(pos, next + 1), | ||
line, | ||
pos - offset, | ||
line, | ||
next - offset | ||
]) | ||
pos = next | ||
} | ||
break; | ||
break | ||
} | ||
pos++; | ||
pos++ | ||
} | ||
return tokens; | ||
return tokens | ||
} | ||
module.exports = exports['default']; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRva2VuaXplLmVzNiJdLCJuYW1lcyI6WyJ0b2tlbml6ZSIsIlNJTkdMRV9RVU9URSIsIkRPVUJMRV9RVU9URSIsIkJBQ0tTTEFTSCIsIlNMQVNIIiwiTkVXTElORSIsIlNQQUNFIiwiRkVFRCIsIlRBQiIsIkNSIiwiT1BFTl9QQVJFTlRIRVNFUyIsIkNMT1NFX1BBUkVOVEhFU0VTIiwiT1BFTl9DVVJMWSIsIkNMT1NFX0NVUkxZIiwiU0VNSUNPTE9OIiwiQVNURVJJQ0siLCJDT0xPTiIsIkFUIiwiQ09NTUEiLCJSRV9BVF9FTkQiLCJSRV9ORVdfTElORSIsIlJFX1dPUkRfRU5EIiwiUkVfQkFEX0JSQUNLRVQiLCJpbnB1dCIsInRva2VucyIsImNzcyIsInZhbHVlT2YiLCJjb2RlIiwibmV4dCIsInF1b3RlIiwibGluZXMiLCJsYXN0IiwiY29udGVudCIsImVzY2FwZSIsIm5leHRMaW5lIiwibmV4dE9mZnNldCIsImVzY2FwZWQiLCJlc2NhcGVQb3MiLCJwcmV2IiwibiIsImxlbmd0aCIsIm9mZnNldCIsImxpbmUiLCJwb3MiLCJ1bmNsb3NlZCIsIndoYXQiLCJlcnJvciIsImNoYXJDb2RlQXQiLCJwdXNoIiwic2xpY2UiLCJpbmRleE9mIiwidGVzdCIsInNwbGl0IiwibGFzdEluZGV4Il0sIm1hcHBpbmdzIjoiOzs7a0JBd0J3QkEsUTtBQXhCeEIsSUFBTUMsaUJBQU47QUFDQSxJQUFNQyxpQkFBTjtBQUNBLElBQU1DLGNBQU47QUFDQSxJQUFNQyxVQUFOO0FBQ0EsSUFBTUMsWUFBTjtBQUNBLElBQU1DLFVBQU47QUFDQSxJQUFNQyxTQUFOO0FBQ0EsSUFBTUMsT0FBTjtBQUNBLElBQU1DLE9BQU47QUFDQSxJQUFNQyxxQkFBTjtBQUNBLElBQU1DLHNCQUFOO0FBQ0EsSUFBTUMsZ0JBQU47QUFDQSxJQUFNQyxpQkFBTjtBQUNBLElBQU1DLGNBQU47QUFDQSxJQUFNQyxhQUFOO0FBQ0EsSUFBTUMsVUFBTjtBQUNBLElBQU1DLE9BQU47QUFDQSxJQUFNQyxV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QVosQ0FBaUIxQixHQUFqQjtBQUNBLGNBQUlMLFlBQVlpQyxTQUFaLEtBQTBCLENBQTlCLEVBQWlDO0FBQy9CekIsbUJBQU9ILElBQUllLE1BQUosR0FBYSxDQUFwQjtBQUNELFdBRkQsTUFFTztBQUNMWixtQkFBT1IsWUFBWWlDLFNBQVosR0FBd0IsQ0FBL0I7QUFDRDs7QUFFRHJCLG9CQUFVUCxJQUFJd0IsS0FBSixDQUFVTixHQUFWLEVBQWVmLE9BQU8sQ0FBdEIsQ0FBVjs7QUFFQUosaUJBQU93QixJQUFQLENBQVksQ0FBQyxTQUFELEVBQVloQixPQUFaLEVBQ1ZVLElBRFUsRUFDSkMsTUFBTUYsTUFERixFQUVWQyxJQUZVLEVBRUpkLE9BQU9hLE1BRkgsRUFHVixRQUhVLENBQVo7O0FBTUFFLGdCQUFNZixJQUFOO0FBQ0QsU0FsQk0sTUFrQkE7QUFDTFAsc0JBQVlnQyxTQUFaLEdBQXdCVixNQUFNLENBQTlCO0FBQ0F0QixzQkFBWThCLElBQVosQ0FBaUIxQixHQUFqQjtBQUNBLGNBQUlKLFlBQVlnQyxTQUFaLEtBQTBCLENBQTlCLEVBQWlDO0FBQy9CekIsbUJBQU9ILElBQUllLE1BQUosR0FBYSxDQUFwQjtBQUNELFdBRkQsTUFFTztBQUNMWixtQkFBT1AsWUFBWWdDLFNBQVosR0FBd0IsQ0FBL0I7QUFDRDs7QUFFRDdCLGlCQUFPd0IsSUFBUCxDQUFZLENBQUMsTUFBRCxFQUFTdkIsSUFBSXdCLEtBQUosQ0FBVU4sR0FBVixFQUFlZixPQUFPLENBQXRCLENBQVQsRUFDVmMsSUFEVSxFQUNKQyxNQUFNRixNQURGLEVBRVZDLElBRlUsRUFFSmQsT0FBT2EsTUFGSCxDQUFaO0FBSUFFLGdCQUFNZixJQUFOO0FBQ0Q7O0FBRUQ7QUFqUEo7O0FBb1BBZTtBQUNEOztBQUVELFNBQU9uQixNQUFQO0FBQ0QiLCJmaWxlIjoidG9rZW5pemUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBTSU5HTEVfUVVPVEUgPSAnXFwnJy5jaGFyQ29kZUF0KDApXG5jb25zdCBET1VCTEVfUVVPVEUgPSAnXCInLmNoYXJDb2RlQXQoMClcbmNvbnN0IEJBQ0tTTEFTSCA9ICdcXFxcJy5jaGFyQ29kZUF0KDApXG5jb25zdCBTTEFTSCA9ICcvJy5jaGFyQ29kZUF0KDApXG5jb25zdCBORVdMSU5FID0gJ1xcbicuY2hhckNvZGVBdCgwKVxuY29uc3QgU1BBQ0UgPSAnICcuY2hhckNvZGVBdCgwKVxuY29uc3QgRkVFRCA9ICdcXGYnLmNoYXJDb2RlQXQoMClcbmNvbnN0IFRBQiA9ICdcXHQnLmNoYXJDb2RlQXQoMClcbmNvbnN0IENSID0gJ1xccicuY2hhckNvZGVBdCgwKVxuY29uc3QgT1BFTl9QQVJFTlRIRVNFUyA9ICcoJy5jaGFyQ29kZUF0KDApXG5jb25zdCBDTE9TRV9QQVJFTlRIRVNFUyA9ICcpJy5jaGFyQ29kZUF0KDApXG5jb25zdCBPUEVOX0NVUkxZID0gJ3snLmNoYXJDb2RlQXQoMClcbmNvbnN0IENMT1NFX0NVUkxZID0gJ30nLmNoYXJDb2RlQXQoMClcbmNvbnN0IFNFTUlDT0xPTiA9ICc7Jy5jaGFyQ29kZUF0KDApXG5jb25zdCBBU1RFUklDSyA9ICcqJy5jaGFyQ29kZUF0KDApXG5jb25zdCBDT0xPTiA9ICc6Jy5jaGFyQ29kZUF0KDApXG5jb25zdCBBVCA9ICdAJy5jaGFyQ29kZUF0KDApXG5jb25zdCBDT01NQSA9ICcsJy5jaGFyQ29kZUF0KDApXG5cbmNvbnN0IFJFX0FUX0VORCA9IC9bIFxcblxcdFxcclxcZnsoKSdcIlxcXFw7L10vZ1xuY29uc3QgUkVfTkVXX0xJTkUgPSAvW1xcclxcZlxcbl0vZ1xuY29uc3QgUkVfV09SRF9FTkQgPSAvWyBcXG5cXHRcXHJcXGYoKXt9OjtAISdcIlxcXFwsXXxcXC8oPz1cXCopL2dcbmNvbnN0IFJFX0JBRF9CUkFDS0VUID0gLy5bXFxcXC8oXCInXFxuXS9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9rZW5pemUgKGlucHV0KSB7XG4gIGxldCB0b2tlbnMgPSBbXVxuICBsZXQgY3NzID0gaW5wdXQuY3NzLnZhbHVlT2YoKVxuXG4gIGxldCBjb2RlLCBuZXh0LCBxdW90ZSwgbGluZXMsIGxhc3QsIGNvbnRlbnQsIGVzY2FwZSxcbiAgICBuZXh0TGluZSwgbmV4dE9mZnNldCwgZXNjYXBlZCwgZXNjYXBlUG9zLCBwcmV2LCBuXG5cbiAgbGV0IGxlbmd0aCA9IGNzcy5sZW5ndGhcbiAgbGV0IG9mZnNldCA9IC0xXG4gIGxldCBsaW5lID0gMVxuICBsZXQgcG9zID0gMFxuXG4gIGZ1bmN0aW9uIHVuY2xvc2VkICh3aGF0KSB7XG4gICAgdGhyb3cgaW5wdXQuZXJyb3IoJ1VuY2xvc2VkICcgKyB3aGF0LCBsaW5lLCBwb3MgLSBvZmZzZXQpXG4gIH1cblxuICB3aGlsZSAocG9zIDwgbGVuZ3RoKSB7XG4gICAgY29kZSA9IGNzcy5jaGFyQ29kZUF0KHBvcylcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPT09IE5FV0xJTkUgfHxcbiAgICAgIGNvZGUgPT09IEZFRUQgfHxcbiAgICAgIChjb2RlID09PSBDUiAmJiBjc3MuY2hhckNvZGVBdChwb3MgKyAxKSAhPT0gTkVXTElORSlcbiAgICApIHtcbiAgICAgIG9mZnNldCA9IHBvc1xuICAgICAgbGluZSArPSAxXG4gICAgfVxuXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICBjYXNlIENSOlxuICAgICAgICBpZiAoY3NzLmNoYXJDb2RlQXQocG9zICsgMSkgPT09IE5FV0xJTkUpIHtcbiAgICAgICAgICBvZmZzZXQgPSBwb3NcbiAgICAgICAgICBsaW5lICs9IDFcbiAgICAgICAgICBwb3MgKz0gMVxuICAgICAgICAgIHRva2Vucy5wdXNoKFsnbmV3bGluZScsICdcXHJcXG4nLCBsaW5lIC0gMV0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9rZW5zLnB1c2goWyduZXdsaW5lJywgJ1xccicsIGxpbmUgLSAxXSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIEZFRUQ6XG4gICAgICBjYXNlIE5FV0xJTkU6XG4gICAgICAgIHRva2Vucy5wdXNoKFsnbmV3bGluZScsIGNzcy5zbGljZShwb3MsIHBvcyArIDEpLCBsaW5lIC0gMV0pXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgU1BBQ0U6XG4gICAgICBjYXNlIFRBQjpcbiAgICAgICAgbmV4dCA9IHBvc1xuICAgICAgICBkbyB7XG4gICAgICAgICAgbmV4dCArPSAxXG4gICAgICAgICAgY29kZSA9IGNzcy5jaGFyQ29kZUF0KG5leHQpXG4gICAgICAgIH0gd2hpbGUgKGNvZGUgPT09IFNQQUNFIHx8IGNvZGUgPT09IFRBQilcblxuICAgICAgICB0b2tlbnMucHVzaChbJ3NwYWNlJywgY3NzLnNsaWNlKHBvcywgbmV4dCldKVxuICAgICAgICBwb3MgPSBuZXh0IC0gMVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIE9QRU5fQ1VSTFk6XG4gICAgICAgIHRva2Vucy5wdXNoKFsneycsICd7JywgbGluZSwgcG9zIC0gb2Zmc2V0XSlcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSBDTE9TRV9DVVJMWTpcbiAgICAgICAgdG9rZW5zLnB1c2goWyd9JywgJ30nLCBsaW5lLCBwb3MgLSBvZmZzZXRdKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIENPTE9OOlxuICAgICAgICB0b2tlbnMucHVzaChbJzonLCAnOicsIGxpbmUsIHBvcyAtIG9mZnNldF0pXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgU0VNSUNPTE9OOlxuICAgICAgICB0b2tlbnMucHVzaChbJzsnLCAnOycsIGxpbmUsIHBvcyAtIG9mZnNldF0pXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgQ09NTUE6XG4gICAgICAgIHRva2Vucy5wdXNoKFsnLCcsICcsJywgbGluZSwgcG9zIC0gb2Zmc2V0XSlcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSBPUEVOX1BBUkVOVEhFU0VTOlxuICAgICAgICBwcmV2ID0gdG9rZW5zLmxlbmd0aCA/IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV1bMV0gOiAnJ1xuICAgICAgICBuID0gY3NzLmNoYXJDb2RlQXQocG9zICsgMSlcbiAgICAgICAgaWYgKHByZXYgPT09ICd1cmwnICYmIG4gIT09IFNJTkdMRV9RVU9URSAmJiBuICE9PSBET1VCTEVfUVVPVEUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiAhPT0gU1BBQ0UgJiYgbiAhPT0gTkVXTElORSAmJiBuICE9PSBUQUIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiAhPT0gRkVFRCAmJiBuICE9PSBDUikge1xuICAgICAgICAgIG5leHQgPSBwb3NcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBlc2NhcGVkID0gZmFsc2VcbiAgICAgICAgICAgIG5leHQgPSBjc3MuaW5kZXhPZignKScsIG5leHQgKyAxKVxuICAgICAgICAgICAgaWYgKG5leHQgPT09IC0xKSB1bmNsb3NlZCgnYnJhY2tldCcpXG4gICAgICAgICAgICBlc2NhcGVQb3MgPSBuZXh0XG4gICAgICAgICAgICB3aGlsZSAoY3NzLmNoYXJDb2RlQXQoZXNjYXBlUG9zIC0gMSkgPT09IEJBQ0tTTEFTSCkge1xuICAgICAgICAgICAgICBlc2NhcGVQb3MgLT0gMVxuICAgICAgICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IHdoaWxlIChlc2NhcGVkKVxuXG4gICAgICAgICAgdG9rZW5zLnB1c2goWydicmFja2V0cycsIGNzcy5zbGljZShwb3MsIG5leHQgKyAxKSxcbiAgICAgICAgICAgIGxpbmUsIHBvcyAtIG9mZnNldCxcbiAgICAgICAgICAgIGxpbmUsIG5leHQgLSBvZmZzZXRcbiAgICAgICAgICBdKVxuICAgICAgICAgIHBvcyA9IG5leHRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0ID0gY3NzLmluZGV4T2YoJyknLCBwb3MgKyAxKVxuICAgICAgICAgIGNvbnRlbnQgPSBjc3Muc2xpY2UocG9zLCBuZXh0ICsgMSlcblxuICAgICAgICAgIGlmIChuZXh0ID09PSAtMSB8fCBSRV9CQURfQlJBQ0tFVC50ZXN0KGNvbnRlbnQpKSB7XG4gICAgICAgICAgICB0b2tlbnMucHVzaChbJygnLCAnKCcsIGxpbmUsIHBvcyAtIG9mZnNldF0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRva2Vucy5wdXNoKFsnYnJhY2tldHMnLCBjb250ZW50LFxuICAgICAgICAgICAgICBsaW5lLCBwb3MgLSBvZmZzZXQsXG4gICAgICAgICAgICAgIGxpbmUsIG5leHQgLSBvZmZzZXRcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBwb3MgPSBuZXh0XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSBDTE9TRV9QQVJFTlRIRVNFUzpcbiAgICAgICAgdG9rZW5zLnB1c2goWycpJywgJyknLCBsaW5lLCBwb3MgLSBvZmZzZXRdKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIFNJTkdMRV9RVU9URTpcbiAgICAgIGNhc2UgRE9VQkxFX1FVT1RFOlxuICAgICAgICBxdW90ZSA9IGNvZGUgPT09IFNJTkdMRV9RVU9URSA/ICdcXCcnIDogJ1wiJ1xuICAgICAgICBuZXh0ID0gcG9zXG4gICAgICAgIGRvIHtcbiAgICAgICAgICBlc2NhcGVkID0gZmFsc2VcbiAgICAgICAgICBuZXh0ID0gY3NzLmluZGV4T2YocXVvdGUsIG5leHQgKyAxKVxuICAgICAgICAgIGlmIChuZXh0ID09PSAtMSkgdW5jbG9zZWQoJ3F1b3RlJylcbiAgICAgICAgICBlc2NhcGVQb3MgPSBuZXh0XG4gICAgICAgICAgd2hpbGUgKGNzcy5jaGFyQ29kZUF0KGVzY2FwZVBvcyAtIDEpID09PSBCQUNLU0xBU0gpIHtcbiAgICAgICAgICAgIGVzY2FwZVBvcyAtPSAxXG4gICAgICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWRcbiAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGVzY2FwZWQpXG5cbiAgICAgICAgY29udGVudCA9IGNzcy5zbGljZShwb3MsIG5leHQgKyAxKVxuICAgICAgICBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoJ1xcbicpXG4gICAgICAgIGxhc3QgPSBsaW5lcy5sZW5ndGggLSAxXG5cbiAgICAgICAgaWYgKGxhc3QgPiAwKSB7XG4gICAgICAgICAgbmV4dExpbmUgPSBsaW5lICsgbGFzdFxuICAgICAgICAgIG5leHRPZmZzZXQgPSBuZXh0IC0gbGluZXNbbGFzdF0ubGVuZ3RoXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dExpbmUgPSBsaW5lXG4gICAgICAgICAgbmV4dE9mZnNldCA9IG9mZnNldFxuICAgICAgICB9XG5cbiAgICAgICAgdG9rZW5zLnB1c2goWydzdHJpbmcnLCBjc3Muc2xpY2UocG9zLCBuZXh0ICsgMSksXG4gICAgICAgICAgbGluZSwgcG9zIC0gb2Zmc2V0LFxuICAgICAgICAgIG5leHRMaW5lLCBuZXh0IC0gbmV4dE9mZnNldFxuICAgICAgICBdKVxuXG4gICAgICAgIG9mZnNldCA9IG5leHRPZmZzZXRcbiAgICAgICAgbGluZSA9IG5leHRMaW5lXG4gICAgICAgIHBvcyA9IG5leHRcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSBBVDpcbiAgICAgICAgUkVfQVRfRU5ELmxhc3RJbmRleCA9IHBvcyArIDFcbiAgICAgICAgUkVfQVRfRU5ELnRlc3QoY3NzKVxuICAgICAgICBpZiAoUkVfQVRfRU5ELmxhc3RJbmRleCA9PT0gMCkge1xuICAgICAgICAgIG5leHQgPSBjc3MubGVuZ3RoIC0gMVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHQgPSBSRV9BVF9FTkQubGFzdEluZGV4IC0gMlxuICAgICAgICB9XG4gICAgICAgIHRva2Vucy5wdXNoKFsnYXQtd29yZCcsIGNzcy5zbGljZShwb3MsIG5leHQgKyAxKSxcbiAgICAgICAgICBsaW5lLCBwb3MgLSBvZmZzZXQsXG4gICAgICAgICAgbGluZSwgbmV4dCAtIG9mZnNldFxuICAgICAgICBdKVxuICAgICAgICBwb3MgPSBuZXh0XG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgQkFDS1NMQVNIOlxuICAgICAgICBuZXh0ID0gcG9zXG4gICAgICAgIGVzY2FwZSA9IHRydWVcblxuICAgICAgICBuZXh0TGluZSA9IGxpbmVcblxuICAgICAgICB3aGlsZSAoY3NzLmNoYXJDb2RlQXQobmV4dCArIDEpID09PSBCQUNLU0xBU0gpIHtcbiAgICAgICAgICBuZXh0ICs9IDFcbiAgICAgICAgICBlc2NhcGUgPSAhZXNjYXBlXG4gICAgICAgIH1cbiAgICAgICAgY29kZSA9IGNzcy5jaGFyQ29kZUF0KG5leHQgKyAxKVxuICAgICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IENSICYmIGNzcy5jaGFyQ29kZUF0KG5leHQgKyAyKSA9PT0gTkVXTElORSkge1xuICAgICAgICAgICAgbmV4dCArPSAyXG4gICAgICAgICAgICBuZXh0TGluZSArPSAxXG4gICAgICAgICAgICBuZXh0T2Zmc2V0ID0gbmV4dFxuICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gQ1IgfHwgY29kZSA9PT0gTkVXTElORSB8fCBjb2RlID09PSBGRUVEKSB7XG4gICAgICAgICAgICBuZXh0ICs9IDFcbiAgICAgICAgICAgIG5leHRMaW5lICs9IDFcbiAgICAgICAgICAgIG5leHRPZmZzZXQgPSBuZXh0XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5leHQgKz0gMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0b2tlbnMucHVzaChbJ3dvcmQnLCBjc3Muc2xpY2UocG9zLCBuZXh0ICsgMSksXG4gICAgICAgICAgbGluZSwgcG9zIC0gb2Zmc2V0LFxuICAgICAgICAgIGxpbmUsIG5leHQgLSBvZmZzZXRcbiAgICAgICAgXSlcbiAgICAgICAgaWYgKG5leHRMaW5lICE9PSBsaW5lKSB7XG4gICAgICAgICAgbGluZSA9IG5leHRMaW5lXG4gICAgICAgICAgb2Zmc2V0ID0gbmV4dE9mZnNldFxuICAgICAgICB9XG4gICAgICAgIHBvcyA9IG5leHRcbiAgICAgICAgYnJlYWtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbiA9IGNzcy5jaGFyQ29kZUF0KHBvcyArIDEpXG5cbiAgICAgICAgaWYgKGNvZGUgPT09IFNMQVNIICYmIG4gPT09IEFTVEVSSUNLKSB7XG4gICAgICAgICAgbmV4dCA9IGNzcy5pbmRleE9mKCcqLycsIHBvcyArIDIpICsgMVxuICAgICAgICAgIGlmIChuZXh0ID09PSAwKSB1bmNsb3NlZCgnY29tbWVudCcpXG5cbiAgICAgICAgICBjb250ZW50ID0gY3NzLnNsaWNlKHBvcywgbmV4dCArIDEpXG4gICAgICAgICAgbGluZXMgPSBjb250ZW50LnNwbGl0KCdcXG4nKVxuICAgICAgICAgIGxhc3QgPSBsaW5lcy5sZW5ndGggLSAxXG5cbiAgICAgICAgICBpZiAobGFzdCA+IDApIHtcbiAgICAgICAgICAgIG5leHRMaW5lID0gbGluZSArIGxhc3RcbiAgICAgICAgICAgIG5leHRPZmZzZXQgPSBuZXh0IC0gbGluZXNbbGFzdF0ubGVuZ3RoXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5leHRMaW5lID0gbGluZVxuICAgICAgICAgICAgbmV4dE9mZnNldCA9IG9mZnNldFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRva2Vucy5wdXNoKFsnY29tbWVudCcsIGNvbnRlbnQsXG4gICAgICAgICAgICBsaW5lLCBwb3MgLSBvZmZzZXQsXG4gICAgICAgICAgICBuZXh0TGluZSwgbmV4dCAtIG5leHRPZmZzZXRcbiAgICAgICAgICBdKVxuXG4gICAgICAgICAgb2Zmc2V0ID0gbmV4dE9mZnNldFxuICAgICAgICAgIGxpbmUgPSBuZXh0TGluZVxuICAgICAgICAgIHBvcyA9IG5leHRcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSBTTEFTSCAmJiBuID09PSBTTEFTSCkge1xuICAgICAgICAgIFJFX05FV19MSU5FLmxhc3RJbmRleCA9IHBvcyArIDFcbiAgICAgICAgICBSRV9ORVdfTElORS50ZXN0KGNzcylcbiAgICAgICAgICBpZiAoUkVfTkVXX0xJTkUubGFzdEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICBuZXh0ID0gY3NzLmxlbmd0aCAtIDFcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV4dCA9IFJFX05FV19MSU5FLmxhc3RJbmRleCAtIDJcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZW50ID0gY3NzLnNsaWNlKHBvcywgbmV4dCArIDEpXG5cbiAgICAgICAgICB0b2tlbnMucHVzaChbJ2NvbW1lbnQnLCBjb250ZW50LFxuICAgICAgICAgICAgbGluZSwgcG9zIC0gb2Zmc2V0LFxuICAgICAgICAgICAgbGluZSwgbmV4dCAtIG9mZnNldCxcbiAgICAgICAgICAgICdpbmxpbmUnXG4gICAgICAgICAgXSlcblxuICAgICAgICAgIHBvcyA9IG5leHRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBSRV9XT1JEX0VORC5sYXN0SW5kZXggPSBwb3MgKyAxXG4gICAgICAgICAgUkVfV09SRF9FTkQudGVzdChjc3MpXG4gICAgICAgICAgaWYgKFJFX1dPUkRfRU5ELmxhc3RJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgbmV4dCA9IGNzcy5sZW5ndGggLSAxXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5leHQgPSBSRV9XT1JEX0VORC5sYXN0SW5kZXggLSAyXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdG9rZW5zLnB1c2goWyd3b3JkJywgY3NzLnNsaWNlKHBvcywgbmV4dCArIDEpLFxuICAgICAgICAgICAgbGluZSwgcG9zIC0gb2Zmc2V0LFxuICAgICAgICAgICAgbGluZSwgbmV4dCAtIG9mZnNldFxuICAgICAgICAgIF0pXG4gICAgICAgICAgcG9zID0gbmV4dFxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBwb3MrK1xuICB9XG5cbiAgcmV0dXJuIHRva2Vuc1xufVxuIl19 |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
13
310
34954
890
1
+ Addednanoid@3.3.7(transitive)
+ Addedpicocolors@1.0.0(transitive)
+ Addedpostcss@8.4.38(transitive)
+ Addedsource-map-js@1.2.0(transitive)
- Removedpicocolors@0.2.1(transitive)
- Removedpostcss@7.0.39(transitive)
- Removedsource-map@0.6.1(transitive)
Updatedpostcss@^8.0.2