├── README.md ├── bin └── csswring.js ├── index.js ├── lib ├── color.js ├── regexp.js └── unit.js ├── package-lock.json ├── package.json └── test ├── expected ├── angle.css ├── at-import-url.css ├── at-import.css ├── at-keyframes-name.css ├── at-media-params.css ├── at-namespace-url.css ├── at-rule-aftername.css ├── at-supports-condition.css ├── calc.css ├── color.css ├── comment.css ├── content.css ├── decimal-with-zeros.css ├── duplicate-decl.css ├── duplicate-selector.css ├── empty-at-rule-block.css ├── empty-ruleset.css ├── erroneous-prop.css ├── extra-semicolon.css ├── font-face.css ├── font-family.css ├── font-weight.css ├── freq.css ├── hacks_min-width-0-percent.css ├── hacks_prop-comment.css ├── hacks_sign-prop.css ├── invalid-at-rule.css ├── invalid-keyframe.css ├── issue11.css ├── issue13.css ├── issue17.css ├── issue19.css ├── issue3.css ├── issue30.css ├── issue34.css ├── issue36.css ├── issue37.css ├── issue40.css ├── issue52.css ├── issue53.css ├── issue54.css ├── issue57.css ├── issue62.css ├── issue66.css ├── issue69.css ├── issue70.css ├── issue85.css ├── issue87.css ├── multiple-values.css ├── number-leading-zeros.css ├── ruleset-without-selector.css ├── selector-att.css ├── selector-combinator.css ├── selector-function.css ├── selector-pseudo-elements.css ├── selector-universal.css ├── time.css ├── url.css ├── white-space.css └── zero-value-unit.css ├── fixtures ├── angle.css ├── at-import-url.css ├── at-import.css ├── at-keyframes-name.css ├── at-media-params.css ├── at-namespace-url.css ├── at-rule-aftername.css ├── at-supports-condition.css ├── calc.css ├── color.css ├── comment.css ├── content.css ├── decimal-with-zeros.css ├── duplicate-decl.css ├── duplicate-selector.css ├── empty-at-rule-block.css ├── empty-ruleset.css ├── erroneous-prop.css ├── extra-semicolon.css ├── font-face.css ├── font-family.css ├── font-weight.css ├── freq.css ├── hacks_min-width-0-percent.css ├── hacks_prop-comment.css ├── hacks_sign-prop.css ├── invalid-at-rule.css ├── invalid-keyframe.css ├── issue11.css ├── issue13.css ├── issue17.css ├── issue19.css ├── issue3.css ├── issue30.css ├── issue34.css ├── issue36.css ├── issue37.css ├── issue40.css ├── issue52.css ├── issue53.css ├── issue54.css ├── issue57.css ├── issue62.css ├── issue66.css ├── issue69.css ├── issue70.css ├── issue85.css ├── issue87.css ├── multiple-values.css ├── number-leading-zeros.css ├── ruleset-without-selector.css ├── selector-att.css ├── selector-combinator.css ├── selector-function.css ├── selector-pseudo-elements.css ├── selector-universal.css ├── time.css ├── url.css ├── white-space.css └── zero-value-unit.css └── index.js /README.md: -------------------------------------------------------------------------------- 1 | CSSWring 2 | ======== 3 | 4 | A CSS minifier for PostCSS 5 | 6 | 7 | SYNOPSIS 8 | -------- 9 | 10 | For readability, almost all CSS file contains a lot of white spaces, extra 11 | semicolon, etc.: 12 | 13 | .foo { 14 | width: 100px; 15 | } 16 | 17 | .bar { 18 | margin-top: 0px; 19 | } 20 | 21 | .baz { 22 | color: rgb(255, 0, 0); 23 | background-color: rgb(36, 36, 36); 24 | } 25 | 26 | This PostCSS plugin removes and converts these non-essential parts of CSS file, 27 | like this: 28 | 29 | .foo{width:100px}.bar{margin-top:0}.baz{color:red;background-color:#242424} 30 | 31 | 32 | INSTALL 33 | ------- 34 | 35 | $ npm install csswring 36 | 37 | 38 | USAGE 39 | ----- 40 | 41 | Of course, this package can be used as PostCSS plugin: 42 | 43 | "use strict"; 44 | 45 | var fs = require("fs"); 46 | var postcss = require("postcss"); 47 | 48 | var css = fs.readFileSync("test.css", "utf8"); 49 | postcss([ 50 | require("autoprefixer")(), 51 | require("csswring")() 52 | ]).process(css).then(function (result) { 53 | fs.writeFileSync("test.min.css", result.css); 54 | }); 55 | 56 | 57 | ### As standard Node.js package 58 | 59 | To minify `test.css` to `test.min.css`: 60 | 61 | #!/usr/bin/env node 62 | 63 | "use strict"; 64 | 65 | var fs = require("fs"); 66 | var csswring = require("csswring"); 67 | 68 | var css = fs.readFileSync("test.css", "utf8"); 69 | fs.writeFileSync("test.min.css", csswring.wring(css).css); 70 | 71 | 72 | ## As CLI Program 73 | 74 | This package also installs a command line interface. 75 | 76 | $ node ./node_modules/.bin/csswring --help 77 | Usage: csswring [options] INPUT [OUTPUT] 78 | 79 | Description: 80 | Minify CSS using PostCSS 81 | 82 | Options: 83 | --sourcemap Create source map file. 84 | --preserve-hacks Preserve some CSS hacks. 85 | --remove-all-comments Remove all comments. 86 | -h, --help Show this message. 87 | --version Print version information. 88 | 89 | Use a single dash for INPUT to read CSS from standard input. 90 | 91 | Examples: 92 | $ csswring foo.css 93 | $ csswring foo.css > foo.min.css 94 | $ cat foo.css bar.css baz.css | csswring - > fbb.min.css 95 | 96 | When PostCSS failed to parse INPUT, CLI shows a CSS parse error in GNU error 97 | format instead of Node.js stack trace. 98 | 99 | 100 | MINIFICATIONS 101 | ------------- 102 | 103 | CSSWring doesn’t remove only white spaces or comments, but also remove an 104 | unnecessary parts of CSS. See [minification details][2] in our GitHub Wiki. 105 | 106 | 107 | OPTIONS 108 | ------- 109 | 110 | ### preserveHacks 111 | 112 | By default, CSSWring removes all unknown portion of CSS declaration that 113 | includes some CSS hacks (e.g., underscore hacks and star hacks). If you want to 114 | preserve these hacks, pass `preserveHacks: true` to this module. 115 | 116 | postcss([ 117 | csswring({ 118 | preserveHacks: true 119 | }) 120 | ]).wring(css); 121 | 122 | 123 | ### removeAllComments 124 | 125 | By default, CSSWring keeps a comment that start with `/*!`. If you want to 126 | remove all comments, pass `removeAllComments: true` to this module. 127 | 128 | postcss([ 129 | csswring({ 130 | removeAllComments: true 131 | }) 132 | ]).wring(css); 133 | 134 | 135 | API 136 | --- 137 | 138 | ### wring(css, [options]) 139 | 140 | Wring `css` with specified `options`. 141 | 142 | The second argument is optional. The `options` is same as the second argument of 143 | PostCSS’s `process()` method. This is useful for generating source map. 144 | 145 | var fs = require("fs"); 146 | var csswring = require("csswring"); 147 | 148 | var css = fs.readFileSync("from.css", "utf8"); 149 | var result = csswring.wring(css, { 150 | map: { 151 | inline: false 152 | }, 153 | from: "from.css", 154 | to: "to.css" 155 | }); 156 | fs.writeFileSync("to.css", result.css); 157 | fs.writeFileSync("to.css.map", result.map); 158 | 159 | See also [Source Map section][3] in PostCSS document for more about this 160 | `options`. 161 | 162 | You can also merge CSSWring options mentioned above to the second argument: 163 | 164 | var result = csswring.wring(css, { 165 | map: true, 166 | preserveHacks: true 167 | }); 168 | 169 | 170 | LICENSE 171 | ------- 172 | 173 | MIT: http://hail2u.mit-license.org/2014 174 | 175 | 176 | [1]: https://github.com/postcss/postcss 177 | [2]: https://github.com/hail2u/node-csswring/wiki 178 | [3]: https://github.com/postcss/postcss#source-map 179 | -------------------------------------------------------------------------------- /bin/csswring.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const csswring = require("../index"); 4 | const fs = require("fs"); 5 | const minimist = require("minimist"); 6 | const pkg = require("../package.json"); 7 | 8 | const argv = minimist(process.argv.slice(2), { 9 | boolean: [ 10 | "help", 11 | "preserve-hacks", 12 | "remove-all-comments", 13 | "sourcemap", 14 | "version" 15 | ], 16 | alias: { 17 | h: "help" 18 | }, 19 | default: { 20 | help: false, 21 | "preserve-hacks": false, 22 | "remove-all-comments": false, 23 | sourcemap: false, 24 | version: false 25 | } 26 | }); 27 | const [binname] = Object.keys(pkg.bin); 28 | const options = {}; 29 | 30 | const showHelp = () => { 31 | console.log(`Usage: ${binname} [options] INPUT [OUTPUT] 32 | 33 | Description: 34 | ${pkg.description} 35 | 36 | Options: 37 | --sourcemap Create source map file. 38 | --preserve-hacks Preserve some CSS hacks. 39 | --remove-all-comments Remove all comments. 40 | -h, --help Show this message. 41 | --version Print version information. 42 | 43 | Use a single dash for INPUT to read CSS from standard input. 44 | 45 | Examples: 46 | $ ${binname} foo.css 47 | $ ${binname} foo.css > foo.min.css 48 | $ cat foo.css bar.css baz.css | ${binname} - > fbb.min.css`); 49 | }; 50 | 51 | const wring = (s, o) => { 52 | csswring 53 | .wring(s, o) 54 | .then(result => { 55 | if (!o.to) { 56 | process.stdout.write(result.css); 57 | 58 | return; 59 | } 60 | 61 | fs.writeFileSync(o.to, result.css); 62 | 63 | if (result.map) { 64 | fs.writeFileSync(`${o.to}.map`, result.map); 65 | } 66 | }) 67 | .catch(error => { 68 | if (error.name !== "CssSyntaxError") { 69 | throw error; 70 | } 71 | 72 | process.exitCode = 1; 73 | console.error( 74 | `${error.file}:${error.line}:${error.column}: ${error.reason}` 75 | ); 76 | }); 77 | }; 78 | 79 | if (argv._.length < 1) { 80 | argv.help = true; 81 | } 82 | 83 | switch (true) { 84 | case argv.version: 85 | console.log(`${binname} v${pkg.version}`); 86 | 87 | break; 88 | 89 | case argv.help: 90 | showHelp(); 91 | 92 | break; 93 | 94 | default: { 95 | if (argv["preserve-hacks"]) { 96 | options.preserveHacks = true; 97 | } 98 | 99 | if (argv["remove-all-comments"]) { 100 | options.removeAllComments = true; 101 | } 102 | 103 | if (argv.sourcemap) { 104 | options.map = true; 105 | } 106 | 107 | [options.from, options.to] = argv._; 108 | let input = options.from; 109 | 110 | if (input === "-") { 111 | delete options.from; 112 | input = process.stdin.fd; 113 | } 114 | 115 | if (!options.to) { 116 | delete options.to; 117 | } 118 | 119 | if (options.map && options.to) { 120 | options.map = { 121 | inline: false 122 | }; 123 | } 124 | 125 | wring(fs.readFileSync(input, "utf8"), options); 126 | } 127 | } 128 | 129 | /* eslint no-console: "off" */ 130 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const color = require("./lib/color"); 2 | const list = require("postcss/lib/list"); 3 | const onecolor = require("onecolor"); 4 | const pkg = require("./package.json"); 5 | const postcss = require("postcss"); 6 | const re = require("./lib/regexp"); 7 | const unit = require("./lib/unit"); 8 | 9 | // Check comment is a source map annotation or not 10 | const isSourceMapAnnotation = comment => { 11 | if ( 12 | comment.parent.type === "root" && 13 | comment.parent.last === comment && 14 | comment.text.toLowerCase().indexOf("# sourcemappingurl=") === 0 15 | ) { 16 | return true; 17 | } 18 | 19 | return false; 20 | }; 21 | 22 | // Set quotation mark 23 | const setQuote = quote => { 24 | if (!quote) { 25 | return '"'; 26 | } 27 | 28 | return quote; 29 | }; 30 | 31 | // Check string can unquote or not 32 | const canUnquote = str => { 33 | const firstChar = str.slice(0, 1); 34 | 35 | if (re.number.test(firstChar)) { 36 | return false; 37 | } 38 | 39 | const secondChar = str.slice(1, 2); 40 | 41 | if ( 42 | firstChar === "-" && 43 | (secondChar === "-" || secondChar === "" || re.number.test(secondChar)) 44 | ) { 45 | return false; 46 | } 47 | 48 | if (re.sequenceOfIdentifiers.test(str)) { 49 | return true; 50 | } 51 | 52 | return false; 53 | }; 54 | 55 | // Unquote font family name if possible 56 | const unquoteFontFamily = family => { 57 | if (family.match(re.varFunction)) { 58 | return family; 59 | } 60 | 61 | let newFamily = family.replace(re.quotedString, "$2"); 62 | const quote = setQuote(RegExp.$1); 63 | 64 | if (!list.space(newFamily).every(canUnquote)) { 65 | newFamily = `${quote}${newFamily}${quote}`; 66 | } 67 | 68 | return newFamily; 69 | }; 70 | 71 | // Convert colors to HEX or `rgba()` notation 72 | const toRGBColor = (m, leading, c) => { 73 | const co = onecolor(c); 74 | 75 | // Return unmodified value when `one.color` failed to parse `c` 76 | if (!co) { 77 | return m; 78 | } 79 | 80 | if (co.alpha() < 1) { 81 | return `${leading}${co.cssa()}`; 82 | } 83 | 84 | return `${leading}${co.hex()} `; 85 | }; 86 | 87 | // Convert to shortest color 88 | const toShortestColor = (m, leading, r1, r2, g1, g2, b1, b2) => { 89 | let c = `#${r1}${r2}${g1}${g2}${b1}${b2}`; 90 | 91 | if (r1 === r2 && g1 === g2 && b1 === b2) { 92 | c = `#${r1}${g1}${b1}`; 93 | } 94 | 95 | if (color.shortest.hasOwnProperty(c)) { 96 | c = color.shortest[c]; 97 | } 98 | 99 | return `${leading}${c.toLowerCase()}`; 100 | }; 101 | 102 | // Remove unit from 0 length and 0 percentage if possible 103 | const removeUnitOfZero = ( 104 | preserveHacks, 105 | prop, 106 | m, 107 | leading, 108 | num, 109 | u, 110 | position, 111 | value 112 | ) => { 113 | if ( 114 | prop === "flex" || 115 | prop === "-ms-flex" || 116 | prop === "-webkit-flex" || 117 | prop === "flex-basis" || 118 | prop === "-webkit-flex-basis" || 119 | value.indexOf("calc(") !== -1 || 120 | prop.startsWith("--") || 121 | (preserveHacks && prop === "min-width" && u === "%") 122 | ) { 123 | return m; 124 | } 125 | 126 | if (unit.forZero.hasOwnProperty(u)) { 127 | return `${leading}${num}${unit.forZero[u]}`; 128 | } 129 | 130 | return `${leading}${num}`; 131 | }; 132 | 133 | // Convert to shortest time 134 | const toShortestTime = (m, leading, n) => 135 | `${leading}${(parseInt(n, 10) / 100).toString().replace(/^0+/, "")}s`; 136 | 137 | // Convert to shortest angle 138 | const toShortestAngle = (m, leading, n, u) => { 139 | const num = parseInt(n, 10); 140 | 141 | if (Number.isInteger(num / 10)) { 142 | return `${leading}${num * (360 / 400)}deg`; 143 | } 144 | 145 | return `${leading}${num}${u}`; 146 | }; 147 | 148 | // Unquote inside `url()` notation if possible 149 | const unquoteURL = (m, leading, u) => { 150 | let url = u.replace(re.quotedString, "$2"); 151 | const quote = setQuote(RegExp.$1); 152 | 153 | url = url.replace(re.escapedBraces, "$1"); 154 | 155 | if (re.urlNeedQuote.test(url)) { 156 | url = `${quote}${url}${quote}`; 157 | } 158 | 159 | return `${leading}url(${url})`; 160 | }; 161 | 162 | // Remove white spaces inside `calc()` notation 163 | const removeCalcWhiteSpaces = (m, leading, calc) => 164 | `${leading}calc(${calc.replace(re.whiteSpacesBothEndsOfSymbol, "$1")})`; 165 | 166 | // Wring value of declaration 167 | const wringValue = (preserveHacks, prop, value) => 168 | value 169 | .replace(re.colorFunction, toRGBColor) 170 | .replace(re.colorHex, toShortestColor) 171 | .replace(re.colorTransparent, "$1transparent ") 172 | .trim() 173 | .replace(re.whiteSpaces, " ") 174 | .replace(re.whiteSpacesAfterSymbol, "$1") 175 | .replace(re.whiteSpacesBeforeSymbol, "$1") 176 | .replace(re.numberLeadingZeros, "$1$2") 177 | .replace(re.zeroValueUnit, removeUnitOfZero.bind(null, preserveHacks, prop)) 178 | .replace(re.decimalWithZeros, "$1$2$3.$4") 179 | .replace(re.timeEndsWithZero, toShortestTime) 180 | .replace(re.angle, toShortestAngle) 181 | .replace(re.freqEndsWithThreeZeros, "$1$2kHz") 182 | .replace(re.urlFunction, unquoteURL) 183 | .replace(re.calcFunction, removeCalcWhiteSpaces); 184 | 185 | // Unquote attribute selector if possible 186 | const unquoteAttributeSelector = (m, att, con, val, oq, f) => { 187 | if (!con || !val) { 188 | return `[${att}]`; 189 | } 190 | 191 | let value = val.trim().replace(re.quotedString, "$2"); 192 | const quote = setQuote(RegExp.$1); 193 | 194 | if (!canUnquote(value)) { 195 | value = `${quote}${value}${quote}`; 196 | } 197 | 198 | let flag = f; 199 | 200 | if (!flag) { 201 | flag = ""; 202 | } 203 | 204 | if (flag && !value.startsWith(quote)) { 205 | flag = ` ${flag}`; 206 | } 207 | 208 | return `[${att}${con}${value}${flag}]`; 209 | }; 210 | 211 | // Remove white spaces from string 212 | const removeWhiteSpaces = string => string.replace(re.whiteSpaces, ""); 213 | 214 | // Remove white spaces from both ends of `:not()` 215 | const trimNegationFunction = (m, not) => `:not(${not.trim()})`; 216 | 217 | // Remove white spaces around `>`, `+`, and `~`, but not `\>`, `\+`, and `\~` 218 | const trimSelectorCombinator = (m, combinator, backslash) => { 219 | if (backslash) { 220 | return ` ${combinator} `; 221 | } 222 | 223 | return combinator; 224 | }; 225 | 226 | // Wring selector of ruleset 227 | const wringSelector = selector => 228 | selector 229 | .replace(re.whiteSpaces, " ") 230 | .replace(re.selectorAtt, unquoteAttributeSelector) 231 | .replace(re.selectorFunctions, removeWhiteSpaces) 232 | .replace(re.selectorNegationFunction, trimNegationFunction) 233 | .replace(re.selectorCombinators, trimSelectorCombinator) 234 | .replace(re.selectorPseudoElements, "$1") 235 | .replace(re.selectorVerboseUniversal, "$1"); 236 | 237 | // Check keyframe is valid or not 238 | const isValidKeyframe = k => { 239 | if (k === "from" || k === "to") { 240 | return true; 241 | } 242 | 243 | const keyframe = parseFloat(k); 244 | 245 | if (!isNaN(keyframe) && keyframe >= 0 && keyframe <= 100) { 246 | return true; 247 | } 248 | 249 | return false; 250 | }; 251 | 252 | // Unique array element 253 | const uniqueArray = array => { 254 | const l = array.length; 255 | const result = []; 256 | 257 | for (let i = 0; i < l; i = i + 1) { 258 | const value = array[i]; 259 | 260 | if (result.indexOf(value) < 0) { 261 | result.push(value); 262 | } 263 | } 264 | 265 | return result; 266 | }; 267 | 268 | // Remove duplicate declaration 269 | const removeDuplicateDeclaration = (decls, decl) => { 270 | const d = `${decl.raws.before}${decl.prop}${decl.raws.between}${decl.value}`; 271 | 272 | if (decls.hasOwnProperty(d)) { 273 | decls[d].remove(); 274 | } 275 | 276 | decls[d] = decl; 277 | }; 278 | 279 | // Check required `@font-face` descriptor or not 280 | const isRequiredFontFaceDescriptor = decl => { 281 | const { prop } = decl; 282 | 283 | return prop === "src" || prop === "font-family"; 284 | }; 285 | 286 | // Remove `@font-face` descriptor with default value 287 | const removeDefaultFontFaceDescriptor = decl => { 288 | const { prop, value } = decl; 289 | 290 | if ( 291 | (re.descriptorFontFace.test(prop) && value === "normal") || 292 | (prop === "unicode-range" && re.unicodeRangeDefault.test(value)) || 293 | `${prop}${value}` === "font-weight400" 294 | ) { 295 | decl.remove(); 296 | } 297 | }; 298 | 299 | // Quote `@import` URL 300 | const quoteImportURL = (m, quote, url) => { 301 | const newQuote = setQuote(quote); 302 | 303 | return `${newQuote}${url}${newQuote}`; 304 | }; 305 | 306 | // Quote `@namespace` URL 307 | const quoteNamespaceURL = (param, index, params) => { 308 | if (param !== params[params.length - 1]) { 309 | return param; 310 | } 311 | 312 | const newParam = param.replace(re.quotedString, "$2"); 313 | const quote = setQuote(RegExp.$1); 314 | 315 | return `${quote}${newParam}${quote}`; 316 | }; 317 | 318 | // Wring comment 319 | const wringComment = (removeAllComments, comment) => { 320 | if ( 321 | (removeAllComments || comment.text.indexOf("!") !== 0) && 322 | !isSourceMapAnnotation(comment) 323 | ) { 324 | comment.remove(); 325 | 326 | return; 327 | } 328 | 329 | comment.raws.before = ""; 330 | }; 331 | 332 | // Wring declaration 333 | const wringDecl = (preserveHacks, decl) => { 334 | const { prop } = decl; 335 | 336 | let { before, between } = decl.raws; 337 | let { value } = decl; 338 | 339 | if (!prop.match(re.validProp)) { 340 | decl.remove(); 341 | 342 | return; 343 | } 344 | 345 | if ( 346 | !preserveHacks && 347 | ((before && before.match(re.hackSignProp) !== null) || 348 | (between && between.match(re.hackPropComment) !== null)) 349 | ) { 350 | decl.remove(); 351 | 352 | return; 353 | } 354 | 355 | if (preserveHacks && before) { 356 | before = before.replace(re.semicolons, "").replace(re.whiteSpaces, ""); 357 | } else { 358 | before = ""; 359 | } 360 | 361 | decl.raws.before = before; 362 | 363 | if (preserveHacks && between) { 364 | between = between.replace(re.whiteSpaces, ""); 365 | } else { 366 | between = ":"; 367 | } 368 | 369 | decl.raws.between = between; 370 | 371 | if (decl.important) { 372 | decl.raws.important = "!important"; 373 | } 374 | 375 | if (decl.raws.value) { 376 | decl.raws.value = decl.raws.value.raw.trim(); 377 | } 378 | 379 | if (prop === "content") { 380 | return; 381 | } 382 | 383 | if (prop === "font-family") { 384 | decl.value = list 385 | .comma(value) 386 | .map(unquoteFontFamily) 387 | .join(","); 388 | 389 | return; 390 | } 391 | 392 | let values = list.comma(value); 393 | 394 | value = values.map(wringValue.bind(null, preserveHacks, prop)).join(","); 395 | 396 | if (re.propertyMultipleValues.test(prop)) { 397 | values = list.space(value); 398 | 399 | if (values.length === 4 && values[1] === values[3]) { 400 | values.splice(3, 1); 401 | } 402 | 403 | if (values.length === 3 && values[0] === values[2]) { 404 | values.splice(2, 1); 405 | } 406 | 407 | if (values.length === 2 && values[0] === values[1]) { 408 | values.splice(1, 1); 409 | } 410 | 411 | value = values.join(" "); 412 | } 413 | 414 | if (prop === "font-weight") { 415 | if (value === "normal") { 416 | value = "400"; 417 | } else if (value === "bold") { 418 | value = "700"; 419 | } 420 | } 421 | 422 | decl.value = value; 423 | }; 424 | 425 | // Wring declaration like string 426 | const wringDeclLike = (m, prop, value) => { 427 | const decl = postcss.decl({ 428 | prop: prop, 429 | value: value 430 | }); 431 | 432 | wringDecl.call(null, false, decl); 433 | 434 | return `(${decl.toString()})`; 435 | }; 436 | 437 | // Wring ruleset 438 | const wringRule = rule => { 439 | rule.raws.before = ""; 440 | rule.raws.between = ""; 441 | rule.raws.semicolon = false; 442 | rule.raws.after = ""; 443 | 444 | if (rule.nodes.length === 0 || rule.selector === "") { 445 | rule.remove(); 446 | 447 | return; 448 | } 449 | 450 | const { parent } = rule; 451 | let selectors = rule.selectors.map(wringSelector); 452 | 453 | if (parent.type === "atrule" && parent.name === "keyframes") { 454 | selectors = selectors.filter(isValidKeyframe); 455 | 456 | if (selectors.length === 0) { 457 | rule.remove(); 458 | 459 | return; 460 | } 461 | } 462 | 463 | rule.selector = uniqueArray(selectors).join(","); 464 | const decls = {}; 465 | 466 | rule.each(removeDuplicateDeclaration.bind(null, decls)); 467 | }; 468 | 469 | // Filter at-rule 470 | const filterAtRule = (flag, rule) => { 471 | const { name, type } = rule; 472 | 473 | if (type === "comment") { 474 | return; 475 | } 476 | 477 | if (type !== "atrule" || (name !== "charset" && name !== "import")) { 478 | flag.filter = true; 479 | 480 | return; 481 | } 482 | 483 | if (name === "charset" && !flag.charset) { 484 | flag.charset = true; 485 | 486 | return; 487 | } 488 | 489 | if (flag.filter || (name === "charset" && flag.charset)) { 490 | rule.remove(); 491 | } 492 | }; 493 | 494 | // Wring at-rule 495 | const wringAtRule = atRule => { 496 | atRule.raws.before = ""; 497 | atRule.raws.afterName = " "; 498 | atRule.raws.between = ""; 499 | atRule.raws.semicolon = false; 500 | atRule.raws.after = ""; 501 | 502 | if (!atRule.params) { 503 | atRule.params = ""; 504 | } 505 | 506 | if (atRule.name === "charset") { 507 | return; 508 | } 509 | 510 | if (atRule.name === "font-face") { 511 | if (atRule.nodes.filter(isRequiredFontFaceDescriptor).length < 2) { 512 | atRule.remove(); 513 | 514 | return; 515 | } 516 | 517 | atRule.each(removeDefaultFontFaceDescriptor); 518 | } 519 | 520 | if (atRule.nodes && atRule.nodes.length === 0) { 521 | atRule.remove(); 522 | 523 | return; 524 | } 525 | 526 | let params = atRule.params 527 | .replace(re.whiteSpaces, " ") 528 | .replace(re.whiteSpacesAfterSymbol, "$1") 529 | .replace(re.whiteSpacesBeforeSymbol, "$1"); 530 | 531 | if (atRule.name === "import") { 532 | params = params 533 | .replace(re.urlFunction, "$1$2") 534 | .replace(re.quotedString, quoteImportURL); 535 | } 536 | 537 | if (atRule.name === "namespace") { 538 | params = list 539 | .space(params.replace(re.urlFunction, "$1$2")) 540 | .map(quoteNamespaceURL) 541 | .join(""); 542 | } 543 | 544 | if (atRule.name === "keyframes") { 545 | params = params.replace(re.quotedString, "$2"); 546 | } 547 | 548 | if (atRule.name === "supports") { 549 | params = params.replace(re.declInParentheses, wringDeclLike); 550 | } 551 | 552 | atRule.params = params; 553 | 554 | if ( 555 | atRule.params === "" || 556 | params.indexOf("(") === 0 || 557 | params.indexOf('"') === 0 || 558 | params.indexOf("'") === 0 559 | ) { 560 | atRule.raws.afterName = ""; 561 | } 562 | }; 563 | 564 | module.exports = postcss.plugin(pkg.name, options => { 565 | const opts = { 566 | preserveHacks: false, 567 | removeAllComments: false, 568 | ...options 569 | }; 570 | 571 | return css => { 572 | css.raws.semicolon = false; 573 | css.raws.after = ""; 574 | css.walkComments(wringComment.bind(null, opts.removeAllComments)); 575 | css.walkDecls(wringDecl.bind(null, opts.preserveHacks)); 576 | css.walkRules(wringRule); 577 | css.each( 578 | filterAtRule.bind(null, { 579 | charset: false, 580 | filter: false 581 | }) 582 | ); 583 | css.walkAtRules(wringAtRule); 584 | }; 585 | }); 586 | 587 | module.exports.wring = function(css, opts) { 588 | return postcss([this(opts)]).process(css, opts); 589 | }; 590 | 591 | /* eslint no-param-reassign: [ "error", { "props": true, "ignorePropertyModificationsFor": [ "decls", "comment", "decl", "rule", "flag", "atRule", "css" ] } ] */ 592 | -------------------------------------------------------------------------------- /lib/color.js: -------------------------------------------------------------------------------- 1 | const color = exports; 2 | 3 | color.shortest = { 4 | "#f00": "red", 5 | "#000080": "navy", 6 | "#008000": "green", 7 | "#008080": "teal", 8 | "#4b0082": "indigo", 9 | "#800000": "maroon", 10 | "#800080": "purple", 11 | "#808000": "olive", 12 | "#808080": "gray", 13 | "#a0522d": "sienna", 14 | "#a52a2a": "brown", 15 | "#c0c0c0": "silver", 16 | "#cd853f": "peru", 17 | "#d2b48c": "tan", 18 | "#da70d6": "orchid", 19 | "#dda0dd": "plum", 20 | "#ee82ee": "violet", 21 | "#f0e68c": "khaki", 22 | "#f0ffff": "azure", 23 | "#f5deb3": "wheat", 24 | "#f5f5dc": "beige", 25 | "#fa8072": "salmon", 26 | "#faf0e6": "linen", 27 | "#ff6347": "tomato", 28 | "#ff7f50": "coral", 29 | "#ffa500": "orange", 30 | "#ffc0cb": "pink", 31 | "#ffd700": "gold", 32 | "#ffe4c4": "bisque", 33 | "#fffafa": "snow", 34 | "#fffff0": "ivory" 35 | }; 36 | -------------------------------------------------------------------------------- /lib/regexp.js: -------------------------------------------------------------------------------- 1 | const re = exports; 2 | 3 | // 123grad 4 | re.angle = /(^|\s|\(|,)([1-9]\d*)(grad)/gi; 5 | 6 | // calc(1 + 1) 7 | re.calcFunction = /(^|\s|\(|,)calc\((([^()]*(\([^()]*\))?)*)\)/; 8 | 9 | // rgb(0, 0, 0), hsl(0, 0%, 0%), rgba(0, 0, 0, 1), hsla(0, 0%, 0%, 1) 10 | re.colorFunction = /(^|\s|\(|,)((?:rgb|hsl)a?\(.*?\))/gi; 11 | 12 | // #000, #000000 13 | re.colorHex = /(^|\s|\(|,)#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])/gi; 14 | 15 | // rgba(0,0,0,0) 16 | re.colorTransparent = /(^|\s|\(|,)rgba\(0,0,0,0\)/gi; 17 | 18 | // 0.1 19 | re.decimalWithZeros = /(^|\s|\(|,)(-)?0*([1-9]\d*)?\.(\d*[1-9])0*/g; 20 | 21 | // (top: 0) 22 | re.declInParentheses = /\(([-a-zA-Z]+):(([^()]*(\([^()]*\))?)*)\)/g; 23 | 24 | // font-style, font-stretch, font-variant, font-feature-settings 25 | re.descriptorFontFace = /^font-(style|stretch|variant|feature-settings)$/i; 26 | 27 | // \(, \) 28 | re.escapedBraces = /\\([()])/g; 29 | 30 | // 1000Hz 31 | re.freqEndsWithThreeZeros = /(^|\s|\(|,)(\d+)000Hz/gi; 32 | 33 | // /**/, /*\**/ 34 | re.hackPropComment = /\/\*(\\\*)?\*\//; 35 | 36 | // _, * 37 | re.hackSignProp = /[_*]$/; 38 | 39 | // 0 40 | re.number = /\d/; 41 | 42 | // 01 43 | re.numberLeadingZeros = /(^|\s|\(|,)0+([1-9]\d*(\.\d+)?)/g; 44 | 45 | // margin, padding, border-color, border-radius, border-spacing, border-style, border-width 46 | re.propertyMultipleValues = /^(margin|padding|border-(color|radius|spacing|style|width))$/i; 47 | 48 | // "...", '...' 49 | re.quotedString = /("|')?(.*)\1/; 50 | 51 | // [class = "foo"], [class ~= "foo"], [class |= "foo"], [class ^= "foo"], [class $= "foo"], [class *= "foo"] 52 | re.selectorAtt = /\[\s*(.*?)(?:\s*([~|^$*]?=)\s*(("|').*\4|.*?[^\\]))?\s*(i)?\]/g; 53 | 54 | // p > a, p + a, p ~ a 55 | re.selectorCombinators = /\s+((\\?)[>+~])\s+/g; 56 | 57 | // :lang(ja), :nth-child(0), nth-last-child(0), nth-of-type(1n), nth-last-of-type(1n) 58 | re.selectorFunctions = /:(lang|nth-(?:last-)?(?:child|of-type))\((.*?[^\\])\)/gi; 59 | 60 | // :not(a) 61 | re.selectorNegationFunction = /:not\((([^()]*(\([^()]*\))?)*)\)/gi; 62 | 63 | // ::before, ::after, ::first-line, ::first-letter 64 | re.selectorPseudoElements = /(:)\1(?=after|before|first-(letter|line))/g; 65 | 66 | // *#foo, *.bar, *:link, *[baz] 67 | re.selectorVerboseUniversal = /\*([#.:[])/g; 68 | 69 | // ; 70 | re.semicolons = /;/g; 71 | 72 | // ident-ifi-ers 73 | re.sequenceOfIdentifiers = /^[\w-]+$/; 74 | 75 | // 3210ms 76 | re.timeEndsWithZero = /(^|\s|\(|,)(\d{2,})0ms/gi; 77 | 78 | // u0-10ffff, u000000-10ffff 79 | re.unicodeRangeDefault = /u\+0{1,6}-10ffff/i; 80 | 81 | // url(a) 82 | re.urlFunction = /(^|\s|\(|,)url\((.*?[^\\])\)(?=$|\s|\)|,)/gi; 83 | 84 | // , (, ), ", ' 85 | re.urlNeedQuote = /[\s()"']/; 86 | 87 | // --valid_prop-name 88 | re.validProp = /^-{0,2}[^!-,./:-@[-^`{-~]+$/i; 89 | 90 | // var(--custom-prop-name) 91 | re.varFunction = /^var\([\w-]+\)$/i; 92 | 93 | // , \t, \r, \n 94 | re.whiteSpaces = /\s+/g; 95 | re.whiteSpacesAfterSymbol = /([(,:])\s/g; 96 | re.whiteSpacesBeforeSymbol = /\s([),:])/g; 97 | re.whiteSpacesBothEndsOfSymbol = /\s([*/])\s/g; 98 | 99 | // 0%, 0ch, 0cm, 0deg, 0dpcm, 0dpi, 0dppx, 0em, 0ex, 0grad, 0Hz, 0in, 0kHz, 0mm, 100 | // 0ms, 0pc, 0pt, 0px, 0rad, 0rem, 0s, 0turn, 0vh, 0vmax, 0vmin, 0vw 101 | re.zeroValueUnit = /(^|\s|\(|,)(0)(%|ch|cm|deg|dpcm|dpi|dppx|em|ex|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vw)/gi; 102 | -------------------------------------------------------------------------------- /lib/unit.js: -------------------------------------------------------------------------------- 1 | const unit = exports; 2 | 3 | unit.forZero = { 4 | deg: "deg", 5 | dpcm: "dpi", 6 | dpi: "dpi", 7 | dppx: "dpi", 8 | grad: "deg", 9 | Hz: "Hz", 10 | kHz: "Hz", 11 | ms: "s", 12 | rad: "deg", 13 | s: "s", 14 | turn: "deg" 15 | }; 16 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "csswring", 3 | "version": "7.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "ajv": { 8 | "version": "5.5.2", 9 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 10 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", 11 | "dev": true, 12 | "requires": { 13 | "co": "^4.6.0", 14 | "fast-deep-equal": "^1.0.0", 15 | "fast-json-stable-stringify": "^2.0.0", 16 | "json-schema-traverse": "^0.3.0" 17 | } 18 | }, 19 | "ansi-regex": { 20 | "version": "2.1.1", 21 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 22 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 23 | "dev": true 24 | }, 25 | "argparse": { 26 | "version": "1.0.10", 27 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 28 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 29 | "dev": true, 30 | "requires": { 31 | "sprintf-js": "~1.0.2" 32 | } 33 | }, 34 | "asn1": { 35 | "version": "0.2.3", 36 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 37 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", 38 | "dev": true 39 | }, 40 | "assert-plus": { 41 | "version": "1.0.0", 42 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 43 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 44 | "dev": true 45 | }, 46 | "asynckit": { 47 | "version": "0.4.0", 48 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 49 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 50 | "dev": true 51 | }, 52 | "aws-sign2": { 53 | "version": "0.7.0", 54 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 55 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 56 | "dev": true 57 | }, 58 | "aws4": { 59 | "version": "1.7.0", 60 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", 61 | "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", 62 | "dev": true 63 | }, 64 | "balanced-match": { 65 | "version": "1.0.0", 66 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 67 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 68 | "dev": true 69 | }, 70 | "bcrypt-pbkdf": { 71 | "version": "1.0.2", 72 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 73 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 74 | "dev": true, 75 | "optional": true, 76 | "requires": { 77 | "tweetnacl": "^0.14.3" 78 | } 79 | }, 80 | "bind-obj-methods": { 81 | "version": "2.0.0", 82 | "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-2.0.0.tgz", 83 | "integrity": "sha512-3/qRXczDi2Cdbz6jE+W3IflJOutRVica8frpBn14de1mBOkzDo+6tY33kNhvkw54Kn3PzRRD2VnGbGPcTAk4sw==", 84 | "dev": true 85 | }, 86 | "bluebird": { 87 | "version": "3.5.1", 88 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", 89 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", 90 | "dev": true 91 | }, 92 | "brace-expansion": { 93 | "version": "1.1.11", 94 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 95 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 96 | "dev": true, 97 | "requires": { 98 | "balanced-match": "^1.0.0", 99 | "concat-map": "0.0.1" 100 | } 101 | }, 102 | "buffer-from": { 103 | "version": "1.1.0", 104 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", 105 | "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", 106 | "dev": true 107 | }, 108 | "caseless": { 109 | "version": "0.12.0", 110 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 111 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 112 | "dev": true 113 | }, 114 | "clean-yaml-object": { 115 | "version": "0.1.0", 116 | "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", 117 | "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=", 118 | "dev": true 119 | }, 120 | "co": { 121 | "version": "4.6.0", 122 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 123 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 124 | "dev": true 125 | }, 126 | "color-convert": { 127 | "version": "1.9.2", 128 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", 129 | "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", 130 | "requires": { 131 | "color-name": "1.1.1" 132 | } 133 | }, 134 | "color-name": { 135 | "version": "1.1.1", 136 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", 137 | "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=" 138 | }, 139 | "color-support": { 140 | "version": "1.1.3", 141 | "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", 142 | "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", 143 | "dev": true 144 | }, 145 | "combined-stream": { 146 | "version": "1.0.6", 147 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", 148 | "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", 149 | "dev": true, 150 | "requires": { 151 | "delayed-stream": "~1.0.0" 152 | } 153 | }, 154 | "concat-map": { 155 | "version": "0.0.1", 156 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 157 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 158 | "dev": true 159 | }, 160 | "core-util-is": { 161 | "version": "1.0.2", 162 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 163 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 164 | "dev": true 165 | }, 166 | "coveralls": { 167 | "version": "3.0.2", 168 | "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.2.tgz", 169 | "integrity": "sha512-Tv0LKe/MkBOilH2v7WBiTBdudg2ChfGbdXafc/s330djpF3zKOmuehTeRwjXWc7pzfj9FrDUTA7tEx6Div8NFw==", 170 | "dev": true, 171 | "requires": { 172 | "growl": "~> 1.10.0", 173 | "js-yaml": "^3.11.0", 174 | "lcov-parse": "^0.0.10", 175 | "log-driver": "^1.2.7", 176 | "minimist": "^1.2.0", 177 | "request": "^2.85.0" 178 | } 179 | }, 180 | "cross-spawn": { 181 | "version": "4.0.2", 182 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", 183 | "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", 184 | "dev": true, 185 | "requires": { 186 | "lru-cache": "^4.0.1", 187 | "which": "^1.2.9" 188 | } 189 | }, 190 | "dashdash": { 191 | "version": "1.14.1", 192 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 193 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 194 | "dev": true, 195 | "requires": { 196 | "assert-plus": "^1.0.0" 197 | } 198 | }, 199 | "debug": { 200 | "version": "2.6.9", 201 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 202 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 203 | "dev": true, 204 | "requires": { 205 | "ms": "2.0.0" 206 | } 207 | }, 208 | "delayed-stream": { 209 | "version": "1.0.0", 210 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 211 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 212 | "dev": true 213 | }, 214 | "diff": { 215 | "version": "1.4.0", 216 | "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", 217 | "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", 218 | "dev": true 219 | }, 220 | "ecc-jsbn": { 221 | "version": "0.1.1", 222 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 223 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 224 | "dev": true, 225 | "optional": true, 226 | "requires": { 227 | "jsbn": "~0.1.0" 228 | } 229 | }, 230 | "ejs": { 231 | "version": "2.6.1", 232 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", 233 | "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", 234 | "dev": true 235 | }, 236 | "escape-string-regexp": { 237 | "version": "1.0.5", 238 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 239 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 240 | }, 241 | "esprima": { 242 | "version": "4.0.1", 243 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 244 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 245 | "dev": true 246 | }, 247 | "events-to-array": { 248 | "version": "1.1.2", 249 | "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", 250 | "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", 251 | "dev": true 252 | }, 253 | "extend": { 254 | "version": "3.0.1", 255 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 256 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", 257 | "dev": true 258 | }, 259 | "extsprintf": { 260 | "version": "1.3.0", 261 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 262 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 263 | "dev": true 264 | }, 265 | "fast-deep-equal": { 266 | "version": "1.1.0", 267 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", 268 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", 269 | "dev": true 270 | }, 271 | "fast-json-stable-stringify": { 272 | "version": "2.0.0", 273 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 274 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 275 | "dev": true 276 | }, 277 | "foreground-child": { 278 | "version": "1.5.6", 279 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", 280 | "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", 281 | "dev": true, 282 | "requires": { 283 | "cross-spawn": "^4", 284 | "signal-exit": "^3.0.0" 285 | } 286 | }, 287 | "forever-agent": { 288 | "version": "0.6.1", 289 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 290 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 291 | "dev": true 292 | }, 293 | "form-data": { 294 | "version": "2.3.2", 295 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", 296 | "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", 297 | "dev": true, 298 | "requires": { 299 | "asynckit": "^0.4.0", 300 | "combined-stream": "1.0.6", 301 | "mime-types": "^2.1.12" 302 | } 303 | }, 304 | "fs-exists-cached": { 305 | "version": "1.0.0", 306 | "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", 307 | "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=", 308 | "dev": true 309 | }, 310 | "fs.realpath": { 311 | "version": "1.0.0", 312 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 313 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 314 | "dev": true 315 | }, 316 | "function-loop": { 317 | "version": "1.0.1", 318 | "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.1.tgz", 319 | "integrity": "sha1-gHa7MF6OajzO7ikgdl8zDRkPNAw=", 320 | "dev": true 321 | }, 322 | "getpass": { 323 | "version": "0.1.7", 324 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 325 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 326 | "dev": true, 327 | "requires": { 328 | "assert-plus": "^1.0.0" 329 | } 330 | }, 331 | "glob": { 332 | "version": "7.1.2", 333 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 334 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 335 | "dev": true, 336 | "requires": { 337 | "fs.realpath": "^1.0.0", 338 | "inflight": "^1.0.4", 339 | "inherits": "2", 340 | "minimatch": "^3.0.4", 341 | "once": "^1.3.0", 342 | "path-is-absolute": "^1.0.0" 343 | } 344 | }, 345 | "graceful-fs": { 346 | "version": "4.1.11", 347 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 348 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 349 | "dev": true 350 | }, 351 | "growl": { 352 | "version": "1.10.5", 353 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 354 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 355 | "dev": true 356 | }, 357 | "har-schema": { 358 | "version": "2.0.0", 359 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 360 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 361 | "dev": true 362 | }, 363 | "har-validator": { 364 | "version": "5.0.3", 365 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 366 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", 367 | "dev": true, 368 | "requires": { 369 | "ajv": "^5.1.0", 370 | "har-schema": "^2.0.0" 371 | } 372 | }, 373 | "has-flag": { 374 | "version": "3.0.0", 375 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 376 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 377 | }, 378 | "http-signature": { 379 | "version": "1.2.0", 380 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 381 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 382 | "dev": true, 383 | "requires": { 384 | "assert-plus": "^1.0.0", 385 | "jsprim": "^1.2.2", 386 | "sshpk": "^1.7.0" 387 | } 388 | }, 389 | "imurmurhash": { 390 | "version": "0.1.4", 391 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 392 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 393 | "dev": true 394 | }, 395 | "inflight": { 396 | "version": "1.0.6", 397 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 398 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 399 | "dev": true, 400 | "requires": { 401 | "once": "^1.3.0", 402 | "wrappy": "1" 403 | } 404 | }, 405 | "inherits": { 406 | "version": "2.0.3", 407 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 408 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 409 | "dev": true 410 | }, 411 | "is-typedarray": { 412 | "version": "1.0.0", 413 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 414 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 415 | "dev": true 416 | }, 417 | "isarray": { 418 | "version": "1.0.0", 419 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 420 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 421 | "dev": true, 422 | "optional": true 423 | }, 424 | "isexe": { 425 | "version": "2.0.0", 426 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 427 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 428 | "dev": true 429 | }, 430 | "isstream": { 431 | "version": "0.1.2", 432 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 433 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 434 | "dev": true 435 | }, 436 | "js-yaml": { 437 | "version": "3.12.0", 438 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", 439 | "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", 440 | "dev": true, 441 | "requires": { 442 | "argparse": "^1.0.7", 443 | "esprima": "^4.0.0" 444 | } 445 | }, 446 | "jsbn": { 447 | "version": "0.1.1", 448 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 449 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 450 | "dev": true, 451 | "optional": true 452 | }, 453 | "json-schema": { 454 | "version": "0.2.3", 455 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 456 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 457 | "dev": true 458 | }, 459 | "json-schema-traverse": { 460 | "version": "0.3.1", 461 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 462 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", 463 | "dev": true 464 | }, 465 | "json-stringify-safe": { 466 | "version": "5.0.1", 467 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 468 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 469 | "dev": true 470 | }, 471 | "jsprim": { 472 | "version": "1.4.1", 473 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 474 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 475 | "dev": true, 476 | "requires": { 477 | "assert-plus": "1.0.0", 478 | "extsprintf": "1.3.0", 479 | "json-schema": "0.2.3", 480 | "verror": "1.10.0" 481 | } 482 | }, 483 | "lcov-parse": { 484 | "version": "0.0.10", 485 | "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", 486 | "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", 487 | "dev": true 488 | }, 489 | "log-driver": { 490 | "version": "1.2.7", 491 | "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", 492 | "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", 493 | "dev": true 494 | }, 495 | "lru-cache": { 496 | "version": "4.1.3", 497 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", 498 | "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", 499 | "dev": true, 500 | "requires": { 501 | "pseudomap": "^1.0.2", 502 | "yallist": "^2.1.2" 503 | } 504 | }, 505 | "mime-db": { 506 | "version": "1.35.0", 507 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", 508 | "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", 509 | "dev": true 510 | }, 511 | "mime-types": { 512 | "version": "2.1.19", 513 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", 514 | "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", 515 | "dev": true, 516 | "requires": { 517 | "mime-db": "~1.35.0" 518 | } 519 | }, 520 | "minimatch": { 521 | "version": "3.0.4", 522 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 523 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 524 | "dev": true, 525 | "requires": { 526 | "brace-expansion": "^1.1.7" 527 | } 528 | }, 529 | "minimist": { 530 | "version": "1.2.0", 531 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 532 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 533 | }, 534 | "minipass": { 535 | "version": "2.3.3", 536 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.3.tgz", 537 | "integrity": "sha512-/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw==", 538 | "dev": true, 539 | "requires": { 540 | "safe-buffer": "^5.1.2", 541 | "yallist": "^3.0.0" 542 | }, 543 | "dependencies": { 544 | "yallist": { 545 | "version": "3.0.2", 546 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", 547 | "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", 548 | "dev": true 549 | } 550 | } 551 | }, 552 | "mkdirp": { 553 | "version": "0.5.1", 554 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 555 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 556 | "dev": true, 557 | "requires": { 558 | "minimist": "0.0.8" 559 | }, 560 | "dependencies": { 561 | "minimist": { 562 | "version": "0.0.8", 563 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 564 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 565 | "dev": true 566 | } 567 | } 568 | }, 569 | "ms": { 570 | "version": "2.0.0", 571 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 572 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 573 | "dev": true 574 | }, 575 | "nodeunit": { 576 | "version": "0.11.3", 577 | "resolved": "https://registry.npmjs.org/nodeunit/-/nodeunit-0.11.3.tgz", 578 | "integrity": "sha512-gDNxrDWpx07BxYNO/jn1UrGI1vNhDQZrIFphbHMcTCDc5mrrqQBWfQMXPHJ5WSgbFwD1D6bv4HOsqtTrPG03AA==", 579 | "dev": true, 580 | "requires": { 581 | "ejs": "^2.5.2", 582 | "tap": "^12.0.1" 583 | } 584 | }, 585 | "nyc": { 586 | "version": "11.9.0", 587 | "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.9.0.tgz", 588 | "integrity": "sha512-w8OdJAhXL5izerzZMdqzYKMj/pgHJyY3qEPYBjLLxrhcVoHEY9pU5ENIiZyCgG9OR7x3VcUMoD40o6PtVpfR4g==", 589 | "dev": true, 590 | "requires": { 591 | "archy": "^1.0.0", 592 | "arrify": "^1.0.1", 593 | "caching-transform": "^1.0.0", 594 | "convert-source-map": "^1.5.1", 595 | "debug-log": "^1.0.1", 596 | "default-require-extensions": "^1.0.0", 597 | "find-cache-dir": "^0.1.1", 598 | "find-up": "^2.1.0", 599 | "foreground-child": "^1.5.3", 600 | "glob": "^7.0.6", 601 | "istanbul-lib-coverage": "^1.1.2", 602 | "istanbul-lib-hook": "^1.1.0", 603 | "istanbul-lib-instrument": "^1.10.0", 604 | "istanbul-lib-report": "^1.1.3", 605 | "istanbul-lib-source-maps": "^1.2.3", 606 | "istanbul-reports": "^1.4.0", 607 | "md5-hex": "^1.2.0", 608 | "merge-source-map": "^1.1.0", 609 | "micromatch": "^3.1.10", 610 | "mkdirp": "^0.5.0", 611 | "resolve-from": "^2.0.0", 612 | "rimraf": "^2.6.2", 613 | "signal-exit": "^3.0.1", 614 | "spawn-wrap": "^1.4.2", 615 | "test-exclude": "^4.2.0", 616 | "yargs": "11.1.0", 617 | "yargs-parser": "^8.0.0" 618 | }, 619 | "dependencies": { 620 | "align-text": { 621 | "version": "0.1.4", 622 | "bundled": true, 623 | "dev": true, 624 | "requires": { 625 | "kind-of": "^3.0.2", 626 | "longest": "^1.0.1", 627 | "repeat-string": "^1.5.2" 628 | } 629 | }, 630 | "amdefine": { 631 | "version": "1.0.1", 632 | "bundled": true, 633 | "dev": true 634 | }, 635 | "ansi-regex": { 636 | "version": "2.1.1", 637 | "bundled": true, 638 | "dev": true 639 | }, 640 | "ansi-styles": { 641 | "version": "2.2.1", 642 | "bundled": true, 643 | "dev": true 644 | }, 645 | "append-transform": { 646 | "version": "0.4.0", 647 | "bundled": true, 648 | "dev": true, 649 | "requires": { 650 | "default-require-extensions": "^1.0.0" 651 | } 652 | }, 653 | "archy": { 654 | "version": "1.0.0", 655 | "bundled": true, 656 | "dev": true 657 | }, 658 | "arr-diff": { 659 | "version": "4.0.0", 660 | "bundled": true, 661 | "dev": true 662 | }, 663 | "arr-flatten": { 664 | "version": "1.1.0", 665 | "bundled": true, 666 | "dev": true 667 | }, 668 | "arr-union": { 669 | "version": "3.1.0", 670 | "bundled": true, 671 | "dev": true 672 | }, 673 | "array-unique": { 674 | "version": "0.3.2", 675 | "bundled": true, 676 | "dev": true 677 | }, 678 | "arrify": { 679 | "version": "1.0.1", 680 | "bundled": true, 681 | "dev": true 682 | }, 683 | "assign-symbols": { 684 | "version": "1.0.0", 685 | "bundled": true, 686 | "dev": true 687 | }, 688 | "async": { 689 | "version": "1.5.2", 690 | "bundled": true, 691 | "dev": true 692 | }, 693 | "atob": { 694 | "version": "2.1.1", 695 | "bundled": true, 696 | "dev": true 697 | }, 698 | "babel-code-frame": { 699 | "version": "6.26.0", 700 | "bundled": true, 701 | "dev": true, 702 | "requires": { 703 | "chalk": "^1.1.3", 704 | "esutils": "^2.0.2", 705 | "js-tokens": "^3.0.2" 706 | } 707 | }, 708 | "babel-generator": { 709 | "version": "6.26.1", 710 | "bundled": true, 711 | "dev": true, 712 | "requires": { 713 | "babel-messages": "^6.23.0", 714 | "babel-runtime": "^6.26.0", 715 | "babel-types": "^6.26.0", 716 | "detect-indent": "^4.0.0", 717 | "jsesc": "^1.3.0", 718 | "lodash": "^4.17.4", 719 | "source-map": "^0.5.7", 720 | "trim-right": "^1.0.1" 721 | } 722 | }, 723 | "babel-messages": { 724 | "version": "6.23.0", 725 | "bundled": true, 726 | "dev": true, 727 | "requires": { 728 | "babel-runtime": "^6.22.0" 729 | } 730 | }, 731 | "babel-runtime": { 732 | "version": "6.26.0", 733 | "bundled": true, 734 | "dev": true, 735 | "requires": { 736 | "core-js": "^2.4.0", 737 | "regenerator-runtime": "^0.11.0" 738 | } 739 | }, 740 | "babel-template": { 741 | "version": "6.26.0", 742 | "bundled": true, 743 | "dev": true, 744 | "requires": { 745 | "babel-runtime": "^6.26.0", 746 | "babel-traverse": "^6.26.0", 747 | "babel-types": "^6.26.0", 748 | "babylon": "^6.18.0", 749 | "lodash": "^4.17.4" 750 | } 751 | }, 752 | "babel-traverse": { 753 | "version": "6.26.0", 754 | "bundled": true, 755 | "dev": true, 756 | "requires": { 757 | "babel-code-frame": "^6.26.0", 758 | "babel-messages": "^6.23.0", 759 | "babel-runtime": "^6.26.0", 760 | "babel-types": "^6.26.0", 761 | "babylon": "^6.18.0", 762 | "debug": "^2.6.8", 763 | "globals": "^9.18.0", 764 | "invariant": "^2.2.2", 765 | "lodash": "^4.17.4" 766 | } 767 | }, 768 | "babel-types": { 769 | "version": "6.26.0", 770 | "bundled": true, 771 | "dev": true, 772 | "requires": { 773 | "babel-runtime": "^6.26.0", 774 | "esutils": "^2.0.2", 775 | "lodash": "^4.17.4", 776 | "to-fast-properties": "^1.0.3" 777 | } 778 | }, 779 | "babylon": { 780 | "version": "6.18.0", 781 | "bundled": true, 782 | "dev": true 783 | }, 784 | "balanced-match": { 785 | "version": "1.0.0", 786 | "bundled": true, 787 | "dev": true 788 | }, 789 | "base": { 790 | "version": "0.11.2", 791 | "bundled": true, 792 | "dev": true, 793 | "requires": { 794 | "cache-base": "^1.0.1", 795 | "class-utils": "^0.3.5", 796 | "component-emitter": "^1.2.1", 797 | "define-property": "^1.0.0", 798 | "isobject": "^3.0.1", 799 | "mixin-deep": "^1.2.0", 800 | "pascalcase": "^0.1.1" 801 | }, 802 | "dependencies": { 803 | "define-property": { 804 | "version": "1.0.0", 805 | "bundled": true, 806 | "dev": true, 807 | "requires": { 808 | "is-descriptor": "^1.0.0" 809 | } 810 | }, 811 | "is-accessor-descriptor": { 812 | "version": "1.0.0", 813 | "bundled": true, 814 | "dev": true, 815 | "requires": { 816 | "kind-of": "^6.0.0" 817 | } 818 | }, 819 | "is-data-descriptor": { 820 | "version": "1.0.0", 821 | "bundled": true, 822 | "dev": true, 823 | "requires": { 824 | "kind-of": "^6.0.0" 825 | } 826 | }, 827 | "is-descriptor": { 828 | "version": "1.0.2", 829 | "bundled": true, 830 | "dev": true, 831 | "requires": { 832 | "is-accessor-descriptor": "^1.0.0", 833 | "is-data-descriptor": "^1.0.0", 834 | "kind-of": "^6.0.2" 835 | } 836 | }, 837 | "isobject": { 838 | "version": "3.0.1", 839 | "bundled": true, 840 | "dev": true 841 | }, 842 | "kind-of": { 843 | "version": "6.0.2", 844 | "bundled": true, 845 | "dev": true 846 | } 847 | } 848 | }, 849 | "brace-expansion": { 850 | "version": "1.1.11", 851 | "bundled": true, 852 | "dev": true, 853 | "requires": { 854 | "balanced-match": "^1.0.0", 855 | "concat-map": "0.0.1" 856 | } 857 | }, 858 | "braces": { 859 | "version": "2.3.2", 860 | "bundled": true, 861 | "dev": true, 862 | "requires": { 863 | "arr-flatten": "^1.1.0", 864 | "array-unique": "^0.3.2", 865 | "extend-shallow": "^2.0.1", 866 | "fill-range": "^4.0.0", 867 | "isobject": "^3.0.1", 868 | "repeat-element": "^1.1.2", 869 | "snapdragon": "^0.8.1", 870 | "snapdragon-node": "^2.0.1", 871 | "split-string": "^3.0.2", 872 | "to-regex": "^3.0.1" 873 | }, 874 | "dependencies": { 875 | "extend-shallow": { 876 | "version": "2.0.1", 877 | "bundled": true, 878 | "dev": true, 879 | "requires": { 880 | "is-extendable": "^0.1.0" 881 | } 882 | } 883 | } 884 | }, 885 | "builtin-modules": { 886 | "version": "1.1.1", 887 | "bundled": true, 888 | "dev": true 889 | }, 890 | "cache-base": { 891 | "version": "1.0.1", 892 | "bundled": true, 893 | "dev": true, 894 | "requires": { 895 | "collection-visit": "^1.0.0", 896 | "component-emitter": "^1.2.1", 897 | "get-value": "^2.0.6", 898 | "has-value": "^1.0.0", 899 | "isobject": "^3.0.1", 900 | "set-value": "^2.0.0", 901 | "to-object-path": "^0.3.0", 902 | "union-value": "^1.0.0", 903 | "unset-value": "^1.0.0" 904 | }, 905 | "dependencies": { 906 | "isobject": { 907 | "version": "3.0.1", 908 | "bundled": true, 909 | "dev": true 910 | } 911 | } 912 | }, 913 | "caching-transform": { 914 | "version": "1.0.1", 915 | "bundled": true, 916 | "dev": true, 917 | "requires": { 918 | "md5-hex": "^1.2.0", 919 | "mkdirp": "^0.5.1", 920 | "write-file-atomic": "^1.1.4" 921 | } 922 | }, 923 | "camelcase": { 924 | "version": "1.2.1", 925 | "bundled": true, 926 | "dev": true, 927 | "optional": true 928 | }, 929 | "center-align": { 930 | "version": "0.1.3", 931 | "bundled": true, 932 | "dev": true, 933 | "optional": true, 934 | "requires": { 935 | "align-text": "^0.1.3", 936 | "lazy-cache": "^1.0.3" 937 | } 938 | }, 939 | "chalk": { 940 | "version": "1.1.3", 941 | "bundled": true, 942 | "dev": true, 943 | "requires": { 944 | "ansi-styles": "^2.2.1", 945 | "escape-string-regexp": "^1.0.2", 946 | "has-ansi": "^2.0.0", 947 | "strip-ansi": "^3.0.0", 948 | "supports-color": "^2.0.0" 949 | } 950 | }, 951 | "class-utils": { 952 | "version": "0.3.6", 953 | "bundled": true, 954 | "dev": true, 955 | "requires": { 956 | "arr-union": "^3.1.0", 957 | "define-property": "^0.2.5", 958 | "isobject": "^3.0.0", 959 | "static-extend": "^0.1.1" 960 | }, 961 | "dependencies": { 962 | "define-property": { 963 | "version": "0.2.5", 964 | "bundled": true, 965 | "dev": true, 966 | "requires": { 967 | "is-descriptor": "^0.1.0" 968 | } 969 | }, 970 | "isobject": { 971 | "version": "3.0.1", 972 | "bundled": true, 973 | "dev": true 974 | } 975 | } 976 | }, 977 | "cliui": { 978 | "version": "2.1.0", 979 | "bundled": true, 980 | "dev": true, 981 | "optional": true, 982 | "requires": { 983 | "center-align": "^0.1.1", 984 | "right-align": "^0.1.1", 985 | "wordwrap": "0.0.2" 986 | }, 987 | "dependencies": { 988 | "wordwrap": { 989 | "version": "0.0.2", 990 | "bundled": true, 991 | "dev": true, 992 | "optional": true 993 | } 994 | } 995 | }, 996 | "code-point-at": { 997 | "version": "1.1.0", 998 | "bundled": true, 999 | "dev": true 1000 | }, 1001 | "collection-visit": { 1002 | "version": "1.0.0", 1003 | "bundled": true, 1004 | "dev": true, 1005 | "requires": { 1006 | "map-visit": "^1.0.0", 1007 | "object-visit": "^1.0.0" 1008 | } 1009 | }, 1010 | "commondir": { 1011 | "version": "1.0.1", 1012 | "bundled": true, 1013 | "dev": true 1014 | }, 1015 | "component-emitter": { 1016 | "version": "1.2.1", 1017 | "bundled": true, 1018 | "dev": true 1019 | }, 1020 | "concat-map": { 1021 | "version": "0.0.1", 1022 | "bundled": true, 1023 | "dev": true 1024 | }, 1025 | "convert-source-map": { 1026 | "version": "1.5.1", 1027 | "bundled": true, 1028 | "dev": true 1029 | }, 1030 | "copy-descriptor": { 1031 | "version": "0.1.1", 1032 | "bundled": true, 1033 | "dev": true 1034 | }, 1035 | "core-js": { 1036 | "version": "2.5.6", 1037 | "bundled": true, 1038 | "dev": true 1039 | }, 1040 | "cross-spawn": { 1041 | "version": "4.0.2", 1042 | "bundled": true, 1043 | "dev": true, 1044 | "requires": { 1045 | "lru-cache": "^4.0.1", 1046 | "which": "^1.2.9" 1047 | } 1048 | }, 1049 | "debug": { 1050 | "version": "2.6.9", 1051 | "bundled": true, 1052 | "dev": true, 1053 | "requires": { 1054 | "ms": "2.0.0" 1055 | } 1056 | }, 1057 | "debug-log": { 1058 | "version": "1.0.1", 1059 | "bundled": true, 1060 | "dev": true 1061 | }, 1062 | "decamelize": { 1063 | "version": "1.2.0", 1064 | "bundled": true, 1065 | "dev": true 1066 | }, 1067 | "decode-uri-component": { 1068 | "version": "0.2.0", 1069 | "bundled": true, 1070 | "dev": true 1071 | }, 1072 | "default-require-extensions": { 1073 | "version": "1.0.0", 1074 | "bundled": true, 1075 | "dev": true, 1076 | "requires": { 1077 | "strip-bom": "^2.0.0" 1078 | } 1079 | }, 1080 | "define-property": { 1081 | "version": "2.0.2", 1082 | "bundled": true, 1083 | "dev": true, 1084 | "requires": { 1085 | "is-descriptor": "^1.0.2", 1086 | "isobject": "^3.0.1" 1087 | }, 1088 | "dependencies": { 1089 | "is-accessor-descriptor": { 1090 | "version": "1.0.0", 1091 | "bundled": true, 1092 | "dev": true, 1093 | "requires": { 1094 | "kind-of": "^6.0.0" 1095 | } 1096 | }, 1097 | "is-data-descriptor": { 1098 | "version": "1.0.0", 1099 | "bundled": true, 1100 | "dev": true, 1101 | "requires": { 1102 | "kind-of": "^6.0.0" 1103 | } 1104 | }, 1105 | "is-descriptor": { 1106 | "version": "1.0.2", 1107 | "bundled": true, 1108 | "dev": true, 1109 | "requires": { 1110 | "is-accessor-descriptor": "^1.0.0", 1111 | "is-data-descriptor": "^1.0.0", 1112 | "kind-of": "^6.0.2" 1113 | } 1114 | }, 1115 | "isobject": { 1116 | "version": "3.0.1", 1117 | "bundled": true, 1118 | "dev": true 1119 | }, 1120 | "kind-of": { 1121 | "version": "6.0.2", 1122 | "bundled": true, 1123 | "dev": true 1124 | } 1125 | } 1126 | }, 1127 | "detect-indent": { 1128 | "version": "4.0.0", 1129 | "bundled": true, 1130 | "dev": true, 1131 | "requires": { 1132 | "repeating": "^2.0.0" 1133 | } 1134 | }, 1135 | "error-ex": { 1136 | "version": "1.3.1", 1137 | "bundled": true, 1138 | "dev": true, 1139 | "requires": { 1140 | "is-arrayish": "^0.2.1" 1141 | } 1142 | }, 1143 | "escape-string-regexp": { 1144 | "version": "1.0.5", 1145 | "bundled": true, 1146 | "dev": true 1147 | }, 1148 | "esutils": { 1149 | "version": "2.0.2", 1150 | "bundled": true, 1151 | "dev": true 1152 | }, 1153 | "execa": { 1154 | "version": "0.7.0", 1155 | "bundled": true, 1156 | "dev": true, 1157 | "requires": { 1158 | "cross-spawn": "^5.0.1", 1159 | "get-stream": "^3.0.0", 1160 | "is-stream": "^1.1.0", 1161 | "npm-run-path": "^2.0.0", 1162 | "p-finally": "^1.0.0", 1163 | "signal-exit": "^3.0.0", 1164 | "strip-eof": "^1.0.0" 1165 | }, 1166 | "dependencies": { 1167 | "cross-spawn": { 1168 | "version": "5.1.0", 1169 | "bundled": true, 1170 | "dev": true, 1171 | "requires": { 1172 | "lru-cache": "^4.0.1", 1173 | "shebang-command": "^1.2.0", 1174 | "which": "^1.2.9" 1175 | } 1176 | } 1177 | } 1178 | }, 1179 | "expand-brackets": { 1180 | "version": "2.1.4", 1181 | "bundled": true, 1182 | "dev": true, 1183 | "requires": { 1184 | "debug": "^2.3.3", 1185 | "define-property": "^0.2.5", 1186 | "extend-shallow": "^2.0.1", 1187 | "posix-character-classes": "^0.1.0", 1188 | "regex-not": "^1.0.0", 1189 | "snapdragon": "^0.8.1", 1190 | "to-regex": "^3.0.1" 1191 | }, 1192 | "dependencies": { 1193 | "define-property": { 1194 | "version": "0.2.5", 1195 | "bundled": true, 1196 | "dev": true, 1197 | "requires": { 1198 | "is-descriptor": "^0.1.0" 1199 | } 1200 | }, 1201 | "extend-shallow": { 1202 | "version": "2.0.1", 1203 | "bundled": true, 1204 | "dev": true, 1205 | "requires": { 1206 | "is-extendable": "^0.1.0" 1207 | } 1208 | } 1209 | } 1210 | }, 1211 | "extend-shallow": { 1212 | "version": "3.0.2", 1213 | "bundled": true, 1214 | "dev": true, 1215 | "requires": { 1216 | "assign-symbols": "^1.0.0", 1217 | "is-extendable": "^1.0.1" 1218 | }, 1219 | "dependencies": { 1220 | "is-extendable": { 1221 | "version": "1.0.1", 1222 | "bundled": true, 1223 | "dev": true, 1224 | "requires": { 1225 | "is-plain-object": "^2.0.4" 1226 | } 1227 | } 1228 | } 1229 | }, 1230 | "extglob": { 1231 | "version": "2.0.4", 1232 | "bundled": true, 1233 | "dev": true, 1234 | "requires": { 1235 | "array-unique": "^0.3.2", 1236 | "define-property": "^1.0.0", 1237 | "expand-brackets": "^2.1.4", 1238 | "extend-shallow": "^2.0.1", 1239 | "fragment-cache": "^0.2.1", 1240 | "regex-not": "^1.0.0", 1241 | "snapdragon": "^0.8.1", 1242 | "to-regex": "^3.0.1" 1243 | }, 1244 | "dependencies": { 1245 | "define-property": { 1246 | "version": "1.0.0", 1247 | "bundled": true, 1248 | "dev": true, 1249 | "requires": { 1250 | "is-descriptor": "^1.0.0" 1251 | } 1252 | }, 1253 | "extend-shallow": { 1254 | "version": "2.0.1", 1255 | "bundled": true, 1256 | "dev": true, 1257 | "requires": { 1258 | "is-extendable": "^0.1.0" 1259 | } 1260 | }, 1261 | "is-accessor-descriptor": { 1262 | "version": "1.0.0", 1263 | "bundled": true, 1264 | "dev": true, 1265 | "requires": { 1266 | "kind-of": "^6.0.0" 1267 | } 1268 | }, 1269 | "is-data-descriptor": { 1270 | "version": "1.0.0", 1271 | "bundled": true, 1272 | "dev": true, 1273 | "requires": { 1274 | "kind-of": "^6.0.0" 1275 | } 1276 | }, 1277 | "is-descriptor": { 1278 | "version": "1.0.2", 1279 | "bundled": true, 1280 | "dev": true, 1281 | "requires": { 1282 | "is-accessor-descriptor": "^1.0.0", 1283 | "is-data-descriptor": "^1.0.0", 1284 | "kind-of": "^6.0.2" 1285 | } 1286 | }, 1287 | "kind-of": { 1288 | "version": "6.0.2", 1289 | "bundled": true, 1290 | "dev": true 1291 | } 1292 | } 1293 | }, 1294 | "fill-range": { 1295 | "version": "4.0.0", 1296 | "bundled": true, 1297 | "dev": true, 1298 | "requires": { 1299 | "extend-shallow": "^2.0.1", 1300 | "is-number": "^3.0.0", 1301 | "repeat-string": "^1.6.1", 1302 | "to-regex-range": "^2.1.0" 1303 | }, 1304 | "dependencies": { 1305 | "extend-shallow": { 1306 | "version": "2.0.1", 1307 | "bundled": true, 1308 | "dev": true, 1309 | "requires": { 1310 | "is-extendable": "^0.1.0" 1311 | } 1312 | } 1313 | } 1314 | }, 1315 | "find-cache-dir": { 1316 | "version": "0.1.1", 1317 | "bundled": true, 1318 | "dev": true, 1319 | "requires": { 1320 | "commondir": "^1.0.1", 1321 | "mkdirp": "^0.5.1", 1322 | "pkg-dir": "^1.0.0" 1323 | } 1324 | }, 1325 | "find-up": { 1326 | "version": "2.1.0", 1327 | "bundled": true, 1328 | "dev": true, 1329 | "requires": { 1330 | "locate-path": "^2.0.0" 1331 | } 1332 | }, 1333 | "for-in": { 1334 | "version": "1.0.2", 1335 | "bundled": true, 1336 | "dev": true 1337 | }, 1338 | "foreground-child": { 1339 | "version": "1.5.6", 1340 | "bundled": true, 1341 | "dev": true, 1342 | "requires": { 1343 | "cross-spawn": "^4", 1344 | "signal-exit": "^3.0.0" 1345 | } 1346 | }, 1347 | "fragment-cache": { 1348 | "version": "0.2.1", 1349 | "bundled": true, 1350 | "dev": true, 1351 | "requires": { 1352 | "map-cache": "^0.2.2" 1353 | } 1354 | }, 1355 | "fs.realpath": { 1356 | "version": "1.0.0", 1357 | "bundled": true, 1358 | "dev": true 1359 | }, 1360 | "get-caller-file": { 1361 | "version": "1.0.2", 1362 | "bundled": true, 1363 | "dev": true 1364 | }, 1365 | "get-stream": { 1366 | "version": "3.0.0", 1367 | "bundled": true, 1368 | "dev": true 1369 | }, 1370 | "get-value": { 1371 | "version": "2.0.6", 1372 | "bundled": true, 1373 | "dev": true 1374 | }, 1375 | "glob": { 1376 | "version": "7.1.2", 1377 | "bundled": true, 1378 | "dev": true, 1379 | "requires": { 1380 | "fs.realpath": "^1.0.0", 1381 | "inflight": "^1.0.4", 1382 | "inherits": "2", 1383 | "minimatch": "^3.0.4", 1384 | "once": "^1.3.0", 1385 | "path-is-absolute": "^1.0.0" 1386 | } 1387 | }, 1388 | "globals": { 1389 | "version": "9.18.0", 1390 | "bundled": true, 1391 | "dev": true 1392 | }, 1393 | "graceful-fs": { 1394 | "version": "4.1.11", 1395 | "bundled": true, 1396 | "dev": true 1397 | }, 1398 | "handlebars": { 1399 | "version": "4.0.11", 1400 | "bundled": true, 1401 | "dev": true, 1402 | "requires": { 1403 | "async": "^1.4.0", 1404 | "optimist": "^0.6.1", 1405 | "source-map": "^0.4.4", 1406 | "uglify-js": "^2.6" 1407 | }, 1408 | "dependencies": { 1409 | "source-map": { 1410 | "version": "0.4.4", 1411 | "bundled": true, 1412 | "dev": true, 1413 | "requires": { 1414 | "amdefine": ">=0.0.4" 1415 | } 1416 | } 1417 | } 1418 | }, 1419 | "has-ansi": { 1420 | "version": "2.0.0", 1421 | "bundled": true, 1422 | "dev": true, 1423 | "requires": { 1424 | "ansi-regex": "^2.0.0" 1425 | } 1426 | }, 1427 | "has-flag": { 1428 | "version": "1.0.0", 1429 | "bundled": true, 1430 | "dev": true 1431 | }, 1432 | "has-value": { 1433 | "version": "1.0.0", 1434 | "bundled": true, 1435 | "dev": true, 1436 | "requires": { 1437 | "get-value": "^2.0.6", 1438 | "has-values": "^1.0.0", 1439 | "isobject": "^3.0.0" 1440 | }, 1441 | "dependencies": { 1442 | "isobject": { 1443 | "version": "3.0.1", 1444 | "bundled": true, 1445 | "dev": true 1446 | } 1447 | } 1448 | }, 1449 | "has-values": { 1450 | "version": "1.0.0", 1451 | "bundled": true, 1452 | "dev": true, 1453 | "requires": { 1454 | "is-number": "^3.0.0", 1455 | "kind-of": "^4.0.0" 1456 | }, 1457 | "dependencies": { 1458 | "is-number": { 1459 | "version": "3.0.0", 1460 | "bundled": true, 1461 | "dev": true, 1462 | "requires": { 1463 | "kind-of": "^3.0.2" 1464 | }, 1465 | "dependencies": { 1466 | "kind-of": { 1467 | "version": "3.2.2", 1468 | "bundled": true, 1469 | "dev": true, 1470 | "requires": { 1471 | "is-buffer": "^1.1.5" 1472 | } 1473 | } 1474 | } 1475 | }, 1476 | "kind-of": { 1477 | "version": "4.0.0", 1478 | "bundled": true, 1479 | "dev": true, 1480 | "requires": { 1481 | "is-buffer": "^1.1.5" 1482 | } 1483 | } 1484 | } 1485 | }, 1486 | "hosted-git-info": { 1487 | "version": "2.6.0", 1488 | "bundled": true, 1489 | "dev": true 1490 | }, 1491 | "imurmurhash": { 1492 | "version": "0.1.4", 1493 | "bundled": true, 1494 | "dev": true 1495 | }, 1496 | "inflight": { 1497 | "version": "1.0.6", 1498 | "bundled": true, 1499 | "dev": true, 1500 | "requires": { 1501 | "once": "^1.3.0", 1502 | "wrappy": "1" 1503 | } 1504 | }, 1505 | "inherits": { 1506 | "version": "2.0.3", 1507 | "bundled": true, 1508 | "dev": true 1509 | }, 1510 | "invariant": { 1511 | "version": "2.2.4", 1512 | "bundled": true, 1513 | "dev": true, 1514 | "requires": { 1515 | "loose-envify": "^1.0.0" 1516 | } 1517 | }, 1518 | "invert-kv": { 1519 | "version": "1.0.0", 1520 | "bundled": true, 1521 | "dev": true 1522 | }, 1523 | "is-accessor-descriptor": { 1524 | "version": "0.1.6", 1525 | "bundled": true, 1526 | "dev": true, 1527 | "requires": { 1528 | "kind-of": "^3.0.2" 1529 | } 1530 | }, 1531 | "is-arrayish": { 1532 | "version": "0.2.1", 1533 | "bundled": true, 1534 | "dev": true 1535 | }, 1536 | "is-buffer": { 1537 | "version": "1.1.6", 1538 | "bundled": true, 1539 | "dev": true 1540 | }, 1541 | "is-builtin-module": { 1542 | "version": "1.0.0", 1543 | "bundled": true, 1544 | "dev": true, 1545 | "requires": { 1546 | "builtin-modules": "^1.0.0" 1547 | } 1548 | }, 1549 | "is-data-descriptor": { 1550 | "version": "0.1.4", 1551 | "bundled": true, 1552 | "dev": true, 1553 | "requires": { 1554 | "kind-of": "^3.0.2" 1555 | } 1556 | }, 1557 | "is-descriptor": { 1558 | "version": "0.1.6", 1559 | "bundled": true, 1560 | "dev": true, 1561 | "requires": { 1562 | "is-accessor-descriptor": "^0.1.6", 1563 | "is-data-descriptor": "^0.1.4", 1564 | "kind-of": "^5.0.0" 1565 | }, 1566 | "dependencies": { 1567 | "kind-of": { 1568 | "version": "5.1.0", 1569 | "bundled": true, 1570 | "dev": true 1571 | } 1572 | } 1573 | }, 1574 | "is-extendable": { 1575 | "version": "0.1.1", 1576 | "bundled": true, 1577 | "dev": true 1578 | }, 1579 | "is-finite": { 1580 | "version": "1.0.2", 1581 | "bundled": true, 1582 | "dev": true, 1583 | "requires": { 1584 | "number-is-nan": "^1.0.0" 1585 | } 1586 | }, 1587 | "is-fullwidth-code-point": { 1588 | "version": "2.0.0", 1589 | "bundled": true, 1590 | "dev": true 1591 | }, 1592 | "is-number": { 1593 | "version": "3.0.0", 1594 | "bundled": true, 1595 | "dev": true, 1596 | "requires": { 1597 | "kind-of": "^3.0.2" 1598 | } 1599 | }, 1600 | "is-odd": { 1601 | "version": "2.0.0", 1602 | "bundled": true, 1603 | "dev": true, 1604 | "requires": { 1605 | "is-number": "^4.0.0" 1606 | }, 1607 | "dependencies": { 1608 | "is-number": { 1609 | "version": "4.0.0", 1610 | "bundled": true, 1611 | "dev": true 1612 | } 1613 | } 1614 | }, 1615 | "is-plain-object": { 1616 | "version": "2.0.4", 1617 | "bundled": true, 1618 | "dev": true, 1619 | "requires": { 1620 | "isobject": "^3.0.1" 1621 | }, 1622 | "dependencies": { 1623 | "isobject": { 1624 | "version": "3.0.1", 1625 | "bundled": true, 1626 | "dev": true 1627 | } 1628 | } 1629 | }, 1630 | "is-stream": { 1631 | "version": "1.1.0", 1632 | "bundled": true, 1633 | "dev": true 1634 | }, 1635 | "is-utf8": { 1636 | "version": "0.2.1", 1637 | "bundled": true, 1638 | "dev": true 1639 | }, 1640 | "is-windows": { 1641 | "version": "1.0.2", 1642 | "bundled": true, 1643 | "dev": true 1644 | }, 1645 | "isarray": { 1646 | "version": "1.0.0", 1647 | "bundled": true, 1648 | "dev": true 1649 | }, 1650 | "isexe": { 1651 | "version": "2.0.0", 1652 | "bundled": true, 1653 | "dev": true 1654 | }, 1655 | "isobject": { 1656 | "version": "3.0.1", 1657 | "bundled": true, 1658 | "dev": true 1659 | }, 1660 | "istanbul-lib-coverage": { 1661 | "version": "1.2.0", 1662 | "bundled": true, 1663 | "dev": true 1664 | }, 1665 | "istanbul-lib-hook": { 1666 | "version": "1.1.0", 1667 | "bundled": true, 1668 | "dev": true, 1669 | "requires": { 1670 | "append-transform": "^0.4.0" 1671 | } 1672 | }, 1673 | "istanbul-lib-instrument": { 1674 | "version": "1.10.1", 1675 | "bundled": true, 1676 | "dev": true, 1677 | "requires": { 1678 | "babel-generator": "^6.18.0", 1679 | "babel-template": "^6.16.0", 1680 | "babel-traverse": "^6.18.0", 1681 | "babel-types": "^6.18.0", 1682 | "babylon": "^6.18.0", 1683 | "istanbul-lib-coverage": "^1.2.0", 1684 | "semver": "^5.3.0" 1685 | } 1686 | }, 1687 | "istanbul-lib-report": { 1688 | "version": "1.1.3", 1689 | "bundled": true, 1690 | "dev": true, 1691 | "requires": { 1692 | "istanbul-lib-coverage": "^1.1.2", 1693 | "mkdirp": "^0.5.1", 1694 | "path-parse": "^1.0.5", 1695 | "supports-color": "^3.1.2" 1696 | }, 1697 | "dependencies": { 1698 | "supports-color": { 1699 | "version": "3.2.3", 1700 | "bundled": true, 1701 | "dev": true, 1702 | "requires": { 1703 | "has-flag": "^1.0.0" 1704 | } 1705 | } 1706 | } 1707 | }, 1708 | "istanbul-lib-source-maps": { 1709 | "version": "1.2.3", 1710 | "bundled": true, 1711 | "dev": true, 1712 | "requires": { 1713 | "debug": "^3.1.0", 1714 | "istanbul-lib-coverage": "^1.1.2", 1715 | "mkdirp": "^0.5.1", 1716 | "rimraf": "^2.6.1", 1717 | "source-map": "^0.5.3" 1718 | }, 1719 | "dependencies": { 1720 | "debug": { 1721 | "version": "3.1.0", 1722 | "bundled": true, 1723 | "dev": true, 1724 | "requires": { 1725 | "ms": "2.0.0" 1726 | } 1727 | } 1728 | } 1729 | }, 1730 | "istanbul-reports": { 1731 | "version": "1.4.0", 1732 | "bundled": true, 1733 | "dev": true, 1734 | "requires": { 1735 | "handlebars": "^4.0.3" 1736 | } 1737 | }, 1738 | "js-tokens": { 1739 | "version": "3.0.2", 1740 | "bundled": true, 1741 | "dev": true 1742 | }, 1743 | "jsesc": { 1744 | "version": "1.3.0", 1745 | "bundled": true, 1746 | "dev": true 1747 | }, 1748 | "kind-of": { 1749 | "version": "3.2.2", 1750 | "bundled": true, 1751 | "dev": true, 1752 | "requires": { 1753 | "is-buffer": "^1.1.5" 1754 | } 1755 | }, 1756 | "lazy-cache": { 1757 | "version": "1.0.4", 1758 | "bundled": true, 1759 | "dev": true, 1760 | "optional": true 1761 | }, 1762 | "lcid": { 1763 | "version": "1.0.0", 1764 | "bundled": true, 1765 | "dev": true, 1766 | "requires": { 1767 | "invert-kv": "^1.0.0" 1768 | } 1769 | }, 1770 | "load-json-file": { 1771 | "version": "1.1.0", 1772 | "bundled": true, 1773 | "dev": true, 1774 | "requires": { 1775 | "graceful-fs": "^4.1.2", 1776 | "parse-json": "^2.2.0", 1777 | "pify": "^2.0.0", 1778 | "pinkie-promise": "^2.0.0", 1779 | "strip-bom": "^2.0.0" 1780 | } 1781 | }, 1782 | "locate-path": { 1783 | "version": "2.0.0", 1784 | "bundled": true, 1785 | "dev": true, 1786 | "requires": { 1787 | "p-locate": "^2.0.0", 1788 | "path-exists": "^3.0.0" 1789 | }, 1790 | "dependencies": { 1791 | "path-exists": { 1792 | "version": "3.0.0", 1793 | "bundled": true, 1794 | "dev": true 1795 | } 1796 | } 1797 | }, 1798 | "lodash": { 1799 | "version": "4.17.10", 1800 | "bundled": true, 1801 | "dev": true 1802 | }, 1803 | "longest": { 1804 | "version": "1.0.1", 1805 | "bundled": true, 1806 | "dev": true 1807 | }, 1808 | "loose-envify": { 1809 | "version": "1.3.1", 1810 | "bundled": true, 1811 | "dev": true, 1812 | "requires": { 1813 | "js-tokens": "^3.0.0" 1814 | } 1815 | }, 1816 | "lru-cache": { 1817 | "version": "4.1.3", 1818 | "bundled": true, 1819 | "dev": true, 1820 | "requires": { 1821 | "pseudomap": "^1.0.2", 1822 | "yallist": "^2.1.2" 1823 | } 1824 | }, 1825 | "map-cache": { 1826 | "version": "0.2.2", 1827 | "bundled": true, 1828 | "dev": true 1829 | }, 1830 | "map-visit": { 1831 | "version": "1.0.0", 1832 | "bundled": true, 1833 | "dev": true, 1834 | "requires": { 1835 | "object-visit": "^1.0.0" 1836 | } 1837 | }, 1838 | "md5-hex": { 1839 | "version": "1.3.0", 1840 | "bundled": true, 1841 | "dev": true, 1842 | "requires": { 1843 | "md5-o-matic": "^0.1.1" 1844 | } 1845 | }, 1846 | "md5-o-matic": { 1847 | "version": "0.1.1", 1848 | "bundled": true, 1849 | "dev": true 1850 | }, 1851 | "mem": { 1852 | "version": "1.1.0", 1853 | "bundled": true, 1854 | "dev": true, 1855 | "requires": { 1856 | "mimic-fn": "^1.0.0" 1857 | } 1858 | }, 1859 | "merge-source-map": { 1860 | "version": "1.1.0", 1861 | "bundled": true, 1862 | "dev": true, 1863 | "requires": { 1864 | "source-map": "^0.6.1" 1865 | }, 1866 | "dependencies": { 1867 | "source-map": { 1868 | "version": "0.6.1", 1869 | "bundled": true, 1870 | "dev": true 1871 | } 1872 | } 1873 | }, 1874 | "micromatch": { 1875 | "version": "3.1.10", 1876 | "bundled": true, 1877 | "dev": true, 1878 | "requires": { 1879 | "arr-diff": "^4.0.0", 1880 | "array-unique": "^0.3.2", 1881 | "braces": "^2.3.1", 1882 | "define-property": "^2.0.2", 1883 | "extend-shallow": "^3.0.2", 1884 | "extglob": "^2.0.4", 1885 | "fragment-cache": "^0.2.1", 1886 | "kind-of": "^6.0.2", 1887 | "nanomatch": "^1.2.9", 1888 | "object.pick": "^1.3.0", 1889 | "regex-not": "^1.0.0", 1890 | "snapdragon": "^0.8.1", 1891 | "to-regex": "^3.0.2" 1892 | }, 1893 | "dependencies": { 1894 | "kind-of": { 1895 | "version": "6.0.2", 1896 | "bundled": true, 1897 | "dev": true 1898 | } 1899 | } 1900 | }, 1901 | "mimic-fn": { 1902 | "version": "1.2.0", 1903 | "bundled": true, 1904 | "dev": true 1905 | }, 1906 | "minimatch": { 1907 | "version": "3.0.4", 1908 | "bundled": true, 1909 | "dev": true, 1910 | "requires": { 1911 | "brace-expansion": "^1.1.7" 1912 | } 1913 | }, 1914 | "minimist": { 1915 | "version": "0.0.8", 1916 | "bundled": true, 1917 | "dev": true 1918 | }, 1919 | "mixin-deep": { 1920 | "version": "1.3.1", 1921 | "bundled": true, 1922 | "dev": true, 1923 | "requires": { 1924 | "for-in": "^1.0.2", 1925 | "is-extendable": "^1.0.1" 1926 | }, 1927 | "dependencies": { 1928 | "is-extendable": { 1929 | "version": "1.0.1", 1930 | "bundled": true, 1931 | "dev": true, 1932 | "requires": { 1933 | "is-plain-object": "^2.0.4" 1934 | } 1935 | } 1936 | } 1937 | }, 1938 | "mkdirp": { 1939 | "version": "0.5.1", 1940 | "bundled": true, 1941 | "dev": true, 1942 | "requires": { 1943 | "minimist": "0.0.8" 1944 | } 1945 | }, 1946 | "ms": { 1947 | "version": "2.0.0", 1948 | "bundled": true, 1949 | "dev": true 1950 | }, 1951 | "nanomatch": { 1952 | "version": "1.2.9", 1953 | "bundled": true, 1954 | "dev": true, 1955 | "requires": { 1956 | "arr-diff": "^4.0.0", 1957 | "array-unique": "^0.3.2", 1958 | "define-property": "^2.0.2", 1959 | "extend-shallow": "^3.0.2", 1960 | "fragment-cache": "^0.2.1", 1961 | "is-odd": "^2.0.0", 1962 | "is-windows": "^1.0.2", 1963 | "kind-of": "^6.0.2", 1964 | "object.pick": "^1.3.0", 1965 | "regex-not": "^1.0.0", 1966 | "snapdragon": "^0.8.1", 1967 | "to-regex": "^3.0.1" 1968 | }, 1969 | "dependencies": { 1970 | "arr-diff": { 1971 | "version": "4.0.0", 1972 | "bundled": true, 1973 | "dev": true 1974 | }, 1975 | "array-unique": { 1976 | "version": "0.3.2", 1977 | "bundled": true, 1978 | "dev": true 1979 | }, 1980 | "kind-of": { 1981 | "version": "6.0.2", 1982 | "bundled": true, 1983 | "dev": true 1984 | } 1985 | } 1986 | }, 1987 | "normalize-package-data": { 1988 | "version": "2.4.0", 1989 | "bundled": true, 1990 | "dev": true, 1991 | "requires": { 1992 | "hosted-git-info": "^2.1.4", 1993 | "is-builtin-module": "^1.0.0", 1994 | "semver": "2 || 3 || 4 || 5", 1995 | "validate-npm-package-license": "^3.0.1" 1996 | } 1997 | }, 1998 | "npm-run-path": { 1999 | "version": "2.0.2", 2000 | "bundled": true, 2001 | "dev": true, 2002 | "requires": { 2003 | "path-key": "^2.0.0" 2004 | } 2005 | }, 2006 | "number-is-nan": { 2007 | "version": "1.0.1", 2008 | "bundled": true, 2009 | "dev": true 2010 | }, 2011 | "object-assign": { 2012 | "version": "4.1.1", 2013 | "bundled": true, 2014 | "dev": true 2015 | }, 2016 | "object-copy": { 2017 | "version": "0.1.0", 2018 | "bundled": true, 2019 | "dev": true, 2020 | "requires": { 2021 | "copy-descriptor": "^0.1.0", 2022 | "define-property": "^0.2.5", 2023 | "kind-of": "^3.0.3" 2024 | }, 2025 | "dependencies": { 2026 | "define-property": { 2027 | "version": "0.2.5", 2028 | "bundled": true, 2029 | "dev": true, 2030 | "requires": { 2031 | "is-descriptor": "^0.1.0" 2032 | } 2033 | } 2034 | } 2035 | }, 2036 | "object-visit": { 2037 | "version": "1.0.1", 2038 | "bundled": true, 2039 | "dev": true, 2040 | "requires": { 2041 | "isobject": "^3.0.0" 2042 | }, 2043 | "dependencies": { 2044 | "isobject": { 2045 | "version": "3.0.1", 2046 | "bundled": true, 2047 | "dev": true 2048 | } 2049 | } 2050 | }, 2051 | "object.pick": { 2052 | "version": "1.3.0", 2053 | "bundled": true, 2054 | "dev": true, 2055 | "requires": { 2056 | "isobject": "^3.0.1" 2057 | }, 2058 | "dependencies": { 2059 | "isobject": { 2060 | "version": "3.0.1", 2061 | "bundled": true, 2062 | "dev": true 2063 | } 2064 | } 2065 | }, 2066 | "once": { 2067 | "version": "1.4.0", 2068 | "bundled": true, 2069 | "dev": true, 2070 | "requires": { 2071 | "wrappy": "1" 2072 | } 2073 | }, 2074 | "optimist": { 2075 | "version": "0.6.1", 2076 | "bundled": true, 2077 | "dev": true, 2078 | "requires": { 2079 | "minimist": "~0.0.1", 2080 | "wordwrap": "~0.0.2" 2081 | } 2082 | }, 2083 | "os-homedir": { 2084 | "version": "1.0.2", 2085 | "bundled": true, 2086 | "dev": true 2087 | }, 2088 | "os-locale": { 2089 | "version": "2.1.0", 2090 | "bundled": true, 2091 | "dev": true, 2092 | "requires": { 2093 | "execa": "^0.7.0", 2094 | "lcid": "^1.0.0", 2095 | "mem": "^1.1.0" 2096 | } 2097 | }, 2098 | "p-finally": { 2099 | "version": "1.0.0", 2100 | "bundled": true, 2101 | "dev": true 2102 | }, 2103 | "p-limit": { 2104 | "version": "1.2.0", 2105 | "bundled": true, 2106 | "dev": true, 2107 | "requires": { 2108 | "p-try": "^1.0.0" 2109 | } 2110 | }, 2111 | "p-locate": { 2112 | "version": "2.0.0", 2113 | "bundled": true, 2114 | "dev": true, 2115 | "requires": { 2116 | "p-limit": "^1.1.0" 2117 | } 2118 | }, 2119 | "p-try": { 2120 | "version": "1.0.0", 2121 | "bundled": true, 2122 | "dev": true 2123 | }, 2124 | "parse-json": { 2125 | "version": "2.2.0", 2126 | "bundled": true, 2127 | "dev": true, 2128 | "requires": { 2129 | "error-ex": "^1.2.0" 2130 | } 2131 | }, 2132 | "pascalcase": { 2133 | "version": "0.1.1", 2134 | "bundled": true, 2135 | "dev": true 2136 | }, 2137 | "path-exists": { 2138 | "version": "2.1.0", 2139 | "bundled": true, 2140 | "dev": true, 2141 | "requires": { 2142 | "pinkie-promise": "^2.0.0" 2143 | } 2144 | }, 2145 | "path-is-absolute": { 2146 | "version": "1.0.1", 2147 | "bundled": true, 2148 | "dev": true 2149 | }, 2150 | "path-key": { 2151 | "version": "2.0.1", 2152 | "bundled": true, 2153 | "dev": true 2154 | }, 2155 | "path-parse": { 2156 | "version": "1.0.5", 2157 | "bundled": true, 2158 | "dev": true 2159 | }, 2160 | "path-type": { 2161 | "version": "1.1.0", 2162 | "bundled": true, 2163 | "dev": true, 2164 | "requires": { 2165 | "graceful-fs": "^4.1.2", 2166 | "pify": "^2.0.0", 2167 | "pinkie-promise": "^2.0.0" 2168 | } 2169 | }, 2170 | "pify": { 2171 | "version": "2.3.0", 2172 | "bundled": true, 2173 | "dev": true 2174 | }, 2175 | "pinkie": { 2176 | "version": "2.0.4", 2177 | "bundled": true, 2178 | "dev": true 2179 | }, 2180 | "pinkie-promise": { 2181 | "version": "2.0.1", 2182 | "bundled": true, 2183 | "dev": true, 2184 | "requires": { 2185 | "pinkie": "^2.0.0" 2186 | } 2187 | }, 2188 | "pkg-dir": { 2189 | "version": "1.0.0", 2190 | "bundled": true, 2191 | "dev": true, 2192 | "requires": { 2193 | "find-up": "^1.0.0" 2194 | }, 2195 | "dependencies": { 2196 | "find-up": { 2197 | "version": "1.1.2", 2198 | "bundled": true, 2199 | "dev": true, 2200 | "requires": { 2201 | "path-exists": "^2.0.0", 2202 | "pinkie-promise": "^2.0.0" 2203 | } 2204 | } 2205 | } 2206 | }, 2207 | "posix-character-classes": { 2208 | "version": "0.1.1", 2209 | "bundled": true, 2210 | "dev": true 2211 | }, 2212 | "pseudomap": { 2213 | "version": "1.0.2", 2214 | "bundled": true, 2215 | "dev": true 2216 | }, 2217 | "read-pkg": { 2218 | "version": "1.1.0", 2219 | "bundled": true, 2220 | "dev": true, 2221 | "requires": { 2222 | "load-json-file": "^1.0.0", 2223 | "normalize-package-data": "^2.3.2", 2224 | "path-type": "^1.0.0" 2225 | } 2226 | }, 2227 | "read-pkg-up": { 2228 | "version": "1.0.1", 2229 | "bundled": true, 2230 | "dev": true, 2231 | "requires": { 2232 | "find-up": "^1.0.0", 2233 | "read-pkg": "^1.0.0" 2234 | }, 2235 | "dependencies": { 2236 | "find-up": { 2237 | "version": "1.1.2", 2238 | "bundled": true, 2239 | "dev": true, 2240 | "requires": { 2241 | "path-exists": "^2.0.0", 2242 | "pinkie-promise": "^2.0.0" 2243 | } 2244 | } 2245 | } 2246 | }, 2247 | "regenerator-runtime": { 2248 | "version": "0.11.1", 2249 | "bundled": true, 2250 | "dev": true 2251 | }, 2252 | "regex-not": { 2253 | "version": "1.0.2", 2254 | "bundled": true, 2255 | "dev": true, 2256 | "requires": { 2257 | "extend-shallow": "^3.0.2", 2258 | "safe-regex": "^1.1.0" 2259 | } 2260 | }, 2261 | "repeat-element": { 2262 | "version": "1.1.2", 2263 | "bundled": true, 2264 | "dev": true 2265 | }, 2266 | "repeat-string": { 2267 | "version": "1.6.1", 2268 | "bundled": true, 2269 | "dev": true 2270 | }, 2271 | "repeating": { 2272 | "version": "2.0.1", 2273 | "bundled": true, 2274 | "dev": true, 2275 | "requires": { 2276 | "is-finite": "^1.0.0" 2277 | } 2278 | }, 2279 | "require-directory": { 2280 | "version": "2.1.1", 2281 | "bundled": true, 2282 | "dev": true 2283 | }, 2284 | "require-main-filename": { 2285 | "version": "1.0.1", 2286 | "bundled": true, 2287 | "dev": true 2288 | }, 2289 | "resolve-from": { 2290 | "version": "2.0.0", 2291 | "bundled": true, 2292 | "dev": true 2293 | }, 2294 | "resolve-url": { 2295 | "version": "0.2.1", 2296 | "bundled": true, 2297 | "dev": true 2298 | }, 2299 | "ret": { 2300 | "version": "0.1.15", 2301 | "bundled": true, 2302 | "dev": true 2303 | }, 2304 | "right-align": { 2305 | "version": "0.1.3", 2306 | "bundled": true, 2307 | "dev": true, 2308 | "optional": true, 2309 | "requires": { 2310 | "align-text": "^0.1.1" 2311 | } 2312 | }, 2313 | "rimraf": { 2314 | "version": "2.6.2", 2315 | "bundled": true, 2316 | "dev": true, 2317 | "requires": { 2318 | "glob": "^7.0.5" 2319 | } 2320 | }, 2321 | "safe-regex": { 2322 | "version": "1.1.0", 2323 | "bundled": true, 2324 | "dev": true, 2325 | "requires": { 2326 | "ret": "~0.1.10" 2327 | } 2328 | }, 2329 | "semver": { 2330 | "version": "5.5.0", 2331 | "bundled": true, 2332 | "dev": true 2333 | }, 2334 | "set-blocking": { 2335 | "version": "2.0.0", 2336 | "bundled": true, 2337 | "dev": true 2338 | }, 2339 | "set-value": { 2340 | "version": "2.0.0", 2341 | "bundled": true, 2342 | "dev": true, 2343 | "requires": { 2344 | "extend-shallow": "^2.0.1", 2345 | "is-extendable": "^0.1.1", 2346 | "is-plain-object": "^2.0.3", 2347 | "split-string": "^3.0.1" 2348 | }, 2349 | "dependencies": { 2350 | "extend-shallow": { 2351 | "version": "2.0.1", 2352 | "bundled": true, 2353 | "dev": true, 2354 | "requires": { 2355 | "is-extendable": "^0.1.0" 2356 | } 2357 | } 2358 | } 2359 | }, 2360 | "shebang-command": { 2361 | "version": "1.2.0", 2362 | "bundled": true, 2363 | "dev": true, 2364 | "requires": { 2365 | "shebang-regex": "^1.0.0" 2366 | } 2367 | }, 2368 | "shebang-regex": { 2369 | "version": "1.0.0", 2370 | "bundled": true, 2371 | "dev": true 2372 | }, 2373 | "signal-exit": { 2374 | "version": "3.0.2", 2375 | "bundled": true, 2376 | "dev": true 2377 | }, 2378 | "slide": { 2379 | "version": "1.1.6", 2380 | "bundled": true, 2381 | "dev": true 2382 | }, 2383 | "snapdragon": { 2384 | "version": "0.8.2", 2385 | "bundled": true, 2386 | "dev": true, 2387 | "requires": { 2388 | "base": "^0.11.1", 2389 | "debug": "^2.2.0", 2390 | "define-property": "^0.2.5", 2391 | "extend-shallow": "^2.0.1", 2392 | "map-cache": "^0.2.2", 2393 | "source-map": "^0.5.6", 2394 | "source-map-resolve": "^0.5.0", 2395 | "use": "^3.1.0" 2396 | }, 2397 | "dependencies": { 2398 | "define-property": { 2399 | "version": "0.2.5", 2400 | "bundled": true, 2401 | "dev": true, 2402 | "requires": { 2403 | "is-descriptor": "^0.1.0" 2404 | } 2405 | }, 2406 | "extend-shallow": { 2407 | "version": "2.0.1", 2408 | "bundled": true, 2409 | "dev": true, 2410 | "requires": { 2411 | "is-extendable": "^0.1.0" 2412 | } 2413 | } 2414 | } 2415 | }, 2416 | "snapdragon-node": { 2417 | "version": "2.1.1", 2418 | "bundled": true, 2419 | "dev": true, 2420 | "requires": { 2421 | "define-property": "^1.0.0", 2422 | "isobject": "^3.0.0", 2423 | "snapdragon-util": "^3.0.1" 2424 | }, 2425 | "dependencies": { 2426 | "define-property": { 2427 | "version": "1.0.0", 2428 | "bundled": true, 2429 | "dev": true, 2430 | "requires": { 2431 | "is-descriptor": "^1.0.0" 2432 | } 2433 | }, 2434 | "is-accessor-descriptor": { 2435 | "version": "1.0.0", 2436 | "bundled": true, 2437 | "dev": true, 2438 | "requires": { 2439 | "kind-of": "^6.0.0" 2440 | } 2441 | }, 2442 | "is-data-descriptor": { 2443 | "version": "1.0.0", 2444 | "bundled": true, 2445 | "dev": true, 2446 | "requires": { 2447 | "kind-of": "^6.0.0" 2448 | } 2449 | }, 2450 | "is-descriptor": { 2451 | "version": "1.0.2", 2452 | "bundled": true, 2453 | "dev": true, 2454 | "requires": { 2455 | "is-accessor-descriptor": "^1.0.0", 2456 | "is-data-descriptor": "^1.0.0", 2457 | "kind-of": "^6.0.2" 2458 | } 2459 | }, 2460 | "isobject": { 2461 | "version": "3.0.1", 2462 | "bundled": true, 2463 | "dev": true 2464 | }, 2465 | "kind-of": { 2466 | "version": "6.0.2", 2467 | "bundled": true, 2468 | "dev": true 2469 | } 2470 | } 2471 | }, 2472 | "snapdragon-util": { 2473 | "version": "3.0.1", 2474 | "bundled": true, 2475 | "dev": true, 2476 | "requires": { 2477 | "kind-of": "^3.2.0" 2478 | } 2479 | }, 2480 | "source-map": { 2481 | "version": "0.5.7", 2482 | "bundled": true, 2483 | "dev": true 2484 | }, 2485 | "source-map-resolve": { 2486 | "version": "0.5.1", 2487 | "bundled": true, 2488 | "dev": true, 2489 | "requires": { 2490 | "atob": "^2.0.0", 2491 | "decode-uri-component": "^0.2.0", 2492 | "resolve-url": "^0.2.1", 2493 | "source-map-url": "^0.4.0", 2494 | "urix": "^0.1.0" 2495 | } 2496 | }, 2497 | "source-map-url": { 2498 | "version": "0.4.0", 2499 | "bundled": true, 2500 | "dev": true 2501 | }, 2502 | "spawn-wrap": { 2503 | "version": "1.4.2", 2504 | "bundled": true, 2505 | "dev": true, 2506 | "requires": { 2507 | "foreground-child": "^1.5.6", 2508 | "mkdirp": "^0.5.0", 2509 | "os-homedir": "^1.0.1", 2510 | "rimraf": "^2.6.2", 2511 | "signal-exit": "^3.0.2", 2512 | "which": "^1.3.0" 2513 | } 2514 | }, 2515 | "spdx-correct": { 2516 | "version": "3.0.0", 2517 | "bundled": true, 2518 | "dev": true, 2519 | "requires": { 2520 | "spdx-expression-parse": "^3.0.0", 2521 | "spdx-license-ids": "^3.0.0" 2522 | } 2523 | }, 2524 | "spdx-exceptions": { 2525 | "version": "2.1.0", 2526 | "bundled": true, 2527 | "dev": true 2528 | }, 2529 | "spdx-expression-parse": { 2530 | "version": "3.0.0", 2531 | "bundled": true, 2532 | "dev": true, 2533 | "requires": { 2534 | "spdx-exceptions": "^2.1.0", 2535 | "spdx-license-ids": "^3.0.0" 2536 | } 2537 | }, 2538 | "spdx-license-ids": { 2539 | "version": "3.0.0", 2540 | "bundled": true, 2541 | "dev": true 2542 | }, 2543 | "split-string": { 2544 | "version": "3.1.0", 2545 | "bundled": true, 2546 | "dev": true, 2547 | "requires": { 2548 | "extend-shallow": "^3.0.0" 2549 | } 2550 | }, 2551 | "static-extend": { 2552 | "version": "0.1.2", 2553 | "bundled": true, 2554 | "dev": true, 2555 | "requires": { 2556 | "define-property": "^0.2.5", 2557 | "object-copy": "^0.1.0" 2558 | }, 2559 | "dependencies": { 2560 | "define-property": { 2561 | "version": "0.2.5", 2562 | "bundled": true, 2563 | "dev": true, 2564 | "requires": { 2565 | "is-descriptor": "^0.1.0" 2566 | } 2567 | } 2568 | } 2569 | }, 2570 | "string-width": { 2571 | "version": "2.1.1", 2572 | "bundled": true, 2573 | "dev": true, 2574 | "requires": { 2575 | "is-fullwidth-code-point": "^2.0.0", 2576 | "strip-ansi": "^4.0.0" 2577 | }, 2578 | "dependencies": { 2579 | "ansi-regex": { 2580 | "version": "3.0.0", 2581 | "bundled": true, 2582 | "dev": true 2583 | }, 2584 | "strip-ansi": { 2585 | "version": "4.0.0", 2586 | "bundled": true, 2587 | "dev": true, 2588 | "requires": { 2589 | "ansi-regex": "^3.0.0" 2590 | } 2591 | } 2592 | } 2593 | }, 2594 | "strip-ansi": { 2595 | "version": "3.0.1", 2596 | "bundled": true, 2597 | "dev": true, 2598 | "requires": { 2599 | "ansi-regex": "^2.0.0" 2600 | } 2601 | }, 2602 | "strip-bom": { 2603 | "version": "2.0.0", 2604 | "bundled": true, 2605 | "dev": true, 2606 | "requires": { 2607 | "is-utf8": "^0.2.0" 2608 | } 2609 | }, 2610 | "strip-eof": { 2611 | "version": "1.0.0", 2612 | "bundled": true, 2613 | "dev": true 2614 | }, 2615 | "supports-color": { 2616 | "version": "2.0.0", 2617 | "bundled": true, 2618 | "dev": true 2619 | }, 2620 | "test-exclude": { 2621 | "version": "4.2.1", 2622 | "bundled": true, 2623 | "dev": true, 2624 | "requires": { 2625 | "arrify": "^1.0.1", 2626 | "micromatch": "^3.1.8", 2627 | "object-assign": "^4.1.0", 2628 | "read-pkg-up": "^1.0.1", 2629 | "require-main-filename": "^1.0.1" 2630 | }, 2631 | "dependencies": { 2632 | "arr-diff": { 2633 | "version": "4.0.0", 2634 | "bundled": true, 2635 | "dev": true 2636 | }, 2637 | "array-unique": { 2638 | "version": "0.3.2", 2639 | "bundled": true, 2640 | "dev": true 2641 | }, 2642 | "braces": { 2643 | "version": "2.3.2", 2644 | "bundled": true, 2645 | "dev": true, 2646 | "requires": { 2647 | "arr-flatten": "^1.1.0", 2648 | "array-unique": "^0.3.2", 2649 | "extend-shallow": "^2.0.1", 2650 | "fill-range": "^4.0.0", 2651 | "isobject": "^3.0.1", 2652 | "repeat-element": "^1.1.2", 2653 | "snapdragon": "^0.8.1", 2654 | "snapdragon-node": "^2.0.1", 2655 | "split-string": "^3.0.2", 2656 | "to-regex": "^3.0.1" 2657 | }, 2658 | "dependencies": { 2659 | "extend-shallow": { 2660 | "version": "2.0.1", 2661 | "bundled": true, 2662 | "dev": true, 2663 | "requires": { 2664 | "is-extendable": "^0.1.0" 2665 | } 2666 | } 2667 | } 2668 | }, 2669 | "expand-brackets": { 2670 | "version": "2.1.4", 2671 | "bundled": true, 2672 | "dev": true, 2673 | "requires": { 2674 | "debug": "^2.3.3", 2675 | "define-property": "^0.2.5", 2676 | "extend-shallow": "^2.0.1", 2677 | "posix-character-classes": "^0.1.0", 2678 | "regex-not": "^1.0.0", 2679 | "snapdragon": "^0.8.1", 2680 | "to-regex": "^3.0.1" 2681 | }, 2682 | "dependencies": { 2683 | "define-property": { 2684 | "version": "0.2.5", 2685 | "bundled": true, 2686 | "dev": true, 2687 | "requires": { 2688 | "is-descriptor": "^0.1.0" 2689 | } 2690 | }, 2691 | "extend-shallow": { 2692 | "version": "2.0.1", 2693 | "bundled": true, 2694 | "dev": true, 2695 | "requires": { 2696 | "is-extendable": "^0.1.0" 2697 | } 2698 | }, 2699 | "is-accessor-descriptor": { 2700 | "version": "0.1.6", 2701 | "bundled": true, 2702 | "dev": true, 2703 | "requires": { 2704 | "kind-of": "^3.0.2" 2705 | }, 2706 | "dependencies": { 2707 | "kind-of": { 2708 | "version": "3.2.2", 2709 | "bundled": true, 2710 | "dev": true, 2711 | "requires": { 2712 | "is-buffer": "^1.1.5" 2713 | } 2714 | } 2715 | } 2716 | }, 2717 | "is-data-descriptor": { 2718 | "version": "0.1.4", 2719 | "bundled": true, 2720 | "dev": true, 2721 | "requires": { 2722 | "kind-of": "^3.0.2" 2723 | }, 2724 | "dependencies": { 2725 | "kind-of": { 2726 | "version": "3.2.2", 2727 | "bundled": true, 2728 | "dev": true, 2729 | "requires": { 2730 | "is-buffer": "^1.1.5" 2731 | } 2732 | } 2733 | } 2734 | }, 2735 | "is-descriptor": { 2736 | "version": "0.1.6", 2737 | "bundled": true, 2738 | "dev": true, 2739 | "requires": { 2740 | "is-accessor-descriptor": "^0.1.6", 2741 | "is-data-descriptor": "^0.1.4", 2742 | "kind-of": "^5.0.0" 2743 | } 2744 | }, 2745 | "kind-of": { 2746 | "version": "5.1.0", 2747 | "bundled": true, 2748 | "dev": true 2749 | } 2750 | } 2751 | }, 2752 | "extglob": { 2753 | "version": "2.0.4", 2754 | "bundled": true, 2755 | "dev": true, 2756 | "requires": { 2757 | "array-unique": "^0.3.2", 2758 | "define-property": "^1.0.0", 2759 | "expand-brackets": "^2.1.4", 2760 | "extend-shallow": "^2.0.1", 2761 | "fragment-cache": "^0.2.1", 2762 | "regex-not": "^1.0.0", 2763 | "snapdragon": "^0.8.1", 2764 | "to-regex": "^3.0.1" 2765 | }, 2766 | "dependencies": { 2767 | "define-property": { 2768 | "version": "1.0.0", 2769 | "bundled": true, 2770 | "dev": true, 2771 | "requires": { 2772 | "is-descriptor": "^1.0.0" 2773 | } 2774 | }, 2775 | "extend-shallow": { 2776 | "version": "2.0.1", 2777 | "bundled": true, 2778 | "dev": true, 2779 | "requires": { 2780 | "is-extendable": "^0.1.0" 2781 | } 2782 | } 2783 | } 2784 | }, 2785 | "fill-range": { 2786 | "version": "4.0.0", 2787 | "bundled": true, 2788 | "dev": true, 2789 | "requires": { 2790 | "extend-shallow": "^2.0.1", 2791 | "is-number": "^3.0.0", 2792 | "repeat-string": "^1.6.1", 2793 | "to-regex-range": "^2.1.0" 2794 | }, 2795 | "dependencies": { 2796 | "extend-shallow": { 2797 | "version": "2.0.1", 2798 | "bundled": true, 2799 | "dev": true, 2800 | "requires": { 2801 | "is-extendable": "^0.1.0" 2802 | } 2803 | } 2804 | } 2805 | }, 2806 | "is-accessor-descriptor": { 2807 | "version": "1.0.0", 2808 | "bundled": true, 2809 | "dev": true, 2810 | "requires": { 2811 | "kind-of": "^6.0.0" 2812 | } 2813 | }, 2814 | "is-data-descriptor": { 2815 | "version": "1.0.0", 2816 | "bundled": true, 2817 | "dev": true, 2818 | "requires": { 2819 | "kind-of": "^6.0.0" 2820 | } 2821 | }, 2822 | "is-descriptor": { 2823 | "version": "1.0.2", 2824 | "bundled": true, 2825 | "dev": true, 2826 | "requires": { 2827 | "is-accessor-descriptor": "^1.0.0", 2828 | "is-data-descriptor": "^1.0.0", 2829 | "kind-of": "^6.0.2" 2830 | } 2831 | }, 2832 | "is-number": { 2833 | "version": "3.0.0", 2834 | "bundled": true, 2835 | "dev": true, 2836 | "requires": { 2837 | "kind-of": "^3.0.2" 2838 | }, 2839 | "dependencies": { 2840 | "kind-of": { 2841 | "version": "3.2.2", 2842 | "bundled": true, 2843 | "dev": true, 2844 | "requires": { 2845 | "is-buffer": "^1.1.5" 2846 | } 2847 | } 2848 | } 2849 | }, 2850 | "isobject": { 2851 | "version": "3.0.1", 2852 | "bundled": true, 2853 | "dev": true 2854 | }, 2855 | "kind-of": { 2856 | "version": "6.0.2", 2857 | "bundled": true, 2858 | "dev": true 2859 | }, 2860 | "micromatch": { 2861 | "version": "3.1.10", 2862 | "bundled": true, 2863 | "dev": true, 2864 | "requires": { 2865 | "arr-diff": "^4.0.0", 2866 | "array-unique": "^0.3.2", 2867 | "braces": "^2.3.1", 2868 | "define-property": "^2.0.2", 2869 | "extend-shallow": "^3.0.2", 2870 | "extglob": "^2.0.4", 2871 | "fragment-cache": "^0.2.1", 2872 | "kind-of": "^6.0.2", 2873 | "nanomatch": "^1.2.9", 2874 | "object.pick": "^1.3.0", 2875 | "regex-not": "^1.0.0", 2876 | "snapdragon": "^0.8.1", 2877 | "to-regex": "^3.0.2" 2878 | } 2879 | } 2880 | } 2881 | }, 2882 | "to-fast-properties": { 2883 | "version": "1.0.3", 2884 | "bundled": true, 2885 | "dev": true 2886 | }, 2887 | "to-object-path": { 2888 | "version": "0.3.0", 2889 | "bundled": true, 2890 | "dev": true, 2891 | "requires": { 2892 | "kind-of": "^3.0.2" 2893 | } 2894 | }, 2895 | "to-regex": { 2896 | "version": "3.0.2", 2897 | "bundled": true, 2898 | "dev": true, 2899 | "requires": { 2900 | "define-property": "^2.0.2", 2901 | "extend-shallow": "^3.0.2", 2902 | "regex-not": "^1.0.2", 2903 | "safe-regex": "^1.1.0" 2904 | } 2905 | }, 2906 | "to-regex-range": { 2907 | "version": "2.1.1", 2908 | "bundled": true, 2909 | "dev": true, 2910 | "requires": { 2911 | "is-number": "^3.0.0", 2912 | "repeat-string": "^1.6.1" 2913 | }, 2914 | "dependencies": { 2915 | "is-number": { 2916 | "version": "3.0.0", 2917 | "bundled": true, 2918 | "dev": true, 2919 | "requires": { 2920 | "kind-of": "^3.0.2" 2921 | } 2922 | } 2923 | } 2924 | }, 2925 | "trim-right": { 2926 | "version": "1.0.1", 2927 | "bundled": true, 2928 | "dev": true 2929 | }, 2930 | "uglify-js": { 2931 | "version": "2.8.29", 2932 | "bundled": true, 2933 | "dev": true, 2934 | "optional": true, 2935 | "requires": { 2936 | "source-map": "~0.5.1", 2937 | "uglify-to-browserify": "~1.0.0", 2938 | "yargs": "~3.10.0" 2939 | }, 2940 | "dependencies": { 2941 | "yargs": { 2942 | "version": "3.10.0", 2943 | "bundled": true, 2944 | "dev": true, 2945 | "optional": true, 2946 | "requires": { 2947 | "camelcase": "^1.0.2", 2948 | "cliui": "^2.1.0", 2949 | "decamelize": "^1.0.0", 2950 | "window-size": "0.1.0" 2951 | } 2952 | } 2953 | } 2954 | }, 2955 | "uglify-to-browserify": { 2956 | "version": "1.0.2", 2957 | "bundled": true, 2958 | "dev": true, 2959 | "optional": true 2960 | }, 2961 | "union-value": { 2962 | "version": "1.0.0", 2963 | "bundled": true, 2964 | "dev": true, 2965 | "requires": { 2966 | "arr-union": "^3.1.0", 2967 | "get-value": "^2.0.6", 2968 | "is-extendable": "^0.1.1", 2969 | "set-value": "^0.4.3" 2970 | }, 2971 | "dependencies": { 2972 | "extend-shallow": { 2973 | "version": "2.0.1", 2974 | "bundled": true, 2975 | "dev": true, 2976 | "requires": { 2977 | "is-extendable": "^0.1.0" 2978 | } 2979 | }, 2980 | "set-value": { 2981 | "version": "0.4.3", 2982 | "bundled": true, 2983 | "dev": true, 2984 | "requires": { 2985 | "extend-shallow": "^2.0.1", 2986 | "is-extendable": "^0.1.1", 2987 | "is-plain-object": "^2.0.1", 2988 | "to-object-path": "^0.3.0" 2989 | } 2990 | } 2991 | } 2992 | }, 2993 | "unset-value": { 2994 | "version": "1.0.0", 2995 | "bundled": true, 2996 | "dev": true, 2997 | "requires": { 2998 | "has-value": "^0.3.1", 2999 | "isobject": "^3.0.0" 3000 | }, 3001 | "dependencies": { 3002 | "has-value": { 3003 | "version": "0.3.1", 3004 | "bundled": true, 3005 | "dev": true, 3006 | "requires": { 3007 | "get-value": "^2.0.3", 3008 | "has-values": "^0.1.4", 3009 | "isobject": "^2.0.0" 3010 | }, 3011 | "dependencies": { 3012 | "isobject": { 3013 | "version": "2.1.0", 3014 | "bundled": true, 3015 | "dev": true, 3016 | "requires": { 3017 | "isarray": "1.0.0" 3018 | } 3019 | } 3020 | } 3021 | }, 3022 | "has-values": { 3023 | "version": "0.1.4", 3024 | "bundled": true, 3025 | "dev": true 3026 | }, 3027 | "isobject": { 3028 | "version": "3.0.1", 3029 | "bundled": true, 3030 | "dev": true 3031 | } 3032 | } 3033 | }, 3034 | "urix": { 3035 | "version": "0.1.0", 3036 | "bundled": true, 3037 | "dev": true 3038 | }, 3039 | "use": { 3040 | "version": "3.1.0", 3041 | "bundled": true, 3042 | "dev": true, 3043 | "requires": { 3044 | "kind-of": "^6.0.2" 3045 | }, 3046 | "dependencies": { 3047 | "kind-of": { 3048 | "version": "6.0.2", 3049 | "bundled": true, 3050 | "dev": true 3051 | } 3052 | } 3053 | }, 3054 | "validate-npm-package-license": { 3055 | "version": "3.0.3", 3056 | "bundled": true, 3057 | "dev": true, 3058 | "requires": { 3059 | "spdx-correct": "^3.0.0", 3060 | "spdx-expression-parse": "^3.0.0" 3061 | } 3062 | }, 3063 | "which": { 3064 | "version": "1.3.0", 3065 | "bundled": true, 3066 | "dev": true, 3067 | "requires": { 3068 | "isexe": "^2.0.0" 3069 | } 3070 | }, 3071 | "which-module": { 3072 | "version": "2.0.0", 3073 | "bundled": true, 3074 | "dev": true 3075 | }, 3076 | "window-size": { 3077 | "version": "0.1.0", 3078 | "bundled": true, 3079 | "dev": true, 3080 | "optional": true 3081 | }, 3082 | "wordwrap": { 3083 | "version": "0.0.3", 3084 | "bundled": true, 3085 | "dev": true 3086 | }, 3087 | "wrap-ansi": { 3088 | "version": "2.1.0", 3089 | "bundled": true, 3090 | "dev": true, 3091 | "requires": { 3092 | "string-width": "^1.0.1", 3093 | "strip-ansi": "^3.0.1" 3094 | }, 3095 | "dependencies": { 3096 | "is-fullwidth-code-point": { 3097 | "version": "1.0.0", 3098 | "bundled": true, 3099 | "dev": true, 3100 | "requires": { 3101 | "number-is-nan": "^1.0.0" 3102 | } 3103 | }, 3104 | "string-width": { 3105 | "version": "1.0.2", 3106 | "bundled": true, 3107 | "dev": true, 3108 | "requires": { 3109 | "code-point-at": "^1.0.0", 3110 | "is-fullwidth-code-point": "^1.0.0", 3111 | "strip-ansi": "^3.0.0" 3112 | } 3113 | } 3114 | } 3115 | }, 3116 | "wrappy": { 3117 | "version": "1.0.2", 3118 | "bundled": true, 3119 | "dev": true 3120 | }, 3121 | "write-file-atomic": { 3122 | "version": "1.3.4", 3123 | "bundled": true, 3124 | "dev": true, 3125 | "requires": { 3126 | "graceful-fs": "^4.1.11", 3127 | "imurmurhash": "^0.1.4", 3128 | "slide": "^1.1.5" 3129 | } 3130 | }, 3131 | "y18n": { 3132 | "version": "3.2.1", 3133 | "bundled": true, 3134 | "dev": true 3135 | }, 3136 | "yallist": { 3137 | "version": "2.1.2", 3138 | "bundled": true, 3139 | "dev": true 3140 | }, 3141 | "yargs": { 3142 | "version": "11.1.0", 3143 | "bundled": true, 3144 | "dev": true, 3145 | "requires": { 3146 | "cliui": "^4.0.0", 3147 | "decamelize": "^1.1.1", 3148 | "find-up": "^2.1.0", 3149 | "get-caller-file": "^1.0.1", 3150 | "os-locale": "^2.0.0", 3151 | "require-directory": "^2.1.1", 3152 | "require-main-filename": "^1.0.1", 3153 | "set-blocking": "^2.0.0", 3154 | "string-width": "^2.0.0", 3155 | "which-module": "^2.0.0", 3156 | "y18n": "^3.2.1", 3157 | "yargs-parser": "^9.0.2" 3158 | }, 3159 | "dependencies": { 3160 | "ansi-regex": { 3161 | "version": "3.0.0", 3162 | "bundled": true, 3163 | "dev": true 3164 | }, 3165 | "camelcase": { 3166 | "version": "4.1.0", 3167 | "bundled": true, 3168 | "dev": true 3169 | }, 3170 | "cliui": { 3171 | "version": "4.1.0", 3172 | "bundled": true, 3173 | "dev": true, 3174 | "requires": { 3175 | "string-width": "^2.1.1", 3176 | "strip-ansi": "^4.0.0", 3177 | "wrap-ansi": "^2.0.0" 3178 | } 3179 | }, 3180 | "strip-ansi": { 3181 | "version": "4.0.0", 3182 | "bundled": true, 3183 | "dev": true, 3184 | "requires": { 3185 | "ansi-regex": "^3.0.0" 3186 | } 3187 | }, 3188 | "yargs-parser": { 3189 | "version": "9.0.2", 3190 | "bundled": true, 3191 | "dev": true, 3192 | "requires": { 3193 | "camelcase": "^4.1.0" 3194 | } 3195 | } 3196 | } 3197 | }, 3198 | "yargs-parser": { 3199 | "version": "8.1.0", 3200 | "bundled": true, 3201 | "dev": true, 3202 | "requires": { 3203 | "camelcase": "^4.1.0" 3204 | }, 3205 | "dependencies": { 3206 | "camelcase": { 3207 | "version": "4.1.0", 3208 | "bundled": true, 3209 | "dev": true 3210 | } 3211 | } 3212 | } 3213 | } 3214 | }, 3215 | "oauth-sign": { 3216 | "version": "0.8.2", 3217 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 3218 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", 3219 | "dev": true 3220 | }, 3221 | "once": { 3222 | "version": "1.4.0", 3223 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3224 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 3225 | "dev": true, 3226 | "requires": { 3227 | "wrappy": "1" 3228 | } 3229 | }, 3230 | "onecolor": { 3231 | "version": "3.0.5", 3232 | "resolved": "https://registry.npmjs.org/onecolor/-/onecolor-3.0.5.tgz", 3233 | "integrity": "sha1-Nu/zIgE3nv3xGA+0ReUajiQl+fY=" 3234 | }, 3235 | "opener": { 3236 | "version": "1.4.3", 3237 | "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", 3238 | "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", 3239 | "dev": true 3240 | }, 3241 | "os-homedir": { 3242 | "version": "1.0.2", 3243 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 3244 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 3245 | "dev": true 3246 | }, 3247 | "own-or": { 3248 | "version": "1.0.0", 3249 | "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", 3250 | "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=", 3251 | "dev": true 3252 | }, 3253 | "own-or-env": { 3254 | "version": "1.0.1", 3255 | "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.1.tgz", 3256 | "integrity": "sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw==", 3257 | "dev": true, 3258 | "requires": { 3259 | "own-or": "^1.0.0" 3260 | } 3261 | }, 3262 | "path-is-absolute": { 3263 | "version": "1.0.1", 3264 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3265 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 3266 | "dev": true 3267 | }, 3268 | "performance-now": { 3269 | "version": "2.1.0", 3270 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 3271 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", 3272 | "dev": true 3273 | }, 3274 | "postcss": { 3275 | "version": "7.0.0", 3276 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.0.tgz", 3277 | "integrity": "sha512-ACgL/mXREjfCothsspfbxdiXIQowQeEyW7TJgsvAgCK8igWa2ZNCsbGNGnasbEF1++L9xb7qYpo23Aa3rGmiCg==", 3278 | "requires": { 3279 | "chalk": "^2.4.1", 3280 | "source-map": "^0.6.1", 3281 | "supports-color": "^5.4.0" 3282 | }, 3283 | "dependencies": { 3284 | "ansi-styles": { 3285 | "version": "3.2.1", 3286 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 3287 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 3288 | "requires": { 3289 | "color-convert": "^1.9.0" 3290 | } 3291 | }, 3292 | "chalk": { 3293 | "version": "2.4.1", 3294 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", 3295 | "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", 3296 | "requires": { 3297 | "ansi-styles": "^3.2.1", 3298 | "escape-string-regexp": "^1.0.5", 3299 | "supports-color": "^5.3.0" 3300 | } 3301 | }, 3302 | "source-map": { 3303 | "version": "0.6.1", 3304 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3305 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 3306 | }, 3307 | "supports-color": { 3308 | "version": "5.4.0", 3309 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", 3310 | "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", 3311 | "requires": { 3312 | "has-flag": "^3.0.0" 3313 | } 3314 | } 3315 | } 3316 | }, 3317 | "process-nextick-args": { 3318 | "version": "2.0.0", 3319 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 3320 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", 3321 | "dev": true, 3322 | "optional": true 3323 | }, 3324 | "pseudomap": { 3325 | "version": "1.0.2", 3326 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 3327 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 3328 | "dev": true 3329 | }, 3330 | "punycode": { 3331 | "version": "1.4.1", 3332 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 3333 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 3334 | "dev": true 3335 | }, 3336 | "qs": { 3337 | "version": "6.5.2", 3338 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 3339 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 3340 | "dev": true 3341 | }, 3342 | "readable-stream": { 3343 | "version": "2.3.6", 3344 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 3345 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 3346 | "dev": true, 3347 | "optional": true, 3348 | "requires": { 3349 | "core-util-is": "~1.0.0", 3350 | "inherits": "~2.0.3", 3351 | "isarray": "~1.0.0", 3352 | "process-nextick-args": "~2.0.0", 3353 | "safe-buffer": "~5.1.1", 3354 | "string_decoder": "~1.1.1", 3355 | "util-deprecate": "~1.0.1" 3356 | } 3357 | }, 3358 | "request": { 3359 | "version": "2.87.0", 3360 | "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", 3361 | "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", 3362 | "dev": true, 3363 | "requires": { 3364 | "aws-sign2": "~0.7.0", 3365 | "aws4": "^1.6.0", 3366 | "caseless": "~0.12.0", 3367 | "combined-stream": "~1.0.5", 3368 | "extend": "~3.0.1", 3369 | "forever-agent": "~0.6.1", 3370 | "form-data": "~2.3.1", 3371 | "har-validator": "~5.0.3", 3372 | "http-signature": "~1.2.0", 3373 | "is-typedarray": "~1.0.0", 3374 | "isstream": "~0.1.2", 3375 | "json-stringify-safe": "~5.0.1", 3376 | "mime-types": "~2.1.17", 3377 | "oauth-sign": "~0.8.2", 3378 | "performance-now": "^2.1.0", 3379 | "qs": "~6.5.1", 3380 | "safe-buffer": "^5.1.1", 3381 | "tough-cookie": "~2.3.3", 3382 | "tunnel-agent": "^0.6.0", 3383 | "uuid": "^3.1.0" 3384 | } 3385 | }, 3386 | "rimraf": { 3387 | "version": "2.6.2", 3388 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 3389 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 3390 | "dev": true, 3391 | "requires": { 3392 | "glob": "^7.0.5" 3393 | } 3394 | }, 3395 | "safe-buffer": { 3396 | "version": "5.1.2", 3397 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 3398 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 3399 | "dev": true 3400 | }, 3401 | "safer-buffer": { 3402 | "version": "2.1.2", 3403 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 3404 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 3405 | "dev": true 3406 | }, 3407 | "signal-exit": { 3408 | "version": "3.0.2", 3409 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 3410 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 3411 | "dev": true 3412 | }, 3413 | "source-map": { 3414 | "version": "0.6.1", 3415 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3416 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3417 | "dev": true 3418 | }, 3419 | "source-map-support": { 3420 | "version": "0.5.6", 3421 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz", 3422 | "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", 3423 | "dev": true, 3424 | "requires": { 3425 | "buffer-from": "^1.0.0", 3426 | "source-map": "^0.6.0" 3427 | } 3428 | }, 3429 | "sprintf-js": { 3430 | "version": "1.0.3", 3431 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 3432 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 3433 | "dev": true 3434 | }, 3435 | "sshpk": { 3436 | "version": "1.14.2", 3437 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", 3438 | "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", 3439 | "dev": true, 3440 | "requires": { 3441 | "asn1": "~0.2.3", 3442 | "assert-plus": "^1.0.0", 3443 | "bcrypt-pbkdf": "^1.0.0", 3444 | "dashdash": "^1.12.0", 3445 | "ecc-jsbn": "~0.1.1", 3446 | "getpass": "^0.1.1", 3447 | "jsbn": "~0.1.0", 3448 | "safer-buffer": "^2.0.2", 3449 | "tweetnacl": "~0.14.0" 3450 | } 3451 | }, 3452 | "stack-utils": { 3453 | "version": "1.0.1", 3454 | "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", 3455 | "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=", 3456 | "dev": true 3457 | }, 3458 | "string_decoder": { 3459 | "version": "1.1.1", 3460 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 3461 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 3462 | "dev": true, 3463 | "optional": true, 3464 | "requires": { 3465 | "safe-buffer": "~5.1.0" 3466 | } 3467 | }, 3468 | "strip-ansi": { 3469 | "version": "3.0.1", 3470 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 3471 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 3472 | "dev": true, 3473 | "requires": { 3474 | "ansi-regex": "^2.0.0" 3475 | } 3476 | }, 3477 | "tap": { 3478 | "version": "12.0.1", 3479 | "resolved": "https://registry.npmjs.org/tap/-/tap-12.0.1.tgz", 3480 | "integrity": "sha512-iEJytWaZy8risvfRjuV4+ST+Lrrui/MW2ZCWn01ZaMn0NKFej4+PpBy6bXGOg9+cEGNmI7d3Sdka/zTUZUGidA==", 3481 | "dev": true, 3482 | "requires": { 3483 | "bind-obj-methods": "^2.0.0", 3484 | "bluebird": "^3.5.1", 3485 | "clean-yaml-object": "^0.1.0", 3486 | "color-support": "^1.1.0", 3487 | "coveralls": "^3.0.1", 3488 | "foreground-child": "^1.3.3", 3489 | "fs-exists-cached": "^1.0.0", 3490 | "function-loop": "^1.0.1", 3491 | "glob": "^7.0.0", 3492 | "isexe": "^2.0.0", 3493 | "js-yaml": "^3.11.0", 3494 | "minipass": "^2.3.0", 3495 | "mkdirp": "^0.5.1", 3496 | "nyc": "^11.8.0", 3497 | "opener": "^1.4.1", 3498 | "os-homedir": "^1.0.2", 3499 | "own-or": "^1.0.0", 3500 | "own-or-env": "^1.0.1", 3501 | "rimraf": "^2.6.2", 3502 | "signal-exit": "^3.0.0", 3503 | "source-map-support": "^0.5.6", 3504 | "stack-utils": "^1.0.0", 3505 | "tap-mocha-reporter": "^3.0.7", 3506 | "tap-parser": "^7.0.0", 3507 | "tmatch": "^4.0.0", 3508 | "trivial-deferred": "^1.0.1", 3509 | "tsame": "^2.0.0", 3510 | "write-file-atomic": "^2.3.0", 3511 | "yapool": "^1.0.0" 3512 | } 3513 | }, 3514 | "tap-mocha-reporter": { 3515 | "version": "3.0.7", 3516 | "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-3.0.7.tgz", 3517 | "integrity": "sha512-GHVXJ38C3oPRpM3YUc43JlGdpVZYiKeT1fmAd3HH2+J+ZWwsNAUFvRRdoGsXLw9+gU9o+zXpBqhS/oXyRQYwlA==", 3518 | "dev": true, 3519 | "requires": { 3520 | "color-support": "^1.1.0", 3521 | "debug": "^2.1.3", 3522 | "diff": "^1.3.2", 3523 | "escape-string-regexp": "^1.0.3", 3524 | "glob": "^7.0.5", 3525 | "js-yaml": "^3.3.1", 3526 | "readable-stream": "^2.1.5", 3527 | "tap-parser": "^5.1.0", 3528 | "unicode-length": "^1.0.0" 3529 | }, 3530 | "dependencies": { 3531 | "tap-parser": { 3532 | "version": "5.4.0", 3533 | "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-5.4.0.tgz", 3534 | "integrity": "sha512-BIsIaGqv7uTQgTW1KLTMNPSEQf4zDDPgYOBRdgOfuB+JFOLRBfEu6cLa/KvMvmqggu1FKXDfitjLwsq4827RvA==", 3535 | "dev": true, 3536 | "requires": { 3537 | "events-to-array": "^1.0.1", 3538 | "js-yaml": "^3.2.7", 3539 | "readable-stream": "^2" 3540 | } 3541 | } 3542 | } 3543 | }, 3544 | "tap-parser": { 3545 | "version": "7.0.0", 3546 | "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-7.0.0.tgz", 3547 | "integrity": "sha512-05G8/LrzqOOFvZhhAk32wsGiPZ1lfUrl+iV7+OkKgfofZxiceZWMHkKmow71YsyVQ8IvGBP2EjcIjE5gL4l5lA==", 3548 | "dev": true, 3549 | "requires": { 3550 | "events-to-array": "^1.0.1", 3551 | "js-yaml": "^3.2.7", 3552 | "minipass": "^2.2.0" 3553 | } 3554 | }, 3555 | "tmatch": { 3556 | "version": "4.0.0", 3557 | "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-4.0.0.tgz", 3558 | "integrity": "sha512-Ynn2Gsp+oCvYScQXeV+cCs7citRDilq0qDXA6tuvFwDgiYyyaq7D5vKUlAPezzZR5NDobc/QMeN6e5guOYmvxg==", 3559 | "dev": true 3560 | }, 3561 | "tough-cookie": { 3562 | "version": "2.3.4", 3563 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", 3564 | "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", 3565 | "dev": true, 3566 | "requires": { 3567 | "punycode": "^1.4.1" 3568 | } 3569 | }, 3570 | "trivial-deferred": { 3571 | "version": "1.0.1", 3572 | "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", 3573 | "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", 3574 | "dev": true 3575 | }, 3576 | "tsame": { 3577 | "version": "2.0.0", 3578 | "resolved": "https://registry.npmjs.org/tsame/-/tsame-2.0.0.tgz", 3579 | "integrity": "sha512-dAuzcnOPdqZYojylFQzEes95UDjve3HqKrlTCeLZKSDPMTsn3smzHZqsJj/sWD8wOUkg0RD++B11evyLn2+bIw==", 3580 | "dev": true 3581 | }, 3582 | "tunnel-agent": { 3583 | "version": "0.6.0", 3584 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 3585 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 3586 | "dev": true, 3587 | "requires": { 3588 | "safe-buffer": "^5.0.1" 3589 | } 3590 | }, 3591 | "tweetnacl": { 3592 | "version": "0.14.5", 3593 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 3594 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 3595 | "dev": true, 3596 | "optional": true 3597 | }, 3598 | "unicode-length": { 3599 | "version": "1.0.3", 3600 | "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz", 3601 | "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=", 3602 | "dev": true, 3603 | "requires": { 3604 | "punycode": "^1.3.2", 3605 | "strip-ansi": "^3.0.1" 3606 | } 3607 | }, 3608 | "util-deprecate": { 3609 | "version": "1.0.2", 3610 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3611 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 3612 | "dev": true, 3613 | "optional": true 3614 | }, 3615 | "uuid": { 3616 | "version": "3.3.2", 3617 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 3618 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", 3619 | "dev": true 3620 | }, 3621 | "verror": { 3622 | "version": "1.10.0", 3623 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 3624 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 3625 | "dev": true, 3626 | "requires": { 3627 | "assert-plus": "^1.0.0", 3628 | "core-util-is": "1.0.2", 3629 | "extsprintf": "^1.2.0" 3630 | } 3631 | }, 3632 | "which": { 3633 | "version": "1.3.1", 3634 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 3635 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 3636 | "dev": true, 3637 | "requires": { 3638 | "isexe": "^2.0.0" 3639 | } 3640 | }, 3641 | "wrappy": { 3642 | "version": "1.0.2", 3643 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3644 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3645 | "dev": true 3646 | }, 3647 | "write-file-atomic": { 3648 | "version": "2.3.0", 3649 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", 3650 | "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", 3651 | "dev": true, 3652 | "requires": { 3653 | "graceful-fs": "^4.1.11", 3654 | "imurmurhash": "^0.1.4", 3655 | "signal-exit": "^3.0.2" 3656 | } 3657 | }, 3658 | "yallist": { 3659 | "version": "2.1.2", 3660 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 3661 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 3662 | "dev": true 3663 | }, 3664 | "yapool": { 3665 | "version": "1.0.0", 3666 | "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz", 3667 | "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=", 3668 | "dev": true 3669 | } 3670 | } 3671 | } 3672 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "csswring", 3 | "description": "A CSS minifier for PostCSS", 4 | "version": "7.0.0", 5 | "author": "Kyo Nagashima (https://kyonagashima.com/)", 6 | "bin": { 7 | "csswring": "./bin/csswring.js" 8 | }, 9 | "bugs": { 10 | "url": "https://github.com/hail2u/node-csswring/issues" 11 | }, 12 | "dependencies": { 13 | "minimist": "^1.2.0", 14 | "onecolor": "^3.0.5", 15 | "postcss": "^7.0.0" 16 | }, 17 | "devDependencies": { 18 | "nodeunit": "^0.11.3" 19 | }, 20 | "homepage": "https://github.com/hail2u/node-csswring", 21 | "keywords": [ 22 | "css", 23 | "minification", 24 | "postcss-plugin" 25 | ], 26 | "license": "MIT", 27 | "main": "index.js", 28 | "repository": { 29 | "type": "git", 30 | "url": "https://github.com/hail2u/node-csswring.git" 31 | }, 32 | "scripts": { 33 | "test": "nodeunit test" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /test/expected/angle.css: -------------------------------------------------------------------------------- 1 | .foo{transform:rotate(123deg) skew(456grad)}.bar{transform:rotateX(720deg) skewX(1080deg)}.baz{transform:rotateY(10deg) skewY(18deg)} 2 | -------------------------------------------------------------------------------- /test/expected/at-import-url.css: -------------------------------------------------------------------------------- 1 | @import"foo.css";@import"bar.css";@import'baz.css';@import"qux.css";@import'quux.css';@import"corge.css" print,screen and (min-width:999px) 2 | -------------------------------------------------------------------------------- /test/expected/at-import.css: -------------------------------------------------------------------------------- 1 | @import"foo.css";.foo{display:block}.bar{display:block} 2 | -------------------------------------------------------------------------------- /test/expected/at-keyframes-name.css: -------------------------------------------------------------------------------- 1 | @keyframes foo{from{top:0}to{top:100px}} 2 | -------------------------------------------------------------------------------- /test/expected/at-media-params.css: -------------------------------------------------------------------------------- 1 | @media(min-width:99px) and (max-width:999px){.bar{display:auto}} 2 | -------------------------------------------------------------------------------- /test/expected/at-namespace-url.css: -------------------------------------------------------------------------------- 1 | @namespace"foo.css";@namespace"bar.css";@namespace'baz.css';@namespace"qux.css";@namespace'quux.css';@namespace corge"corge.css" 2 | -------------------------------------------------------------------------------- /test/expected/at-rule-aftername.css: -------------------------------------------------------------------------------- 1 | @import"foo.css";@media screen{.bar{display:block}}@media(min-width:99px){.baz{display:block}}@font-face{font-family:Qux;src:url(qux.woff) format("woff")} 2 | -------------------------------------------------------------------------------- /test/expected/at-supports-condition.css: -------------------------------------------------------------------------------- 1 | @supports(color:#fff) and (margin:0){.foo{display:block}}@supports(top:0) or (line-height:.9){.bar{display:block}} 2 | -------------------------------------------------------------------------------- /test/expected/calc.css: -------------------------------------------------------------------------------- 1 | .foo{width:calc(100vw + 12px);min-width:calc(10em - 10px);max-width:calc((100vw + 10em/2)*12 - 10px)} 2 | -------------------------------------------------------------------------------- /test/expected/color.css: -------------------------------------------------------------------------------- 1 | .foo{border-top-color:#369;border-right-color:#844d2e;border-bottom-color:#a0e;border-left-color:red;border-color:khaki;background-image:linear-gradient(#fff,#000)}.bar{border-color:rgba(128,128,128,.5);color:rgba(128,128,128,.5);background-color:transparent} 2 | -------------------------------------------------------------------------------- /test/expected/comment.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * This comment will *NOT* strip. 3 | */.foo{display:block} -------------------------------------------------------------------------------- /test/expected/content.css: -------------------------------------------------------------------------------- 1 | .foo{content:'0em 0.111 rgb(0, 0, 0)'} 2 | -------------------------------------------------------------------------------- /test/expected/decimal-with-zeros.css: -------------------------------------------------------------------------------- 1 | .foo{line-height:.6;transform:rotate(-.9deg)} 2 | -------------------------------------------------------------------------------- /test/expected/duplicate-decl.css: -------------------------------------------------------------------------------- 1 | .foo{color:white;color:black} 2 | -------------------------------------------------------------------------------- /test/expected/duplicate-selector.css: -------------------------------------------------------------------------------- 1 | .foo{display:block} 2 | -------------------------------------------------------------------------------- /test/expected/empty-at-rule-block.css: -------------------------------------------------------------------------------- 1 | .foo{display:block}@keyframes baz{/*! not empty */} 2 | -------------------------------------------------------------------------------- /test/expected/empty-ruleset.css: -------------------------------------------------------------------------------- 1 | .foo{display:block}.qux{/*! not empty */} 2 | -------------------------------------------------------------------------------- /test/expected/erroneous-prop.css: -------------------------------------------------------------------------------- 1 | .foo{--色:green;color:green} 2 | -------------------------------------------------------------------------------- /test/expected/extra-semicolon.css: -------------------------------------------------------------------------------- 1 | .foo{color:red;background-color:cyan} 2 | -------------------------------------------------------------------------------- /test/expected/font-face.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:Foo;src:url(foo.woff) format("woff")}@font-face{font-family:Bar;src:url(bar.woff) format("woff")} 2 | -------------------------------------------------------------------------------- /test/expected/font-family.css: -------------------------------------------------------------------------------- 1 | .foo{font-family:Hoefler Text,Constantia,Georgia,serif}.bar{font-family:"0font","--font","-0font",serif}.baz{font-family:Glyphicons Halflings,serif} 2 | -------------------------------------------------------------------------------- /test/expected/font-weight.css: -------------------------------------------------------------------------------- 1 | .foo{font-weight:400}.bar{font-weight:700} 2 | -------------------------------------------------------------------------------- /test/expected/freq.css: -------------------------------------------------------------------------------- 1 | .foo{pitch:12kHz} 2 | -------------------------------------------------------------------------------- /test/expected/hacks_min-width-0-percent.css: -------------------------------------------------------------------------------- 1 | .foo{min-width:0%} 2 | -------------------------------------------------------------------------------- /test/expected/hacks_prop-comment.css: -------------------------------------------------------------------------------- 1 | .foo{display:block;display/**/:block;display/*\**/:block\9} 2 | -------------------------------------------------------------------------------- /test/expected/hacks_sign-prop.css: -------------------------------------------------------------------------------- 1 | .foo{display:block;_display:block;*display:block} 2 | -------------------------------------------------------------------------------- /test/expected/invalid-at-rule.css: -------------------------------------------------------------------------------- 1 | /*! Special comment */@charset "UTF-8";@import"foo.css";.bar{display:block}.qux{display:block} 2 | -------------------------------------------------------------------------------- /test/expected/invalid-keyframe.css: -------------------------------------------------------------------------------- 1 | @keyframes foo{from{top:0}50%,to{top:100px}25%,75%{top:50px}} 2 | -------------------------------------------------------------------------------- /test/expected/issue11.css: -------------------------------------------------------------------------------- 1 | .foo{transition:0s} 2 | -------------------------------------------------------------------------------- /test/expected/issue13.css: -------------------------------------------------------------------------------- 1 | .foo{background-image:url(1.png),url(2.png),linear-gradient(to bottom,#000 0,#fff 100%)}@font-face{font-family:f;src:url(f.eot#a) format("embedded-opentype"),url(f.woff) format("woff"),url(f.ttf) format("truetype"),url(f.svg#b) format("svg")} 2 | -------------------------------------------------------------------------------- /test/expected/issue17.css: -------------------------------------------------------------------------------- 1 | .foo .bar .baz{display:auto} 2 | -------------------------------------------------------------------------------- /test/expected/issue19.css: -------------------------------------------------------------------------------- 1 | @media(min-width:99px){.foo,.bar{display:auto}} 2 | -------------------------------------------------------------------------------- /test/expected/issue3.css: -------------------------------------------------------------------------------- 1 | .foo{border:1px solid #666} 2 | -------------------------------------------------------------------------------- /test/expected/issue30.css: -------------------------------------------------------------------------------- 1 | .foo{background-image:url("data:image/svg+xml,")}.bar{background-image:url('data:image/svg+xml,')} 2 | -------------------------------------------------------------------------------- /test/expected/issue34.css: -------------------------------------------------------------------------------- 1 | .foo{background-image:linear-gradient(green 0,green 100%)} 2 | -------------------------------------------------------------------------------- /test/expected/issue36.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:Foo;src:url(foo.woff) format("woff")} 2 | -------------------------------------------------------------------------------- /test/expected/issue37.css: -------------------------------------------------------------------------------- 1 | .foo[att=foo],.bar[att=bar],.baz[att="baz?"],.qux[att="q u x"]{display:block} 2 | -------------------------------------------------------------------------------- /test/expected/issue40.css: -------------------------------------------------------------------------------- 1 | .foo{font-family:"ヒラギノ角ゴ Pro W3",serif}.bar[att="ほげ"]{display:block} 2 | -------------------------------------------------------------------------------- /test/expected/issue52.css: -------------------------------------------------------------------------------- 1 | .foo{padding-left:15px;padding-right:15px}.bar{color:white;padding:10px;margin:0;color:black}.baz{color:black;padding:10px;color:white;margin:0} 2 | -------------------------------------------------------------------------------- /test/expected/issue53.css: -------------------------------------------------------------------------------- 1 | .foo{color:black} 2 | -------------------------------------------------------------------------------- /test/expected/issue54.css: -------------------------------------------------------------------------------- 1 | .foo{background-image:url("foo(foo)")}.bar{background-image:url('bar(bar)')}.baz{background-image:url("baz(baz)")}div{background-image:url('data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%201%201%22%20preserveAspectRatio%3D%22none%22%3E%3ClinearGradient%20id%3D%22gradient%22%20gradientUnits%3D%22userSpaceOnUse%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%22100%25%22%20y2%3D%220%25%22%3E%3Cstop%20offset%3D%220%25%22%20stop-color%3D%22%23ff0000%22%2F%3E%3Cstop%20offset%3D%2230%25%22%20stop-color%3D%22%23008000%22%2F%3E%3Cstop%20offset%3D%22100%25%22%20stop-color%3D%22%230000ff%22%2F%3E%3C%2FlinearGradient%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22url(%23gradient)%22%20%2F%3E%3C%2Fsvg%3E')} 2 | -------------------------------------------------------------------------------- /test/expected/issue57.css: -------------------------------------------------------------------------------- 1 | .foo{flex:1 0 0%} 2 | -------------------------------------------------------------------------------- /test/expected/issue62.css: -------------------------------------------------------------------------------- 1 | .foo{width:calc(100% - 200px + 0%)} 2 | -------------------------------------------------------------------------------- /test/expected/issue66.css: -------------------------------------------------------------------------------- 1 | :root{--foo:red}.foo{--bar:green;color:var(--foo);background-color:var(--bar)} 2 | -------------------------------------------------------------------------------- /test/expected/issue69.css: -------------------------------------------------------------------------------- 1 | [foo="-"]{color:black} 2 | -------------------------------------------------------------------------------- /test/expected/issue70.css: -------------------------------------------------------------------------------- 1 | :root{--foo:"Foo"}.foo{font-family:var(--foo)}.bar{font-family:Bar,var(--foo),serif}.baz{font-family:"var(--foo)"} 2 | -------------------------------------------------------------------------------- /test/expected/issue85.css: -------------------------------------------------------------------------------- 1 | :root{--foo:0px}.foo{top:calc(var(--foo))} 2 | -------------------------------------------------------------------------------- /test/expected/issue87.css: -------------------------------------------------------------------------------- 1 | [class=foo i]{display:block}[class="bar baz"i]{display:block} 2 | -------------------------------------------------------------------------------- /test/expected/multiple-values.css: -------------------------------------------------------------------------------- 1 | .foo{margin:1px 2px 3px;padding:1px 2px;border-color:#000 #fff;border-radius:1px;border-spacing:1px;border-style:solid double solid inset;border-width:1px;background-position:0 0;-webkit-transform-origin:0 0} 2 | -------------------------------------------------------------------------------- /test/expected/number-leading-zeros.css: -------------------------------------------------------------------------------- 1 | .foo{top:10.7px} 2 | -------------------------------------------------------------------------------- /test/expected/ruleset-without-selector.css: -------------------------------------------------------------------------------- 1 | .foo{display:block} 2 | -------------------------------------------------------------------------------- /test/expected/selector-att.css: -------------------------------------------------------------------------------- 1 | [foo],[bar=bar],[baz*=baz],[qux~='qu]x'],[quux|="qu\]ux"],[corge=corge][grault]{display:block} 2 | -------------------------------------------------------------------------------- /test/expected/selector-combinator.css: -------------------------------------------------------------------------------- 1 | .foo>.bar{display:block}.foo+.baz{display:block}.foo~.qux{display:block}.foo .\{display:block}.foo\+ .bar{display:block}.foo\++.baz{display:block} 2 | -------------------------------------------------------------------------------- /test/expected/selector-function.css: -------------------------------------------------------------------------------- 1 | .foo:lang(ja-JP),.bar:nth-child(2n+1),.baz:nth-last-child(-1n-1),.qux:nth-of-type(odd),.quux:not(bar),.corge:not([class^="corge corge-"]){display:block} 2 | -------------------------------------------------------------------------------- /test/expected/selector-pseudo-elements.css: -------------------------------------------------------------------------------- 1 | .foo:before,.bar:first-line{color:black} 2 | -------------------------------------------------------------------------------- /test/expected/selector-universal.css: -------------------------------------------------------------------------------- 1 | .foo,.foo .foo,#bar,#bar #bar,[baz],[baz] [baz],:link{color:red} 2 | -------------------------------------------------------------------------------- /test/expected/time.css: -------------------------------------------------------------------------------- 1 | .foo{pause-after:.21s;pause-before:2.1s;pause:4321ms} 2 | -------------------------------------------------------------------------------- /test/expected/url.css: -------------------------------------------------------------------------------- 1 | .foo{list-style:circle url(foo.png);background-image:url(foo.png);background:url(foo.png) #eee no-repeat fixed;cursor:url("open(parens.cur"),auto;border-image:url("escaped-close)parens.png") 30 30 repeat} 2 | -------------------------------------------------------------------------------- /test/expected/white-space.css: -------------------------------------------------------------------------------- 1 | .foo,.bar,.baz{display:block}@media screen and (min-width:99px){.bar{display:block!important;background-image:url(bar.png)}} 2 | -------------------------------------------------------------------------------- /test/expected/zero-value-unit.css: -------------------------------------------------------------------------------- 1 | .foo{border:0 solid red}.bar{pitch:0Hz;transform:rotate(0deg);transition-duration:0s} 2 | -------------------------------------------------------------------------------- /test/fixtures/angle.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | transform: rotate(123deg) skew(456grad); 3 | } 4 | 5 | .bar { 6 | transform: rotateX(720deg) skewX(1200grad); 7 | } 8 | 9 | .baz { 10 | transform: rotateY(10deg) skewY(20grad); 11 | } 12 | -------------------------------------------------------------------------------- /test/fixtures/at-import-url.css: -------------------------------------------------------------------------------- 1 | @import url(foo.css); 2 | @import url("bar.css"); 3 | @import url('baz.css'); 4 | @import "qux.css"; 5 | @import 'quux.css'; 6 | @import url("corge.css") print, 7 | screen and ( min-width: 999px ) ; 8 | -------------------------------------------------------------------------------- /test/fixtures/at-import.css: -------------------------------------------------------------------------------- 1 | @import "foo.css"; 2 | 3 | .foo { 4 | display: block; 5 | } 6 | 7 | @import "bar.css"; 8 | 9 | .bar { 10 | display: block; 11 | } 12 | -------------------------------------------------------------------------------- /test/fixtures/at-keyframes-name.css: -------------------------------------------------------------------------------- 1 | @keyframes "foo" { 2 | from { 3 | top: 0px; 4 | } 5 | 6 | to { 7 | top: 100px; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/fixtures/at-media-params.css: -------------------------------------------------------------------------------- 1 | @media /* foo */ ( min-width: 99px ) and 2 | ( max-width: 999px ) { 3 | .bar { 4 | display: auto; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/fixtures/at-namespace-url.css: -------------------------------------------------------------------------------- 1 | @namespace url(foo.css); 2 | @namespace url("bar.css"); 3 | @namespace url('baz.css'); 4 | @namespace "qux.css"; 5 | @namespace 'quux.css'; 6 | @namespace corge url("corge.css"); 7 | -------------------------------------------------------------------------------- /test/fixtures/at-rule-aftername.css: -------------------------------------------------------------------------------- 1 | @import "foo.css"; 2 | 3 | @media screen { 4 | .bar { 5 | display: block; 6 | } 7 | } 8 | 9 | @media 10 | (min-width: 99px) { 11 | .baz { 12 | display: block; 13 | } 14 | } 15 | 16 | @font-face 17 | { 18 | font-family: "Qux"; 19 | src: url("qux.woff") format("woff"); 20 | } 21 | -------------------------------------------------------------------------------- /test/fixtures/at-supports-condition.css: -------------------------------------------------------------------------------- 1 | @supports (color: rgb(255, 255, 255)) and (margin: 0 0 0 0) { 2 | .foo { 3 | display: block; 4 | } 5 | } 6 | 7 | @supports (top: 0px) or (line-height: 0.9) { 8 | .bar { 9 | display: block; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/fixtures/calc.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | width: calc( 100vw + 12px); 3 | min-width: calc(10em - 10px ); 4 | max-width: calc( (100vw + 10em / 2) * 12 - 10px ); 5 | } 6 | -------------------------------------------------------------------------------- /test/fixtures/color.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | border-top-color: rGb(51, 102, 153); 3 | border-right-color: hsL(22, 48.245823%, 34.8592227%); 4 | border-bottom-color: #aa00EE; 5 | border-left-color: rgb(255, 0, 0); 6 | border-color: #f0e68c; 7 | background-image: linear-gradient(rgb(255, 255, 255),#000000); 8 | } 9 | 10 | .bar { 11 | border-color: hslA(0, 0%, 50.2%, 0.5); 12 | color: rgba(128, 128, 128, 0.5); 13 | background-color: rgba(0, 0, 0, 0); 14 | } 15 | -------------------------------------------------------------------------------- /test/fixtures/comment.css: -------------------------------------------------------------------------------- 1 | /* 2 | * This comment will strip! 3 | */ 4 | 5 | /*! 6 | * This comment will *NOT* strip. 7 | */ 8 | 9 | .foo { 10 | display: block; 11 | } 12 | -------------------------------------------------------------------------------- /test/fixtures/content.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | content: '0em 0.111 rgb(0, 0, 0)'; 3 | } 4 | -------------------------------------------------------------------------------- /test/fixtures/decimal-with-zeros.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | line-height: 0.60; 3 | transform: rotate(-0.90deg); 4 | } 5 | -------------------------------------------------------------------------------- /test/fixtures/duplicate-decl.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | color: black; 3 | color: white; 4 | color: black; 5 | } 6 | -------------------------------------------------------------------------------- /test/fixtures/duplicate-selector.css: -------------------------------------------------------------------------------- 1 | .foo, 2 | .foo { 3 | display: block; 4 | } 5 | -------------------------------------------------------------------------------- /test/fixtures/empty-at-rule-block.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | display: block; 3 | } 4 | 5 | @media (min-width: 99px) { 6 | } 7 | 8 | @font-face { 9 | font-style: normal; 10 | } 11 | 12 | @supports (margin: 0) { 13 | .bar {} 14 | } 15 | 16 | @page { 17 | /* empty */ 18 | } 19 | 20 | @keyframes baz { 21 | /*! not empty */ 22 | } 23 | -------------------------------------------------------------------------------- /test/fixtures/empty-ruleset.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | display: block; 3 | } 4 | 5 | .bar { 6 | ; 7 | } 8 | 9 | .baz { 10 | /* empty */ 11 | } 12 | 13 | .qux { 14 | /*! not empty */ 15 | } 16 | -------------------------------------------------------------------------------- /test/fixtures/erroneous-prop.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | --色: green; 3 | color: green; 4 | _color: red; 5 | *color: red; 6 | !color: red; 7 | colo!r: red; 8 | } 9 | -------------------------------------------------------------------------------- /test/fixtures/extra-semicolon.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | color: red;;;;;;;; 3 | background-color: cyan; 4 | } 5 | -------------------------------------------------------------------------------- /test/fixtures/font-face.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "Foo"; 3 | src: url("foo.woff") format("woff"); 4 | font-style: normal; 5 | font-weight: normal; 6 | font-stretch: normal; 7 | unicode-range: U+0-10FFFF; 8 | font-variant: normal; 9 | font-feature-settings: normal; 10 | } 11 | 12 | @font-face { 13 | font-family: "Bar"; 14 | src: url("bar.woff") format("woff"); 15 | unicode-range: U+000000-10FFFF; 16 | font-weight: 400; 17 | } 18 | -------------------------------------------------------------------------------- /test/fixtures/font-family.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | font-family: "Hoefler Text", "Constantia", "Georgia", serif; 3 | } 4 | 5 | .bar { 6 | font-family: "0font", "--font", "-0font", serif; 7 | } 8 | 9 | .baz { 10 | font-family: 'Glyphicons Halflings', serif; 11 | } 12 | -------------------------------------------------------------------------------- /test/fixtures/font-weight.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | font-weight: normal; 3 | } 4 | 5 | .bar { 6 | font-weight: bold; 7 | } 8 | -------------------------------------------------------------------------------- /test/fixtures/freq.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | pitch: 12000Hz; 3 | } 4 | -------------------------------------------------------------------------------- /test/fixtures/hacks_min-width-0-percent.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | min-width: 0%; 3 | } 4 | -------------------------------------------------------------------------------- /test/fixtures/hacks_prop-comment.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | display: block; 3 | display/**/: block; 4 | display/*\**/: block\9; 5 | } 6 | -------------------------------------------------------------------------------- /test/fixtures/hacks_sign-prop.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | display: block; 3 | _display: block; 4 | *display: block; 5 | } 6 | -------------------------------------------------------------------------------- /test/fixtures/invalid-at-rule.css: -------------------------------------------------------------------------------- 1 | /*! Special comment */ 2 | @charset "UTF-8"; 3 | 4 | @charset "EUC-JP"; 5 | 6 | @import "foo.css"; 7 | 8 | .bar { 9 | display: block; 10 | } 11 | 12 | @charset "Shift_JIS"; 13 | 14 | @import "baz.css"; 15 | 16 | .qux { 17 | display: block; 18 | } 19 | -------------------------------------------------------------------------------- /test/fixtures/invalid-keyframe.css: -------------------------------------------------------------------------------- 1 | @keyframes foo { 2 | from { 3 | top: 0px; 4 | } 5 | 6 | 50%, to { 7 | top: 100px; 8 | } 9 | 10 | bar { 11 | top: 999px; 12 | } 13 | 14 | 101% { 15 | top: 101px; 16 | } 17 | 18 | 25%, 75%, -25% { 19 | top: 50px; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /test/fixtures/issue11.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | transition: 0s; 3 | transition: 0ms; 4 | } 5 | -------------------------------------------------------------------------------- /test/fixtures/issue13.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | background-image: url("1.png"), 3 | url("2.png"), 4 | linear-gradient( 5 | to bottom, 6 | #000 0%, 7 | #fff 100% 8 | ) 9 | ; 10 | } 11 | 12 | @font-face { 13 | font-family: "f"; 14 | src: url("f.eot#a") format("embedded-opentype"), 15 | url("f.woff") format("woff"), 16 | url("f.ttf") format("truetype"), 17 | url("f.svg#b") format("svg"); 18 | } 19 | -------------------------------------------------------------------------------- /test/fixtures/issue17.css: -------------------------------------------------------------------------------- 1 | .foo 2 | .bar 3 | .baz 4 | { 5 | display: auto; 6 | } 7 | -------------------------------------------------------------------------------- /test/fixtures/issue19.css: -------------------------------------------------------------------------------- 1 | @media /* a */ (min-width: 99px) { 2 | .foo /* b */, .bar { 3 | display: auto 4 | ; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/fixtures/issue3.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | border: 1px solid rgb(102, 102, 102); 3 | } 4 | -------------------------------------------------------------------------------- /test/fixtures/issue30.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | background-image: url("data:image/svg+xml,"); 3 | } 4 | 5 | .bar { 6 | background-image: url('data:image/svg+xml,'); 7 | } 8 | -------------------------------------------------------------------------------- /test/fixtures/issue34.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | background-image: linear-gradient(rgb(0,128,0)0%,rgb(0,128,0)100%); 3 | } 4 | -------------------------------------------------------------------------------- /test/fixtures/issue36.css: -------------------------------------------------------------------------------- 1 | @font-face{ 2 | font-family: "Foo"; 3 | src: url("foo.woff") format("woff"); 4 | } 5 | -------------------------------------------------------------------------------- /test/fixtures/issue37.css: -------------------------------------------------------------------------------- 1 | .foo[att="foo"], 2 | .bar[att=bar], 3 | .baz[att="baz?"], 4 | .qux[att="q u x"] { 5 | display: block; 6 | } 7 | -------------------------------------------------------------------------------- /test/fixtures/issue40.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | font-family: "ヒラギノ角ゴ Pro W3", serif; 3 | } 4 | 5 | .bar[att="ほげ"] { 6 | display: block; 7 | } 8 | -------------------------------------------------------------------------------- /test/fixtures/issue52.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | padding-left: 15px; 3 | padding-right: 15px; 4 | padding-left: 15px; 5 | padding-right: 15px; 6 | } 7 | 8 | .bar { 9 | color: black; 10 | color: white; 11 | padding: 10px; 12 | color: black; 13 | color: white; 14 | padding: 10px; 15 | margin: 0; 16 | color: black; 17 | } 18 | 19 | .baz { 20 | color: black; 21 | color: white; 22 | padding: 10px; 23 | color: white; 24 | margin: 0; 25 | } 26 | -------------------------------------------------------------------------------- /test/fixtures/issue53.css: -------------------------------------------------------------------------------- 1 | /*# This comment will strip! */ 2 | .foo { 3 | color: black; 4 | } 5 | /*# sourceMappingURL=this.comment.will.strip.depending.on.postcss.map.option */ 6 | -------------------------------------------------------------------------------- /test/fixtures/issue54.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | background-image: url("foo(foo)"); 3 | } 4 | 5 | .bar { 6 | background-image: url('bar(bar)'); 7 | } 8 | 9 | .baz { 10 | background-image: url(baz\(baz\)); 11 | } 12 | 13 | /* Copied from http://lesscss.org/functions/#misc-functions-svg-gradient */ 14 | div { 15 | background-image: url('data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%201%201%22%20preserveAspectRatio%3D%22none%22%3E%3ClinearGradient%20id%3D%22gradient%22%20gradientUnits%3D%22userSpaceOnUse%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%22100%25%22%20y2%3D%220%25%22%3E%3Cstop%20offset%3D%220%25%22%20stop-color%3D%22%23ff0000%22%2F%3E%3Cstop%20offset%3D%2230%25%22%20stop-color%3D%22%23008000%22%2F%3E%3Cstop%20offset%3D%22100%25%22%20stop-color%3D%22%230000ff%22%2F%3E%3C%2FlinearGradient%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22url(%23gradient)%22%20%2F%3E%3C%2Fsvg%3E'); 16 | } 17 | -------------------------------------------------------------------------------- /test/fixtures/issue57.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | flex: 1 0 0%; 3 | } 4 | -------------------------------------------------------------------------------- /test/fixtures/issue62.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | width: calc(100% - 200px + 0%); 3 | } 4 | -------------------------------------------------------------------------------- /test/fixtures/issue66.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --foo: red; 3 | } 4 | 5 | .foo { 6 | --bar: green; 7 | color: var(--foo); 8 | background-color: var(--bar); 9 | } 10 | -------------------------------------------------------------------------------- /test/fixtures/issue69.css: -------------------------------------------------------------------------------- 1 | [foo="-"] { 2 | color: black; 3 | } 4 | -------------------------------------------------------------------------------- /test/fixtures/issue70.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --foo: "Foo"; 3 | } 4 | 5 | .foo { 6 | font-family: var(--foo); 7 | } 8 | 9 | .bar { 10 | font-family: Bar, var(--foo), serif; 11 | } 12 | 13 | .baz { 14 | font-family: "var(--foo)"; 15 | } 16 | -------------------------------------------------------------------------------- /test/fixtures/issue85.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --foo: 0px; 3 | } 4 | 5 | .foo { 6 | top: calc(var(--foo)); 7 | } 8 | -------------------------------------------------------------------------------- /test/fixtures/issue87.css: -------------------------------------------------------------------------------- 1 | [class = "foo" i] { 2 | display: block; 3 | } 4 | 5 | [class = "bar baz" 6 | i] { 7 | display: block; 8 | } 9 | -------------------------------------------------------------------------------- /test/fixtures/multiple-values.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | margin: 1px 2px 3px 2px; 3 | padding: 1px 2px 1px 2px; 4 | border-color: #000 #fff #000; 5 | border-radius: 1px 1px 1px; 6 | border-spacing: 1px 1px; 7 | border-style: solid double solid inset; 8 | border-width: 1px 1px 1px 1px; 9 | background-position: 0 0; 10 | -webkit-transform-origin: 0 0; 11 | } 12 | -------------------------------------------------------------------------------- /test/fixtures/number-leading-zeros.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | top: 00010.7px; 3 | } 4 | -------------------------------------------------------------------------------- /test/fixtures/ruleset-without-selector.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | display: block; 3 | } 4 | 5 | { 6 | display: block; 7 | } 8 | -------------------------------------------------------------------------------- /test/fixtures/selector-att.css: -------------------------------------------------------------------------------- 1 | [ foo ], 2 | [ bar = "bar" ], 3 | [ baz *= "baz" ], 4 | [ qux ~= 'qu]x'], 5 | [quux |= qu\]ux], 6 | [corge="corge"][grault] { 7 | display: block; 8 | } 9 | -------------------------------------------------------------------------------- /test/fixtures/selector-combinator.css: -------------------------------------------------------------------------------- 1 | .foo > .bar { 2 | display: block; 3 | } 4 | 5 | .foo + .baz { 6 | display: block; 7 | } 8 | 9 | .foo ~ .qux { 10 | display: block; 11 | } 12 | 13 | .foo .\ { 14 | display: block; 15 | } 16 | 17 | .foo\+ .bar { 18 | display: block; 19 | } 20 | 21 | .foo\+ + .baz { 22 | display: block; 23 | } 24 | -------------------------------------------------------------------------------- /test/fixtures/selector-function.css: -------------------------------------------------------------------------------- 1 | .foo:lang(ja-JP), 2 | .bar:nth-child(2n + 1), 3 | .baz:nth-last-child( -1n - 1), 4 | .qux:nth-of-type(odd ), 5 | .quux:not( bar ), 6 | .corge:not([class^="corge corge-"]) { 7 | display: block; 8 | } 9 | -------------------------------------------------------------------------------- /test/fixtures/selector-pseudo-elements.css: -------------------------------------------------------------------------------- 1 | .foo::before, 2 | .bar::first-line { 3 | color: black; 4 | } 5 | -------------------------------------------------------------------------------- /test/fixtures/selector-universal.css: -------------------------------------------------------------------------------- 1 | *.foo, 2 | .foo *.foo, 3 | *#bar, 4 | #bar *#bar, 5 | *[baz], 6 | [baz] *[baz], 7 | *:link { 8 | color: red; 9 | } 10 | -------------------------------------------------------------------------------- /test/fixtures/time.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | pause-after: 210ms; 3 | pause-before: 2100ms; 4 | pause: 4321ms; 5 | } 6 | -------------------------------------------------------------------------------- /test/fixtures/url.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | list-style: circle url("foo.png"); 3 | background-image: url('foo.png'); 4 | background: url(foo.png) rgb(238, 238, 238) no-repeat fixed; 5 | cursor: url("open(parens.cur"), auto; 6 | border-image: url(escaped-close\)parens.png) 30 30 repeat; 7 | } 8 | -------------------------------------------------------------------------------- /test/fixtures/white-space.css: -------------------------------------------------------------------------------- 1 | 2 | .foo, .bar, 3 | 4 | 5 | .baz { 6 | 7 | display : 8 | block ; 9 | } 10 | 11 | @media screen and 12 | ( 13 | min-width : 99px ) { 14 | .bar 15 | { 16 | display 17 | : block 18 | !important; 19 | background-image: url( 20 | "bar.png" 21 | ); } 22 | } 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /test/fixtures/zero-value-unit.css: -------------------------------------------------------------------------------- 1 | .foo { 2 | border: 0px solid red; 3 | } 4 | 5 | .bar { 6 | pitch: 0kHz; 7 | transform: rotate(0grad); 8 | transition-duration: 0ms; 9 | } 10 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const path = require("path"); 3 | const postcss = require("postcss"); 4 | 5 | const csswring = require("../index"); 6 | const doNothing = postcss.plugin("do-nothing", () => () => {}); 7 | 8 | exports["Public API"] = test => { 9 | const input = ".foo{color:black}"; 10 | const expected = postcss(doNothing).process(input).css; 11 | test.expect(2); 12 | test.strictEqual(csswring.wring(input).css, expected); 13 | test.strictEqual(postcss([csswring()]).process(input).css, expected); 14 | test.done(); 15 | }; 16 | 17 | exports["Option: PostCSS options"] = test => { 18 | const input = ".foo{color:black}"; 19 | const opts = { 20 | from: "from.css", 21 | map: { 22 | inline: false 23 | } 24 | }; 25 | const processed = csswring.wring(input, opts); 26 | const expected = postcss(doNothing).process(input, opts); 27 | test.expect(2); 28 | test.strictEqual(processed.css, expected.css); 29 | test.deepEqual(processed.map, expected.map); 30 | test.done(); 31 | }; 32 | 33 | exports["Option: preserveHacks"] = test => { 34 | let expected = ".hacks{_color:red}"; 35 | const input = expected; 36 | const opts = { 37 | preserveHacks: true 38 | }; 39 | test.expect(3); 40 | test.strictEqual(csswring.wring(input, opts).css, expected); 41 | expected = postcss([csswring()]).process(input).css; 42 | test.notStrictEqual(postcss([csswring(opts)]).process(input).css, expected); 43 | expected = ""; 44 | test.strictEqual(csswring.wring(input).css, expected); 45 | test.done(); 46 | }; 47 | 48 | exports["Option: removeAllComments"] = test => { 49 | let expected = ".foo{display:block}\n/*# sourceMappingURL=to.css.map */"; 50 | const input = 51 | "/*!comment*/.foo{display:block}\n/*# sourceMappingURL=to.css.map */"; 52 | const opts = { 53 | map: { 54 | inline: false 55 | }, 56 | removeAllComments: true 57 | }; 58 | test.expect(3); 59 | test.strictEqual(csswring.wring(input, opts).css, expected); 60 | expected = postcss([csswring(opts)]).process(input).css; 61 | test.notStrictEqual(postcss([csswring()]).process(input).css, expected); 62 | opts.removeAllComments = false; 63 | expected = input; 64 | test.strictEqual(csswring.wring(input, opts).css, expected); 65 | test.done(); 66 | }; 67 | 68 | exports["Real CSS"] = test => { 69 | const testCases = fs.readdirSync(path.join(__dirname, "fixtures")); 70 | const readExpected = file => 71 | fs.readFileSync(path.join(__dirname, "expected", file), "utf8").trim(); 72 | const readInput = file => 73 | fs.readFileSync(path.join(__dirname, "fixtures", file), "utf8"); 74 | 75 | test.expect(testCases.length); 76 | testCases.forEach(testCase => { 77 | const opts = {}; 78 | 79 | if (testCase.indexOf("hacks_") === 0) { 80 | opts.preserveHacks = true; 81 | } 82 | 83 | test.strictEqual( 84 | csswring.wring(readInput(testCase), opts).css, 85 | readExpected(testCase), 86 | testCase 87 | ); 88 | }); 89 | test.done(); 90 | }; 91 | --------------------------------------------------------------------------------