From 24f2855f8945597b3edf99e87509ba2fe4771b10 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sat, 25 Aug 2018 09:11:45 -0400 Subject: [PATCH 01/29] create a facade over webpack, to support alternative compilers --- src/api/build.ts | 32 +++-------- src/api/dev.ts | 14 +++-- src/cli/build.ts | 3 +- src/core/create_compilers.ts | 105 +++++++++++++++++++++++++++++------ 4 files changed, 104 insertions(+), 50 deletions(-) diff --git a/src/api/build.ts b/src/api/build.ts index 2330a8e..0dce116 100644 --- a/src/api/build.ts +++ b/src/api/build.ts @@ -5,6 +5,7 @@ import rimraf from 'rimraf'; import { EventEmitter } from 'events'; import minify_html from './utils/minify_html'; import { create_compilers, create_main_manifests, create_routes, create_serviceworker_manifest } from '../core'; +import { Compilers, Compiler } from '../core/create_compilers'; import * as events from './interfaces'; export function build(opts: {}) { @@ -28,6 +29,7 @@ async function execute(emitter: EventEmitter, { dest = 'build', app = 'app', webpack = 'webpack', + rollup = 'rollup', routes = 'routes' } = {}) { mkdirp.sync(dest); @@ -51,9 +53,9 @@ async function execute(emitter: EventEmitter, { // create app/manifest/client.js and app/manifest/server.js create_main_manifests({ routes: route_objects }); - const { client, server, serviceworker } = create_compilers({ webpack }); + const { client, server, serviceworker } = create_compilers({ webpack, rollup }); - const client_stats = await compile(client); + const client_stats = await client.compile(); emitter.emit('build', { type: 'client', // TODO duration/warnings @@ -63,7 +65,7 @@ async function execute(emitter: EventEmitter, { const client_info = client_stats.toJson(); fs.writeFileSync(path.join(dest, 'client_assets.json'), JSON.stringify(client_info.assetsByChunkName)); - const server_stats = await compile(server); + const server_stats = await server.compile(); emitter.emit('build', { type: 'server', // TODO duration/warnings @@ -78,7 +80,7 @@ async function execute(emitter: EventEmitter, { client_files: client_stats.toJson().assets.map((chunk: { name: string }) => `client/${chunk.name}`) }); - serviceworker_stats = await compile(serviceworker); + serviceworker_stats = await serviceworker.compile(); emitter.emit('build', { type: 'serviceworker', @@ -86,24 +88,4 @@ async function execute(emitter: EventEmitter, { webpack_stats: serviceworker_stats }); } -} - -function compile(compiler: any) { - return new Promise((fulfil, reject) => { - compiler.run((err: Error, stats: any) => { - if (err) { - reject(err); - process.exit(1); - } - - if (stats.hasErrors()) { - console.error(stats.toString({ colors: true })); - reject(new Error(`Encountered errors while building app`)); - } - - else { - fulfil(stats); - } - }); - }); -} +} \ No newline at end of file diff --git a/src/api/dev.ts b/src/api/dev.ts index 68711c3..1352744 100644 --- a/src/api/dev.ts +++ b/src/api/dev.ts @@ -9,6 +9,7 @@ import format_messages from 'webpack-format-messages'; import { locations } from '../config'; import { EventEmitter } from 'events'; import { create_routes, create_main_manifests, create_compilers, create_serviceworker_manifest } from '../core'; +import { Compiler, Compilers } from '../core/create_compilers'; import Deferred from './utils/Deferred'; import * as events from './interfaces'; @@ -155,7 +156,10 @@ class Watcher extends EventEmitter { }; // TODO watch the configs themselves? - const compilers = create_compilers({ webpack: this.dirs.webpack }); + const compilers: Compilers = create_compilers({ + webpack: this.dirs.webpack, + rollup: this.dirs.rollup + }); let log = ''; @@ -332,16 +336,14 @@ class Watcher extends EventEmitter { } } - watch(compiler: any, { name, invalid = noop, result }: { + watch(compiler: Compiler, { name, invalid = noop, result }: { name: string, invalid?: (filename: string) => void; result: (stats: any) => void; }) { - compiler.hooks.invalid.tap('sapper', (filename: string) => { - invalid(filename); - }); + compiler.oninvalid(invalid); - compiler.watch({}, (err: Error, stats: any) => { + compiler.watch((err: Error, stats: any) => { if (err) { this.emit('error', { type: name, diff --git a/src/cli/build.ts b/src/cli/build.ts index b7bf87b..53f3002 100644 --- a/src/cli/build.ts +++ b/src/cli/build.ts @@ -9,7 +9,8 @@ export function build() { dest: locations.dest(), app: locations.app(), routes: locations.routes(), - webpack: 'webpack' + webpack: 'webpack', + rollup: 'rollup' }); emitter.on('build', event => { diff --git a/src/core/create_compilers.ts b/src/core/create_compilers.ts index 51a866d..a6794b9 100644 --- a/src/core/create_compilers.ts +++ b/src/core/create_compilers.ts @@ -1,29 +1,98 @@ +import * as fs from 'fs'; import * as path from 'path'; import relative from 'require-relative'; -export default function create_compilers({ webpack }: { webpack: string }) { - const wp = relative('webpack', process.cwd()); +let r: any; +let wp: any; - const serviceworker_config = try_require(path.resolve(`${webpack}/service-worker.config.js`)); +export class WebpackCompiler { + _: any; - return { - client: wp( - require(path.resolve(`${webpack}/client.config.js`)) - ), + constructor(config: any) { + this._ = wp(require(path.resolve(config))); + } - server: wp( - require(path.resolve(`${webpack}/server.config.js`)) - ), + oninvalid(cb: (filename: string) => void) { + this._.hooks.invalid.tap('sapper', cb); + } - serviceworker: serviceworker_config && wp(serviceworker_config) - }; + compile() { + return new Promise((fulfil, reject) => { + this._.run((err: Error, stats: any) => { + if (err) { + reject(err); + process.exit(1); + } + + if (stats.hasErrors()) { + console.error(stats.toString({ colors: true })); + reject(new Error(`Encountered errors while building app`)); + } + + else { + fulfil(stats); + } + }); + }); + } + + watch(cb: (err: Error, stats: any) => void) { + this._.watch({}, cb); + } } -function try_require(specifier: string) { - try { - return require(specifier); - } catch (err) { - if (err.code === 'MODULE_NOT_FOUND') return null; - throw err; +export class RollupCompiler { + constructor(config: any) { + } + + oninvalid(cb: (filename: string) => void) { + + } + + compile() { + return new Promise((fulfil, reject) => { + + }); + } + + watch(cb: (err: Error, stats: any) => void) { + + } +} + +export type Compiler = RollupCompiler | WebpackCompiler; + +export type Compilers = { + client: Compiler; + server: Compiler; + serviceworker?: Compiler; +} + +export default function create_compilers({ webpack, rollup }: { webpack: string, rollup: string }): Compilers { + if (fs.existsSync(rollup)) { + if (!r) r = relative('rollup', process.cwd()); + + const sw = `${rollup}/service-worker.config.js`; + + return { + client: new RollupCompiler(`${rollup}/client.config.js`), + server: new RollupCompiler(`${rollup}/server.config.js`), + serviceworker: fs.existsSync(sw) && new RollupCompiler(sw) + }; + } + + if (fs.existsSync(webpack)) { + if (!wp) wp = relative('webpack', process.cwd()); + + const sw = `${webpack}/service-worker.config.js`; + + return { + client: new WebpackCompiler(`${webpack}/client.config.js`), + server: new WebpackCompiler(`${webpack}/server.config.js`), + serviceworker: fs.existsSync(sw) && new WebpackCompiler(sw) + }; + } + + throw new Error(`Could not find config files for rollup or webpack`); } \ No newline at end of file From 9cbb8bdc33eb0edfaca5a1f37a99ecbca77619ae Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sat, 25 Aug 2018 12:42:27 -0400 Subject: [PATCH 02/29] first stab at supporting Rollup (#130) --- rollup.config.js | 1 + rollup.js | 1 + sapper-dev-client.js | 2 + src/api/build.ts | 13 +- src/api/dev.ts | 83 +++---------- src/api/interfaces.ts | 3 +- src/cli/build.ts | 2 +- src/core/create_compilers.ts | 222 +++++++++++++++++++++++++++++++---- src/core/create_manifests.ts | 8 +- src/middleware.ts | 4 +- src/rollup.ts | 44 +++++++ 11 files changed, 276 insertions(+), 107 deletions(-) create mode 100644 rollup.js create mode 100644 src/rollup.ts diff --git a/rollup.config.js b/rollup.config.js index 51f1499..17c3bc7 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -32,6 +32,7 @@ export default [ `src/cli.ts`, `src/core.ts`, `src/middleware.ts`, + `src/rollup.ts`, `src/webpack.ts` ], output: { diff --git a/rollup.js b/rollup.js new file mode 100644 index 0000000..b37e9ab --- /dev/null +++ b/rollup.js @@ -0,0 +1 @@ +module.exports = require('./dist/rollup.ts.js'); \ No newline at end of file diff --git a/sapper-dev-client.js b/sapper-dev-client.js index b717a25..e5c0035 100644 --- a/sapper-dev-client.js +++ b/sapper-dev-client.js @@ -1,6 +1,8 @@ let source; function check() { + if (typeof module === 'undefined') return; + if (module.hot.status() === 'idle') { module.hot.check(true).then(modules => { console.log(`[SAPPER] applied HMR update`); diff --git a/src/api/build.ts b/src/api/build.ts index 0dce116..5f43d18 100644 --- a/src/api/build.ts +++ b/src/api/build.ts @@ -55,21 +55,20 @@ async function execute(emitter: EventEmitter, { const { client, server, serviceworker } = create_compilers({ webpack, rollup }); - const client_stats = await client.compile(); + const client_result = await client.compile(); emitter.emit('build', { type: 'client', // TODO duration/warnings - webpack_stats: client_stats + result: client_result }); - const client_info = client_stats.toJson(); - fs.writeFileSync(path.join(dest, 'client_assets.json'), JSON.stringify(client_info.assetsByChunkName)); + fs.writeFileSync(path.join(dest, 'client_assets.json'), JSON.stringify(client_result.assetsByChunkName)); const server_stats = await server.compile(); emitter.emit('build', { type: 'server', // TODO duration/warnings - webpack_stats: server_stats + result: server_stats }); let serviceworker_stats; @@ -77,7 +76,7 @@ async function execute(emitter: EventEmitter, { if (serviceworker) { create_serviceworker_manifest({ routes: route_objects, - client_files: client_stats.toJson().assets.map((chunk: { name: string }) => `client/${chunk.name}`) + client_files: client_result.assets.map((chunk: { name: string }) => `client/${chunk.name}`) }); serviceworker_stats = await serviceworker.compile(); @@ -85,7 +84,7 @@ async function execute(emitter: EventEmitter, { emitter.emit('build', { type: 'serviceworker', // TODO duration/warnings - webpack_stats: serviceworker_stats + result: serviceworker_stats }); } } \ No newline at end of file diff --git a/src/api/dev.ts b/src/api/dev.ts index 1352744..3b38521 100644 --- a/src/api/dev.ts +++ b/src/api/dev.ts @@ -5,11 +5,10 @@ import * as child_process from 'child_process'; import * as ports from 'port-authority'; import mkdirp from 'mkdirp'; import rimraf from 'rimraf'; -import format_messages from 'webpack-format-messages'; import { locations } from '../config'; import { EventEmitter } from 'events'; import { create_routes, create_main_manifests, create_compilers, create_serviceworker_manifest } from '../core'; -import { Compiler, Compilers } from '../core/create_compilers'; +import { Compiler, Compilers, CompileResult, CompileError } from '../core/create_compilers'; import Deferred from './utils/Deferred'; import * as events from './interfaces'; @@ -49,17 +48,19 @@ class Watcher extends EventEmitter { dest = locations.dest(), routes = locations.routes(), webpack = 'webpack', + rollup = 'rollup', port = +process.env.PORT }: { app: string, dest: string, routes: string, webpack: string, + rollup: string, port: number }) { super(); - this.dirs = { app, dest, routes, webpack }; + this.dirs = { app, dest, routes, webpack, rollup }; this.port = port; this.closed = false; @@ -181,7 +182,7 @@ class Watcher extends EventEmitter { this.deferreds.server = new Deferred(); }, - result: info => { + handle_result: (result: CompileResult) => { this.deferreds.client.promise.then(() => { const restart = () => { log = ''; @@ -263,11 +264,11 @@ class Watcher extends EventEmitter { // quite difficult }, - result: info => { - fs.writeFileSync(path.join(dest, 'client_assets.json'), JSON.stringify(info.assetsByChunkName, null, ' ')); + handle_result: (result: CompileResult) => { + fs.writeFileSync(path.join(dest, 'client_assets.json'), JSON.stringify(result.assetsByChunkName, null, ' ')); this.deferreds.client.fulfil(); - const client_files = info.assets.map((chunk: { name: string }) => `client/${chunk.name}`); + const client_files = result.assets.map((chunk: { name: string }) => `client/${chunk.name}`); create_serviceworker_manifest({ routes: create_routes(), @@ -285,11 +286,7 @@ class Watcher extends EventEmitter { watch_serviceworker = noop; this.watch(compilers.serviceworker, { - name: 'service worker', - - result: info => { - fs.writeFileSync(path.join(dest, 'serviceworker_info.json'), JSON.stringify(info, null, ' ')); - } + name: 'service worker' }); } : noop; @@ -336,80 +333,34 @@ class Watcher extends EventEmitter { } } - watch(compiler: Compiler, { name, invalid = noop, result }: { + watch(compiler: Compiler, { name, invalid = noop, handle_result = noop }: { name: string, invalid?: (filename: string) => void; - result: (stats: any) => void; + handle_result?: (result: CompileResult) => void; }) { compiler.oninvalid(invalid); - compiler.watch((err: Error, stats: any) => { + compiler.watch((err?: Error, result?: CompileResult) => { if (err) { this.emit('error', { type: name, message: err.message }); } else { - const messages = format_messages(stats); - const info = stats.toJson(); - this.emit('build', { type: name, - duration: info.time, - - errors: messages.errors.map((message: string) => { - const duplicate = this.current_build.unique_errors.has(message); - this.current_build.unique_errors.add(message); - - return mungeWebpackError(message, duplicate); - }), - - warnings: messages.warnings.map((message: string) => { - const duplicate = this.current_build.unique_warnings.has(message); - this.current_build.unique_warnings.add(message); - - return mungeWebpackError(message, duplicate); - }), + duration: result.duration, + errors: result.errors, + warnings: result.warnings }); - result(info); + handle_result(result); } }); } } -const locPattern = /\((\d+):(\d+)\)$/; - -function mungeWebpackError(message: string, duplicate: boolean) { - // TODO this is all a bit rube goldberg... - const lines = message.split('\n'); - - const file = lines.shift() - .replace('', '') // careful — there is a special character at the beginning of this string - .replace('', '') - .replace('./', ''); - - let line = null; - let column = null; - - const match = locPattern.exec(lines[0]); - if (match) { - lines[0] = lines[0].replace(locPattern, ''); - line = +match[1]; - column = +match[2]; - } - - return { - file, - line, - column, - message: lines.join('\n'), - originalMessage: message, - duplicate - }; -} - const INTERVAL = 10000; class DevServer { @@ -466,7 +417,7 @@ function noop() {} function watch_dir( dir: string, - filter: ({ path, stats }: { path: string, stats: fs.Stats }) => boolean, + filter: ({ path, stats }: { path: string, stats: fs.CompileResult }) => boolean, callback: () => void ) { let watch; diff --git a/src/api/interfaces.ts b/src/api/interfaces.ts index 381877a..0be020d 100644 --- a/src/api/interfaces.ts +++ b/src/api/interfaces.ts @@ -1,4 +1,5 @@ import * as child_process from 'child_process'; +import { CompileResult } from '../core/create_compilers'; export type ReadyEvent = { port: number; @@ -29,7 +30,7 @@ export type BuildEvent = { errors: Array<{ file: string, message: string, duplicate: boolean }>; warnings: Array<{ file: string, message: string, duplicate: boolean }>; duration: number; - webpack_stats: any; + result: CompileResult; } export type FileEvent = { diff --git a/src/cli/build.ts b/src/cli/build.ts index 53f3002..c5844f6 100644 --- a/src/cli/build.ts +++ b/src/cli/build.ts @@ -15,7 +15,7 @@ export function build() { emitter.on('build', event => { console.log(colors.inverse(`\nbuilt ${event.type}`)); - console.log(event.webpack_stats.toString({ colors: true })); + console.log(event.result.print()); }); emitter.on('error', event => { diff --git a/src/core/create_compilers.ts b/src/core/create_compilers.ts index a6794b9..1ee96c5 100644 --- a/src/core/create_compilers.ts +++ b/src/core/create_compilers.ts @@ -1,10 +1,167 @@ import * as fs from 'fs'; import * as path from 'path'; +import { locations } from '../config'; import relative from 'require-relative'; let r: any; let wp: any; +export class CompileError { + file: string; + line: number; + column: number; + message: string; +} + +export class CompileResult { + duration: number; + errors: CompileError[]; + warnings: CompileError[]; + assets: Array<{ name: string }>; + assetsByChunkName: Record; +} + +class RollupResult extends CompileResult { + constructor(duration: number, stats: any) { + super(); + + this.duration = duration; + + this.errors = []; + this.warnings = []; + + // TODO + this.assets = []; + + this.assetsByChunkName = { + // TODO need to hash these filenames and + // expose the info in the Rollup output + main: `client.js` + }; + } + + print() { + return 'TODO summarise build'; + } +} + +class WebpackResult extends CompileResult { + stats: any; + + constructor(stats: any) { + super(); + + this.stats = stats; + + const info = stats.toJson(); + + // TODO use import() + const format_messages = require('webpack-format-messages'); + const messages = format_messages(stats); + + this.errors = messages.errors.map(mungeWebpackError); + this.warnings = messages.warnings.map(mungeWebpackError); + + this.duration = info.time; + + this.assets = info.assets.map((chunk: { name: string }) => `client/${chunk.name}`); + this.assetsByChunkName = info.assetsByChunkName; + } + + print() { + return this.stats.toString({ colors: true }); + } +} + +export class RollupCompiler { + _: Promise; + _oninvalid: (filename: string) => void; + _start: number; + + constructor(config: any) { + this._ = this.get_config(path.resolve(config)); + } + + async get_config(input: string) { + const bundle = await r.rollup({ + input, + external: (id: string) => { + return (id[0] !== '.' && !path.isAbsolute(id)) || id.slice(-5, id.length) === '.json'; + } + }); + + const { code } = await bundle.generate({ format: 'cjs' }); + + // temporarily override require + const defaultLoader = require.extensions['.js']; + require.extensions['.js'] = (module: any, filename: string) => { + if (filename === input) { + module._compile(code, filename); + } else { + defaultLoader(module, filename); + } + }; + + const mod: any = require(input); + delete require.cache[input]; + + return mod; + } + + oninvalid(cb: (filename: string) => void) { + this._oninvalid = cb; + } + + async compile(): Promise { + const config = await this._; + + const start = Date.now(); + + const bundle = await r.rollup(config); + await bundle.write(config.output); + + return new RollupResult(Date.now() - start, bundle); + } + + async watch(cb: (err?: Error, stats?: any) => void) { + const config = await this._; + + const watcher = r.watch(config); + + watcher.on('event', (event: any) => { + switch (event.code) { + case 'FATAL': + // TODO kill the process? + cb(event.error); + break; + + case 'ERROR': + // TODO print warnings as well? + cb(event.error); + break; + + case 'START': + case 'END': + // TODO is there anything to do with this info? + break; + + case 'BUNDLE_START': + this._start = Date.now(); + // TODO figure out which file changed + this._oninvalid('[TODO] unknown file'); + break; + + case 'BUNDLE_END': + cb(null, new RollupResult(Date.now() - this._start, event.result)); + break; + + default: + console.log(`Unexpected event ${event.code}`); + } + }); + } +} + export class WebpackCompiler { _: any; @@ -16,7 +173,7 @@ export class WebpackCompiler { this._.hooks.invalid.tap('sapper', cb); } - compile() { + compile(): Promise { return new Promise((fulfil, reject) => { this._.run((err: Error, stats: any) => { if (err) { @@ -24,41 +181,26 @@ export class WebpackCompiler { process.exit(1); } - if (stats.hasErrors()) { - console.error(stats.toString({ colors: true })); + const result = new WebpackResult(stats); + + if (result.errors.length) { + // TODO print errors + // console.error(stats.toString({ colors: true })); reject(new Error(`Encountered errors while building app`)); } else { - fulfil(stats); + fulfil(result); } }); }); } - watch(cb: (err: Error, stats: any) => void) { - this._.watch({}, cb); - } -} - -export class RollupCompiler { - constructor(config: any) { - - } - - oninvalid(cb: (filename: string) => void) { - - } - - compile() { - return new Promise((fulfil, reject) => { - + watch(cb: (err?: Error, stats?: any) => void) { + this._.watch({}, (err?: Error, stats?: any) => { + cb(err, stats && new WebpackResult(stats)); }); } - - watch(cb: (err: Error, stats: any) => void) { - - } } export type Compiler = RollupCompiler | WebpackCompiler; @@ -95,4 +237,34 @@ export default function create_compilers({ webpack, rollup }: { webpack: string, } throw new Error(`Could not find config files for rollup or webpack`); +} + +const locPattern = /\((\d+):(\d+)\)$/; + +function mungeWebpackError(message: string) { + // TODO this is all a bit rube goldberg... + const lines = message.split('\n'); + + const file = lines.shift() + .replace('', '') // careful — there is a special character at the beginning of this string + .replace('', '') + .replace('./', ''); + + let line = null; + let column = null; + + const match = locPattern.exec(lines[0]); + if (match) { + lines[0] = lines[0].replace(locPattern, ''); + line = +match[1]; + column = +match[2]; + } + + return { + file, + line, + column, + message: lines.join('\n'), + originalMessage: message + }; } \ No newline at end of file diff --git a/src/core/create_manifests.ts b/src/core/create_manifests.ts index ea950e3..da760a0 100644 --- a/src/core/create_manifests.ts +++ b/src/core/create_manifests.ts @@ -105,11 +105,9 @@ function generate_client( code += ` - if (module.hot) { - import('${sapper_dev_client}').then(client => { - client.connect(${dev_port}); - }); - }`.replace(/^\t{3}/gm, ''); + import('${sapper_dev_client}').then(client => { + client.connect(${dev_port}); + });`.replace(/^\t{3}/gm, ''); } return code; diff --git a/src/middleware.ts b/src/middleware.ts index cd3bf94..b031af0 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -320,7 +320,7 @@ function get_page_handler( } const link = preloaded_chunks - .filter(file => !file.match(/\.map$/)) + .filter(file => file && !file.match(/\.map$/)) .map(file => `<${req.baseUrl}/client/${file}>;rel="preload";as="script"`) .join(', '); @@ -484,7 +484,7 @@ function get_page_handler( let scripts = [] .concat(chunks.main) // chunks main might be an array. it might not! thanks, webpack .filter(file => !file.match(/\.map$/)) - .map(file => ``) + .map(file => ``) .join(''); let inline_script = `__SAPPER__={${[ diff --git a/src/rollup.ts b/src/rollup.ts new file mode 100644 index 0000000..77d41fd --- /dev/null +++ b/src/rollup.ts @@ -0,0 +1,44 @@ +import { locations, dev } from './config'; + +export default { + dev: dev(), + + client: { + input: () => { + return `${locations.app()}/client.js` + }, + + output: () => { + return { + dir: `${locations.dest()}/client`, + format: 'esm' + }; + } + }, + + server: { + input: () => { + return `${locations.app()}/server.js` + }, + + output: () => { + return { + dir: locations.dest(), + format: 'cjs' + }; + } + }, + + serviceworker: { + input: () => { + return `${locations.app()}/service-worker.js`; + }, + + output: () => { + return { + dir: locations.dest(), + format: 'iife' + } + } + } +}; \ No newline at end of file From 200c5fcbd26549ff0d7c9617d66ad65104e4ac25 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sat, 25 Aug 2018 14:01:07 -0400 Subject: [PATCH 03/29] get tests passing again --- src/api/build.ts | 2 +- src/api/dev.ts | 2 +- src/core/create_compilers.ts | 4 ++-- src/core/create_manifests.ts | 2 -- src/middleware.ts | 2 +- 5 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/api/build.ts b/src/api/build.ts index 5f43d18..79289d1 100644 --- a/src/api/build.ts +++ b/src/api/build.ts @@ -76,7 +76,7 @@ async function execute(emitter: EventEmitter, { if (serviceworker) { create_serviceworker_manifest({ routes: route_objects, - client_files: client_result.assets.map((chunk: { name: string }) => `client/${chunk.name}`) + client_files: client_result.assets.map((file: string) => `client/${file}`) }); serviceworker_stats = await serviceworker.compile(); diff --git a/src/api/dev.ts b/src/api/dev.ts index 3b38521..44a9ef9 100644 --- a/src/api/dev.ts +++ b/src/api/dev.ts @@ -268,7 +268,7 @@ class Watcher extends EventEmitter { fs.writeFileSync(path.join(dest, 'client_assets.json'), JSON.stringify(result.assetsByChunkName, null, ' ')); this.deferreds.client.fulfil(); - const client_files = result.assets.map((chunk: { name: string }) => `client/${chunk.name}`); + const client_files = result.assets.map((file: string) => `client/${file}`); create_serviceworker_manifest({ routes: create_routes(), diff --git a/src/core/create_compilers.ts b/src/core/create_compilers.ts index 1ee96c5..210b71f 100644 --- a/src/core/create_compilers.ts +++ b/src/core/create_compilers.ts @@ -17,7 +17,7 @@ export class CompileResult { duration: number; errors: CompileError[]; warnings: CompileError[]; - assets: Array<{ name: string }>; + assets: string[]; assetsByChunkName: Record; } @@ -64,7 +64,7 @@ class WebpackResult extends CompileResult { this.duration = info.time; - this.assets = info.assets.map((chunk: { name: string }) => `client/${chunk.name}`); + this.assets = info.assets.map((chunk: { name: string }) => chunk.name); this.assetsByChunkName = info.assetsByChunkName; } diff --git a/src/core/create_manifests.ts b/src/core/create_manifests.ts index da760a0..8152312 100644 --- a/src/core/create_manifests.ts +++ b/src/core/create_manifests.ts @@ -56,8 +56,6 @@ function generate_client( const server_routes_to_ignore = routes.server_routes.filter(route => !page_ids.has(route.pattern.toString())); - const len = Math.max(...routes.components.map(c => c.name.length)); - let code = ` // This file is generated by Sapper — do not edit it! import root from '${get_file(path_to_routes, routes.root)}'; diff --git a/src/middleware.ts b/src/middleware.ts index b031af0..8d999cb 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -484,7 +484,7 @@ function get_page_handler( let scripts = [] .concat(chunks.main) // chunks main might be an array. it might not! thanks, webpack .filter(file => !file.match(/\.map$/)) - .map(file => ``) + .map(file => ``) .join(''); let inline_script = `__SAPPER__={${[ From 6e2383b66b9efc9d4fc9ee5ea54c09373a47616e Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 28 Aug 2018 17:28:40 -0400 Subject: [PATCH 04/29] add shimport --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 7ecf9ae..617f0c0 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ }, "dependencies": { "html-minifier": "^3.5.16", + "shimport": "^0.0.4", "source-map-support": "^0.5.6", "tslib": "^1.9.1" }, From 85e25d6380ad996f41e34ee595ecb889586b5ac0 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 28 Aug 2018 17:29:14 -0400 Subject: [PATCH 05/29] add a --bundler option, for forcing rollup or webpack --- src/api/build.ts | 4 +++- src/api/dev.ts | 8 +++++++- src/api/export.ts | 2 +- src/cli/build.ts | 8 ++++++-- src/cli/dev.ts | 2 +- src/cli/export.ts | 2 +- src/cli/utils/validate_bundler.ts | 21 +++++++++++++++++++++ src/core/create_compilers.ts | 9 +++++---- 8 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 src/cli/utils/validate_bundler.ts diff --git a/src/api/build.ts b/src/api/build.ts index 79289d1..152dc43 100644 --- a/src/api/build.ts +++ b/src/api/build.ts @@ -7,6 +7,7 @@ import minify_html from './utils/minify_html'; import { create_compilers, create_main_manifests, create_routes, create_serviceworker_manifest } from '../core'; import { Compilers, Compiler } from '../core/create_compilers'; import * as events from './interfaces'; +import validate_bundler from '../cli/utils/validate_bundler'; export function build(opts: {}) { const emitter = new EventEmitter(); @@ -28,6 +29,7 @@ export function build(opts: {}) { async function execute(emitter: EventEmitter, { dest = 'build', app = 'app', + bundler, webpack = 'webpack', rollup = 'rollup', routes = 'routes' @@ -53,7 +55,7 @@ async function execute(emitter: EventEmitter, { // create app/manifest/client.js and app/manifest/server.js create_main_manifests({ routes: route_objects }); - const { client, server, serviceworker } = create_compilers({ webpack, rollup }); + const { client, server, serviceworker } = create_compilers(validate_bundler(bundler), { webpack, rollup }); const client_result = await client.compile(); emitter.emit('build', { diff --git a/src/api/dev.ts b/src/api/dev.ts index 44a9ef9..49fbab2 100644 --- a/src/api/dev.ts +++ b/src/api/dev.ts @@ -11,16 +11,19 @@ import { create_routes, create_main_manifests, create_compilers, create_servicew import { Compiler, Compilers, CompileResult, CompileError } from '../core/create_compilers'; import Deferred from './utils/Deferred'; import * as events from './interfaces'; +import validate_bundler from '../cli/utils/validate_bundler'; export function dev(opts) { return new Watcher(opts); } class Watcher extends EventEmitter { + bundler: string; dirs: { app: string; dest: string; routes: string; + rollup: string; webpack: string; } port: number; @@ -47,6 +50,7 @@ class Watcher extends EventEmitter { app = locations.app(), dest = locations.dest(), routes = locations.routes(), + bundler, webpack = 'webpack', rollup = 'rollup', port = +process.env.PORT @@ -54,12 +58,14 @@ class Watcher extends EventEmitter { app: string, dest: string, routes: string, + bundler?: string, webpack: string, rollup: string, port: number }) { super(); + this.bundler = validate_bundler(bundler); this.dirs = { app, dest, routes, webpack, rollup }; this.port = port; this.closed = false; @@ -157,7 +163,7 @@ class Watcher extends EventEmitter { }; // TODO watch the configs themselves? - const compilers: Compilers = create_compilers({ + const compilers: Compilers = create_compilers(this.bundler, { webpack: this.dirs.webpack, rollup: this.dirs.rollup }); diff --git a/src/api/export.ts b/src/api/export.ts index 9e80ac5..0fc877b 100644 --- a/src/api/export.ts +++ b/src/api/export.ts @@ -13,7 +13,7 @@ import * as events from './interfaces'; type Opts = { build: string, dest: string, - basepath: string, + basepath?: string, timeout: number | false }; diff --git a/src/cli/build.ts b/src/cli/build.ts index c5844f6..e1a7e87 100644 --- a/src/cli/build.ts +++ b/src/cli/build.ts @@ -1,14 +1,18 @@ import { build as _build } from '../api/build'; -import colors from 'kleur'; +import * as colors from 'kleur'; import { locations } from '../config'; +import validate_bundler from './utils/validate_bundler'; + +export function build(opts: { bundler?: string }) { + const bundler = validate_bundler(opts.bundler); -export function build() { return new Promise((fulfil, reject) => { try { const emitter = _build({ dest: locations.dest(), app: locations.app(), routes: locations.routes(), + bundler, webpack: 'webpack', rollup: 'rollup' }); diff --git a/src/cli/dev.ts b/src/cli/dev.ts index afbbc2f..ecaa4a3 100644 --- a/src/cli/dev.ts +++ b/src/cli/dev.ts @@ -5,7 +5,7 @@ import prettyMs from 'pretty-ms'; import { dev as _dev } from '../api/dev'; import * as events from '../api/interfaces'; -export function dev(opts: { port: number, open: boolean }) { +export function dev(opts: { port: number, open: boolean, bundler?: string }) { try { const watcher = _dev(opts); diff --git a/src/cli/export.ts b/src/cli/export.ts index 04aa0f9..052e9b9 100644 --- a/src/cli/export.ts +++ b/src/cli/export.ts @@ -1,5 +1,5 @@ import { exporter as _exporter } from '../api/export'; -import colors from 'kleur'; +import * as colors from 'kleur'; import prettyBytes from 'pretty-bytes'; import { locations } from '../config'; diff --git a/src/cli/utils/validate_bundler.ts b/src/cli/utils/validate_bundler.ts new file mode 100644 index 0000000..38ea550 --- /dev/null +++ b/src/cli/utils/validate_bundler.ts @@ -0,0 +1,21 @@ +import * as fs from 'fs'; + +export default function validate_bundler(bundler?: string) { + if (!bundler) { + bundler = ( + fs.existsSync('rollup') ? 'rollup' : + fs.existsSync('webpack') ? 'webpack' : + null + ); + + if (!bundler) { + throw new Error(`Could not find a 'rollup' or 'webpack' directory`); + } + } + + if (bundler !== 'rollup' && bundler !== 'webpack') { + throw new Error(`'${bundler}' is not a valid option for --bundler — must be either 'rollup' or 'webpack'`); + } + + return bundler; +} \ No newline at end of file diff --git a/src/core/create_compilers.ts b/src/core/create_compilers.ts index 210b71f..8e25432 100644 --- a/src/core/create_compilers.ts +++ b/src/core/create_compilers.ts @@ -211,8 +211,8 @@ export type Compilers = { serviceworker?: Compiler; } -export default function create_compilers({ webpack, rollup }: { webpack: string, rollup: string }): Compilers { - if (fs.existsSync(rollup)) { +export default function create_compilers(bundler: string, { webpack, rollup }: { webpack: string, rollup: string }): Compilers { + if (bundler === 'rollup') { if (!r) r = relative('rollup', process.cwd()); const sw = `${rollup}/service-worker.config.js`; @@ -224,7 +224,7 @@ export default function create_compilers({ webpack, rollup }: { webpack: string, }; } - if (fs.existsSync(webpack)) { + if (bundler === 'webpack') { if (!wp) wp = relative('webpack', process.cwd()); const sw = `${webpack}/service-worker.config.js`; @@ -236,7 +236,8 @@ export default function create_compilers({ webpack, rollup }: { webpack: string, }; } - throw new Error(`Could not find config files for rollup or webpack`); + // this shouldn't be possible... + throw new Error(`Invalid bundler option '${bundler}'`); } const locPattern = /\((\d+):(\d+)\)$/; From 19a5dcad1d534929af0446dbce8e6685eca11317 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 28 Aug 2018 17:29:27 -0400 Subject: [PATCH 06/29] update CLI --- src/cli.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/cli.ts b/src/cli.ts index 289bffa..6b09f06 100755 --- a/src/cli.ts +++ b/src/cli.ts @@ -11,7 +11,8 @@ prog.command('dev') .describe('Start a development server') .option('-p, --port', 'Specify a port') .option('-o, --open', 'Open a browser window') - .action(async (opts: { port: number, open: boolean }) => { + .option('--bundler', 'Specify a bundler (rollup or webpack)') + .action(async (opts: { port: number, open: boolean, bundler?: string }) => { const { dev } = await import('./cli/dev'); dev(opts); }); @@ -19,8 +20,9 @@ prog.command('dev') prog.command('build [dest]') .describe('Create a production-ready version of your app') .option('-p, --port', 'Default of process.env.PORT', '3000') + .option('--bundler', 'Specify a bundler (rollup or webpack)', 'auto') .example(`build custom-dir -p 4567`) - .action(async (dest = 'build', opts: { port: string }) => { + .action(async (dest = 'build', opts: { port: string, bundler?: string }) => { console.log(`> Building...`); process.env.NODE_ENV = process.env.NODE_ENV || 'production'; @@ -30,7 +32,7 @@ prog.command('build [dest]') try { const { build } = await import('./cli/build'); - await build(); + await build(opts); const launcher = path.resolve(dest, 'index.js'); @@ -66,8 +68,10 @@ prog.command('export [dest]') .option('--build-dir', 'Specify a custom temporary build directory', '.sapper/prod') .option('--basepath', 'Specify a base path') .option('--timeout', 'Milliseconds to wait for a page (--no-timeout to disable)', 5000) + .option('--bundler', 'Specify a bundler (rollup or webpack)', 'auto') .action(async (dest = 'export', opts: { build: boolean, + bundler?: string, 'build-dir': string, basepath?: string, timeout: number | false @@ -81,7 +85,7 @@ prog.command('export [dest]') if (opts.build) { console.log(`> Building...`); const { build } = await import('./cli/build'); - await build(); + await build(opts); console.error(`\n> Built in ${elapsed(start)}`); } From 70b5cc86dc795fe4afee84936b593153d7ab6c6c Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 28 Aug 2018 17:56:46 -0400 Subject: [PATCH 07/29] replace client_assets.json with build.json, include bundler name --- src/api/build.ts | 5 ++++- src/api/dev.ts | 5 ++++- src/cli.ts | 4 ++-- src/cli/build.ts | 2 +- src/cli/export.ts | 2 +- src/middleware.ts | 28 ++++++++++++++++------------ 6 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/api/build.ts b/src/api/build.ts index 152dc43..1f66bcf 100644 --- a/src/api/build.ts +++ b/src/api/build.ts @@ -64,7 +64,10 @@ async function execute(emitter: EventEmitter, { result: client_result }); - fs.writeFileSync(path.join(dest, 'client_assets.json'), JSON.stringify(client_result.assetsByChunkName)); + fs.writeFileSync(path.join(dest, 'build.json'), JSON.stringify({ + bundler, + assets: client_result.assetsByChunkName + })); const server_stats = await server.compile(); emitter.emit('build', { diff --git a/src/api/dev.ts b/src/api/dev.ts index 49fbab2..d7a4506 100644 --- a/src/api/dev.ts +++ b/src/api/dev.ts @@ -271,7 +271,10 @@ class Watcher extends EventEmitter { }, handle_result: (result: CompileResult) => { - fs.writeFileSync(path.join(dest, 'client_assets.json'), JSON.stringify(result.assetsByChunkName, null, ' ')); + fs.writeFileSync(path.join(dest, 'build.json'), JSON.stringify({ + bundler: this.bundler, + assets: result.assetsByChunkName + }, null, ' ')); this.deferreds.client.fulfil(); const client_files = result.assets.map((file: string) => `client/${file}`); diff --git a/src/cli.ts b/src/cli.ts index 6b09f06..302859a 100755 --- a/src/cli.ts +++ b/src/cli.ts @@ -20,7 +20,7 @@ prog.command('dev') prog.command('build [dest]') .describe('Create a production-ready version of your app') .option('-p, --port', 'Default of process.env.PORT', '3000') - .option('--bundler', 'Specify a bundler (rollup or webpack)', 'auto') + .option('--bundler', 'Specify a bundler (rollup or webpack, blank for auto)') .example(`build custom-dir -p 4567`) .action(async (dest = 'build', opts: { port: string, bundler?: string }) => { console.log(`> Building...`); @@ -68,7 +68,7 @@ prog.command('export [dest]') .option('--build-dir', 'Specify a custom temporary build directory', '.sapper/prod') .option('--basepath', 'Specify a base path') .option('--timeout', 'Milliseconds to wait for a page (--no-timeout to disable)', 5000) - .option('--bundler', 'Specify a bundler (rollup or webpack)', 'auto') + .option('--bundler', 'Specify a bundler (rollup or webpack, blank for auto)') .action(async (dest = 'export', opts: { build: boolean, bundler?: string, diff --git a/src/cli/build.ts b/src/cli/build.ts index e1a7e87..f00dafb 100644 --- a/src/cli/build.ts +++ b/src/cli/build.ts @@ -1,5 +1,5 @@ import { build as _build } from '../api/build'; -import * as colors from 'kleur'; +import colors from 'kleur'; import { locations } from '../config'; import validate_bundler from './utils/validate_bundler'; diff --git a/src/cli/export.ts b/src/cli/export.ts index 052e9b9..04aa0f9 100644 --- a/src/cli/export.ts +++ b/src/cli/export.ts @@ -1,5 +1,5 @@ import { exporter as _exporter } from '../api/export'; -import * as colors from 'kleur'; +import colors from 'kleur'; import prettyBytes from 'pretty-bytes'; import { locations } from '../config'; diff --git a/src/middleware.ts b/src/middleware.ts index 8d999cb..ea28340 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -282,9 +282,9 @@ function get_page_handler( ) { const output = locations.dest(); - const get_chunks = dev() - ? () => JSON.parse(fs.readFileSync(path.join(output, 'client_assets.json'), 'utf-8')) - : (assets => () => assets)(JSON.parse(fs.readFileSync(path.join(output, 'client_assets.json'), 'utf-8'))); + const get_build_info = dev() + ? () => JSON.parse(fs.readFileSync(path.join(output, 'build.json'), 'utf-8')) + : (assets => () => assets)(JSON.parse(fs.readFileSync(path.join(output, 'build.json'), 'utf-8'))); const template = dev() ? () => fs.readFileSync(`${locations.app()}/template.html`, 'utf-8') @@ -303,19 +303,22 @@ function get_page_handler( } function handle_page(page: Page, req: Req, res: ServerResponse, status = 200, error: Error | string = null) { - const chunks: Record = get_chunks(); + const build_info: { + bundler: 'rollup' | 'webpack', + assets: Record + } = get_build_info(); res.setHeader('Content-Type', 'text/html'); // preload main.js and current route // TODO detect other stuff we can preload? images, CSS, fonts? - let preloaded_chunks = Array.isArray(chunks.main) ? chunks.main : [chunks.main]; + let preloaded_chunks = Array.isArray(build_info.assets.main) ? build_info.assets.main : [build_info.assets.main]; if (!error) { page.parts.forEach(part => { if (!part) return; // using concat because it could be a string or an array. thanks webpack! - preloaded_chunks = preloaded_chunks.concat(chunks[part.name]); + preloaded_chunks = preloaded_chunks.concat(build_info.assets[part.name]); }); } @@ -481,11 +484,12 @@ function get_page_handler( store }); - let scripts = [] - .concat(chunks.main) // chunks main might be an array. it might not! thanks, webpack - .filter(file => !file.match(/\.map$/)) - .map(file => ``) - .join(''); + const file = [].concat(build_info.assets.main).filter(file => file && /\.js$/.test(file))[0]; + const main = `${req.baseUrl}/client/${file}`; + + const script = build_info.bundler === 'rollup' + ? `` + : ``; let inline_script = `__SAPPER__={${[ error && `error:1`, @@ -501,7 +505,7 @@ function get_page_handler( const body = template() .replace('%sapper.base%', () => ``) - .replace('%sapper.scripts%', () => `${scripts}`) + .replace('%sapper.scripts%', () => `${script}`) .replace('%sapper.html%', () => html) .replace('%sapper.head%', () => `${head}`) .replace('%sapper.styles%', () => (css && css.code ? `` : '')); From 7e698f1613cd8f861f11a90cb8156a246e356561 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 28 Aug 2018 18:06:26 -0400 Subject: [PATCH 08/29] use watchChange plugin hook to detect invalidations --- src/core/create_compilers.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/core/create_compilers.ts b/src/core/create_compilers.ts index 8e25432..0013a9a 100644 --- a/src/core/create_compilers.ts +++ b/src/core/create_compilers.ts @@ -105,6 +105,13 @@ export class RollupCompiler { const mod: any = require(input); delete require.cache[input]; + (mod.plugins || (mod.plugins = [])).push({ + name: 'sapper-internal', + watchChange: (file: string) => { + this._oninvalid(file); + } + }); + return mod; } @@ -147,8 +154,6 @@ export class RollupCompiler { case 'BUNDLE_START': this._start = Date.now(); - // TODO figure out which file changed - this._oninvalid('[TODO] unknown file'); break; case 'BUNDLE_END': From f8d742bdd006c525d2dd0d5d35280bca394cbb19 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 10:55:52 -0400 Subject: [PATCH 09/29] hashing --- src/core/create_compilers.ts | 41 ++++++++++++++++++++++++++---------- src/rollup.ts | 2 ++ 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/core/create_compilers.ts b/src/core/create_compilers.ts index 0013a9a..5b7fe38 100644 --- a/src/core/create_compilers.ts +++ b/src/core/create_compilers.ts @@ -22,7 +22,7 @@ export class CompileResult { } class RollupResult extends CompileResult { - constructor(duration: number, stats: any) { + constructor(duration: number, { input, chunks }: { input: string, chunks: any[] }) { super(); this.duration = duration; @@ -30,14 +30,17 @@ class RollupResult extends CompileResult { this.errors = []; this.warnings = []; - // TODO - this.assets = []; + this.assets = chunks.map(chunk => chunk.fileName); - this.assetsByChunkName = { - // TODO need to hash these filenames and - // expose the info in the Rollup output - main: `client.js` - }; + // TODO populate this properly. We don't have named chunks, as in + // webpack, but we can have a route -> [chunk] map or something + this.assetsByChunkName = {}; + + chunks.forEach(chunk => { + if (input in chunk.modules) { + this.assetsByChunkName.main = chunk.fileName; + } + }); } print() { @@ -77,9 +80,13 @@ export class RollupCompiler { _: Promise; _oninvalid: (filename: string) => void; _start: number; + input: string; + chunks: any[]; // TODO types constructor(config: any) { this._ = this.get_config(path.resolve(config)); + this.input = null; + this.chunks = []; } async get_config(input: string) { @@ -107,8 +114,13 @@ export class RollupCompiler { (mod.plugins || (mod.plugins = [])).push({ name: 'sapper-internal', - watchChange: (file: string) => { - this._oninvalid(file); + options: (opts: any) => { + this.input = opts.input; + }, + renderChunk: (code: string, chunk: any) => { + if (chunk.isEntry) { + this.chunks.push(chunk); + } } }); @@ -135,6 +147,10 @@ export class RollupCompiler { const watcher = r.watch(config); + watcher.on('change', (id: string) => { + this._oninvalid(id); + }); + watcher.on('event', (event: any) => { switch (event.code) { case 'FATAL': @@ -157,7 +173,10 @@ export class RollupCompiler { break; case 'BUNDLE_END': - cb(null, new RollupResult(Date.now() - this._start, event.result)); + cb(null, new RollupResult(Date.now() - this._start, { + input: this.input, + chunks: this.chunks + })); break; default: diff --git a/src/rollup.ts b/src/rollup.ts index 77d41fd..5ef280a 100644 --- a/src/rollup.ts +++ b/src/rollup.ts @@ -11,6 +11,8 @@ export default { output: () => { return { dir: `${locations.dest()}/client`, + entryFileNames: '[name].[hash].js', + chunkFileNames: '[name].[hash].js', format: 'esm' }; } From 458be49b351f1a92db68fb26f4dd65166175cbfc Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 13:26:31 -0400 Subject: [PATCH 10/29] emit errors and warnings, albeit clumsily --- src/api/dev.ts | 4 +-- src/core/create_compilers.ts | 69 ++++++++++++++++++++++++------------ 2 files changed, 48 insertions(+), 25 deletions(-) diff --git a/src/api/dev.ts b/src/api/dev.ts index d7a4506..92b07db 100644 --- a/src/api/dev.ts +++ b/src/api/dev.ts @@ -256,8 +256,6 @@ class Watcher extends EventEmitter { } }); - let first = true; - this.watch(compilers.client, { name: 'client', @@ -426,7 +424,7 @@ function noop() {} function watch_dir( dir: string, - filter: ({ path, stats }: { path: string, stats: fs.CompileResult }) => boolean, + filter: ({ path, stats }: { path: string, stats: fs.Stats }) => boolean, callback: () => void ) { let watch; diff --git a/src/core/create_compilers.ts b/src/core/create_compilers.ts index 5b7fe38..7909944 100644 --- a/src/core/create_compilers.ts +++ b/src/core/create_compilers.ts @@ -8,8 +8,6 @@ let wp: any; export class CompileError { file: string; - line: number; - column: number; message: string; } @@ -22,22 +20,22 @@ export class CompileResult { } class RollupResult extends CompileResult { - constructor(duration: number, { input, chunks }: { input: string, chunks: any[] }) { + constructor(duration: number, compiler: RollupCompiler) { super(); this.duration = duration; - this.errors = []; - this.warnings = []; + this.errors = compiler.errors.map(munge_rollup_warning_or_error); + this.warnings = compiler.warnings.map(munge_rollup_warning_or_error); // TODO emit this as they happen - this.assets = chunks.map(chunk => chunk.fileName); + this.assets = compiler.chunks.map(chunk => chunk.fileName); - // TODO populate this properly. We don't have named chunks, as in + // TODO populate this properly. We don't have namedcompiler. chunks, as in // webpack, but we can have a route -> [chunk] map or something this.assetsByChunkName = {}; - chunks.forEach(chunk => { - if (input in chunk.modules) { + compiler.chunks.forEach(chunk => { + if (compiler.input in chunk.modules) { this.assetsByChunkName.main = chunk.fileName; } }); @@ -62,8 +60,8 @@ class WebpackResult extends CompileResult { const format_messages = require('webpack-format-messages'); const messages = format_messages(stats); - this.errors = messages.errors.map(mungeWebpackError); - this.warnings = messages.warnings.map(mungeWebpackError); + this.errors = messages.errors.map(munge_webpack_warning_or_error); + this.warnings = messages.warnings.map(munge_webpack_warning_or_error); this.duration = info.time; @@ -81,11 +79,15 @@ export class RollupCompiler { _oninvalid: (filename: string) => void; _start: number; input: string; + warnings: any[]; + errors: any[]; chunks: any[]; // TODO types constructor(config: any) { this._ = this.get_config(path.resolve(config)); this.input = null; + this.warnings = []; + this.errors = []; this.chunks = []; } @@ -124,6 +126,16 @@ export class RollupCompiler { } }); + const onwarn = mod.onwarn || ((warning: any, handler: (warning: any) => void) => { + handler(warning); + }); + + mod.onwarn = (warning: any) => { + onwarn(warning, (warning: any) => { + this.warnings.push(warning); + }); + }; + return mod; } @@ -148,6 +160,9 @@ export class RollupCompiler { const watcher = r.watch(config); watcher.on('change', (id: string) => { + this.chunks = []; + this.warnings = []; + this.errors = []; this._oninvalid(id); }); @@ -155,12 +170,21 @@ export class RollupCompiler { switch (event.code) { case 'FATAL': // TODO kill the process? + if (event.error.filename) { + // TODO this is a bit messy. Also, can + // Rollup emit other kinds of error? + event.error.message = [ + `Failed to build — error in ${event.error.filename}: ${event.error.message}`, + event.error.frame + ].filter(Boolean).join('\n'); + } + cb(event.error); break; case 'ERROR': - // TODO print warnings as well? - cb(event.error); + this.errors.push(event.error); + cb(null, new RollupResult(Date.now() - this._start, this)); break; case 'START': @@ -173,10 +197,7 @@ export class RollupCompiler { break; case 'BUNDLE_END': - cb(null, new RollupResult(Date.now() - this._start, { - input: this.input, - chunks: this.chunks - })); + cb(null, new RollupResult(Date.now() - this._start, this)); break; default: @@ -266,7 +287,7 @@ export default function create_compilers(bundler: string, { webpack, rollup }: { const locPattern = /\((\d+):(\d+)\)$/; -function mungeWebpackError(message: string) { +function munge_webpack_warning_or_error(message: string) { // TODO this is all a bit rube goldberg... const lines = message.split('\n'); @@ -287,9 +308,13 @@ function mungeWebpackError(message: string) { return { file, - line, - column, - message: lines.join('\n'), - originalMessage: message + message: lines.join('\n') + }; +} + +function munge_rollup_warning_or_error(warning_or_error: any) { + return { + file: warning_or_error.filename, + message: [warning_or_error.message, warning_or_error.frame].filter(Boolean).join('\n') }; } \ No newline at end of file From 6393a30b13a0fafdc1c00aac131a32d615d175ce Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 15:03:10 -0400 Subject: [PATCH 11/29] print nice build summaries --- src/cli.ts | 2 +- src/cli/build.ts | 19 ++++++++-- src/cli/export.ts | 11 ++---- src/core/create_compilers.ts | 67 +++++++++++++++++++++++++++++++++--- src/utils.ts | 15 ++++++++ 5 files changed, 98 insertions(+), 16 deletions(-) create mode 100644 src/utils.ts diff --git a/src/cli.ts b/src/cli.ts index 302859a..0568206 100755 --- a/src/cli.ts +++ b/src/cli.ts @@ -48,7 +48,7 @@ prog.command('build [dest]') console.error(`\n> Finished in ${elapsed(start)}. Type ${colors.bold.cyan(`node ${dest}`)} to run the app.`); } catch (err) { - console.error(err ? err.details || err.stack || err.message || err : 'Unknown error'); + console.log(`${colors.bold.red(`> ${err.message}`)}`); process.exit(1); } }); diff --git a/src/cli/build.ts b/src/cli/build.ts index f00dafb..6b291b6 100644 --- a/src/cli/build.ts +++ b/src/cli/build.ts @@ -2,6 +2,7 @@ import { build as _build } from '../api/build'; import colors from 'kleur'; import { locations } from '../config'; import validate_bundler from './utils/validate_bundler'; +import { repeat } from '../utils'; export function build(opts: { bundler?: string }) { const bundler = validate_bundler(opts.bundler); @@ -18,7 +19,20 @@ export function build(opts: { bundler?: string }) { }); emitter.on('build', event => { - console.log(colors.inverse(`\nbuilt ${event.type}`)); + let banner = `built ${event.type}`; + let c = colors.cyan; + + const { warnings } = event.result; + if (warnings.length > 0) { + banner += ` with ${warnings.length} ${warnings.length === 1 ? 'warning' : 'warnings'}`; + c = colors.yellow; + } + + console.log(); + console.log(c(`┌─${repeat('─', banner.length)}─┐`)); + console.log(c(`│ ${colors.bold(banner) } │`)); + console.log(c(`└─${repeat('─', banner.length)}─┘`)); + console.log(event.result.print()); }); @@ -30,8 +44,7 @@ export function build(opts: { bundler?: string }) { fulfil(); }); } catch (err) { - console.log(`${colors.bold.red(`> ${err.message}`)}`); - process.exit(1); + reject(err); } }); } \ No newline at end of file diff --git a/src/cli/export.ts b/src/cli/export.ts index 04aa0f9..00dd1d5 100644 --- a/src/cli/export.ts +++ b/src/cli/export.ts @@ -1,12 +1,8 @@ import { exporter as _exporter } from '../api/export'; import colors from 'kleur'; -import prettyBytes from 'pretty-bytes'; +import pb from 'pretty-bytes'; import { locations } from '../config'; - -function left_pad(str: string, len: number) { - while (str.length < len) str = ` ${str}`; - return str; -} +import { right_pad } from '../utils'; export function exporter(export_dir: string, { basepath = '', @@ -25,9 +21,8 @@ export function exporter(export_dir: string, { }); emitter.on('file', event => { - const pb = prettyBytes(event.size); const size_color = event.size > 150000 ? colors.bold.red : event.size > 50000 ? colors.bold.yellow : colors.bold.gray; - const size_label = size_color(left_pad(prettyBytes(event.size), 10)); + const size_label = size_color(right_pad(pb(event.size), 10)); const file_label = event.status === 200 ? event.file diff --git a/src/core/create_compilers.ts b/src/core/create_compilers.ts index 7909944..7d97b10 100644 --- a/src/core/create_compilers.ts +++ b/src/core/create_compilers.ts @@ -1,7 +1,10 @@ import * as fs from 'fs'; import * as path from 'path'; +import colors from 'kleur'; +import pb from 'pretty-bytes'; import { locations } from '../config'; import relative from 'require-relative'; +import { left_pad, right_pad } from '../utils'; let r: any; let wp: any; @@ -20,6 +23,8 @@ export class CompileResult { } class RollupResult extends CompileResult { + summary: string; + constructor(duration: number, compiler: RollupCompiler) { super(); @@ -39,10 +44,51 @@ class RollupResult extends CompileResult { this.assetsByChunkName.main = chunk.fileName; } }); + + this.summary = compiler.chunks.map(chunk => { + const size_color = chunk.code.length > 150000 ? colors.bold.red : chunk.code.length > 50000 ? colors.bold.yellow : colors.bold.white; + const size_label = left_pad(pb(chunk.code.length), 10); + + const lines = [size_color(`${size_label} ${chunk.fileName}`)]; + + const deps = Object.keys(chunk.modules) + .map(file => { + return { + file: path.relative(process.cwd(), file), + size: chunk.modules[file].renderedLength + }; + }) + .filter(dep => dep.size > 0) + .sort((a, b) => b.size - a.size); + + const total_unminified = deps.reduce((t, d) => t + d.size, 0); + + deps.forEach((dep, i) => { + const c = i === deps.length - 1 ? '└' : '│'; + let line = ` ${c} ${dep.file}`; + + if (deps.length > 1) { + const p = (100 * dep.size / total_unminified).toFixed(1); + line += ` (${p}%)`; + } + + lines.push(colors.gray(line)); + }); + + return lines.join('\n'); + }).join('\n'); } print() { - return 'TODO summarise build'; + const blocks: string[] = this.warnings.map(warning => { + return warning.file + ? `> ${colors.bold(warning.file)}\n${warning.message}` + : `> ${warning.message}`; + }); + + blocks.push(this.summary); + + return blocks.join('\n\n'); } } @@ -148,10 +194,23 @@ export class RollupCompiler { const start = Date.now(); - const bundle = await r.rollup(config); - await bundle.write(config.output); + try { + const bundle = await r.rollup(config); + await bundle.write(config.output); - return new RollupResult(Date.now() - start, bundle); + return new RollupResult(Date.now() - start, this); + } catch (err) { + if (err.filename) { + // TODO this is a bit messy. Also, can + // Rollup emit other kinds of error? + err.message = [ + `Failed to build — error in ${err.filename}: ${err.message}`, + err.frame + ].filter(Boolean).join('\n'); + } + + throw err; + } } async watch(cb: (err?: Error, stats?: any) => void) { diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..ea70779 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,15 @@ +export function left_pad(str: string, len: number) { + while (str.length < len) str = ` ${str}`; + return str; +} + +export function right_pad(str: string, len: number) { + while (str.length < len) str += ' '; + return str; +} + +export function repeat(str: string, i: number) { + let result = ''; + while (i--) result += str; + return result; +} \ No newline at end of file From 36fc8a947b0f9594f4e24eeb2e204786576b523a Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 15:58:27 -0400 Subject: [PATCH 12/29] use shimport --- package.json | 2 +- src/api/build.ts | 5 ++++- src/api/dev.ts | 5 ++++- src/api/utils/copy_shimport.ts | 9 +++++++++ src/middleware.ts | 4 ++-- 5 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 src/api/utils/copy_shimport.ts diff --git a/package.json b/package.json index 617f0c0..54edf36 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ }, "dependencies": { "html-minifier": "^3.5.16", - "shimport": "^0.0.4", + "shimport": "^0.0.5", "source-map-support": "^0.5.6", "tslib": "^1.9.1" }, diff --git a/src/api/build.ts b/src/api/build.ts index 1f66bcf..c67071a 100644 --- a/src/api/build.ts +++ b/src/api/build.ts @@ -8,6 +8,7 @@ import { create_compilers, create_main_manifests, create_routes, create_servicew import { Compilers, Compiler } from '../core/create_compilers'; import * as events from './interfaces'; import validate_bundler from '../cli/utils/validate_bundler'; +import { copy_shimport } from './utils/copy_shimport'; export function build(opts: {}) { const emitter = new EventEmitter(); @@ -34,8 +35,9 @@ async function execute(emitter: EventEmitter, { rollup = 'rollup', routes = 'routes' } = {}) { - mkdirp.sync(dest); + mkdirp.sync(`${dest}/client`); rimraf.sync(path.join(dest, '**/*')); + copy_shimport(dest); // minify app/template.html // TODO compile this to a function? could be quicker than str.replace(...).replace(...).replace(...) @@ -66,6 +68,7 @@ async function execute(emitter: EventEmitter, { fs.writeFileSync(path.join(dest, 'build.json'), JSON.stringify({ bundler, + shimport: bundler === 'rollup' && require('shimport/package.json').version, assets: client_result.assetsByChunkName })); diff --git a/src/api/dev.ts b/src/api/dev.ts index 92b07db..1b7a719 100644 --- a/src/api/dev.ts +++ b/src/api/dev.ts @@ -12,6 +12,7 @@ import { Compiler, Compilers, CompileResult, CompileError } from '../core/create import Deferred from './utils/Deferred'; import * as events from './interfaces'; import validate_bundler from '../cli/utils/validate_bundler'; +import { copy_shimport } from './utils/copy_shimport'; export function dev(opts) { return new Watcher(opts); @@ -110,7 +111,8 @@ class Watcher extends EventEmitter { const { dest } = this.dirs; rimraf.sync(dest); - mkdirp.sync(dest); + mkdirp.sync(`${dest}/client`); + if (this.bundler === 'rollup') copy_shimport(dest); const dev_port = await ports.find(10000); @@ -271,6 +273,7 @@ class Watcher extends EventEmitter { handle_result: (result: CompileResult) => { fs.writeFileSync(path.join(dest, 'build.json'), JSON.stringify({ bundler: this.bundler, + shimport: this.bundler === 'rollup' && require('shimport/package.json').version, assets: result.assetsByChunkName }, null, ' ')); this.deferreds.client.fulfil(); diff --git a/src/api/utils/copy_shimport.ts b/src/api/utils/copy_shimport.ts new file mode 100644 index 0000000..27c247d --- /dev/null +++ b/src/api/utils/copy_shimport.ts @@ -0,0 +1,9 @@ +import * as fs from 'fs'; + +export function copy_shimport(dest: string) { + const shimport_version = require('shimport/package.json').version; + fs.writeFileSync( + `${dest}/client/shimport@${shimport_version}.js`, + fs.readFileSync(require.resolve('shimport/index.dev.js')) + ); +} \ No newline at end of file diff --git a/src/middleware.ts b/src/middleware.ts index ea28340..982e081 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -305,6 +305,7 @@ function get_page_handler( function handle_page(page: Page, req: Req, res: ServerResponse, status = 200, error: Error | string = null) { const build_info: { bundler: 'rollup' | 'webpack', + shimport: string | null, assets: Record } = get_build_info(); @@ -357,7 +358,6 @@ function get_page_handler( ); if (include_cookies) { - const cookies: Record = {}; if (!opts.headers) opts.headers = {}; const str = [] @@ -488,7 +488,7 @@ function get_page_handler( const main = `${req.baseUrl}/client/${file}`; const script = build_info.bundler === 'rollup' - ? `` + ? `` : ``; let inline_script = `__SAPPER__={${[ From 99b096a5c4b71935f3834cb215dd943d4aab5b2d Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 16:05:41 -0400 Subject: [PATCH 13/29] rimraf before mkdirp --- src/api/build.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/build.ts b/src/api/build.ts index c67071a..941c126 100644 --- a/src/api/build.ts +++ b/src/api/build.ts @@ -35,8 +35,8 @@ async function execute(emitter: EventEmitter, { rollup = 'rollup', routes = 'routes' } = {}) { - mkdirp.sync(`${dest}/client`); rimraf.sync(path.join(dest, '**/*')); + mkdirp.sync(`${dest}/client`); copy_shimport(dest); // minify app/template.html From de308d5bb0f86802c0fa4d71f9995bde83433223 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 16:29:37 -0400 Subject: [PATCH 14/29] rebuild lockfile --- package-lock.json | 1515 +++++++++++++++++++++++++++++---------------- 1 file changed, 970 insertions(+), 545 deletions(-) diff --git a/package-lock.json b/package-lock.json index 09025f7..070086a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "sapper", - "version": "0.17.0", + "version": "0.17.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -55,9 +55,9 @@ "dev": true }, "@types/node": { - "version": "10.7.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.7.1.tgz", - "integrity": "sha512-EGoI4ylB/lPOaqXqtzAyL8HcgOuCtH2hkEaLmkueOYufsTFWBn4VCvlCDC2HW8Q+9iF+QVC3sxjDKQYjHQeZ9w==", + "version": "10.9.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.9.3.tgz", + "integrity": "sha512-DOzWZKUnmFYG0KUOs+9HEBju2QhBU6oM2zeluunQNt0vnJvnkHvtDNlQPZDkTrkC5pZrNx1TPqeL137zciXZMQ==", "dev": true }, "@types/rimraf": { @@ -340,9 +340,9 @@ } }, "acorn": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", - "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.2.tgz", + "integrity": "sha512-cJrKCNcr2kv8dlDnbw+JPUGjHZzo4myaxOLmpOX8a+rgX94YeTcTMv/LFJUSByRpc+i4GgVnnhLxvMu/2Y+rqw==", "dev": true }, "acorn-dynamic-import": { @@ -415,6 +415,282 @@ "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } } }, "aproba": { @@ -433,10 +709,13 @@ } }, "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } }, "arr-flatten": { "version": "1.1.0", @@ -496,9 +775,9 @@ "dev": true }, "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, "arrify": { @@ -608,7 +887,7 @@ "dependencies": { "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -688,6 +967,18 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -768,32 +1059,14 @@ } }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "brorand": { @@ -955,6 +1228,14 @@ "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, "caller-path": { @@ -1024,9 +1305,9 @@ } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -1065,6 +1346,104 @@ "path-is-absolute": "^1.0.0", "readdirp": "^2.0.0", "upath": "^1.0.5" + }, + "dependencies": { + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, "chownr": { @@ -1118,6 +1497,12 @@ "requires": { "is-descriptor": "^0.1.0" } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true } } }, @@ -1127,13 +1512,6 @@ "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "requires": { "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "cli-cursor": { @@ -1180,18 +1558,18 @@ } }, "color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "color-name": "1.1.1" + "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "combined-stream": { @@ -1468,7 +1846,7 @@ "dependencies": { "lodash": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/lodash/-/lodash-3.0.1.tgz", "integrity": "sha1-FNSQKKOLx0AkHRHi7NV+wG1zwZo=", "dev": true } @@ -1550,6 +1928,18 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -1670,9 +2060,9 @@ "dev": true }, "electron": { - "version": "1.8.7", - "resolved": "https://registry.npmjs.org/electron/-/electron-1.8.7.tgz", - "integrity": "sha512-q6dn8bspX8u8z6tNU4bEas6ZrdNavnrjJ6d/oz49Nb4zFIPrdh8p29AFjFlSAavypGwAVR/PhYOAGwzZSQSSVQ==", + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/electron/-/electron-1.8.8.tgz", + "integrity": "sha512-1f9zJehcTTGjrkb06o6ds+gsRq6SYhZJyxOk6zIWjRH8hVy03y/RzUDELzNas71f5vcvXmfGVvyjeEsadDI8tg==", "dev": true, "requires": { "@types/node": "^8.0.24", @@ -1681,9 +2071,9 @@ }, "dependencies": { "@types/node": { - "version": "8.10.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.26.tgz", - "integrity": "sha512-opk6bLLErLSwyVVJeSH5Ek7ZWOBSsN0JrvXTNVGLXLAXKB9xlTYajrplR44xVyMrmbut94H6uJ9jqzM/12jxkA==", + "version": "8.10.28", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.28.tgz", + "integrity": "sha512-iHsAzDg3OLH7JP+wipniUULHoDSWLgEDYOvsar6/mpAkTJd9/n23Ap8ikruMlvRTqMv/LXrflH9v/AfiEqaBGg==", "dev": true } } @@ -2056,38 +2446,12 @@ } }, "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -2097,48 +2461,6 @@ "dev": true, "requires": { "fill-range": "^2.1.0" - }, - "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } } }, "express": { @@ -2226,68 +2548,12 @@ } }, "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "is-extglob": "^1.0.0" } }, "extract-zip": { @@ -2361,26 +2627,16 @@ "dev": true }, "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "finalhandler": { @@ -3130,9 +3386,9 @@ } }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -3151,53 +3407,15 @@ "requires": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } } }, "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "is-glob": "^2.0.0" } }, "globals": { @@ -3293,6 +3511,14 @@ "get-value": "^2.0.6", "has-values": "^1.0.0", "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, "has-values": { @@ -3305,6 +3531,26 @@ "kind-of": "^4.0.0" }, "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -3408,9 +3654,9 @@ "dev": true }, "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -3512,17 +3758,6 @@ "dev": true, "requires": { "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } } }, "is-arrayish": { @@ -3568,17 +3803,6 @@ "dev": true, "requires": { "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } } }, "is-date-object": { @@ -3628,9 +3852,9 @@ "dev": true }, "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, "is-finite": { @@ -3649,12 +3873,12 @@ "dev": true }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "is-extglob": "^1.0.0" } }, "is-module": { @@ -3664,23 +3888,12 @@ "dev": true }, "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } } }, "is-path-cwd": { @@ -3714,6 +3927,14 @@ "dev": true, "requires": { "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, "is-posix-bracket": { @@ -3786,10 +4007,13 @@ "dev": true }, "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } }, "isstream": { "version": "0.1.2", @@ -3896,10 +4120,13 @@ "dev": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } }, "klaw": { "version": "1.3.1", @@ -3911,9 +4138,9 @@ } }, "kleur": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.1.tgz", - "integrity": "sha512-Zq/jyANIJ2uX8UZjWlqLwbyhcxSXJtT/Y89lClyeZd3l++3ztL1I5SSCYrbcbwSunTjC88N3WuMk0kRDQD6gzA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz", + "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==", "dev": true }, "levn": { @@ -4230,24 +4457,24 @@ "dev": true }, "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } }, "miller-rabin": { @@ -4267,18 +4494,18 @@ "dev": true }, "mime-db": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", - "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", + "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==", "dev": true }, "mime-types": { - "version": "2.1.19", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", - "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", + "version": "2.1.20", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", + "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", "dev": true, "requires": { - "mime-db": "~1.35.0" + "mime-db": "~1.36.0" } }, "mimic-fn": { @@ -4393,7 +4620,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { @@ -4434,6 +4661,20 @@ "ms": "2.0.0" } }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", @@ -4487,9 +4728,9 @@ "dev": true }, "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz", + "integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw==", "dev": true, "optional": true }, @@ -4510,6 +4751,26 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, "natural-compare": { @@ -4531,9 +4792,9 @@ "dev": true }, "nice-try": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", - "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "nightmare": { @@ -4783,15 +5044,6 @@ "requires": { "is-descriptor": "^0.1.0" } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } } } }, @@ -4808,6 +5060,14 @@ "dev": true, "requires": { "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, "object.omit": { @@ -4827,6 +5087,14 @@ "dev": true, "requires": { "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, "on-finished": { @@ -4969,23 +5237,6 @@ "is-dotfile": "^1.0.0", "is-extglob": "^1.0.0", "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } } }, "parse-json": { @@ -5345,6 +5596,12 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -5688,9 +5945,9 @@ } }, "rollup-plugin-commonjs": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.1.5.tgz", - "integrity": "sha512-Hy7KbvsSMNu6aCO2xabp8gBcWrTiS+EzfHkzWwZwMjrcAYuYfCLU7fP1nM4xM0FMye/13r8mzTkfb9AmDaZ1hQ==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.1.6.tgz", + "integrity": "sha512-J7GOJm9uzEeLqkVxYSgjyoieh34hATWpa9G2M1ilGzWOLYGfQx5IDQ9ewG8QUj/Z2dzgV+d0/AyloAzElkABAA==", "dev": true, "requires": { "estree-walker": "^0.5.1", @@ -5785,7 +6042,7 @@ }, "typescript": { "version": "1.8.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-1.8.10.tgz", + "resolved": "http://registry.npmjs.org/typescript/-/typescript-1.8.10.tgz", "integrity": "sha1-tHXW4N/wv1DyluXKbvn7tccyDx4=", "dev": true } @@ -5799,97 +6056,6 @@ "requires": { "estree-walker": "^0.5.2", "micromatch": "^2.3.11" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - } } }, "run-async": { @@ -6132,6 +6298,11 @@ "jsonify": "~0.0.0" } }, + "shimport": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/shimport/-/shimport-0.0.5.tgz", + "integrity": "sha512-m1lX1XMFHTJ2Ix3tTHb1REkyrp0sTMtQ4OeibocI7fOErzQr28wf9DSDy2bEXl9KT54m3CDplxBNLrP6HrEVxA==" + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -6226,6 +6397,12 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, @@ -6277,6 +6454,18 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -6287,17 +6476,6 @@ "dev": true, "requires": { "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } } }, "source-list-map": { @@ -6307,10 +6485,9 @@ "dev": true }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-resolve": { "version": "0.5.2", @@ -6326,19 +6503,12 @@ } }, "source-map-support": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.8.tgz", - "integrity": "sha512-WqAEWPdb78u25RfKzOF0swBpY0dKrNdjc4GvLwm7ScX/o9bj8Eh/YL8mcMhBHYDGl87UkkSXDOFnW4G7GhWhGg==", + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", + "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "source-map-url": { @@ -6630,9 +6800,9 @@ "dev": true }, "svelte": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-2.11.0.tgz", - "integrity": "sha512-lIgtxDkGzLNppVNRtn+t2GZzyumxQj6f/Ola+z7fT6bmisTUxKTFf3wUzOwNcYkQWNIOk2/NkzIa/UO4JQO/bg==", + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-2.13.2.tgz", + "integrity": "sha512-b27mBrxCR3CK06iiNdwynq34WV9I9VBBoeO+Rg9lTuRiaYmbN1eG1+6llxvn1VjPt6PGm3EskYOfR85piiCUfA==", "dev": true }, "svelte-dev-helper": { @@ -6642,13 +6812,14 @@ "dev": true }, "svelte-loader": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/svelte-loader/-/svelte-loader-2.10.1.tgz", - "integrity": "sha512-Kua8LHwjrHPEGgFUycPo4pg17vzcBu1ptm/2OR/mZfnR1tk1YRMhyoQGvS15Zr36VwRCPPgDYYVYT3peWVseAw==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/svelte-loader/-/svelte-loader-2.11.0.tgz", + "integrity": "sha512-+Q24lBhQ8KGB9flHNXjKqq9TJEIcT3VJlzsxhijqrJ9feK9bUG3TLDlosceoAXvOsjxuaHKN1ZveUbbX7J7zUQ==", "dev": true, "requires": { "loader-utils": "^1.1.0", - "svelte-dev-helper": "^1.1.7" + "require-relative": "^0.8.7", + "svelte-dev-helper": "^1.1.9" } }, "table": { @@ -6772,17 +6943,6 @@ "dev": true, "requires": { "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } } }, "to-regex": { @@ -6805,6 +6965,17 @@ "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + } } }, "tough-cookie": { @@ -6915,24 +7086,12 @@ "dev": true }, "uglify-js": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.7.tgz", - "integrity": "sha512-J0M2i1mQA+ze3EdN9SBi751DNdAXmeFLfJrd/MDIkRc3G3Gbb9OPVSx7GIQvVwfWxQARcYV2DTxIkMyDAk3o9Q==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.8.tgz", + "integrity": "sha512-WatYTD84gP/867bELqI2F/2xC9PQBETn/L+7RGq9MQOA/7yFBNvY1UwXqvtILeE6n0ITwBXxp34M0/o70dzj6A==", "requires": { - "commander": "~2.16.0", + "commander": "~2.17.1", "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", - "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "uglifyjs-webpack-plugin": { @@ -6957,12 +7116,6 @@ "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, "uglify-es": { "version": "3.3.9", "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", @@ -7071,6 +7224,12 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true } } }, @@ -7233,9 +7392,9 @@ } }, "webpack": { - "version": "4.16.5", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.16.5.tgz", - "integrity": "sha512-i5cHYHonzSc1zBuwB5MSzW4v9cScZFbprkHK8ZgzPDCRkQXGGpYzPmJhbus5bOrZ0tXTcQp+xyImRSvKb0b+Kw==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.17.1.tgz", + "integrity": "sha512-vdPYogljzWPhFKDj3Gcp01Vqgu7K3IQlybc3XIdKSQHelK1C3eIQuysEUR7MxKJmdandZlQB/9BG2Jb1leJHaw==", "dev": true, "requires": { "@webassemblyjs/ast": "1.5.13", @@ -7283,6 +7442,47 @@ "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", "dev": true }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "eslint-scope": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", @@ -7293,17 +7493,250 @@ "estraverse": "^4.1.1" } }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } } } }, @@ -7317,21 +7750,13 @@ } }, "webpack-sources": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.2.0.tgz", + "integrity": "sha512-9BZwxR85dNsjWz3blyxdOhTgtnQvv3OEs5xofI0wPYTwu5kaWxS08UuD1oI7WLBLpRO+ylf0ofnXLXWmGb2WMw==", "dev": true, "requires": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "which": { From ae19288797c109ef47a68a9425688d8e2a1628dc Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 16:45:29 -0400 Subject: [PATCH 15/29] update rollup --- api.js | 2 +- package-lock.json | 6 +++--- package.json | 5 ++--- rollup.config.js | 3 +-- rollup.js | 2 +- sapper | 2 +- test/app/app/server.js | 2 +- webpack.js | 4 ++-- webpack/config.js | 2 +- 9 files changed, 13 insertions(+), 15 deletions(-) diff --git a/api.js b/api.js index 9746681..719e270 100644 --- a/api.js +++ b/api.js @@ -1 +1 @@ -module.exports = require('./dist/api.ts.js'); \ No newline at end of file +module.exports = require('./dist/api.js'); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 070086a..dfbec47 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5935,9 +5935,9 @@ } }, "rollup": { - "version": "0.59.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.59.4.tgz", - "integrity": "sha512-ISiMqq/aJa+57QxX2MRcvLESHdJ7wSavmr6U1euMr+6UgFe6KM+3QANrYy8LQofwhTC1I7BcAdlLnDiaODs1BA==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.65.0.tgz", + "integrity": "sha512-en95i7zwW5IiWay6DR/6QV8TxO2LvWuCjHYDcgP96oVG/gPnWWzsxNViObhoJUs17bAj2RgB67WuBuGmysZZcw==", "dev": true, "requires": { "@types/estree": "0.0.39", diff --git a/package.json b/package.json index 54edf36..24fee69 100644 --- a/package.json +++ b/package.json @@ -2,13 +2,12 @@ "name": "sapper", "version": "0.17.1", "description": "Military-grade apps, engineered by Svelte", - "main": "dist/middleware.ts.js", + "main": "dist/middleware.js", "bin": { "sapper": "./sapper" }, "files": [ "*.js", - "*.ts.js", "runtime", "webpack", "sapper", @@ -49,7 +48,7 @@ "pretty-ms": "^3.1.0", "require-relative": "^0.8.7", "rimraf": "^2.6.2", - "rollup": "^0.59.2", + "rollup": "^0.65.0", "rollup-plugin-commonjs": "^9.1.3", "rollup-plugin-json": "^3.0.0", "rollup-plugin-node-resolve": "^3.3.0", diff --git a/rollup.config.js b/rollup.config.js index 17c3bc7..c74d63d 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -52,7 +52,6 @@ export default [ typescript: require('typescript') }) ], - experimentalCodeSplitting: true, - experimentalDynamicImport: true + experimentalCodeSplitting: true } ]; \ No newline at end of file diff --git a/rollup.js b/rollup.js index b37e9ab..41b850d 100644 --- a/rollup.js +++ b/rollup.js @@ -1 +1 @@ -module.exports = require('./dist/rollup.ts.js'); \ No newline at end of file +module.exports = require('./dist/rollup.js'); \ No newline at end of file diff --git a/sapper b/sapper index 72c1eca..e6f3430 100755 --- a/sapper +++ b/sapper @@ -1,2 +1,2 @@ #!/usr/bin/env node -require('./dist/cli.ts.js'); \ No newline at end of file +require('./dist/cli.js'); \ No newline at end of file diff --git a/test/app/app/server.js b/test/app/app/server.js index f09d318..430853c 100644 --- a/test/app/app/server.js +++ b/test/app/app/server.js @@ -2,7 +2,7 @@ import fs from 'fs'; import { resolve } from 'url'; import express from 'express'; import serve from 'serve-static'; -import sapper from '../../../dist/middleware.ts.js'; +import sapper from '../../../dist/middleware.js'; import { Store } from 'svelte/store.js'; import { manifest } from './manifest/server.js'; diff --git a/webpack.js b/webpack.js index bb688ff..8e67b99 100644 --- a/webpack.js +++ b/webpack.js @@ -1,2 +1,2 @@ -// TODO write to this file, instead of webpack.ts.js -module.exports = require('./dist/webpack.ts.js'); \ No newline at end of file +// TODO write to this file, instead of webpack.js +module.exports = require('./dist/webpack.js'); \ No newline at end of file diff --git a/webpack/config.js b/webpack/config.js index 6483555..83dcd37 100644 --- a/webpack/config.js +++ b/webpack/config.js @@ -1,2 +1,2 @@ // TODO deprecate this file in favour of sapper/webpack.js -module.exports = require('../dist/webpack.ts.js'); \ No newline at end of file +module.exports = require('../dist/webpack.js'); \ No newline at end of file From c36df0d65091574178743b55430be274e78e0795 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 16:58:50 -0400 Subject: [PATCH 16/29] try to diagnose latest windows idiocy --- sapper | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sapper b/sapper index e6f3430..363b817 100755 --- a/sapper +++ b/sapper @@ -1,2 +1,6 @@ #!/usr/bin/env node +const fs = require('fs'); +console.log('dist files:'); +console.log(fs.readdirSync('dist')); + require('./dist/cli.js'); \ No newline at end of file From 9d904b39117301bca5d5aef295334a7c702060b2 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 17:02:21 -0400 Subject: [PATCH 17/29] argh --- sapper | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sapper b/sapper index 363b817..b9c765e 100755 --- a/sapper +++ b/sapper @@ -1,6 +1,7 @@ #!/usr/bin/env node const fs = require('fs'); +const path = require('path'); console.log('dist files:'); -console.log(fs.readdirSync('dist')); +console.log(fs.readdirSync(path.join(__dirname, 'dist'))); require('./dist/cli.js'); \ No newline at end of file From ddec58ebd4039c08acd11ca1d9535e5b2158d3c5 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 17:05:56 -0400 Subject: [PATCH 18/29] ffs --- rollup.config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rollup.config.js b/rollup.config.js index c74d63d..2ab91c5 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,3 +1,4 @@ +import path from 'path'; import typescript from 'rollup-plugin-typescript'; import string from 'rollup-plugin-string'; import json from 'rollup-plugin-json'; @@ -36,7 +37,7 @@ export default [ `src/webpack.ts` ], output: { - dir: 'dist', + dir: path.join(__dirname, 'dist'), format: 'cjs', sourcemap: true }, From d6d0a150155660eb00afef02cedaf422e70a1a1a Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 17:10:00 -0400 Subject: [PATCH 19/29] WHAT IS HAPPENING --- rollup.config.js | 2 +- sapper | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/rollup.config.js b/rollup.config.js index 2ab91c5..b357313 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -16,7 +16,7 @@ export default [ { input: `src/runtime/index.ts`, output: { - file: `runtime.js`, + file: path.join(__dirname, `runtime.js`), format: 'es' }, plugins: [ diff --git a/sapper b/sapper index b9c765e..777f4b4 100755 --- a/sapper +++ b/sapper @@ -1,6 +1,9 @@ #!/usr/bin/env node const fs = require('fs'); const path = require('path'); +console.log('wtf:'); +console.log(process.cwd()); +console.log(fs.readdirSync(__dirname)); console.log('dist files:'); console.log(fs.readdirSync(path.join(__dirname, 'dist'))); From 8226e9bc1fbdca65855ee244e09b3331b72651c3 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 17:17:36 -0400 Subject: [PATCH 20/29] starting to lose my sense of humour --- package.json | 2 +- rollup.config.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 24fee69..23425b7 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "scripts": { "cy:open": "cypress open", "test": "mocha --opts mocha.opts", - "pretest": "npm run build", + "pretest": "npm run build && echo \"seriously, wtf\" && ls . && ls dist", "build": "rm -rf dist && rollup -c", "dev": "rollup -cw", "prepublishOnly": "npm test", diff --git a/rollup.config.js b/rollup.config.js index b357313..be1abd3 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -16,7 +16,7 @@ export default [ { input: `src/runtime/index.ts`, output: { - file: path.join(__dirname, `runtime.js`), + file: `./runtime.js`, format: 'es' }, plugins: [ @@ -37,7 +37,7 @@ export default [ `src/webpack.ts` ], output: { - dir: path.join(__dirname, 'dist'), + dir: './dist', format: 'cjs', sourcemap: true }, From f87f0e3b80687d4aa63b26a8c3669c83e8fe5ba7 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 17:24:48 -0400 Subject: [PATCH 21/29] stab in the dark --- rollup.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rollup.js b/rollup.js index 41b850d..6883e8d 100644 --- a/rollup.js +++ b/rollup.js @@ -1 +1,3 @@ +console.log(`please tell me windows isn't trying to run this file`); + module.exports = require('./dist/rollup.js'); \ No newline at end of file From 01a709e017563f85654ec7393159dc667eeaecf3 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 17:27:34 -0400 Subject: [PATCH 22/29] ffffuuuuuuuuuuu --- rollup.config.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rollup.config.js b/rollup.config.js index be1abd3..1251460 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -6,6 +6,8 @@ import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import pkg from './package.json'; +console.log('WE ARE INSIDE THE ROLLUP CONFIG'); + const external = [].concat( Object.keys(pkg.dependencies), Object.keys(process.binding('natives')), From 86dee1704023689ebd79469785015fb6917ef4f7 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 17:29:17 -0400 Subject: [PATCH 23/29] come ON --- rollup.js => file-that-is-not-called-rollup.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename rollup.js => file-that-is-not-called-rollup.js (100%) diff --git a/rollup.js b/file-that-is-not-called-rollup.js similarity index 100% rename from rollup.js rename to file-that-is-not-called-rollup.js From bb737eeb3251ddefe413cbd62f23e9f9e9d74fdb Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 17:37:20 -0400 Subject: [PATCH 24/29] success i think? --- config/rollup.js | 1 + config/webpack.js | 1 + file-that-is-not-called-rollup.js | 3 --- package.json | 2 +- rollup.config.js | 7 ++----- webpack.js | 3 +-- webpack/config.js | 3 +-- 7 files changed, 7 insertions(+), 13 deletions(-) create mode 100644 config/rollup.js create mode 100644 config/webpack.js delete mode 100644 file-that-is-not-called-rollup.js diff --git a/config/rollup.js b/config/rollup.js new file mode 100644 index 0000000..3b5c8be --- /dev/null +++ b/config/rollup.js @@ -0,0 +1 @@ +module.exports = require('../dist/rollup.js'); \ No newline at end of file diff --git a/config/webpack.js b/config/webpack.js new file mode 100644 index 0000000..15b21cf --- /dev/null +++ b/config/webpack.js @@ -0,0 +1 @@ +module.exports = require('../dist/webpack.js'); \ No newline at end of file diff --git a/file-that-is-not-called-rollup.js b/file-that-is-not-called-rollup.js deleted file mode 100644 index 6883e8d..0000000 --- a/file-that-is-not-called-rollup.js +++ /dev/null @@ -1,3 +0,0 @@ -console.log(`please tell me windows isn't trying to run this file`); - -module.exports = require('./dist/rollup.js'); \ No newline at end of file diff --git a/package.json b/package.json index 23425b7..24fee69 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "scripts": { "cy:open": "cypress open", "test": "mocha --opts mocha.opts", - "pretest": "npm run build && echo \"seriously, wtf\" && ls . && ls dist", + "pretest": "npm run build", "build": "rm -rf dist && rollup -c", "dev": "rollup -cw", "prepublishOnly": "npm test", diff --git a/rollup.config.js b/rollup.config.js index 1251460..c74d63d 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,4 +1,3 @@ -import path from 'path'; import typescript from 'rollup-plugin-typescript'; import string from 'rollup-plugin-string'; import json from 'rollup-plugin-json'; @@ -6,8 +5,6 @@ import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import pkg from './package.json'; -console.log('WE ARE INSIDE THE ROLLUP CONFIG'); - const external = [].concat( Object.keys(pkg.dependencies), Object.keys(process.binding('natives')), @@ -18,7 +15,7 @@ export default [ { input: `src/runtime/index.ts`, output: { - file: `./runtime.js`, + file: `runtime.js`, format: 'es' }, plugins: [ @@ -39,7 +36,7 @@ export default [ `src/webpack.ts` ], output: { - dir: './dist', + dir: 'dist', format: 'cjs', sourcemap: true }, diff --git a/webpack.js b/webpack.js index 8e67b99..98cf8c7 100644 --- a/webpack.js +++ b/webpack.js @@ -1,2 +1 @@ -// TODO write to this file, instead of webpack.js -module.exports = require('./dist/webpack.js'); \ No newline at end of file +throw new Error(`As of Sapper 0.18, webpack config must be loaded from sapper/config/webpack.js`); \ No newline at end of file diff --git a/webpack/config.js b/webpack/config.js index 83dcd37..98cf8c7 100644 --- a/webpack/config.js +++ b/webpack/config.js @@ -1,2 +1 @@ -// TODO deprecate this file in favour of sapper/webpack.js -module.exports = require('../dist/webpack.js'); \ No newline at end of file +throw new Error(`As of Sapper 0.18, webpack config must be loaded from sapper/config/webpack.js`); \ No newline at end of file From 5d0b7af47b738e5c4f011d0a1cf7d786e89d0d3f Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 17:40:13 -0400 Subject: [PATCH 25/29] i feel good about this --- sapper | 8 -------- test/app/webpack/client.config.js | 2 +- test/app/webpack/server.config.js | 2 +- test/app/webpack/service-worker.config.js | 2 +- 4 files changed, 3 insertions(+), 11 deletions(-) diff --git a/sapper b/sapper index 777f4b4..e6f3430 100755 --- a/sapper +++ b/sapper @@ -1,10 +1,2 @@ #!/usr/bin/env node -const fs = require('fs'); -const path = require('path'); -console.log('wtf:'); -console.log(process.cwd()); -console.log(fs.readdirSync(__dirname)); -console.log('dist files:'); -console.log(fs.readdirSync(path.join(__dirname, 'dist'))); - require('./dist/cli.js'); \ No newline at end of file diff --git a/test/app/webpack/client.config.js b/test/app/webpack/client.config.js index 9a17294..9acbe9b 100644 --- a/test/app/webpack/client.config.js +++ b/test/app/webpack/client.config.js @@ -1,4 +1,4 @@ -const config = require('../../../webpack/config.js'); +const config = require('../../../config/webpack.js'); const webpack = require('webpack'); const mode = process.env.NODE_ENV; diff --git a/test/app/webpack/server.config.js b/test/app/webpack/server.config.js index 4f76856..b88d1a6 100644 --- a/test/app/webpack/server.config.js +++ b/test/app/webpack/server.config.js @@ -1,4 +1,4 @@ -const config = require('../../../webpack/config.js'); +const config = require('../../../config/webpack.js'); const sapper_pkg = require('../../../package.json'); module.exports = { diff --git a/test/app/webpack/service-worker.config.js b/test/app/webpack/service-worker.config.js index f95b5f4..aacb312 100644 --- a/test/app/webpack/service-worker.config.js +++ b/test/app/webpack/service-worker.config.js @@ -1,4 +1,4 @@ -const config = require('../../../webpack/config.js'); +const config = require('../../../config/webpack.js'); module.exports = { entry: config.serviceworker.entry(), From 76cb6d97f3b2862714f46fef016199342b16ed83 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 18:01:17 -0400 Subject: [PATCH 26/29] oops --- src/api/utils/copy_shimport.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/utils/copy_shimport.ts b/src/api/utils/copy_shimport.ts index 27c247d..dda43f1 100644 --- a/src/api/utils/copy_shimport.ts +++ b/src/api/utils/copy_shimport.ts @@ -4,6 +4,6 @@ export function copy_shimport(dest: string) { const shimport_version = require('shimport/package.json').version; fs.writeFileSync( `${dest}/client/shimport@${shimport_version}.js`, - fs.readFileSync(require.resolve('shimport/index.dev.js')) + fs.readFileSync(require.resolve('shimport/index.js')) ); } \ No newline at end of file From f05a8e52a004a4cb2a31998d36013c8f77303f24 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 18:01:27 -0400 Subject: [PATCH 27/29] deprecate, dont break --- webpack.js | 3 ++- webpack/config.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/webpack.js b/webpack.js index 98cf8c7..96fb4ce 100644 --- a/webpack.js +++ b/webpack.js @@ -1 +1,2 @@ -throw new Error(`As of Sapper 0.18, webpack config must be loaded from sapper/config/webpack.js`); \ No newline at end of file +console.error(`[DEPRECATION] As of Sapper 0.18, webpack config should be loaded from sapper/config/webpack.js`); +module.exports = require('./dist/webpack.js'); \ No newline at end of file diff --git a/webpack/config.js b/webpack/config.js index 98cf8c7..388f348 100644 --- a/webpack/config.js +++ b/webpack/config.js @@ -1 +1,2 @@ -throw new Error(`As of Sapper 0.18, webpack config must be loaded from sapper/config/webpack.js`); \ No newline at end of file +console.error(`[DEPRECATION] As of Sapper 0.18, webpack config should be loaded from sapper/config/webpack.js`); +module.exports = require('../dist/webpack.js'); \ No newline at end of file From 4259fc8e58a755d5b19dc363989eaae39945fc2a Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 20:20:02 -0400 Subject: [PATCH 28/29] update shimport, minor tidy up --- package-lock.json | 6 +++--- package.json | 2 +- src/cli/export.ts | 4 ++-- src/core/create_compilers.ts | 3 +-- src/utils.ts | 5 ----- 5 files changed, 7 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index dfbec47..a7e0b36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6299,9 +6299,9 @@ } }, "shimport": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/shimport/-/shimport-0.0.5.tgz", - "integrity": "sha512-m1lX1XMFHTJ2Ix3tTHb1REkyrp0sTMtQ4OeibocI7fOErzQr28wf9DSDy2bEXl9KT54m3CDplxBNLrP6HrEVxA==" + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/shimport/-/shimport-0.0.7.tgz", + "integrity": "sha512-A6aDOxg6fHjmFkc2HL4PUW9Cfb+huHZypApNVxCXoBFz6jO+iAmu2wQeXDjqyho3mF4AMpxZTAC+JbmFpKjwug==" }, "signal-exit": { "version": "3.0.2", diff --git a/package.json b/package.json index 24fee69..9911776 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ }, "dependencies": { "html-minifier": "^3.5.16", - "shimport": "^0.0.5", + "shimport": "^0.0.8", "source-map-support": "^0.5.6", "tslib": "^1.9.1" }, diff --git a/src/cli/export.ts b/src/cli/export.ts index 00dd1d5..51a0246 100644 --- a/src/cli/export.ts +++ b/src/cli/export.ts @@ -2,7 +2,7 @@ import { exporter as _exporter } from '../api/export'; import colors from 'kleur'; import pb from 'pretty-bytes'; import { locations } from '../config'; -import { right_pad } from '../utils'; +import { left_pad } from '../utils'; export function exporter(export_dir: string, { basepath = '', @@ -22,7 +22,7 @@ export function exporter(export_dir: string, { emitter.on('file', event => { const size_color = event.size > 150000 ? colors.bold.red : event.size > 50000 ? colors.bold.yellow : colors.bold.gray; - const size_label = size_color(right_pad(pb(event.size), 10)); + const size_label = size_color(left_pad(pb(event.size), 10)); const file_label = event.status === 200 ? event.file diff --git a/src/core/create_compilers.ts b/src/core/create_compilers.ts index 7d97b10..b5ed879 100644 --- a/src/core/create_compilers.ts +++ b/src/core/create_compilers.ts @@ -2,9 +2,8 @@ import * as fs from 'fs'; import * as path from 'path'; import colors from 'kleur'; import pb from 'pretty-bytes'; -import { locations } from '../config'; import relative from 'require-relative'; -import { left_pad, right_pad } from '../utils'; +import { left_pad } from '../utils'; let r: any; let wp: any; diff --git a/src/utils.ts b/src/utils.ts index ea70779..7740a8f 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -3,11 +3,6 @@ export function left_pad(str: string, len: number) { return str; } -export function right_pad(str: string, len: number) { - while (str.length < len) str += ' '; - return str; -} - export function repeat(str: string, i: number) { let result = ''; while (i--) result += str; From 708fe4c74b40a44bc1654c962bfaa57103f89d57 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Aug 2018 20:53:48 -0400 Subject: [PATCH 29/29] rebuild lockfile --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index a7e0b36..529a633 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6299,9 +6299,9 @@ } }, "shimport": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/shimport/-/shimport-0.0.7.tgz", - "integrity": "sha512-A6aDOxg6fHjmFkc2HL4PUW9Cfb+huHZypApNVxCXoBFz6jO+iAmu2wQeXDjqyho3mF4AMpxZTAC+JbmFpKjwug==" + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/shimport/-/shimport-0.0.9.tgz", + "integrity": "sha512-y0DHz5ffBuz+iXUQgkqjT3yJRuegeyhHeDdqVdDMVDCeuS0Ex6AFPLFNV228EfPQmkDumraLsN9HBcT1qyLxHw==" }, "signal-exit": { "version": "3.0.2", diff --git a/package.json b/package.json index 9911776..5ede3e2 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ }, "dependencies": { "html-minifier": "^3.5.16", - "shimport": "^0.0.8", + "shimport": "^0.0.9", "source-map-support": "^0.5.6", "tslib": "^1.9.1" },