From 953c2967f212ef73211bddd090a77fc027bc836d Mon Sep 17 00:00:00 2001 From: Efthymis Sarmpanis Date: Mon, 20 Nov 2017 12:16:34 +0200 Subject: [PATCH] Basic support for style and script preprocessors Suggestion for #181 and #876 --- package.json | 5 + src/index.ts | 80 ++- src/interfaces.ts | 13 +- test/preprocess/index.js | 169 ++++++ .../use-coffeescript-preprocessor/_config.js | 19 + .../expected.html | 1 + .../use-coffeescript-preprocessor/input.html | 8 + .../samples/use-pug-preprocessor/_config.js | 15 + .../samples/use-pug-preprocessor/expected.css | 1 + .../samples/use-pug-preprocessor/input.pug | 10 + .../_config.js | 26 + .../_variables.scss | 2 + .../expected.css | 1 + .../input.html | 13 + .../samples/use-scss-preprocessor/_config.js | 26 + .../use-scss-preprocessor/expected.css | 1 + .../samples/use-scss-preprocessor/input.html | 14 + .../_config.js | 24 + .../expected.css | 1 + .../input.html | 12 + .../variables.styl | 2 + .../use-stylus-preprocessor/_config.js | 20 + .../use-stylus-preprocessor/expected.css | 1 + .../use-stylus-preprocessor/input.html | 13 + yarn.lock | 540 ++++++++++++++++-- 25 files changed, 970 insertions(+), 47 deletions(-) create mode 100644 test/preprocess/index.js create mode 100644 test/preprocess/samples/use-coffeescript-preprocessor/_config.js create mode 100644 test/preprocess/samples/use-coffeescript-preprocessor/expected.html create mode 100644 test/preprocess/samples/use-coffeescript-preprocessor/input.html create mode 100644 test/preprocess/samples/use-pug-preprocessor/_config.js create mode 100644 test/preprocess/samples/use-pug-preprocessor/expected.css create mode 100644 test/preprocess/samples/use-pug-preprocessor/input.pug create mode 100644 test/preprocess/samples/use-scss-preprocessor-with-external-files/_config.js create mode 100644 test/preprocess/samples/use-scss-preprocessor-with-external-files/_variables.scss create mode 100644 test/preprocess/samples/use-scss-preprocessor-with-external-files/expected.css create mode 100644 test/preprocess/samples/use-scss-preprocessor-with-external-files/input.html create mode 100644 test/preprocess/samples/use-scss-preprocessor/_config.js create mode 100644 test/preprocess/samples/use-scss-preprocessor/expected.css create mode 100644 test/preprocess/samples/use-scss-preprocessor/input.html create mode 100644 test/preprocess/samples/use-stylus-preprocessor-with-external-file/_config.js create mode 100644 test/preprocess/samples/use-stylus-preprocessor-with-external-file/expected.css create mode 100644 test/preprocess/samples/use-stylus-preprocessor-with-external-file/input.html create mode 100644 test/preprocess/samples/use-stylus-preprocessor-with-external-file/variables.styl create mode 100644 test/preprocess/samples/use-stylus-preprocessor/_config.js create mode 100644 test/preprocess/samples/use-stylus-preprocessor/expected.css create mode 100644 test/preprocess/samples/use-stylus-preprocessor/input.html diff --git a/package.json b/package.json index 6684fdbd4dae..6e3f0f9304d2 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "acorn": "^5.1.1", "chalk": "^2.0.1", "codecov": "^2.2.0", + "coffeescript": "^2.0.2", "console-group": "^0.3.2", "css-tree": "1.0.0-alpha22", "eslint": "^4.3.0", @@ -55,13 +56,16 @@ "estree-walker": "^0.5.1", "glob": "^7.1.1", "jsdom": "^11.1.0", + "less": "^2.7.3", "locate-character": "^2.0.0", "magic-string": "^0.22.3", "mocha": "^3.2.0", "nightmare": "^2.10.0", "node-resolve": "^1.3.3", + "node-sass": "^4.7.1", "nyc": "^11.1.0", "prettier": "^1.7.0", + "pug": "^2.0.0-rc.4", "reify": "^0.12.3", "rollup": "^0.48.2", "rollup-plugin-buble": "^0.15.0", @@ -74,6 +78,7 @@ "rollup-watch": "^4.3.1", "source-map": "^0.5.6", "source-map-support": "^0.4.8", + "stylus": "^0.54.5", "ts-node": "^3.3.0", "tslib": "^1.8.0", "typescript": "^2.6.1" diff --git a/src/index.ts b/src/index.ts index 529be61618ec..a6b1ccc32e46 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,12 +4,13 @@ import generate from './generators/dom/index'; import generateSSR from './generators/server-side-rendering/index'; import { assign } from './shared/index.js'; import Stylesheet from './css/Stylesheet'; -import { Parsed, CompileOptions, Warning } from './interfaces'; +import { Parsed, CompileOptions, Warning, PreprocessOptions, Preprocessor } from './interfaces'; +import { SourceMap } from 'magic-string'; const version = '__VERSION__'; function normalizeOptions(options: CompileOptions): CompileOptions { - let normalizedOptions = assign({ generate: 'dom' }, options); + let normalizedOptions = assign({ generate: 'dom', preprocessor: false }, options); const { onwarn, onerror } = normalizedOptions; normalizedOptions.onwarn = onwarn ? (warning: Warning) => onwarn(warning, defaultOnwarn) @@ -34,9 +35,78 @@ function defaultOnerror(error: Error) { throw error; } +function _parseAttributeValue(value: string | boolean) { + const curated = (value).replace(/"/ig, ''); + if (curated === 'true' || curated === 'false') { + return curated === 'true'; + } + return curated; +} + +function _parseStyleAttributes(str: string) { + const attrs = {}; + str.split(/\s+/).filter(Boolean).forEach(attr => { + const [name, value] = attr.split('='); + attrs[name] = _parseAttributeValue(value); + }); + return attrs; +} + +async function _doPreprocess(source, type: 'script' | 'style', preprocessor: Preprocessor) { + const exp = new RegExp(`<${type}([\\S\\s]*?)>([\\S\\s]*?)<\\/${type}>`, 'ig'); + const match = exp.exec(source); + if (match) { + const attributes: Record = _parseStyleAttributes(match[1]); + const content: string = match[2]; + const processed: { code: string, map?: SourceMap | string } = await preprocessor({ + content, + attributes + }); + return source.replace(content, processed.code || content); + } +} + +export async function preprocess(source: string, options: PreprocessOptions) { + const { markup, style, script } = options; + if (!!markup) { + try { + const processed: { code: string, map?: SourceMap | string } = await markup({ content: source }); + source = processed.code; + } catch (error) { + defaultOnerror(error); + } + } + + if (!!style) { + try { + source = await _doPreprocess(source, 'style', style); + } catch (error) { + defaultOnerror(error); + } + } + + if (!!script) { + try { + source = await _doPreprocess(source, 'script', script); + } catch (error) { + defaultOnerror(error); + } + } + + return { + // TODO return separated output, in future version where svelte.compile supports it: + // style: { code: styleCode, map: styleMap }, + // script { code: scriptCode, map: scriptMap }, + // markup { code: markupCode, map: markupMap }, + + toString() { + return source; + } + }; +} + export function compile(source: string, _options: CompileOptions) { const options = normalizeOptions(_options); - let parsed: Parsed; try { @@ -53,7 +123,7 @@ export function compile(source: string, _options: CompileOptions) { const compiler = options.generate === 'ssr' ? generateSSR : generate; return compiler(parsed, source, stylesheet, options); -} +}; export function create(source: string, _options: CompileOptions = {}) { _options.format = 'eval'; @@ -65,7 +135,7 @@ export function create(source: string, _options: CompileOptions = {}) { } try { - return (0,eval)(compiled.code); + return (0, eval)(compiled.code); } catch (err) { if (_options.onerror) { _options.onerror(err); diff --git a/src/interfaces.ts b/src/interfaces.ts index 3a9280df3cf1..bcfb24f5682f 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -1,3 +1,5 @@ +import {SourceMap} from 'magic-string'; + export interface Node { start: number; end: number; @@ -60,6 +62,7 @@ export interface CompileOptions { onerror?: (error: Error) => void; onwarn?: (warning: Warning) => void; + preprocessor?: ((raw: string) => string) | false ; } export interface GenerateOptions { @@ -78,4 +81,12 @@ export interface Visitor { export interface CustomElementOptions { tag?: string; props?: string[]; -} \ No newline at end of file +} + +export interface PreprocessOptions { + markup?: (options: {content: string}) => { code: string, map?: SourceMap | string }; + style?: Preprocessor; + script?: Preprocessor; +} + +export type Preprocessor = (options: {content: string, attributes: Record}) => { code: string, map?: SourceMap | string }; diff --git a/test/preprocess/index.js b/test/preprocess/index.js new file mode 100644 index 000000000000..209e81070b12 --- /dev/null +++ b/test/preprocess/index.js @@ -0,0 +1,169 @@ +import assert from 'assert'; +import * as fs from 'fs'; +import {parse} from 'acorn'; +import {addLineNumbers, env, normalizeHtml, svelte} from '../helpers.js'; + +function tryRequire(file) { + try { + const mod = require(file); + return mod.default || mod; + } catch (err) { + if (err.code !== 'MODULE_NOT_FOUND') throw err; + return null; + } +} + +function normalizeWarning(warning) { + warning.frame = warning.frame.replace(/^\n/, ''). + replace(/^\t+/gm, ''). + replace(/\s+$/gm, ''); + delete warning.filename; + delete warning.toString; + return warning; +} + +function checkCodeIsValid(code) { + try { + parse(code); + } catch (err) { + console.error(addLineNumbers(code)); + throw new Error(err.message); + } +} + +describe('preprocess', () => { + fs.readdirSync('test/preprocess/samples').forEach(dir => { + if (dir[0] === '.') return; + + // add .solo to a sample directory name to only run that test + const solo = /\.solo/.test(dir); + const skip = /\.skip/.test(dir); + + if (solo && process.env.CI) { + throw new Error('Forgot to remove `solo: true` from test'); + } + + (solo ? it.only : skip ? it.skip : it)(dir, () => { + const config = tryRequire(`./samples/${dir}/_config.js`) || {}; + const input = fs.existsSync(`test/preprocess/samples/${dir}/input.pug`) ? + fs.readFileSync(`test/preprocess/samples/${dir}/input.pug`, + 'utf-8').replace(/\s+$/, '') : + fs.readFileSync(`test/preprocess/samples/${dir}/input.html`, + 'utf-8').replace(/\s+$/, ''); + + svelte.preprocess(input, config). + then(processed => processed.toString()). + then(processed => { + + const expectedWarnings = (config.warnings || []).map( + normalizeWarning); + const domWarnings = []; + const ssrWarnings = []; + + const dom = svelte.compile( + processed, + Object.assign(config, { + format: 'iife', + name: 'SvelteComponent', + onwarn: warning => { + domWarnings.push(warning); + }, + }) + ); + + const ssr = svelte.compile( + processed, + Object.assign(config, { + format: 'iife', + generate: 'ssr', + name: 'SvelteComponent', + onwarn: warning => { + ssrWarnings.push(warning); + }, + }) + ); + + // check the code is valid + checkCodeIsValid(dom.code); + checkCodeIsValid(ssr.code); + + assert.equal(dom.css, ssr.css); + + assert.deepEqual( + domWarnings.map(normalizeWarning), + ssrWarnings.map(normalizeWarning) + ); + assert.deepEqual(domWarnings.map(normalizeWarning), expectedWarnings); + + const expected = { + html: read(`test/preprocess/samples/${dir}/expected.html`), + css: read(`test/preprocess/samples/${dir}/expected.css`), + }; + + if (expected.css !== null) { + fs.writeFileSync(`test/preprocess/samples/${dir}/_actual.css`, + dom.css); + assert.equal(dom.css.replace(/svelte-\d+/g, 'svelte-xyz'), + expected.css); + } + + // verify that the right elements have scoping selectors + if (expected.html !== null) { + const window = env(); + + // dom + try { + const Component = eval( + `(function () { ${dom.code}; return SvelteComponent; }())` + ); + const target = window.document.querySelector('main'); + + new Component({target, data: config.data}); + const html = target.innerHTML; + + fs.writeFileSync(`test/preprocess/samples/${dir}/_actual.html`, + html); + + assert.equal( + normalizeHtml(window, + html.replace(/svelte-\d+/g, 'svelte-xyz')), + normalizeHtml(window, expected.html) + ); + } catch (err) { + console.log(dom.code); + throw err; + } + + // ssr + try { + const component = eval( + `(function () { ${ssr.code}; return SvelteComponent; }())` + ); + + assert.equal( + normalizeHtml( + window, + component.render(config.data). + replace(/svelte-\d+/g, 'svelte-xyz') + ), + normalizeHtml(window, expected.html) + ); + } catch (err) { + console.log(ssr.code); + throw err; + } + } + }).catch(error => { + throw error; + }); + }); + }); +}); + +function read(file) { + try { + return fs.readFileSync(file, 'utf-8'); + } catch (err) { + return null; + } +} diff --git a/test/preprocess/samples/use-coffeescript-preprocessor/_config.js b/test/preprocess/samples/use-coffeescript-preprocessor/_config.js new file mode 100644 index 000000000000..1865fe408600 --- /dev/null +++ b/test/preprocess/samples/use-coffeescript-preprocessor/_config.js @@ -0,0 +1,19 @@ +import * as CoffeeScript from 'coffeescript'; + +export default { + cascade: false, + script: ({content, attributes}) => { + if (attributes.type !== 'text/coffeescript') { + return {code: content}; + } + + return new Promise((fulfil, reject) => { + try { + const code = CoffeeScript.compile(content, {}); + fulfil({code}); + } catch (error) { + reject(error); + } + }); + }, +}; diff --git a/test/preprocess/samples/use-coffeescript-preprocessor/expected.html b/test/preprocess/samples/use-coffeescript-preprocessor/expected.html new file mode 100644 index 000000000000..2c473ea019ff --- /dev/null +++ b/test/preprocess/samples/use-coffeescript-preprocessor/expected.html @@ -0,0 +1 @@ +

