diff --git a/package.json b/package.json index edb54da86da..924bec951c3 100644 --- a/package.json +++ b/package.json @@ -86,6 +86,7 @@ "postcss-modules": "^0.8.0", "posthtml-include": "^1.1.0", "prettier": "^1.9.1", + "pug": "^2.0.3", "rimraf": "^2.6.1", "sinon": "^4.2.2", "sourcemap-validator": "^1.0.6", diff --git a/src/Parser.js b/src/Parser.js index 759e0e55c7c..c5c82725fbb 100644 --- a/src/Parser.js +++ b/src/Parser.js @@ -42,6 +42,9 @@ class Parser { this.registerExtension('vert', './assets/GLSLAsset'); this.registerExtension('frag', './assets/GLSLAsset'); + this.registerExtension('jade', './assets/PugAsset'); + this.registerExtension('pug', './assets/PugAsset'); + let extensions = options.extensions || {}; for (let ext in extensions) { this.registerExtension(ext, extensions[ext]); diff --git a/src/assets/PugAsset.js b/src/assets/PugAsset.js new file mode 100644 index 00000000000..33af2b2f05e --- /dev/null +++ b/src/assets/PugAsset.js @@ -0,0 +1,39 @@ +const path = require('path'); +const Asset = require('../Asset'); +const localRequire = require('../utils/localRequire'); + +class PugAsset extends Asset { + constructor(name, pkg, options) { + super(name, pkg, options); + this.type = 'html'; + } + + async generate() { + const pug = await localRequire('pug', this.name); + const config = + (await this.getConfig(['.pugrc', '.pugrc.js', 'pug.config.js'])) || {}; + + const compiled = pug.compile(this.contents, { + compileDebug: false, + filename: this.name, + basedir: path.dirname(this.name), + pretty: !this.options.minify, + templateName: path.basename(this.basename, path.extname(this.basename)), + filters: config.filters, + filterOptions: config.filterOptions, + filterAliases: config.filterAliases + }); + + if (compiled.dependencies) { + for (let item of compiled.dependencies) { + this.addDependency(item, { + includedInParent: true + }); + } + } + + return compiled(); + } +} + +module.exports = PugAsset; diff --git a/test/integration/pug-filters/.pugrc.js b/test/integration/pug-filters/.pugrc.js new file mode 100644 index 00000000000..7bdd70b075e --- /dev/null +++ b/test/integration/pug-filters/.pugrc.js @@ -0,0 +1,7 @@ +module.exports = { + filters: { + 'custom-filter': function (text, options) { + return 'FILTERED: ' + text; + } + } +} diff --git a/test/integration/pug-filters/index.pug b/test/integration/pug-filters/index.pug new file mode 100644 index 00000000000..62cf6580ff1 --- /dev/null +++ b/test/integration/pug-filters/index.pug @@ -0,0 +1,2 @@ +:custom-filter() + Hello! diff --git a/test/integration/pug-include-extends/base.pug b/test/integration/pug-include-extends/base.pug new file mode 100644 index 00000000000..dc4484b080b --- /dev/null +++ b/test/integration/pug-include-extends/base.pug @@ -0,0 +1,4 @@ +doctype html +html + body + block content diff --git a/test/integration/pug-include-extends/expect.html b/test/integration/pug-include-extends/expect.html new file mode 100644 index 00000000000..2297dc6f052 --- /dev/null +++ b/test/integration/pug-include-extends/expect.html @@ -0,0 +1,6 @@ + + + +

Yep, it's working!

+ + \ No newline at end of file diff --git a/test/integration/pug-include-extends/index.pug b/test/integration/pug-include-extends/index.pug new file mode 100644 index 00000000000..bf78263f1a7 --- /dev/null +++ b/test/integration/pug-include-extends/index.pug @@ -0,0 +1,4 @@ +extends ./base.pug + +block content + include other.pug diff --git a/test/integration/pug-include-extends/other.pug b/test/integration/pug-include-extends/other.pug new file mode 100644 index 00000000000..9c9550484a3 --- /dev/null +++ b/test/integration/pug-include-extends/other.pug @@ -0,0 +1 @@ +h1 Yep, it's working! diff --git a/test/integration/pug-minify/index.pug b/test/integration/pug-minify/index.pug new file mode 100644 index 00000000000..362dbd62064 --- /dev/null +++ b/test/integration/pug-minify/index.pug @@ -0,0 +1,6 @@ +doctype html +html + head + title Minify + body + h1 Minified diff --git a/test/integration/pug-mixins/index.pug b/test/integration/pug-mixins/index.pug new file mode 100644 index 00000000000..4653a52fd13 --- /dev/null +++ b/test/integration/pug-mixins/index.pug @@ -0,0 +1,8 @@ +include ./mixins.pug + +doctype html +html + head + title Pug variables + body + +greetings('Parcel') diff --git a/test/integration/pug-mixins/mixins.pug b/test/integration/pug-mixins/mixins.pug new file mode 100644 index 00000000000..21118568355 --- /dev/null +++ b/test/integration/pug-mixins/mixins.pug @@ -0,0 +1,2 @@ +mixin greetings(name) + h1 Greetings, #{name} diff --git a/test/integration/pug-var/100x100.png b/test/integration/pug-var/100x100.png new file mode 100644 index 00000000000..8a1daa0121d Binary files /dev/null and b/test/integration/pug-var/100x100.png differ diff --git a/test/integration/pug-var/index.pug b/test/integration/pug-var/index.pug new file mode 100644 index 00000000000..f93efa9e041 --- /dev/null +++ b/test/integration/pug-var/index.pug @@ -0,0 +1,7 @@ +doctype html +html + head + title Pug variables + body + - var image = './100x100.png' + img(src=image, alt='100x100') diff --git a/test/integration/pug/100x100.png b/test/integration/pug/100x100.png new file mode 100644 index 00000000000..8a1daa0121d Binary files /dev/null and b/test/integration/pug/100x100.png differ diff --git a/test/integration/pug/icons.svg b/test/integration/pug/icons.svg new file mode 100644 index 00000000000..21f0a75277c --- /dev/null +++ b/test/integration/pug/icons.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/test/integration/pug/index.css b/test/integration/pug/index.css new file mode 100644 index 00000000000..67ce83e4d09 --- /dev/null +++ b/test/integration/pug/index.css @@ -0,0 +1,3 @@ +body { + background: red; +} diff --git a/test/integration/pug/index.js b/test/integration/pug/index.js new file mode 100644 index 00000000000..f096229a664 --- /dev/null +++ b/test/integration/pug/index.js @@ -0,0 +1 @@ +alert('Hi'); diff --git a/test/integration/pug/index.pug b/test/integration/pug/index.pug new file mode 100644 index 00000000000..a3111fd7fb0 --- /dev/null +++ b/test/integration/pug/index.pug @@ -0,0 +1,16 @@ +doctype html +html + head + link(rel='stylesheet', href='index.css') + meta(property='og:image', content='100x100.png') + body + h1 Hello world + a(href='#hash_link') Hash link + a(href='mailto:someone@acme.com') Mailto link + a(href='tel:+33636757575') Tel link + script(src='index.js') + script(src='https://unpkg.com/parcel-bundler') + i hello + i world + svg + use(href='icons.svg#icon-repo-pull') diff --git a/test/pug.js b/test/pug.js new file mode 100644 index 00000000000..c9a578ad014 --- /dev/null +++ b/test/pug.js @@ -0,0 +1,120 @@ +const assert = require('assert'); +const fs = require('fs'); +const {bundle, assertBundleTree} = require('./utils'); + +describe('pug', function() { + it('should support bundling HTML', async function() { + const b = await bundle(__dirname + '/integration/pug/index.pug'); + + assertBundleTree(b, { + name: 'index.html', + assets: ['index.pug'], + childBundles: [ + { + type: 'png', + assets: ['100x100.png'], + childBundles: [] + }, + { + type: 'svg', + assets: ['icons.svg'], + childBundles: [] + }, + { + type: 'css', + assets: ['index.css'], + childBundles: [] + }, + { + type: 'js', + assets: ['index.js'], + childBundles: [ + { + type: 'map' + } + ] + } + ] + }); + + const files = fs.readdirSync(__dirname + '/dist'); + const html = fs.readFileSync(__dirname + '/dist/index.html'); + for (const file of files) { + const ext = file.match(/\.([0-9a-z]+)(?:[?#]|$)/i)[0]; + if (file !== 'index.html' && ext !== '.map') { + assert(html.includes(file)); + } + } + }); + + it('should support include and extends files', async function() { + const b = await bundle( + __dirname + '/integration/pug-include-extends/index.pug' + ); + + assertBundleTree(b, { + name: 'index.html', + assets: ['index.pug'] + }); + + const html = fs.readFileSync(__dirname + '/dist/index.html', 'utf-8'); + const expect = fs.readFileSync( + __dirname + '/integration/pug-include-extends/expect.html', + 'utf-8' + ); + + assert.equal(html, expect, 'Content mismatch'); + }); + + it('should support variables', async function() { + const b = await bundle(__dirname + '/integration/pug-var/index.pug'); + + assertBundleTree(b, { + name: 'index.html', + assets: ['index.pug'] + }); + + const html = fs.readFileSync(__dirname + '/dist/index.html', 'utf-8'); + + assert(/src="\/?100x100.*.png"/.test(html)); + }); + + it('should support mixins', async function() { + const b = await bundle(__dirname + '/integration/pug-mixins/index.pug'); + + assertBundleTree(b, { + name: 'index.html', + assets: ['index.pug'] + }); + + const html = fs.readFileSync(__dirname + '/dist/index.html', 'utf-8'); + assert(html.includes('Greetings, Parcel')); + }); + + it('should support filters', async function() { + const b = await bundle(__dirname + '/integration/pug-filters/index.pug'); + + assertBundleTree(b, { + name: 'index.html', + assets: ['index.pug'] + }); + + const html = fs.readFileSync(__dirname + '/dist/index.html', 'utf-8'); + assert(html.includes('FILTERED: Hello!')); + }); + + it('should minify HTML in production mode', async function() { + const b = await bundle(__dirname + '/integration/pug-minify/index.pug', { + production: true + }); + + assertBundleTree(b, { + name: 'index.html', + assets: ['index.pug'] + }); + + const html = fs.readFileSync(__dirname + '/dist/index.html', 'utf-8'); + + assert(html.includes('Minified')); + }); +}); diff --git a/yarn.lock b/yarn.lock index 479a0ecc052..0d54350d53a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8,20 +8,40 @@ dependencies: samsam "1.3.0" +"@types/babel-types@*", "@types/babel-types@^7.0.0": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.1.tgz#1405e5396968c4302994b0161ce405b72b874257" + +"@types/babylon@^6.16.2": + version "6.16.2" + resolved "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.2.tgz#062ce63b693d9af1c246f5aedf928bc9c30589c8" + dependencies: + "@types/babel-types" "*" + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" +acorn-globals@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + acorn-jsx@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" dependencies: acorn "^3.0.4" -acorn@^3.0.4: +acorn@^3.0.4, acorn@^3.1.0: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" +acorn@^4.0.4, acorn@~4.0.2: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + acorn@^5.0.0, acorn@^5.5.0: version "5.5.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" @@ -1113,6 +1133,12 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +character-parser@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" + dependencies: + is-regex "^1.0.3" + chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" @@ -1180,6 +1206,12 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +clean-css@^4.1.11: + version "4.1.11" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.11.tgz#2ecdf145aba38f54740f26cefd0ff3e03e125d6a" + dependencies: + source-map "0.5.x" + cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -1383,6 +1415,15 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" +constantinople@^3.0.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-3.1.2.tgz#d45ed724f57d3d10500017a7d3a889c1381ae647" + dependencies: + "@types/babel-types" "^7.0.0" + "@types/babylon" "^6.16.2" + babel-types "^6.26.0" + babylon "^6.18.0" + constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -1798,6 +1839,10 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" +doctypes@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" + dom-serializer@0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" @@ -3053,6 +3098,13 @@ is-equal-shallow@^0.1.3: dependencies: is-primitive "^2.0.0" +is-expression@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-3.0.0.tgz#39acaa6be7fd1f3471dc42c7416e61c24317ac9f" + dependencies: + acorn "~4.0.2" + object-assign "^4.0.1" + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -3185,7 +3237,7 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" -is-promise@^2.1.0: +is-promise@^2.0.0, is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" @@ -3193,7 +3245,7 @@ is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" -is-regex@^1.0.4: +is-regex@^1.0.3, is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" dependencies: @@ -3344,6 +3396,10 @@ js-beautify@^1.7.5: mkdirp "~0.5.0" nopt "~3.0.1" +js-stringify@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" + js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" @@ -3436,6 +3492,13 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +jstransformer@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" + dependencies: + is-promise "^2.0.0" + promise "^7.0.1" + just-extend@^1.1.27: version "1.1.27" resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-1.1.27.tgz#ec6e79410ff914e472652abfa0e603c03d60e905" @@ -5072,7 +5135,7 @@ progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" -promise@^7.1.1: +promise@^7.0.1, promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" dependencies: @@ -5100,6 +5163,99 @@ public-encrypt@^4.0.0: parse-asn1 "^5.0.0" randombytes "^2.0.1" +pug-attrs@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-2.0.3.tgz#a3095f970e64151f7bdad957eef55fb5d7905d15" + dependencies: + constantinople "^3.0.1" + js-stringify "^1.0.1" + pug-runtime "^2.0.4" + +pug-code-gen@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-2.0.1.tgz#0951ec83225d74d8cfc476a7f99a259b5f7d050c" + dependencies: + constantinople "^3.0.1" + doctypes "^1.1.0" + js-stringify "^1.0.1" + pug-attrs "^2.0.3" + pug-error "^1.3.2" + pug-runtime "^2.0.4" + void-elements "^2.0.1" + with "^5.0.0" + +pug-error@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-1.3.2.tgz#53ae7d9d29bb03cf564493a026109f54c47f5f26" + +pug-filters@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-3.1.0.tgz#27165555bc04c236e4aa2b0366246dfa021b626e" + dependencies: + clean-css "^4.1.11" + constantinople "^3.0.1" + jstransformer "1.0.0" + pug-error "^1.3.2" + pug-walk "^1.1.7" + resolve "^1.1.6" + uglify-js "^2.6.1" + +pug-lexer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-4.0.0.tgz#210c18457ef2e1760242740c5e647bd794cec278" + dependencies: + character-parser "^2.1.1" + is-expression "^3.0.0" + pug-error "^1.3.2" + +pug-linker@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-3.0.5.tgz#9e9a7ae4005682d027deeb96b000f88eeb83a02f" + dependencies: + pug-error "^1.3.2" + pug-walk "^1.1.7" + +pug-load@^2.0.11: + version "2.0.11" + resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-2.0.11.tgz#e648e57ed113fe2c1f45d57858ea2bad6bc01527" + dependencies: + object-assign "^4.1.0" + pug-walk "^1.1.7" + +pug-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-5.0.0.tgz#e394ad9b3fca93123940aff885c06e44ab7e68e4" + dependencies: + pug-error "^1.3.2" + token-stream "0.0.1" + +pug-runtime@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-2.0.4.tgz#e178e1bda68ab2e8c0acfc9bced2c54fd88ceb58" + +pug-strip-comments@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-1.0.3.tgz#f1559592206edc6f85310dacf4afb48a025af59f" + dependencies: + pug-error "^1.3.2" + +pug-walk@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-1.1.7.tgz#c00d5c5128bac5806bec15d2b7e7cdabe42531f3" + +pug@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pug/-/pug-2.0.3.tgz#71cba82537c95a5eab7ed04696e4221f53aa878e" + dependencies: + pug-code-gen "^2.0.1" + pug-filters "^3.1.0" + pug-lexer "^4.0.0" + pug-linker "^3.0.5" + pug-load "^2.0.11" + pug-parser "^5.0.0" + pug-runtime "^2.0.4" + pug-strip-comments "^1.0.3" + punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" @@ -5449,7 +5605,7 @@ resolve@^0.6.1: version "0.6.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz#dd957982e7e736debdf53b58a4dd91754575dd46" -resolve@^1.0.0: +resolve@^1.0.0, resolve@^1.1.6: version "1.6.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.6.0.tgz#0fbd21278b27b4004481c395349e7aba60a9ff5c" dependencies: @@ -5770,6 +5926,10 @@ source-map@0.1.x, source-map@~0.1.x: dependencies: amdefine ">=0.0.4" +source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + source-map@0.6.1, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -5780,10 +5940,6 @@ source-map@^0.4.2, source-map@^0.4.4: dependencies: amdefine ">=0.0.4" -source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - sourcemap-validator@^1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/sourcemap-validator/-/sourcemap-validator-1.0.7.tgz#d76aaadbe2c6ec269293b5f212100fad91eef260" @@ -6190,6 +6346,10 @@ to-regex@^3.0.1: regex-not "^1.0.2" safe-regex "^1.1.0" +token-stream@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a" + toml@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/toml/-/toml-2.3.3.tgz#8d683d729577cb286231dfc7a8affe58d31728fb" @@ -6261,7 +6421,7 @@ uglify-es@^3.2.1: commander "~2.13.0" source-map "~0.6.1" -uglify-js@^2.6: +uglify-js@^2.6, uglify-js@^2.6.1: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" dependencies: @@ -6415,6 +6575,10 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" +void-elements@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" @@ -6443,6 +6607,13 @@ window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" +with@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/with/-/with-5.1.1.tgz#fa4daa92daf32c4ea94ed453c81f04686b575dfe" + dependencies: + acorn "^3.1.0" + acorn-globals "^3.0.0" + wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"