├── .gitignore
├── .npmignore
├── README.md
├── cli.js
├── demo
├── .gitignore
├── package.json
├── rollup.config.js
└── src
│ ├── App.jsx
│ ├── index.js
│ └── message.js
├── index.js
├── package-lock.json
├── package.json
└── test
├── dist
└── bundle.js
├── package-lock.json
├── package.json
├── rollup.config.js
├── src
├── App.jsx
├── index.js
└── message.js
├── test.js
└── untouched_src
├── App.jsx
├── index.js
└── message.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
3 | *.sw?
4 | *.DS_Store
5 |
6 | *.log
7 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
3 | *.sw?
4 | *.DS_Store
5 |
6 | *.log
7 |
8 | demo
9 | test
10 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # wrollup - Simple watcher for rollup
2 |
3 | 
4 |
5 | [](https://www.npmjs.com/package/wrollup)
6 | [](https://www.npmjs.com/package/wrollup)
7 | [](https://www.npmjs.com/package/wrollup)
8 |
9 | ## Simple to use
10 | ```bash
11 | npm install -g wrollup
12 | wrollup -c rollup.config.js
13 | ```
14 |
15 | # About
16 | A simple watcher for building rollup bundles inspired by the https://github.com/stylus/stylus watcher
17 |
18 | # Why
19 | The plugin 'rollup-watch' is pretty OK, but has a few issues like not being able to recover, hanging forever when not connected to the internet -- all in all a bit of a pain to deal with. wrollup is intended to make the watching and bundle process as smooth as possible.
20 |
21 | # How
22 | Using a similar init process we use rollup internally to parse the rollup.config.js file and star the watcher with a set of streamlined logging procedure (similar to stylus-lang) and pretty error parsing.
23 |
24 | # Arguments
25 | ```bash
26 | $ wrollup --help
27 |
28 | Usage: wrollup [options]
29 |
30 | Examples:
31 |
32 | wrollup -c rollup.config.js
33 | wrollup --verbose --error-glob "scripts/**/*.(ts|tsx|js)"
34 | wrollup --help
35 |
36 | Options:
37 |
38 | -c, --config Specify path to rollup.config.js
39 | --error-glob, --files Specify glob of files to watch on rollup error/crash
40 | for auto-recovery (defaults to \'**/*.js*\')
41 | --verbose Wrollup will console.log some extra info of
42 | what is going on
43 | --disable-cache, --nocache Disable bundle caching
44 | --cache-before-disk Generate cache before bundle written to disk
45 | -h, --help Display help information
46 | ```
47 |
48 | # Installation
49 | ```bash
50 | npm install --save-dev wrollup # locally (for use with npm scripts)
51 | ```
52 | or
53 | ```bash
54 | npm install -g wrollup # globally (not recommended)
55 | ```
56 |
57 | # Requirements
58 | Rollup
59 | ```bash
60 | npm install --save-dev rollup # locally (for use with npm scripts)
61 | ```
62 | or
63 | ```bash
64 | npm install -g rollup # globally (not recommended)
65 | ```
66 |
67 | A rollup config file (looks for rollup.config.js by default). A basic one can be for example:
68 | ```js
69 | import buble from 'rollup-plugin-buble'
70 | import nodeResolve from 'rollup-plugin-node-resolve'
71 | import commonjs from 'rollup-plugin-commonjs'
72 |
73 | export default {
74 | entry: 'src/index.js', // required
75 | dest: 'dist/bundle.js', // required
76 | format: 'iife', // required
77 | plugins: [
78 | buble(),
79 | nodeResolve(),
80 | commonjs({
81 | include: 'node_modules/**'
82 | })
83 | ]
84 | }
85 | ```
86 |
--------------------------------------------------------------------------------
/cli.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | require('./index.js')
3 |
--------------------------------------------------------------------------------
/demo/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 |
--------------------------------------------------------------------------------
/demo/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "scripts": {
3 | "start": "../cli.js -c rollup.config.js",
4 | "startwooster": "../cli.js -c rollup.config.js 2>&1 | /Users/mollie/code/wooster/cli.js",
5 | "startcli": "../cli.js --input src/index.js --output dist/bundle.js -f iife -c node:buble -c node:nodeResolve node:commonjs"
6 | },
7 | "devDependencies": {
8 | "rollup": "^0.41.6",
9 | "rollup-plugin-buble": "^0.13.0",
10 | "rollup-plugin-commonjs": "^3.3.1",
11 | "rollup-plugin-node-resolve": "^2.1.1"
12 | },
13 | "dependencies": {
14 | "react": "^15.5.4"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/demo/rollup.config.js:
--------------------------------------------------------------------------------
1 | import buble from 'rollup-plugin-buble'
2 | import nodeResolve from 'rollup-plugin-node-resolve'
3 | import commonjs from 'rollup-plugin-commonjs'
4 |
5 | export default {
6 | entry: 'src/index.js',
7 | dest: 'dist/bundle.js',
8 | format: 'iife',
9 | plugins: [
10 | buble(),
11 | nodeResolve(),
12 | commonjs({
13 | include: 'node_modules/**'
14 | })
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/demo/src/App.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | const Component = React.createClass({
4 | render: function () {
5 | return (
6 |
Component { (new Date()).toLocaleString() }
7 | )
8 | }
9 | })
10 |
11 | export default Component
12 |
--------------------------------------------------------------------------------
/demo/src/index.js:
--------------------------------------------------------------------------------
1 | import message from './message'
2 |
3 | import React from 'react'
4 |
5 | console.log('Hello world, message: ' + message)
6 |
7 | import App from './App.jsx'
8 |
9 | // fake react
10 | // var React = {
11 | // createElement: function (el, props) {
12 | // return String(el)
13 | // }
14 | // }
15 |
16 | console.log()
17 | console.log()
18 |
--------------------------------------------------------------------------------
/demo/src/message.js:
--------------------------------------------------------------------------------
1 | export default 'yippeee, yaahhoooo, waaahhoooooo'
2 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | try {
4 | var rollupFound = require.resolve('rollup')
5 | } catch (err) {
6 | var rollupRequiredErrorMessage = [
7 | ''
8 | , ' `rollup` was not found (error)'
9 | , ''
10 | , ' `wrollup` needs `rollup` to work, you should be building with rollup directly'
11 | , ' and use wrollup for development'
12 | , ''
13 | , ''
14 | , ' npm scripts example:'
15 | , ''
16 | , ' "scripts": {'
17 | , ' "build-js": "rollup -c rollup.config.js"'
18 | , ' "watch-js": "wrollup -c rollup.config.js"'
19 | , ' }'
20 | , ''
21 | , ''
22 | , ' Please install rollup alongside wrollup:'
23 | , ''
24 | , ' npm install --save-dev rollup wrollup # locally for use with npm scripts'
25 | , ' npm install -g rollup wrollup # globally (not recommended)'
26 | , ''
27 | ].join('\n')
28 |
29 | console.error(rollupRequiredErrorMessage)
30 | process.exit(err.code)
31 | }
32 |
33 | var rollup = require('rollup')
34 | // var chokidar = require('chokidar')
35 | var chalk = require('chalk')
36 | var fs = require('fs')
37 | var minimist = require('minimist')
38 |
39 | var os = require('os')
40 |
41 | // var pw = require('../poll-watch/index.js')
42 | var pw = require('poll-watch')
43 |
44 | var realpathSync = fs.realpathSync
45 |
46 | var options = {}
47 |
48 | var command = minimist( process.argv.slice( 2 ), {
49 | alias: {
50 | // Aliases
51 | strict: 'useStrict',
52 |
53 | // Short options
54 | c: 'config',
55 | d: 'indent',
56 | e: 'external',
57 | f: 'format',
58 | g: 'globals',
59 | h: 'help',
60 | i: 'input',
61 | l: 'legacy',
62 | m: 'sourcemap',
63 | n: 'name',
64 | o: 'output',
65 | u: 'id',
66 | v: 'version',
67 | w: 'watch'
68 | }
69 | })
70 |
71 | var argv = command // alias
72 |
73 | var usage = [
74 | ''
75 | , ' Usage: wrollup [options]'
76 | , ''
77 | , ' Requirements: rollup'
78 | , ''
79 | , ' npm install -g rollup Install globally (not recommended)'
80 | , ' npm install --save-dev rollup Install locally (recommended)'
81 | , ''
82 | , ' Examples:'
83 | , ''
84 | , ' wrollup -c rollup.config.js'
85 | , ' wrollup --verbose --error-glob "scripts/**/*.(ts|tsx|js)"'
86 | , ' wrollup --help'
87 | , ''
88 | , ' Options:'
89 | , ''
90 | , ' -c, --config Specify path to rollup.config.js'
91 | , ' --error-glob, --files Specify glob of files to watch on rollup error/crash'
92 | , ' for auto-recovery (defaults to \'**/*.js*\')'
93 | , ' --verbose Wrollup will console.log some extra info of'
94 | , ' what is going on'
95 | , ' --disable-cache, --nocache Disable bundle caching'
96 | , ' --cache-before-disk Generate cache before bundle written to disk'
97 | , ' -v, --version Display wrollup and rollup versions'
98 | , ' -h, --help Display help information'
99 | , ''
100 | ].join('\n')
101 |
102 | if ( command.help || ( process.argv.length <= 2 && process.stdin.isTTY ) ) {
103 | console.error(usage)
104 | process.exit() // exit success
105 | }
106 |
107 | if ( command.version ) {
108 | var packageJson = require('./package.json')
109 | var versions = [
110 | ''
111 | , 'wrollup version: ' + (packageJson['VERSION'] || packageJson['version'])
112 | , 'rollup version: ' + (rollup['VERSION'] || rollup['version'])
113 | , ''
114 | ].join('\n')
115 | console.error(versions)
116 | process.exit() // exit success
117 | }
118 |
119 | var verbose = !!command.verbose // for debugging
120 | var nolazy = !!(command['nolazy'] || command['cache-before-disk'])
121 |
122 | // var relative = require('require-relative')
123 | // var nodeResolve = require('rollup-plugin-node-resolve')
124 | // var commonjs = require('rollup-plugin-commonjs')
125 |
126 | var requireFromString = require('require-from-string')
127 |
128 | var __last_error = null
129 |
130 | var __error_timeout = null
131 | var __warning_timeout = null
132 |
133 | function cc (text, code) {
134 | // return ('\033[' + code + text + '\033[0m')
135 | return ('\u001b[' + code + text + '\u001b[0m')
136 |
137 | }
138 |
139 | var c = {
140 | 'cyan': '36m',
141 | 'magenta': '35m',
142 | 'blue': '34m',
143 | 'yellow': '33m',
144 | 'green': '32m',
145 | 'red': '31m',
146 | 'gray': '90m',
147 | }
148 |
149 | var path = require('path')
150 | var __path = path
151 |
152 | // var _eval = require('eval')
153 |
154 | var ENABLE_CACHE = !(!!argv['nocache'] || !!argv['disable-cache'])
155 | var cache = undefined
156 | var lazyCachedBundle = undefined // workarond for: https://github.com/rollup/rollup/issues/1010
157 | var watchers = {}
158 |
159 | // chalk colours
160 | var colors = ['green', 'yellow', 'blue', 'cyan', 'magenta', 'white']
161 |
162 | var allProjectFilesGlob = argv['files'] || argv['error-glob'] || '**/*.js*'
163 |
164 | var configPath = undefined
165 |
166 | // return console.log('configPath: ' + configPath)
167 |
168 | // process.chdir(path.dirname(configPath))
169 |
170 | // TODO build rollup options object based on the command line arguments
171 | // ref: https://github.com/rollup/rollup/blob/master/bin/src/runRollup.js
172 | function parseRollupArgs () {
173 | if ( command._.length > 1) {
174 | console.error('wrollup can only bundle one file at a time')
175 | process.exit(1)
176 | }
177 |
178 | if ( command._.length === 1 ) {
179 | if ( command.input ) {
180 | console.error('use --input, or pass input as path as argument')
181 | process.exit(1)
182 | }
183 |
184 | command.input = command._[0]
185 | }
186 |
187 | if ( command.environment ) {
188 | command.environment.split( ',' ).forEach( function ( pair ) {
189 | const index = pair.indexOf( ':' )
190 | if ( ~index ) {
191 | process.env[ pair.slice( 0, index ) ] = pair.slice( index + 1 )
192 | } else {
193 | process.env[ pair ] = true
194 | }
195 | })
196 | }
197 |
198 | var config = command.config === true ? 'rollup.config.js' : command.config
199 | configPath = config
200 | if ( config && config.slice( 0, 5 ) !== 'node:' ) {
201 | try {
202 | fs.readFileSync(configPath)
203 |
204 | // parse the rollup.config.js file with rollup
205 | rollup.rollup({
206 | entry: configPath,
207 | onwarn: function (message) {
208 | if ( /Treating .+ as external dependency/.test( message ) ) return
209 | printError( message )
210 | //setupGlobalWatcher()
211 | }
212 | // plugins: [ nodeResolve(), commonjs() ]
213 | }).then(function (bundle) {
214 | var result = bundle.generate({ format: 'cjs' })
215 | var opts = requireFromString(result.code)
216 | // console.log(opts)
217 | init(opts)
218 | }).then(function () {
219 | verbose && console.log(chalk.yellow('initliaized'))
220 | }, function (err) {
221 | throw err
222 | })
223 |
224 | } catch (err) {
225 | console.error('no rollup.config.js found at [$1]'.replace('$1', configPath))
226 | throw err
227 | }
228 | } else {
229 | var equivalents = {
230 | useStrict: 'useStrict',
231 | banner: 'banner',
232 | footer: 'footer',
233 | format: 'format',
234 | globals: 'globals',
235 | id: 'moduleId',
236 | indent: 'indent',
237 | input: 'entry',
238 | intro: 'intro',
239 | legacy: 'legacy',
240 | name: 'moduleName',
241 | output: 'dest',
242 | outro: 'outro',
243 | sourcemap: 'sourceMap',
244 | treeshake: 'treeshake'
245 | }
246 |
247 | var opts = {}
248 | Object.keys( equivalents ).forEach(function ( cliOption ) {
249 | if ( command.hasOwnProperty( cliOption ) ) {
250 | opts[ equivalents[ cliOption ] ] = command[ cliOption ]
251 | }
252 | })
253 |
254 | init(opts)
255 | }
256 | }
257 |
258 | parseRollupArgs()
259 |
260 | // try {
261 | // var config = fs.readFileSync(configPath)
262 | // } catch (err) {
263 | // console.error('no rollup.config.js found at [$1]'.replace('$1', configPath))
264 | // throw err
265 | // }
266 |
267 | const stderr = console.error.bind( console )
268 | var mtimes = {}
269 |
270 | // used to listen for change on all source files when an error occurs
271 | // in order to re-initliaize source watching/bundling
272 | var globalWatcher = undefined
273 | var buildWatcher = pw.create()
274 |
275 | var _globalWatcherTimeout = null
276 | function setupGlobalWatcher () {
277 | if (globalWatcher === undefined) {
278 | buildWatcher.close() // stop watching build resources
279 |
280 | verbose && console.log(cc('starting build error watcher ' + allProjectFilesGlob, c['yellow']))
281 |
282 | var glob = require('glob')
283 | glob(allProjectFilesGlob, function (err, files) {
284 | if (err) throw err
285 |
286 | globalWatcher = pw.create()
287 | // pw.clear()
288 | files.forEach(function (file) {
289 | // console.log('watching file: ' + file)
290 | var w = globalWatcher.watch(file)
291 | w.on(function (data) {
292 | // console.log('modification from: ' + file)
293 | triggerRebuild(file)
294 | })
295 | })
296 | })
297 | } else {
298 | verbose && console.log(cc('build error watcher still ready [' + allProjectFilesGlob + ']', c['yellow']))
299 | }
300 | }
301 |
302 | function init (opts) {
303 | options = Object.assign({}, opts)
304 | // console.log(options)
305 | build(true)
306 | }
307 |
308 | function log (text) {
309 | // console.log(chalk.gray(text))
310 | }
311 |
312 | // source: https://github.com/facebookincubator/create-react-app/b/m/s/start.js#L69-L73
313 | function clearConsole () {
314 | // This seems to work best on Windows and other systems.
315 | // The intention is to clear the output so you can focus on most recent build.
316 | process.stdout.write('\x1bc')
317 | }
318 |
319 | function sliceOfFile (file, pos) {
320 | // console.log('slice file: ' + file)
321 | // console.log('slice pos: ' + pos)
322 | var errorLineNumber = pos.line - 1
323 | var column = pos.column
324 | var contents = fs.readFileSync(file, 'utf8')
325 | var lines = contents.split('\n')
326 |
327 | var line, index, i
328 | // find last non-empty line
329 | for (i = 0; i < lines.length; i++) {
330 | index = errorLineNumber - i
331 | line = lines[index]
332 | if (line.trim()) {
333 | // non-empty line found
334 | errorLineNumber = index
335 | break
336 | }
337 |
338 | // console.log('line was empty')
339 | // column data is corrupted, is probably last charater of previous line
340 | column = -1
341 | }
342 |
343 | // grab last 8 lines
344 | var linesBelow = 3
345 | var linesAbove = 5
346 | var results = []
347 | var errorLineIndex = 0
348 | for (i = 0; i <= (linesBelow + linesAbove); i++) {
349 | index = errorLineNumber + i - linesAbove
350 | if (index === errorLineNumber) errorLineIndex = (results.length + 1)
351 | if (index >= 0 && index < lines.length) {
352 | var l = lines[index]
353 | // parse away distracting character escapes
354 | l = l.split('\'').join('"')
355 | // var prefix = (' ' + (index + 1) + '| ')
356 | results.push({
357 | line: l,
358 | lineNumber: index + 1
359 | })
360 | }
361 | }
362 |
363 | // calculate minimum start indentation we can slice off
364 | // without affecting relative indentation
365 | var minLeftPadding = 999
366 | results.forEach(function (item) {
367 | var counter = 0
368 | for (var i = 0; i < item.line.length; i++) {
369 | if (item.line[i].trim().length === 0) continue
370 | minLeftPadding = Math.min(minLeftPadding, i)
371 | break
372 | }
373 | })
374 |
375 | // cut off the extra start indentation
376 | results = results.map(function (item) {
377 | item.line = item.line.slice(minLeftPadding)
378 | return item
379 | })
380 |
381 | // add line numbers to lines, pad by biggest line number
382 | var lineLeftPadding = String(results[results.length - 1].lineNumber).length + 1
383 | // console.log('lineLeftPadding: ' + lineLeftPadding)
384 | var resultLines = results.map(function (item) {
385 | var length = String(item.lineNumber).length
386 | var delta = (lineLeftPadding - length)
387 | var prefix = ' '
388 | while (--delta > 0) prefix += ' '
389 | prefix += String(item.lineNumber)
390 | prefix += '| '
391 | return (prefix + item.line)
392 | })
393 |
394 | results = resultLines
395 |
396 | // lastly push in small arrow indicator after the error line
397 | // var lastLine = results[results.length - 1]
398 | var indicator = []
399 | for (i = 0; i < (column + lineLeftPadding + 2 - minLeftPadding); i++) indicator.push('-')
400 | if (column < 0) {
401 | indicator.push('^')
402 | } else {
403 | indicator[(column + lineLeftPadding + 2 - minLeftPadding)] = '^'
404 | }
405 |
406 | var arrowLine = indicator.join('')
407 | results = results.slice(0, errorLineIndex)
408 | .concat([arrowLine])
409 | .concat(results.slice(errorLineIndex))
410 | results.push('')
411 |
412 | return results
413 | }
414 |
415 | var buildTimeout = null
416 | var _timeout = null
417 | function triggerRebuild (path) {
418 | if (options && path.indexOf(options.dest) !== -1) {
419 | verbose && console.log(chalk.yellow('ignoring trigger from destination bundle'))
420 | return undefined
421 | }
422 |
423 | var target = path
424 |
425 | // console.log(chalk.yellow('trigger from target [' + chalk.magenta(target) + ']')) // TODO
426 | var relativePath = './' + __path.relative(process.cwd(), __path.resolve(path))
427 | console.log(cc('modification from', c['cyan']) + ' %s', relativePath);
428 | // console.log(cc('modification from', c['cyan']) + ' %s', path);
429 |
430 | verbose && console.log(chalk.yellow('trigger from target [' + chalk.magenta(target) + ']'))
431 | fs.stat(target, function (err, stats) {
432 | if (err) throw err
433 |
434 | if (mtimes[target] === undefined || stats.mtime > mtimes[target]) {
435 | mtimes[target] = stats.mtime
436 | clearTimeout(buildTimeout)
437 | buildTimeout = setTimeout(function () {
438 | build()
439 | }, 33)
440 | } else {
441 | // ignore, nothing modified
442 | verbose && console.log('-- nothing modified --')
443 | }
444 | })
445 | }
446 |
447 | function honeydripError (err) {
448 | // console.log('honeydripping')
449 | try {
450 | // console.log('---- KEYS ----')
451 | // console.log(Object.keys(err))
452 | // console.log('-------------')
453 | // console.log(err.id)
454 | // console.log('-------------')
455 |
456 | var honey = Object.assign({}, err)
457 | var type = err.stack.substring(0, err.stack.indexOf(':'))
458 | var info = err.stack.substring(0, err.stack.indexOf('/'))
459 | var file = honey.file || honey.id
460 | info += '[' + file.substring(file.lastIndexOf('/') + 1) + ']'
461 | honey.type = type
462 | honey.info = info
463 |
464 | var e = {
465 | type: honey.code || info.substring(0, info.indexOf(':')),
466 | msg: info.substring(info.indexOf(':') + 1, info.indexOf('[')),
467 | file: file,
468 | stub: file.substring(file.lastIndexOf('/') + 1),
469 | path: file.substring(0, file.lastIndexOf('/') + 1)
470 | }
471 | honey.info = e
472 |
473 | honey.slice = sliceOfFile(file, honey.loc)
474 | return [e.type, honey.loc, honey.info, honey.slice]
475 | } catch (e) {
476 | //console.error(e)
477 | // return e // return honey error for debugging purposes
478 | return err // return original error (probably a warning)
479 | }
480 | }
481 |
482 | function generateLazyCache () {
483 | if (nolazy) return
484 | // has to do with workaround for: https://github.com/rollup/rollup/issues/1010
485 | setTimeout(function () {
486 | lazyCachedBundle = JSON.parse(JSON.stringify(cache))
487 | verbose && console.log(chalk.yellow('lazyCachedBundle pre-generated for the next bundle'))
488 | verbose && console.log(chalk.yellow(''))
489 | }, 0)
490 | }
491 |
492 | function build (precache) {
493 | // clearConsole()
494 | verbose && console.log(chalk.gray('bundling... [' + chalk.blue((new Date().toLocaleString())) + ']'))
495 |
496 | var opts = Object.assign({}, options)
497 |
498 | // use cache if available
499 | if (ENABLE_CACHE && cache && opts) {
500 | if (verbose && !nolazy) {
501 | if (lazyCachedBundle) {
502 | console.log(chalk.yellow('using lazyCachedBundle'))
503 | } else {
504 | // console.log(chalk.yellow('no lazyCachedBundle, generating cache...'))
505 | }
506 | }
507 |
508 | // this work-around is needed for rollup v0.35.0-> currently
509 | // rollup version 0.34.13 is the latest that works fine
510 | // the issue seems to lie in rollup implemetning a deepClone fn
511 | // in this commit: https://github.com/rollup/rollup/commit/83ccb9725374e0fde9d07043959c397b15d26c67#diff-5c98da346b849e07de8c1173579789b0L320
512 | //
513 | // for more info see the issue on github: https://github.com/rollup/rollup/issues/1010
514 | if (!nolazy) {
515 | verbose && console.log(chalk.yellow('no lazyCachedBundle, generating cache...'))
516 | opts.cache = lazyCachedBundle || JSON.parse(JSON.stringify(cache))
517 | // try and do the workaround cache after the build is complete
518 | // so that the build times aren't noticably affected
519 | lazyCachedBundle = undefined
520 | // generateLazyCache() function is called after bundle has compiled
521 | // to pre-generate the lazyCachedBundle for the next bundle generation
522 | } else {
523 | // use rollups internal caching without the workaround fix
524 | // the workaround is needed for v0.35.0 -> onwards [6th Oct 2016]
525 | opts.cache = cache
526 | verbose && console.log(chalk.yellow('--nolazy set'))
527 | }
528 | } else {
529 | if (verbose) {
530 | if (!ENABLE_CACHE) {
531 | console.log(chalk.yellow('--nocache set, not using cache'))
532 | } else {
533 | console.log(chalk.yellow('no cache found, probably initial build'))
534 | }
535 | }
536 | }
537 |
538 | var buildStart = Date.now()
539 |
540 | function throwWarning () {
541 | }
542 |
543 | opts.onwarn = function (warning) {
544 | throwWarning(warning)
545 | }
546 |
547 | rollup.rollup(opts).then(function (bundle) {
548 | cache = bundle
549 |
550 | // close globalWatcher if it was on
551 | if (globalWatcher !== undefined) {
552 | verbose && console.log(cc('removing global error watcher (successful build)', c['yellow']))
553 | globalWatcher.close()
554 | globalWatcher = undefined
555 | watchers = {}
556 | buildWatcher.clear()
557 | }
558 |
559 | for (let i = 0; i < bundle.modules.length; i++) {
560 | let module = bundle.modules[i]
561 | let id = module.id
562 | // log('[' + module.id + '] for loop, index: ' + i)
563 |
564 | // skip plugin helper modules
565 | if (/\0/.test(id)) {
566 | log(chalk.yellow('skipping helper module'))
567 | continue
568 | }
569 |
570 | // resolve symlinks to avoid duplicate watchers
571 | // https://github.com/rollup/rollup-watch/commit/b5aac3ae997955a1aa30aeeb3fe708f468b7e368
572 | try {
573 | id = fs.realpathSync( id )
574 | } catch ( err ) {
575 | return undefined
576 | }
577 |
578 | if (watchers[id] === undefined) {
579 | var cwd = process.cwd()
580 | var base = cwd.substring( cwd.lastIndexOf('/') )
581 | var filePath = base + id.substring( cwd.length )
582 |
583 | // ignore node_modules
584 | if (filePath.toLowerCase().indexOf('node_modules') === -1) {
585 | var w = buildWatcher.watch(id)
586 | w.on(function () {
587 | triggerRebuild(id)
588 | })
589 | watchers[id] = w
590 | console.log(' \u001b[90mwatching\u001b[0m %s', filePath);
591 | } else {
592 | // dont watch node_modules
593 | }
594 | }
595 | }
596 |
597 | if (precache) {
598 | setTimeout(function () {
599 | // console.log(' -- first -- ')
600 | build()
601 | // console.log(' -- --- -- ')
602 | }, 1)
603 | return { then: function () { /* console.log(' -- precache -- ') */ } }
604 | } else {
605 | return bundle.write(opts)
606 | }
607 | }).then(function () {
608 | generateLazyCache()
609 |
610 | // console.log('XXXXXXXXXXXXXXXXXX')
611 | // console.log('XXXXXXXXXXXXXXXXXX')
612 | // console.log(a)
613 | // console.log(b)
614 | // console.log(c)
615 | // console.log('XXXXXXXXXXXXXXXXXX')
616 | // console.log('XXXXXXXXXXXXXXXXXX')
617 |
618 | var delta = Date.now() - buildStart
619 | log('bundling took: ' + chalk.cyan(delta) + ' milliseconds')
620 | log(chalk['green']('Success.'))
621 |
622 | // var str = (chalk.gray('compiled ') + options.dest)
623 | // process.stdout.write(str)
624 |
625 | var filePath = options.dest || 'successfully'
626 | //console.log(' \033[90mcompiled\033[0m %s', filePath);
627 | console.log(cc('compiled', c['gray']) + ' %s', filePath);
628 |
629 | // create dots after success message to more easily
630 | // distinguish between old and new rebuilds
631 | // for (var i = 0; i < 22; i++) {
632 | // setTimeout(function () {
633 | // process.stdout.write(chalk['green']('.'))
634 | // }, i * 15)
635 | // }
636 | }, function (err) {
637 | // console.log('log: in error')
638 | // console.error('err: in error')
639 | // console.log('error')
640 | // console.log(err)
641 | var honey = honeydripError(err)
642 |
643 | try {
644 | var error = []
645 | // error.push('')
646 | // error.push('\n')
647 | // error.push(cc('-------------------', c['gray']))
648 | // error.push('\n')
649 |
650 | // error.push(chalk.gray('``` \033[31m' + honey[0] + '\033[0m'))
651 | var errLocationString = ''
652 | if (honey && honey[1] && honey[1].line && honey[1].column) {
653 | errLocationString = ' (' + cc(honey[1].line, c['red']) + ':' + cc(honey[1].column, c['red']) + ')'
654 | }
655 | error.push(cc('``` ', c['gray']) + cc(honey[0], c['red']) + errLocationString)
656 |
657 | honey[3].forEach(function (line) { error.push(line) })
658 | // console.log('```')
659 | // console.log(honey[2])
660 | var e = honey[2]
661 | error.push(cc(e.type, c['magenta']) + ':' + e.msg + '[' + cc(e.stub, c['magenta']) + ']')
662 | error.push(cc('url: ' + e.path, c['gray']) + cc(e.stub, c['magenta']))
663 |
664 | // console.error(error.join('\n'))
665 |
666 | // console.error(error.join('\n'))
667 | printError(error.join('\n'))
668 | } catch (e) {
669 | // just print the raw error on failure
670 | // console.error(honey)
671 | printError(honey)
672 | }
673 |
674 | // temporary watcher to listen for all changes to rebuild to
675 | //setupGlobalWatcher()
676 | })
677 |
678 | // console.log('after')
679 | }
680 |
681 | function printError (err) {
682 | if (__last_error != err) { // dont repeat errors/warnings
683 | console.error(err)
684 | __last_error = err
685 | setupGlobalWatcher() // recover watch process after build errors
686 | }
687 |
688 | clearTimeout(__error_timeout)
689 | __error_timeout = setTimeout(function () {
690 | __last_error = null
691 | }, 3000)
692 | }
693 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "wrollup",
3 | "version": "0.3.2",
4 | "lockfileVersion": 1,
5 | "dependencies": {
6 | "acorn": {
7 | "version": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
8 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo="
9 | },
10 | "ansi-regex": {
11 | "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
12 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
13 | },
14 | "ansi-styles": {
15 | "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
16 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
17 | },
18 | "balanced-match": {
19 | "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
20 | "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
21 | },
22 | "brace-expansion": {
23 | "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
24 | "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k="
25 | },
26 | "browser-resolve": {
27 | "version": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz",
28 | "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
29 | "dependencies": {
30 | "resolve": {
31 | "version": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
32 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs="
33 | }
34 | }
35 | },
36 | "builtin-modules": {
37 | "version": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
38 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
39 | },
40 | "chalk": {
41 | "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
42 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg="
43 | },
44 | "concat-map": {
45 | "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
46 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
47 | },
48 | "core-util-is": {
49 | "version": "1.0.2",
50 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
51 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
52 | "dev": true
53 | },
54 | "deep-equal": {
55 | "version": "1.0.1",
56 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
57 | "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
58 | "dev": true
59 | },
60 | "define-properties": {
61 | "version": "1.1.2",
62 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
63 | "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
64 | "dev": true
65 | },
66 | "defined": {
67 | "version": "1.0.0",
68 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
69 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
70 | "dev": true
71 | },
72 | "duplexer": {
73 | "version": "0.1.1",
74 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
75 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
76 | "dev": true
77 | },
78 | "es-abstract": {
79 | "version": "1.7.0",
80 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.7.0.tgz",
81 | "integrity": "sha1-363ndOAb/Nl/lhgCmMRJyGI/uUw=",
82 | "dev": true
83 | },
84 | "es-to-primitive": {
85 | "version": "1.1.1",
86 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
87 | "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
88 | "dev": true
89 | },
90 | "escape-string-regexp": {
91 | "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
92 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
93 | },
94 | "estree-walker": {
95 | "version": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz",
96 | "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4="
97 | },
98 | "figures": {
99 | "version": "1.7.0",
100 | "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
101 | "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
102 | "dev": true
103 | },
104 | "for-each": {
105 | "version": "0.3.2",
106 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.2.tgz",
107 | "integrity": "sha1-LEBFC5NI6X8oEyJZO6lnBLmr1NQ=",
108 | "dev": true
109 | },
110 | "foreach": {
111 | "version": "2.0.5",
112 | "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
113 | "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
114 | "dev": true
115 | },
116 | "fs.realpath": {
117 | "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
118 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
119 | "dev": true
120 | },
121 | "function-bind": {
122 | "version": "1.1.0",
123 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz",
124 | "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=",
125 | "dev": true
126 | },
127 | "glob": {
128 | "version": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
129 | "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
130 | "dev": true
131 | },
132 | "has": {
133 | "version": "1.0.1",
134 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
135 | "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
136 | "dev": true
137 | },
138 | "has-ansi": {
139 | "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
140 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE="
141 | },
142 | "inflight": {
143 | "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
144 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
145 | "dev": true
146 | },
147 | "inherits": {
148 | "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
149 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
150 | "dev": true
151 | },
152 | "is-callable": {
153 | "version": "1.1.3",
154 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz",
155 | "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=",
156 | "dev": true
157 | },
158 | "is-date-object": {
159 | "version": "1.0.1",
160 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
161 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
162 | "dev": true
163 | },
164 | "is-finite": {
165 | "version": "1.0.2",
166 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
167 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
168 | "dev": true
169 | },
170 | "is-function": {
171 | "version": "1.0.1",
172 | "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz",
173 | "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=",
174 | "dev": true
175 | },
176 | "is-regex": {
177 | "version": "1.0.4",
178 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
179 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
180 | "dev": true
181 | },
182 | "is-symbol": {
183 | "version": "1.0.1",
184 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
185 | "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
186 | "dev": true
187 | },
188 | "isarray": {
189 | "version": "1.0.0",
190 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
191 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
192 | "dev": true
193 | },
194 | "lodash": {
195 | "version": "3.10.1",
196 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
197 | "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
198 | "dev": true
199 | },
200 | "magic-string": {
201 | "version": "https://registry.npmjs.org/magic-string/-/magic-string-0.15.2.tgz",
202 | "integrity": "sha1-BoHXOIdBu8Ot2qZQYJkmJMbAnpw="
203 | },
204 | "minimatch": {
205 | "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
206 | "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM="
207 | },
208 | "minimist": {
209 | "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
210 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
211 | },
212 | "number-is-nan": {
213 | "version": "1.0.1",
214 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
215 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
216 | "dev": true
217 | },
218 | "object-assign": {
219 | "version": "4.1.1",
220 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
221 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
222 | "dev": true
223 | },
224 | "object-inspect": {
225 | "version": "1.2.2",
226 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.2.2.tgz",
227 | "integrity": "sha1-yCEV5PzIiK6hTWTCLk8X9qcNXlo=",
228 | "dev": true
229 | },
230 | "object-keys": {
231 | "version": "1.0.11",
232 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
233 | "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
234 | "dev": true
235 | },
236 | "once": {
237 | "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
238 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
239 | "dev": true
240 | },
241 | "parse-ms": {
242 | "version": "1.0.1",
243 | "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz",
244 | "integrity": "sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0=",
245 | "dev": true
246 | },
247 | "path-is-absolute": {
248 | "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
249 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
250 | "dev": true
251 | },
252 | "path-parse": {
253 | "version": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
254 | "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME="
255 | },
256 | "plur": {
257 | "version": "1.0.0",
258 | "resolved": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz",
259 | "integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=",
260 | "dev": true
261 | },
262 | "poll-watch": {
263 | "version": "https://registry.npmjs.org/poll-watch/-/poll-watch-0.0.1.tgz",
264 | "integrity": "sha1-vPL3j6rm/48cq8XLJ66xu6NovSg="
265 | },
266 | "pretty-ms": {
267 | "version": "2.1.0",
268 | "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz",
269 | "integrity": "sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw=",
270 | "dev": true
271 | },
272 | "process-nextick-args": {
273 | "version": "1.0.7",
274 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
275 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
276 | "dev": true
277 | },
278 | "re-emitter": {
279 | "version": "1.1.3",
280 | "resolved": "https://registry.npmjs.org/re-emitter/-/re-emitter-1.1.3.tgz",
281 | "integrity": "sha1-+p4xn/3u6zWycpbvDz03TawvUqc=",
282 | "dev": true
283 | },
284 | "readable-stream": {
285 | "version": "2.2.10",
286 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz",
287 | "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==",
288 | "dev": true
289 | },
290 | "repeat-string": {
291 | "version": "1.6.1",
292 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
293 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
294 | "dev": true
295 | },
296 | "require-from-string": {
297 | "version": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
298 | "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg="
299 | },
300 | "resolve": {
301 | "version": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz",
302 | "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU="
303 | },
304 | "resumer": {
305 | "version": "0.0.0",
306 | "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz",
307 | "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=",
308 | "dev": true
309 | },
310 | "rollup": {
311 | "version": "0.34.10",
312 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.34.10.tgz",
313 | "integrity": "sha1-jrTe8ZSU3azLYUbbmvwO3XV6tAc=",
314 | "dev": true
315 | },
316 | "rollup-plugin-commonjs": {
317 | "version": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-3.3.1.tgz",
318 | "integrity": "sha1-2oJOk2FcDFYVfR90OEncAHT6u/s="
319 | },
320 | "rollup-plugin-node-resolve": {
321 | "version": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-2.1.1.tgz",
322 | "integrity": "sha1-y7eDsNFbAnlNWJFTULLw2QK43cg="
323 | },
324 | "rollup-pluginutils": {
325 | "version": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz",
326 | "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg="
327 | },
328 | "safe-buffer": {
329 | "version": "5.1.0",
330 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz",
331 | "integrity": "sha512-aSLEDudu6OoRr/2rU609gRmnYboRLxgDG1z9o2Q0os7236FwvcqIOO8r8U5JUEwivZOhDaKlFO4SbPTJYyBEyQ==",
332 | "dev": true
333 | },
334 | "source-map": {
335 | "version": "0.5.6",
336 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
337 | "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
338 | "dev": true
339 | },
340 | "source-map-support": {
341 | "version": "0.4.15",
342 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz",
343 | "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=",
344 | "dev": true
345 | },
346 | "split": {
347 | "version": "1.0.0",
348 | "resolved": "https://registry.npmjs.org/split/-/split-1.0.0.tgz",
349 | "integrity": "sha1-xDlc5oOrzSVLwo/h2rtuXCfc/64=",
350 | "dev": true
351 | },
352 | "string_decoder": {
353 | "version": "1.0.1",
354 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
355 | "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
356 | "dev": true
357 | },
358 | "string.prototype.trim": {
359 | "version": "1.1.2",
360 | "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz",
361 | "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=",
362 | "dev": true
363 | },
364 | "strip-ansi": {
365 | "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
366 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8="
367 | },
368 | "supports-color": {
369 | "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
370 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
371 | },
372 | "tap-out": {
373 | "version": "1.4.2",
374 | "resolved": "https://registry.npmjs.org/tap-out/-/tap-out-1.4.2.tgz",
375 | "integrity": "sha1-yQfsG/lAURHQiCY+kvVgi4jLs3o=",
376 | "dev": true
377 | },
378 | "tap-spec": {
379 | "version": "4.1.1",
380 | "resolved": "https://registry.npmjs.org/tap-spec/-/tap-spec-4.1.1.tgz",
381 | "integrity": "sha1-4unyb1IIIysfViKIyXYk1YqI8Fo=",
382 | "dev": true
383 | },
384 | "tape": {
385 | "version": "4.6.3",
386 | "resolved": "https://registry.npmjs.org/tape/-/tape-4.6.3.tgz",
387 | "integrity": "sha1-Y353WB6ass4XV36b1M5PV1gG2LY=",
388 | "dev": true,
389 | "dependencies": {
390 | "resolve": {
391 | "version": "1.1.7",
392 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
393 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
394 | "dev": true
395 | }
396 | }
397 | },
398 | "through": {
399 | "version": "2.3.8",
400 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
401 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
402 | "dev": true
403 | },
404 | "through2": {
405 | "version": "2.0.3",
406 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
407 | "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
408 | "dev": true
409 | },
410 | "trim": {
411 | "version": "0.0.1",
412 | "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
413 | "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=",
414 | "dev": true
415 | },
416 | "util-deprecate": {
417 | "version": "1.0.2",
418 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
419 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
420 | "dev": true
421 | },
422 | "vlq": {
423 | "version": "https://registry.npmjs.org/vlq/-/vlq-0.2.2.tgz",
424 | "integrity": "sha1-4xbVJXtAuGu0PLjV/qXX9U1rDKE="
425 | },
426 | "wrappy": {
427 | "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
428 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
429 | "dev": true
430 | },
431 | "xtend": {
432 | "version": "4.0.1",
433 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
434 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
435 | "dev": true
436 | }
437 | }
438 | }
439 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "wrollup",
3 | "version": "0.3.2",
4 | "description": "watcher for rollup",
5 | "main": "index.js",
6 | "bin": {
7 | "wrollup": "./cli.js"
8 | },
9 | "scripts": {
10 | "test": "cd test && node test.js | tap-spec"
11 | },
12 | "repository": {
13 | "type": "git",
14 | "url": "https://github.com/talmobi/wrollup"
15 | },
16 | "keywords": [
17 | "watch",
18 | "watcher",
19 | "rollup"
20 | ],
21 | "author": "talmobi ",
22 | "license": "MIT",
23 | "bugs": {
24 | "url": "https://github.com/talmobi/wrollup/issues"
25 | },
26 | "devDependencies": {
27 | "rollup": "^0.34.10",
28 | "tap-spec": "^4.1.1",
29 | "tape": "^4.6.3"
30 | },
31 | "dependencies": {
32 | "chalk": "^1.1.3",
33 | "minimist": "^1.2.0",
34 | "poll-watch": "0.0.1",
35 | "require-from-string": "^1.2.0",
36 | "rollup-plugin-commonjs": "^3.3.1",
37 | "rollup-plugin-node-resolve": "^2.0.0"
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/test/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "lockfileVersion": 1,
3 | "dependencies": {
4 | "acorn": {
5 | "version": "3.3.0",
6 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
7 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
8 | "dev": true
9 | },
10 | "acorn-jsx": {
11 | "version": "3.0.1",
12 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
13 | "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
14 | "dev": true
15 | },
16 | "acorn-object-spread": {
17 | "version": "1.0.0",
18 | "resolved": "https://registry.npmjs.org/acorn-object-spread/-/acorn-object-spread-1.0.0.tgz",
19 | "integrity": "sha1-SOrQ9KjrFplaF6Dbn/xqyq2kumg=",
20 | "dev": true
21 | },
22 | "ansi-regex": {
23 | "version": "2.1.1",
24 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
25 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
26 | "dev": true
27 | },
28 | "ansi-styles": {
29 | "version": "2.2.1",
30 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
31 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
32 | "dev": true
33 | },
34 | "asap": {
35 | "version": "2.0.5",
36 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz",
37 | "integrity": "sha1-UidltQw1EEkOUtfc/ghe+bqWlY8="
38 | },
39 | "balanced-match": {
40 | "version": "0.4.2",
41 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
42 | "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
43 | "dev": true
44 | },
45 | "brace-expansion": {
46 | "version": "1.1.7",
47 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
48 | "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=",
49 | "dev": true
50 | },
51 | "browser-resolve": {
52 | "version": "1.11.2",
53 | "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz",
54 | "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
55 | "dev": true,
56 | "dependencies": {
57 | "resolve": {
58 | "version": "1.1.7",
59 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
60 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
61 | "dev": true
62 | }
63 | }
64 | },
65 | "buble": {
66 | "version": "0.13.2",
67 | "resolved": "https://registry.npmjs.org/buble/-/buble-0.13.2.tgz",
68 | "integrity": "sha1-XEVycoOE6nBPHcnnpdoWbA1+4uQ=",
69 | "dev": true
70 | },
71 | "builtin-modules": {
72 | "version": "1.1.1",
73 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
74 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
75 | "dev": true
76 | },
77 | "chalk": {
78 | "version": "1.1.3",
79 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
80 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
81 | "dev": true
82 | },
83 | "concat-map": {
84 | "version": "0.0.1",
85 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
86 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
87 | "dev": true
88 | },
89 | "core-js": {
90 | "version": "1.2.7",
91 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
92 | "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
93 | },
94 | "encoding": {
95 | "version": "0.1.12",
96 | "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
97 | "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s="
98 | },
99 | "escape-string-regexp": {
100 | "version": "1.0.5",
101 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
102 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
103 | "dev": true
104 | },
105 | "estree-walker": {
106 | "version": "0.2.1",
107 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz",
108 | "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=",
109 | "dev": true
110 | },
111 | "fbjs": {
112 | "version": "0.8.12",
113 | "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.12.tgz",
114 | "integrity": "sha1-ELXZL3bUVXX9Y6IX1OoCvqL47QQ="
115 | },
116 | "fs.realpath": {
117 | "version": "1.0.0",
118 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
119 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
120 | "dev": true
121 | },
122 | "glob": {
123 | "version": "7.1.2",
124 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
125 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
126 | "dev": true
127 | },
128 | "has-ansi": {
129 | "version": "2.0.0",
130 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
131 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
132 | "dev": true
133 | },
134 | "iconv-lite": {
135 | "version": "0.4.17",
136 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.17.tgz",
137 | "integrity": "sha1-T9qjs4rLwsAxsEXQ7c3+HsqxjI0="
138 | },
139 | "inflight": {
140 | "version": "1.0.6",
141 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
142 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
143 | "dev": true
144 | },
145 | "inherits": {
146 | "version": "2.0.3",
147 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
148 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
149 | "dev": true
150 | },
151 | "is-stream": {
152 | "version": "1.1.0",
153 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
154 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
155 | },
156 | "isomorphic-fetch": {
157 | "version": "2.2.1",
158 | "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
159 | "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk="
160 | },
161 | "js-tokens": {
162 | "version": "3.0.1",
163 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz",
164 | "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc="
165 | },
166 | "loose-envify": {
167 | "version": "1.3.1",
168 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
169 | "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg="
170 | },
171 | "magic-string": {
172 | "version": "0.14.0",
173 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.14.0.tgz",
174 | "integrity": "sha1-VyJK7xcByu7Sc7F6OalW5ysXJGI=",
175 | "dev": true
176 | },
177 | "minimatch": {
178 | "version": "3.0.4",
179 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
180 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
181 | "dev": true
182 | },
183 | "minimist": {
184 | "version": "1.2.0",
185 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
186 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
187 | "dev": true
188 | },
189 | "node-fetch": {
190 | "version": "1.7.1",
191 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.1.tgz",
192 | "integrity": "sha512-j8XsFGCLw79vWXkZtMSmmLaOk9z5SQ9bV/tkbZVCqvgwzrjAGq66igobLofHtF63NvMTp2WjytpsNTGKa+XRIQ=="
193 | },
194 | "object-assign": {
195 | "version": "4.1.1",
196 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
197 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
198 | },
199 | "once": {
200 | "version": "1.4.0",
201 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
202 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
203 | "dev": true
204 | },
205 | "os-homedir": {
206 | "version": "1.0.2",
207 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
208 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
209 | "dev": true
210 | },
211 | "path-is-absolute": {
212 | "version": "1.0.1",
213 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
214 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
215 | "dev": true
216 | },
217 | "path-parse": {
218 | "version": "1.0.5",
219 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
220 | "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
221 | "dev": true
222 | },
223 | "poll-watch": {
224 | "version": "0.0.1",
225 | "resolved": "https://registry.npmjs.org/poll-watch/-/poll-watch-0.0.1.tgz",
226 | "integrity": "sha1-vPL3j6rm/48cq8XLJ66xu6NovSg=",
227 | "dev": true
228 | },
229 | "promise": {
230 | "version": "7.1.1",
231 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz",
232 | "integrity": "sha1-SJZUxpJha4qlWwck+oCbt9tJxb8="
233 | },
234 | "prop-types": {
235 | "version": "15.5.10",
236 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.10.tgz",
237 | "integrity": "sha1-J5ffwxJhguOpXj37suiT3ddFYVQ="
238 | },
239 | "react": {
240 | "version": "15.5.4",
241 | "resolved": "https://registry.npmjs.org/react/-/react-15.5.4.tgz",
242 | "integrity": "sha1-+oPrAVBqsjfNwcjDsc6o3gEr8Ec="
243 | },
244 | "require-from-string": {
245 | "version": "1.2.1",
246 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
247 | "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=",
248 | "dev": true
249 | },
250 | "resolve": {
251 | "version": "1.3.3",
252 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz",
253 | "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=",
254 | "dev": true
255 | },
256 | "rollup": {
257 | "version": "0.41.6",
258 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.41.6.tgz",
259 | "integrity": "sha1-4NBUl4d6OYwQTYFtJzOnGKepTio=",
260 | "dev": true
261 | },
262 | "rollup-plugin-buble": {
263 | "version": "0.13.0",
264 | "resolved": "https://registry.npmjs.org/rollup-plugin-buble/-/rollup-plugin-buble-0.13.0.tgz",
265 | "integrity": "sha1-KLquz4qXERLQbLYIuLW1V3tzHtk=",
266 | "dev": true
267 | },
268 | "rollup-plugin-commonjs": {
269 | "version": "3.3.1",
270 | "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-3.3.1.tgz",
271 | "integrity": "sha1-2oJOk2FcDFYVfR90OEncAHT6u/s=",
272 | "dev": true,
273 | "dependencies": {
274 | "magic-string": {
275 | "version": "0.15.2",
276 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.15.2.tgz",
277 | "integrity": "sha1-BoHXOIdBu8Ot2qZQYJkmJMbAnpw=",
278 | "dev": true
279 | }
280 | }
281 | },
282 | "rollup-plugin-node-resolve": {
283 | "version": "2.1.1",
284 | "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-2.1.1.tgz",
285 | "integrity": "sha1-y7eDsNFbAnlNWJFTULLw2QK43cg=",
286 | "dev": true
287 | },
288 | "rollup-pluginutils": {
289 | "version": "1.5.2",
290 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz",
291 | "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=",
292 | "dev": true
293 | },
294 | "setimmediate": {
295 | "version": "1.0.5",
296 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
297 | "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
298 | },
299 | "source-map": {
300 | "version": "0.5.6",
301 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
302 | "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
303 | "dev": true
304 | },
305 | "source-map-support": {
306 | "version": "0.4.15",
307 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz",
308 | "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=",
309 | "dev": true
310 | },
311 | "strip-ansi": {
312 | "version": "3.0.1",
313 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
314 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
315 | "dev": true
316 | },
317 | "supports-color": {
318 | "version": "2.0.0",
319 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
320 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
321 | "dev": true
322 | },
323 | "ua-parser-js": {
324 | "version": "0.7.12",
325 | "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.12.tgz",
326 | "integrity": "sha1-BMgamb3V3FImPqKdJMa/jUgYpLs="
327 | },
328 | "vlq": {
329 | "version": "0.2.2",
330 | "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.2.tgz",
331 | "integrity": "sha1-4xbVJXtAuGu0PLjV/qXX9U1rDKE=",
332 | "dev": true
333 | },
334 | "whatwg-fetch": {
335 | "version": "2.0.3",
336 | "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz",
337 | "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ="
338 | },
339 | "wrappy": {
340 | "version": "1.0.2",
341 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
342 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
343 | "dev": true
344 | },
345 | "wrollup": {
346 | "version": "0.3.1",
347 | "resolved": "https://registry.npmjs.org/wrollup/-/wrollup-0.3.1.tgz",
348 | "integrity": "sha1-qp1HL0t7N9UMYZQ/APDdHUSFuBo=",
349 | "dev": true
350 | }
351 | }
352 | }
353 |
--------------------------------------------------------------------------------
/test/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "scripts": {
3 | "start": "../cli.js -c rollup.config.js",
4 | "startwooster": "../cli.js -c rollup.config.js 2>&1 | /Users/mollie/code/wooster/cli.js",
5 | "startcli": "../cli.js --input src/index.js --output dist/bundle.js -f iife -c node:buble -c node:nodeResolve node:commonjs"
6 | },
7 | "devDependencies": {
8 | "rollup": "^0.41.6",
9 | "rollup-plugin-buble": "^0.13.0",
10 | "rollup-plugin-commonjs": "^3.3.1",
11 | "rollup-plugin-node-resolve": "^2.1.1",
12 | "wrollup": "^0.3.1"
13 | },
14 | "dependencies": {
15 | "react": "^15.5.4"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/test/rollup.config.js:
--------------------------------------------------------------------------------
1 | import buble from 'rollup-plugin-buble'
2 | import nodeResolve from 'rollup-plugin-node-resolve'
3 | import commonjs from 'rollup-plugin-commonjs'
4 |
5 | export default {
6 | entry: 'src/index.js',
7 | dest: 'dist/bundle.js',
8 | format: 'iife',
9 | plugins: [
10 | buble(),
11 | nodeResolve(),
12 | commonjs({
13 | include: 'node_modules/**'
14 | })
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/test/src/App.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | const Component = React.createClass({
4 | render: function () {
5 | return (
6 | Component { (new Date()).toLocaleString() }
7 | )
8 | }
9 | })
10 |
11 | export default Component
12 |
--------------------------------------------------------------------------------
/test/src/index.js:
--------------------------------------------------------------------------------
1 | import message from './message'
2 |
3 | import React from 'react'
4 |
5 | console.log('Hello world, message: ' + message)
6 |
7 | import App from './App.jsx'
8 |
9 | // fake react
10 | // var React = {
11 | // createElement: function (el, props) {
12 | // return String(el)
13 | // }
14 | // }
15 |
16 | console.log()
17 | console.log()
18 |
--------------------------------------------------------------------------------
/test/src/message.js:
--------------------------------------------------------------------------------
1 | export default 'yippeee, yaahhoooo, waaahhoooooo'
2 |
--------------------------------------------------------------------------------
/test/test.js:
--------------------------------------------------------------------------------
1 | var path = require('path')
2 | var childProcess = require('child_process')
3 | var fs = require('fs')
4 |
5 | var test = require('tape')
6 |
7 | var _spawns = []
8 |
9 | process.on('exit', function () {
10 | _spawns.forEach(function (spawn) {
11 | try {
12 | spawn.kill()
13 | } catch (err) {}
14 | })
15 | })
16 |
17 | function exec (cmd, args) {
18 | var spawn = childProcess.spawn(cmd, args)
19 | _spawns.push(spawn)
20 |
21 | var _buffer
22 | var _listeners = {}
23 |
24 | function handler (chunk) {
25 | _buffer += chunk.toString('utf8')
26 | _listeners['data'] && _listeners['data'].forEach(function (cb) {
27 | cb(chunk)
28 | })
29 | }
30 |
31 | spawn.stdout.on('data', handler)
32 | spawn.stderr.on('data', handler)
33 |
34 | var api = {}
35 | api.kill = function () {
36 | spawn.kill()
37 | }
38 | api.getBuffer = function () {
39 | return _buffer
40 | }
41 | api.on = function (evt, cb) {
42 | _listeners[evt] = _listeners[evt] || []
43 | _listeners[evt].push(cb)
44 | return function () {
45 | var i = _listeners[evt].indexOf(cb)
46 | return _listeners.splice(i, 1)
47 | }
48 | }
49 |
50 | return api
51 | }
52 |
53 | function stripAnsi (str) {
54 | // https://github.com/chalk/ansi-regex
55 | var ansiRegex = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g
56 | return str.replace(ansiRegex, '')
57 | }
58 |
59 | function normalize (str) {
60 | var s = stripAnsi(str)
61 | s = s.replace(/\s+/g, '')
62 | s = s.toLowerCase()
63 | return s
64 | }
65 |
66 | test('start watching on successful initial build', function (t) {
67 | t.plan(1)
68 |
69 | // clean project files
70 | var a, b, data
71 | a = path.resolve('untouched_src/App.jsx')
72 | b = path.resolve('src/App.jsx')
73 | data = fs.readFileSync(a)
74 | fs.writeFileSync(b, data)
75 | a = path.resolve('untouched_src/index.js')
76 | b = path.resolve('src/index.js')
77 | data = fs.readFileSync(a)
78 | fs.writeFileSync(b, data)
79 | a = path.resolve('untouched_src/message.js')
80 | b = path.resolve('src/message.js')
81 | data = fs.readFileSync(a)
82 | fs.writeFileSync(b, data)
83 |
84 | // exec('../cli.js', ['-c', 'rollup.config.js'], function (buffer) {
85 | console.log('cwd: ' + process.cwd())
86 | var api = exec('npm', ['start'])
87 |
88 | var finish = function () {
89 | console.log('finishing tests...')
90 | setTimeout(function () {
91 | var buffer = api.getBuffer()
92 | api.kill()
93 | buffer = stripAnsi(buffer)
94 | var lines = buffer.split('\n')
95 |
96 | var expectedLines = [
97 | ' watching /test/src/message.js',
98 | ' watching /test/src/App.jsx',
99 | ' watching /test/src/index.js',
100 | 'compiled dist/bundle.js',
101 | 'modification from ./src/App.jsx',
102 | 'compiled dist/bundle.js',
103 | 'modification from ./src/index.js',
104 | 'compiled dist/bundle.js',
105 | 'modification from ./src/message.js',
106 | 'compiled dist/bundle.js',
107 | 'modification from ./src/App.jsx',
108 | '``` SyntaxError (3:37)',
109 | ' 1| import React from "react"',
110 | ' 2| ',
111 | ' 3| const Component = React.createClass({:',
112 | '-----------------------------------------^',
113 | ' 4| render: function () {',
114 | ' 5| return (',
115 | ' 6| Component { (new Date()).toLocaleString() }
',
116 | '',
117 | 'SyntaxError: Error transforming [App.jsx]',
118 | 'url: ' + path.resolve('src/App.jsx'),
119 | 'modification from ./src/message.js',
120 | '``` SyntaxError (1:49)',
121 | ' 1| export default "yippeee, yaahhoooo, waaahhoooooo":',
122 | '-----------------------------------------------------^',
123 | ' 2| ',
124 | '',
125 | 'SyntaxError: Error transforming [message.js]',
126 | 'url: ' + path.resolve('src/message.js'),
127 | 'modification from ./src/message.js',
128 | '``` SyntaxError (3:37)',
129 | ' 1| import React from "react"',
130 | ' 2| ',
131 | ' 3| const Component = React.createClass({:',
132 | '-----------------------------------------^',
133 | ' 4| render: function () {',
134 | ' 5| return (',
135 | ' 6| Component { (new Date()).toLocaleString() }
',
136 | '',
137 | 'SyntaxError: Error transforming [App.jsx]',
138 | 'url: ' + path.resolve('src/App.jsx'),
139 | 'modification from ./src/App.jsx',
140 | ' watching /test/src/message.js',
141 | ' watching /test/src/App.jsx',
142 | ' watching /test/src/index.js',
143 | 'compiled dist/bundle.js',
144 | ''
145 | ]
146 |
147 | var diffLines = lines.slice(4).filter(function (line, index, arr) {
148 | var isDifferent = (line !== expectedLines[index])
149 | if (isDifferent) {
150 | console.log('index: ' + index)
151 | console.log('[' + line + ']')
152 | console.log('[' + expectedLines[index] + ']')
153 | }
154 | return isDifferent
155 | })
156 |
157 | console.log(' === diffs === ')
158 | console.log(diffLines)
159 |
160 | t.ok(
161 | diffLines.length === 0,
162 | 'should be nothing different in the output and expected output'
163 | )
164 | }, 500)
165 | }
166 |
167 | var actions = [
168 | function () { // trigger change event
169 | var a = path.resolve('untouched_src/App.jsx')
170 | var b = path.resolve('src/App.jsx')
171 | var data = fs.readFileSync(a)
172 | fs.writeFileSync(b, data)
173 | },
174 | function () { // trigger change event
175 | var a = path.resolve('untouched_src/index.js')
176 | var b = path.resolve('src/index.js')
177 | var data = fs.readFileSync(a)
178 | fs.writeFileSync(b, data)
179 | },
180 | function () { // trigger change event
181 | var a = path.resolve('untouched_src/message.js')
182 | var b = path.resolve('src/message.js')
183 | var data = fs.readFileSync(a)
184 | fs.writeFileSync(b, data)
185 | },
186 | function () { // add syntax error
187 | var a = path.resolve('untouched_src/App.jsx')
188 | var b = path.resolve('src/App.jsx')
189 | var data = fs.readFileSync(a)
190 |
191 | var lines = data.toString('utf8').split('\n')
192 | lines[2] += ':' // add syntax error
193 |
194 | fs.writeFileSync(b, lines.join('\n'))
195 | },
196 | function () { // add syntax error
197 | var a = path.resolve('untouched_src/message.js')
198 | var b = path.resolve('src/message.js')
199 | var data = fs.readFileSync(a)
200 |
201 | var lines = data.toString('utf8').split('\n')
202 | lines[0] += ':' // add syntax error
203 |
204 | fs.writeFileSync(b, lines.join('\n'))
205 | },
206 | function () { // fix message.js
207 | var a = path.resolve('untouched_src/message.js')
208 | var b = path.resolve('src/message.js')
209 | var data = fs.readFileSync(a)
210 | fs.writeFileSync(b, data)
211 | },
212 | function () { // fix App.jsx
213 | var a = path.resolve('untouched_src/App.jsx')
214 | var b = path.resolve('src/App.jsx')
215 | var data = fs.readFileSync(a)
216 | fs.writeFileSync(b, data)
217 | }
218 | ]
219 |
220 | setTimeout(function () {
221 | var i = 0;
222 | var next = function () {
223 | console.log('--> next action')
224 | var a = actions[i]
225 | a()
226 | if (actions[++i]) {
227 | setTimeout(next, 1000)
228 | } else {
229 | finish()
230 | }
231 | }
232 | next()
233 | }, 2000)
234 | })
235 |
--------------------------------------------------------------------------------
/test/untouched_src/App.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | const Component = React.createClass({
4 | render: function () {
5 | return (
6 | Component { (new Date()).toLocaleString() }
7 | )
8 | }
9 | })
10 |
11 | export default Component
12 |
--------------------------------------------------------------------------------
/test/untouched_src/index.js:
--------------------------------------------------------------------------------
1 | import message from './message'
2 |
3 | import React from 'react'
4 |
5 | console.log('Hello world, message: ' + message)
6 |
7 | import App from './App.jsx'
8 |
9 | // fake react
10 | // var React = {
11 | // createElement: function (el, props) {
12 | // return String(el)
13 | // }
14 | // }
15 |
16 | console.log()
17 | console.log()
18 |
--------------------------------------------------------------------------------
/test/untouched_src/message.js:
--------------------------------------------------------------------------------
1 | export default 'yippeee, yaahhoooo, waaahhoooooo'
2 |
--------------------------------------------------------------------------------