Hello foo!

diff --git a/test/preprocess/samples/use-coffeescript-preprocessor/input.html b/test/preprocess/samples/use-coffeescript-preprocessor/input.html new file mode 100644 index 000000000000..50c7f643476c --- /dev/null +++ b/test/preprocess/samples/use-coffeescript-preprocessor/input.html @@ -0,0 +1,8 @@ +

Hello {{name}}!

+ + \ No newline at end of file diff --git a/test/preprocess/samples/use-pug-preprocessor/_config.js b/test/preprocess/samples/use-pug-preprocessor/_config.js new file mode 100644 index 000000000000..7a345bfd9187 --- /dev/null +++ b/test/preprocess/samples/use-pug-preprocessor/_config.js @@ -0,0 +1,15 @@ +import * as pug from 'pug'; + +export default { + cascade: false, + markup: ({content}) => { + return new Promise((fulfil, reject) => { + try { + const code = pug.render(content); + fulfil({code}); + } catch (error) { + reject(error); + } + }); + }, +}; diff --git a/test/preprocess/samples/use-pug-preprocessor/expected.css b/test/preprocess/samples/use-pug-preprocessor/expected.css new file mode 100644 index 000000000000..2217e804d936 --- /dev/null +++ b/test/preprocess/samples/use-pug-preprocessor/expected.css @@ -0,0 +1 @@ +[foo][svelte-xyz]{color:red}[baz][svelte-xyz]{color:blue} \ No newline at end of file diff --git a/test/preprocess/samples/use-pug-preprocessor/input.pug b/test/preprocess/samples/use-pug-preprocessor/input.pug new file mode 100644 index 000000000000..d32e76527d4d --- /dev/null +++ b/test/preprocess/samples/use-pug-preprocessor/input.pug @@ -0,0 +1,10 @@ +div(foo="bar") +div(baz) + +style(type="text/css") + |[foo] { + | color: red; + | } + |[baz] { + | color: blue; + |} diff --git a/test/preprocess/samples/use-scss-preprocessor-with-external-files/_config.js b/test/preprocess/samples/use-scss-preprocessor-with-external-files/_config.js new file mode 100644 index 000000000000..6daae7c7a3a6 --- /dev/null +++ b/test/preprocess/samples/use-scss-preprocessor-with-external-files/_config.js @@ -0,0 +1,26 @@ +import * as sass from 'node-sass'; +import * as path from 'path'; + +export default { + cascade: false, + style: ({ content, attributes }) => { + if (attributes.type !== 'text/scss') { + return {code: content}; + } + + return new Promise((fulfil, reject) => { + sass.render({ + data: content, + includePaths: [ + path.resolve(__dirname) + ] + }, (err, result) => { + if (err) { + reject(err); + } else { + fulfil({ code: result.css.toString(), map: result.map }); + } + }); + }); + } +}; diff --git a/test/preprocess/samples/use-scss-preprocessor-with-external-files/_variables.scss b/test/preprocess/samples/use-scss-preprocessor-with-external-files/_variables.scss new file mode 100644 index 000000000000..be7eddc5a44f --- /dev/null +++ b/test/preprocess/samples/use-scss-preprocessor-with-external-files/_variables.scss @@ -0,0 +1,2 @@ +$foo-color: red; +$baz-color: blue; diff --git a/test/preprocess/samples/use-scss-preprocessor-with-external-files/expected.css b/test/preprocess/samples/use-scss-preprocessor-with-external-files/expected.css new file mode 100644 index 000000000000..2217e804d936 --- /dev/null +++ b/test/preprocess/samples/use-scss-preprocessor-with-external-files/expected.css @@ -0,0 +1 @@ +[foo][svelte-xyz]{color:red}[baz][svelte-xyz]{color:blue} \ No newline at end of file diff --git a/test/preprocess/samples/use-scss-preprocessor-with-external-files/input.html b/test/preprocess/samples/use-scss-preprocessor-with-external-files/input.html new file mode 100644 index 000000000000..2db43e1c6f5b --- /dev/null +++ b/test/preprocess/samples/use-scss-preprocessor-with-external-files/input.html @@ -0,0 +1,13 @@ +
+
+ + diff --git a/test/preprocess/samples/use-scss-preprocessor/_config.js b/test/preprocess/samples/use-scss-preprocessor/_config.js new file mode 100644 index 000000000000..cb3a1a505a8a --- /dev/null +++ b/test/preprocess/samples/use-scss-preprocessor/_config.js @@ -0,0 +1,26 @@ +import * as sass from 'node-sass'; + +export default { + cascade: false, + style: ({ content, attributes }) => { + if (attributes.type !== 'text/scss') { + return {code: content}; + } + + if (attributes['aria-hidden'] !== true) { + throw new Error('aria-hidden is supposed to be true'); + } + + return new Promise((fulfil, reject) => { + sass.render({ + data: content, + }, (err, result) => { + if (err) { + reject(err); + } else { + fulfil({ code: result.css.toString(), map: result.map }); + } + }); + }); + } +}; diff --git a/test/preprocess/samples/use-scss-preprocessor/expected.css b/test/preprocess/samples/use-scss-preprocessor/expected.css new file mode 100644 index 000000000000..2217e804d936 --- /dev/null +++ b/test/preprocess/samples/use-scss-preprocessor/expected.css @@ -0,0 +1 @@ +[foo][svelte-xyz]{color:red}[baz][svelte-xyz]{color:blue} \ No newline at end of file diff --git a/test/preprocess/samples/use-scss-preprocessor/input.html b/test/preprocess/samples/use-scss-preprocessor/input.html new file mode 100644 index 000000000000..4e6384ebdc9c --- /dev/null +++ b/test/preprocess/samples/use-scss-preprocessor/input.html @@ -0,0 +1,14 @@ +
+
+ + diff --git a/test/preprocess/samples/use-stylus-preprocessor-with-external-file/_config.js b/test/preprocess/samples/use-stylus-preprocessor-with-external-file/_config.js new file mode 100644 index 000000000000..3806a407f2da --- /dev/null +++ b/test/preprocess/samples/use-stylus-preprocessor-with-external-file/_config.js @@ -0,0 +1,24 @@ +import * as stylus from 'stylus'; +import * as path from 'path'; + +export default { + preprocessor: (styles) => + stylus(styles).include(path.resolve(__dirname)).render(), + cascade: false, + style: ({content, attributes}) => { + if (attributes.type !== 'text/stylus') { + return {code: content}; + } + + return new Promise((fulfil, reject) => { + stylus(content).include(path.resolve(__dirname)). + render((err, result) => { + if (err) { + reject(err); + } else { + fulfil({code: result}); + } + }); + }); + }, +}; diff --git a/test/preprocess/samples/use-stylus-preprocessor-with-external-file/expected.css b/test/preprocess/samples/use-stylus-preprocessor-with-external-file/expected.css new file mode 100644 index 000000000000..8bfade202445 --- /dev/null +++ b/test/preprocess/samples/use-stylus-preprocessor-with-external-file/expected.css @@ -0,0 +1 @@ +[foo][svelte-xyz]{color:#f00}[baz][svelte-xyz]{color:#00f} \ No newline at end of file diff --git a/test/preprocess/samples/use-stylus-preprocessor-with-external-file/input.html b/test/preprocess/samples/use-stylus-preprocessor-with-external-file/input.html new file mode 100644 index 000000000000..2dffa65b3b42 --- /dev/null +++ b/test/preprocess/samples/use-stylus-preprocessor-with-external-file/input.html @@ -0,0 +1,12 @@ +
+
+ + diff --git a/test/preprocess/samples/use-stylus-preprocessor-with-external-file/variables.styl b/test/preprocess/samples/use-stylus-preprocessor-with-external-file/variables.styl new file mode 100644 index 000000000000..d9ff4b92751a --- /dev/null +++ b/test/preprocess/samples/use-stylus-preprocessor-with-external-file/variables.styl @@ -0,0 +1,2 @@ +foo-color = red +baz-color = blue diff --git a/test/preprocess/samples/use-stylus-preprocessor/_config.js b/test/preprocess/samples/use-stylus-preprocessor/_config.js new file mode 100644 index 000000000000..8e92e4ad601f --- /dev/null +++ b/test/preprocess/samples/use-stylus-preprocessor/_config.js @@ -0,0 +1,20 @@ +import * as stylus from 'stylus'; + +export default { + cascade: false, + style: ({content, attributes}) => { + if (attributes.type !== 'text/stylus') { + return {code: content}; + } + + return new Promise((fulfil, reject) => { + stylus(content).render((err, result) => { + if (err) { + reject(err); + } else { + fulfil({code: result}); + } + }); + }); + }, +}; diff --git a/test/preprocess/samples/use-stylus-preprocessor/expected.css b/test/preprocess/samples/use-stylus-preprocessor/expected.css new file mode 100644 index 000000000000..8bfade202445 --- /dev/null +++ b/test/preprocess/samples/use-stylus-preprocessor/expected.css @@ -0,0 +1 @@ +[foo][svelte-xyz]{color:#f00}[baz][svelte-xyz]{color:#00f} \ No newline at end of file diff --git a/test/preprocess/samples/use-stylus-preprocessor/input.html b/test/preprocess/samples/use-stylus-preprocessor/input.html new file mode 100644 index 000000000000..259c0d45ede9 --- /dev/null +++ b/test/preprocess/samples/use-stylus-preprocessor/input.html @@ -0,0 +1,13 @@ +
+
+ + diff --git a/yarn.lock b/yarn.lock index 4a8c3799e3b7..0e3f324f0c01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,6 +22,12 @@ 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-globals@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" @@ -40,10 +46,14 @@ acorn-object-spread@^1.0.0: dependencies: acorn "^3.1.0" -acorn@^3.0.4, acorn@^3.1.0, acorn@^3.3.0: +acorn@^3.0.4, acorn@^3.1.0, acorn@^3.3.0, acorn@~3.3.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.1.1, acorn@^5.1.2, acorn@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" @@ -180,6 +190,10 @@ arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" @@ -196,6 +210,10 @@ async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -403,6 +421,10 @@ camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -440,6 +462,12 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: escape-string-regexp "^1.0.5" supports-color "^4.0.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" @@ -463,6 +491,13 @@ circular-json@^0.3.1: version "0.3.3" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" +clean-css@^3.3.0: + version "3.4.28" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.28.tgz#bf1945e82fc808f55695e6ddeaec01400efd03ff" + dependencies: + commander "2.8.x" + source-map "0.4.x" + cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -509,6 +544,10 @@ codecov@^2.2.0: request "2.77.0" urlgrey "0.4.4" +coffeescript@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-2.0.3.tgz#760f02724f5f0911be7cefa34a8e0e10c5d8512a" + color-convert@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" @@ -531,6 +570,12 @@ commander@1.0.4: dependencies: keypress "0.1.x" +commander@2.8.x: + version "2.8.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" + dependencies: + graceful-readlink ">= 1.0.0" + commander@2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" @@ -569,6 +614,13 @@ console-group@^0.3.2: version "0.3.3" resolved "https://registry.yarnpkg.com/console-group/-/console-group-0.3.3.tgz#6d8eb6b9d6b757a2895284f62d09c7ad43f2bbce" +constantinople@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-3.1.0.tgz#7569caa8aa3f8d5935d62e1fa96f9f702cd81c79" + dependencies: + acorn "^3.1.0" + is-expression "^2.0.1" + contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" @@ -589,6 +641,13 @@ core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" +cross-spawn@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + cross-spawn@^4: version "4.0.2" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" @@ -616,6 +675,10 @@ cryptiles@3.x.x: dependencies: boom "5.x.x" +css-parse@1.7.x: + version "1.7.0" + resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" + css-tree@1.0.0-alpha22: version "1.0.0-alpha22" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha22.tgz#338a006e331c7b4f9dab7b6af539ece56ff78af2" @@ -649,6 +712,12 @@ debug-log@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" +debug@*, debug@^3.0.1, debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + debug@2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" @@ -661,12 +730,6 @@ debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.6.8: dependencies: ms "2.0.0" -debug@^3.0.1, debug@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -748,6 +811,10 @@ doctrine@^2.0.2: 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" @@ -818,6 +885,12 @@ entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" +errno@^0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + error-ex@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" @@ -1206,6 +1279,12 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +gaze@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" + dependencies: + globule "^1.0.0" + generate-function@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" @@ -1247,6 +1326,17 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" +glob@7.0.x: + version "7.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" @@ -1258,7 +1348,17 @@ glob@7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2: +glob@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -1288,6 +1388,14 @@ globby@^5.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +globule@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09" + dependencies: + glob "~7.1.1" + lodash "~4.17.4" + minimatch "~3.0.2" + graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -1450,10 +1558,18 @@ ignore@^3.3.3: version "3.3.7" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" +in-publish@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" + indent-string@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" @@ -1534,6 +1650,20 @@ is-equal-shallow@^0.1.3: dependencies: is-primitive "^2.0.0" +is-expression@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-2.1.0.tgz#91be9d47debcfef077977e9722be6dcfb4465ef0" + dependencies: + acorn "~3.3.0" + object-assign "^4.0.1" + +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.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -1613,7 +1743,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" @@ -1621,6 +1751,12 @@ 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.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + is-resolvable@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" @@ -1708,6 +1844,14 @@ istanbul-reports@^1.1.3: dependencies: handlebars "^4.0.3" +js-base64@^2.1.8: + version "2.3.2" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.3.2.tgz#a79a923666372b580f8e27f51845c6f7e8fbfbaf" + +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" @@ -1809,6 +1953,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" + keypress@0.1.x: version "0.1.0" resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.1.0.tgz#4a3188d4291b66b4f65edb99f806aa9ae293592a" @@ -1845,6 +1996,19 @@ left-pad@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" +less@^2.7.3: + version "2.7.3" + resolved "https://registry.yarnpkg.com/less/-/less-2.7.3.tgz#cc1260f51c900a9ec0d91fb6998139e02507b63b" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + mime "^1.2.11" + mkdirp "^0.5.0" + promise "^7.1.1" + request "2.81.0" + source-map "^0.5.3" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -1905,6 +2069,14 @@ lodash._isiterateecall@^3.0.0: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" +lodash.assign@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + +lodash.clonedeep@^4.3.2: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + lodash.cond@^4.3.0: version "4.5.2" resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" @@ -1933,6 +2105,10 @@ lodash.keys@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" +lodash.mergewith@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -1941,7 +2117,7 @@ lodash@3.0.x: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.0.1.tgz#14d49028a38bc740241d11e2ecd57ec06d73c19a" -lodash@^4.13.1, lodash@^4.17.4, lodash@^4.3.0: +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.4, lodash@^4.3.0, lodash@~4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -2009,7 +2185,7 @@ mem@^1.1.0: dependencies: mimic-fn "^1.0.0" -meow@^3.1.0: +meow@^3.1.0, meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" dependencies: @@ -2058,11 +2234,15 @@ mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7: dependencies: mime-db "~1.30.0" +mime@^1.2.11: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -2104,7 +2284,7 @@ mkdirp@0.5.0: dependencies: minimist "0.0.8" -mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -2135,7 +2315,7 @@ mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -nan@^2.3.0: +nan@^2.3.0, nan@^2.3.2: version "2.8.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" @@ -2161,6 +2341,24 @@ nightmare@^2.10.0: sliced "1.0.1" split2 "^2.0.1" +node-gyp@^3.3.1: + version "3.6.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + minimatch "^3.0.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "2" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + node-pre-gyp@^0.6.39: version "0.6.39" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" @@ -2184,10 +2382,40 @@ node-resolve@^1.3.3: is-builtin-module "^1.0.0" lodash "^4.13.1" +node-sass@^4.7.1: + version "4.7.2" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.7.2.tgz#9366778ba1469eb01438a9e8592f4262bcb6794e" + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^3.0.0" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + in-publish "^2.0.0" + lodash.assign "^4.2.0" + lodash.clonedeep "^4.3.2" + lodash.mergewith "^4.6.0" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.3.2" + node-gyp "^3.3.1" + npmlog "^4.0.0" + request "~2.79.0" + sass-graph "^2.2.4" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + node-uuid@~1.4.7: version "1.4.8" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" +"nopt@2 || 3": + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -2216,7 +2444,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: @@ -2330,6 +2558,12 @@ os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + os-locale@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" @@ -2342,7 +2576,7 @@ os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -osenv@^0.1.4: +osenv@0, osenv@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" dependencies: @@ -2502,10 +2736,113 @@ progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" +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: + asap "~2.0.3" + +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" +pug-attrs@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-2.0.2.tgz#8be2b2225568ffa75d1b866982bff9f4111affcb" + dependencies: + constantinople "^3.0.1" + js-stringify "^1.0.1" + pug-runtime "^2.0.3" + +pug-code-gen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-2.0.0.tgz#96aea39a9e62f1ec5d2b6a5b42a29d528c70b43d" + dependencies: + constantinople "^3.0.1" + doctypes "^1.1.0" + js-stringify "^1.0.1" + pug-attrs "^2.0.2" + pug-error "^1.3.2" + pug-runtime "^2.0.3" + 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@^2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-2.1.5.tgz#66bf6e80d97fbef829bab0aa35eddff33fc964f3" + dependencies: + clean-css "^3.3.0" + constantinople "^3.0.1" + jstransformer "1.0.0" + pug-error "^1.3.2" + pug-walk "^1.1.5" + resolve "^1.1.6" + uglify-js "^2.6.1" + +pug-lexer@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-3.1.0.tgz#fd087376d4a675b4f59f8fef422883434e9581a2" + dependencies: + character-parser "^2.1.1" + is-expression "^3.0.0" + pug-error "^1.3.2" + +pug-linker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-3.0.3.tgz#25f59eb750237f0368e59c3379764229c0189c41" + dependencies: + pug-error "^1.3.2" + pug-walk "^1.1.5" + +pug-load@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-2.0.9.tgz#ee217c914cc1d9324d44b86c32d1df241d36de7a" + dependencies: + object-assign "^4.1.0" + pug-walk "^1.1.5" + +pug-parser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-4.0.0.tgz#c9f52322e4eabe4bf5beeba64ed18373bb627801" + dependencies: + pug-error "^1.3.2" + token-stream "0.0.1" + +pug-runtime@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-2.0.3.tgz#98162607b0fce9e254d427f33987a5aee7168bda" + +pug-strip-comments@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-1.0.2.tgz#d313afa01bcc374980e1399e23ebf2eb9bdc8513" + dependencies: + pug-error "^1.3.2" + +pug-walk@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-1.1.5.tgz#90e943acbcf7021e6454cf1b32245891cba6f851" + +pug@^2.0.0-rc.4: + version "2.0.0-rc.4" + resolved "https://registry.yarnpkg.com/pug/-/pug-2.0.0-rc.4.tgz#b7b08f6599bd5302568042b7436984fb28c80a13" + dependencies: + pug-code-gen "^2.0.0" + pug-filters "^2.1.5" + pug-lexer "^3.1.0" + pug-linker "^3.0.3" + pug-load "^2.0.9" + pug-parser "^4.0.0" + pug-runtime "^2.0.3" + pug-strip-comments "^1.0.2" + punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -2572,7 +2909,7 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2: +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2: version "2.3.3" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: @@ -2659,6 +2996,33 @@ request-promise-native@^1.0.3: stealthy-require "^1.1.0" tough-cookie ">=2.3.3" +request@2, request@^2.45.0, request@^2.83.0: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + request@2.77.0: version "2.77.0" resolved "https://registry.yarnpkg.com/request/-/request-2.77.0.tgz#2b00d82030ededcc97089ffa5d8810a9c2aa314b" @@ -2711,32 +3075,30 @@ request@2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" -request@^2.45.0, request@^2.83.0: - version "2.83.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" +request@~2.79.0: + version "2.79.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.11.0" combined-stream "~1.0.5" - extend "~3.0.1" + extend "~3.0.0" forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" - http-signature "~1.2.0" + form-data "~2.1.1" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + qs "~6.3.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + uuid "^3.0.0" require-directory@^2.1.1: version "2.1.1" @@ -2894,14 +3256,38 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +sass-graph@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^7.0.0" + +sax@0.5.x: + version "0.5.8" + resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" + sax@^1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" +scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -2966,7 +3352,13 @@ source-map-support@^0.4.0, source-map-support@^0.4.8: dependencies: source-map "^0.5.6" -source-map@^0.4.4: +source-map@0.1.x: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + +source-map@0.4.x, source-map@^0.4.2, source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" dependencies: @@ -3029,6 +3421,12 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +stdout-stream@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b" + dependencies: + readable-stream "^2.0.1" + stealthy-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" @@ -3098,6 +3496,17 @@ strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" +stylus@^0.54.5: + version "0.54.5" + resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79" + dependencies: + css-parse "1.7.x" + debug "*" + glob "7.0.x" + mkdirp "0.5.x" + sax "0.5.x" + source-map "0.1.x" + sumchecker@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-1.3.1.tgz#79bb3b4456dd04f18ebdbc0d703a1d1daec5105d" @@ -3155,7 +3564,7 @@ tar-pack@^3.4.0: tar "^2.2.1" uid-number "^0.0.6" -tar@^2.2.1: +tar@^2.0.0, tar@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" dependencies: @@ -3213,6 +3622,10 @@ to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" +token-stream@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a" + tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" @@ -3233,6 +3646,12 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" +"true-case-path@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.2.tgz#7ec91130924766c7f573be3020c34f8fdfd00d62" + dependencies: + glob "^6.0.4" + tryit@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" @@ -3295,7 +3714,7 @@ typescript@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.1.tgz#ef39cdea27abac0b500242d6726ab90e0c846631" -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: @@ -3349,6 +3768,10 @@ vlq@^0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" +void-elements@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -3367,11 +3790,15 @@ whatwg-url@^6.3.0: tr46 "^1.0.0" webidl-conversions "^4.0.1" +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@^1.2.4, which@^1.2.9: +which@1, which@^1.2.4, which@^1.2.9: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: @@ -3387,6 +3814,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" @@ -3450,6 +3884,12 @@ yallist@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + dependencies: + camelcase "^3.0.0" + yargs-parser@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.0.0.tgz#21d476330e5a82279a4b881345bf066102e219c6" @@ -3473,6 +3913,24 @@ yargs@^10.0.3: y18n "^3.2.1" yargs-parser "^8.0.0" +yargs@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"