Removes node_modules
parent
7ba6bf8dbe
commit
b334fc3804
@ -1 +0,0 @@
|
|||||||
../gulp/bin/gulp.js
|
|
@ -1,20 +0,0 @@
|
|||||||
Copyright (c) 2013 Fractal <contact@wearefractal.com>
|
|
||||||
|
|
||||||
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.
|
|
@ -1,108 +0,0 @@
|
|||||||
![status](https://secure.travis-ci.org/wearefractal/gulp-concat.svg?branch=master)
|
|
||||||
|
|
||||||
## Information
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>Package</td><td>gulp-concat</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Description</td>
|
|
||||||
<td>Concatenates files</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Node Version</td>
|
|
||||||
<td>>= 0.10</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
var concat = require('gulp-concat');
|
|
||||||
|
|
||||||
gulp.task('scripts', function() {
|
|
||||||
return gulp.src('./lib/*.js')
|
|
||||||
.pipe(concat('all.js'))
|
|
||||||
.pipe(gulp.dest('./dist/'));
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
This will concat files by your operating systems newLine. It will take the base directory from the first file that passes through it.
|
|
||||||
|
|
||||||
Files will be concatenated in the order that they are specified in the `gulp.src` function. For example, to concat `./lib/file3.js`, `./lib/file1.js` and `./lib/file2.js` in that order, the following code will create a task to do that:
|
|
||||||
|
|
||||||
```js
|
|
||||||
var concat = require('gulp-concat');
|
|
||||||
|
|
||||||
gulp.task('scripts', function() {
|
|
||||||
return gulp.src(['./lib/file3.js', './lib/file1.js', './lib/file2.js'])
|
|
||||||
.pipe(concat('all.js'))
|
|
||||||
.pipe(gulp.dest('./dist/'));
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
To change the newLine simply pass an object as the second argument to concat with newLine being whatever (\r\n if you want to support any OS to look at it)
|
|
||||||
|
|
||||||
For instance:
|
|
||||||
|
|
||||||
```js
|
|
||||||
.pipe(concat('main.js', {newLine: ';'}))
|
|
||||||
```
|
|
||||||
|
|
||||||
To specify `cwd`, `path` and other [vinyl](https://github.com/wearefractal/vinyl) properties, gulp-concat accepts `Object` as first argument:
|
|
||||||
|
|
||||||
```js
|
|
||||||
var concat = require('gulp-concat');
|
|
||||||
|
|
||||||
gulp.task('scripts', function() {
|
|
||||||
return gulp.src(['./lib/file3.js', './lib/file1.js', './lib/file2.js'])
|
|
||||||
.pipe(concat({ path: 'new.js', stat: { mode: 0666 }}))
|
|
||||||
.pipe(gulp.dest('./dist'));
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
This will concat files into `./dist/new.js`.
|
|
||||||
|
|
||||||
### Source maps
|
|
||||||
|
|
||||||
Source maps can be generated by using [gulp-sourcemaps](https://www.npmjs.org/package/gulp-sourcemaps):
|
|
||||||
|
|
||||||
```js
|
|
||||||
var gulp = require('gulp');
|
|
||||||
var concat = require('gulp-concat');
|
|
||||||
var sourcemaps = require('gulp-sourcemaps');
|
|
||||||
|
|
||||||
gulp.task('javascript', function() {
|
|
||||||
return gulp.src('src/**/*.js')
|
|
||||||
.pipe(sourcemaps.init())
|
|
||||||
.pipe(concat('all.js'))
|
|
||||||
.pipe(sourcemaps.write())
|
|
||||||
.pipe(gulp.dest('dist'));
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## LICENSE
|
|
||||||
|
|
||||||
(MIT License)
|
|
||||||
|
|
||||||
Copyright (c) 2014 Fractal <contact@wearefractal.com>
|
|
||||||
|
|
||||||
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.
|
|
@ -1,103 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
var through = require('through2');
|
|
||||||
var path = require('path');
|
|
||||||
var gutil = require('gulp-util');
|
|
||||||
var PluginError = gutil.PluginError;
|
|
||||||
var File = gutil.File;
|
|
||||||
var Concat = require('concat-with-sourcemaps');
|
|
||||||
|
|
||||||
// file can be a vinyl file object or a string
|
|
||||||
// when a string it will construct a new one
|
|
||||||
module.exports = function(file, opt) {
|
|
||||||
if (!file) {
|
|
||||||
throw new PluginError('gulp-concat', 'Missing file option for gulp-concat');
|
|
||||||
}
|
|
||||||
opt = opt || {};
|
|
||||||
|
|
||||||
// to preserve existing |undefined| behaviour and to introduce |newLine: ""| for binaries
|
|
||||||
if (typeof opt.newLine !== 'string') {
|
|
||||||
opt.newLine = gutil.linefeed;
|
|
||||||
}
|
|
||||||
|
|
||||||
var isUsingSourceMaps = false;
|
|
||||||
var latestFile;
|
|
||||||
var latestMod;
|
|
||||||
var fileName;
|
|
||||||
var concat;
|
|
||||||
|
|
||||||
if (typeof file === 'string') {
|
|
||||||
fileName = file;
|
|
||||||
} else if (typeof file.path === 'string') {
|
|
||||||
fileName = path.basename(file.path);
|
|
||||||
} else {
|
|
||||||
throw new PluginError('gulp-concat', 'Missing path in file options for gulp-concat');
|
|
||||||
}
|
|
||||||
|
|
||||||
function bufferContents(file, enc, cb) {
|
|
||||||
// ignore empty files
|
|
||||||
if (file.isNull()) {
|
|
||||||
cb();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// we don't do streams (yet)
|
|
||||||
if (file.isStream()) {
|
|
||||||
this.emit('error', new PluginError('gulp-concat', 'Streaming not supported'));
|
|
||||||
cb();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// enable sourcemap support for concat
|
|
||||||
// if a sourcemap initialized file comes in
|
|
||||||
if (file.sourceMap && isUsingSourceMaps === false) {
|
|
||||||
isUsingSourceMaps = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// set latest file if not already set,
|
|
||||||
// or if the current file was modified more recently.
|
|
||||||
if (!latestMod || file.stat && file.stat.mtime > latestMod) {
|
|
||||||
latestFile = file;
|
|
||||||
latestMod = file.stat && file.stat.mtime;
|
|
||||||
}
|
|
||||||
|
|
||||||
// construct concat instance
|
|
||||||
if (!concat) {
|
|
||||||
concat = new Concat(isUsingSourceMaps, fileName, opt.newLine);
|
|
||||||
}
|
|
||||||
|
|
||||||
// add file to concat instance
|
|
||||||
concat.add(file.relative, file.contents, file.sourceMap);
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
|
|
||||||
function endStream(cb) {
|
|
||||||
// no files passed in, no file goes out
|
|
||||||
if (!latestFile || !concat) {
|
|
||||||
cb();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var joinedFile;
|
|
||||||
|
|
||||||
// if file opt was a file path
|
|
||||||
// clone everything from the latest file
|
|
||||||
if (typeof file === 'string') {
|
|
||||||
joinedFile = latestFile.clone({contents: false});
|
|
||||||
joinedFile.path = path.join(latestFile.base, file);
|
|
||||||
} else {
|
|
||||||
joinedFile = new File(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
joinedFile.contents = concat.content;
|
|
||||||
|
|
||||||
if (concat.sourceMapping) {
|
|
||||||
joinedFile.sourceMap = JSON.parse(concat.sourceMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.push(joinedFile);
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
|
|
||||||
return through.obj(bufferContents, endStream);
|
|
||||||
};
|
|
@ -1,13 +0,0 @@
|
|||||||
Copyright (c) 2014, Florian Reiterer <me@florianreiterer.com>
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
||||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
@ -1,44 +0,0 @@
|
|||||||
## Concat with source maps [![NPM version][npm-image]][npm-url] [![build status][travis-image]][travis-url] [![Test coverage][coveralls-image]][coveralls-url]
|
|
||||||
|
|
||||||
NPM module for concatenating files and generating source maps.
|
|
||||||
|
|
||||||
### Usage example
|
|
||||||
```js
|
|
||||||
var concat = new Concat(true, 'all.js', '\n');
|
|
||||||
concat.add('file1.js', file1Content);
|
|
||||||
concat.add('file2.js', file2Content, file2SourceMap);
|
|
||||||
|
|
||||||
var concatenatedContent = concat.content;
|
|
||||||
var sourceMapForContent = concat.sourceMap;
|
|
||||||
```
|
|
||||||
|
|
||||||
### API
|
|
||||||
|
|
||||||
#### new Concat(generateSourceMap, outFileName, separator)
|
|
||||||
Initialize a new concat object.
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
- generateSourceMap: whether or not to generate a source map (default: false)
|
|
||||||
- outFileName: the file name/path of the output file (for the source map)
|
|
||||||
- separator: the string that should separate files (default: no separator)
|
|
||||||
|
|
||||||
#### concat.add(fileName, content, sourceMap)
|
|
||||||
Add a file to the output file.
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
- fileName: file name of the input file
|
|
||||||
- content: content (Buffer or string) of the input file
|
|
||||||
- sourceMap: optional source map of the input file (string). Will be merged into the output source map.
|
|
||||||
|
|
||||||
#### concat.content
|
|
||||||
The resulting concatenated file content (Buffer).
|
|
||||||
|
|
||||||
#### concat.sourceMap
|
|
||||||
The resulting source map of the concatenated files (string).
|
|
||||||
|
|
||||||
[npm-image]: https://img.shields.io/npm/v/concat-with-sourcemaps.svg
|
|
||||||
[npm-url]: https://www.npmjs.com/package/concat-with-sourcemaps
|
|
||||||
[travis-image]: https://img.shields.io/travis/floridoo/concat-with-sourcemaps.svg
|
|
||||||
[travis-url]: https://travis-ci.org/floridoo/concat-with-sourcemaps
|
|
||||||
[coveralls-image]: https://img.shields.io/coveralls/floridoo/concat-with-sourcemaps.svg
|
|
||||||
[coveralls-url]: https://coveralls.io/r/floridoo/concat-with-sourcemaps?branch=master
|
|
@ -1,119 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
var SourceMapGenerator = require('source-map').SourceMapGenerator;
|
|
||||||
var SourceMapConsumer = require('source-map').SourceMapConsumer;
|
|
||||||
|
|
||||||
function unixStylePath(filePath) {
|
|
||||||
return filePath.replace(/\\/g, '/');
|
|
||||||
}
|
|
||||||
|
|
||||||
function Concat(generateSourceMap, fileName, separator) {
|
|
||||||
this.lineOffset = 0;
|
|
||||||
this.columnOffset = 0;
|
|
||||||
this.sourceMapping = generateSourceMap;
|
|
||||||
this.contentParts = [];
|
|
||||||
|
|
||||||
if (separator === undefined) {
|
|
||||||
this.separator = new Buffer(0);
|
|
||||||
} else {
|
|
||||||
this.separator = new Buffer(separator);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.sourceMapping) {
|
|
||||||
this._sourceMap = new SourceMapGenerator({file: unixStylePath(fileName)});
|
|
||||||
this.separatorLineOffset = 0;
|
|
||||||
this.separatorColumnOffset = 0;
|
|
||||||
var separatorString = this.separator.toString();
|
|
||||||
for (var i = 0; i < separatorString.length; i++) {
|
|
||||||
this.separatorColumnOffset++;
|
|
||||||
if (separatorString[i] === '\n') {
|
|
||||||
this.separatorLineOffset++;
|
|
||||||
this.separatorColumnOffset = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Concat.prototype.add = function(filePath, content, sourceMap) {
|
|
||||||
filePath = unixStylePath(filePath);
|
|
||||||
|
|
||||||
if (!Buffer.isBuffer(content)) {
|
|
||||||
content = new Buffer(content);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.contentParts.length !== 0) {
|
|
||||||
this.contentParts.push(this.separator);
|
|
||||||
}
|
|
||||||
this.contentParts.push(content);
|
|
||||||
|
|
||||||
if (this.sourceMapping) {
|
|
||||||
var contentString = content.toString();
|
|
||||||
var lines = contentString.split('\n').length;
|
|
||||||
|
|
||||||
if (Object.prototype.toString.call(sourceMap) === '[object String]')
|
|
||||||
sourceMap = JSON.parse(sourceMap);
|
|
||||||
|
|
||||||
if (sourceMap && sourceMap.mappings && sourceMap.mappings.length > 0) {
|
|
||||||
var upstreamSM = new SourceMapConsumer(sourceMap);
|
|
||||||
var _this = this;
|
|
||||||
upstreamSM.eachMapping(function(mapping) {
|
|
||||||
if (mapping.source) {
|
|
||||||
_this._sourceMap.addMapping({
|
|
||||||
generated: {
|
|
||||||
line: _this.lineOffset + mapping.generatedLine,
|
|
||||||
column: (mapping.generatedLine === 1 ? _this.columnOffset : 0) + mapping.generatedColumn
|
|
||||||
},
|
|
||||||
original: {
|
|
||||||
line: mapping.originalLine,
|
|
||||||
column: mapping.originalColumn
|
|
||||||
},
|
|
||||||
source: mapping.source,
|
|
||||||
name: mapping.name
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (upstreamSM.sourcesContent) {
|
|
||||||
upstreamSM.sourcesContent.forEach(function(sourceContent, i) {
|
|
||||||
_this._sourceMap.setSourceContent(upstreamSM.sources[i], sourceContent);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (sourceMap && sourceMap.sources && sourceMap.sources.length > 0)
|
|
||||||
filePath = sourceMap.sources[0];
|
|
||||||
for (var i = 1; i <= lines; i++) {
|
|
||||||
this._sourceMap.addMapping({
|
|
||||||
generated: {
|
|
||||||
line: this.lineOffset + i,
|
|
||||||
column: (i === 1 ? this.columnOffset : 0)
|
|
||||||
},
|
|
||||||
original: {
|
|
||||||
line: i,
|
|
||||||
column: 0
|
|
||||||
},
|
|
||||||
source: filePath
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (sourceMap && sourceMap.sourcesContent)
|
|
||||||
this._sourceMap.setSourceContent(filePath, sourceMap.sourcesContent[0]);
|
|
||||||
}
|
|
||||||
if (lines > 1)
|
|
||||||
this.columnOffset = 0;
|
|
||||||
if (this.separatorLineOffset === 0)
|
|
||||||
this.columnOffset += contentString.length - Math.max(0, contentString.lastIndexOf('\n')+1);
|
|
||||||
this.columnOffset += this.separatorColumnOffset;
|
|
||||||
this.lineOffset += lines - 1 + this.separatorLineOffset;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Object.defineProperty(Concat.prototype, 'content', {
|
|
||||||
get: function content() {
|
|
||||||
return Buffer.concat(this.contentParts);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Object.defineProperty(Concat.prototype, 'sourceMap', {
|
|
||||||
get: function sourceMap() {
|
|
||||||
return this._sourceMap ? this._sourceMap.toString() : undefined;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = Concat;
|
|
@ -1,510 +0,0 @@
|
|||||||
# Source Map
|
|
||||||
|
|
||||||
This is a library to generate and consume the source map format
|
|
||||||
[described here][format].
|
|
||||||
|
|
||||||
This library is written in the Asynchronous Module Definition format, and works
|
|
||||||
in the following environments:
|
|
||||||
|
|
||||||
* Modern Browsers supporting ECMAScript 5 (either after the build, or with an
|
|
||||||
AMD loader such as RequireJS)
|
|
||||||
|
|
||||||
* Inside Firefox (as a JSM file, after the build)
|
|
||||||
|
|
||||||
* With NodeJS versions 0.8.X and higher
|
|
||||||
|
|
||||||
## Node
|
|
||||||
|
|
||||||
$ npm install source-map
|
|
||||||
|
|
||||||
## Building from Source (for everywhere else)
|
|
||||||
|
|
||||||
Install Node and then run
|
|
||||||
|
|
||||||
$ git clone https://fitzgen@github.com/mozilla/source-map.git
|
|
||||||
$ cd source-map
|
|
||||||
$ npm link .
|
|
||||||
|
|
||||||
Next, run
|
|
||||||
|
|
||||||
$ node Makefile.dryice.js
|
|
||||||
|
|
||||||
This should spew a bunch of stuff to stdout, and create the following files:
|
|
||||||
|
|
||||||
* `dist/source-map.js` - The unminified browser version.
|
|
||||||
|
|
||||||
* `dist/source-map.min.js` - The minified browser version.
|
|
||||||
|
|
||||||
* `dist/SourceMap.jsm` - The JavaScript Module for inclusion in Firefox source.
|
|
||||||
|
|
||||||
## Examples
|
|
||||||
|
|
||||||
### Consuming a source map
|
|
||||||
|
|
||||||
```js
|
|
||||||
var rawSourceMap = {
|
|
||||||
version: 3,
|
|
||||||
file: 'min.js',
|
|
||||||
names: ['bar', 'baz', 'n'],
|
|
||||||
sources: ['one.js', 'two.js'],
|
|
||||||
sourceRoot: 'http://example.com/www/js/',
|
|
||||||
mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
|
|
||||||
};
|
|
||||||
|
|
||||||
var smc = new SourceMapConsumer(rawSourceMap);
|
|
||||||
|
|
||||||
console.log(smc.sources);
|
|
||||||
// [ 'http://example.com/www/js/one.js',
|
|
||||||
// 'http://example.com/www/js/two.js' ]
|
|
||||||
|
|
||||||
console.log(smc.originalPositionFor({
|
|
||||||
line: 2,
|
|
||||||
column: 28
|
|
||||||
}));
|
|
||||||
// { source: 'http://example.com/www/js/two.js',
|
|
||||||
// line: 2,
|
|
||||||
// column: 10,
|
|
||||||
// name: 'n' }
|
|
||||||
|
|
||||||
console.log(smc.generatedPositionFor({
|
|
||||||
source: 'http://example.com/www/js/two.js',
|
|
||||||
line: 2,
|
|
||||||
column: 10
|
|
||||||
}));
|
|
||||||
// { line: 2, column: 28 }
|
|
||||||
|
|
||||||
smc.eachMapping(function (m) {
|
|
||||||
// ...
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
### Generating a source map
|
|
||||||
|
|
||||||
In depth guide:
|
|
||||||
[**Compiling to JavaScript, and Debugging with Source Maps**](https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/)
|
|
||||||
|
|
||||||
#### With SourceNode (high level API)
|
|
||||||
|
|
||||||
```js
|
|
||||||
function compile(ast) {
|
|
||||||
switch (ast.type) {
|
|
||||||
case 'BinaryExpression':
|
|
||||||
return new SourceNode(
|
|
||||||
ast.location.line,
|
|
||||||
ast.location.column,
|
|
||||||
ast.location.source,
|
|
||||||
[compile(ast.left), " + ", compile(ast.right)]
|
|
||||||
);
|
|
||||||
case 'Literal':
|
|
||||||
return new SourceNode(
|
|
||||||
ast.location.line,
|
|
||||||
ast.location.column,
|
|
||||||
ast.location.source,
|
|
||||||
String(ast.value)
|
|
||||||
);
|
|
||||||
// ...
|
|
||||||
default:
|
|
||||||
throw new Error("Bad AST");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var ast = parse("40 + 2", "add.js");
|
|
||||||
console.log(compile(ast).toStringWithSourceMap({
|
|
||||||
file: 'add.js'
|
|
||||||
}));
|
|
||||||
// { code: '40 + 2',
|
|
||||||
// map: [object SourceMapGenerator] }
|
|
||||||
```
|
|
||||||
|
|
||||||
#### With SourceMapGenerator (low level API)
|
|
||||||
|
|
||||||
```js
|
|
||||||
var map = new SourceMapGenerator({
|
|
||||||
file: "source-mapped.js"
|
|
||||||
});
|
|
||||||
|
|
||||||
map.addMapping({
|
|
||||||
generated: {
|
|
||||||
line: 10,
|
|
||||||
column: 35
|
|
||||||
},
|
|
||||||
source: "foo.js",
|
|
||||||
original: {
|
|
||||||
line: 33,
|
|
||||||
column: 2
|
|
||||||
},
|
|
||||||
name: "christopher"
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log(map.toString());
|
|
||||||
// '{"version":3,"file":"source-mapped.js","sources":["foo.js"],"names":["christopher"],"mappings":";;;;;;;;;mCAgCEA"}'
|
|
||||||
```
|
|
||||||
|
|
||||||
## API
|
|
||||||
|
|
||||||
Get a reference to the module:
|
|
||||||
|
|
||||||
```js
|
|
||||||
// NodeJS
|
|
||||||
var sourceMap = require('source-map');
|
|
||||||
|
|
||||||
// Browser builds
|
|
||||||
var sourceMap = window.sourceMap;
|
|
||||||
|
|
||||||
// Inside Firefox
|
|
||||||
let sourceMap = {};
|
|
||||||
Components.utils.import('resource:///modules/devtools/SourceMap.jsm', sourceMap);
|
|
||||||
```
|
|
||||||
|
|
||||||
### SourceMapConsumer
|
|
||||||
|
|
||||||
A SourceMapConsumer instance represents a parsed source map which we can query
|
|
||||||
for information about the original file positions by giving it a file position
|
|
||||||
in the generated source.
|
|
||||||
|
|
||||||
#### new SourceMapConsumer(rawSourceMap)
|
|
||||||
|
|
||||||
The only parameter is the raw source map (either as a string which can be
|
|
||||||
`JSON.parse`'d, or an object). According to the spec, source maps have the
|
|
||||||
following attributes:
|
|
||||||
|
|
||||||
* `version`: Which version of the source map spec this map is following.
|
|
||||||
|
|
||||||
* `sources`: An array of URLs to the original source files.
|
|
||||||
|
|
||||||
* `names`: An array of identifiers which can be referrenced by individual
|
|
||||||
mappings.
|
|
||||||
|
|
||||||
* `sourceRoot`: Optional. The URL root from which all sources are relative.
|
|
||||||
|
|
||||||
* `sourcesContent`: Optional. An array of contents of the original source files.
|
|
||||||
|
|
||||||
* `mappings`: A string of base64 VLQs which contain the actual mappings.
|
|
||||||
|
|
||||||
* `file`: Optional. The generated filename this source map is associated with.
|
|
||||||
|
|
||||||
#### SourceMapConsumer.prototype.computeColumnSpans()
|
|
||||||
|
|
||||||
Compute the last column for each generated mapping. The last column is
|
|
||||||
inclusive.
|
|
||||||
|
|
||||||
#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition)
|
|
||||||
|
|
||||||
Returns the original source, line, and column information for the generated
|
|
||||||
source's line and column positions provided. The only argument is an object with
|
|
||||||
the following properties:
|
|
||||||
|
|
||||||
* `line`: The line number in the generated source.
|
|
||||||
|
|
||||||
* `column`: The column number in the generated source.
|
|
||||||
|
|
||||||
* `bias`: Either `SourceMapConsumer.GREATEST_LOWER_BOUND` or
|
|
||||||
`SourceMapConsumer.LEAST_UPPER_BOUND`. Specifies whether to return the closest
|
|
||||||
element that is smaller than or greater than the one we are searching for,
|
|
||||||
respectively, if the exact element cannot be found. Defaults to
|
|
||||||
`SourceMapConsumer.GREATEST_LOWER_BOUND`.
|
|
||||||
|
|
||||||
and an object is returned with the following properties:
|
|
||||||
|
|
||||||
* `source`: The original source file, or null if this information is not
|
|
||||||
available.
|
|
||||||
|
|
||||||
* `line`: The line number in the original source, or null if this information is
|
|
||||||
not available.
|
|
||||||
|
|
||||||
* `column`: The column number in the original source, or null or null if this
|
|
||||||
information is not available.
|
|
||||||
|
|
||||||
* `name`: The original identifier, or null if this information is not available.
|
|
||||||
|
|
||||||
#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition)
|
|
||||||
|
|
||||||
Returns the generated line and column information for the original source,
|
|
||||||
line, and column positions provided. The only argument is an object with
|
|
||||||
the following properties:
|
|
||||||
|
|
||||||
* `source`: The filename of the original source.
|
|
||||||
|
|
||||||
* `line`: The line number in the original source.
|
|
||||||
|
|
||||||
* `column`: The column number in the original source.
|
|
||||||
|
|
||||||
and an object is returned with the following properties:
|
|
||||||
|
|
||||||
* `line`: The line number in the generated source, or null.
|
|
||||||
|
|
||||||
* `column`: The column number in the generated source, or null.
|
|
||||||
|
|
||||||
#### SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)
|
|
||||||
|
|
||||||
Returns all generated line and column information for the original source, line,
|
|
||||||
and column provided. If no column is provided, returns all mappings
|
|
||||||
corresponding to a either the line we are searching for or the next closest line
|
|
||||||
that has any mappings. Otherwise, returns all mappings corresponding to the
|
|
||||||
given line and either the column we are searching for or the next closest column
|
|
||||||
that has any offsets.
|
|
||||||
|
|
||||||
The only argument is an object with the following properties:
|
|
||||||
|
|
||||||
* `source`: The filename of the original source.
|
|
||||||
|
|
||||||
* `line`: The line number in the original source.
|
|
||||||
|
|
||||||
* `column`: Optional. The column number in the original source.
|
|
||||||
|
|
||||||
and an array of objects is returned, each with the following properties:
|
|
||||||
|
|
||||||
* `line`: The line number in the generated source, or null.
|
|
||||||
|
|
||||||
* `column`: The column number in the generated source, or null.
|
|
||||||
|
|
||||||
#### SourceMapConsumer.prototype.hasContentsOfAllSources()
|
|
||||||
|
|
||||||
Return true if we have the embedded source content for every source listed in
|
|
||||||
the source map, false otherwise.
|
|
||||||
|
|
||||||
In other words, if this method returns `true`, then `smc.sourceContentFor(s)`
|
|
||||||
will succeed for every source `s` in `smc.sources`.
|
|
||||||
|
|
||||||
#### SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])
|
|
||||||
|
|
||||||
Returns the original source content for the source provided. The only
|
|
||||||
argument is the URL of the original source file.
|
|
||||||
|
|
||||||
If the source content for the given source is not found, then an error is
|
|
||||||
thrown. Optionally, pass `true` as the second param to have `null` returned
|
|
||||||
instead.
|
|
||||||
|
|
||||||
#### SourceMapConsumer.prototype.eachMapping(callback, context, order)
|
|
||||||
|
|
||||||
Iterate over each mapping between an original source/line/column and a
|
|
||||||
generated line/column in this source map.
|
|
||||||
|
|
||||||
* `callback`: The function that is called with each mapping. Mappings have the
|
|
||||||
form `{ source, generatedLine, generatedColumn, originalLine, originalColumn,
|
|
||||||
name }`
|
|
||||||
|
|
||||||
* `context`: Optional. If specified, this object will be the value of `this`
|
|
||||||
every time that `callback` is called.
|
|
||||||
|
|
||||||
* `order`: Either `SourceMapConsumer.GENERATED_ORDER` or
|
|
||||||
`SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to iterate over
|
|
||||||
the mappings sorted by the generated file's line/column order or the
|
|
||||||
original's source/line/column order, respectively. Defaults to
|
|
||||||
`SourceMapConsumer.GENERATED_ORDER`.
|
|
||||||
|
|
||||||
### SourceMapGenerator
|
|
||||||
|
|
||||||
An instance of the SourceMapGenerator represents a source map which is being
|
|
||||||
built incrementally.
|
|
||||||
|
|
||||||
#### new SourceMapGenerator([startOfSourceMap])
|
|
||||||
|
|
||||||
You may pass an object with the following properties:
|
|
||||||
|
|
||||||
* `file`: The filename of the generated source that this source map is
|
|
||||||
associated with.
|
|
||||||
|
|
||||||
* `sourceRoot`: A root for all relative URLs in this source map.
|
|
||||||
|
|
||||||
* `skipValidation`: Optional. When `true`, disables validation of mappings as
|
|
||||||
they are added. This can improve performance but should be used with
|
|
||||||
discretion, as a last resort. Even then, one should avoid using this flag when
|
|
||||||
running tests, if possible.
|
|
||||||
|
|
||||||
#### SourceMapGenerator.fromSourceMap(sourceMapConsumer)
|
|
||||||
|
|
||||||
Creates a new SourceMapGenerator based on a SourceMapConsumer
|
|
||||||
|
|
||||||
* `sourceMapConsumer` The SourceMap.
|
|
||||||
|
|
||||||
#### SourceMapGenerator.prototype.addMapping(mapping)
|
|
||||||
|
|
||||||
Add a single mapping from original source line and column to the generated
|
|
||||||
source's line and column for this source map being created. The mapping object
|
|
||||||
should have the following properties:
|
|
||||||
|
|
||||||
* `generated`: An object with the generated line and column positions.
|
|
||||||
|
|
||||||
* `original`: An object with the original line and column positions.
|
|
||||||
|
|
||||||
* `source`: The original source file (relative to the sourceRoot).
|
|
||||||
|
|
||||||
* `name`: An optional original token name for this mapping.
|
|
||||||
|
|
||||||
#### SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)
|
|
||||||
|
|
||||||
Set the source content for an original source file.
|
|
||||||
|
|
||||||
* `sourceFile` the URL of the original source file.
|
|
||||||
|
|
||||||
* `sourceContent` the content of the source file.
|
|
||||||
|
|
||||||
#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])
|
|
||||||
|
|
||||||
Applies a SourceMap for a source file to the SourceMap.
|
|
||||||
Each mapping to the supplied source file is rewritten using the
|
|
||||||
supplied SourceMap. Note: The resolution for the resulting mappings
|
|
||||||
is the minimium of this map and the supplied map.
|
|
||||||
|
|
||||||
* `sourceMapConsumer`: The SourceMap to be applied.
|
|
||||||
|
|
||||||
* `sourceFile`: Optional. The filename of the source file.
|
|
||||||
If omitted, sourceMapConsumer.file will be used, if it exists.
|
|
||||||
Otherwise an error will be thrown.
|
|
||||||
|
|
||||||
* `sourceMapPath`: Optional. The dirname of the path to the SourceMap
|
|
||||||
to be applied. If relative, it is relative to the SourceMap.
|
|
||||||
|
|
||||||
This parameter is needed when the two SourceMaps aren't in the same
|
|
||||||
directory, and the SourceMap to be applied contains relative source
|
|
||||||
paths. If so, those relative source paths need to be rewritten
|
|
||||||
relative to the SourceMap.
|
|
||||||
|
|
||||||
If omitted, it is assumed that both SourceMaps are in the same directory,
|
|
||||||
thus not needing any rewriting. (Supplying `'.'` has the same effect.)
|
|
||||||
|
|
||||||
#### SourceMapGenerator.prototype.toString()
|
|
||||||
|
|
||||||
Renders the source map being generated to a string.
|
|
||||||
|
|
||||||
### SourceNode
|
|
||||||
|
|
||||||
SourceNodes provide a way to abstract over interpolating and/or concatenating
|
|
||||||
snippets of generated JavaScript source code, while maintaining the line and
|
|
||||||
column information associated between those snippets and the original source
|
|
||||||
code. This is useful as the final intermediate representation a compiler might
|
|
||||||
use before outputting the generated JS and source map.
|
|
||||||
|
|
||||||
#### new SourceNode([line, column, source[, chunk[, name]]])
|
|
||||||
|
|
||||||
* `line`: The original line number associated with this source node, or null if
|
|
||||||
it isn't associated with an original line.
|
|
||||||
|
|
||||||
* `column`: The original column number associated with this source node, or null
|
|
||||||
if it isn't associated with an original column.
|
|
||||||
|
|
||||||
* `source`: The original source's filename; null if no filename is provided.
|
|
||||||
|
|
||||||
* `chunk`: Optional. Is immediately passed to `SourceNode.prototype.add`, see
|
|
||||||
below.
|
|
||||||
|
|
||||||
* `name`: Optional. The original identifier.
|
|
||||||
|
|
||||||
#### SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])
|
|
||||||
|
|
||||||
Creates a SourceNode from generated code and a SourceMapConsumer.
|
|
||||||
|
|
||||||
* `code`: The generated code
|
|
||||||
|
|
||||||
* `sourceMapConsumer` The SourceMap for the generated code
|
|
||||||
|
|
||||||
* `relativePath` The optional path that relative sources in `sourceMapConsumer`
|
|
||||||
should be relative to.
|
|
||||||
|
|
||||||
#### SourceNode.prototype.add(chunk)
|
|
||||||
|
|
||||||
Add a chunk of generated JS to this source node.
|
|
||||||
|
|
||||||
* `chunk`: A string snippet of generated JS code, another instance of
|
|
||||||
`SourceNode`, or an array where each member is one of those things.
|
|
||||||
|
|
||||||
#### SourceNode.prototype.prepend(chunk)
|
|
||||||
|
|
||||||
Prepend a chunk of generated JS to this source node.
|
|
||||||
|
|
||||||
* `chunk`: A string snippet of generated JS code, another instance of
|
|
||||||
`SourceNode`, or an array where each member is one of those things.
|
|
||||||
|
|
||||||
#### SourceNode.prototype.setSourceContent(sourceFile, sourceContent)
|
|
||||||
|
|
||||||
Set the source content for a source file. This will be added to the
|
|
||||||
`SourceMap` in the `sourcesContent` field.
|
|
||||||
|
|
||||||
* `sourceFile`: The filename of the source file
|
|
||||||
|
|
||||||
* `sourceContent`: The content of the source file
|
|
||||||
|
|
||||||
#### SourceNode.prototype.walk(fn)
|
|
||||||
|
|
||||||
Walk over the tree of JS snippets in this node and its children. The walking
|
|
||||||
function is called once for each snippet of JS and is passed that snippet and
|
|
||||||
the its original associated source's line/column location.
|
|
||||||
|
|
||||||
* `fn`: The traversal function.
|
|
||||||
|
|
||||||
#### SourceNode.prototype.walkSourceContents(fn)
|
|
||||||
|
|
||||||
Walk over the tree of SourceNodes. The walking function is called for each
|
|
||||||
source file content and is passed the filename and source content.
|
|
||||||
|
|
||||||
* `fn`: The traversal function.
|
|
||||||
|
|
||||||
#### SourceNode.prototype.join(sep)
|
|
||||||
|
|
||||||
Like `Array.prototype.join` except for SourceNodes. Inserts the separator
|
|
||||||
between each of this source node's children.
|
|
||||||
|
|
||||||
* `sep`: The separator.
|
|
||||||
|
|
||||||
#### SourceNode.prototype.replaceRight(pattern, replacement)
|
|
||||||
|
|
||||||
Call `String.prototype.replace` on the very right-most source snippet. Useful
|
|
||||||
for trimming whitespace from the end of a source node, etc.
|
|
||||||
|
|
||||||
* `pattern`: The pattern to replace.
|
|
||||||
|
|
||||||
* `replacement`: The thing to replace the pattern with.
|
|
||||||
|
|
||||||
#### SourceNode.prototype.toString()
|
|
||||||
|
|
||||||
Return the string representation of this source node. Walks over the tree and
|
|
||||||
concatenates all the various snippets together to one string.
|
|
||||||
|
|
||||||
#### SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])
|
|
||||||
|
|
||||||
Returns the string representation of this tree of source nodes, plus a
|
|
||||||
SourceMapGenerator which contains all the mappings between the generated and
|
|
||||||
original sources.
|
|
||||||
|
|
||||||
The arguments are the same as those to `new SourceMapGenerator`.
|
|
||||||
|
|
||||||
## Tests
|
|
||||||
|
|
||||||
[![Build Status](https://travis-ci.org/mozilla/source-map.png?branch=master)](https://travis-ci.org/mozilla/source-map)
|
|
||||||
|
|
||||||
Install NodeJS version 0.8.0 or greater, then run `node test/run-tests.js`.
|
|
||||||
|
|
||||||
To add new tests, create a new file named `test/test-<your new test name>.js`
|
|
||||||
and export your test functions with names that start with "test", for example
|
|
||||||
|
|
||||||
```js
|
|
||||||
exports["test doing the foo bar"] = function (assert, util) {
|
|
||||||
...
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
The new test will be located automatically when you run the suite.
|
|
||||||
|
|
||||||
The `util` argument is the test utility module located at `test/source-map/util`.
|
|
||||||
|
|
||||||
The `assert` argument is a cut down version of node's assert module. You have
|
|
||||||
access to the following assertion functions:
|
|
||||||
|
|
||||||
* `doesNotThrow`
|
|
||||||
|
|
||||||
* `equal`
|
|
||||||
|
|
||||||
* `ok`
|
|
||||||
|
|
||||||
* `strictEqual`
|
|
||||||
|
|
||||||
* `throws`
|
|
||||||
|
|
||||||
(The reason for the restricted set of test functions is because we need the
|
|
||||||
tests to run inside Firefox's test suite as well and so the assert module is
|
|
||||||
shimmed in that environment. See `build/assert-shim.js`.)
|
|
||||||
|
|
||||||
[format]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit
|
|
||||||
[feature]: https://wiki.mozilla.org/DevTools/Features/SourceMap
|
|
||||||
[Dryice]: https://github.com/mozilla/dryice
|
|
@ -1,56 +0,0 @@
|
|||||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2011 Mozilla Foundation and contributors
|
|
||||||
* Licensed under the New BSD license. See LICENSE or:
|
|
||||||
* http://opensource.org/licenses/BSD-3-Clause
|
|
||||||
*/
|
|
||||||
define('test/source-map/assert', ['exports'], function (exports) {
|
|
||||||
|
|
||||||
let do_throw = function (msg) {
|
|
||||||
throw new Error(msg);
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.init = function (throw_fn) {
|
|
||||||
do_throw = throw_fn;
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.doesNotThrow = function (fn) {
|
|
||||||
try {
|
|
||||||
fn();
|
|
||||||
}
|
|
||||||
catch (e) {
|
|
||||||
do_throw(e.message);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.equal = function (actual, expected, msg) {
|
|
||||||
msg = msg || String(actual) + ' != ' + String(expected);
|
|
||||||
if (actual != expected) {
|
|
||||||
do_throw(msg);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.ok = function (val, msg) {
|
|
||||||
msg = msg || String(val) + ' is falsey';
|
|
||||||
if (!Boolean(val)) {
|
|
||||||
do_throw(msg);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.strictEqual = function (actual, expected, msg) {
|
|
||||||
msg = msg || String(actual) + ' !== ' + String(expected);
|
|
||||||
if (actual !== expected) {
|
|
||||||
do_throw(msg);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.throws = function (fn) {
|
|
||||||
try {
|
|
||||||
fn();
|
|
||||||
do_throw('Expected an error to be thrown, but it wasn\'t.');
|
|
||||||
}
|
|
||||||
catch (e) {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
});
|
|
@ -1,152 +0,0 @@
|
|||||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2011 Mozilla Foundation and contributors
|
|
||||||
* Licensed under the New BSD license. See LICENSE or:
|
|
||||||
* http://opensource.org/licenses/BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define a module along with a payload.
|
|
||||||
* @param {string} moduleName Name for the payload
|
|
||||||
* @param {ignored} deps Ignored. For compatibility with CommonJS AMD Spec
|
|
||||||
* @param {function} payload Function with (require, exports, module) params
|
|
||||||
*/
|
|
||||||
function define(moduleName, deps, payload) {
|
|
||||||
if (typeof moduleName != "string") {
|
|
||||||
throw new TypeError('Expected string, got: ' + moduleName);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (arguments.length == 2) {
|
|
||||||
payload = deps;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (moduleName in define.modules) {
|
|
||||||
throw new Error("Module already defined: " + moduleName);
|
|
||||||
}
|
|
||||||
define.modules[moduleName] = payload;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The global store of un-instantiated modules
|
|
||||||
*/
|
|
||||||
define.modules = {};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* We invoke require() in the context of a Domain so we can have multiple
|
|
||||||
* sets of modules running separate from each other.
|
|
||||||
* This contrasts with JSMs which are singletons, Domains allows us to
|
|
||||||
* optionally load a CommonJS module twice with separate data each time.
|
|
||||||
* Perhaps you want 2 command lines with a different set of commands in each,
|
|
||||||
* for example.
|
|
||||||
*/
|
|
||||||
function Domain() {
|
|
||||||
this.modules = {};
|
|
||||||
this._currentModule = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
(function () {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Lookup module names and resolve them by calling the definition function if
|
|
||||||
* needed.
|
|
||||||
* There are 2 ways to call this, either with an array of dependencies and a
|
|
||||||
* callback to call when the dependencies are found (which can happen
|
|
||||||
* asynchronously in an in-page context) or with a single string an no callback
|
|
||||||
* where the dependency is resolved synchronously and returned.
|
|
||||||
* The API is designed to be compatible with the CommonJS AMD spec and
|
|
||||||
* RequireJS.
|
|
||||||
* @param {string[]|string} deps A name, or names for the payload
|
|
||||||
* @param {function|undefined} callback Function to call when the dependencies
|
|
||||||
* are resolved
|
|
||||||
* @return {undefined|object} The module required or undefined for
|
|
||||||
* array/callback method
|
|
||||||
*/
|
|
||||||
Domain.prototype.require = function(deps, callback) {
|
|
||||||
if (Array.isArray(deps)) {
|
|
||||||
var params = deps.map(function(dep) {
|
|
||||||
return this.lookup(dep);
|
|
||||||
}, this);
|
|
||||||
if (callback) {
|
|
||||||
callback.apply(null, params);
|
|
||||||
}
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return this.lookup(deps);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
function normalize(path) {
|
|
||||||
var bits = path.split('/');
|
|
||||||
var i = 1;
|
|
||||||
while (i < bits.length) {
|
|
||||||
if (bits[i] === '..') {
|
|
||||||
bits.splice(i-1, 1);
|
|
||||||
} else if (bits[i] === '.') {
|
|
||||||
bits.splice(i, 1);
|
|
||||||
} else {
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return bits.join('/');
|
|
||||||
}
|
|
||||||
|
|
||||||
function join(a, b) {
|
|
||||||
a = a.trim();
|
|
||||||
b = b.trim();
|
|
||||||
if (/^\//.test(b)) {
|
|
||||||
return b;
|
|
||||||
} else {
|
|
||||||
return a.replace(/\/*$/, '/') + b;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function dirname(path) {
|
|
||||||
var bits = path.split('/');
|
|
||||||
bits.pop();
|
|
||||||
return bits.join('/');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Lookup module names and resolve them by calling the definition function if
|
|
||||||
* needed.
|
|
||||||
* @param {string} moduleName A name for the payload to lookup
|
|
||||||
* @return {object} The module specified by aModuleName or null if not found.
|
|
||||||
*/
|
|
||||||
Domain.prototype.lookup = function(moduleName) {
|
|
||||||
if (/^\./.test(moduleName)) {
|
|
||||||
moduleName = normalize(join(dirname(this._currentModule), moduleName));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (moduleName in this.modules) {
|
|
||||||
var module = this.modules[moduleName];
|
|
||||||
return module;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(moduleName in define.modules)) {
|
|
||||||
throw new Error("Module not defined: " + moduleName);
|
|
||||||
}
|
|
||||||
|
|
||||||
var module = define.modules[moduleName];
|
|
||||||
|
|
||||||
if (typeof module == "function") {
|
|
||||||
var exports = {};
|
|
||||||
var previousModule = this._currentModule;
|
|
||||||
this._currentModule = moduleName;
|
|
||||||
module(this.require.bind(this), exports, { id: moduleName, uri: "" });
|
|
||||||
this._currentModule = previousModule;
|
|
||||||
module = exports;
|
|
||||||
}
|
|
||||||
|
|
||||||
// cache the resulting module object for next time
|
|
||||||
this.modules[moduleName] = module;
|
|
||||||
|
|
||||||
return module;
|
|
||||||
};
|
|
||||||
|
|
||||||
}());
|
|
||||||
|
|
||||||
define.Domain = Domain;
|
|
||||||
define.globalDomain = new Domain();
|
|
||||||
var require = define.globalDomain.require.bind(define.globalDomain);
|
|
@ -1,21 +0,0 @@
|
|||||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2011 Mozilla Foundation and contributors
|
|
||||||
* Licensed under the New BSD license. See LICENSE or:
|
|
||||||
* http://opensource.org/licenses/BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* WARNING!
|
|
||||||
*
|
|
||||||
* Do not edit this file directly, it is built from the sources at
|
|
||||||
* https://github.com/mozilla/source-map/
|
|
||||||
*/
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
this.EXPORTED_SYMBOLS = [ "SourceMapConsumer", "SourceMapGenerator", "SourceNode" ];
|
|
||||||
|
|
||||||
Components.utils.import("resource://gre/modules/devtools/Console.jsm");
|
|
||||||
Components.utils.import('resource://gre/modules/devtools/Require.jsm');
|
|
@ -1,18 +0,0 @@
|
|||||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2011 Mozilla Foundation and contributors
|
|
||||||
* Licensed under the New BSD license. See LICENSE or:
|
|
||||||
* http://opensource.org/licenses/BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* WARNING!
|
|
||||||
*
|
|
||||||
* Do not edit this file directly, it is built from the sources at
|
|
||||||
* https://github.com/mozilla/source-map/
|
|
||||||
*/
|
|
||||||
|
|
||||||
Components.utils.import('resource://gre/modules/devtools/Require.jsm');
|
|
||||||
Components.utils.import('resource://gre/modules/devtools/SourceMap.jsm');
|
|
||||||
|
|
||||||
this.EXPORTED_SYMBOLS = [ "define", "runSourceMapTests" ];
|
|
@ -1,8 +0,0 @@
|
|||||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
this.sourceMap = {
|
|
||||||
SourceMapConsumer: require('source-map/source-map-consumer').SourceMapConsumer,
|
|
||||||
SourceMapGenerator: require('source-map/source-map-generator').SourceMapGenerator,
|
|
||||||
SourceNode: require('source-map/source-node').SourceNode
|
|
||||||
};
|
|
@ -1,6 +0,0 @@
|
|||||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
this.SourceMapConsumer = require('source-map/source-map-consumer').SourceMapConsumer;
|
|
||||||
this.SourceMapGenerator = require('source-map/source-map-generator').SourceMapGenerator;
|
|
||||||
this.SourceNode = require('source-map/source-node').SourceNode;
|
|
@ -1,21 +0,0 @@
|
|||||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2011 Mozilla Foundation and contributors
|
|
||||||
* Licensed under the New BSD license. See LICENSE or:
|
|
||||||
* http://opensource.org/licenses/BSD-3-Clause
|
|
||||||
*/
|
|
||||||
function runSourceMapTests(modName, do_throw) {
|
|
||||||
let mod = require(modName);
|
|
||||||
let assert = require('test/source-map/assert');
|
|
||||||
let util = require('test/source-map/util');
|
|
||||||
|
|
||||||
assert.init(do_throw);
|
|
||||||
|
|
||||||
for (let k in mod) {
|
|
||||||
if (/^test/.test(k)) {
|
|
||||||
mod[k](assert, util);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
this.runSourceMapTests = runSourceMapTests;
|
|
@ -1,8 +0,0 @@
|
|||||||
/*
|
|
||||||
* WARNING!
|
|
||||||
*
|
|
||||||
* Do not edit this file directly, it is built from the sources at
|
|
||||||
* https://github.com/mozilla/source-map/
|
|
||||||
*/
|
|
||||||
|
|
||||||
Components.utils.import('resource://test/Utils.jsm');
|
|
@ -1,3 +0,0 @@
|
|||||||
function run_test() {
|
|
||||||
runSourceMapTests('{THIS_MODULE}', do_throw);
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2009-2011 Mozilla Foundation and contributors
|
|
||||||
* Licensed under the New BSD license. See LICENSE.txt or:
|
|
||||||
* http://opensource.org/licenses/BSD-3-Clause
|
|
||||||
*/
|
|
||||||
exports.SourceMapGenerator = require('./source-map/source-map-generator').SourceMapGenerator;
|
|
||||||
exports.SourceMapConsumer = require('./source-map/source-map-consumer').SourceMapConsumer;
|
|
||||||
exports.SourceNode = require('./source-map/source-node').SourceNode;
|
|
@ -1,107 +0,0 @@
|
|||||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2011 Mozilla Foundation and contributors
|
|
||||||
* Licensed under the New BSD license. See LICENSE or:
|
|
||||||
* http://opensource.org/licenses/BSD-3-Clause
|
|
||||||
*/
|
|
||||||
if (typeof define !== 'function') {
|
|
||||||
var define = require('amdefine')(module, require);
|
|
||||||
}
|
|
||||||
define(function (require, exports, module) {
|
|
||||||
|
|
||||||
var util = require('./util');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A data structure which is a combination of an array and a set. Adding a new
|
|
||||||
* member is O(1), testing for membership is O(1), and finding the index of an
|
|
||||||
* element is O(1). Removing elements from the set is not supported. Only
|
|
||||||
* strings are supported for membership.
|
|
||||||
*/
|
|
||||||
function ArraySet() {
|
|
||||||
this._array = [];
|
|
||||||
this._set = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Static method for creating ArraySet instances from an existing array.
|
|
||||||
*/
|
|
||||||
ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
|
|
||||||
var set = new ArraySet();
|
|
||||||
for (var i = 0, len = aArray.length; i < len; i++) {
|
|
||||||
set.add(aArray[i], aAllowDuplicates);
|
|
||||||
}
|
|
||||||
return set;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return how many unique items are in this ArraySet. If duplicates have been
|
|
||||||
* added, than those do not count towards the size.
|
|
||||||
*
|
|
||||||
* @returns Number
|
|
||||||
*/
|
|
||||||
ArraySet.prototype.size = function ArraySet_size() {
|
|
||||||
return Object.getOwnPropertyNames(this._set).length;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the given string to this set.
|
|
||||||
*
|
|
||||||
* @param String aStr
|
|
||||||
*/
|
|
||||||
ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
|
|
||||||
var isDuplicate = this.has(aStr);
|
|
||||||
var idx = this._array.length;
|
|
||||||
if (!isDuplicate || aAllowDuplicates) {
|
|
||||||
this._array.push(aStr);
|
|
||||||
}
|
|
||||||
if (!isDuplicate) {
|
|
||||||
this._set[util.toSetString(aStr)] = idx;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is the given string a member of this set?
|
|
||||||
*
|
|
||||||
* @param String aStr
|
|
||||||
*/
|
|
||||||
ArraySet.prototype.has = function ArraySet_has(aStr) {
|
|
||||||
return Object.prototype.hasOwnProperty.call(this._set,
|
|
||||||
util.toSetString(aStr));
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* What is the index of the given string in the array?
|
|
||||||
*
|
|
||||||
* @param String aStr
|
|
||||||
*/
|
|
||||||
ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
|
|
||||||
if (this.has(aStr)) {
|
|
||||||
return this._set[util.toSetString(aStr)];
|
|
||||||
}
|
|
||||||
throw new Error('"' + aStr + '" is not in the set.');
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* What is the element at the given index?
|
|
||||||
*
|
|
||||||
* @param Number aIdx
|
|
||||||
*/
|
|
||||||
ArraySet.prototype.at = function ArraySet_at(aIdx) {
|
|
||||||
if (aIdx >= 0 && aIdx < this._array.length) {
|
|
||||||
return this._array[aIdx];
|
|
||||||
}
|
|
||||||
throw new Error('No element indexed by ' + aIdx);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the array representation of this set (which has the proper indices
|
|
||||||
* indicated by indexOf). Note that this is a copy of the internal array used
|
|
||||||
* for storing the members so that no one can mess with internal state.
|
|
||||||
*/
|
|
||||||
ArraySet.prototype.toArray = function ArraySet_toArray() {
|
|
||||||
return this._array.slice();
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.ArraySet = ArraySet;
|
|
||||||
|
|
||||||
});
|
|
@ -1,146 +0,0 @@
|
|||||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2011 Mozilla Foundation and contributors
|
|
||||||
* Licensed under the New BSD license. See LICENSE or:
|
|
||||||
* http://opensource.org/licenses/BSD-3-Clause
|
|
||||||
*
|
|
||||||
* Based on the Base 64 VLQ implementation in Closure Compiler:
|
|
||||||
* https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
|
|
||||||
*
|
|
||||||
* Copyright 2011 The Closure Compiler Authors. All rights reserved.
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are
|
|
||||||
* met:
|
|
||||||
*
|
|
||||||
* * Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* * Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials provided
|
|
||||||
* with the distribution.
|
|
||||||
* * Neither the name of Google Inc. nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived
|
|
||||||
* from this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
if (typeof define !== 'function') {
|
|
||||||
var define = require('amdefine')(module, require);
|
|
||||||
}
|
|
||||||
define(function (require, exports, module) {
|
|
||||||
|
|
||||||
var base64 = require('./base64');
|
|
||||||
|
|
||||||
// A single base 64 digit can contain 6 bits of data. For the base 64 variable
|
|
||||||
// length quantities we use in the source map spec, the first bit is the sign,
|
|
||||||
// the next four bits are the actual value, and the 6th bit is the
|
|
||||||
// continuation bit. The continuation bit tells us whether there are more
|
|
||||||
// digits in this value following this digit.
|
|
||||||
//
|
|
||||||
// Continuation
|
|
||||||
// | Sign
|
|
||||||
// | |
|
|
||||||
// V V
|
|
||||||
// 101011
|
|
||||||
|
|
||||||
var VLQ_BASE_SHIFT = 5;
|
|
||||||
|
|
||||||
// binary: 100000
|
|
||||||
var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
|
|
||||||
|
|
||||||
// binary: 011111
|
|
||||||
var VLQ_BASE_MASK = VLQ_BASE - 1;
|
|
||||||
|
|
||||||
// binary: 100000
|
|
||||||
var VLQ_CONTINUATION_BIT = VLQ_BASE;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts from a two-complement value to a value where the sign bit is
|
|
||||||
* placed in the least significant bit. For example, as decimals:
|
|
||||||
* 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
|
|
||||||
* 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
|
|
||||||
*/
|
|
||||||
function toVLQSigned(aValue) {
|
|
||||||
return aValue < 0
|
|
||||||
? ((-aValue) << 1) + 1
|
|
||||||
: (aValue << 1) + 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts to a two-complement value from a value where the sign bit is
|
|
||||||
* placed in the least significant bit. For example, as decimals:
|
|
||||||
* 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
|
|
||||||
* 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
|
|
||||||
*/
|
|
||||||
function fromVLQSigned(aValue) {
|
|
||||||
var isNegative = (aValue & 1) === 1;
|
|
||||||
var shifted = aValue >> 1;
|
|
||||||
return isNegative
|
|
||||||
? -shifted
|
|
||||||
: shifted;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the base 64 VLQ encoded value.
|
|
||||||
*/
|
|
||||||
exports.encode = function base64VLQ_encode(aValue) {
|
|
||||||
var encoded = "";
|
|
||||||
var digit;
|
|
||||||
|
|
||||||
var vlq = toVLQSigned(aValue);
|
|
||||||
|
|
||||||
do {
|
|
||||||
digit = vlq & VLQ_BASE_MASK;
|
|
||||||
vlq >>>= VLQ_BASE_SHIFT;
|
|
||||||
if (vlq > 0) {
|
|
||||||
// There are still more digits in this value, so we must make sure the
|
|
||||||
// continuation bit is marked.
|
|
||||||
digit |= VLQ_CONTINUATION_BIT;
|
|
||||||
}
|
|
||||||
encoded += base64.encode(digit);
|
|
||||||
} while (vlq > 0);
|
|
||||||
|
|
||||||
return encoded;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decodes the next base 64 VLQ value from the given string and returns the
|
|
||||||
* value and the rest of the string via the out parameter.
|
|
||||||
*/
|
|
||||||
exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
|
|
||||||
var strLen = aStr.length;
|
|
||||||
var result = 0;
|
|
||||||
var shift = 0;
|
|
||||||
var continuation, digit;
|
|
||||||
|
|
||||||
do {
|
|
||||||
if (aIndex >= strLen) {
|
|
||||||
throw new Error("Expected more digits in base 64 VLQ value.");
|
|
||||||
}
|
|
||||||
|
|
||||||
digit = base64.decode(aStr.charCodeAt(aIndex++));
|
|
||||||
if (digit === -1) {
|
|
||||||
throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
continuation = !!(digit & VLQ_CONTINUATION_BIT);
|
|
||||||
digit &= VLQ_BASE_MASK;
|
|
||||||
result = result + (digit << shift);
|
|
||||||
shift += VLQ_BASE_SHIFT;
|
|
||||||
} while (continuation);
|
|
||||||
|
|
||||||
aOutParam.value = fromVLQSigned(result);
|
|
||||||
aOutParam.rest = aIndex;
|
|
||||||
};
|
|
||||||
|
|
||||||
});
|
|
@ -1,73 +0,0 @@
|
|||||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2011 Mozilla Foundation and contributors
|
|
||||||
* Licensed under the New BSD license. See LICENSE or:
|
|
||||||
* http://opensource.org/licenses/BSD-3-Clause
|
|
||||||
*/
|
|
||||||
if (typeof define !== 'function') {
|
|
||||||
var define = require('amdefine')(module, require);
|
|
||||||
}
|
|
||||||
define(function (require, exports, module) {
|
|
||||||
|
|
||||||
var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encode an integer in the range of 0 to 63 to a single base 64 digit.
|
|
||||||
*/
|
|
||||||
exports.encode = function (number) {
|
|
||||||
if (0 <= number && number < intToCharMap.length) {
|
|
||||||
return intToCharMap[number];
|
|
||||||
}
|
|
||||||
throw new TypeError("Must be between 0 and 63: " + aNumber);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decode a single base 64 character code digit to an integer. Returns -1 on
|
|
||||||
* failure.
|
|
||||||
*/
|
|
||||||
exports.decode = function (charCode) {
|
|
||||||
var bigA = 65; // 'A'
|
|
||||||
var bigZ = 90; // 'Z'
|
|
||||||
|
|
||||||
var littleA = 97; // 'a'
|
|
||||||
var littleZ = 122; // 'z'
|
|
||||||
|
|
||||||
var zero = 48; // '0'
|
|
||||||
var nine = 57; // '9'
|
|
||||||
|
|
||||||
var plus = 43; // '+'
|
|
||||||
var slash = 47; // '/'
|
|
||||||
|
|
||||||
var littleOffset = 26;
|
|
||||||
var numberOffset = 52;
|
|
||||||
|
|
||||||
// 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
|
||||||
if (bigA <= charCode && charCode <= bigZ) {
|
|
||||||
return (charCode - bigA);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 26 - 51: abcdefghijklmnopqrstuvwxyz
|
|
||||||
if (littleA <= charCode && charCode <= littleZ) {
|
|
||||||
return (charCode - littleA + littleOffset);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 52 - 61: 0123456789
|
|
||||||
if (zero <= charCode && charCode <= nine) {
|
|
||||||
return (charCode - zero + numberOffset);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 62: +
|
|
||||||
if (charCode == plus) {
|
|
||||||
return 62;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 63: /
|
|
||||||
if (charCode == slash) {
|
|
||||||
return 63;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Invalid base64 digit.
|
|
||||||
return -1;
|
|
||||||
};
|
|
||||||
|
|
||||||
});
|
|
@ -1,117 +0,0 @@
|
|||||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2011 Mozilla Foundation and contributors
|
|
||||||
* Licensed under the New BSD license. See LICENSE or:
|
|
||||||
* http://opensource.org/licenses/BSD-3-Clause
|
|
||||||
*/
|
|
||||||
if (typeof define !== 'function') {
|
|
||||||
var define = require('amdefine')(module, require);
|
|
||||||
}
|
|
||||||
define(function (require, exports, module) {
|
|
||||||
|
|
||||||
exports.GREATEST_LOWER_BOUND = 1;
|
|
||||||
exports.LEAST_UPPER_BOUND = 2;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Recursive implementation of binary search.
|
|
||||||
*
|
|
||||||
* @param aLow Indices here and lower do not contain the needle.
|
|
||||||
* @param aHigh Indices here and higher do not contain the needle.
|
|
||||||
* @param aNeedle The element being searched for.
|
|
||||||
* @param aHaystack The non-empty array being searched.
|
|
||||||
* @param aCompare Function which takes two elements and returns -1, 0, or 1.
|
|
||||||
* @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
|
|
||||||
* 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
|
|
||||||
* closest element that is smaller than or greater than the one we are
|
|
||||||
* searching for, respectively, if the exact element cannot be found.
|
|
||||||
*/
|
|
||||||
function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
|
|
||||||
// This function terminates when one of the following is true:
|
|
||||||
//
|
|
||||||
// 1. We find the exact element we are looking for.
|
|
||||||
//
|
|
||||||
// 2. We did not find the exact element, but we can return the index of
|
|
||||||
// the next-closest element.
|
|
||||||
//
|
|
||||||
// 3. We did not find the exact element, and there is no next-closest
|
|
||||||
// element than the one we are searching for, so we return -1.
|
|
||||||
var mid = Math.floor((aHigh - aLow) / 2) + aLow;
|
|
||||||
var cmp = aCompare(aNeedle, aHaystack[mid], true);
|
|
||||||
if (cmp === 0) {
|
|
||||||
// Found the element we are looking for.
|
|
||||||
return mid;
|
|
||||||
}
|
|
||||||
else if (cmp > 0) {
|
|
||||||
// Our needle is greater than aHaystack[mid].
|
|
||||||
if (aHigh - mid > 1) {
|
|
||||||
// The element is in the upper half.
|
|
||||||
return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
|
|
||||||
}
|
|
||||||
|
|
||||||
// The exact needle element was not found in this haystack. Determine if
|
|
||||||
// we are in termination case (3) or (2) and return the appropriate thing.
|
|
||||||
if (aBias == exports.LEAST_UPPER_BOUND) {
|
|
||||||
return aHigh < aHaystack.length ? aHigh : -1;
|
|
||||||
} else {
|
|
||||||
return mid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Our needle is less than aHaystack[mid].
|
|
||||||
if (mid - aLow > 1) {
|
|
||||||
// The element is in the lower half.
|
|
||||||
return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
|
|
||||||
}
|
|
||||||
|
|
||||||
// we are in termination case (3) or (2) and return the appropriate thing.
|
|
||||||
if (aBias == exports.LEAST_UPPER_BOUND) {
|
|
||||||
return mid;
|
|
||||||
} else {
|
|
||||||
return aLow < 0 ? -1 : aLow;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is an implementation of binary search which will always try and return
|
|
||||||
* the index of the closest element if there is no exact hit. This is because
|
|
||||||
* mappings between original and generated line/col pairs are single points,
|
|
||||||
* and there is an implicit region between each of them, so a miss just means
|
|
||||||
* that you aren't on the very start of a region.
|
|
||||||
*
|
|
||||||
* @param aNeedle The element you are looking for.
|
|
||||||
* @param aHaystack The array that is being searched.
|
|
||||||
* @param aCompare A function which takes the needle and an element in the
|
|
||||||
* array and returns -1, 0, or 1 depending on whether the needle is less
|
|
||||||
* than, equal to, or greater than the element, respectively.
|
|
||||||
* @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
|
|
||||||
* 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
|
|
||||||
* closest element that is smaller than or greater than the one we are
|
|
||||||
* searching for, respectively, if the exact element cannot be found.
|
|
||||||
* Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
|
|
||||||
*/
|
|
||||||
exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
|
|
||||||
if (aHaystack.length === 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
|
|
||||||
aCompare, aBias || exports.GREATEST_LOWER_BOUND);
|
|
||||||
if (index < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// We have found either the exact element, or the next-closest element than
|
|
||||||
// the one we are searching for. However, there may be more than one such
|
|
||||||
// element. Make sure we always return the smallest of these.
|
|
||||||
while (index - 1 >= 0) {
|
|
||||||
if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
--index;
|
|
||||||
}
|
|
||||||
|
|
||||||
return index;
|
|
||||||
};
|
|
||||||
|
|
||||||
});
|
|
@ -1,86 +0,0 @@
|
|||||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2014 Mozilla Foundation and contributors
|
|
||||||
* Licensed under the New BSD license. See LICENSE or:
|
|
||||||
* http://opensource.org/licenses/BSD-3-Clause
|
|
||||||
*/
|
|
||||||
if (typeof define !== 'function') {
|
|
||||||
var define = require('amdefine')(module, require);
|
|
||||||
}
|
|
||||||
define(function (require, exports, module) {
|
|
||||||
|
|
||||||
var util = require('./util');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine whether mappingB is after mappingA with respect to generated
|
|
||||||
* position.
|
|
||||||
*/
|
|
||||||
function generatedPositionAfter(mappingA, mappingB) {
|
|
||||||
// Optimized for most common case
|
|
||||||
var lineA = mappingA.generatedLine;
|
|
||||||
var lineB = mappingB.generatedLine;
|
|
||||||
var columnA = mappingA.generatedColumn;
|
|
||||||
var columnB = mappingB.generatedColumn;
|
|
||||||
return lineB > lineA || lineB == lineA && columnB >= columnA ||
|
|
||||||
util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A data structure to provide a sorted view of accumulated mappings in a
|
|
||||||
* performance conscious manner. It trades a neglibable overhead in general
|
|
||||||
* case for a large speedup in case of mappings being added in order.
|
|
||||||
*/
|
|
||||||
function MappingList() {
|
|
||||||
this._array = [];
|
|
||||||
this._sorted = true;
|
|
||||||
// Serves as infimum
|
|
||||||
this._last = {generatedLine: -1, generatedColumn: 0};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Iterate through internal items. This method takes the same arguments that
|
|
||||||
* `Array.prototype.forEach` takes.
|
|
||||||
*
|
|
||||||
* NOTE: The order of the mappings is NOT guaranteed.
|
|
||||||
*/
|
|
||||||
MappingList.prototype.unsortedForEach =
|
|
||||||
function MappingList_forEach(aCallback, aThisArg) {
|
|
||||||
this._array.forEach(aCallback, aThisArg);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the given source mapping.
|
|
||||||
*
|
|
||||||
* @param Object aMapping
|
|
||||||
*/
|
|
||||||
MappingList.prototype.add = function MappingList_add(aMapping) {
|
|
||||||
var mapping;
|
|
||||||
if (generatedPositionAfter(this._last, aMapping)) {
|
|
||||||
this._last = aMapping;
|
|
||||||
this._array.push(aMapping);
|
|
||||||
} else {
|
|
||||||
this._sorted = false;
|
|
||||||
this._array.push(aMapping);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the flat, sorted array of mappings. The mappings are sorted by
|
|
||||||
* generated position.
|
|
||||||
*
|
|
||||||
* WARNING: This method returns internal data without copying, for
|
|
||||||
* performance. The return value must NOT be mutated, and should be treated as
|
|
||||||
* an immutable borrow. If you want to take ownership, you must make your own
|
|
||||||
* copy.
|
|
||||||
*/
|
|
||||||
MappingList.prototype.toArray = function MappingList_toArray() {
|
|
||||||
if (!this._sorted) {
|
|
||||||
this._array.sort(util.compareByGeneratedPositionsInflated);
|
|
||||||
this._sorted = true;
|
|
||||||
}
|
|
||||||
return this._array;
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.MappingList = MappingList;
|
|
||||||
|
|
||||||
});
|
|
@ -1,120 +0,0 @@
|
|||||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2011 Mozilla Foundation and contributors
|
|
||||||
* Licensed under the New BSD license. See LICENSE or:
|
|
||||||
* http://opensource.org/licenses/BSD-3-Clause
|
|
||||||
*/
|
|
||||||
if (typeof define !== 'function') {
|
|
||||||
var define = require('amdefine')(module, require);
|
|
||||||
}
|
|
||||||
define(function (require, exports, module) {
|
|
||||||
|
|
||||||
// It turns out that some (most?) JavaScript engines don't self-host
|
|
||||||
// `Array.prototype.sort`. This makes sense because C++ will likely remain
|
|
||||||
// faster than JS when doing raw CPU-intensive sorting. However, when using a
|
|
||||||
// custom comparator function, calling back and forth between the VM's C++ and
|
|
||||||
// JIT'd JS is rather slow *and* loses JIT type information, resulting in
|
|
||||||
// worse generated code for the comparator function than would be optimal. In
|
|
||||||
// fact, when sorting with a comparator, these costs outweigh the benefits of
|
|
||||||
// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
|
|
||||||
// a ~3500ms mean speed-up in `bench/bench.html`.
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Swap the elements indexed by `x` and `y` in the array `ary`.
|
|
||||||
*
|
|
||||||
* @param {Array} ary
|
|
||||||
* The array.
|
|
||||||
* @param {Number} x
|
|
||||||
* The index of the first item.
|
|
||||||
* @param {Number} y
|
|
||||||
* The index of the second item.
|
|
||||||
*/
|
|
||||||
function swap(ary, x, y) {
|
|
||||||
var temp = ary[x];
|
|
||||||
ary[x] = ary[y];
|
|
||||||
ary[y] = temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a random integer within the range `low .. high` inclusive.
|
|
||||||
*
|
|
||||||
* @param {Number} low
|
|
||||||
* The lower bound on the range.
|
|
||||||
* @param {Number} high
|
|
||||||
* The upper bound on the range.
|
|
||||||
*/
|
|
||||||
function randomIntInRange(low, high) {
|
|
||||||
return Math.round(low + (Math.random() * (high - low)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Quick Sort algorithm.
|
|
||||||
*
|
|
||||||
* @param {Array} ary
|
|
||||||
* An array to sort.
|
|
||||||
* @param {function} comparator
|
|
||||||
* Function to use to compare two items.
|
|
||||||
* @param {Number} p
|
|
||||||
* Start index of the array
|
|
||||||
* @param {Number} r
|
|
||||||
* End index of the array
|
|
||||||
*/
|
|
||||||
function doQuickSort(ary, comparator, p, r) {
|
|
||||||
// If our lower bound is less than our upper bound, we (1) partition the
|
|
||||||
// array into two pieces and (2) recurse on each half. If it is not, this is
|
|
||||||
// the empty array and our base case.
|
|
||||||
|
|
||||||
if (p < r) {
|
|
||||||
// (1) Partitioning.
|
|
||||||
//
|
|
||||||
// The partitioning chooses a pivot between `p` and `r` and moves all
|
|
||||||
// elements that are less than or equal to the pivot to the before it, and
|
|
||||||
// all the elements that are greater than it after it. The effect is that
|
|
||||||
// once partition is done, the pivot is in the exact place it will be when
|
|
||||||
// the array is put in sorted order, and it will not need to be moved
|
|
||||||
// again. This runs in O(n) time.
|
|
||||||
|
|
||||||
// Always choose a random pivot so that an input array which is reverse
|
|
||||||
// sorted does not cause O(n^2) running time.
|
|
||||||
var pivotIndex = randomIntInRange(p, r);
|
|
||||||
var i = p - 1;
|
|
||||||
|
|
||||||
swap(ary, pivotIndex, r);
|
|
||||||
var pivot = ary[r];
|
|
||||||
|
|
||||||
// Immediately after `j` is incremented in this loop, the following hold
|
|
||||||
// true:
|
|
||||||
//
|
|
||||||
// * Every element in `ary[p .. i]` is less than or equal to the pivot.
|
|
||||||
//
|
|
||||||
// * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
|
|
||||||
for (var j = p; j < r; j++) {
|
|
||||||
if (comparator(ary[j], pivot) <= 0) {
|
|
||||||
i += 1;
|
|
||||||
swap(ary, i, j);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
swap(ary, i + 1, j);
|
|
||||||
var q = i + 1;
|
|
||||||
|
|
||||||
// (2) Recurse on each half.
|
|
||||||
|
|
||||||
doQuickSort(ary, comparator, p, q - 1);
|
|
||||||
doQuickSort(ary, comparator, q + 1, r);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sort the given array in-place with the given comparator function.
|
|
||||||
*
|
|
||||||
* @param {Array} ary
|
|
||||||
* An array to sort.
|
|
||||||
* @param {function} comparator
|
|
||||||
* Function to use to compare two items.
|
|
||||||
*/
|
|
||||||
exports.quickSort = function (ary, comparator) {
|
|
||||||
doQuickSort(ary, comparator, 0, ary.length - 1);
|
|
||||||
};
|
|
||||||
|
|
||||||
});
|
|
File diff suppressed because it is too large
Load Diff
@ -1,399 +0,0 @@
|
|||||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2011 Mozilla Foundation and contributors
|
|
||||||
* Licensed under the New BSD license. See LICENSE or:
|
|
||||||
* http://opensource.org/licenses/BSD-3-Clause
|
|
||||||
*/
|
|
||||||
if (typeof define !== 'function') {
|
|
||||||
var define = require('amdefine')(module, require);
|
|
||||||
}
|
|
||||||
define(function (require, exports, module) {
|
|
||||||
|
|
||||||
var base64VLQ = require('./base64-vlq');
|
|
||||||
var util = require('./util');
|
|
||||||
var ArraySet = require('./array-set').ArraySet;
|
|
||||||
var MappingList = require('./mapping-list').MappingList;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An instance of the SourceMapGenerator represents a source map which is
|
|
||||||
* being built incrementally. You may pass an object with the following
|
|
||||||
* properties:
|
|
||||||
*
|
|
||||||
* - file: The filename of the generated source.
|
|
||||||
* - sourceRoot: A root for all relative URLs in this source map.
|
|
||||||
*/
|
|
||||||
function SourceMapGenerator(aArgs) {
|
|
||||||
if (!aArgs) {
|
|
||||||
aArgs = {};
|
|
||||||
}
|
|
||||||
this._file = util.getArg(aArgs, 'file', null);
|
|
||||||
this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
|
|
||||||
this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
|
|
||||||
this._sources = new ArraySet();
|
|
||||||
this._names = new ArraySet();
|
|
||||||
this._mappings = new MappingList();
|
|
||||||
this._sourcesContents = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
SourceMapGenerator.prototype._version = 3;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new SourceMapGenerator based on a SourceMapConsumer
|
|
||||||
*
|
|
||||||
* @param aSourceMapConsumer The SourceMap.
|
|
||||||
*/
|
|
||||||
SourceMapGenerator.fromSourceMap =
|
|
||||||
function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
|
|
||||||
var sourceRoot = aSourceMapConsumer.sourceRoot;
|
|
||||||
var generator = new SourceMapGenerator({
|
|
||||||
file: aSourceMapConsumer.file,
|
|
||||||
sourceRoot: sourceRoot
|
|
||||||
});
|
|
||||||
aSourceMapConsumer.eachMapping(function (mapping) {
|
|
||||||
var newMapping = {
|
|
||||||
generated: {
|
|
||||||
line: mapping.generatedLine,
|
|
||||||
column: mapping.generatedColumn
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if (mapping.source != null) {
|
|
||||||
newMapping.source = mapping.source;
|
|
||||||
if (sourceRoot != null) {
|
|
||||||
newMapping.source = util.relative(sourceRoot, newMapping.source);
|
|
||||||
}
|
|
||||||
|
|
||||||
newMapping.original = {
|
|
||||||
line: mapping.originalLine,
|
|
||||||
column: mapping.originalColumn
|
|
||||||
};
|
|
||||||
|
|
||||||
if (mapping.name != null) {
|
|
||||||
newMapping.name = mapping.name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
generator.addMapping(newMapping);
|
|
||||||
});
|
|
||||||
aSourceMapConsumer.sources.forEach(function (sourceFile) {
|
|
||||||
var content = aSourceMapConsumer.sourceContentFor(sourceFile);
|
|
||||||
if (content != null) {
|
|
||||||
generator.setSourceContent(sourceFile, content);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return generator;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a single mapping from original source line and column to the generated
|
|
||||||
* source's line and column for this source map being created. The mapping
|
|
||||||
* object should have the following properties:
|
|
||||||
*
|
|
||||||
* - generated: An object with the generated line and column positions.
|
|
||||||
* - original: An object with the original line and column positions.
|
|
||||||
* - source: The original source file (relative to the sourceRoot).
|
|
||||||
* - name: An optional original token name for this mapping.
|
|
||||||
*/
|
|
||||||
SourceMapGenerator.prototype.addMapping =
|
|
||||||
function SourceMapGenerator_addMapping(aArgs) {
|
|
||||||
var generated = util.getArg(aArgs, 'generated');
|
|
||||||
var original = util.getArg(aArgs, 'original', null);
|
|
||||||
var source = util.getArg(aArgs, 'source', null);
|
|
||||||
var name = util.getArg(aArgs, 'name', null);
|
|
||||||
|
|
||||||
if (!this._skipValidation) {
|
|
||||||
this._validateMapping(generated, original, source, name);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (source != null && !this._sources.has(source)) {
|
|
||||||
this._sources.add(source);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (name != null && !this._names.has(name)) {
|
|
||||||
this._names.add(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
this._mappings.add({
|
|
||||||
generatedLine: generated.line,
|
|
||||||
generatedColumn: generated.column,
|
|
||||||
originalLine: original != null && original.line,
|
|
||||||
originalColumn: original != null && original.column,
|
|
||||||
source: source,
|
|
||||||
name: name
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the source content for a source file.
|
|
||||||
*/
|
|
||||||
SourceMapGenerator.prototype.setSourceContent =
|
|
||||||
function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
|
|
||||||
var source = aSourceFile;
|
|
||||||
if (this._sourceRoot != null) {
|
|
||||||
source = util.relative(this._sourceRoot, source);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (aSourceContent != null) {
|
|
||||||
// Add the source content to the _sourcesContents map.
|
|
||||||
// Create a new _sourcesContents map if the property is null.
|
|
||||||
if (!this._sourcesContents) {
|
|
||||||
this._sourcesContents = {};
|
|
||||||
}
|
|
||||||
this._sourcesContents[util.toSetString(source)] = aSourceContent;
|
|
||||||
} else if (this._sourcesContents) {
|
|
||||||
// Remove the source file from the _sourcesContents map.
|
|
||||||
// If the _sourcesContents map is empty, set the property to null.
|
|
||||||
delete this._sourcesContents[util.toSetString(source)];
|
|
||||||
if (Object.keys(this._sourcesContents).length === 0) {
|
|
||||||
this._sourcesContents = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Applies the mappings of a sub-source-map for a specific source file to the
|
|
||||||
* source map being generated. Each mapping to the supplied source file is
|
|
||||||
* rewritten using the supplied source map. Note: The resolution for the
|
|
||||||
* resulting mappings is the minimium of this map and the supplied map.
|
|
||||||
*
|
|
||||||
* @param aSourceMapConsumer The source map to be applied.
|
|
||||||
* @param aSourceFile Optional. The filename of the source file.
|
|
||||||
* If omitted, SourceMapConsumer's file property will be used.
|
|
||||||
* @param aSourceMapPath Optional. The dirname of the path to the source map
|
|
||||||
* to be applied. If relative, it is relative to the SourceMapConsumer.
|
|
||||||
* This parameter is needed when the two source maps aren't in the same
|
|
||||||
* directory, and the source map to be applied contains relative source
|
|
||||||
* paths. If so, those relative source paths need to be rewritten
|
|
||||||
* relative to the SourceMapGenerator.
|
|
||||||
*/
|
|
||||||
SourceMapGenerator.prototype.applySourceMap =
|
|
||||||
function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
|
|
||||||
var sourceFile = aSourceFile;
|
|
||||||
// If aSourceFile is omitted, we will use the file property of the SourceMap
|
|
||||||
if (aSourceFile == null) {
|
|
||||||
if (aSourceMapConsumer.file == null) {
|
|
||||||
throw new Error(
|
|
||||||
'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
|
|
||||||
'or the source map\'s "file" property. Both were omitted.'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
sourceFile = aSourceMapConsumer.file;
|
|
||||||
}
|
|
||||||
var sourceRoot = this._sourceRoot;
|
|
||||||
// Make "sourceFile" relative if an absolute Url is passed.
|
|
||||||
if (sourceRoot != null) {
|
|
||||||
sourceFile = util.relative(sourceRoot, sourceFile);
|
|
||||||
}
|
|
||||||
// Applying the SourceMap can add and remove items from the sources and
|
|
||||||
// the names array.
|
|
||||||
var newSources = new ArraySet();
|
|
||||||
var newNames = new ArraySet();
|
|
||||||
|
|
||||||
// Find mappings for the "sourceFile"
|
|
||||||
this._mappings.unsortedForEach(function (mapping) {
|
|
||||||
if (mapping.source === sourceFile && mapping.originalLine != null) {
|
|
||||||
// Check if it can be mapped by the source map, then update the mapping.
|
|
||||||
var original = aSourceMapConsumer.originalPositionFor({
|
|
||||||
line: mapping.originalLine,
|
|
||||||
column: mapping.originalColumn
|
|
||||||
});
|
|
||||||
if (original.source != null) {
|
|
||||||
// Copy mapping
|
|
||||||
mapping.source = original.source;
|
|
||||||
if (aSourceMapPath != null) {
|
|
||||||
mapping.source = util.join(aSourceMapPath, mapping.source)
|
|
||||||
}
|
|
||||||
if (sourceRoot != null) {
|
|
||||||
mapping.source = util.relative(sourceRoot, mapping.source);
|
|
||||||
}
|
|
||||||
mapping.originalLine = original.line;
|
|
||||||
mapping.originalColumn = original.column;
|
|
||||||
if (original.name != null) {
|
|
||||||
mapping.name = original.name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var source = mapping.source;
|
|
||||||
if (source != null && !newSources.has(source)) {
|
|
||||||
newSources.add(source);
|
|
||||||
}
|
|
||||||
|
|
||||||
var name = mapping.name;
|
|
||||||
if (name != null && !newNames.has(name)) {
|
|
||||||
newNames.add(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
}, this);
|
|
||||||
this._sources = newSources;
|
|
||||||
this._names = newNames;
|
|
||||||
|
|
||||||
// Copy sourcesContents of applied map.
|
|
||||||
aSourceMapConsumer.sources.forEach(function (sourceFile) {
|
|
||||||
var content = aSourceMapConsumer.sourceContentFor(sourceFile);
|
|
||||||
if (content != null) {
|
|
||||||
if (aSourceMapPath != null) {
|
|
||||||
sourceFile = util.join(aSourceMapPath, sourceFile);
|
|
||||||
}
|
|
||||||
if (sourceRoot != null) {
|
|
||||||
sourceFile = util.relative(sourceRoot, sourceFile);
|
|
||||||
}
|
|
||||||
this.setSourceContent(sourceFile, content);
|
|
||||||
}
|
|
||||||
}, this);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A mapping can have one of the three levels of data:
|
|
||||||
*
|
|
||||||
* 1. Just the generated position.
|
|
||||||
* 2. The Generated position, original position, and original source.
|
|
||||||
* 3. Generated and original position, original source, as well as a name
|
|
||||||
* token.
|
|
||||||
*
|
|
||||||
* To maintain consistency, we validate that any new mapping being added falls
|
|
||||||
* in to one of these categories.
|
|
||||||
*/
|
|
||||||
SourceMapGenerator.prototype._validateMapping =
|
|
||||||
function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
|
|
||||||
aName) {
|
|
||||||
if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
|
|
||||||
&& aGenerated.line > 0 && aGenerated.column >= 0
|
|
||||||
&& !aOriginal && !aSource && !aName) {
|
|
||||||
// Case 1.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
|
|
||||||
&& aOriginal && 'line' in aOriginal && 'column' in aOriginal
|
|
||||||
&& aGenerated.line > 0 && aGenerated.column >= 0
|
|
||||||
&& aOriginal.line > 0 && aOriginal.column >= 0
|
|
||||||
&& aSource) {
|
|
||||||
// Cases 2 and 3.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw new Error('Invalid mapping: ' + JSON.stringify({
|
|
||||||
generated: aGenerated,
|
|
||||||
source: aSource,
|
|
||||||
original: aOriginal,
|
|
||||||
name: aName
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Serialize the accumulated mappings in to the stream of base 64 VLQs
|
|
||||||
* specified by the source map format.
|
|
||||||
*/
|
|
||||||
SourceMapGenerator.prototype._serializeMappings =
|
|
||||||
function SourceMapGenerator_serializeMappings() {
|
|
||||||
var previousGeneratedColumn = 0;
|
|
||||||
var previousGeneratedLine = 1;
|
|
||||||
var previousOriginalColumn = 0;
|
|
||||||
var previousOriginalLine = 0;
|
|
||||||
var previousName = 0;
|
|
||||||
var previousSource = 0;
|
|
||||||
var result = '';
|
|
||||||
var mapping;
|
|
||||||
|
|
||||||
var mappings = this._mappings.toArray();
|
|
||||||
for (var i = 0, len = mappings.length; i < len; i++) {
|
|
||||||
mapping = mappings[i];
|
|
||||||
|
|
||||||
if (mapping.generatedLine !== previousGeneratedLine) {
|
|
||||||
previousGeneratedColumn = 0;
|
|
||||||
while (mapping.generatedLine !== previousGeneratedLine) {
|
|
||||||
result += ';';
|
|
||||||
previousGeneratedLine++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (i > 0) {
|
|
||||||
if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
result += ',';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
result += base64VLQ.encode(mapping.generatedColumn
|
|
||||||
- previousGeneratedColumn);
|
|
||||||
previousGeneratedColumn = mapping.generatedColumn;
|
|
||||||
|
|
||||||
if (mapping.source != null) {
|
|
||||||
result += base64VLQ.encode(this._sources.indexOf(mapping.source)
|
|
||||||
- previousSource);
|
|
||||||
previousSource = this._sources.indexOf(mapping.source);
|
|
||||||
|
|
||||||
// lines are stored 0-based in SourceMap spec version 3
|
|
||||||
result += base64VLQ.encode(mapping.originalLine - 1
|
|
||||||
- previousOriginalLine);
|
|
||||||
previousOriginalLine = mapping.originalLine - 1;
|
|
||||||
|
|
||||||
result += base64VLQ.encode(mapping.originalColumn
|
|
||||||
- previousOriginalColumn);
|
|
||||||
previousOriginalColumn = mapping.originalColumn;
|
|
||||||
|
|
||||||
if (mapping.name != null) {
|
|
||||||
result += base64VLQ.encode(this._names.indexOf(mapping.name)
|
|
||||||
- previousName);
|
|
||||||
previousName = this._names.indexOf(mapping.name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
SourceMapGenerator.prototype._generateSourcesContent =
|
|
||||||
function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
|
|
||||||
return aSources.map(function (source) {
|
|
||||||
if (!this._sourcesContents) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (aSourceRoot != null) {
|
|
||||||
source = util.relative(aSourceRoot, source);
|
|
||||||
}
|
|
||||||
var key = util.toSetString(source);
|
|
||||||
return Object.prototype.hasOwnProperty.call(this._sourcesContents,
|
|
||||||
key)
|
|
||||||
? this._sourcesContents[key]
|
|
||||||
: null;
|
|
||||||
}, this);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Externalize the source map.
|
|
||||||
*/
|
|
||||||
SourceMapGenerator.prototype.toJSON =
|
|
||||||
function SourceMapGenerator_toJSON() {
|
|
||||||
var map = {
|
|
||||||
version: this._version,
|
|
||||||
sources: this._sources.toArray(),
|
|
||||||
names: this._names.toArray(),
|
|
||||||
mappings: this._serializeMappings()
|
|
||||||
};
|
|
||||||
if (this._file != null) {
|
|
||||||
map.file = this._file;
|
|
||||||
}
|
|
||||||
if (this._sourceRoot != null) {
|
|
||||||
map.sourceRoot = this._sourceRoot;
|
|
||||||
}
|
|
||||||
if (this._sourcesContents) {
|
|
||||||
map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
|
|
||||||
}
|
|
||||||
|
|
||||||
return map;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Render the source map being generated to a string.
|
|
||||||
*/
|
|
||||||
SourceMapGenerator.prototype.toString =
|
|
||||||
function SourceMapGenerator_toString() {
|
|
||||||
return JSON.stringify(this.toJSON());
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.SourceMapGenerator = SourceMapGenerator;
|
|
||||||
|
|
||||||
});
|
|
@ -1,414 +0,0 @@
|
|||||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2011 Mozilla Foundation and contributors
|
|
||||||
* Licensed under the New BSD license. See LICENSE or:
|
|
||||||
* http://opensource.org/licenses/BSD-3-Clause
|
|
||||||
*/
|
|
||||||
if (typeof define !== 'function') {
|
|
||||||
var define = require('amdefine')(module, require);
|
|
||||||
}
|
|
||||||
define(function (require, exports, module) {
|
|
||||||
|
|
||||||
var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;
|
|
||||||
var util = require('./util');
|
|
||||||
|
|
||||||
// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
|
|
||||||
// operating systems these days (capturing the result).
|
|
||||||
var REGEX_NEWLINE = /(\r?\n)/;
|
|
||||||
|
|
||||||
// Newline character code for charCodeAt() comparisons
|
|
||||||
var NEWLINE_CODE = 10;
|
|
||||||
|
|
||||||
// Private symbol for identifying `SourceNode`s when multiple versions of
|
|
||||||
// the source-map library are loaded. This MUST NOT CHANGE across
|
|
||||||
// versions!
|
|
||||||
var isSourceNode = "$$$isSourceNode$$$";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SourceNodes provide a way to abstract over interpolating/concatenating
|
|
||||||
* snippets of generated JavaScript source code while maintaining the line and
|
|
||||||
* column information associated with the original source code.
|
|
||||||
*
|
|
||||||
* @param aLine The original line number.
|
|
||||||
* @param aColumn The original column number.
|
|
||||||
* @param aSource The original source's filename.
|
|
||||||
* @param aChunks Optional. An array of strings which are snippets of
|
|
||||||
* generated JS, or other SourceNodes.
|
|
||||||
* @param aName The original identifier.
|
|
||||||
*/
|
|
||||||
function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
|
|
||||||
this.children = [];
|
|
||||||
this.sourceContents = {};
|
|
||||||
this.line = aLine == null ? null : aLine;
|
|
||||||
this.column = aColumn == null ? null : aColumn;
|
|
||||||
this.source = aSource == null ? null : aSource;
|
|
||||||
this.name = aName == null ? null : aName;
|
|
||||||
this[isSourceNode] = true;
|
|
||||||
if (aChunks != null) this.add(aChunks);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a SourceNode from generated code and a SourceMapConsumer.
|
|
||||||
*
|
|
||||||
* @param aGeneratedCode The generated code
|
|
||||||
* @param aSourceMapConsumer The SourceMap for the generated code
|
|
||||||
* @param aRelativePath Optional. The path that relative sources in the
|
|
||||||
* SourceMapConsumer should be relative to.
|
|
||||||
*/
|
|
||||||
SourceNode.fromStringWithSourceMap =
|
|
||||||
function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
|
|
||||||
// The SourceNode we want to fill with the generated code
|
|
||||||
// and the SourceMap
|
|
||||||
var node = new SourceNode();
|
|
||||||
|
|
||||||
// All even indices of this array are one line of the generated code,
|
|
||||||
// while all odd indices are the newlines between two adjacent lines
|
|
||||||
// (since `REGEX_NEWLINE` captures its match).
|
|
||||||
// Processed fragments are removed from this array, by calling `shiftNextLine`.
|
|
||||||
var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
|
|
||||||
var shiftNextLine = function() {
|
|
||||||
var lineContents = remainingLines.shift();
|
|
||||||
// The last line of a file might not have a newline.
|
|
||||||
var newLine = remainingLines.shift() || "";
|
|
||||||
return lineContents + newLine;
|
|
||||||
};
|
|
||||||
|
|
||||||
// We need to remember the position of "remainingLines"
|
|
||||||
var lastGeneratedLine = 1, lastGeneratedColumn = 0;
|
|
||||||
|
|
||||||
// The generate SourceNodes we need a code range.
|
|
||||||
// To extract it current and last mapping is used.
|
|
||||||
// Here we store the last mapping.
|
|
||||||
var lastMapping = null;
|
|
||||||
|
|
||||||
aSourceMapConsumer.eachMapping(function (mapping) {
|
|
||||||
if (lastMapping !== null) {
|
|
||||||
// We add the code from "lastMapping" to "mapping":
|
|
||||||
// First check if there is a new line in between.
|
|
||||||
if (lastGeneratedLine < mapping.generatedLine) {
|
|
||||||
var code = "";
|
|
||||||
// Associate first line with "lastMapping"
|
|
||||||
addMappingWithCode(lastMapping, shiftNextLine());
|
|
||||||
lastGeneratedLine++;
|
|
||||||
lastGeneratedColumn = 0;
|
|
||||||
// The remaining code is added without mapping
|
|
||||||
} else {
|
|
||||||
// There is no new line in between.
|
|
||||||
// Associate the code between "lastGeneratedColumn" and
|
|
||||||
// "mapping.generatedColumn" with "lastMapping"
|
|
||||||
var nextLine = remainingLines[0];
|
|
||||||
var code = nextLine.substr(0, mapping.generatedColumn -
|
|
||||||
lastGeneratedColumn);
|
|
||||||
remainingLines[0] = nextLine.substr(mapping.generatedColumn -
|
|
||||||
lastGeneratedColumn);
|
|
||||||
lastGeneratedColumn = mapping.generatedColumn;
|
|
||||||
addMappingWithCode(lastMapping, code);
|
|
||||||
// No more remaining code, continue
|
|
||||||
lastMapping = mapping;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// We add the generated code until the first mapping
|
|
||||||
// to the SourceNode without any mapping.
|
|
||||||
// Each line is added as separate string.
|
|
||||||
while (lastGeneratedLine < mapping.generatedLine) {
|
|
||||||
node.add(shiftNextLine());
|
|
||||||
lastGeneratedLine++;
|
|
||||||
}
|
|
||||||
if (lastGeneratedColumn < mapping.generatedColumn) {
|
|
||||||
var nextLine = remainingLines[0];
|
|
||||||
node.add(nextLine.substr(0, mapping.generatedColumn));
|
|
||||||
remainingLines[0] = nextLine.substr(mapping.generatedColumn);
|
|
||||||
lastGeneratedColumn = mapping.generatedColumn;
|
|
||||||
}
|
|
||||||
lastMapping = mapping;
|
|
||||||
}, this);
|
|
||||||
// We have processed all mappings.
|
|
||||||
if (remainingLines.length > 0) {
|
|
||||||
if (lastMapping) {
|
|
||||||
// Associate the remaining code in the current line with "lastMapping"
|
|
||||||
addMappingWithCode(lastMapping, shiftNextLine());
|
|
||||||
}
|
|
||||||
// and add the remaining lines without any mapping
|
|
||||||
node.add(remainingLines.join(""));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copy sourcesContent into SourceNode
|
|
||||||
aSourceMapConsumer.sources.forEach(function (sourceFile) {
|
|
||||||
var content = aSourceMapConsumer.sourceContentFor(sourceFile);
|
|
||||||
if (content != null) {
|
|
||||||
if (aRelativePath != null) {
|
|
||||||
sourceFile = util.join(aRelativePath, sourceFile);
|
|
||||||
}
|
|
||||||
node.setSourceContent(sourceFile, content);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return node;
|
|
||||||
|
|
||||||
function addMappingWithCode(mapping, code) {
|
|
||||||
if (mapping === null || mapping.source === undefined) {
|
|
||||||
node.add(code);
|
|
||||||
} else {
|
|
||||||
var source = aRelativePath
|
|
||||||
? util.join(aRelativePath, mapping.source)
|
|
||||||
: mapping.source;
|
|
||||||
node.add(new SourceNode(mapping.originalLine,
|
|
||||||
mapping.originalColumn,
|
|
||||||
source,
|
|
||||||
code,
|
|
||||||
mapping.name));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a chunk of generated JS to this source node.
|
|
||||||
*
|
|
||||||
* @param aChunk A string snippet of generated JS code, another instance of
|
|
||||||
* SourceNode, or an array where each member is one of those things.
|
|
||||||
*/
|
|
||||||
SourceNode.prototype.add = function SourceNode_add(aChunk) {
|
|
||||||
if (Array.isArray(aChunk)) {
|
|
||||||
aChunk.forEach(function (chunk) {
|
|
||||||
this.add(chunk);
|
|
||||||
}, this);
|
|
||||||
}
|
|
||||||
else if (aChunk[isSourceNode] || typeof aChunk === "string") {
|
|
||||||
if (aChunk) {
|
|
||||||
this.children.push(aChunk);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw new TypeError(
|
|
||||||
"Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a chunk of generated JS to the beginning of this source node.
|
|
||||||
*
|
|
||||||
* @param aChunk A string snippet of generated JS code, another instance of
|
|
||||||
* SourceNode, or an array where each member is one of those things.
|
|
||||||
*/
|
|
||||||
SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
|
|
||||||
if (Array.isArray(aChunk)) {
|
|
||||||
for (var i = aChunk.length-1; i >= 0; i--) {
|
|
||||||
this.prepend(aChunk[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (aChunk[isSourceNode] || typeof aChunk === "string") {
|
|
||||||
this.children.unshift(aChunk);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw new TypeError(
|
|
||||||
"Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Walk over the tree of JS snippets in this node and its children. The
|
|
||||||
* walking function is called once for each snippet of JS and is passed that
|
|
||||||
* snippet and the its original associated source's line/column location.
|
|
||||||
*
|
|
||||||
* @param aFn The traversal function.
|
|
||||||
*/
|
|
||||||
SourceNode.prototype.walk = function SourceNode_walk(aFn) {
|
|
||||||
var chunk;
|
|
||||||
for (var i = 0, len = this.children.length; i < len; i++) {
|
|
||||||
chunk = this.children[i];
|
|
||||||
if (chunk[isSourceNode]) {
|
|
||||||
chunk.walk(aFn);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (chunk !== '') {
|
|
||||||
aFn(chunk, { source: this.source,
|
|
||||||
line: this.line,
|
|
||||||
column: this.column,
|
|
||||||
name: this.name });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
|
|
||||||
* each of `this.children`.
|
|
||||||
*
|
|
||||||
* @param aSep The separator.
|
|
||||||
*/
|
|
||||||
SourceNode.prototype.join = function SourceNode_join(aSep) {
|
|
||||||
var newChildren;
|
|
||||||
var i;
|
|
||||||
var len = this.children.length;
|
|
||||||
if (len > 0) {
|
|
||||||
newChildren = [];
|
|
||||||
for (i = 0; i < len-1; i++) {
|
|
||||||
newChildren.push(this.children[i]);
|
|
||||||
newChildren.push(aSep);
|
|
||||||
}
|
|
||||||
newChildren.push(this.children[i]);
|
|
||||||
this.children = newChildren;
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Call String.prototype.replace on the very right-most source snippet. Useful
|
|
||||||
* for trimming whitespace from the end of a source node, etc.
|
|
||||||
*
|
|
||||||
* @param aPattern The pattern to replace.
|
|
||||||
* @param aReplacement The thing to replace the pattern with.
|
|
||||||
*/
|
|
||||||
SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
|
|
||||||
var lastChild = this.children[this.children.length - 1];
|
|
||||||
if (lastChild[isSourceNode]) {
|
|
||||||
lastChild.replaceRight(aPattern, aReplacement);
|
|
||||||
}
|
|
||||||
else if (typeof lastChild === 'string') {
|
|
||||||
this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
this.children.push(''.replace(aPattern, aReplacement));
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the source content for a source file. This will be added to the SourceMapGenerator
|
|
||||||
* in the sourcesContent field.
|
|
||||||
*
|
|
||||||
* @param aSourceFile The filename of the source file
|
|
||||||
* @param aSourceContent The content of the source file
|
|
||||||
*/
|
|
||||||
SourceNode.prototype.setSourceContent =
|
|
||||||
function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
|
|
||||||
this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Walk over the tree of SourceNodes. The walking function is called for each
|
|
||||||
* source file content and is passed the filename and source content.
|
|
||||||
*
|
|
||||||
* @param aFn The traversal function.
|
|
||||||
*/
|
|
||||||
SourceNode.prototype.walkSourceContents =
|
|
||||||
function SourceNode_walkSourceContents(aFn) {
|
|
||||||
for (var i = 0, len = this.children.length; i < len; i++) {
|
|
||||||
if (this.children[i][isSourceNode]) {
|
|
||||||
this.children[i].walkSourceContents(aFn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var sources = Object.keys(this.sourceContents);
|
|
||||||
for (var i = 0, len = sources.length; i < len; i++) {
|
|
||||||
aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the string representation of this source node. Walks over the tree
|
|
||||||
* and concatenates all the various snippets together to one string.
|
|
||||||
*/
|
|
||||||
SourceNode.prototype.toString = function SourceNode_toString() {
|
|
||||||
var str = "";
|
|
||||||
this.walk(function (chunk) {
|
|
||||||
str += chunk;
|
|
||||||
});
|
|
||||||
return str;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the string representation of this source node along with a source
|
|
||||||
* map.
|
|
||||||
*/
|
|
||||||
SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
|
|
||||||
var generated = {
|
|
||||||
code: "",
|
|
||||||
line: 1,
|
|
||||||
column: 0
|
|
||||||
};
|
|
||||||
var map = new SourceMapGenerator(aArgs);
|
|
||||||
var sourceMappingActive = false;
|
|
||||||
var lastOriginalSource = null;
|
|
||||||
var lastOriginalLine = null;
|
|
||||||
var lastOriginalColumn = null;
|
|
||||||
var lastOriginalName = null;
|
|
||||||
this.walk(function (chunk, original) {
|
|
||||||
generated.code += chunk;
|
|
||||||
if (original.source !== null
|
|
||||||
&& original.line !== null
|
|
||||||
&& original.column !== null) {
|
|
||||||
if(lastOriginalSource !== original.source
|
|
||||||
|| lastOriginalLine !== original.line
|
|
||||||
|| lastOriginalColumn !== original.column
|
|
||||||
|| lastOriginalName !== original.name) {
|
|
||||||
map.addMapping({
|
|
||||||
source: original.source,
|
|
||||||
original: {
|
|
||||||
line: original.line,
|
|
||||||
column: original.column
|
|
||||||
},
|
|
||||||
generated: {
|
|
||||||
line: generated.line,
|
|
||||||
column: generated.column
|
|
||||||
},
|
|
||||||
name: original.name
|
|
||||||
});
|
|
||||||
}
|
|
||||||
lastOriginalSource = original.source;
|
|
||||||
lastOriginalLine = original.line;
|
|
||||||
lastOriginalColumn = original.column;
|
|
||||||
lastOriginalName = original.name;
|
|
||||||
sourceMappingActive = true;
|
|
||||||
} else if (sourceMappingActive) {
|
|
||||||
map.addMapping({
|
|
||||||
generated: {
|
|
||||||
line: generated.line,
|
|
||||||
column: generated.column
|
|
||||||
}
|
|
||||||
});
|
|
||||||
lastOriginalSource = null;
|
|
||||||
sourceMappingActive = false;
|
|
||||||
}
|
|
||||||
for (var idx = 0, length = chunk.length; idx < length; idx++) {
|
|
||||||
if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
|
|
||||||
generated.line++;
|
|
||||||
generated.column = 0;
|
|
||||||
// Mappings end at eol
|
|
||||||
if (idx + 1 === length) {
|
|
||||||
lastOriginalSource = null;
|
|
||||||
sourceMappingActive = false;
|
|
||||||
} else if (sourceMappingActive) {
|
|
||||||
map.addMapping({
|
|
||||||
source: original.source,
|
|
||||||
original: {
|
|
||||||
line: original.line,
|
|
||||||
column: original.column
|
|
||||||
},
|
|
||||||
generated: {
|
|
||||||
line: generated.line,
|
|
||||||
column: generated.column
|
|
||||||
},
|
|
||||||
name: original.name
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
generated.column++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this.walkSourceContents(function (sourceFile, sourceContent) {
|
|
||||||
map.setSourceContent(sourceFile, sourceContent);
|
|
||||||
});
|
|
||||||
|
|
||||||
return { code: generated.code, map: map };
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.SourceNode = SourceNode;
|
|
||||||
|
|
||||||
});
|
|
@ -1,370 +0,0 @@
|
|||||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
||||||
/*
|
|
||||||
* Copyright 2011 Mozilla Foundation and contributors
|
|
||||||
* Licensed under the New BSD license. See LICENSE or:
|
|
||||||
* http://opensource.org/licenses/BSD-3-Clause
|
|
||||||
*/
|
|
||||||
if (typeof define !== 'function') {
|
|
||||||
var define = require('amdefine')(module, require);
|
|
||||||
}
|
|
||||||
define(function (require, exports, module) {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is a helper function for getting values from parameter/options
|
|
||||||
* objects.
|
|
||||||
*
|
|
||||||
* @param args The object we are extracting values from
|
|
||||||
* @param name The name of the property we are getting.
|
|
||||||
* @param defaultValue An optional value to return if the property is missing
|
|
||||||
* from the object. If this is not specified and the property is missing, an
|
|
||||||
* error will be thrown.
|
|
||||||
*/
|
|
||||||
function getArg(aArgs, aName, aDefaultValue) {
|
|
||||||
if (aName in aArgs) {
|
|
||||||
return aArgs[aName];
|
|
||||||
} else if (arguments.length === 3) {
|
|
||||||
return aDefaultValue;
|
|
||||||
} else {
|
|
||||||
throw new Error('"' + aName + '" is a required argument.');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.getArg = getArg;
|
|
||||||
|
|
||||||
var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/;
|
|
||||||
var dataUrlRegexp = /^data:.+\,.+$/;
|
|
||||||
|
|
||||||
function urlParse(aUrl) {
|
|
||||||
var match = aUrl.match(urlRegexp);
|
|
||||||
if (!match) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
scheme: match[1],
|
|
||||||
auth: match[2],
|
|
||||||
host: match[3],
|
|
||||||
port: match[4],
|
|
||||||
path: match[5]
|
|
||||||
};
|
|
||||||
}
|
|
||||||
exports.urlParse = urlParse;
|
|
||||||
|
|
||||||
function urlGenerate(aParsedUrl) {
|
|
||||||
var url = '';
|
|
||||||
if (aParsedUrl.scheme) {
|
|
||||||
url += aParsedUrl.scheme + ':';
|
|
||||||
}
|
|
||||||
url += '//';
|
|
||||||
if (aParsedUrl.auth) {
|
|
||||||
url += aParsedUrl.auth + '@';
|
|
||||||
}
|
|
||||||
if (aParsedUrl.host) {
|
|
||||||
url += aParsedUrl.host;
|
|
||||||
}
|
|
||||||
if (aParsedUrl.port) {
|
|
||||||
url += ":" + aParsedUrl.port
|
|
||||||
}
|
|
||||||
if (aParsedUrl.path) {
|
|
||||||
url += aParsedUrl.path;
|
|
||||||
}
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
exports.urlGenerate = urlGenerate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Normalizes a path, or the path portion of a URL:
|
|
||||||
*
|
|
||||||
* - Replaces consequtive slashes with one slash.
|
|
||||||
* - Removes unnecessary '.' parts.
|
|
||||||
* - Removes unnecessary '<dir>/..' parts.
|
|
||||||
*
|
|
||||||
* Based on code in the Node.js 'path' core module.
|
|
||||||
*
|
|
||||||
* @param aPath The path or url to normalize.
|
|
||||||
*/
|
|
||||||
function normalize(aPath) {
|
|
||||||
var path = aPath;
|
|
||||||
var url = urlParse(aPath);
|
|
||||||
if (url) {
|
|
||||||
if (!url.path) {
|
|
||||||
return aPath;
|
|
||||||
}
|
|
||||||
path = url.path;
|
|
||||||
}
|
|
||||||
var isAbsolute = (path.charAt(0) === '/');
|
|
||||||
|
|
||||||
var parts = path.split(/\/+/);
|
|
||||||
for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
|
|
||||||
part = parts[i];
|
|
||||||
if (part === '.') {
|
|
||||||
parts.splice(i, 1);
|
|
||||||
} else if (part === '..') {
|
|
||||||
up++;
|
|
||||||
} else if (up > 0) {
|
|
||||||
if (part === '') {
|
|
||||||
// The first part is blank if the path is absolute. Trying to go
|
|
||||||
// above the root is a no-op. Therefore we can remove all '..' parts
|
|
||||||
// directly after the root.
|
|
||||||
parts.splice(i + 1, up);
|
|
||||||
up = 0;
|
|
||||||
} else {
|
|
||||||
parts.splice(i, 2);
|
|
||||||
up--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
path = parts.join('/');
|
|
||||||
|
|
||||||
if (path === '') {
|
|
||||||
path = isAbsolute ? '/' : '.';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (url) {
|
|
||||||
url.path = path;
|
|
||||||
return urlGenerate(url);
|
|
||||||
}
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
exports.normalize = normalize;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Joins two paths/URLs.
|
|
||||||
*
|
|
||||||
* @param aRoot The root path or URL.
|
|
||||||
* @param aPath The path or URL to be joined with the root.
|
|
||||||
*
|
|
||||||
* - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
|
|
||||||
* scheme-relative URL: Then the scheme of aRoot, if any, is prepended
|
|
||||||
* first.
|
|
||||||
* - Otherwise aPath is a path. If aRoot is a URL, then its path portion
|
|
||||||
* is updated with the result and aRoot is returned. Otherwise the result
|
|
||||||
* is returned.
|
|
||||||
* - If aPath is absolute, the result is aPath.
|
|
||||||
* - Otherwise the two paths are joined with a slash.
|
|
||||||
* - Joining for example 'http://' and 'www.example.com' is also supported.
|
|
||||||
*/
|
|
||||||
function join(aRoot, aPath) {
|
|
||||||
if (aRoot === "") {
|
|
||||||
aRoot = ".";
|
|
||||||
}
|
|
||||||
if (aPath === "") {
|
|
||||||
aPath = ".";
|
|
||||||
}
|
|
||||||
var aPathUrl = urlParse(aPath);
|
|
||||||
var aRootUrl = urlParse(aRoot);
|
|
||||||
if (aRootUrl) {
|
|
||||||
aRoot = aRootUrl.path || '/';
|
|
||||||
}
|
|
||||||
|
|
||||||
// `join(foo, '//www.example.org')`
|
|
||||||
if (aPathUrl && !aPathUrl.scheme) {
|
|
||||||
if (aRootUrl) {
|
|
||||||
aPathUrl.scheme = aRootUrl.scheme;
|
|
||||||
}
|
|
||||||
return urlGenerate(aPathUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (aPathUrl || aPath.match(dataUrlRegexp)) {
|
|
||||||
return aPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
// `join('http://', 'www.example.com')`
|
|
||||||
if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
|
|
||||||
aRootUrl.host = aPath;
|
|
||||||
return urlGenerate(aRootUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
var joined = aPath.charAt(0) === '/'
|
|
||||||
? aPath
|
|
||||||
: normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
|
|
||||||
|
|
||||||
if (aRootUrl) {
|
|
||||||
aRootUrl.path = joined;
|
|
||||||
return urlGenerate(aRootUrl);
|
|
||||||
}
|
|
||||||
return joined;
|
|
||||||
}
|
|
||||||
exports.join = join;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make a path relative to a URL or another path.
|
|
||||||
*
|
|
||||||
* @param aRoot The root path or URL.
|
|
||||||
* @param aPath The path or URL to be made relative to aRoot.
|
|
||||||
*/
|
|
||||||
function relative(aRoot, aPath) {
|
|
||||||
if (aRoot === "") {
|
|
||||||
aRoot = ".";
|
|
||||||
}
|
|
||||||
|
|
||||||
aRoot = aRoot.replace(/\/$/, '');
|
|
||||||
|
|
||||||
// It is possible for the path to be above the root. In this case, simply
|
|
||||||
// checking whether the root is a prefix of the path won't work. Instead, we
|
|
||||||
// need to remove components from the root one by one, until either we find
|
|
||||||
// a prefix that fits, or we run out of components to remove.
|
|
||||||
var level = 0;
|
|
||||||
while (aPath.indexOf(aRoot + '/') !== 0) {
|
|
||||||
var index = aRoot.lastIndexOf("/");
|
|
||||||
if (index < 0) {
|
|
||||||
return aPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the only part of the root that is left is the scheme (i.e. http://,
|
|
||||||
// file:///, etc.), one or more slashes (/), or simply nothing at all, we
|
|
||||||
// have exhausted all components, so the path is not relative to the root.
|
|
||||||
aRoot = aRoot.slice(0, index);
|
|
||||||
if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
|
|
||||||
return aPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
++level;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure we add a "../" for each component we removed from the root.
|
|
||||||
return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
|
|
||||||
}
|
|
||||||
exports.relative = relative;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Because behavior goes wacky when you set `__proto__` on objects, we
|
|
||||||
* have to prefix all the strings in our set with an arbitrary character.
|
|
||||||
*
|
|
||||||
* See https://github.com/mozilla/source-map/pull/31 and
|
|
||||||
* https://github.com/mozilla/source-map/issues/30
|
|
||||||
*
|
|
||||||
* @param String aStr
|
|
||||||
*/
|
|
||||||
function toSetString(aStr) {
|
|
||||||
return '$' + aStr;
|
|
||||||
}
|
|
||||||
exports.toSetString = toSetString;
|
|
||||||
|
|
||||||
function fromSetString(aStr) {
|
|
||||||
return aStr.substr(1);
|
|
||||||
}
|
|
||||||
exports.fromSetString = fromSetString;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Comparator between two mappings where the original positions are compared.
|
|
||||||
*
|
|
||||||
* Optionally pass in `true` as `onlyCompareGenerated` to consider two
|
|
||||||
* mappings with the same original source/line/column, but different generated
|
|
||||||
* line and column the same. Useful when searching for a mapping with a
|
|
||||||
* stubbed out mapping.
|
|
||||||
*/
|
|
||||||
function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
|
|
||||||
var cmp = mappingA.source - mappingB.source;
|
|
||||||
if (cmp !== 0) {
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmp = mappingA.originalLine - mappingB.originalLine;
|
|
||||||
if (cmp !== 0) {
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmp = mappingA.originalColumn - mappingB.originalColumn;
|
|
||||||
if (cmp !== 0 || onlyCompareOriginal) {
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmp = mappingA.generatedColumn - mappingB.generatedColumn;
|
|
||||||
if (cmp !== 0) {
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmp = mappingA.generatedLine - mappingB.generatedLine;
|
|
||||||
if (cmp !== 0) {
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
return mappingA.name - mappingB.name;
|
|
||||||
};
|
|
||||||
exports.compareByOriginalPositions = compareByOriginalPositions;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Comparator between two mappings with deflated source and name indices where
|
|
||||||
* the generated positions are compared.
|
|
||||||
*
|
|
||||||
* Optionally pass in `true` as `onlyCompareGenerated` to consider two
|
|
||||||
* mappings with the same generated line and column, but different
|
|
||||||
* source/name/original line and column the same. Useful when searching for a
|
|
||||||
* mapping with a stubbed out mapping.
|
|
||||||
*/
|
|
||||||
function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
|
|
||||||
var cmp = mappingA.generatedLine - mappingB.generatedLine;
|
|
||||||
if (cmp !== 0) {
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmp = mappingA.generatedColumn - mappingB.generatedColumn;
|
|
||||||
if (cmp !== 0 || onlyCompareGenerated) {
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmp = mappingA.source - mappingB.source;
|
|
||||||
if (cmp !== 0) {
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmp = mappingA.originalLine - mappingB.originalLine;
|
|
||||||
if (cmp !== 0) {
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmp = mappingA.originalColumn - mappingB.originalColumn;
|
|
||||||
if (cmp !== 0) {
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
return mappingA.name - mappingB.name;
|
|
||||||
};
|
|
||||||
exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
|
|
||||||
|
|
||||||
function strcmp(aStr1, aStr2) {
|
|
||||||
if (aStr1 === aStr2) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (aStr1 > aStr2) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Comparator between two mappings with inflated source and name strings where
|
|
||||||
* the generated positions are compared.
|
|
||||||
*/
|
|
||||||
function compareByGeneratedPositionsInflated(mappingA, mappingB) {
|
|
||||||
var cmp = mappingA.generatedLine - mappingB.generatedLine;
|
|
||||||
if (cmp !== 0) {
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmp = mappingA.generatedColumn - mappingB.generatedColumn;
|
|
||||||
if (cmp !== 0) {
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmp = strcmp(mappingA.source, mappingB.source);
|
|
||||||
if (cmp !== 0) {
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmp = mappingA.originalLine - mappingB.originalLine;
|
|
||||||
if (cmp !== 0) {
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmp = mappingA.originalColumn - mappingB.originalColumn;
|
|
||||||
if (cmp !== 0) {
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
return strcmp(mappingA.name, mappingB.name);
|
|
||||||
};
|
|
||||||
exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
|
|
||||||
|
|
||||||
});
|
|
@ -1,58 +0,0 @@
|
|||||||
amdefine is released under two licenses: new BSD, and MIT. You may pick the
|
|
||||||
license that best suits your development needs. The text of both licenses are
|
|
||||||
provided below.
|
|
||||||
|
|
||||||
|
|
||||||
The "New" BSD License:
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
Copyright (c) 2011-2015, The Dojo Foundation
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice, this
|
|
||||||
list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer in the documentation
|
|
||||||
and/or other materials provided with the distribution.
|
|
||||||
* Neither the name of the Dojo Foundation nor the names of its contributors
|
|
||||||
may be used to endorse or promote products derived from this software
|
|
||||||
without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
|
||||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MIT License
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Copyright (c) 2011-2015, The Dojo Foundation
|
|
||||||
|
|
||||||
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.
|
|
@ -1,171 +0,0 @@
|
|||||||
# amdefine
|
|
||||||
|
|
||||||
A module that can be used to implement AMD's define() in Node. This allows you
|
|
||||||
to code to the AMD API and have the module work in node programs without
|
|
||||||
requiring those other programs to use AMD.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
**1)** Update your package.json to indicate amdefine as a dependency:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
"dependencies": {
|
|
||||||
"amdefine": ">=0.1.0"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Then run `npm install` to get amdefine into your project.
|
|
||||||
|
|
||||||
**2)** At the top of each module that uses define(), place this code:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
if (typeof define !== 'function') { var define = require('amdefine')(module) }
|
|
||||||
```
|
|
||||||
|
|
||||||
**Only use these snippets** when loading amdefine. If you preserve the basic structure,
|
|
||||||
with the braces, it will be stripped out when using the [RequireJS optimizer](#optimizer).
|
|
||||||
|
|
||||||
You can add spaces, line breaks and even require amdefine with a local path, but
|
|
||||||
keep the rest of the structure to get the stripping behavior.
|
|
||||||
|
|
||||||
As you may know, because `if` statements in JavaScript don't have their own scope, the var
|
|
||||||
declaration in the above snippet is made whether the `if` expression is truthy or not. If
|
|
||||||
RequireJS is loaded then the declaration is superfluous because `define` is already already
|
|
||||||
declared in the same scope in RequireJS. Fortunately JavaScript handles multiple `var`
|
|
||||||
declarations of the same variable in the same scope gracefully.
|
|
||||||
|
|
||||||
If you want to deliver amdefine.js with your code rather than specifying it as a dependency
|
|
||||||
with npm, then just download the latest release and refer to it using a relative path:
|
|
||||||
|
|
||||||
[Latest Version](https://github.com/jrburke/amdefine/raw/latest/amdefine.js)
|
|
||||||
|
|
||||||
### amdefine/intercept
|
|
||||||
|
|
||||||
Consider this very experimental.
|
|
||||||
|
|
||||||
Instead of pasting the piece of text for the amdefine setup of a `define`
|
|
||||||
variable in each module you create or consume, you can use `amdefine/intercept`
|
|
||||||
instead. It will automatically insert the above snippet in each .js file loaded
|
|
||||||
by Node.
|
|
||||||
|
|
||||||
**Warning**: you should only use this if you are creating an application that
|
|
||||||
is consuming AMD style defined()'d modules that are distributed via npm and want
|
|
||||||
to run that code in Node.
|
|
||||||
|
|
||||||
For library code where you are not sure if it will be used by others in Node or
|
|
||||||
in the browser, then explicitly depending on amdefine and placing the code
|
|
||||||
snippet above is suggested path, instead of using `amdefine/intercept`. The
|
|
||||||
intercept module affects all .js files loaded in the Node app, and it is
|
|
||||||
inconsiderate to modify global state like that unless you are also controlling
|
|
||||||
the top level app.
|
|
||||||
|
|
||||||
#### Why distribute AMD-style modules via npm?
|
|
||||||
|
|
||||||
npm has a lot of weaknesses for front-end use (installed layout is not great,
|
|
||||||
should have better support for the `baseUrl + moduleID + '.js' style of loading,
|
|
||||||
single file JS installs), but some people want a JS package manager and are
|
|
||||||
willing to live with those constraints. If that is you, but still want to author
|
|
||||||
in AMD style modules to get dynamic require([]), better direct source usage and
|
|
||||||
powerful loader plugin support in the browser, then this tool can help.
|
|
||||||
|
|
||||||
#### amdefine/intercept usage
|
|
||||||
|
|
||||||
Just require it in your top level app module (for example index.js, server.js):
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
require('amdefine/intercept');
|
|
||||||
```
|
|
||||||
|
|
||||||
The module does not return a value, so no need to assign the result to a local
|
|
||||||
variable.
|
|
||||||
|
|
||||||
Then just require() code as you normally would with Node's require(). Any .js
|
|
||||||
loaded after the intercept require will have the amdefine check injected in
|
|
||||||
the .js source as it is loaded. It does not modify the source on disk, just
|
|
||||||
prepends some content to the text of the module as it is loaded by Node.
|
|
||||||
|
|
||||||
#### How amdefine/intercept works
|
|
||||||
|
|
||||||
It overrides the `Module._extensions['.js']` in Node to automatically prepend
|
|
||||||
the amdefine snippet above. So, it will affect any .js file loaded by your
|
|
||||||
app.
|
|
||||||
|
|
||||||
## define() usage
|
|
||||||
|
|
||||||
It is best if you use the anonymous forms of define() in your module:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
define(function (require) {
|
|
||||||
var dependency = require('dependency');
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
define(['dependency'], function (dependency) {
|
|
||||||
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## RequireJS optimizer integration. <a name="optimizer"></name>
|
|
||||||
|
|
||||||
Version 1.0.3 of the [RequireJS optimizer](http://requirejs.org/docs/optimization.html)
|
|
||||||
will have support for stripping the `if (typeof define !== 'function')` check
|
|
||||||
mentioned above, so you can include this snippet for code that runs in the
|
|
||||||
browser, but avoid taking the cost of the if() statement once the code is
|
|
||||||
optimized for deployment.
|
|
||||||
|
|
||||||
## Node 0.4 Support
|
|
||||||
|
|
||||||
If you want to support Node 0.4, then add `require` as the second parameter to amdefine:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
//Only if you want Node 0.4. If using 0.5 or later, use the above snippet.
|
|
||||||
if (typeof define !== 'function') { var define = require('amdefine')(module, require) }
|
|
||||||
```
|
|
||||||
|
|
||||||
## Limitations
|
|
||||||
|
|
||||||
### Synchronous vs Asynchronous
|
|
||||||
|
|
||||||
amdefine creates a define() function that is callable by your code. It will
|
|
||||||
execute and trace dependencies and call the factory function *synchronously*,
|
|
||||||
to keep the behavior in line with Node's synchronous dependency tracing.
|
|
||||||
|
|
||||||
The exception: calling AMD's callback-style require() from inside a factory
|
|
||||||
function. The require callback is called on process.nextTick():
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
define(function (require) {
|
|
||||||
require(['a'], function(a) {
|
|
||||||
//'a' is loaded synchronously, but
|
|
||||||
//this callback is called on process.nextTick().
|
|
||||||
});
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
### Loader Plugins
|
|
||||||
|
|
||||||
Loader plugins are supported as long as they call their load() callbacks
|
|
||||||
synchronously. So ones that do network requests will not work. However plugins
|
|
||||||
like [text](http://requirejs.org/docs/api.html#text) can load text files locally.
|
|
||||||
|
|
||||||
The plugin API's `load.fromText()` is **not supported** in amdefine, so this means
|
|
||||||
transpiler plugins like the [CoffeeScript loader plugin](https://github.com/jrburke/require-cs)
|
|
||||||
will not work. This may be fixable, but it is a bit complex, and I do not have
|
|
||||||
enough node-fu to figure it out yet. See the source for amdefine.js if you want
|
|
||||||
to get an idea of the issues involved.
|
|
||||||
|
|
||||||
## Tests
|
|
||||||
|
|
||||||
To run the tests, cd to **tests** and run:
|
|
||||||
|
|
||||||
```
|
|
||||||
node all.js
|
|
||||||
node all-intercept.js
|
|
||||||
```
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
New BSD and MIT. Check the LICENSE file for all the details.
|
|
@ -1,301 +0,0 @@
|
|||||||
/** vim: et:ts=4:sw=4:sts=4
|
|
||||||
* @license amdefine 1.0.0 Copyright (c) 2011-2015, The Dojo Foundation All Rights Reserved.
|
|
||||||
* Available via the MIT or new BSD license.
|
|
||||||
* see: http://github.com/jrburke/amdefine for details
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*jslint node: true */
|
|
||||||
/*global module, process */
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a define for node.
|
|
||||||
* @param {Object} module the "module" object that is defined by Node for the
|
|
||||||
* current module.
|
|
||||||
* @param {Function} [requireFn]. Node's require function for the current module.
|
|
||||||
* It only needs to be passed in Node versions before 0.5, when module.require
|
|
||||||
* did not exist.
|
|
||||||
* @returns {Function} a define function that is usable for the current node
|
|
||||||
* module.
|
|
||||||
*/
|
|
||||||
function amdefine(module, requireFn) {
|
|
||||||
'use strict';
|
|
||||||
var defineCache = {},
|
|
||||||
loaderCache = {},
|
|
||||||
alreadyCalled = false,
|
|
||||||
path = require('path'),
|
|
||||||
makeRequire, stringRequire;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Trims the . and .. from an array of path segments.
|
|
||||||
* It will keep a leading path segment if a .. will become
|
|
||||||
* the first path segment, to help with module name lookups,
|
|
||||||
* which act like paths, but can be remapped. But the end result,
|
|
||||||
* all paths that use this function should look normalized.
|
|
||||||
* NOTE: this method MODIFIES the input array.
|
|
||||||
* @param {Array} ary the array of path segments.
|
|
||||||
*/
|
|
||||||
function trimDots(ary) {
|
|
||||||
var i, part;
|
|
||||||
for (i = 0; ary[i]; i+= 1) {
|
|
||||||
part = ary[i];
|
|
||||||
if (part === '.') {
|
|
||||||
ary.splice(i, 1);
|
|
||||||
i -= 1;
|
|
||||||
} else if (part === '..') {
|
|
||||||
if (i === 1 && (ary[2] === '..' || ary[0] === '..')) {
|
|
||||||
//End of the line. Keep at least one non-dot
|
|
||||||
//path segment at the front so it can be mapped
|
|
||||||
//correctly to disk. Otherwise, there is likely
|
|
||||||
//no path mapping for a path starting with '..'.
|
|
||||||
//This can still fail, but catches the most reasonable
|
|
||||||
//uses of ..
|
|
||||||
break;
|
|
||||||
} else if (i > 0) {
|
|
||||||
ary.splice(i - 1, 2);
|
|
||||||
i -= 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function normalize(name, baseName) {
|
|
||||||
var baseParts;
|
|
||||||
|
|
||||||
//Adjust any relative paths.
|
|
||||||
if (name && name.charAt(0) === '.') {
|
|
||||||
//If have a base name, try to normalize against it,
|
|
||||||
//otherwise, assume it is a top-level require that will
|
|
||||||
//be relative to baseUrl in the end.
|
|
||||||
if (baseName) {
|
|
||||||
baseParts = baseName.split('/');
|
|
||||||
baseParts = baseParts.slice(0, baseParts.length - 1);
|
|
||||||
baseParts = baseParts.concat(name.split('/'));
|
|
||||||
trimDots(baseParts);
|
|
||||||
name = baseParts.join('/');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create the normalize() function passed to a loader plugin's
|
|
||||||
* normalize method.
|
|
||||||
*/
|
|
||||||
function makeNormalize(relName) {
|
|
||||||
return function (name) {
|
|
||||||
return normalize(name, relName);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function makeLoad(id) {
|
|
||||||
function load(value) {
|
|
||||||
loaderCache[id] = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
load.fromText = function (id, text) {
|
|
||||||
//This one is difficult because the text can/probably uses
|
|
||||||
//define, and any relative paths and requires should be relative
|
|
||||||
//to that id was it would be found on disk. But this would require
|
|
||||||
//bootstrapping a module/require fairly deeply from node core.
|
|
||||||
//Not sure how best to go about that yet.
|
|
||||||
throw new Error('amdefine does not implement load.fromText');
|
|
||||||
};
|
|
||||||
|
|
||||||
return load;
|
|
||||||
}
|
|
||||||
|
|
||||||
makeRequire = function (systemRequire, exports, module, relId) {
|
|
||||||
function amdRequire(deps, callback) {
|
|
||||||
if (typeof deps === 'string') {
|
|
||||||
//Synchronous, single module require('')
|
|
||||||
return stringRequire(systemRequire, exports, module, deps, relId);
|
|
||||||
} else {
|
|
||||||
//Array of dependencies with a callback.
|
|
||||||
|
|
||||||
//Convert the dependencies to modules.
|
|
||||||
deps = deps.map(function (depName) {
|
|
||||||
return stringRequire(systemRequire, exports, module, depName, relId);
|
|
||||||
});
|
|
||||||
|
|
||||||
//Wait for next tick to call back the require call.
|
|
||||||
if (callback) {
|
|
||||||
process.nextTick(function () {
|
|
||||||
callback.apply(null, deps);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
amdRequire.toUrl = function (filePath) {
|
|
||||||
if (filePath.indexOf('.') === 0) {
|
|
||||||
return normalize(filePath, path.dirname(module.filename));
|
|
||||||
} else {
|
|
||||||
return filePath;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return amdRequire;
|
|
||||||
};
|
|
||||||
|
|
||||||
//Favor explicit value, passed in if the module wants to support Node 0.4.
|
|
||||||
requireFn = requireFn || function req() {
|
|
||||||
return module.require.apply(module, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
function runFactory(id, deps, factory) {
|
|
||||||
var r, e, m, result;
|
|
||||||
|
|
||||||
if (id) {
|
|
||||||
e = loaderCache[id] = {};
|
|
||||||
m = {
|
|
||||||
id: id,
|
|
||||||
uri: __filename,
|
|
||||||
exports: e
|
|
||||||
};
|
|
||||||
r = makeRequire(requireFn, e, m, id);
|
|
||||||
} else {
|
|
||||||
//Only support one define call per file
|
|
||||||
if (alreadyCalled) {
|
|
||||||
throw new Error('amdefine with no module ID cannot be called more than once per file.');
|
|
||||||
}
|
|
||||||
alreadyCalled = true;
|
|
||||||
|
|
||||||
//Use the real variables from node
|
|
||||||
//Use module.exports for exports, since
|
|
||||||
//the exports in here is amdefine exports.
|
|
||||||
e = module.exports;
|
|
||||||
m = module;
|
|
||||||
r = makeRequire(requireFn, e, m, module.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
//If there are dependencies, they are strings, so need
|
|
||||||
//to convert them to dependency values.
|
|
||||||
if (deps) {
|
|
||||||
deps = deps.map(function (depName) {
|
|
||||||
return r(depName);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//Call the factory with the right dependencies.
|
|
||||||
if (typeof factory === 'function') {
|
|
||||||
result = factory.apply(m.exports, deps);
|
|
||||||
} else {
|
|
||||||
result = factory;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result !== undefined) {
|
|
||||||
m.exports = result;
|
|
||||||
if (id) {
|
|
||||||
loaderCache[id] = m.exports;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stringRequire = function (systemRequire, exports, module, id, relId) {
|
|
||||||
//Split the ID by a ! so that
|
|
||||||
var index = id.indexOf('!'),
|
|
||||||
originalId = id,
|
|
||||||
prefix, plugin;
|
|
||||||
|
|
||||||
if (index === -1) {
|
|
||||||
id = normalize(id, relId);
|
|
||||||
|
|
||||||
//Straight module lookup. If it is one of the special dependencies,
|
|
||||||
//deal with it, otherwise, delegate to node.
|
|
||||||
if (id === 'require') {
|
|
||||||
return makeRequire(systemRequire, exports, module, relId);
|
|
||||||
} else if (id === 'exports') {
|
|
||||||
return exports;
|
|
||||||
} else if (id === 'module') {
|
|
||||||
return module;
|
|
||||||
} else if (loaderCache.hasOwnProperty(id)) {
|
|
||||||
return loaderCache[id];
|
|
||||||
} else if (defineCache[id]) {
|
|
||||||
runFactory.apply(null, defineCache[id]);
|
|
||||||
return loaderCache[id];
|
|
||||||
} else {
|
|
||||||
if(systemRequire) {
|
|
||||||
return systemRequire(originalId);
|
|
||||||
} else {
|
|
||||||
throw new Error('No module with ID: ' + id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
//There is a plugin in play.
|
|
||||||
prefix = id.substring(0, index);
|
|
||||||
id = id.substring(index + 1, id.length);
|
|
||||||
|
|
||||||
plugin = stringRequire(systemRequire, exports, module, prefix, relId);
|
|
||||||
|
|
||||||
if (plugin.normalize) {
|
|
||||||
id = plugin.normalize(id, makeNormalize(relId));
|
|
||||||
} else {
|
|
||||||
//Normalize the ID normally.
|
|
||||||
id = normalize(id, relId);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (loaderCache[id]) {
|
|
||||||
return loaderCache[id];
|
|
||||||
} else {
|
|
||||||
plugin.load(id, makeRequire(systemRequire, exports, module, relId), makeLoad(id), {});
|
|
||||||
|
|
||||||
return loaderCache[id];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
//Create a define function specific to the module asking for amdefine.
|
|
||||||
function define(id, deps, factory) {
|
|
||||||
if (Array.isArray(id)) {
|
|
||||||
factory = deps;
|
|
||||||
deps = id;
|
|
||||||
id = undefined;
|
|
||||||
} else if (typeof id !== 'string') {
|
|
||||||
factory = id;
|
|
||||||
id = deps = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (deps && !Array.isArray(deps)) {
|
|
||||||
factory = deps;
|
|
||||||
deps = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!deps) {
|
|
||||||
deps = ['require', 'exports', 'module'];
|
|
||||||
}
|
|
||||||
|
|
||||||
//Set up properties for this module. If an ID, then use
|
|
||||||
//internal cache. If no ID, then use the external variables
|
|
||||||
//for this node module.
|
|
||||||
if (id) {
|
|
||||||
//Put the module in deep freeze until there is a
|
|
||||||
//require call for it.
|
|
||||||
defineCache[id] = [id, deps, factory];
|
|
||||||
} else {
|
|
||||||
runFactory(id, deps, factory);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//define.require, which has access to all the values in the
|
|
||||||
//cache. Useful for AMD modules that all have IDs in the file,
|
|
||||||
//but need to finally export a value to node based on one of those
|
|
||||||
//IDs.
|
|
||||||
define.require = function (id) {
|
|
||||||
if (loaderCache[id]) {
|
|
||||||
return loaderCache[id];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (defineCache[id]) {
|
|
||||||
runFactory.apply(null, defineCache[id]);
|
|
||||||
return loaderCache[id];
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
define.amd = {};
|
|
||||||
|
|
||||||
return define;
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = amdefine;
|
|
@ -1,36 +0,0 @@
|
|||||||
/*jshint node: true */
|
|
||||||
var inserted,
|
|
||||||
Module = require('module'),
|
|
||||||
fs = require('fs'),
|
|
||||||
existingExtFn = Module._extensions['.js'],
|
|
||||||
amdefineRegExp = /amdefine\.js/;
|
|
||||||
|
|
||||||
inserted = "if (typeof define !== 'function') {var define = require('amdefine')(module)}";
|
|
||||||
|
|
||||||
//From the node/lib/module.js source:
|
|
||||||
function stripBOM(content) {
|
|
||||||
// Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
|
|
||||||
// because the buffer-to-string conversion in `fs.readFileSync()`
|
|
||||||
// translates it to FEFF, the UTF-16 BOM.
|
|
||||||
if (content.charCodeAt(0) === 0xFEFF) {
|
|
||||||
content = content.slice(1);
|
|
||||||
}
|
|
||||||
return content;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Also adapted from the node/lib/module.js source:
|
|
||||||
function intercept(module, filename) {
|
|
||||||
var content = stripBOM(fs.readFileSync(filename, 'utf8'));
|
|
||||||
|
|
||||||
if (!amdefineRegExp.test(module.id)) {
|
|
||||||
content = inserted + content;
|
|
||||||
}
|
|
||||||
|
|
||||||
module._compile(content, filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
intercept._id = 'amdefine/intercept';
|
|
||||||
|
|
||||||
if (!existingExtFn._id || existingExtFn._id !== intercept._id) {
|
|
||||||
Module._extensions['.js'] = intercept;
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "amdefine",
|
|
||||||
"description": "Provide AMD's define() API for declaring modules in the AMD format",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"homepage": "http://github.com/jrburke/amdefine",
|
|
||||||
"author": {
|
|
||||||
"name": "James Burke",
|
|
||||||
"email": "jrburke@gmail.com",
|
|
||||||
"url": "http://github.com/jrburke"
|
|
||||||
},
|
|
||||||
"license": "BSD-3-Clause AND MIT",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/jrburke/amdefine.git"
|
|
||||||
},
|
|
||||||
"main": "./amdefine.js",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.4.2"
|
|
||||||
},
|
|
||||||
"gitHead": "578bc4a3f7dede33f3f3e10edde0c1607005d761",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/jrburke/amdefine/issues"
|
|
||||||
},
|
|
||||||
"_id": "amdefine@1.0.0",
|
|
||||||
"scripts": {},
|
|
||||||
"_shasum": "fd17474700cb5cc9c2b709f0be9d23ce3c198c33",
|
|
||||||
"_from": "amdefine@>=0.0.4",
|
|
||||||
"_npmVersion": "2.12.1",
|
|
||||||
"_nodeVersion": "0.10.36",
|
|
||||||
"_npmUser": {
|
|
||||||
"name": "jrburke",
|
|
||||||
"email": "jrburke@gmail.com"
|
|
||||||
},
|
|
||||||
"maintainers": [
|
|
||||||
{
|
|
||||||
"name": "jrburke",
|
|
||||||
"email": "jrburke@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"dist": {
|
|
||||||
"shasum": "fd17474700cb5cc9c2b709f0be9d23ce3c198c33",
|
|
||||||
"tarball": "http://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz"
|
|
||||||
},
|
|
||||||
"directories": {},
|
|
||||||
"_resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz",
|
|
||||||
"readme": "ERROR: No README data found!"
|
|
||||||
}
|
|
@ -1,201 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "source-map",
|
|
||||||
"description": "Generates and consumes source maps",
|
|
||||||
"version": "0.4.4",
|
|
||||||
"homepage": "https://github.com/mozilla/source-map",
|
|
||||||
"author": {
|
|
||||||
"name": "Nick Fitzgerald",
|
|
||||||
"email": "nfitzgerald@mozilla.com"
|
|
||||||
},
|
|
||||||
"contributors": [
|
|
||||||
{
|
|
||||||
"name": "Tobias Koppers",
|
|
||||||
"email": "tobias.koppers@googlemail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Duncan Beevers",
|
|
||||||
"email": "duncan@dweebd.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Stephen Crane",
|
|
||||||
"email": "scrane@mozilla.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Ryan Seddon",
|
|
||||||
"email": "seddon.ryan@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Miles Elam",
|
|
||||||
"email": "miles.elam@deem.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Mihai Bazon",
|
|
||||||
"email": "mihai.bazon@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Michael Ficarra",
|
|
||||||
"email": "github.public.email@michael.ficarra.me"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Todd Wolfson",
|
|
||||||
"email": "todd@twolfson.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Alexander Solovyov",
|
|
||||||
"email": "alexander@solovyov.net"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Felix Gnass",
|
|
||||||
"email": "fgnass@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Conrad Irwin",
|
|
||||||
"email": "conrad.irwin@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "usrbincc",
|
|
||||||
"email": "usrbincc@yahoo.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "David Glasser",
|
|
||||||
"email": "glasser@davidglasser.net"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Chase Douglas",
|
|
||||||
"email": "chase@newrelic.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Evan Wallace",
|
|
||||||
"email": "evan.exe@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Heather Arthur",
|
|
||||||
"email": "fayearthur@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Hugh Kennedy",
|
|
||||||
"email": "hughskennedy@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "David Glasser",
|
|
||||||
"email": "glasser@davidglasser.net"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Simon Lydell",
|
|
||||||
"email": "simon.lydell@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Jmeas Smith",
|
|
||||||
"email": "jellyes2@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Michael Z Goddard",
|
|
||||||
"email": "mzgoddard@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "azu",
|
|
||||||
"email": "azu@users.noreply.github.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "John Gozde",
|
|
||||||
"email": "john@gozde.ca"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Adam Kirkton",
|
|
||||||
"email": "akirkton@truefitinnovation.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Chris Montgomery",
|
|
||||||
"email": "christopher.montgomery@dowjones.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "J. Ryan Stinnett",
|
|
||||||
"email": "jryans@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Jack Herrington",
|
|
||||||
"email": "jherrington@walmartlabs.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Chris Truter",
|
|
||||||
"email": "jeffpalentine@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Daniel Espeset",
|
|
||||||
"email": "daniel@danielespeset.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Jamie Wong",
|
|
||||||
"email": "jamie.lf.wong@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Eddy Bruël",
|
|
||||||
"email": "ejpbruel@mozilla.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Hawken Rives",
|
|
||||||
"email": "hawkrives@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Gilad Peleg",
|
|
||||||
"email": "giladp007@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "http://github.com/mozilla/source-map.git"
|
|
||||||
},
|
|
||||||
"directories": {
|
|
||||||
"lib": "./lib"
|
|
||||||
},
|
|
||||||
"main": "./lib/source-map.js",
|
|
||||||
"files": [
|
|
||||||
"lib/",
|
|
||||||
"build/"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.8.0"
|
|
||||||
},
|
|
||||||
"license": "BSD-3-Clause",
|
|
||||||
"dependencies": {
|
|
||||||
"amdefine": ">=0.0.4"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"dryice": ">=0.4.8"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "node test/run-tests.js",
|
|
||||||
"build": "node Makefile.dryice.js"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/mozilla/source-map/issues"
|
|
||||||
},
|
|
||||||
"_id": "source-map@0.4.4",
|
|
||||||
"_shasum": "eba4f5da9c0dc999de68032d8b4f76173652036b",
|
|
||||||
"_from": "source-map@>=0.4.0 <0.5.0",
|
|
||||||
"_npmVersion": "1.4.9",
|
|
||||||
"_npmUser": {
|
|
||||||
"name": "nickfitzgerald",
|
|
||||||
"email": "fitzgen@gmail.com"
|
|
||||||
},
|
|
||||||
"maintainers": [
|
|
||||||
{
|
|
||||||
"name": "mozilla-devtools",
|
|
||||||
"email": "mozilla-developer-tools@googlegroups.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "mozilla",
|
|
||||||
"email": "dherman@mozilla.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "nickfitzgerald",
|
|
||||||
"email": "fitzgen@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"dist": {
|
|
||||||
"shasum": "eba4f5da9c0dc999de68032d8b4f76173652036b",
|
|
||||||
"tarball": "http://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz"
|
|
||||||
},
|
|
||||||
"_resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
|
|
||||||
"readme": "ERROR: No README data found!"
|
|
||||||
}
|
|
@ -1,66 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "concat-with-sourcemaps",
|
|
||||||
"version": "1.0.2",
|
|
||||||
"description": "Concatenate file contents with a custom separator and generate a source map",
|
|
||||||
"homepage": "http://github.com/floridoo/concat-with-sourcemaps",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git://github.com/floridoo/concat-with-sourcemaps.git"
|
|
||||||
},
|
|
||||||
"main": "index.js",
|
|
||||||
"scripts": {
|
|
||||||
"test": "jshint *.js test/*.js && faucet test/*.js",
|
|
||||||
"tap": "tape test/*.js",
|
|
||||||
"cover": "istanbul cover --dir reports/coverage tape test/*.js",
|
|
||||||
"coveralls": "istanbul cover tape test/*.js --report lcovonly && cat ./coverage/lcov.info | coveralls && rm -rf ./coverage"
|
|
||||||
},
|
|
||||||
"keywords": [
|
|
||||||
"concat",
|
|
||||||
"source map"
|
|
||||||
],
|
|
||||||
"author": {
|
|
||||||
"name": "Florian Reiterer",
|
|
||||||
"email": "me@florianreiterer.com"
|
|
||||||
},
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"source-map": "^0.4.0"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"jshint": "^2.6.0",
|
|
||||||
"tape": "^3.5.0",
|
|
||||||
"istanbul": "^0.3.6",
|
|
||||||
"faucet": "0.0.1",
|
|
||||||
"coveralls": "^2.10.0"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js",
|
|
||||||
"package.json",
|
|
||||||
"README.md",
|
|
||||||
"LICENSE.md"
|
|
||||||
],
|
|
||||||
"gitHead": "607029d89de573da3038ef88bb20ffdcd95b16f4",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/floridoo/concat-with-sourcemaps/issues"
|
|
||||||
},
|
|
||||||
"_id": "concat-with-sourcemaps@1.0.2",
|
|
||||||
"_shasum": "3c1b7e45b9d2f34e2f522e9e263d1891931987a7",
|
|
||||||
"_from": "concat-with-sourcemaps@>=1.0.0 <2.0.0",
|
|
||||||
"_npmVersion": "1.4.28",
|
|
||||||
"_npmUser": {
|
|
||||||
"name": "floridoo",
|
|
||||||
"email": "florian.reiterer@gmail.com"
|
|
||||||
},
|
|
||||||
"maintainers": [
|
|
||||||
{
|
|
||||||
"name": "floridoo",
|
|
||||||
"email": "florian.reiterer@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"dist": {
|
|
||||||
"shasum": "3c1b7e45b9d2f34e2f522e9e263d1891931987a7",
|
|
||||||
"tarball": "http://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.2.tgz"
|
|
||||||
},
|
|
||||||
"directories": {},
|
|
||||||
"_resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.2.tgz"
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
Copyright (c) 2014 Fractal <contact@wearefractal.com>
|
|
||||||
|
|
||||||
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.
|
|
@ -1,146 +0,0 @@
|
|||||||
# gulp-util [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Dependency Status][depstat-image]][depstat-url]
|
|
||||||
|
|
||||||
## Information
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>Package</td><td>gulp-util</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Description</td>
|
|
||||||
<td>Utility functions for gulp plugins</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Node Version</td>
|
|
||||||
<td>>= 0.10</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var gutil = require('gulp-util');
|
|
||||||
|
|
||||||
gutil.log('stuff happened', 'Really it did', gutil.colors.magenta('123'));
|
|
||||||
gutil.beep();
|
|
||||||
|
|
||||||
gutil.replaceExtension('file.coffee', '.js'); // file.js
|
|
||||||
|
|
||||||
var opt = {
|
|
||||||
name: 'todd',
|
|
||||||
file: someGulpFile
|
|
||||||
};
|
|
||||||
gutil.template('test <%= name %> <%= file.path %>', opt) // test todd /js/hi.js
|
|
||||||
```
|
|
||||||
|
|
||||||
### log(msg...)
|
|
||||||
|
|
||||||
Logs stuff. Already prefixed with [gulp] and all that. If you pass in multiple arguments it will join them by a space.
|
|
||||||
|
|
||||||
The default gulp coloring using gutil.colors.<color>:
|
|
||||||
```
|
|
||||||
values (files, module names, etc.) = cyan
|
|
||||||
numbers (times, counts, etc) = magenta
|
|
||||||
```
|
|
||||||
|
|
||||||
### colors
|
|
||||||
|
|
||||||
Is an instance of [chalk](https://github.com/sindresorhus/chalk).
|
|
||||||
|
|
||||||
### replaceExtension(path, newExtension)
|
|
||||||
|
|
||||||
Replaces a file extension in a path. Returns the new path.
|
|
||||||
|
|
||||||
### isStream(obj)
|
|
||||||
|
|
||||||
Returns true or false if an object is a stream.
|
|
||||||
|
|
||||||
### isBuffer(obj)
|
|
||||||
|
|
||||||
Returns true or false if an object is a Buffer.
|
|
||||||
|
|
||||||
### template(string[, data])
|
|
||||||
|
|
||||||
This is a lodash.template function wrapper. You must pass in a valid gulp file object so it is available to the user or it will error. You can not configure any of the delimiters. Look at the [lodash docs](http://lodash.com/docs#template) for more info.
|
|
||||||
|
|
||||||
## new File(obj)
|
|
||||||
|
|
||||||
This is just [vinyl](https://github.com/wearefractal/vinyl)
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var file = new gutil.File({
|
|
||||||
base: path.join(__dirname, './fixtures/'),
|
|
||||||
cwd: __dirname,
|
|
||||||
path: path.join(__dirname, './fixtures/test.coffee')
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## noop()
|
|
||||||
|
|
||||||
Returns a stream that does nothing but pass data straight through.
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// gulp should be called like this :
|
|
||||||
// $ gulp --type production
|
|
||||||
gulp.task('scripts', function() {
|
|
||||||
gulp.src('src/**/*.js')
|
|
||||||
.pipe(concat('script.js'))
|
|
||||||
.pipe(gutil.env.type === 'production' ? uglify() : gutil.noop())
|
|
||||||
.pipe(gulp.dest('dist/'));
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## buffer(cb)
|
|
||||||
|
|
||||||
This is similar to es.wait but instead of buffering text into one string it buffers anything into an array (so very useful for file objects).
|
|
||||||
|
|
||||||
Returns a stream that can be piped to.
|
|
||||||
|
|
||||||
The stream will emit one data event after the stream piped to it has ended. The data will be the same array passed to the callback.
|
|
||||||
|
|
||||||
Callback is optional and receives two arguments: error and data
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
gulp.src('stuff/*.js')
|
|
||||||
.pipe(gutil.buffer(function(err, files) {
|
|
||||||
|
|
||||||
}));
|
|
||||||
```
|
|
||||||
|
|
||||||
## new PluginError(pluginName, message[, options])
|
|
||||||
|
|
||||||
- pluginName should be the module name of your plugin
|
|
||||||
- message can be a string or an existing error
|
|
||||||
- By default the stack will not be shown. Set `options.showStack` to true if you think the stack is important for your error.
|
|
||||||
- If you pass an error in as the message the stack will be pulled from that, otherwise one will be created.
|
|
||||||
- Note that if you pass in a custom stack string you need to include the message along with that.
|
|
||||||
- Error properties will be included in `err.toString()`. Can be omitted by including `{showProperties: false}` in the options.
|
|
||||||
|
|
||||||
These are all acceptable forms of instantiation:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var err = new gutil.PluginError('test', {
|
|
||||||
message: 'something broke'
|
|
||||||
});
|
|
||||||
|
|
||||||
var err = new gutil.PluginError({
|
|
||||||
plugin: 'test',
|
|
||||||
message: 'something broke'
|
|
||||||
});
|
|
||||||
|
|
||||||
var err = new gutil.PluginError('test', 'something broke');
|
|
||||||
|
|
||||||
var err = new gutil.PluginError('test', 'something broke', {showStack: true});
|
|
||||||
|
|
||||||
var existingError = new Error('OMG');
|
|
||||||
var err = new gutil.PluginError('test', existingError, {showStack: true});
|
|
||||||
```
|
|
||||||
|
|
||||||
[npm-url]: https://www.npmjs.com/package/gulp-util
|
|
||||||
[npm-image]: https://badge.fury.io/js/gulp-util.svg
|
|
||||||
[travis-url]: https://travis-ci.org/gulpjs/gulp-util
|
|
||||||
[travis-image]: https://img.shields.io/travis/gulpjs/gulp-util.svg?branch=master
|
|
||||||
[coveralls-url]: https://coveralls.io/r/gulpjs/gulp-util
|
|
||||||
[coveralls-image]: https://img.shields.io/coveralls/gulpjs/gulp-util.svg
|
|
||||||
[depstat-url]: https://david-dm.org/gulpjs/gulp-util
|
|
||||||
[depstat-image]: https://david-dm.org/gulpjs/gulp-util.svg
|
|
@ -1,18 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
File: require('vinyl'),
|
|
||||||
replaceExtension: require('replace-ext'),
|
|
||||||
colors: require('chalk'),
|
|
||||||
date: require('dateformat'),
|
|
||||||
log: require('./lib/log'),
|
|
||||||
template: require('./lib/template'),
|
|
||||||
env: require('./lib/env'),
|
|
||||||
beep: require('beeper'),
|
|
||||||
noop: require('./lib/noop'),
|
|
||||||
isStream: require('./lib/isStream'),
|
|
||||||
isBuffer: require('./lib/isBuffer'),
|
|
||||||
isNull: require('./lib/isNull'),
|
|
||||||
linefeed: '\n',
|
|
||||||
combine: require('./lib/combine'),
|
|
||||||
buffer: require('./lib/buffer'),
|
|
||||||
PluginError: require('./lib/PluginError')
|
|
||||||
};
|
|
@ -1,130 +0,0 @@
|
|||||||
var util = require('util');
|
|
||||||
var arrayDiffer = require('array-differ');
|
|
||||||
var arrayUniq = require('array-uniq');
|
|
||||||
var chalk = require('chalk');
|
|
||||||
var objectAssign = require('object-assign');
|
|
||||||
|
|
||||||
var nonEnumberableProperties = ['name', 'message', 'stack'];
|
|
||||||
var propertiesNotToDisplay = nonEnumberableProperties.concat(['plugin', 'showStack', 'showProperties', '__safety', '_stack']);
|
|
||||||
|
|
||||||
// wow what a clusterfuck
|
|
||||||
var parseOptions = function(plugin, message, opt) {
|
|
||||||
opt = opt || {};
|
|
||||||
if (typeof plugin === 'object') {
|
|
||||||
opt = plugin;
|
|
||||||
} else {
|
|
||||||
if (message instanceof Error) {
|
|
||||||
opt.error = message;
|
|
||||||
} else if (typeof message === 'object') {
|
|
||||||
opt = message;
|
|
||||||
} else {
|
|
||||||
opt.message = message;
|
|
||||||
}
|
|
||||||
opt.plugin = plugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
return objectAssign({
|
|
||||||
showStack: false,
|
|
||||||
showProperties: true
|
|
||||||
}, opt);
|
|
||||||
};
|
|
||||||
|
|
||||||
function PluginError(plugin, message, opt) {
|
|
||||||
if (!(this instanceof PluginError)) throw new Error('Call PluginError using new');
|
|
||||||
|
|
||||||
Error.call(this);
|
|
||||||
|
|
||||||
var options = parseOptions(plugin, message, opt);
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
// if options has an error, grab details from it
|
|
||||||
if (options.error) {
|
|
||||||
// These properties are not enumerable, so we have to add them explicitly.
|
|
||||||
arrayUniq(Object.keys(options.error).concat(nonEnumberableProperties))
|
|
||||||
.forEach(function(prop) {
|
|
||||||
self[prop] = options.error[prop];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
var properties = ['name', 'message', 'fileName', 'lineNumber', 'stack', 'showStack', 'showProperties', 'plugin'];
|
|
||||||
|
|
||||||
// options object can override
|
|
||||||
properties.forEach(function(prop) {
|
|
||||||
if (prop in options) this[prop] = options[prop];
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
// defaults
|
|
||||||
if (!this.name) this.name = 'Error';
|
|
||||||
|
|
||||||
if (!this.stack) {
|
|
||||||
// Error.captureStackTrace appends a stack property which relies on the toString method of the object it is applied to.
|
|
||||||
// Since we are using our own toString method which controls when to display the stack trace if we don't go through this
|
|
||||||
// safety object, then we'll get stack overflow problems.
|
|
||||||
var safety = {
|
|
||||||
toString: function() {
|
|
||||||
return this._messageWithDetails() + '\nStack:';
|
|
||||||
}.bind(this)
|
|
||||||
};
|
|
||||||
Error.captureStackTrace(safety, arguments.callee || this.constructor);
|
|
||||||
this.__safety = safety;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this.plugin) throw new Error('Missing plugin name');
|
|
||||||
if (!this.message) throw new Error('Missing error message');
|
|
||||||
}
|
|
||||||
|
|
||||||
util.inherits(PluginError, Error);
|
|
||||||
|
|
||||||
PluginError.prototype._messageWithDetails = function() {
|
|
||||||
var messageWithDetails = 'Message:\n ' + this.message;
|
|
||||||
var details = this._messageDetails();
|
|
||||||
|
|
||||||
if (details !== '') {
|
|
||||||
messageWithDetails += '\n' + details;
|
|
||||||
}
|
|
||||||
|
|
||||||
return messageWithDetails;
|
|
||||||
};
|
|
||||||
|
|
||||||
PluginError.prototype._messageDetails = function() {
|
|
||||||
if (!this.showProperties) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
var properties = arrayDiffer(Object.keys(this), propertiesNotToDisplay);
|
|
||||||
|
|
||||||
if (properties.length === 0) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
var self = this;
|
|
||||||
properties = properties.map(function stringifyProperty(prop) {
|
|
||||||
return ' ' + prop + ': ' + self[prop];
|
|
||||||
});
|
|
||||||
|
|
||||||
return 'Details:\n' + properties.join('\n');
|
|
||||||
};
|
|
||||||
|
|
||||||
PluginError.prototype.toString = function () {
|
|
||||||
var sig = chalk.red(this.name) + ' in plugin \'' + chalk.cyan(this.plugin) + '\'';
|
|
||||||
var detailsWithStack = function(stack) {
|
|
||||||
return this._messageWithDetails() + '\nStack:\n' + stack;
|
|
||||||
}.bind(this);
|
|
||||||
|
|
||||||
var msg;
|
|
||||||
if (this.showStack) {
|
|
||||||
if (this.__safety) { // There is no wrapped error, use the stack captured in the PluginError ctor
|
|
||||||
msg = this.__safety.stack;
|
|
||||||
} else if (this._stack) {
|
|
||||||
msg = detailsWithStack(this._stack);
|
|
||||||
} else { // Stack from wrapped error
|
|
||||||
msg = detailsWithStack(this.stack);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
msg = this._messageWithDetails();
|
|
||||||
}
|
|
||||||
|
|
||||||
return sig + '\n' + msg;
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = PluginError;
|
|
@ -1,15 +0,0 @@
|
|||||||
var through = require('through2');
|
|
||||||
|
|
||||||
module.exports = function(fn) {
|
|
||||||
var buf = [];
|
|
||||||
var end = function(cb) {
|
|
||||||
this.push(buf);
|
|
||||||
cb();
|
|
||||||
if(fn) fn(null, buf);
|
|
||||||
};
|
|
||||||
var push = function(data, enc, cb) {
|
|
||||||
buf.push(data);
|
|
||||||
cb();
|
|
||||||
};
|
|
||||||
return through.obj(push, end);
|
|
||||||
};
|
|
@ -1,11 +0,0 @@
|
|||||||
var pipeline = require('multipipe');
|
|
||||||
|
|
||||||
module.exports = function(){
|
|
||||||
var args = arguments;
|
|
||||||
if (args.length === 1 && Array.isArray(args[0])) {
|
|
||||||
args = args[0];
|
|
||||||
}
|
|
||||||
return function(){
|
|
||||||
return pipeline.apply(pipeline, args);
|
|
||||||
};
|
|
||||||
};
|
|
@ -1,4 +0,0 @@
|
|||||||
var parseArgs = require('minimist');
|
|
||||||
var argv = parseArgs(process.argv.slice(2));
|
|
||||||
|
|
||||||
module.exports = argv;
|
|
@ -1,7 +0,0 @@
|
|||||||
var buf = require('buffer');
|
|
||||||
var Buffer = buf.Buffer;
|
|
||||||
|
|
||||||
// could use Buffer.isBuffer but this is the same exact thing...
|
|
||||||
module.exports = function(o) {
|
|
||||||
return typeof o === 'object' && o instanceof Buffer;
|
|
||||||
};
|
|
@ -1,3 +0,0 @@
|
|||||||
module.exports = function(v) {
|
|
||||||
return v === null;
|
|
||||||
};
|
|
@ -1,5 +0,0 @@
|
|||||||
var Stream = require('stream').Stream;
|
|
||||||
|
|
||||||
module.exports = function(o) {
|
|
||||||
return !!o && o instanceof Stream;
|
|
||||||
};
|
|
@ -1,9 +0,0 @@
|
|||||||
var chalk = require('chalk');
|
|
||||||
var dateformat = require('dateformat');
|
|
||||||
|
|
||||||
module.exports = function(){
|
|
||||||
var time = '['+chalk.grey(dateformat(new Date(), 'HH:MM:ss'))+']';
|
|
||||||
process.stdout.write(time + ' ');
|
|
||||||
console.log.apply(console, arguments);
|
|
||||||
return this;
|
|
||||||
};
|
|
@ -1,5 +0,0 @@
|
|||||||
var through = require('through2');
|
|
||||||
|
|
||||||
module.exports = function () {
|
|
||||||
return through.obj();
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
var template = require('lodash.template');
|
|
||||||
var reEscape = require('lodash._reescape');
|
|
||||||
var reEvaluate = require('lodash._reevaluate');
|
|
||||||
var reInterpolate = require('lodash._reinterpolate');
|
|
||||||
|
|
||||||
var forcedSettings = {
|
|
||||||
escape: reEscape,
|
|
||||||
evaluate: reEvaluate,
|
|
||||||
interpolate: reInterpolate
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = function(tmpl, data){
|
|
||||||
var fn = template(tmpl, forcedSettings);
|
|
||||||
|
|
||||||
var wrapped = function(o) {
|
|
||||||
if (typeof o === 'undefined' || typeof o.file === 'undefined') throw new Error('Failed to provide the current file as "file" to the template');
|
|
||||||
return fn(o);
|
|
||||||
};
|
|
||||||
|
|
||||||
return (data ? wrapped(data) : wrapped);
|
|
||||||
};
|
|
@ -1 +0,0 @@
|
|||||||
../dateformat/bin/cli.js
|
|
7
node_modules/gulp-concat/node_modules/gulp-util/node_modules/array-differ/index.js
generated
vendored
7
node_modules/gulp-concat/node_modules/gulp-util/node_modules/array-differ/index.js
generated
vendored
@ -1,7 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
module.exports = function (arr) {
|
|
||||||
var rest = [].concat.apply([], [].slice.call(arguments, 1));
|
|
||||||
return arr.filter(function (el) {
|
|
||||||
return rest.indexOf(el) === -1;
|
|
||||||
});
|
|
||||||
};
|
|
61
node_modules/gulp-concat/node_modules/gulp-util/node_modules/array-differ/package.json
generated
vendored
61
node_modules/gulp-concat/node_modules/gulp-util/node_modules/array-differ/package.json
generated
vendored
@ -1,61 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "array-differ",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"description": "Create an array with values that are present in the first input array but not additional ones",
|
|
||||||
"license": "MIT",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git://github.com/sindresorhus/array-differ"
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"name": "Sindre Sorhus",
|
|
||||||
"email": "sindresorhus@gmail.com",
|
|
||||||
"url": "http://sindresorhus.com"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "mocha"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"keywords": [
|
|
||||||
"array",
|
|
||||||
"difference",
|
|
||||||
"diff",
|
|
||||||
"differ",
|
|
||||||
"filter",
|
|
||||||
"exclude"
|
|
||||||
],
|
|
||||||
"devDependencies": {
|
|
||||||
"mocha": "*"
|
|
||||||
},
|
|
||||||
"gitHead": "e91802976c4710eef8dea2090d48e48525cf41b1",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/sindresorhus/array-differ/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/sindresorhus/array-differ",
|
|
||||||
"_id": "array-differ@1.0.0",
|
|
||||||
"_shasum": "eff52e3758249d33be402b8bb8e564bb2b5d4031",
|
|
||||||
"_from": "array-differ@>=1.0.0 <2.0.0",
|
|
||||||
"_npmVersion": "1.4.14",
|
|
||||||
"_npmUser": {
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
"maintainers": [
|
|
||||||
{
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"dist": {
|
|
||||||
"shasum": "eff52e3758249d33be402b8bb8e564bb2b5d4031",
|
|
||||||
"tarball": "http://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz"
|
|
||||||
},
|
|
||||||
"directories": {},
|
|
||||||
"_resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
|
|
||||||
"readme": "ERROR: No README data found!"
|
|
||||||
}
|
|
41
node_modules/gulp-concat/node_modules/gulp-util/node_modules/array-differ/readme.md
generated
vendored
41
node_modules/gulp-concat/node_modules/gulp-util/node_modules/array-differ/readme.md
generated
vendored
@ -1,41 +0,0 @@
|
|||||||
# array-differ [![Build Status](https://travis-ci.org/sindresorhus/array-differ.svg?branch=master)](https://travis-ci.org/sindresorhus/array-differ)
|
|
||||||
|
|
||||||
> Create an array with values that are present in the first input array but not additional ones
|
|
||||||
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ npm install --save array-differ
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
var arrayDiffer = require('array-differ');
|
|
||||||
|
|
||||||
arrayDiffer([2, 3, 4], [3, 50]);
|
|
||||||
//=> [2, 4]
|
|
||||||
```
|
|
||||||
|
|
||||||
## API
|
|
||||||
|
|
||||||
### arrayDiffer(input, values, [values, ...])
|
|
||||||
|
|
||||||
Returns the new array.
|
|
||||||
|
|
||||||
#### input
|
|
||||||
|
|
||||||
Type: `array`
|
|
||||||
|
|
||||||
#### values
|
|
||||||
|
|
||||||
Type: `array`
|
|
||||||
|
|
||||||
Arrays of values to exclude.
|
|
||||||
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
|
60
node_modules/gulp-concat/node_modules/gulp-util/node_modules/array-uniq/index.js
generated
vendored
60
node_modules/gulp-concat/node_modules/gulp-util/node_modules/array-uniq/index.js
generated
vendored
@ -1,60 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
// there's 3 implementations written in increasing order of efficiency
|
|
||||||
|
|
||||||
// 1 - no Set type is defined
|
|
||||||
function uniqNoSet(arr) {
|
|
||||||
var ret = [];
|
|
||||||
|
|
||||||
for (var i = 0; i < arr.length; i++) {
|
|
||||||
if (ret.indexOf(arr[i]) === -1) {
|
|
||||||
ret.push(arr[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2 - a simple Set type is defined
|
|
||||||
function uniqSet(arr) {
|
|
||||||
var seen = new Set();
|
|
||||||
return arr.filter(function (el) {
|
|
||||||
if (!seen.has(el)) {
|
|
||||||
seen.add(el);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3 - a standard Set type is defined and it has a forEach method
|
|
||||||
function uniqSetWithForEach(arr) {
|
|
||||||
var ret = [];
|
|
||||||
|
|
||||||
(new Set(arr)).forEach(function (el) {
|
|
||||||
ret.push(el);
|
|
||||||
});
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
// V8 currently has a broken implementation
|
|
||||||
// https://github.com/joyent/node/issues/8449
|
|
||||||
function doesForEachActuallyWork() {
|
|
||||||
var ret = false;
|
|
||||||
|
|
||||||
(new Set([true])).forEach(function (el) {
|
|
||||||
ret = el;
|
|
||||||
});
|
|
||||||
|
|
||||||
return ret === true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ('Set' in global) {
|
|
||||||
if (typeof Set.prototype.forEach === 'function' && doesForEachActuallyWork()) {
|
|
||||||
module.exports = uniqSetWithForEach;
|
|
||||||
} else {
|
|
||||||
module.exports = uniqSet;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
module.exports = uniqNoSet;
|
|
||||||
}
|
|
66
node_modules/gulp-concat/node_modules/gulp-util/node_modules/array-uniq/package.json
generated
vendored
66
node_modules/gulp-concat/node_modules/gulp-util/node_modules/array-uniq/package.json
generated
vendored
@ -1,66 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "array-uniq",
|
|
||||||
"version": "1.0.2",
|
|
||||||
"description": "Create an array without duplicates",
|
|
||||||
"license": "MIT",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/sindresorhus/array-uniq"
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"name": "Sindre Sorhus",
|
|
||||||
"email": "sindresorhus@gmail.com",
|
|
||||||
"url": "http://sindresorhus.com"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "mocha"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"keywords": [
|
|
||||||
"array",
|
|
||||||
"arr",
|
|
||||||
"set",
|
|
||||||
"uniq",
|
|
||||||
"unique",
|
|
||||||
"es6",
|
|
||||||
"duplicate",
|
|
||||||
"remove"
|
|
||||||
],
|
|
||||||
"devDependencies": {
|
|
||||||
"es6-set": "^0.1.0",
|
|
||||||
"mocha": "*",
|
|
||||||
"require-uncached": "^1.0.2"
|
|
||||||
},
|
|
||||||
"gitHead": "d5e311f37692dfd25ec216490df10632ce5f69f3",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/sindresorhus/array-uniq/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/sindresorhus/array-uniq",
|
|
||||||
"_id": "array-uniq@1.0.2",
|
|
||||||
"_shasum": "5fcc373920775723cfd64d65c64bef53bf9eba6d",
|
|
||||||
"_from": "array-uniq@>=1.0.2 <2.0.0",
|
|
||||||
"_npmVersion": "2.1.5",
|
|
||||||
"_nodeVersion": "0.10.32",
|
|
||||||
"_npmUser": {
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
"maintainers": [
|
|
||||||
{
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"dist": {
|
|
||||||
"shasum": "5fcc373920775723cfd64d65c64bef53bf9eba6d",
|
|
||||||
"tarball": "http://registry.npmjs.org/array-uniq/-/array-uniq-1.0.2.tgz"
|
|
||||||
},
|
|
||||||
"directories": {},
|
|
||||||
"_resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.2.tgz",
|
|
||||||
"readme": "ERROR: No README data found!"
|
|
||||||
}
|
|
30
node_modules/gulp-concat/node_modules/gulp-util/node_modules/array-uniq/readme.md
generated
vendored
30
node_modules/gulp-concat/node_modules/gulp-util/node_modules/array-uniq/readme.md
generated
vendored
@ -1,30 +0,0 @@
|
|||||||
# array-uniq [![Build Status](https://travis-ci.org/sindresorhus/array-uniq.svg?branch=master)](https://travis-ci.org/sindresorhus/array-uniq)
|
|
||||||
|
|
||||||
> Create an array without duplicates
|
|
||||||
|
|
||||||
It's already pretty fast, but will be much faster when [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) becomes available in V8 (especially with large arrays).
|
|
||||||
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ npm install --save array-uniq
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
var arrayUniq = require('array-uniq');
|
|
||||||
|
|
||||||
arrayUniq([1, 1, 2, 3, 3]);
|
|
||||||
//=> [1, 2, 3]
|
|
||||||
|
|
||||||
arrayUniq(['foo', 'foo', 'bar', 'foo']);
|
|
||||||
//=> ['foo', 'bar']
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
|
@ -1,61 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
var BEEP_DELAY = 500;
|
|
||||||
|
|
||||||
if (!process.stdout.isTTY ||
|
|
||||||
process.argv.indexOf('--no-beep') !== -1 ||
|
|
||||||
process.argv.indexOf('--beep=false') !== -1) {
|
|
||||||
module.exports = function () {};
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function beep() {
|
|
||||||
process.stdout.write('\u0007');
|
|
||||||
}
|
|
||||||
|
|
||||||
function melodicalBeep(val, cb) {
|
|
||||||
if (val.length === 0) {
|
|
||||||
cb();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
if (val.shift() === '*') {
|
|
||||||
beep();
|
|
||||||
}
|
|
||||||
|
|
||||||
melodicalBeep(val, cb);
|
|
||||||
}, BEEP_DELAY);
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = function (val, cb) {
|
|
||||||
cb = cb || function () {};
|
|
||||||
|
|
||||||
if (val === parseInt(val)) {
|
|
||||||
if (val < 0) {
|
|
||||||
throw new TypeError('Negative numbers are not accepted');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (val === 0) {
|
|
||||||
cb();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0; i < val; i++) {
|
|
||||||
setTimeout(function (i) {
|
|
||||||
beep();
|
|
||||||
|
|
||||||
if (i === val - 1) {
|
|
||||||
cb();
|
|
||||||
}
|
|
||||||
}, BEEP_DELAY * i, i);
|
|
||||||
}
|
|
||||||
} else if (!val) {
|
|
||||||
beep();
|
|
||||||
cb();
|
|
||||||
} else if (typeof val === 'string') {
|
|
||||||
melodicalBeep(val.split(''), cb);
|
|
||||||
} else {
|
|
||||||
throw new TypeError('Not an accepted type');
|
|
||||||
}
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
||||||
|
|
||||||
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.
|
|
68
node_modules/gulp-concat/node_modules/gulp-util/node_modules/beeper/package.json
generated
vendored
68
node_modules/gulp-concat/node_modules/gulp-util/node_modules/beeper/package.json
generated
vendored
@ -1,68 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "beeper",
|
|
||||||
"version": "1.1.0",
|
|
||||||
"description": "Make your terminal beep",
|
|
||||||
"license": "MIT",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/sindresorhus/beeper"
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"name": "Sindre Sorhus",
|
|
||||||
"email": "sindresorhus@gmail.com",
|
|
||||||
"url": "sindresorhus.com"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "node test.js"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"keywords": [
|
|
||||||
"beep",
|
|
||||||
"beeper",
|
|
||||||
"boop",
|
|
||||||
"terminal",
|
|
||||||
"term",
|
|
||||||
"cli",
|
|
||||||
"console",
|
|
||||||
"ding",
|
|
||||||
"ping",
|
|
||||||
"alert",
|
|
||||||
"gulpfriendly"
|
|
||||||
],
|
|
||||||
"devDependencies": {
|
|
||||||
"hooker": "^0.2.3",
|
|
||||||
"tape": "^4.0.0"
|
|
||||||
},
|
|
||||||
"gitHead": "8beb0413a8028ca2d52dbb86c75f42069535591b",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/sindresorhus/beeper/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/sindresorhus/beeper",
|
|
||||||
"_id": "beeper@1.1.0",
|
|
||||||
"_shasum": "9ee6fc1ce7f54feaace7ce73588b056037866a2c",
|
|
||||||
"_from": "beeper@>=1.0.0 <2.0.0",
|
|
||||||
"_npmVersion": "2.10.1",
|
|
||||||
"_nodeVersion": "0.12.4",
|
|
||||||
"_npmUser": {
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"shasum": "9ee6fc1ce7f54feaace7ce73588b056037866a2c",
|
|
||||||
"tarball": "http://registry.npmjs.org/beeper/-/beeper-1.1.0.tgz"
|
|
||||||
},
|
|
||||||
"maintainers": [
|
|
||||||
{
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"directories": {},
|
|
||||||
"_resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.0.tgz",
|
|
||||||
"readme": "ERROR: No README data found!"
|
|
||||||
}
|
|
@ -1,55 +0,0 @@
|
|||||||
# beeper [![Build Status](https://travis-ci.org/sindresorhus/beeper.svg?branch=master)](https://travis-ci.org/sindresorhus/beeper)
|
|
||||||
|
|
||||||
> Make your terminal beep
|
|
||||||
|
|
||||||
![](https://cloud.githubusercontent.com/assets/170270/5261236/f8471100-7a49-11e4-81af-96cd09a522d9.gif)
|
|
||||||
|
|
||||||
Useful as an attention grabber e.g. when an error happens.
|
|
||||||
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```
|
|
||||||
$ npm install --save beeper
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
var beeper = require('beeper');
|
|
||||||
|
|
||||||
beeper();
|
|
||||||
// beep one time
|
|
||||||
|
|
||||||
beeper(3);
|
|
||||||
// beep three times
|
|
||||||
|
|
||||||
beeper('****-*-*');
|
|
||||||
// beep, beep, beep, beep, pause, beep, pause, beep
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## API
|
|
||||||
|
|
||||||
It will not beep if stdout is not TTY or if the user supplies the `--no-beep` flag.
|
|
||||||
|
|
||||||
### beeper([count|melody], [callback])
|
|
||||||
|
|
||||||
#### count
|
|
||||||
|
|
||||||
Type: `number`
|
|
||||||
Default: `1`
|
|
||||||
|
|
||||||
How many times you want it to beep.
|
|
||||||
|
|
||||||
#### melody
|
|
||||||
|
|
||||||
Type: `string`
|
|
||||||
|
|
||||||
Construct your own melody by supplying a string of `*` for beep `-` for pause.
|
|
||||||
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
|
@ -1,116 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
var escapeStringRegexp = require('escape-string-regexp');
|
|
||||||
var ansiStyles = require('ansi-styles');
|
|
||||||
var stripAnsi = require('strip-ansi');
|
|
||||||
var hasAnsi = require('has-ansi');
|
|
||||||
var supportsColor = require('supports-color');
|
|
||||||
var defineProps = Object.defineProperties;
|
|
||||||
var isSimpleWindowsTerm = process.platform === 'win32' && !/^xterm/i.test(process.env.TERM);
|
|
||||||
|
|
||||||
function Chalk(options) {
|
|
||||||
// detect mode if not set manually
|
|
||||||
this.enabled = !options || options.enabled === undefined ? supportsColor : options.enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
// use bright blue on Windows as the normal blue color is illegible
|
|
||||||
if (isSimpleWindowsTerm) {
|
|
||||||
ansiStyles.blue.open = '\u001b[94m';
|
|
||||||
}
|
|
||||||
|
|
||||||
var styles = (function () {
|
|
||||||
var ret = {};
|
|
||||||
|
|
||||||
Object.keys(ansiStyles).forEach(function (key) {
|
|
||||||
ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');
|
|
||||||
|
|
||||||
ret[key] = {
|
|
||||||
get: function () {
|
|
||||||
return build.call(this, this._styles.concat(key));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
})();
|
|
||||||
|
|
||||||
var proto = defineProps(function chalk() {}, styles);
|
|
||||||
|
|
||||||
function build(_styles) {
|
|
||||||
var builder = function builder() {
|
|
||||||
return applyStyle.apply(builder, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
builder._styles = _styles;
|
|
||||||
builder.enabled = this.enabled;
|
|
||||||
// __proto__ is used because we must return a function, but there is
|
|
||||||
// no way to create a function with a different prototype.
|
|
||||||
/*eslint no-proto: 0 */
|
|
||||||
builder.__proto__ = proto;
|
|
||||||
|
|
||||||
return builder;
|
|
||||||
}
|
|
||||||
|
|
||||||
function applyStyle() {
|
|
||||||
// support varags, but simply cast to string in case there's only one arg
|
|
||||||
var args = arguments;
|
|
||||||
var argsLen = args.length;
|
|
||||||
var str = argsLen !== 0 && String(arguments[0]);
|
|
||||||
|
|
||||||
if (argsLen > 1) {
|
|
||||||
// don't slice `arguments`, it prevents v8 optimizations
|
|
||||||
for (var a = 1; a < argsLen; a++) {
|
|
||||||
str += ' ' + args[a];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this.enabled || !str) {
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
var nestedStyles = this._styles;
|
|
||||||
var i = nestedStyles.length;
|
|
||||||
|
|
||||||
// Turns out that on Windows dimmed gray text becomes invisible in cmd.exe,
|
|
||||||
// see https://github.com/chalk/chalk/issues/58
|
|
||||||
// If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop.
|
|
||||||
var originalDim = ansiStyles.dim.open;
|
|
||||||
if (isSimpleWindowsTerm && (nestedStyles.indexOf('gray') !== -1 || nestedStyles.indexOf('grey') !== -1)) {
|
|
||||||
ansiStyles.dim.open = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
while (i--) {
|
|
||||||
var code = ansiStyles[nestedStyles[i]];
|
|
||||||
|
|
||||||
// Replace any instances already present with a re-opening code
|
|
||||||
// otherwise only the part of the string until said closing code
|
|
||||||
// will be colored, and the rest will simply be 'plain'.
|
|
||||||
str = code.open + str.replace(code.closeRe, code.open) + code.close;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset the original 'dim' if we changed it to work around the Windows dimmed gray issue.
|
|
||||||
ansiStyles.dim.open = originalDim;
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
function init() {
|
|
||||||
var ret = {};
|
|
||||||
|
|
||||||
Object.keys(styles).forEach(function (name) {
|
|
||||||
ret[name] = {
|
|
||||||
get: function () {
|
|
||||||
return build.call(this, [name]);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
defineProps(Chalk.prototype, init());
|
|
||||||
|
|
||||||
module.exports = new Chalk();
|
|
||||||
module.exports.styles = ansiStyles;
|
|
||||||
module.exports.hasColor = hasAnsi;
|
|
||||||
module.exports.stripColor = stripAnsi;
|
|
||||||
module.exports.supportsColor = supportsColor;
|
|
@ -1,21 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
||||||
|
|
||||||
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.
|
|
@ -1,65 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
function assembleStyles () {
|
|
||||||
var styles = {
|
|
||||||
modifiers: {
|
|
||||||
reset: [0, 0],
|
|
||||||
bold: [1, 22], // 21 isn't widely supported and 22 does the same thing
|
|
||||||
dim: [2, 22],
|
|
||||||
italic: [3, 23],
|
|
||||||
underline: [4, 24],
|
|
||||||
inverse: [7, 27],
|
|
||||||
hidden: [8, 28],
|
|
||||||
strikethrough: [9, 29]
|
|
||||||
},
|
|
||||||
colors: {
|
|
||||||
black: [30, 39],
|
|
||||||
red: [31, 39],
|
|
||||||
green: [32, 39],
|
|
||||||
yellow: [33, 39],
|
|
||||||
blue: [34, 39],
|
|
||||||
magenta: [35, 39],
|
|
||||||
cyan: [36, 39],
|
|
||||||
white: [37, 39],
|
|
||||||
gray: [90, 39]
|
|
||||||
},
|
|
||||||
bgColors: {
|
|
||||||
bgBlack: [40, 49],
|
|
||||||
bgRed: [41, 49],
|
|
||||||
bgGreen: [42, 49],
|
|
||||||
bgYellow: [43, 49],
|
|
||||||
bgBlue: [44, 49],
|
|
||||||
bgMagenta: [45, 49],
|
|
||||||
bgCyan: [46, 49],
|
|
||||||
bgWhite: [47, 49]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// fix humans
|
|
||||||
styles.colors.grey = styles.colors.gray;
|
|
||||||
|
|
||||||
Object.keys(styles).forEach(function (groupName) {
|
|
||||||
var group = styles[groupName];
|
|
||||||
|
|
||||||
Object.keys(group).forEach(function (styleName) {
|
|
||||||
var style = group[styleName];
|
|
||||||
|
|
||||||
styles[styleName] = group[styleName] = {
|
|
||||||
open: '\u001b[' + style[0] + 'm',
|
|
||||||
close: '\u001b[' + style[1] + 'm'
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
Object.defineProperty(styles, groupName, {
|
|
||||||
value: group,
|
|
||||||
enumerable: false
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
return styles;
|
|
||||||
}
|
|
||||||
|
|
||||||
Object.defineProperty(module, 'exports', {
|
|
||||||
enumerable: true,
|
|
||||||
get: assembleStyles
|
|
||||||
});
|
|
@ -1,21 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
||||||
|
|
||||||
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.
|
|
@ -1,80 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "ansi-styles",
|
|
||||||
"version": "2.1.0",
|
|
||||||
"description": "ANSI escape codes for styling strings in the terminal",
|
|
||||||
"license": "MIT",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/chalk/ansi-styles"
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"name": "Sindre Sorhus",
|
|
||||||
"email": "sindresorhus@gmail.com",
|
|
||||||
"url": "sindresorhus.com"
|
|
||||||
},
|
|
||||||
"maintainers": [
|
|
||||||
{
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "jbnicolai",
|
|
||||||
"email": "jappelman@xebia.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "mocha"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"keywords": [
|
|
||||||
"ansi",
|
|
||||||
"styles",
|
|
||||||
"color",
|
|
||||||
"colour",
|
|
||||||
"colors",
|
|
||||||
"terminal",
|
|
||||||
"console",
|
|
||||||
"cli",
|
|
||||||
"string",
|
|
||||||
"tty",
|
|
||||||
"escape",
|
|
||||||
"formatting",
|
|
||||||
"rgb",
|
|
||||||
"256",
|
|
||||||
"shell",
|
|
||||||
"xterm",
|
|
||||||
"log",
|
|
||||||
"logging",
|
|
||||||
"command-line",
|
|
||||||
"text"
|
|
||||||
],
|
|
||||||
"devDependencies": {
|
|
||||||
"mocha": "*"
|
|
||||||
},
|
|
||||||
"gitHead": "18421cbe4a2d93359ec2599a894f704be126d066",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/chalk/ansi-styles/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/chalk/ansi-styles",
|
|
||||||
"_id": "ansi-styles@2.1.0",
|
|
||||||
"_shasum": "990f747146927b559a932bf92959163d60c0d0e2",
|
|
||||||
"_from": "ansi-styles@>=2.1.0 <3.0.0",
|
|
||||||
"_npmVersion": "2.10.1",
|
|
||||||
"_nodeVersion": "0.12.4",
|
|
||||||
"_npmUser": {
|
|
||||||
"name": "jbnicolai",
|
|
||||||
"email": "jappelman@xebia.com"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"shasum": "990f747146927b559a932bf92959163d60c0d0e2",
|
|
||||||
"tarball": "http://registry.npmjs.org/ansi-styles/-/ansi-styles-2.1.0.tgz"
|
|
||||||
},
|
|
||||||
"directories": {},
|
|
||||||
"_resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.1.0.tgz",
|
|
||||||
"readme": "ERROR: No README data found!"
|
|
||||||
}
|
|
@ -1,86 +0,0 @@
|
|||||||
# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles)
|
|
||||||
|
|
||||||
> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal
|
|
||||||
|
|
||||||
You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings.
|
|
||||||
|
|
||||||
![](screenshot.png)
|
|
||||||
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```
|
|
||||||
$ npm install --save ansi-styles
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
var ansi = require('ansi-styles');
|
|
||||||
|
|
||||||
console.log(ansi.green.open + 'Hello world!' + ansi.green.close);
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## API
|
|
||||||
|
|
||||||
Each style has an `open` and `close` property.
|
|
||||||
|
|
||||||
|
|
||||||
## Styles
|
|
||||||
|
|
||||||
### Modifiers
|
|
||||||
|
|
||||||
- `reset`
|
|
||||||
- `bold`
|
|
||||||
- `dim`
|
|
||||||
- `italic` *(not widely supported)*
|
|
||||||
- `underline`
|
|
||||||
- `inverse`
|
|
||||||
- `hidden`
|
|
||||||
- `strikethrough` *(not widely supported)*
|
|
||||||
|
|
||||||
### Colors
|
|
||||||
|
|
||||||
- `black`
|
|
||||||
- `red`
|
|
||||||
- `green`
|
|
||||||
- `yellow`
|
|
||||||
- `blue`
|
|
||||||
- `magenta`
|
|
||||||
- `cyan`
|
|
||||||
- `white`
|
|
||||||
- `gray`
|
|
||||||
|
|
||||||
### Background colors
|
|
||||||
|
|
||||||
- `bgBlack`
|
|
||||||
- `bgRed`
|
|
||||||
- `bgGreen`
|
|
||||||
- `bgYellow`
|
|
||||||
- `bgBlue`
|
|
||||||
- `bgMagenta`
|
|
||||||
- `bgCyan`
|
|
||||||
- `bgWhite`
|
|
||||||
|
|
||||||
|
|
||||||
## Advanced usage
|
|
||||||
|
|
||||||
By default you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module.
|
|
||||||
|
|
||||||
- `ansi.modifiers`
|
|
||||||
- `ansi.colors`
|
|
||||||
- `ansi.bgColors`
|
|
||||||
|
|
||||||
|
|
||||||
###### Example
|
|
||||||
|
|
||||||
```js
|
|
||||||
console.log(ansi.colors.green.open);
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
|
@ -1,11 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;
|
|
||||||
|
|
||||||
module.exports = function (str) {
|
|
||||||
if (typeof str !== 'string') {
|
|
||||||
throw new TypeError('Expected a string');
|
|
||||||
}
|
|
||||||
|
|
||||||
return str.replace(matchOperatorsRe, '\\$&');
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
||||||
|
|
||||||
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.
|
|
@ -1,70 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "escape-string-regexp",
|
|
||||||
"version": "1.0.3",
|
|
||||||
"description": "Escape RegExp special characters",
|
|
||||||
"license": "MIT",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/sindresorhus/escape-string-regexp"
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"name": "Sindre Sorhus",
|
|
||||||
"email": "sindresorhus@gmail.com",
|
|
||||||
"url": "http://sindresorhus.com"
|
|
||||||
},
|
|
||||||
"maintainers": [
|
|
||||||
{
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "jbnicolai",
|
|
||||||
"email": "jappelman@xebia.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.8.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "mocha"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"keywords": [
|
|
||||||
"regex",
|
|
||||||
"regexp",
|
|
||||||
"re",
|
|
||||||
"regular",
|
|
||||||
"expression",
|
|
||||||
"escape",
|
|
||||||
"string",
|
|
||||||
"str",
|
|
||||||
"special",
|
|
||||||
"characters"
|
|
||||||
],
|
|
||||||
"devDependencies": {
|
|
||||||
"mocha": "*"
|
|
||||||
},
|
|
||||||
"gitHead": "1e446e6b4449b5f1f8868cd31bf8fd25ee37fb4b",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/sindresorhus/escape-string-regexp/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/sindresorhus/escape-string-regexp",
|
|
||||||
"_id": "escape-string-regexp@1.0.3",
|
|
||||||
"_shasum": "9e2d8b25bc2555c3336723750e03f099c2735bb5",
|
|
||||||
"_from": "escape-string-regexp@>=1.0.2 <2.0.0",
|
|
||||||
"_npmVersion": "2.1.16",
|
|
||||||
"_nodeVersion": "0.10.35",
|
|
||||||
"_npmUser": {
|
|
||||||
"name": "jbnicolai",
|
|
||||||
"email": "jappelman@xebia.com"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"shasum": "9e2d8b25bc2555c3336723750e03f099c2735bb5",
|
|
||||||
"tarball": "http://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
|
|
||||||
},
|
|
||||||
"directories": {},
|
|
||||||
"_resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz",
|
|
||||||
"readme": "ERROR: No README data found!"
|
|
||||||
}
|
|
@ -1,27 +0,0 @@
|
|||||||
# escape-string-regexp [![Build Status](https://travis-ci.org/sindresorhus/escape-string-regexp.svg?branch=master)](https://travis-ci.org/sindresorhus/escape-string-regexp)
|
|
||||||
|
|
||||||
> Escape RegExp special characters
|
|
||||||
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ npm install --save escape-string-regexp
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
var escapeStringRegexp = require('escape-string-regexp');
|
|
||||||
|
|
||||||
var escapedString = escapeStringRegexp('how much $ for a unicorn?');
|
|
||||||
//=> how much \$ for a unicorn\?
|
|
||||||
|
|
||||||
new RegExp(escapedString);
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
|
@ -1,4 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
var ansiRegex = require('ansi-regex');
|
|
||||||
var re = new RegExp(ansiRegex().source); // remove the `g` flag
|
|
||||||
module.exports = re.test.bind(re);
|
|
@ -1,21 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
||||||
|
|
||||||
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.
|
|
@ -1,4 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
module.exports = function () {
|
|
||||||
return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
||||||
|
|
||||||
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.
|
|
@ -1,86 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "ansi-regex",
|
|
||||||
"version": "2.0.0",
|
|
||||||
"description": "Regular expression for matching ANSI escape codes",
|
|
||||||
"license": "MIT",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/sindresorhus/ansi-regex"
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"name": "Sindre Sorhus",
|
|
||||||
"email": "sindresorhus@gmail.com",
|
|
||||||
"url": "sindresorhus.com"
|
|
||||||
},
|
|
||||||
"maintainers": [
|
|
||||||
{
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "jbnicolai",
|
|
||||||
"email": "jappelman@xebia.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "mocha test/test.js",
|
|
||||||
"view-supported": "node test/viewCodes.js"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"keywords": [
|
|
||||||
"ansi",
|
|
||||||
"styles",
|
|
||||||
"color",
|
|
||||||
"colour",
|
|
||||||
"colors",
|
|
||||||
"terminal",
|
|
||||||
"console",
|
|
||||||
"cli",
|
|
||||||
"string",
|
|
||||||
"tty",
|
|
||||||
"escape",
|
|
||||||
"formatting",
|
|
||||||
"rgb",
|
|
||||||
"256",
|
|
||||||
"shell",
|
|
||||||
"xterm",
|
|
||||||
"command-line",
|
|
||||||
"text",
|
|
||||||
"regex",
|
|
||||||
"regexp",
|
|
||||||
"re",
|
|
||||||
"match",
|
|
||||||
"test",
|
|
||||||
"find",
|
|
||||||
"pattern"
|
|
||||||
],
|
|
||||||
"devDependencies": {
|
|
||||||
"mocha": "*"
|
|
||||||
},
|
|
||||||
"gitHead": "57c3f2941a73079fa8b081e02a522e3d29913e2f",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/sindresorhus/ansi-regex/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/sindresorhus/ansi-regex",
|
|
||||||
"_id": "ansi-regex@2.0.0",
|
|
||||||
"_shasum": "c5061b6e0ef8a81775e50f5d66151bf6bf371107",
|
|
||||||
"_from": "ansi-regex@>=2.0.0 <3.0.0",
|
|
||||||
"_npmVersion": "2.11.2",
|
|
||||||
"_nodeVersion": "0.12.5",
|
|
||||||
"_npmUser": {
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"shasum": "c5061b6e0ef8a81775e50f5d66151bf6bf371107",
|
|
||||||
"tarball": "http://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz"
|
|
||||||
},
|
|
||||||
"directories": {},
|
|
||||||
"_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
|
|
||||||
"readme": "ERROR: No README data found!"
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
# ansi-regex [![Build Status](https://travis-ci.org/sindresorhus/ansi-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/ansi-regex)
|
|
||||||
|
|
||||||
> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
|
|
||||||
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```
|
|
||||||
$ npm install --save ansi-regex
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
var ansiRegex = require('ansi-regex');
|
|
||||||
|
|
||||||
ansiRegex().test('\u001b[4mcake\u001b[0m');
|
|
||||||
//=> true
|
|
||||||
|
|
||||||
ansiRegex().test('cake');
|
|
||||||
//=> false
|
|
||||||
|
|
||||||
'\u001b[4mcake\u001b[0m'.match(ansiRegex());
|
|
||||||
//=> ['\u001b[4m', '\u001b[0m']
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
|
@ -1,85 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "has-ansi",
|
|
||||||
"version": "2.0.0",
|
|
||||||
"description": "Check if a string has ANSI escape codes",
|
|
||||||
"license": "MIT",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/sindresorhus/has-ansi"
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"name": "Sindre Sorhus",
|
|
||||||
"email": "sindresorhus@gmail.com",
|
|
||||||
"url": "sindresorhus.com"
|
|
||||||
},
|
|
||||||
"maintainers": [
|
|
||||||
{
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "jbnicolai",
|
|
||||||
"email": "jappelman@xebia.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "node test.js"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"keywords": [
|
|
||||||
"ansi",
|
|
||||||
"styles",
|
|
||||||
"color",
|
|
||||||
"colour",
|
|
||||||
"colors",
|
|
||||||
"terminal",
|
|
||||||
"console",
|
|
||||||
"string",
|
|
||||||
"tty",
|
|
||||||
"escape",
|
|
||||||
"shell",
|
|
||||||
"xterm",
|
|
||||||
"command-line",
|
|
||||||
"text",
|
|
||||||
"regex",
|
|
||||||
"regexp",
|
|
||||||
"re",
|
|
||||||
"match",
|
|
||||||
"test",
|
|
||||||
"find",
|
|
||||||
"pattern",
|
|
||||||
"has"
|
|
||||||
],
|
|
||||||
"dependencies": {
|
|
||||||
"ansi-regex": "^2.0.0"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"ava": "0.0.4"
|
|
||||||
},
|
|
||||||
"gitHead": "0722275e1bef139fcd09137da6e5550c3cd368b9",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/sindresorhus/has-ansi/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/sindresorhus/has-ansi",
|
|
||||||
"_id": "has-ansi@2.0.0",
|
|
||||||
"_shasum": "34f5049ce1ecdf2b0649af3ef24e45ed35416d91",
|
|
||||||
"_from": "has-ansi@>=2.0.0 <3.0.0",
|
|
||||||
"_npmVersion": "2.11.2",
|
|
||||||
"_nodeVersion": "0.12.5",
|
|
||||||
"_npmUser": {
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"shasum": "34f5049ce1ecdf2b0649af3ef24e45ed35416d91",
|
|
||||||
"tarball": "http://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz"
|
|
||||||
},
|
|
||||||
"directories": {},
|
|
||||||
"_resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
|
|
||||||
"readme": "ERROR: No README data found!"
|
|
||||||
}
|
|
@ -1,36 +0,0 @@
|
|||||||
# has-ansi [![Build Status](https://travis-ci.org/sindresorhus/has-ansi.svg?branch=master)](https://travis-ci.org/sindresorhus/has-ansi)
|
|
||||||
|
|
||||||
> Check if a string has [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
|
|
||||||
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```
|
|
||||||
$ npm install --save has-ansi
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
var hasAnsi = require('has-ansi');
|
|
||||||
|
|
||||||
hasAnsi('\u001b[4mcake\u001b[0m');
|
|
||||||
//=> true
|
|
||||||
|
|
||||||
hasAnsi('cake');
|
|
||||||
//=> false
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Related
|
|
||||||
|
|
||||||
- [has-ansi-cli](https://github.com/sindresorhus/has-ansi-cli) - CLI for this module
|
|
||||||
- [strip-ansi](https://github.com/sindresorhus/strip-ansi) - Strip ANSI escape codes
|
|
||||||
- [ansi-regex](https://github.com/sindresorhus/ansi-regex) - Regular expression for matching ANSI escape codes
|
|
||||||
- [chalk](https://github.com/sindresorhus/chalk) - Terminal string styling done right
|
|
||||||
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
|
@ -1,6 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
var ansiRegex = require('ansi-regex')();
|
|
||||||
|
|
||||||
module.exports = function (str) {
|
|
||||||
return typeof str === 'string' ? str.replace(ansiRegex, '') : str;
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
||||||
|
|
||||||
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.
|
|
@ -1,4 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
module.exports = function () {
|
|
||||||
return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
||||||
|
|
||||||
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.
|
|
@ -1,86 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "ansi-regex",
|
|
||||||
"version": "2.0.0",
|
|
||||||
"description": "Regular expression for matching ANSI escape codes",
|
|
||||||
"license": "MIT",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/sindresorhus/ansi-regex"
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"name": "Sindre Sorhus",
|
|
||||||
"email": "sindresorhus@gmail.com",
|
|
||||||
"url": "sindresorhus.com"
|
|
||||||
},
|
|
||||||
"maintainers": [
|
|
||||||
{
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "jbnicolai",
|
|
||||||
"email": "jappelman@xebia.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "mocha test/test.js",
|
|
||||||
"view-supported": "node test/viewCodes.js"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"keywords": [
|
|
||||||
"ansi",
|
|
||||||
"styles",
|
|
||||||
"color",
|
|
||||||
"colour",
|
|
||||||
"colors",
|
|
||||||
"terminal",
|
|
||||||
"console",
|
|
||||||
"cli",
|
|
||||||
"string",
|
|
||||||
"tty",
|
|
||||||
"escape",
|
|
||||||
"formatting",
|
|
||||||
"rgb",
|
|
||||||
"256",
|
|
||||||
"shell",
|
|
||||||
"xterm",
|
|
||||||
"command-line",
|
|
||||||
"text",
|
|
||||||
"regex",
|
|
||||||
"regexp",
|
|
||||||
"re",
|
|
||||||
"match",
|
|
||||||
"test",
|
|
||||||
"find",
|
|
||||||
"pattern"
|
|
||||||
],
|
|
||||||
"devDependencies": {
|
|
||||||
"mocha": "*"
|
|
||||||
},
|
|
||||||
"gitHead": "57c3f2941a73079fa8b081e02a522e3d29913e2f",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/sindresorhus/ansi-regex/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/sindresorhus/ansi-regex",
|
|
||||||
"_id": "ansi-regex@2.0.0",
|
|
||||||
"_shasum": "c5061b6e0ef8a81775e50f5d66151bf6bf371107",
|
|
||||||
"_from": "ansi-regex@>=2.0.0 <3.0.0",
|
|
||||||
"_npmVersion": "2.11.2",
|
|
||||||
"_nodeVersion": "0.12.5",
|
|
||||||
"_npmUser": {
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"shasum": "c5061b6e0ef8a81775e50f5d66151bf6bf371107",
|
|
||||||
"tarball": "http://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz"
|
|
||||||
},
|
|
||||||
"directories": {},
|
|
||||||
"_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
|
|
||||||
"readme": "ERROR: No README data found!"
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
# ansi-regex [![Build Status](https://travis-ci.org/sindresorhus/ansi-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/ansi-regex)
|
|
||||||
|
|
||||||
> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
|
|
||||||
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```
|
|
||||||
$ npm install --save ansi-regex
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
var ansiRegex = require('ansi-regex');
|
|
||||||
|
|
||||||
ansiRegex().test('\u001b[4mcake\u001b[0m');
|
|
||||||
//=> true
|
|
||||||
|
|
||||||
ansiRegex().test('cake');
|
|
||||||
//=> false
|
|
||||||
|
|
||||||
'\u001b[4mcake\u001b[0m'.match(ansiRegex());
|
|
||||||
//=> ['\u001b[4m', '\u001b[0m']
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
|
@ -1,85 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "strip-ansi",
|
|
||||||
"version": "3.0.0",
|
|
||||||
"description": "Strip ANSI escape codes",
|
|
||||||
"license": "MIT",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/sindresorhus/strip-ansi"
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"name": "Sindre Sorhus",
|
|
||||||
"email": "sindresorhus@gmail.com",
|
|
||||||
"url": "sindresorhus.com"
|
|
||||||
},
|
|
||||||
"maintainers": [
|
|
||||||
{
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "jbnicolai",
|
|
||||||
"email": "jappelman@xebia.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "node test.js"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"keywords": [
|
|
||||||
"strip",
|
|
||||||
"trim",
|
|
||||||
"remove",
|
|
||||||
"ansi",
|
|
||||||
"styles",
|
|
||||||
"color",
|
|
||||||
"colour",
|
|
||||||
"colors",
|
|
||||||
"terminal",
|
|
||||||
"console",
|
|
||||||
"string",
|
|
||||||
"tty",
|
|
||||||
"escape",
|
|
||||||
"formatting",
|
|
||||||
"rgb",
|
|
||||||
"256",
|
|
||||||
"shell",
|
|
||||||
"xterm",
|
|
||||||
"log",
|
|
||||||
"logging",
|
|
||||||
"command-line",
|
|
||||||
"text"
|
|
||||||
],
|
|
||||||
"dependencies": {
|
|
||||||
"ansi-regex": "^2.0.0"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"ava": "0.0.4"
|
|
||||||
},
|
|
||||||
"gitHead": "3f05b9810e1438f946e2eb84ee854cc00b972e9e",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/sindresorhus/strip-ansi/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/sindresorhus/strip-ansi",
|
|
||||||
"_id": "strip-ansi@3.0.0",
|
|
||||||
"_shasum": "7510b665567ca914ccb5d7e072763ac968be3724",
|
|
||||||
"_from": "strip-ansi@>=3.0.0 <4.0.0",
|
|
||||||
"_npmVersion": "2.11.2",
|
|
||||||
"_nodeVersion": "0.12.5",
|
|
||||||
"_npmUser": {
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"shasum": "7510b665567ca914ccb5d7e072763ac968be3724",
|
|
||||||
"tarball": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz"
|
|
||||||
},
|
|
||||||
"directories": {},
|
|
||||||
"_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz",
|
|
||||||
"readme": "ERROR: No README data found!"
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
# strip-ansi [![Build Status](https://travis-ci.org/sindresorhus/strip-ansi.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-ansi)
|
|
||||||
|
|
||||||
> Strip [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
|
|
||||||
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```
|
|
||||||
$ npm install --save strip-ansi
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
var stripAnsi = require('strip-ansi');
|
|
||||||
|
|
||||||
stripAnsi('\u001b[4mcake\u001b[0m');
|
|
||||||
//=> 'cake'
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Related
|
|
||||||
|
|
||||||
- [strip-ansi-cli](https://github.com/sindresorhus/strip-ansi-cli) - CLI for this module
|
|
||||||
- [has-ansi](https://github.com/sindresorhus/has-ansi) - Check if a string has ANSI escape codes
|
|
||||||
- [ansi-regex](https://github.com/sindresorhus/ansi-regex) - Regular expression for matching ANSI escape codes
|
|
||||||
- [chalk](https://github.com/sindresorhus/chalk) - Terminal string styling done right
|
|
||||||
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
|
@ -1,50 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
var argv = process.argv;
|
|
||||||
|
|
||||||
var terminator = argv.indexOf('--');
|
|
||||||
var hasFlag = function (flag) {
|
|
||||||
flag = '--' + flag;
|
|
||||||
var pos = argv.indexOf(flag);
|
|
||||||
return pos !== -1 && (terminator !== -1 ? pos < terminator : true);
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = (function () {
|
|
||||||
if ('FORCE_COLOR' in process.env) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasFlag('no-color') ||
|
|
||||||
hasFlag('no-colors') ||
|
|
||||||
hasFlag('color=false')) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasFlag('color') ||
|
|
||||||
hasFlag('colors') ||
|
|
||||||
hasFlag('color=true') ||
|
|
||||||
hasFlag('color=always')) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (process.stdout && !process.stdout.isTTY) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (process.platform === 'win32') {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ('COLORTERM' in process.env) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (process.env.TERM === 'dumb') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
})();
|
|
@ -1,21 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
||||||
|
|
||||||
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.
|
|
@ -1,79 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "supports-color",
|
|
||||||
"version": "2.0.0",
|
|
||||||
"description": "Detect whether a terminal supports color",
|
|
||||||
"license": "MIT",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/chalk/supports-color"
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"name": "Sindre Sorhus",
|
|
||||||
"email": "sindresorhus@gmail.com",
|
|
||||||
"url": "sindresorhus.com"
|
|
||||||
},
|
|
||||||
"maintainers": [
|
|
||||||
{
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "jbnicolai",
|
|
||||||
"email": "jappelman@xebia.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.8.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "mocha"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"keywords": [
|
|
||||||
"color",
|
|
||||||
"colour",
|
|
||||||
"colors",
|
|
||||||
"terminal",
|
|
||||||
"console",
|
|
||||||
"cli",
|
|
||||||
"ansi",
|
|
||||||
"styles",
|
|
||||||
"tty",
|
|
||||||
"rgb",
|
|
||||||
"256",
|
|
||||||
"shell",
|
|
||||||
"xterm",
|
|
||||||
"command-line",
|
|
||||||
"support",
|
|
||||||
"supports",
|
|
||||||
"capability",
|
|
||||||
"detect"
|
|
||||||
],
|
|
||||||
"devDependencies": {
|
|
||||||
"mocha": "*",
|
|
||||||
"require-uncached": "^1.0.2"
|
|
||||||
},
|
|
||||||
"gitHead": "8400d98ade32b2adffd50902c06d9e725a5c6588",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/chalk/supports-color/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/chalk/supports-color",
|
|
||||||
"_id": "supports-color@2.0.0",
|
|
||||||
"_shasum": "535d045ce6b6363fa40117084629995e9df324c7",
|
|
||||||
"_from": "supports-color@>=2.0.0 <3.0.0",
|
|
||||||
"_npmVersion": "2.11.2",
|
|
||||||
"_nodeVersion": "0.12.5",
|
|
||||||
"_npmUser": {
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"shasum": "535d045ce6b6363fa40117084629995e9df324c7",
|
|
||||||
"tarball": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"
|
|
||||||
},
|
|
||||||
"directories": {},
|
|
||||||
"_resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
|
|
||||||
"readme": "ERROR: No README data found!"
|
|
||||||
}
|
|
@ -1,36 +0,0 @@
|
|||||||
# supports-color [![Build Status](https://travis-ci.org/chalk/supports-color.svg?branch=master)](https://travis-ci.org/chalk/supports-color)
|
|
||||||
|
|
||||||
> Detect whether a terminal supports color
|
|
||||||
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```
|
|
||||||
$ npm install --save supports-color
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```js
|
|
||||||
var supportsColor = require('supports-color');
|
|
||||||
|
|
||||||
if (supportsColor) {
|
|
||||||
console.log('Terminal supports color');
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
It obeys the `--color` and `--no-color` CLI flags.
|
|
||||||
|
|
||||||
For situations where using `--color` is not possible, add an environment variable `FORCE_COLOR` with any value to force color. Trumps `--no-color`.
|
|
||||||
|
|
||||||
|
|
||||||
## Related
|
|
||||||
|
|
||||||
- [supports-color-cli](https://github.com/chalk/supports-color-cli) - CLI for this module
|
|
||||||
- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right
|
|
||||||
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
|
96
node_modules/gulp-concat/node_modules/gulp-util/node_modules/chalk/package.json
generated
vendored
96
node_modules/gulp-concat/node_modules/gulp-util/node_modules/chalk/package.json
generated
vendored
@ -1,96 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "chalk",
|
|
||||||
"version": "1.1.0",
|
|
||||||
"description": "Terminal string styling done right. Much color.",
|
|
||||||
"license": "MIT",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/chalk/chalk"
|
|
||||||
},
|
|
||||||
"maintainers": [
|
|
||||||
{
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "jbnicolai",
|
|
||||||
"email": "jappelman@xebia.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "unicorn",
|
|
||||||
"email": "sindresorhus+unicorn@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "mocha",
|
|
||||||
"bench": "matcha benchmark.js",
|
|
||||||
"coverage": "nyc npm test && nyc report",
|
|
||||||
"coveralls": "nyc npm test && nyc report --reporter=text-lcov | coveralls"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"keywords": [
|
|
||||||
"color",
|
|
||||||
"colour",
|
|
||||||
"colors",
|
|
||||||
"terminal",
|
|
||||||
"console",
|
|
||||||
"cli",
|
|
||||||
"string",
|
|
||||||
"str",
|
|
||||||
"ansi",
|
|
||||||
"style",
|
|
||||||
"styles",
|
|
||||||
"tty",
|
|
||||||
"formatting",
|
|
||||||
"rgb",
|
|
||||||
"256",
|
|
||||||
"shell",
|
|
||||||
"xterm",
|
|
||||||
"log",
|
|
||||||
"logging",
|
|
||||||
"command-line",
|
|
||||||
"text"
|
|
||||||
],
|
|
||||||
"dependencies": {
|
|
||||||
"ansi-styles": "^2.1.0",
|
|
||||||
"escape-string-regexp": "^1.0.2",
|
|
||||||
"has-ansi": "^2.0.0",
|
|
||||||
"strip-ansi": "^3.0.0",
|
|
||||||
"supports-color": "^2.0.0"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"coveralls": "^2.11.2",
|
|
||||||
"matcha": "^0.6.0",
|
|
||||||
"mocha": "*",
|
|
||||||
"nyc": "^3.0.0",
|
|
||||||
"require-uncached": "^1.0.2",
|
|
||||||
"resolve-from": "^1.0.0",
|
|
||||||
"semver": "^4.3.3"
|
|
||||||
},
|
|
||||||
"gitHead": "e9bb6e6000b1c5d4508afabfdc85dd70f582f515",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/chalk/chalk/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/chalk/chalk",
|
|
||||||
"_id": "chalk@1.1.0",
|
|
||||||
"_shasum": "09b453cec497a75520e4a60ae48214a8700e0921",
|
|
||||||
"_from": "chalk@>=1.0.0 <2.0.0",
|
|
||||||
"_npmVersion": "2.10.1",
|
|
||||||
"_nodeVersion": "0.12.4",
|
|
||||||
"_npmUser": {
|
|
||||||
"name": "jbnicolai",
|
|
||||||
"email": "jappelman@xebia.com"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"shasum": "09b453cec497a75520e4a60ae48214a8700e0921",
|
|
||||||
"tarball": "http://registry.npmjs.org/chalk/-/chalk-1.1.0.tgz"
|
|
||||||
},
|
|
||||||
"directories": {},
|
|
||||||
"_resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.0.tgz",
|
|
||||||
"readme": "ERROR: No README data found!"
|
|
||||||
}
|
|
@ -1,212 +0,0 @@
|
|||||||
<h1 align="center">
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<img width="360" src="https://cdn.rawgit.com/chalk/chalk/19935d6484811c5e468817f846b7b3d417d7bf4a/logo.svg" alt="chalk">
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
</h1>
|
|
||||||
|
|
||||||
> Terminal string styling done right
|
|
||||||
|
|
||||||
[![Build Status](https://travis-ci.org/chalk/chalk.svg?branch=master)](https://travis-ci.org/chalk/chalk)
|
|
||||||
[![Coverage Status](https://coveralls.io/repos/chalk/chalk/badge.svg?branch=master)](https://coveralls.io/r/chalk/chalk?branch=master)
|
|
||||||
[![](http://img.shields.io/badge/unicorn-approved-ff69b4.svg)](https://www.youtube.com/watch?v=9auOCbH5Ns4)
|
|
||||||
|
|
||||||
|
|
||||||
[colors.js](https://github.com/Marak/colors.js) used to be the most popular string styling module, but it has serious deficiencies like extending `String.prototype` which causes all kinds of [problems](https://github.com/yeoman/yo/issues/68). Although there are other ones, they either do too much or not enough.
|
|
||||||
|
|
||||||
**Chalk is a clean and focused alternative.**
|
|
||||||
|
|
||||||
![](https://github.com/chalk/ansi-styles/raw/master/screenshot.png)
|
|
||||||
|
|
||||||
|
|
||||||
## Why
|
|
||||||
|
|
||||||
- Highly performant
|
|
||||||
- Doesn't extend `String.prototype`
|
|
||||||
- Expressive API
|
|
||||||
- Ability to nest styles
|
|
||||||
- Clean and focused
|
|
||||||
- Auto-detects color support
|
|
||||||
- Actively maintained
|
|
||||||
- [Used by ~4000 modules](https://www.npmjs.com/browse/depended/chalk) as of May 24, 2015
|
|
||||||
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```
|
|
||||||
$ npm install --save chalk
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
Chalk comes with an easy to use composable API where you just chain and nest the styles you want.
|
|
||||||
|
|
||||||
```js
|
|
||||||
var chalk = require('chalk');
|
|
||||||
|
|
||||||
// style a string
|
|
||||||
chalk.blue('Hello world!');
|
|
||||||
|
|
||||||
// combine styled and normal strings
|
|
||||||
chalk.blue('Hello') + 'World' + chalk.red('!');
|
|
||||||
|
|
||||||
// compose multiple styles using the chainable API
|
|
||||||
chalk.blue.bgRed.bold('Hello world!');
|
|
||||||
|
|
||||||
// pass in multiple arguments
|
|
||||||
chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz');
|
|
||||||
|
|
||||||
// nest styles
|
|
||||||
chalk.red('Hello', chalk.underline.bgBlue('world') + '!');
|
|
||||||
|
|
||||||
// nest styles of the same type even (color, underline, background)
|
|
||||||
chalk.green(
|
|
||||||
'I am a green line ' +
|
|
||||||
chalk.blue.underline.bold('with a blue substring') +
|
|
||||||
' that becomes green again!'
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
Easily define your own themes.
|
|
||||||
|
|
||||||
```js
|
|
||||||
var chalk = require('chalk');
|
|
||||||
var error = chalk.bold.red;
|
|
||||||
console.log(error('Error!'));
|
|
||||||
```
|
|
||||||
|
|
||||||
Take advantage of console.log [string substitution](http://nodejs.org/docs/latest/api/console.html#console_console_log_data).
|
|
||||||
|
|
||||||
```js
|
|
||||||
var name = 'Sindre';
|
|
||||||
console.log(chalk.green('Hello %s'), name);
|
|
||||||
//=> Hello Sindre
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## API
|
|
||||||
|
|
||||||
### chalk.`<style>[.<style>...](string, [string...])`
|
|
||||||
|
|
||||||
Example: `chalk.red.bold.underline('Hello', 'world');`
|
|
||||||
|
|
||||||
Chain [styles](#styles) and call the last one as a method with a string argument. Order doesn't matter, and later styles take precedent in case of a conflict. This simply means that `Chalk.red.yellow.green` is equivalent to `Chalk.green`.
|
|
||||||
|
|
||||||
Multiple arguments will be separated by space.
|
|
||||||
|
|
||||||
### chalk.enabled
|
|
||||||
|
|
||||||
Color support is automatically detected, but you can override it by setting the `enabled` property. You should however only do this in your own code as it applies globally to all chalk consumers.
|
|
||||||
|
|
||||||
If you need to change this in a reusable module create a new instance:
|
|
||||||
|
|
||||||
```js
|
|
||||||
var ctx = new chalk.constructor({enabled: false});
|
|
||||||
```
|
|
||||||
|
|
||||||
### chalk.supportsColor
|
|
||||||
|
|
||||||
Detect whether the terminal [supports color](https://github.com/chalk/supports-color). Used internally and handled for you, but exposed for convenience.
|
|
||||||
|
|
||||||
Can be overridden by the user with the flags `--color` and `--no-color`. For situations where using `--color` is not possible, add an environment variable `FORCE_COLOR` with any value to force color. Trumps `--no-color`.
|
|
||||||
|
|
||||||
### chalk.styles
|
|
||||||
|
|
||||||
Exposes the styles as [ANSI escape codes](https://github.com/chalk/ansi-styles).
|
|
||||||
|
|
||||||
Generally not useful, but you might need just the `.open` or `.close` escape code if you're mixing externally styled strings with your own.
|
|
||||||
|
|
||||||
```js
|
|
||||||
var chalk = require('chalk');
|
|
||||||
|
|
||||||
console.log(chalk.styles.red);
|
|
||||||
//=> {open: '\u001b[31m', close: '\u001b[39m'}
|
|
||||||
|
|
||||||
console.log(chalk.styles.red.open + 'Hello' + chalk.styles.red.close);
|
|
||||||
```
|
|
||||||
|
|
||||||
### chalk.hasColor(string)
|
|
||||||
|
|
||||||
Check whether a string [has color](https://github.com/chalk/has-ansi).
|
|
||||||
|
|
||||||
### chalk.stripColor(string)
|
|
||||||
|
|
||||||
[Strip color](https://github.com/chalk/strip-ansi) from a string.
|
|
||||||
|
|
||||||
Can be useful in combination with `.supportsColor` to strip color on externally styled text when it's not supported.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```js
|
|
||||||
var chalk = require('chalk');
|
|
||||||
var styledString = getText();
|
|
||||||
|
|
||||||
if (!chalk.supportsColor) {
|
|
||||||
styledString = chalk.stripColor(styledString);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Styles
|
|
||||||
|
|
||||||
### Modifiers
|
|
||||||
|
|
||||||
- `reset`
|
|
||||||
- `bold`
|
|
||||||
- `dim`
|
|
||||||
- `italic` *(not widely supported)*
|
|
||||||
- `underline`
|
|
||||||
- `inverse`
|
|
||||||
- `hidden`
|
|
||||||
- `strikethrough` *(not widely supported)*
|
|
||||||
|
|
||||||
### Colors
|
|
||||||
|
|
||||||
- `black`
|
|
||||||
- `red`
|
|
||||||
- `green`
|
|
||||||
- `yellow`
|
|
||||||
- `blue` *(on Windows the bright version is used as normal blue is illegible)*
|
|
||||||
- `magenta`
|
|
||||||
- `cyan`
|
|
||||||
- `white`
|
|
||||||
- `gray`
|
|
||||||
|
|
||||||
### Background colors
|
|
||||||
|
|
||||||
- `bgBlack`
|
|
||||||
- `bgRed`
|
|
||||||
- `bgGreen`
|
|
||||||
- `bgYellow`
|
|
||||||
- `bgBlue`
|
|
||||||
- `bgMagenta`
|
|
||||||
- `bgCyan`
|
|
||||||
- `bgWhite`
|
|
||||||
|
|
||||||
|
|
||||||
## 256-colors
|
|
||||||
|
|
||||||
Chalk does not support support anything other than the base eight colors, which guarantees it will work on all terminals and systems. Some terminals, specifically `xterm` compliant ones, will support the full range of 8-bit colors. For this the lower level [ansi-256-colors](https://github.com/jbnicolai/ansi-256-colors) package can be used.
|
|
||||||
|
|
||||||
|
|
||||||
## Windows
|
|
||||||
|
|
||||||
If you're on Windows, do yourself a favor and use [`cmder`](http://bliker.github.io/cmder/) instead of `cmd.exe`.
|
|
||||||
|
|
||||||
|
|
||||||
## Related
|
|
||||||
|
|
||||||
- [chalk-cli](https://github.com/chalk/chalk-cli) - CLI for this module
|
|
||||||
- [ansi-styles](https://github.com/chalk/ansi-styles/) - ANSI escape codes for styling strings in the terminal
|
|
||||||
- [supports-color](https://github.com/chalk/supports-color/) - Detect whether a terminal supports color
|
|
||||||
- [strip-ansi](https://github.com/chalk/strip-ansi) - Strip ANSI escape codes
|
|
||||||
- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes
|
|
||||||
- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes
|
|
||||||
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
|
57
node_modules/gulp-concat/node_modules/gulp-util/node_modules/dateformat/.npmignore
generated
vendored
57
node_modules/gulp-concat/node_modules/gulp-util/node_modules/dateformat/.npmignore
generated
vendored
@ -1,57 +0,0 @@
|
|||||||
# .gitignore <https://github.com/tunnckoCore/dotfiles>
|
|
||||||
#
|
|
||||||
# Copyright (c) 2014 Charlike Mike Reagent, contributors.
|
|
||||||
# Released under the MIT license.
|
|
||||||
#
|
|
||||||
|
|
||||||
# Always-ignore dirs #
|
|
||||||
# ####################
|
|
||||||
_gh_pages
|
|
||||||
node_modules
|
|
||||||
bower_components
|
|
||||||
components
|
|
||||||
vendor
|
|
||||||
build
|
|
||||||
dest
|
|
||||||
dist
|
|
||||||
src
|
|
||||||
lib-cov
|
|
||||||
coverage
|
|
||||||
nbproject
|
|
||||||
cache
|
|
||||||
temp
|
|
||||||
tmp
|
|
||||||
|
|
||||||
# Packages #
|
|
||||||
# ##########
|
|
||||||
*.7z
|
|
||||||
*.dmg
|
|
||||||
*.gz
|
|
||||||
*.iso
|
|
||||||
*.jar
|
|
||||||
*.rar
|
|
||||||
*.tar
|
|
||||||
*.zip
|
|
||||||
|
|
||||||
# OS, Logs and databases #
|
|
||||||
# #########################
|
|
||||||
*.pid
|
|
||||||
*.dat
|
|
||||||
*.log
|
|
||||||
*.sql
|
|
||||||
*.sqlite
|
|
||||||
*~
|
|
||||||
~*
|
|
||||||
|
|
||||||
# Another files #
|
|
||||||
# ###############
|
|
||||||
Icon?
|
|
||||||
.DS_Store*
|
|
||||||
Thumbs.db
|
|
||||||
ehthumbs.db
|
|
||||||
Desktop.ini
|
|
||||||
npm-debug.log
|
|
||||||
.directory
|
|
||||||
._*
|
|
||||||
|
|
||||||
koa-better-body
|
|
4
node_modules/gulp-concat/node_modules/gulp-util/node_modules/dateformat/.travis.yml
generated
vendored
4
node_modules/gulp-concat/node_modules/gulp-util/node_modules/dateformat/.travis.yml
generated
vendored
@ -1,4 +0,0 @@
|
|||||||
language: node_js
|
|
||||||
node_js:
|
|
||||||
- "0.11"
|
|
||||||
- "0.10"
|
|
20
node_modules/gulp-concat/node_modules/gulp-util/node_modules/dateformat/LICENSE
generated
vendored
20
node_modules/gulp-concat/node_modules/gulp-util/node_modules/dateformat/LICENSE
generated
vendored
@ -1,20 +0,0 @@
|
|||||||
(c) 2007-2009 Steven Levithan <stevenlevithan.com>
|
|
||||||
|
|
||||||
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.
|
|
82
node_modules/gulp-concat/node_modules/gulp-util/node_modules/dateformat/Readme.md
generated
vendored
82
node_modules/gulp-concat/node_modules/gulp-util/node_modules/dateformat/Readme.md
generated
vendored
@ -1,82 +0,0 @@
|
|||||||
# dateformat
|
|
||||||
|
|
||||||
A node.js package for Steven Levithan's excellent [dateFormat()][dateformat] function.
|
|
||||||
|
|
||||||
[![Build Status](https://travis-ci.org/felixge/node-dateformat.svg)](https://travis-ci.org/felixge/node-dateformat)
|
|
||||||
|
|
||||||
## Modifications
|
|
||||||
|
|
||||||
* Removed the `Date.prototype.format` method. Sorry folks, but extending native prototypes is for suckers.
|
|
||||||
* Added a `module.exports = dateFormat;` statement at the bottom
|
|
||||||
* Added the placeholder `N` to get the ISO 8601 numeric representation of the day of the week
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ npm install dateformat
|
|
||||||
$ dateformat --help
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
As taken from Steven's post, modified to match the Modifications listed above:
|
|
||||||
```js
|
|
||||||
var dateFormat = require('dateformat');
|
|
||||||
var now = new Date();
|
|
||||||
|
|
||||||
// Basic usage
|
|
||||||
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");
|
|
||||||
// Saturday, June 9th, 2007, 5:46:21 PM
|
|
||||||
|
|
||||||
// You can use one of several named masks
|
|
||||||
dateFormat(now, "isoDateTime");
|
|
||||||
// 2007-06-09T17:46:21
|
|
||||||
|
|
||||||
// ...Or add your own
|
|
||||||
dateFormat.masks.hammerTime = 'HH:MM! "Can\'t touch this!"';
|
|
||||||
dateFormat(now, "hammerTime");
|
|
||||||
// 17:46! Can't touch this!
|
|
||||||
|
|
||||||
// When using the standalone dateFormat function,
|
|
||||||
// you can also provide the date as a string
|
|
||||||
dateFormat("Jun 9 2007", "fullDate");
|
|
||||||
// Saturday, June 9, 2007
|
|
||||||
|
|
||||||
// Note that if you don't include the mask argument,
|
|
||||||
// dateFormat.masks.default is used
|
|
||||||
dateFormat(now);
|
|
||||||
// Sat Jun 09 2007 17:46:21
|
|
||||||
|
|
||||||
// And if you don't include the date argument,
|
|
||||||
// the current date and time is used
|
|
||||||
dateFormat();
|
|
||||||
// Sat Jun 09 2007 17:46:22
|
|
||||||
|
|
||||||
// You can also skip the date argument (as long as your mask doesn't
|
|
||||||
// contain any numbers), in which case the current date/time is used
|
|
||||||
dateFormat("longTime");
|
|
||||||
// 5:46:22 PM EST
|
|
||||||
|
|
||||||
// And finally, you can convert local time to UTC time. Simply pass in
|
|
||||||
// true as an additional argument (no argument skipping allowed in this case):
|
|
||||||
dateFormat(now, "longTime", true);
|
|
||||||
// 10:46:21 PM UTC
|
|
||||||
|
|
||||||
// ...Or add the prefix "UTC:" or "GMT:" to your mask.
|
|
||||||
dateFormat(now, "UTC:h:MM:ss TT Z");
|
|
||||||
// 10:46:21 PM UTC
|
|
||||||
|
|
||||||
// You can also get the ISO 8601 week of the year:
|
|
||||||
dateFormat(now, "W");
|
|
||||||
// 42
|
|
||||||
|
|
||||||
// and also get the ISO 8601 numeric representation of the day of the week:
|
|
||||||
dateFormat(now,"N");
|
|
||||||
// 6
|
|
||||||
```
|
|
||||||
## License
|
|
||||||
|
|
||||||
(c) 2007-2009 Steven Levithan [stevenlevithan.com][stevenlevithan], MIT license.
|
|
||||||
|
|
||||||
[dateformat]: http://blog.stevenlevithan.com/archives/date-time-format
|
|
||||||
[stevenlevithan]: http://stevenlevithan.com/
|
|
75
node_modules/gulp-concat/node_modules/gulp-util/node_modules/dateformat/bin/cli.js
generated
vendored
75
node_modules/gulp-concat/node_modules/gulp-util/node_modules/dateformat/bin/cli.js
generated
vendored
@ -1,75 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
/**
|
|
||||||
* dateformat <https://github.com/felixge/node-dateformat>
|
|
||||||
*
|
|
||||||
* Copyright (c) 2014 Charlike Mike Reagent (cli), contributors.
|
|
||||||
* Released under the MIT license.
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Module dependencies.
|
|
||||||
*/
|
|
||||||
|
|
||||||
var dateFormat = require('../lib/dateformat');
|
|
||||||
var meow = require('meow');
|
|
||||||
var stdin = require('get-stdin');
|
|
||||||
|
|
||||||
var cli = meow({
|
|
||||||
pkg: '../package.json',
|
|
||||||
help: [
|
|
||||||
'Options',
|
|
||||||
' --help Show this help',
|
|
||||||
' --version Current version of package',
|
|
||||||
' -d | --date Date that want to format (Date object as Number or String)',
|
|
||||||
' -m | --mask Mask that will use to format the date',
|
|
||||||
' -u | --utc Convert local time to UTC time or use `UTC:` prefix in mask',
|
|
||||||
' -g | --gmt You can use `GMT:` prefix in mask',
|
|
||||||
'',
|
|
||||||
'Usage',
|
|
||||||
' dateformat [date] [mask]',
|
|
||||||
' dateformat "Nov 26 2014" "fullDate"',
|
|
||||||
' dateformat 1416985417095 "dddd, mmmm dS, yyyy, h:MM:ss TT"',
|
|
||||||
' dateformat 1315361943159 "W"',
|
|
||||||
' dateformat "UTC:h:MM:ss TT Z"',
|
|
||||||
' dateformat "longTime" true',
|
|
||||||
' dateformat "longTime" false true',
|
|
||||||
' dateformat "Jun 9 2007" "fullDate" true',
|
|
||||||
' date +%s | dateformat',
|
|
||||||
''
|
|
||||||
].join('\n')
|
|
||||||
})
|
|
||||||
|
|
||||||
var date = cli.input[0] || cli.flags.d || cli.flags.date || Date.now();
|
|
||||||
var mask = cli.input[1] || cli.flags.m || cli.flags.mask || dateFormat.masks.default;
|
|
||||||
var utc = cli.input[2] || cli.flags.u || cli.flags.utc || false;
|
|
||||||
var gmt = cli.input[3] || cli.flags.g || cli.flags.gmt || false;
|
|
||||||
|
|
||||||
utc = utc === 'true' ? true : false;
|
|
||||||
gmt = gmt === 'true' ? true : false;
|
|
||||||
|
|
||||||
if (!cli.input.length) {
|
|
||||||
stdin(function(date) {
|
|
||||||
console.log(dateFormat(date, dateFormat.masks.default, utc, gmt));
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cli.input.length === 1 && date) {
|
|
||||||
mask = date;
|
|
||||||
date = Date.now();
|
|
||||||
console.log(dateFormat(date, mask, utc, gmt));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cli.input.length >= 2 && date && mask) {
|
|
||||||
if (mask === 'true' || mask === 'false') {
|
|
||||||
utc = mask === 'true' ? true : false;
|
|
||||||
gmt = !utc;
|
|
||||||
mask = date
|
|
||||||
date = Date.now();
|
|
||||||
}
|
|
||||||
console.log(dateFormat(date, mask, utc, gmt));
|
|
||||||
return;
|
|
||||||
}
|
|
224
node_modules/gulp-concat/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js
generated
vendored
224
node_modules/gulp-concat/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js
generated
vendored
@ -1,224 +0,0 @@
|
|||||||
/*
|
|
||||||
* Date Format 1.2.3
|
|
||||||
* (c) 2007-2009 Steven Levithan <stevenlevithan.com>
|
|
||||||
* MIT license
|
|
||||||
*
|
|
||||||
* Includes enhancements by Scott Trenda <scott.trenda.net>
|
|
||||||
* and Kris Kowal <cixar.com/~kris.kowal/>
|
|
||||||
*
|
|
||||||
* Accepts a date, a mask, or a date and a mask.
|
|
||||||
* Returns a formatted version of the given date.
|
|
||||||
* The date defaults to the current date/time.
|
|
||||||
* The mask defaults to dateFormat.masks.default.
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function(global) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var dateFormat = (function() {
|
|
||||||
var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZWN]|'[^']*'|'[^']*'/g;
|
|
||||||
var timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g;
|
|
||||||
var timezoneClip = /[^-+\dA-Z]/g;
|
|
||||||
|
|
||||||
// Regexes and supporting functions are cached through closure
|
|
||||||
return function (date, mask, utc, gmt) {
|
|
||||||
|
|
||||||
// You can't provide utc if you skip other args (use the 'UTC:' mask prefix)
|
|
||||||
if (arguments.length === 1 && kindOf(date) === 'string' && !/\d/.test(date)) {
|
|
||||||
mask = date;
|
|
||||||
date = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
date = date || new Date;
|
|
||||||
|
|
||||||
if(!(date instanceof Date)) {
|
|
||||||
date = new Date(date);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isNaN(date)) {
|
|
||||||
throw TypeError('Invalid date');
|
|
||||||
}
|
|
||||||
|
|
||||||
mask = String(dateFormat.masks[mask] || mask || dateFormat.masks['default']);
|
|
||||||
|
|
||||||
// Allow setting the utc/gmt argument via the mask
|
|
||||||
var maskSlice = mask.slice(0, 4);
|
|
||||||
if (maskSlice === 'UTC:' || maskSlice === 'GMT:') {
|
|
||||||
mask = mask.slice(4);
|
|
||||||
utc = true;
|
|
||||||
if (maskSlice === 'GMT:') {
|
|
||||||
gmt = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = utc ? 'getUTC' : 'get';
|
|
||||||
var d = date[_ + 'Date']();
|
|
||||||
var D = date[_ + 'Day']();
|
|
||||||
var m = date[_ + 'Month']();
|
|
||||||
var y = date[_ + 'FullYear']();
|
|
||||||
var H = date[_ + 'Hours']();
|
|
||||||
var M = date[_ + 'Minutes']();
|
|
||||||
var s = date[_ + 'Seconds']();
|
|
||||||
var L = date[_ + 'Milliseconds']();
|
|
||||||
var o = utc ? 0 : date.getTimezoneOffset();
|
|
||||||
var W = getWeek(date);
|
|
||||||
var N = getDayOfWeek(date);
|
|
||||||
var flags = {
|
|
||||||
d: d,
|
|
||||||
dd: pad(d),
|
|
||||||
ddd: dateFormat.i18n.dayNames[D],
|
|
||||||
dddd: dateFormat.i18n.dayNames[D + 7],
|
|
||||||
m: m + 1,
|
|
||||||
mm: pad(m + 1),
|
|
||||||
mmm: dateFormat.i18n.monthNames[m],
|
|
||||||
mmmm: dateFormat.i18n.monthNames[m + 12],
|
|
||||||
yy: String(y).slice(2),
|
|
||||||
yyyy: y,
|
|
||||||
h: H % 12 || 12,
|
|
||||||
hh: pad(H % 12 || 12),
|
|
||||||
H: H,
|
|
||||||
HH: pad(H),
|
|
||||||
M: M,
|
|
||||||
MM: pad(M),
|
|
||||||
s: s,
|
|
||||||
ss: pad(s),
|
|
||||||
l: pad(L, 3),
|
|
||||||
L: pad(Math.round(L / 10)),
|
|
||||||
t: H < 12 ? 'a' : 'p',
|
|
||||||
tt: H < 12 ? 'am' : 'pm',
|
|
||||||
T: H < 12 ? 'A' : 'P',
|
|
||||||
TT: H < 12 ? 'AM' : 'PM',
|
|
||||||
Z: gmt ? 'GMT' : utc ? 'UTC' : (String(date).match(timezone) || ['']).pop().replace(timezoneClip, ''),
|
|
||||||
o: (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
|
|
||||||
S: ['th', 'st', 'nd', 'rd'][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10],
|
|
||||||
W: W,
|
|
||||||
N: N
|
|
||||||
};
|
|
||||||
|
|
||||||
return mask.replace(token, function (match) {
|
|
||||||
if (match in flags) {
|
|
||||||
return flags[match];
|
|
||||||
}
|
|
||||||
return match.slice(1, match.length - 1);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
})();
|
|
||||||
|
|
||||||
dateFormat.masks = {
|
|
||||||
'default': 'ddd mmm dd yyyy HH:MM:ss',
|
|
||||||
'shortDate': 'm/d/yy',
|
|
||||||
'mediumDate': 'mmm d, yyyy',
|
|
||||||
'longDate': 'mmmm d, yyyy',
|
|
||||||
'fullDate': 'dddd, mmmm d, yyyy',
|
|
||||||
'shortTime': 'h:MM TT',
|
|
||||||
'mediumTime': 'h:MM:ss TT',
|
|
||||||
'longTime': 'h:MM:ss TT Z',
|
|
||||||
'isoDate': 'yyyy-mm-dd',
|
|
||||||
'isoTime': 'HH:MM:ss',
|
|
||||||
'isoDateTime': 'yyyy-mm-dd\'T\'HH:MM:sso',
|
|
||||||
'isoUtcDateTime': 'UTC:yyyy-mm-dd\'T\'HH:MM:ss\'Z\'',
|
|
||||||
'expiresHeaderFormat': 'ddd, dd mmm yyyy HH:MM:ss Z'
|
|
||||||
};
|
|
||||||
|
|
||||||
// Internationalization strings
|
|
||||||
dateFormat.i18n = {
|
|
||||||
dayNames: [
|
|
||||||
'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat',
|
|
||||||
'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'
|
|
||||||
],
|
|
||||||
monthNames: [
|
|
||||||
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec',
|
|
||||||
'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'
|
|
||||||
]
|
|
||||||
};
|
|
||||||
|
|
||||||
function pad(val, len) {
|
|
||||||
val = String(val);
|
|
||||||
len = len || 2;
|
|
||||||
while (val.length < len) {
|
|
||||||
val = '0' + val;
|
|
||||||
}
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the ISO 8601 week number
|
|
||||||
* Based on comments from
|
|
||||||
* http://techblog.procurios.nl/k/n618/news/view/33796/14863/Calculate-ISO-8601-week-and-year-in-javascript.html
|
|
||||||
*
|
|
||||||
* @param {Object} `date`
|
|
||||||
* @return {Number}
|
|
||||||
*/
|
|
||||||
function getWeek(date) {
|
|
||||||
// Remove time components of date
|
|
||||||
var targetThursday = new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
|
||||||
|
|
||||||
// Change date to Thursday same week
|
|
||||||
targetThursday.setDate(targetThursday.getDate() - ((targetThursday.getDay() + 6) % 7) + 3);
|
|
||||||
|
|
||||||
// Take January 4th as it is always in week 1 (see ISO 8601)
|
|
||||||
var firstThursday = new Date(targetThursday.getFullYear(), 0, 4);
|
|
||||||
|
|
||||||
// Change date to Thursday same week
|
|
||||||
firstThursday.setDate(firstThursday.getDate() - ((firstThursday.getDay() + 6) % 7) + 3);
|
|
||||||
|
|
||||||
// Check if daylight-saving-time-switch occured and correct for it
|
|
||||||
var ds = targetThursday.getTimezoneOffset() - firstThursday.getTimezoneOffset();
|
|
||||||
targetThursday.setHours(targetThursday.getHours() - ds);
|
|
||||||
|
|
||||||
// Number of weeks between target Thursday and first Thursday
|
|
||||||
var weekDiff = (targetThursday - firstThursday) / (86400000*7);
|
|
||||||
return 1 + Math.floor(weekDiff);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get ISO-8601 numeric representation of the day of the week
|
|
||||||
* 1 (for Monday) through 7 (for Sunday)
|
|
||||||
*
|
|
||||||
* @param {Object} `date`
|
|
||||||
* @return {Number}
|
|
||||||
*/
|
|
||||||
function getDayOfWeek(date) {
|
|
||||||
var dow = date.getDay();
|
|
||||||
if(dow === 0) {
|
|
||||||
dow = 7;
|
|
||||||
}
|
|
||||||
return dow;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* kind-of shortcut
|
|
||||||
* @param {*} val
|
|
||||||
* @return {String}
|
|
||||||
*/
|
|
||||||
function kindOf(val) {
|
|
||||||
if (val === null) {
|
|
||||||
return 'null';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (val === undefined) {
|
|
||||||
return 'undefined';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof val !== 'object') {
|
|
||||||
return typeof val;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Array.isArray(val)) {
|
|
||||||
return 'array';
|
|
||||||
}
|
|
||||||
|
|
||||||
return {}.toString.call(val)
|
|
||||||
.slice(8, -1).toLowerCase();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (typeof define === 'function' && define.amd) {
|
|
||||||
define(dateFormat);
|
|
||||||
} else if (typeof exports === 'object') {
|
|
||||||
module.exports = dateFormat;
|
|
||||||
} else {
|
|
||||||
global.dateFormat = dateFormat;
|
|
||||||
}
|
|
||||||
})(this);
|
|
@ -1,49 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = function (cb) {
|
|
||||||
var stdin = process.stdin;
|
|
||||||
var ret = '';
|
|
||||||
|
|
||||||
if (stdin.isTTY) {
|
|
||||||
setImmediate(cb, '');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
stdin.setEncoding('utf8');
|
|
||||||
|
|
||||||
stdin.on('readable', function () {
|
|
||||||
var chunk;
|
|
||||||
|
|
||||||
while (chunk = stdin.read()) {
|
|
||||||
ret += chunk;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
stdin.on('end', function () {
|
|
||||||
cb(ret);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports.buffer = function (cb) {
|
|
||||||
var stdin = process.stdin;
|
|
||||||
var ret = [];
|
|
||||||
var len = 0;
|
|
||||||
|
|
||||||
if (stdin.isTTY) {
|
|
||||||
setImmediate(cb, new Buffer(''));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
stdin.on('readable', function () {
|
|
||||||
var chunk;
|
|
||||||
|
|
||||||
while (chunk = stdin.read()) {
|
|
||||||
ret.push(chunk);
|
|
||||||
len += chunk.length;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
stdin.on('end', function () {
|
|
||||||
cb(Buffer.concat(ret, len));
|
|
||||||
});
|
|
||||||
};
|
|
@ -1,64 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "get-stdin",
|
|
||||||
"version": "4.0.1",
|
|
||||||
"description": "Easier stdin",
|
|
||||||
"license": "MIT",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/sindresorhus/get-stdin"
|
|
||||||
},
|
|
||||||
"author": {
|
|
||||||
"name": "Sindre Sorhus",
|
|
||||||
"email": "sindresorhus@gmail.com",
|
|
||||||
"url": "http://sindresorhus.com"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "node test.js && node test-buffer.js && echo unicorns | node test-real.js"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"index.js"
|
|
||||||
],
|
|
||||||
"keywords": [
|
|
||||||
"std",
|
|
||||||
"stdin",
|
|
||||||
"stdio",
|
|
||||||
"concat",
|
|
||||||
"buffer",
|
|
||||||
"stream",
|
|
||||||
"process",
|
|
||||||
"stream"
|
|
||||||
],
|
|
||||||
"devDependencies": {
|
|
||||||
"ava": "0.0.4",
|
|
||||||
"buffer-equal": "0.0.1"
|
|
||||||
},
|
|
||||||
"gitHead": "65c744975229b25d6cc5c7546f49b6ad9099553f",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/sindresorhus/get-stdin/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/sindresorhus/get-stdin",
|
|
||||||
"_id": "get-stdin@4.0.1",
|
|
||||||
"_shasum": "b968c6b0a04384324902e8bf1a5df32579a450fe",
|
|
||||||
"_from": "get-stdin@*",
|
|
||||||
"_npmVersion": "1.4.28",
|
|
||||||
"_npmUser": {
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
},
|
|
||||||
"maintainers": [
|
|
||||||
{
|
|
||||||
"name": "sindresorhus",
|
|
||||||
"email": "sindresorhus@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"dist": {
|
|
||||||
"shasum": "b968c6b0a04384324902e8bf1a5df32579a450fe",
|
|
||||||
"tarball": "http://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz"
|
|
||||||
},
|
|
||||||
"directories": {},
|
|
||||||
"_resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
|
|
||||||
"readme": "ERROR: No README data found!"
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue