Added Gulp.js for compiling SCSS stylesheets
This commit is contained in:
21
node_modules/glob-watcher/LICENSE
generated
vendored
Executable file
21
node_modules/glob-watcher/LICENSE
generated
vendored
Executable file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2017 Blaine Bublitz <blaine.bublitz@gmail.com>, Eric Schoffstall <yo@contra.io> and other contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
137
node_modules/glob-watcher/README.md
generated
vendored
Normal file
137
node_modules/glob-watcher/README.md
generated
vendored
Normal file
@ -0,0 +1,137 @@
|
||||
<p align="center">
|
||||
<a href="http://gulpjs.com">
|
||||
<img height="257" width="114" src="https://raw.githubusercontent.com/gulpjs/artwork/master/gulp-2x.png">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
# glob-watcher
|
||||
|
||||
[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
|
||||
|
||||
Watch globs and execute a function upon change, with intelligent defaults for debouncing and queueing.
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
var watch = require('glob-watcher');
|
||||
|
||||
watch(['./*.js', '!./something.js'], function(done){
|
||||
// This function will be called each time a globbed file is changed
|
||||
// but is debounced with a 200ms delay (default) and queues subsequent calls
|
||||
|
||||
// Make sure to signal async completion with the callback
|
||||
// or by returning a stream, promise, observable or child process
|
||||
done();
|
||||
|
||||
// if you need access to the `path` or `stat` object, listen
|
||||
// for the `change` event (see below)
|
||||
|
||||
// if you need to listen to specific events, use the returned
|
||||
// watcher instance (see below)
|
||||
});
|
||||
|
||||
// Raw chokidar instance
|
||||
var watcher = watch(['./*.js', '!./something.js']);
|
||||
|
||||
// Listen for the 'change' event to get `path`/`stat`
|
||||
// No async completion available because this is the raw chokidar instance
|
||||
watcher.on('change', function(path, stat) {
|
||||
// `path` is the path of the changed file
|
||||
// `stat` is an `fs.Stat` object (not always available)
|
||||
});
|
||||
|
||||
// Listen for other events
|
||||
// No async completion available because this is the raw chokidar instance
|
||||
watcher.on('add', function(path, stat) {
|
||||
// `path` is the path of the changed file
|
||||
// `stat` is an `fs.Stat` object (not always available)
|
||||
});
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
### `watch(globs[, options][, fn])`
|
||||
|
||||
Takes a path string, an array of path strings, a [glob][micromatch] string or an array of [glob][micromatch] strings as `globs` to watch on the filesystem. Also optionally takes `options` to configure the watcher and a `fn` to execute when a file changes.
|
||||
|
||||
__Note: As of 5.0.0, globs must use `/` as the separator character because `\\` is reserved for escape sequences (as per the Bash 4.3 & Micromatch specs). This means you can't use `path.join()` or `__dirname` in Windows environments. If you need to use `path.join()`, you can use [normalize-path][normalize-path] against your paths afterwards. If you need to use `__dirname`, you can set it as the `cwd` option that gets passed directly to [chokidar][chokidar]. The [micromatch docs][micromatch-backslashes] contain more information about backslashes.__
|
||||
|
||||
Returns an instance of [chokidar][chokidar].
|
||||
|
||||
#### `fn([callback])`
|
||||
|
||||
If the `fn` is passed, it will be called when the watcher emits a `change`, `add` or `unlink` event. It is automatically debounced with a default delay of 200 milliseconds and subsequent calls will be queued and called upon completion. These defaults can be changed using the `options`.
|
||||
|
||||
The `fn` is passed a single argument, `callback`, which is a function that must be called when work in the `fn` is complete. Instead of calling the `callback` function, [async completion][async-completion] can be signalled by:
|
||||
* Returning a `Stream` or `EventEmitter`
|
||||
* Returning a `Child Process`
|
||||
* Returning a `Promise`
|
||||
* Returning an `Observable`
|
||||
|
||||
Once async completion is signalled, if another run is queued, it will be executed.
|
||||
|
||||
#### `options`
|
||||
|
||||
##### `options.ignoreInitial`
|
||||
|
||||
If set to `false` the `fn` is called during [chokidar][chokidar] instantiation as it discovers the file paths. Useful if it is desirable to trigger the `fn` during startup.
|
||||
|
||||
__Passed through to [chokidar][chokidar], but defaulted to `true` instead of `false`.__
|
||||
|
||||
Type: `Boolean`
|
||||
|
||||
Default: `true`
|
||||
|
||||
##### `options.delay`
|
||||
|
||||
The delay to wait before triggering the `fn`. Useful for waiting on many changes before doing the work on changed files, e.g. find-and-replace on many files.
|
||||
|
||||
Type: `Number`
|
||||
|
||||
Default: `200` (milliseconds)
|
||||
|
||||
##### `options.queue`
|
||||
|
||||
Whether or not a file change should queue the `fn` execution if the `fn` is already running. Useful for a long running `fn`.
|
||||
|
||||
Type: `Boolean`
|
||||
|
||||
Default: `true`
|
||||
|
||||
##### `options.events`
|
||||
|
||||
An event name or array of event names to listen for. Useful if you only need to watch specific events.
|
||||
|
||||
Type: `String | Array<String>`
|
||||
|
||||
Default: `[ 'add', 'change', 'unlink' ]`
|
||||
|
||||
##### other
|
||||
|
||||
Options are passed directly to [chokidar][chokidar].
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
|
||||
[micromatch]: https://github.com/micromatch/micromatch
|
||||
[normalize-path]: https://www.npmjs.com/package/normalize-path
|
||||
[micromatch-backslashes]: https://github.com/micromatch/micromatch#backslashes
|
||||
[async-completion]: https://github.com/gulpjs/async-done#completion-and-error-resolution
|
||||
[chokidar]: https://github.com/paulmillr/chokidar
|
||||
|
||||
[downloads-image]: http://img.shields.io/npm/dm/glob-watcher.svg
|
||||
[npm-url]: https://npmjs.com/package/glob-watcher
|
||||
[npm-image]: http://img.shields.io/npm/v/glob-watcher.svg
|
||||
|
||||
[travis-url]: https://travis-ci.org/gulpjs/glob-watcher
|
||||
[travis-image]: http://img.shields.io/travis/gulpjs/glob-watcher.svg?label=travis-ci
|
||||
|
||||
[appveyor-url]: https://ci.appveyor.com/project/gulpjs/glob-watcher
|
||||
[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/glob-watcher.svg?label=appveyor
|
||||
|
||||
[coveralls-url]: https://coveralls.io/r/gulpjs/glob-watcher
|
||||
[coveralls-image]: http://img.shields.io/coveralls/gulpjs/glob-watcher/master.svg
|
||||
|
||||
[gitter-url]: https://gitter.im/gulpjs/gulp
|
||||
[gitter-image]: https://badges.gitter.im/gulpjs/gulp.png
|
149
node_modules/glob-watcher/index.js
generated
vendored
Normal file
149
node_modules/glob-watcher/index.js
generated
vendored
Normal file
@ -0,0 +1,149 @@
|
||||
'use strict';
|
||||
|
||||
var chokidar = require('chokidar');
|
||||
var debounce = require('just-debounce');
|
||||
var asyncDone = require('async-done');
|
||||
var defaults = require('object.defaults/immutable');
|
||||
var isNegatedGlob = require('is-negated-glob');
|
||||
var anymatch = require('anymatch');
|
||||
var normalize = require('normalize-path');
|
||||
|
||||
var defaultOpts = {
|
||||
delay: 200,
|
||||
events: ['add', 'change', 'unlink'],
|
||||
ignored: [],
|
||||
ignoreInitial: true,
|
||||
queue: true,
|
||||
};
|
||||
|
||||
function listenerCount(ee, evtName) {
|
||||
if (typeof ee.listenerCount === 'function') {
|
||||
return ee.listenerCount(evtName);
|
||||
}
|
||||
|
||||
return ee.listeners(evtName).length;
|
||||
}
|
||||
|
||||
function hasErrorListener(ee) {
|
||||
return listenerCount(ee, 'error') !== 0;
|
||||
}
|
||||
|
||||
function exists(val) {
|
||||
return val != null;
|
||||
}
|
||||
|
||||
function watch(glob, options, cb) {
|
||||
if (typeof options === 'function') {
|
||||
cb = options;
|
||||
options = {};
|
||||
}
|
||||
|
||||
var opt = defaults(options, defaultOpts);
|
||||
|
||||
if (!Array.isArray(opt.events)) {
|
||||
opt.events = [opt.events];
|
||||
}
|
||||
|
||||
if (Array.isArray(glob)) {
|
||||
// We slice so we don't mutate the passed globs array
|
||||
glob = glob.slice();
|
||||
} else {
|
||||
glob = [glob];
|
||||
}
|
||||
|
||||
var queued = false;
|
||||
var running = false;
|
||||
|
||||
// These use sparse arrays to keep track of the index in the
|
||||
// original globs array
|
||||
var positives = new Array(glob.length);
|
||||
var negatives = new Array(glob.length);
|
||||
|
||||
// Reverse the glob here so we don't end up with a positive
|
||||
// and negative glob in position 0 after a reverse
|
||||
glob.reverse().forEach(sortGlobs);
|
||||
|
||||
function sortGlobs(globString, index) {
|
||||
var result = isNegatedGlob(globString);
|
||||
if (result.negated) {
|
||||
negatives[index] = result.pattern;
|
||||
} else {
|
||||
positives[index] = result.pattern;
|
||||
}
|
||||
}
|
||||
|
||||
var toWatch = positives.filter(exists);
|
||||
|
||||
function joinCwd(glob) {
|
||||
if (glob && opt.cwd) {
|
||||
return normalize(opt.cwd + '/' + glob);
|
||||
}
|
||||
|
||||
return glob;
|
||||
}
|
||||
|
||||
// We only do add our custom `ignored` if there are some negative globs
|
||||
// TODO: I'm not sure how to test this
|
||||
if (negatives.some(exists)) {
|
||||
var normalizedPositives = positives.map(joinCwd);
|
||||
var normalizedNegatives = negatives.map(joinCwd);
|
||||
var shouldBeIgnored = function(path) {
|
||||
var positiveMatch = anymatch(normalizedPositives, path, true);
|
||||
var negativeMatch = anymatch(normalizedNegatives, path, true);
|
||||
// If negativeMatch is -1, that means it was never negated
|
||||
if (negativeMatch === -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If the negative is "less than" the positive, that means
|
||||
// it came later in the glob array before we reversed them
|
||||
return negativeMatch < positiveMatch;
|
||||
};
|
||||
|
||||
opt.ignored = [].concat(opt.ignored, shouldBeIgnored);
|
||||
}
|
||||
var watcher = chokidar.watch(toWatch, opt);
|
||||
|
||||
function runComplete(err) {
|
||||
running = false;
|
||||
|
||||
if (err && hasErrorListener(watcher)) {
|
||||
watcher.emit('error', err);
|
||||
}
|
||||
|
||||
// If we have a run queued, start onChange again
|
||||
if (queued) {
|
||||
queued = false;
|
||||
onChange();
|
||||
}
|
||||
}
|
||||
|
||||
function onChange() {
|
||||
if (running) {
|
||||
if (opt.queue) {
|
||||
queued = true;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
running = true;
|
||||
asyncDone(cb, runComplete);
|
||||
}
|
||||
|
||||
var fn;
|
||||
if (typeof cb === 'function') {
|
||||
fn = debounce(onChange, opt.delay);
|
||||
}
|
||||
|
||||
function watchEvent(eventName) {
|
||||
watcher.on(eventName, fn);
|
||||
}
|
||||
|
||||
if (fn) {
|
||||
opt.events.forEach(watchEvent);
|
||||
}
|
||||
|
||||
return watcher;
|
||||
}
|
||||
|
||||
module.exports = watch;
|
52
node_modules/glob-watcher/package.json
generated
vendored
Normal file
52
node_modules/glob-watcher/package.json
generated
vendored
Normal file
@ -0,0 +1,52 @@
|
||||
{
|
||||
"name": "glob-watcher",
|
||||
"version": "5.0.5",
|
||||
"description": "Watch globs and execute a function upon change, with intelligent defaults for debouncing and queueing.",
|
||||
"author": "Gulp Team <team@gulpjs.com> (http://gulpjs.com/)",
|
||||
"contributors": [],
|
||||
"repository": "gulpjs/glob-watcher",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.10"
|
||||
},
|
||||
"main": "index.js",
|
||||
"files": [
|
||||
"index.js"
|
||||
],
|
||||
"scripts": {
|
||||
"lint": "eslint .",
|
||||
"pretest": "npm run lint",
|
||||
"test": "mocha --async-only",
|
||||
"cover": "istanbul cover _mocha --report lcovonly",
|
||||
"coveralls": "npm run cover && istanbul-coveralls"
|
||||
},
|
||||
"dependencies": {
|
||||
"anymatch": "^2.0.0",
|
||||
"async-done": "^1.2.0",
|
||||
"chokidar": "^2.0.0",
|
||||
"is-negated-glob": "^1.0.0",
|
||||
"just-debounce": "^1.0.0",
|
||||
"normalize-path": "^3.0.0",
|
||||
"object.defaults": "^1.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"coveralls": "^2.11.2",
|
||||
"eslint": "^2.13.1",
|
||||
"eslint-config-gulp": "^3.0.1",
|
||||
"expect": "^1.16.0",
|
||||
"istanbul": "^0.4.0",
|
||||
"istanbul-coveralls": "^1.0.1",
|
||||
"mocha": "^2.0.0",
|
||||
"mocha-lcov-reporter": "^1.2.0",
|
||||
"rimraf": "^2.6.1",
|
||||
"through2": "^2.0.1"
|
||||
},
|
||||
"keywords": [
|
||||
"watch",
|
||||
"glob",
|
||||
"async",
|
||||
"queue",
|
||||
"debounce",
|
||||
"callback"
|
||||
]
|
||||
}
|
Reference in New Issue
Block a user