Update pacchetti FontAwesome, Git, Json
This commit is contained in:
Binary file not shown.
@@ -1,3 +1,3 @@
|
||||
@echo off
|
||||
SET PATH=%~dp0;%PATH%
|
||||
"%~dp0node" "%~dp0..\..\packages\NoGit.0.0.8\node_modules\nogit\bin\git.js" %*
|
||||
"%~dp0node" "%~dp0..\..\packages\NoGit.0.1.0\node_modules\nogit\bin\git.js" %*
|
||||
@@ -1,3 +1,3 @@
|
||||
@echo off
|
||||
SET PATH=%PATH%;%~dp0
|
||||
"%~dp0..\..\packages\Node.js.0.10.28\node.exe" %*
|
||||
"%~dp0..\..\packages\Node.js.0.12.0\node.exe" %*
|
||||
Vendored
+141
-3
@@ -1,13 +1,13 @@
|
||||
/*!
|
||||
* Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
|
||||
* Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
|
||||
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
|
||||
*/
|
||||
/* FONT PATH
|
||||
* -------------------------- */
|
||||
@font-face {
|
||||
font-family: 'FontAwesome';
|
||||
src: url('../fonts/fontawesome-webfont.eot?v=4.6.3');
|
||||
src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.6.3') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.6.3') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.6.3') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg');
|
||||
src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');
|
||||
src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@@ -1832,6 +1832,7 @@
|
||||
content: "\f23e";
|
||||
}
|
||||
.fa-battery-4:before,
|
||||
.fa-battery:before,
|
||||
.fa-battery-full:before {
|
||||
content: "\f240";
|
||||
}
|
||||
@@ -2178,6 +2179,143 @@
|
||||
.fa-font-awesome:before {
|
||||
content: "\f2b4";
|
||||
}
|
||||
.fa-handshake-o:before {
|
||||
content: "\f2b5";
|
||||
}
|
||||
.fa-envelope-open:before {
|
||||
content: "\f2b6";
|
||||
}
|
||||
.fa-envelope-open-o:before {
|
||||
content: "\f2b7";
|
||||
}
|
||||
.fa-linode:before {
|
||||
content: "\f2b8";
|
||||
}
|
||||
.fa-address-book:before {
|
||||
content: "\f2b9";
|
||||
}
|
||||
.fa-address-book-o:before {
|
||||
content: "\f2ba";
|
||||
}
|
||||
.fa-vcard:before,
|
||||
.fa-address-card:before {
|
||||
content: "\f2bb";
|
||||
}
|
||||
.fa-vcard-o:before,
|
||||
.fa-address-card-o:before {
|
||||
content: "\f2bc";
|
||||
}
|
||||
.fa-user-circle:before {
|
||||
content: "\f2bd";
|
||||
}
|
||||
.fa-user-circle-o:before {
|
||||
content: "\f2be";
|
||||
}
|
||||
.fa-user-o:before {
|
||||
content: "\f2c0";
|
||||
}
|
||||
.fa-id-badge:before {
|
||||
content: "\f2c1";
|
||||
}
|
||||
.fa-drivers-license:before,
|
||||
.fa-id-card:before {
|
||||
content: "\f2c2";
|
||||
}
|
||||
.fa-drivers-license-o:before,
|
||||
.fa-id-card-o:before {
|
||||
content: "\f2c3";
|
||||
}
|
||||
.fa-quora:before {
|
||||
content: "\f2c4";
|
||||
}
|
||||
.fa-free-code-camp:before {
|
||||
content: "\f2c5";
|
||||
}
|
||||
.fa-telegram:before {
|
||||
content: "\f2c6";
|
||||
}
|
||||
.fa-thermometer-4:before,
|
||||
.fa-thermometer:before,
|
||||
.fa-thermometer-full:before {
|
||||
content: "\f2c7";
|
||||
}
|
||||
.fa-thermometer-3:before,
|
||||
.fa-thermometer-three-quarters:before {
|
||||
content: "\f2c8";
|
||||
}
|
||||
.fa-thermometer-2:before,
|
||||
.fa-thermometer-half:before {
|
||||
content: "\f2c9";
|
||||
}
|
||||
.fa-thermometer-1:before,
|
||||
.fa-thermometer-quarter:before {
|
||||
content: "\f2ca";
|
||||
}
|
||||
.fa-thermometer-0:before,
|
||||
.fa-thermometer-empty:before {
|
||||
content: "\f2cb";
|
||||
}
|
||||
.fa-shower:before {
|
||||
content: "\f2cc";
|
||||
}
|
||||
.fa-bathtub:before,
|
||||
.fa-s15:before,
|
||||
.fa-bath:before {
|
||||
content: "\f2cd";
|
||||
}
|
||||
.fa-podcast:before {
|
||||
content: "\f2ce";
|
||||
}
|
||||
.fa-window-maximize:before {
|
||||
content: "\f2d0";
|
||||
}
|
||||
.fa-window-minimize:before {
|
||||
content: "\f2d1";
|
||||
}
|
||||
.fa-window-restore:before {
|
||||
content: "\f2d2";
|
||||
}
|
||||
.fa-times-rectangle:before,
|
||||
.fa-window-close:before {
|
||||
content: "\f2d3";
|
||||
}
|
||||
.fa-times-rectangle-o:before,
|
||||
.fa-window-close-o:before {
|
||||
content: "\f2d4";
|
||||
}
|
||||
.fa-bandcamp:before {
|
||||
content: "\f2d5";
|
||||
}
|
||||
.fa-grav:before {
|
||||
content: "\f2d6";
|
||||
}
|
||||
.fa-etsy:before {
|
||||
content: "\f2d7";
|
||||
}
|
||||
.fa-imdb:before {
|
||||
content: "\f2d8";
|
||||
}
|
||||
.fa-ravelry:before {
|
||||
content: "\f2d9";
|
||||
}
|
||||
.fa-eercast:before {
|
||||
content: "\f2da";
|
||||
}
|
||||
.fa-microchip:before {
|
||||
content: "\f2db";
|
||||
}
|
||||
.fa-snowflake-o:before {
|
||||
content: "\f2dc";
|
||||
}
|
||||
.fa-superpowers:before {
|
||||
content: "\f2dd";
|
||||
}
|
||||
.fa-wpexplorer:before {
|
||||
content: "\f2de";
|
||||
}
|
||||
.fa-meetup:before {
|
||||
content: "\f2e0";
|
||||
}
|
||||
.sr-only {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
|
||||
+2
-2
File diff suppressed because one or more lines are too long
@@ -25,6 +25,7 @@
|
||||
<UseGlobalApplicationHostFile />
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
<Use64BitIISExpress />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
@@ -88,9 +89,8 @@
|
||||
<HintPath>..\packages\MVCGrid.Net.1.0.0.60\lib\net40\MVCGrid.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
@@ -328,9 +328,6 @@
|
||||
<Content Include="Content\themes\base\theme.css" />
|
||||
<Content Include="Content\themes\base\tooltip.css" />
|
||||
<Content Include="favicon.ico" />
|
||||
<Content Include="fonts\fontawesome-webfont.svg" />
|
||||
<Content Include="fonts\fontawesome-webfont.woff" />
|
||||
<Content Include="fonts\fontawesome-webfont.woff2" />
|
||||
<Content Include="fonts\glyphicons-halflings-regular.svg" />
|
||||
<Content Include="Global.asax" />
|
||||
<Content Include="fonts\glyphicons-halflings-regular.woff2" />
|
||||
@@ -360,15 +357,10 @@
|
||||
<Content Include="Models\SMModel.edmx.diagram">
|
||||
<DependentUpon>SMModel.edmx</DependentUpon>
|
||||
</Content>
|
||||
<Content Include="fonts\FontAwesome.otf" />
|
||||
<Content Include="fonts\fontawesome-webfont.ttf" />
|
||||
<Content Include="fonts\fontawesome-webfont.eot" />
|
||||
<Content Include="Content\Site.less" />
|
||||
<Content Include="bower.json" />
|
||||
<Content Include=".bowerrc" />
|
||||
<None Include=".bin\bower.cmd" />
|
||||
<None Include=".bin\git.cmd" />
|
||||
<None Include=".bin\node.cmd" />
|
||||
<Content Include="bower_components\cldr-data\main\it\ca-gregorian.json" />
|
||||
<Content Include="bower_components\cldr-data\main\it\characters.json" />
|
||||
<Content Include="bower_components\cldr-data\main\it\contextTransforms.json" />
|
||||
@@ -465,10 +457,18 @@
|
||||
<Content Include="bower_components\cldr-data\supplemental\territoryContainment.json" />
|
||||
<Content Include="bower_components\cldr-data\supplemental\territoryInfo.json" />
|
||||
<Content Include="bower_components\cldr-data\supplemental\windowsZones.json" />
|
||||
<None Include=".bin\git.cmd" />
|
||||
<None Include=".bin\node.cmd" />
|
||||
<None Include="compilerconfig.json" />
|
||||
<None Include="compilerconfig.json.defaults">
|
||||
<DependentUpon>compilerconfig.json</DependentUpon>
|
||||
</None>
|
||||
<Content Include="fonts\FontAwesome.otf" />
|
||||
<Content Include="fonts\fontawesome-webfont.woff2" />
|
||||
<Content Include="fonts\fontawesome-webfont.woff" />
|
||||
<Content Include="fonts\fontawesome-webfont.ttf" />
|
||||
<Content Include="fonts\fontawesome-webfont.svg" />
|
||||
<Content Include="fonts\fontawesome-webfont.eot" />
|
||||
<None Include="Properties\PublishProfiles\IIS01.pubxml" />
|
||||
<None Include="Properties\PublishProfiles\IIS01_TK.pubxml" />
|
||||
<None Include="Properties\PublishProfiles\IIS02.pubxml" />
|
||||
|
||||
@@ -15,6 +15,10 @@
|
||||
<ProjectView>ShowAllFiles</ProjectView>
|
||||
<NameOfLastUsedPublishProfile>IIS02_TK</NameOfLastUsedPublishProfile>
|
||||
<WebStackScaffolding_ViewDialogWidth>600</WebStackScaffolding_ViewDialogWidth>
|
||||
<Use64BitIISExpress />
|
||||
<IISExpressSSLPort />
|
||||
<IISExpressUseClassicPipelineMode />
|
||||
<UseGlobalApplicationHostFile />
|
||||
</PropertyGroup>
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
|
||||
|
||||
Binary file not shown.
+2438
-907
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -43,7 +43,7 @@
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
|
||||
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
Before Width: | Height: | Size: 382 KiB After Width: | Height: | Size: 434 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -5,7 +5,7 @@
|
||||
<package id="Bower" version="1.3.11" targetFramework="net462" />
|
||||
<package id="cldrjs" version="0.4.5" targetFramework="net462" />
|
||||
<package id="EntityFramework" version="6.1.3" targetFramework="net462" />
|
||||
<package id="FontAwesome" version="4.6.3" targetFramework="net462" />
|
||||
<package id="FontAwesome" version="4.7.0" targetFramework="net462" />
|
||||
<package id="Glimpse" version="1.8.6" targetFramework="net462" />
|
||||
<package id="Glimpse.Ado" version="1.7.3" targetFramework="net462" />
|
||||
<package id="Glimpse.AspNet" version="1.9.2" targetFramework="net462" />
|
||||
@@ -26,9 +26,9 @@
|
||||
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net462" />
|
||||
<package id="Modernizr" version="2.8.3" targetFramework="net462" />
|
||||
<package id="MVCGrid.Net" version="1.0.0.60" targetFramework="net462" />
|
||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net462" />
|
||||
<package id="Node.js" version="0.10.28" targetFramework="net462" />
|
||||
<package id="NoGit" version="0.0.8" targetFramework="net462" />
|
||||
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net462" />
|
||||
<package id="Node.js" version="0.12.0" targetFramework="net462" />
|
||||
<package id="NoGit" version="0.1.0" targetFramework="net462" />
|
||||
<package id="Respond" version="1.4.2" targetFramework="net462" />
|
||||
<package id="WebActivatorEx" version="2.2.0" targetFramework="net462" />
|
||||
<package id="WebGrease" version="1.6.0" targetFramework="net462" />
|
||||
|
||||
BIN
Binary file not shown.
-3
@@ -1,3 +0,0 @@
|
||||
@echo off
|
||||
SET PATH=%~dp0;%PATH%
|
||||
"%~dp0node" "%~dp0..\..\packages\NoGit.0.0.8\node_modules\nogit\bin\git.js" %*
|
||||
-147
@@ -1,147 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var program = require('commander');
|
||||
var clone = require('../commands/clone');
|
||||
var archive = require('../commands/archive');
|
||||
var lsRemote = require('../commands/ls-remote');
|
||||
var config = require('../lib/config');
|
||||
var globalTunnel = require('global-tunnel');
|
||||
var fs = require('fs');
|
||||
var ini = require('ini');
|
||||
var urlParse = require('url').parse;
|
||||
|
||||
config.read(function(config) {
|
||||
|
||||
config.nogit = {}; // custom settings
|
||||
|
||||
program
|
||||
.version(require('git-node').version)
|
||||
.option('-v, --verbose', 'show detailed output');
|
||||
|
||||
program
|
||||
.command('clone <url> [dir]')
|
||||
.description('Clone a repository into a new directory')
|
||||
.option('-b, --branch <branch/tag/ref>', 'checkout to specefic branch, tag or ref')
|
||||
.option('--depth <num>', 'do a shallow clone with num commits deep')
|
||||
.option('--mirror', 'not supported yet (will act as a "git fetch")')
|
||||
.option('--progress', 'show progress status')
|
||||
.option('-v, --verbose', 'show detailed output')
|
||||
.action(function(url, dir, options) {
|
||||
clone(url, dir, options);
|
||||
});
|
||||
|
||||
program
|
||||
.command('fetch [repo]')
|
||||
.description('Download objects and refs from another repository')
|
||||
.option('-a, --append', 'pppend ref and object names of fetched refs to the .git/FETCH_HEAD')
|
||||
.action(function(repo, options) {
|
||||
// todo
|
||||
});
|
||||
|
||||
program
|
||||
.command('config')
|
||||
.description('Get repository options')
|
||||
.option('--get <key>', 'get the value for a given key')
|
||||
.action(function(options) {
|
||||
if (options.get) {
|
||||
if (config['remote "origin"']) {
|
||||
console.log(config['remote "origin"'].url);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
program
|
||||
.command('rev-list <commit>')
|
||||
.description('Lists commit objects in reverse chronological order')
|
||||
.option('-n, --max-count <n>', 'limit the number of commits to output', parseInt)
|
||||
.action(function(commit, options) {
|
||||
// only '-n1' and 'refs/heads' are supported
|
||||
if (options.maxCount == 1) {
|
||||
var hash = fs.readFileSync('refs/heads/' + commit, 'utf8').trim();
|
||||
console.log(hash);
|
||||
}
|
||||
else {
|
||||
// todo
|
||||
}
|
||||
});
|
||||
|
||||
program
|
||||
.command('archive <commit>')
|
||||
.description('Create an archive of files from a named tree')
|
||||
.option('--format <tar|zip>', 'format of the resulting archive: tar or zip')
|
||||
.option('--prefix <path>', 'prepend <prefix>/ to each filename in the archive')
|
||||
.option('-v, --verbose', 'show detailed output')
|
||||
.action(function(commit, options) {
|
||||
archive(commit, options);
|
||||
});
|
||||
|
||||
program
|
||||
.command('ls-remote <repo>')
|
||||
.description('List references in a remote repository')
|
||||
.option('-t, --tags', 'limit to tags')
|
||||
.option('-h, --heads', 'limit to heads')
|
||||
.action(function(repo, options) {
|
||||
lsRemote(repo, options);
|
||||
});
|
||||
|
||||
|
||||
// .command("fetch <url>", "Download objects and refs from another repository")
|
||||
// .command("log", "Show local history")
|
||||
// .command("export <target>", "Export tree at HEAD as real files to target")
|
||||
|
||||
enableProxyIfRequired();
|
||||
|
||||
fixNumArgs();
|
||||
program.parse(process.argv);
|
||||
|
||||
if (process.argv.length < 3) {
|
||||
program.outputHelp();
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
function fixNumArgs() {
|
||||
for (var i = 0; i < process.argv.length; ++i) {
|
||||
if (/^-[a-zA-Z](\d+)$/g.test(process.argv[i])) {
|
||||
process.argv.splice(i + 1, 0, process.argv[i].slice(2));
|
||||
process.argv[i] = process.argv[i].slice(0, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function enableProxyIfRequired() {
|
||||
var tunnel = 'neither';
|
||||
var configHttpProxy = config.http ? config.http.proxy : undefined;
|
||||
var configHttpsProxy = config.https ? config.https.proxy : undefined;
|
||||
|
||||
if (process.env.http_proxy || configHttpProxy) {
|
||||
tunnel = 'both';
|
||||
if (!process.env.http_proxy) {
|
||||
process.env.http_proxy = config.http.proxy;
|
||||
}
|
||||
}
|
||||
if (process.env.https_proxy || configHttpsProxy) {
|
||||
if (tunnel == 'neither') {
|
||||
tunnel = 'https';
|
||||
}
|
||||
if (!process.env.https_proxy) {
|
||||
process.env.https_proxy = configHttpsProxy;
|
||||
}
|
||||
}
|
||||
|
||||
var proxy = process.env.http_proxy || process.env.https_proxy;
|
||||
|
||||
if (proxy) {
|
||||
var parsed = urlParse(proxy);
|
||||
var conf = {
|
||||
connect: tunnel,
|
||||
protocol: parsed.protocol,
|
||||
host: parsed.hostname,
|
||||
port: parseInt(parsed.port,10),
|
||||
proxyAuth: parsed.auth
|
||||
};
|
||||
|
||||
globalTunnel.initialize(conf);
|
||||
config.nogit.proxy = proxy;
|
||||
}
|
||||
}
|
||||
});
|
||||
-50
@@ -1,50 +0,0 @@
|
||||
var fs = require('fs');
|
||||
var git = require('git-node');
|
||||
var path = require('path');
|
||||
var archiver = require('archiver');
|
||||
|
||||
function archive(commit, options) {
|
||||
var root = process.cwd();
|
||||
var repo = git.repo(root);
|
||||
|
||||
var archive = archiver(options.format);
|
||||
var output = process.stdout;
|
||||
|
||||
archive.on('error', function(err) {
|
||||
throw err;
|
||||
});
|
||||
|
||||
archive.pipe(output);
|
||||
|
||||
repo.treeWalk(commit, function (err, stream) {
|
||||
if (options.verbose) console.log('Creating archive...');
|
||||
if (err) throw err;
|
||||
read = stream.read;
|
||||
return read(function() {
|
||||
read(onEntry);
|
||||
});
|
||||
});
|
||||
|
||||
function onEntry(err, entry) {
|
||||
if (err) throw err;
|
||||
if (!entry){
|
||||
archive.finalize();
|
||||
if (options.verbose) {
|
||||
console.log('Done.')
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
var prefixedPath = path.join(options.prefix, entry.path);
|
||||
|
||||
if (options.verbose) {
|
||||
console.log("adding %s", prefixedPath);
|
||||
}
|
||||
if (entry.type === "blob") {
|
||||
archive.append(entry.body, {name: prefixedPath});
|
||||
}
|
||||
return read(onEntry);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = archive;
|
||||
-98
@@ -1,98 +0,0 @@
|
||||
var git = require('git-node');
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var pathJoin = path.join;
|
||||
var mkdirp = require('mkdirp');
|
||||
var utils = require('../lib/utils');
|
||||
|
||||
function clone(url, dir, options) {
|
||||
// fix url
|
||||
var origUrl = url;
|
||||
url = utils.fixUrl(url);
|
||||
|
||||
var remote = git.remote(url);
|
||||
var target = dir || path.basename(remote.pathname, ".git");
|
||||
var clonePath = target;
|
||||
if (!options.mirror) target += '/.git';
|
||||
var repo = git.repo(target);
|
||||
|
||||
var fetchOpts = {};
|
||||
// if no branch specified, get all heads
|
||||
fetchOpts.want = options.branch || function(ref, cb) {
|
||||
return cb(null, ref && ref.indexOf('refs/heads') != -1);
|
||||
};
|
||||
if (options.verbose) fetchOpts.onProgress = onProgress;
|
||||
if (options.depth) fetchOpts.depth = parseInt(options.depth, 10);
|
||||
|
||||
if (!fs.existsSync(target)) {
|
||||
mkdirp.sync(target);
|
||||
}
|
||||
|
||||
if (options.mirror) {
|
||||
console.log("Cloning %s into bare repository %s", url, target);
|
||||
}
|
||||
else {
|
||||
console.log("Cloning %s to %s..", url, target);
|
||||
}
|
||||
|
||||
repo.fetch(remote, fetchOpts, onFetch);
|
||||
|
||||
function onProgress(progress) {
|
||||
process.stderr.write(progress);
|
||||
}
|
||||
|
||||
function onFetch() {
|
||||
if (!options.mirror) {
|
||||
repo.resolveHashish(options.branch || 'HEAD', function (err, hash) {
|
||||
if (err) throw err;
|
||||
repo.updateHead(hash, function (err) {
|
||||
if (err) throw err;
|
||||
// copied from export.js
|
||||
var read;
|
||||
repo.treeWalk('HEAD', function (err, stream) {
|
||||
if (options.verbose) console.log('walking...');
|
||||
if (err) throw err;
|
||||
read = stream.read;
|
||||
return read(function() {
|
||||
read(onEntry);
|
||||
});
|
||||
});
|
||||
|
||||
function onEntry(err, entry) {
|
||||
if (options.verbose) console.log('on entry...');
|
||||
if (err) throw err;
|
||||
if (!entry) return;
|
||||
var path = pathJoin(clonePath, entry.path);
|
||||
if (options.verbose) {
|
||||
var colorPath = "\x1B[34m" + path.replace(/\//g, "\x1B[1;34m/\x1B[0;34m") + "\x1B[0m";
|
||||
console.log("%s %s", entry.hash, colorPath);
|
||||
}
|
||||
if (entry.type === "tree") {
|
||||
return fs.mkdir(path, onDone);
|
||||
}
|
||||
if (entry.type === "blob") {
|
||||
return fs.writeFile(path, entry.body, onDone);
|
||||
}
|
||||
return read(onEntry);
|
||||
}
|
||||
|
||||
function onDone(err) {
|
||||
if (err) throw err;
|
||||
return read(onEntry);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// create config with remote
|
||||
fs.writeFile(target + '/config', '[remote "origin"]\r\n\turl = ' + origUrl, function(err) {
|
||||
if (err) throw err;
|
||||
if (options.verbose) {
|
||||
console.log('Created repo config');
|
||||
console.log("Done.");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = clone;
|
||||
-50
@@ -1,50 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
var git = require('git-node');
|
||||
var program = require('commander');
|
||||
var fs = require('fs');
|
||||
var pathJoin = require('path').join;
|
||||
|
||||
program
|
||||
.usage('[options] [--] <dir>')
|
||||
.option('--ref <branch/tag/ref>', 'export from a specefic local branch, tag, or ref')
|
||||
.option('-q', 'Be quiet; don\t show progress')
|
||||
.option('--git-dir <dir>', 'Use custom git dir instead of cwd')
|
||||
.parse(process.argv);
|
||||
|
||||
if (program.args.length !== 1) {
|
||||
program.outputHelp();
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
var target = program.args[0];
|
||||
var ref = program.ref || "HEAD";
|
||||
var source = require('./root.js')(program);
|
||||
var repo = git.repo(source);
|
||||
var read;
|
||||
repo.treeWalk(ref, function (err, stream) {
|
||||
if (err) throw err;
|
||||
read = stream.read;
|
||||
return read(onEntry);
|
||||
});
|
||||
|
||||
function onEntry(err, entry) {
|
||||
if (err) throw err;
|
||||
if (!entry) return;
|
||||
var path = pathJoin(target, entry.path);
|
||||
if (!program.Q) {
|
||||
var colorPath = "\x1B[34m" + path.replace(/\//g, "\x1B[1;34m/\x1B[0;34m") + "\x1B[0m";
|
||||
console.log("%s %s", entry.hash, colorPath);
|
||||
}
|
||||
if (entry.type === "tree") {
|
||||
return fs.mkdir(path, onDone);
|
||||
}
|
||||
if (entry.type === "blob") {
|
||||
return fs.writeFile(path, entry.body, onDone);
|
||||
}
|
||||
return read(onEntry);
|
||||
}
|
||||
|
||||
function onDone(err) {
|
||||
if (err) throw err;
|
||||
return read(onEntry);
|
||||
}
|
||||
-51
@@ -1,51 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
var git = require('git-node');
|
||||
var program = require('commander');
|
||||
var basename = require('path').basename;
|
||||
var existsSync = require('fs').existsSync;
|
||||
|
||||
program
|
||||
.usage('[options] [--] <url> [<dir>]')
|
||||
.option('--ref <branch/tag/ref>', 'checkout to specefic branch, tag, or ref')
|
||||
.option('--depth <num>', 'do a shallow clone with num commits deep')
|
||||
.option('-q', 'Be quiet; don\'t show progress')
|
||||
.parse(process.argv);
|
||||
|
||||
if (program.args.length < 1 || program.args.length > 2) {
|
||||
program.outputHelp();
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
var url = program.args[0];
|
||||
var remote = git.remote(url);
|
||||
var target = program.args[1] || basename(remote.pathname, ".git") + ".git";
|
||||
var repo = git.repo(target);
|
||||
var opts = {};
|
||||
if (!program.Q) opts.onProgress = onProgress;
|
||||
if (program.ref) opts.want = program.ref;
|
||||
if (program.depth) opts.depth = parseInt(program.depth, 10);
|
||||
if (!program.Q) {
|
||||
if (existsSync(target)) {
|
||||
console.error("Fetching updates from %s to %s", url, target);
|
||||
}
|
||||
else {
|
||||
console.log("Cloning %s to %s..", url, target);
|
||||
}
|
||||
}
|
||||
repo.fetch(remote, opts, onDone);
|
||||
|
||||
function onProgress(progress) {
|
||||
process.stderr.write(progress);
|
||||
}
|
||||
|
||||
function onDone() {
|
||||
if (program.ref) {
|
||||
repo.resolveHashish(program.ref, function (err, hash) {
|
||||
if (err) throw err;
|
||||
repo.updateHead(hash, function (err) {
|
||||
if (err) throw err;
|
||||
});
|
||||
});
|
||||
}
|
||||
if (!program.Q) console.log("Done.");
|
||||
}
|
||||
-66
@@ -1,66 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
var git = require('git-node');
|
||||
var program = require('commander');
|
||||
|
||||
program
|
||||
.usage('[options] [--] [<ref>]')
|
||||
.option('--tree', 'show content trees')
|
||||
.option('--limit <num>', 'stop loading history after num entries')
|
||||
.option('--git-dir <dir>', 'Use custom git dir instead of cwd')
|
||||
.parse(process.argv);
|
||||
|
||||
if (program.args.length > 1) {
|
||||
program.outputHelp();
|
||||
process.exit(1);
|
||||
}
|
||||
if (program.limit) program.limit = parseInt(program.limit, 10);
|
||||
|
||||
var ref = program.args[0] || "HEAD";
|
||||
var target = require('./root.js')(program);
|
||||
|
||||
var repo = git.repo(target);
|
||||
repo.logWalk(ref, function (err, log) {
|
||||
if (err) throw err;
|
||||
var shallow;
|
||||
return log.read(onRead);
|
||||
|
||||
function onRead(err, commit) {
|
||||
if (err) throw err;
|
||||
if ("limit" in program && !(program.limit--)) return;
|
||||
if (!commit) return logEnd(shallow);
|
||||
if (commit.last) shallow = true;
|
||||
logCommit(commit);
|
||||
if (!program.tree) return log.read(onRead);
|
||||
repo.treeWalk(commit.tree, function (err, tree) {
|
||||
if (err) throw err;
|
||||
tree.read(onEntry);
|
||||
function onEntry(err, entry) {
|
||||
if (err) throw err;
|
||||
if (!entry) {
|
||||
return log.read(onRead);
|
||||
}
|
||||
logEntry(entry);
|
||||
return tree.read(onEntry);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
function logCommit(commit) {
|
||||
var author = commit.author;
|
||||
var message = commit.message;
|
||||
console.log("\n\x1B[33mcommit %s\x1B[0m", commit.hash);
|
||||
console.log("Author: %s <%s>", author.name, author.email);
|
||||
console.log("Date: %s", author.date);
|
||||
console.log("\n \x1B[32;1m" + message.trim().split("\n").join("\x1B[0m\n \x1B[32m") + "\x1B[0m\n");
|
||||
}
|
||||
|
||||
function logEntry(entry) {
|
||||
var path = entry.path.replace(/\//g, "\x1B[1;34m/\x1B[0;34m") + "\x1B[0m";
|
||||
console.log(" %s %s", entry.hash, path);
|
||||
}
|
||||
|
||||
function logEnd(shallow) {
|
||||
var message = shallow ? "End of shallow record." : "Beginning of history";
|
||||
console.log("\n\x1B[30;1m%s\x1B[0m\n", message);
|
||||
}
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
var git = require('git-node');
|
||||
var utils = require('../lib/utils');
|
||||
|
||||
function lsRemote(repo, options) {
|
||||
repo = utils.fixUrl(repo);
|
||||
var remote = git.remote(repo);
|
||||
remote.discover(function (err, refs) {
|
||||
if (err) throw err;
|
||||
Object.keys(refs).forEach(function (ref) {
|
||||
console.log(refs[ref] + "\t" + ref);
|
||||
});
|
||||
remote.close(function (err) {
|
||||
if (err) throw err;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = lsRemote;
|
||||
-39
@@ -1,39 +0,0 @@
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var ini = require('ini');
|
||||
|
||||
var config = {};
|
||||
|
||||
exports.read = function(cb) {
|
||||
var userConfigPath = path.join(process.env.USERPROFILE, '.gitconfig');
|
||||
readFrom(userConfigPath, function() {
|
||||
readFrom('config', function() {
|
||||
cb(config);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
exports.get = function() {
|
||||
return config;
|
||||
}
|
||||
|
||||
function readFrom(configPath, cb) {
|
||||
fs.exists(configPath, function(exists) {
|
||||
if (exists) {
|
||||
fs.readFile(configPath, 'utf8', function(err, data) {
|
||||
if (err) throw err;
|
||||
var parsedConfig = ini.parse(data);
|
||||
mergeConfigs(config, parsedConfig);
|
||||
cb();
|
||||
});
|
||||
} else {
|
||||
// TODO: log it, but not to stdout/stderr - git doesn't do that
|
||||
// console.log('"' + configPath + '" not found');
|
||||
cb();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function mergeConfigs(to, from) {
|
||||
for (var prop in from) {to[prop] = from[prop];}
|
||||
}
|
||||
-23
@@ -1,23 +0,0 @@
|
||||
var config = require('./config').get();
|
||||
|
||||
exports.fixUrl = function(url) {
|
||||
// remove last '/' (to avoid url's ending with '/.git')
|
||||
if (url.slice(-1) == '/') {
|
||||
url = url.slice(0, -1);
|
||||
}
|
||||
|
||||
// '.git' ending is required for js-git
|
||||
if (url.slice(-4) != '.git') {
|
||||
url += '.git';
|
||||
}
|
||||
|
||||
// can't use proxy for 'git://' urls (tcp) - use 'https://' instead
|
||||
// also check if such replacement required in the config
|
||||
var httpsInsteadOfGit = config['url "https://"'] &&
|
||||
config['url "https://"'].insteadOf == 'git://';
|
||||
if ((httpsInsteadOfGit || config.nogit.proxy) && url.indexOf('git://') == 0) {
|
||||
url = url.replace('git://', 'https://');
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
||||
-15
@@ -1,15 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=`dirname "$0"`
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
"$basedir/node" "$basedir/../mkdirp/bin/cmd.js" "$@"
|
||||
ret=$?
|
||||
else
|
||||
node "$basedir/../mkdirp/bin/cmd.js" "$@"
|
||||
ret=$?
|
||||
fi
|
||||
exit $ret
|
||||
-5
@@ -1,5 +0,0 @@
|
||||
@IF EXIST "%~dp0\node.exe" (
|
||||
"%~dp0\node.exe" "%~dp0\..\mkdirp\bin\cmd.js" %*
|
||||
) ELSE (
|
||||
node "%~dp0\..\mkdirp\bin\cmd.js" %*
|
||||
)
|
||||
-42
@@ -1,42 +0,0 @@
|
||||
/**
|
||||
* node-archiver
|
||||
*
|
||||
* Copyright (c) 2012-2014 Chris Talkington, contributors.
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
|
||||
*/
|
||||
var ArchiverCore = require('./modules/core');
|
||||
var formatModules = {};
|
||||
|
||||
var archiver = module.exports = function(format, options) {
|
||||
return archiver.create(format, options);
|
||||
};
|
||||
|
||||
archiver.create = function(format, options) {
|
||||
if (formatModules[format]) {
|
||||
var inst = new ArchiverCore(options);
|
||||
inst.setModule(new formatModules[format](options));
|
||||
|
||||
return inst;
|
||||
} else {
|
||||
throw new Error('unknown format: ' + format);
|
||||
}
|
||||
};
|
||||
|
||||
archiver.registerFormat = function(format, module) {
|
||||
if (module && typeof module === 'function' && typeof module.prototype.append === 'function') {
|
||||
formatModules[format] = module;
|
||||
|
||||
// backwards compat
|
||||
var compatName = 'create' + format.charAt(0).toUpperCase() + format.slice(1);
|
||||
archiver[compatName] = function(options) {
|
||||
return archiver.create(format, options);
|
||||
};
|
||||
} else {
|
||||
throw new Error('format module invalid: ' + format);
|
||||
}
|
||||
};
|
||||
|
||||
archiver.registerFormat('zip', require('./modules/zip'));
|
||||
archiver.registerFormat('tar', require('./modules/tar'));
|
||||
archiver.registerFormat('json', require('./modules/json'));
|
||||
Generated
Vendored
-263
@@ -1,263 +0,0 @@
|
||||
/**
|
||||
* node-archiver
|
||||
*
|
||||
* Copyright (c) 2012-2014 Chris Talkington, contributors.
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
|
||||
*/
|
||||
var inherits = require('util').inherits;
|
||||
var Transform = require('readable-stream').Transform;
|
||||
|
||||
var util = require('../../util');
|
||||
var Queue = require('./queue');
|
||||
|
||||
var Archiver = module.exports = function(options) {
|
||||
options = this.options = util.defaults(options, {
|
||||
highWaterMark: 1024 * 1024
|
||||
});
|
||||
|
||||
Transform.call(this, options);
|
||||
|
||||
this._moduleOutputPiped = false;
|
||||
|
||||
this._pointer = 0;
|
||||
this._files = [];
|
||||
this._module = false;
|
||||
|
||||
this._queue = new Queue();
|
||||
this._queue.on('error', this._onQueueError.bind(this));
|
||||
this._queue.on('entry', this._onQueueEntry.bind(this));
|
||||
this._queue.once('end', this._onQueueEnd.bind(this));
|
||||
};
|
||||
|
||||
inherits(Archiver, Transform);
|
||||
|
||||
Archiver.prototype._moduleSupports = function(key) {
|
||||
this._module.supports = util.defaults(this._module.supports, {
|
||||
directory: false
|
||||
});
|
||||
|
||||
return this._module.supports[key];
|
||||
};
|
||||
|
||||
Archiver.prototype._normalizeFileData = function(data) {
|
||||
data = util.defaults(data, {
|
||||
type: 'file',
|
||||
name: null,
|
||||
date: null,
|
||||
mode: null,
|
||||
sourcePath: null
|
||||
});
|
||||
|
||||
var isDir = data.type === 'directory';
|
||||
|
||||
if (data.name) {
|
||||
data.name = util.sanitizePath(data.name);
|
||||
|
||||
if (data.name.slice(-1) === '/') {
|
||||
isDir = true;
|
||||
data.type = 'directory';
|
||||
} else if (isDir) {
|
||||
data.name += '/';
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof data.mode === 'number') {
|
||||
data.mode &= 0777;
|
||||
} else {
|
||||
data.mode = isDir ? 0755 : 0644;
|
||||
}
|
||||
|
||||
data.date = util.dateify(data.date);
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
Archiver.prototype._onModuleError = function(err) {
|
||||
this.emit('error', err);
|
||||
};
|
||||
|
||||
Archiver.prototype._onQueueEnd = function() {
|
||||
if (typeof this._module.finalize === 'function') {
|
||||
this._module.finalize();
|
||||
} else if (typeof this._module.end === 'function') {
|
||||
this._module.end();
|
||||
} else {
|
||||
this.emit('error', new Error('format module missing finalize and end method'));
|
||||
}
|
||||
};
|
||||
|
||||
Archiver.prototype._onQueueEntry = function(entry) {
|
||||
var nextCallback = function(err, file) {
|
||||
if (err) {
|
||||
this.emit('error', err);
|
||||
return;
|
||||
}
|
||||
|
||||
file = file || entry.data;
|
||||
|
||||
this.emit('entry', file);
|
||||
this._files.push(file);
|
||||
this._queue.next();
|
||||
}.bind(this);
|
||||
|
||||
this._module.append(entry.source, entry.data, nextCallback);
|
||||
};
|
||||
|
||||
Archiver.prototype._onQueueError = function(err) {
|
||||
this.emit('error', err);
|
||||
};
|
||||
|
||||
Archiver.prototype._pipeModuleOutput = function() {
|
||||
this._module.on('error', this._onModuleError.bind(this));
|
||||
this._module.pipe(this);
|
||||
|
||||
this._moduleOutputPiped = true;
|
||||
};
|
||||
|
||||
Archiver.prototype._processFile = function(source, data, callback) {
|
||||
this.emit('error', new Error('method not implemented'));
|
||||
};
|
||||
|
||||
Archiver.prototype._transform = function(chunk, encoding, callback) {
|
||||
if (chunk) {
|
||||
this._pointer += chunk.length;
|
||||
}
|
||||
|
||||
callback(null, chunk);
|
||||
};
|
||||
|
||||
Archiver.prototype.append = function(source, data) {
|
||||
data = this._normalizeFileData(data);
|
||||
|
||||
if (typeof data.name !== 'string' || data.name.length === 0) {
|
||||
this.emit('error', new Error('entry name must be a non-empty string value'));
|
||||
return this;
|
||||
}
|
||||
|
||||
if (data.type === 'directory' && !this._moduleSupports('directory')) {
|
||||
this.emit('error', new Error('entries of "' + data.type + '" type not currently supported by this module'));
|
||||
return;
|
||||
}
|
||||
|
||||
source = util.normalizeInputSource(source);
|
||||
|
||||
if (Buffer.isBuffer(source)) {
|
||||
data.sourceType = 'buffer';
|
||||
} else if (util.isStream(source)) {
|
||||
data.sourceType = 'stream';
|
||||
} else {
|
||||
this.emit('error', new Error('input source must be valid Stream or Buffer instance'));
|
||||
return this;
|
||||
}
|
||||
|
||||
this._queue.add({
|
||||
data: data,
|
||||
source: source
|
||||
});
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
Archiver.prototype.bulk = function(mappings) {
|
||||
if (!Array.isArray(mappings)) {
|
||||
mappings = [mappings];
|
||||
}
|
||||
|
||||
var self = this;
|
||||
var files = util.normalizeFilesArray(mappings);
|
||||
|
||||
files.forEach(function(file){
|
||||
var isExpandedPair = file.orig.expand || false;
|
||||
var fileData = file.data || {};
|
||||
|
||||
file.src.forEach(function(filepath) {
|
||||
var data = util._.extend({}, fileData);
|
||||
var name = isExpandedPair ? file.dest : util.unixifyPath(file.dest || '', filepath);
|
||||
|
||||
if (name === '.') {
|
||||
return;
|
||||
}
|
||||
|
||||
var stat = util.stat(filepath);
|
||||
var source;
|
||||
|
||||
if (!stat) {
|
||||
return;
|
||||
}
|
||||
|
||||
data.name = util.sanitizePath(name);
|
||||
data.sourcePath = filepath;
|
||||
|
||||
if (stat.isFile()) {
|
||||
data.type = 'file';
|
||||
data.sourceType = 'stream';
|
||||
|
||||
source = util.lazyReadStream(filepath);
|
||||
} else if (stat.isDirectory() && self._moduleSupports('directory')) {
|
||||
data.name = util.trailingSlashIt(data.name);
|
||||
data.type = 'directory';
|
||||
data.sourcePath = util.trailingSlashIt(data.sourcePath);
|
||||
data.sourceType = 'buffer';
|
||||
|
||||
source = new Buffer(0);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
self._queue.add({
|
||||
data: data,
|
||||
source: source
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
Archiver.prototype.file = function(filepath, data) {
|
||||
data = this._normalizeFileData(data);
|
||||
|
||||
if (typeof filepath !== 'string' || filepath.length === 0) {
|
||||
this.emit('error', new Error('filepath must be a non-empty string value'));
|
||||
return this;
|
||||
}
|
||||
|
||||
if (util.file.isFile(filepath)) {
|
||||
if (typeof data.name !== 'string' || data.name.length === 0) {
|
||||
data.name = util.sanitizePath(filepath);
|
||||
}
|
||||
|
||||
data.sourcePath = filepath;
|
||||
data.sourceType = 'stream';
|
||||
|
||||
this._queue.add({
|
||||
data: data,
|
||||
source: util.lazyReadStream(filepath)
|
||||
});
|
||||
} else {
|
||||
this.emit('error', new Error('invalid file: ' + filepath));
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
Archiver.prototype.finalize = function(callback) {
|
||||
this._queue.close();
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
Archiver.prototype.setModule = function(module) {
|
||||
if (this._moduleOutputPiped) {
|
||||
this.emit('error', new Error('format module already set'));
|
||||
return;
|
||||
}
|
||||
|
||||
this._module = module;
|
||||
this._pipeModuleOutput();
|
||||
};
|
||||
|
||||
Archiver.prototype.pointer = function() {
|
||||
return this._pointer;
|
||||
};
|
||||
Generated
Vendored
-58
@@ -1,58 +0,0 @@
|
||||
/**
|
||||
* node-archiver
|
||||
*
|
||||
* Copyright (c) 2012-2014 Chris Talkington, contributors.
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
|
||||
*/
|
||||
var inherits = require('util').inherits;
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
|
||||
var Queue = module.exports = function() {
|
||||
EventEmitter.call(this);
|
||||
|
||||
this.closed = false;
|
||||
this.ended = false;
|
||||
this.waiting = false;
|
||||
|
||||
this.entries = [];
|
||||
};
|
||||
|
||||
inherits(Queue, EventEmitter);
|
||||
|
||||
Queue.prototype.add = function(obj) {
|
||||
if (this.closed) {
|
||||
this.emit('error', new Error('can\'t add queue entry after close'));
|
||||
} else {
|
||||
this.entries.push(obj);
|
||||
this.run();
|
||||
}
|
||||
};
|
||||
|
||||
Queue.prototype.close = function() {
|
||||
this.closed = true;
|
||||
this.run();
|
||||
};
|
||||
|
||||
Queue.prototype.next = function() {
|
||||
this.waiting = false;
|
||||
this.run();
|
||||
};
|
||||
|
||||
Queue.prototype.run = function() {
|
||||
if (this.waiting || (this.closed && this.ended)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.entries.length === 0) {
|
||||
if (this.closed) {
|
||||
this.emit('end');
|
||||
this.ended = true;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
this.waiting = true;
|
||||
this.emit('entry', this.entries.shift());
|
||||
};
|
||||
Generated
Vendored
-71
@@ -1,71 +0,0 @@
|
||||
/**
|
||||
* node-archiver
|
||||
*
|
||||
* Copyright (c) 2012-2014 Chris Talkington, contributors.
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
|
||||
*/
|
||||
var inherits = require('util').inherits;
|
||||
var Transform = require('readable-stream').Transform;
|
||||
|
||||
var crc32 = require('buffer-crc32');
|
||||
var util = require('../../util');
|
||||
|
||||
var Json = module.exports = function(options) {
|
||||
options = this.options = util.defaults(options, {});
|
||||
|
||||
Transform.call(this, options);
|
||||
|
||||
this.supports = {
|
||||
directory: true
|
||||
};
|
||||
|
||||
this.files = [];
|
||||
};
|
||||
|
||||
inherits(Json, Transform);
|
||||
|
||||
Json.prototype._transform = function(chunk, encoding, callback) {
|
||||
callback(null, chunk);
|
||||
};
|
||||
|
||||
Json.prototype._writeStringified = function() {
|
||||
var fileString = JSON.stringify(this.files);
|
||||
this.write(fileString);
|
||||
};
|
||||
|
||||
Json.prototype.append = function(source, data, callback) {
|
||||
var self = this;
|
||||
|
||||
data.crc32 = 0;
|
||||
|
||||
function onend(err, sourceBuffer) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
|
||||
data.size = sourceBuffer.length || 0;
|
||||
data.crc32 = crc32.unsigned(sourceBuffer);
|
||||
|
||||
self.files.push(data);
|
||||
|
||||
callback(null, data);
|
||||
}
|
||||
|
||||
if (data.sourceType === 'buffer') {
|
||||
onend(null, source);
|
||||
} else if (data.sourceType === 'stream') {
|
||||
util.collectStream(source, onend);
|
||||
}
|
||||
};
|
||||
|
||||
Json.prototype.finalize = function(callback) {
|
||||
callback = callback || function() {};
|
||||
|
||||
this._writeStringified();
|
||||
|
||||
this.end();
|
||||
|
||||
callback();
|
||||
};
|
||||
Generated
Vendored
-76
@@ -1,76 +0,0 @@
|
||||
/**
|
||||
* node-archiver
|
||||
*
|
||||
* Copyright (c) 2012-2014 Chris Talkington, contributors.
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
|
||||
*/
|
||||
var zlib = require('zlib');
|
||||
|
||||
var engine = require('tar-stream');
|
||||
var util = require('../../util');
|
||||
|
||||
var Tar = module.exports = function(options) {
|
||||
options = this.options = util.defaults(options, {
|
||||
gzip: false
|
||||
});
|
||||
|
||||
if (typeof options.gzipOptions !== 'object') {
|
||||
options.gzipOptions = {};
|
||||
}
|
||||
|
||||
this.supports = {
|
||||
directory: true
|
||||
};
|
||||
|
||||
this.engine = engine.pack(options);
|
||||
this.compressor = false;
|
||||
|
||||
if (options.gzip) {
|
||||
this.compressor = zlib.createGzip(options.gzipOptions);
|
||||
this.compressor.on('error', this._onCompressorError.bind(this));
|
||||
}
|
||||
};
|
||||
|
||||
Tar.prototype._onCompressorError = function(err) {
|
||||
this.engine.emit('error', err);
|
||||
};
|
||||
|
||||
Tar.prototype.append = function(source, data, callback) {
|
||||
var self = this;
|
||||
|
||||
data.mtime = data.date;
|
||||
|
||||
function append(err, sourceBuffer) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
|
||||
self.engine.entry(data, sourceBuffer, function(err) {
|
||||
callback(err, data);
|
||||
});
|
||||
}
|
||||
|
||||
if (data.sourceType === 'buffer') {
|
||||
append(null, source);
|
||||
} else if (data.sourceType === 'stream') {
|
||||
util.collectStream(source, append);
|
||||
}
|
||||
};
|
||||
|
||||
Tar.prototype.finalize = function() {
|
||||
this.engine.finalize();
|
||||
};
|
||||
|
||||
Tar.prototype.on = function() {
|
||||
return this.engine.on.apply(this.engine, arguments);
|
||||
};
|
||||
|
||||
Tar.prototype.pipe = function(destination, options) {
|
||||
if (this.compressor) {
|
||||
return this.engine.pipe.apply(this.engine, [this.compressor]).pipe(destination, options);
|
||||
} else {
|
||||
return this.engine.pipe.apply(this.engine, arguments);
|
||||
}
|
||||
};
|
||||
Generated
Vendored
-39
@@ -1,39 +0,0 @@
|
||||
/**
|
||||
* node-archiver
|
||||
*
|
||||
* Copyright (c) 2012-2014 Chris Talkington, contributors.
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
|
||||
*/
|
||||
var engine = require('zip-stream');
|
||||
var util = require('../../util');
|
||||
|
||||
var Zip = module.exports = function(options) {
|
||||
options = this.options = util.defaults(options, {
|
||||
comment: '',
|
||||
forceUTC: false,
|
||||
store: false
|
||||
});
|
||||
|
||||
this.supports = {
|
||||
directory: true
|
||||
};
|
||||
|
||||
this.engine = new engine(options);
|
||||
};
|
||||
|
||||
Zip.prototype.append = function(source, data, callback) {
|
||||
this.engine.entry(source, data, callback);
|
||||
};
|
||||
|
||||
Zip.prototype.finalize = function() {
|
||||
this.engine.finalize();
|
||||
};
|
||||
|
||||
Zip.prototype.on = function() {
|
||||
return this.engine.on.apply(this.engine, arguments);
|
||||
};
|
||||
|
||||
Zip.prototype.pipe = function() {
|
||||
return this.engine.pipe.apply(this.engine, arguments);
|
||||
};
|
||||
-193
@@ -1,193 +0,0 @@
|
||||
/**
|
||||
* node-archiver
|
||||
*
|
||||
* Copyright (c) 2012-2014 Chris Talkington, contributors.
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
|
||||
*/
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
var Stream = require('stream').Stream;
|
||||
var PassThrough = require('readable-stream').PassThrough;
|
||||
|
||||
var util = module.exports = {};
|
||||
|
||||
util._ = require('lodash');
|
||||
util.lazystream = require('lazystream');
|
||||
util.file = require('file-utils');
|
||||
|
||||
util.collectStream = function(source, callback) {
|
||||
var collection = [];
|
||||
var size = 0;
|
||||
|
||||
source.on('error', callback);
|
||||
|
||||
source.on('data', function(chunk) {
|
||||
collection.push(chunk);
|
||||
size += chunk.length;
|
||||
});
|
||||
|
||||
source.on('end', function() {
|
||||
var buf = new Buffer(size, 'utf8');
|
||||
var offset = 0;
|
||||
|
||||
collection.forEach(function(data) {
|
||||
data.copy(buf, offset);
|
||||
offset += data.length;
|
||||
});
|
||||
|
||||
callback(null, buf);
|
||||
});
|
||||
};
|
||||
|
||||
util.dateify = function(dateish) {
|
||||
dateish = dateish || new Date();
|
||||
|
||||
if (dateish instanceof Date) {
|
||||
dateish = dateish;
|
||||
} else if (typeof dateish === 'string') {
|
||||
dateish = new Date(dateish);
|
||||
} else {
|
||||
dateish = new Date();
|
||||
}
|
||||
|
||||
return dateish;
|
||||
};
|
||||
|
||||
// this is slightly different from lodash version
|
||||
util.defaults = function(object, source, guard) {
|
||||
var args = arguments;
|
||||
args[0] = args[0] || {};
|
||||
|
||||
return util._.defaults.apply(util._, args);
|
||||
};
|
||||
|
||||
util.isStream = function(source) {
|
||||
return source instanceof Stream;
|
||||
};
|
||||
|
||||
util.lazyReadStream = function(filepath) {
|
||||
return new util.lazystream.Readable(function() {
|
||||
return fs.createReadStream(filepath);
|
||||
});
|
||||
};
|
||||
|
||||
// reusing bits of grunt's multi-task source normalization
|
||||
util.normalizeFilesArray = function(data) {
|
||||
var files = [];
|
||||
|
||||
data.forEach(function(obj) {
|
||||
var prop;
|
||||
if ('src' in obj || 'dest' in obj) {
|
||||
files.push(obj);
|
||||
}
|
||||
});
|
||||
|
||||
if (files.length === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
files = util._(files).chain().forEach(function(obj) {
|
||||
if (!('src' in obj) || !obj.src) { return; }
|
||||
// Normalize .src properties to flattened array.
|
||||
if (Array.isArray(obj.src)) {
|
||||
obj.src = util._.flatten(obj.src);
|
||||
} else {
|
||||
obj.src = [obj.src];
|
||||
}
|
||||
}).map(function(obj) {
|
||||
// Build options object, removing unwanted properties.
|
||||
var expandOptions = util._.extend({}, obj);
|
||||
delete expandOptions.src;
|
||||
delete expandOptions.dest;
|
||||
|
||||
// Expand file mappings.
|
||||
if (obj.expand) {
|
||||
return util.file.expandMapping(obj.src, obj.dest, expandOptions).map(function(mapObj) {
|
||||
// Copy obj properties to result.
|
||||
var result = util._.extend({}, obj);
|
||||
// Make a clone of the orig obj available.
|
||||
result.orig = util._.extend({}, obj);
|
||||
// Set .src and .dest, processing both as templates.
|
||||
result.src = mapObj.src;
|
||||
result.dest = mapObj.dest;
|
||||
// Remove unwanted properties.
|
||||
['expand', 'cwd', 'flatten', 'rename', 'ext'].forEach(function(prop) {
|
||||
delete result[prop];
|
||||
});
|
||||
return result;
|
||||
});
|
||||
}
|
||||
|
||||
// Copy obj properties to result, adding an .orig property.
|
||||
var result = util._.extend({}, obj);
|
||||
// Make a clone of the orig obj available.
|
||||
result.orig = util._.extend({}, obj);
|
||||
|
||||
if ('src' in result) {
|
||||
// Expose an expand-on-demand getter method as .src.
|
||||
Object.defineProperty(result, 'src', {
|
||||
enumerable: true,
|
||||
get: function fn() {
|
||||
var src;
|
||||
if (!('result' in fn)) {
|
||||
src = obj.src;
|
||||
// If src is an array, flatten it. Otherwise, make it into an array.
|
||||
src = Array.isArray(src) ? util._.flatten(src) : [src];
|
||||
// Expand src files, memoizing result.
|
||||
fn.result = util.file.expand(expandOptions, src);
|
||||
}
|
||||
return fn.result;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if ('dest' in result) {
|
||||
result.dest = obj.dest;
|
||||
}
|
||||
|
||||
return result;
|
||||
}).flatten().value();
|
||||
|
||||
return files;
|
||||
};
|
||||
|
||||
util.normalizeInputSource = function(source) {
|
||||
if (source === null) {
|
||||
return new Buffer(0);
|
||||
} else if (typeof source === 'string') {
|
||||
return new Buffer(source);
|
||||
} else if (util.isStream(source) && !source._readableState) {
|
||||
var normalized = new PassThrough();
|
||||
source.pipe(normalized);
|
||||
|
||||
return normalized;
|
||||
}
|
||||
|
||||
return source;
|
||||
};
|
||||
|
||||
util.sanitizePath = function() {
|
||||
var filepath = path.join.apply(path, arguments);
|
||||
return filepath.replace(/\\/g, '/').replace(/:/g, '').replace(/^\/+/, '');
|
||||
};
|
||||
|
||||
util.stat = function() {
|
||||
var filepath = path.join.apply(path, arguments);
|
||||
|
||||
if (!util.file.exists(filepath)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return fs.statSync(filepath);
|
||||
};
|
||||
|
||||
util.trailingSlashIt = function(str) {
|
||||
return str.slice(-1) !== '/' ? str + '/' : str;
|
||||
};
|
||||
|
||||
util.unixifyPath = function() {
|
||||
var filepath = path.join.apply(path, arguments);
|
||||
return filepath.replace(/\\/g, '/');
|
||||
};
|
||||
Generated
Vendored
-91
@@ -1,91 +0,0 @@
|
||||
var Buffer = require('buffer').Buffer;
|
||||
|
||||
var CRC_TABLE = [
|
||||
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
|
||||
0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
|
||||
0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
|
||||
0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
|
||||
0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
|
||||
0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
|
||||
0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
|
||||
0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
|
||||
0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
|
||||
0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
|
||||
0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
|
||||
0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
|
||||
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
|
||||
0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
|
||||
0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
|
||||
0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
|
||||
0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
|
||||
0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
|
||||
0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
|
||||
0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
|
||||
0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
|
||||
0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
|
||||
0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
|
||||
0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
|
||||
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
|
||||
0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
|
||||
0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
|
||||
0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
|
||||
0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
|
||||
0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
|
||||
0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
|
||||
0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
|
||||
0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
|
||||
0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
|
||||
0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
|
||||
0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
|
||||
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
|
||||
0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
|
||||
0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
|
||||
0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
|
||||
0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
|
||||
0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
|
||||
0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
|
||||
0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
|
||||
0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
|
||||
0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
|
||||
0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
|
||||
0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
|
||||
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
|
||||
0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
|
||||
0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
|
||||
0x2d02ef8d
|
||||
];
|
||||
|
||||
if (typeof Int32Array !== 'undefined')
|
||||
CRC_TABLE = new Int32Array(CRC_TABLE);
|
||||
|
||||
function bufferizeInt(num) {
|
||||
var tmp = Buffer(4);
|
||||
tmp.writeInt32BE(num, 0);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
function _crc32(buf, previous) {
|
||||
if (!Buffer.isBuffer(buf)) {
|
||||
buf = Buffer(buf);
|
||||
}
|
||||
if (Buffer.isBuffer(previous)) {
|
||||
previous = previous.readUInt32BE(0);
|
||||
}
|
||||
var crc = ~~previous ^ -1;
|
||||
for (var n = 0; n < buf.length; n++) {
|
||||
crc = CRC_TABLE[(crc ^ buf[n]) & 0xff] ^ (crc >>> 8);
|
||||
}
|
||||
return (crc ^ -1);
|
||||
}
|
||||
|
||||
function crc32() {
|
||||
return bufferizeInt(_crc32.apply(null, arguments));
|
||||
}
|
||||
crc32.signed = function () {
|
||||
return _crc32.apply(null, arguments);
|
||||
};
|
||||
crc32.unsigned = function () {
|
||||
return _crc32.apply(null, arguments) >>> 0;
|
||||
};
|
||||
|
||||
module.exports = crc32;
|
||||
packages/NoGit.0.0.8/node_modules/nogit/node_modules/archiver/node_modules/buffer-crc32/package.json
Generated
Vendored
-56
@@ -1,56 +0,0 @@
|
||||
{
|
||||
"author": {
|
||||
"name": "Brian J. Brennan",
|
||||
"email": "brianloveswords@gmail.com",
|
||||
"url": "http://bjb.io"
|
||||
},
|
||||
"name": "buffer-crc32",
|
||||
"description": "A pure javascript CRC32 algorithm that plays nice with binary data",
|
||||
"version": "0.2.3",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Vladimir Kuznetsov"
|
||||
}
|
||||
],
|
||||
"homepage": "https://github.com/brianloveswords/buffer-crc32",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/brianloveswords/buffer-crc32.git"
|
||||
},
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "tap tests/*.test.js"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"tap": "~0.2.5"
|
||||
},
|
||||
"optionalDependencies": {},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
},
|
||||
"gitHead": "f06dc30bccbad685af30666268c6fd2670805998",
|
||||
"bugs": {
|
||||
"url": "https://github.com/brianloveswords/buffer-crc32/issues"
|
||||
},
|
||||
"_id": "buffer-crc32@0.2.3",
|
||||
"_shasum": "bb54519e95d107cbd2400e76d0cab1467336d921",
|
||||
"_from": "buffer-crc32@~0.2.1",
|
||||
"_npmVersion": "1.4.14",
|
||||
"_npmUser": {
|
||||
"name": "brianloveswords",
|
||||
"email": "brianloveswords@gmail.com"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "brianloveswords",
|
||||
"email": "brian@nyhacker.org"
|
||||
}
|
||||
],
|
||||
"dist": {
|
||||
"shasum": "bb54519e95d107cbd2400e76d0cab1467336d921",
|
||||
"tarball": "http://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.3.tgz"
|
||||
},
|
||||
"directories": {},
|
||||
"_resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.3.tgz"
|
||||
}
|
||||
Generated
Vendored
-56
@@ -1,56 +0,0 @@
|
||||
/*
|
||||
* grunt
|
||||
* http://gruntjs.com/
|
||||
*
|
||||
* Copyright (c) 2013 "Cowboy" Ben Alman
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
module.exports = function(grunt) {
|
||||
|
||||
// Project configuration.
|
||||
grunt.initConfig({
|
||||
nodeunit: {
|
||||
all: [ 'tests/**.js', '!tests/fixtures/**', '!tests/helpers/**' ]
|
||||
},
|
||||
jshint: {
|
||||
lib: ['lib/**/*.js'],
|
||||
options: {
|
||||
curly: true,
|
||||
eqeqeq: true,
|
||||
immed: true,
|
||||
latedef: 'nofunc',
|
||||
newcap: true,
|
||||
noarg: true,
|
||||
sub: true,
|
||||
undef: true,
|
||||
unused: true,
|
||||
boss: true,
|
||||
eqnull: true,
|
||||
node: true,
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
tests: {
|
||||
files: [ '**/*' ],
|
||||
tasks: [ 'test' ]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// These plugins provide necessary tasks.
|
||||
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||
grunt.loadNpmTasks('grunt-contrib-nodeunit');
|
||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||
grunt.loadNpmTasks('grunt-release');
|
||||
|
||||
// "npm test" runs these tasks
|
||||
grunt.registerTask('test', ['jshint', 'nodeunit']);
|
||||
|
||||
// Default task.
|
||||
grunt.registerTask('default', ['test']);
|
||||
|
||||
};
|
||||
Generated
Vendored
-11
@@ -1,11 +0,0 @@
|
||||
var _ = require('lodash');
|
||||
var File = require('./lib/file');
|
||||
var Env = require('./lib/env');
|
||||
|
||||
var file = new File();
|
||||
|
||||
file.createEnv = function(opt) {
|
||||
return new Env(_.extend({}, this._options, opt));
|
||||
};
|
||||
|
||||
module.exports = file;
|
||||
Generated
Vendored
-163
@@ -1,163 +0,0 @@
|
||||
var path = require('path');
|
||||
var util = require('util');
|
||||
var _ = require('lodash');
|
||||
var File = require('./file');
|
||||
|
||||
module.exports = Env;
|
||||
|
||||
function Env(opt) {
|
||||
File.apply(this, arguments);
|
||||
|
||||
this._base = opt.base || '';
|
||||
this._destBase = opt.dest || '';
|
||||
this._writeFilters = {};
|
||||
this._validationFilters = {};
|
||||
|
||||
var methodsToPrefix = [ 'mkdir', 'recurse', 'read', 'readJSON', 'write', 'delete',
|
||||
'exists', 'isLink', 'isDir', 'isFile' ];
|
||||
|
||||
// Prefix path arguments with this environment root dir
|
||||
methodsToPrefix.forEach(function(methodName) {
|
||||
this[methodName] = function() {
|
||||
var args = _.toArray(arguments);
|
||||
args[0] = this.fromBase(args[0]);
|
||||
return File.prototype[methodName].apply(this, args);
|
||||
};
|
||||
}.bind(this));
|
||||
|
||||
this.copy = function() {
|
||||
var args = _.toArray(arguments);
|
||||
args[0] = this.fromBase(args[0]);
|
||||
args[1] = this.fromDestBase(args[1]);
|
||||
return File.prototype.copy.apply(this, args);
|
||||
};
|
||||
|
||||
this._actualWrite = this.write;
|
||||
this.write = function(filepath, contents, options) {
|
||||
return this.applyWriteFilters({
|
||||
path: filepath,
|
||||
contents: contents
|
||||
}, this.applyValidationFilters, options);
|
||||
};
|
||||
}
|
||||
|
||||
util.inherits(Env, File);
|
||||
|
||||
Env.prototype.setBase = function(filepath) {
|
||||
this._base = filepath;
|
||||
};
|
||||
|
||||
// Return a path prefixed by the base (if not absolute)
|
||||
Env.prototype.fromBase = function(filepath) {
|
||||
if (this.isPathAbsolute(filepath)) {
|
||||
return filepath;
|
||||
}
|
||||
return path.join(_.isFunction(this._base) ? this._base() : this._base, filepath);
|
||||
};
|
||||
|
||||
Env.prototype.setDestBase = function(filepath) {
|
||||
this._destBase = filepath;
|
||||
};
|
||||
|
||||
// Return a path prefixed by the destination base (if not absolute)
|
||||
Env.prototype.fromDestBase = function(filepath) {
|
||||
if (this.isPathAbsolute(filepath)) {
|
||||
return filepath;
|
||||
}
|
||||
return path.join(_.isFunction(this._destBase) ? this._destBase() : this._destBase, filepath);
|
||||
};
|
||||
|
||||
Env.prototype.registerWriteFilter = function(name, filter) {
|
||||
this._writeFilters[name] = filter;
|
||||
};
|
||||
|
||||
Env.prototype.removeWriteFilter = function(name) {
|
||||
delete this._writeFilters[name];
|
||||
};
|
||||
|
||||
Env.prototype.registerValidationFilter = function(name, filter) {
|
||||
this._validationFilters[name] = filter;
|
||||
};
|
||||
|
||||
Env.prototype.removeValidationFilter = function(name) {
|
||||
delete this._validationFilters[name];
|
||||
};
|
||||
|
||||
|
||||
Env.prototype.applyWriteFilters = function(file, validate, options) {
|
||||
var writeFilters = _.reduce(this._writeFilters, function(m, v) { m.push(v); return m; }, []);
|
||||
if (!writeFilters.length) {
|
||||
return validate.call(this, file, options);
|
||||
}
|
||||
|
||||
var i = 0;
|
||||
var output;
|
||||
var recurse = function(file) {
|
||||
i++;
|
||||
if (writeFilters[i]) {
|
||||
runAsync(writeFilters[i], recurse, file);
|
||||
} else {
|
||||
output = validate.call(this, file, options);
|
||||
}
|
||||
}.bind(this);
|
||||
|
||||
runAsync(writeFilters[i], recurse, file);
|
||||
|
||||
return output;
|
||||
};
|
||||
|
||||
Env.prototype.applyValidationFilters = function( file, options ) {
|
||||
var validationFilters = _.reduce(this._validationFilters, function(m, v) { m.push(v); return m; }, []);
|
||||
if (!validationFilters.length) {
|
||||
return this._actualWrite.call(this, file.path, file.contents, options);
|
||||
}
|
||||
|
||||
var i = 0;
|
||||
var output;
|
||||
var recurse = function(validated) {
|
||||
if ( validated !== true ) {
|
||||
return this.log.write(validated || 'Not actually writing to '+ file.path +' haven\'t pass validation' );
|
||||
}
|
||||
i++;
|
||||
if (validationFilters[i]) {
|
||||
runAsync(validationFilters[i], recurse, file);
|
||||
} else {
|
||||
output = this._actualWrite.call(this, file.path, file.contents, options);
|
||||
}
|
||||
}.bind(this);
|
||||
|
||||
runAsync(validationFilters[i], recurse, file);
|
||||
|
||||
return output;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Allow a function to be run async by using `this.async()`. If not, then the function is
|
||||
* runned synchronously.
|
||||
* @param {Function} func The function to run
|
||||
* @param {Function} cb Callback to be provided even if the function is run sync
|
||||
* @param {...rest} Arguments passed to `func`
|
||||
* @return {null}
|
||||
*/
|
||||
function runAsync( func, cb ) {
|
||||
var rest = [];
|
||||
var len = 1;
|
||||
|
||||
while ( len++ < arguments.length ) {
|
||||
rest.push( arguments[len] );
|
||||
}
|
||||
|
||||
var async = false;
|
||||
var returnValue = func.apply({
|
||||
async: function() {
|
||||
async = true;
|
||||
return _.once(cb);
|
||||
}
|
||||
}, rest );
|
||||
|
||||
// Note: Call the callback synchronously to keep the sync flow by default
|
||||
if ( !async ) {
|
||||
cb(returnValue);
|
||||
}
|
||||
}
|
||||
Generated
Vendored
-367
@@ -1,367 +0,0 @@
|
||||
/*
|
||||
* grunt
|
||||
* http://gruntjs.com/
|
||||
*
|
||||
* Copyright (c) 2013 "Cowboy" Ben Alman
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
|
||||
*/
|
||||
|
||||
// Nodejs libs.
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
// The module to be exported.
|
||||
module.exports = File;
|
||||
|
||||
// External libs.
|
||||
var rimraf = require('rimraf');
|
||||
var iconv = require('iconv-lite');
|
||||
var glob = require('glob');
|
||||
var minimatch = require('minimatch');
|
||||
var isBinaryFile = require('isbinaryfile');
|
||||
var _ = require('lodash');
|
||||
|
||||
var fquery = require('./query');
|
||||
var defaultLogger = require('./logger');
|
||||
|
||||
// Windows?
|
||||
var win32 = process.platform === 'win32';
|
||||
|
||||
// Normalize \\ paths to / paths.
|
||||
var unixifyPath = function(filepath) {
|
||||
if (win32) {
|
||||
return filepath.replace(/\\/g, '/');
|
||||
} else {
|
||||
return filepath;
|
||||
}
|
||||
};
|
||||
|
||||
function File(opt) {
|
||||
if (!opt) {
|
||||
opt = {};
|
||||
}
|
||||
|
||||
this._options = _.defaults(opt, {
|
||||
write: true,
|
||||
encoding: 'utf8',
|
||||
logger: defaultLogger
|
||||
});
|
||||
|
||||
Object.defineProperty(this, 'log', {
|
||||
get: function() {
|
||||
return this.option('logger');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Get or set options
|
||||
File.prototype.option = function( key, val ) {
|
||||
if (arguments.length < 2) {
|
||||
return this._options[key];
|
||||
} else {
|
||||
return this._options[key] = val;
|
||||
}
|
||||
};
|
||||
|
||||
// Process specified wildcard glob patterns or filenames against a
|
||||
// callback, excluding and uniquing files in the result set.
|
||||
var processPatterns = function(patterns, fn) {
|
||||
// Filepaths to return.
|
||||
var result = [];
|
||||
// Iterate over flattened patterns array.
|
||||
_.flatten(patterns).forEach(function(pattern) {
|
||||
// If the first character is ! it should be omitted
|
||||
var exclusion = pattern.indexOf('!') === 0;
|
||||
// If the pattern is an exclusion, remove the !
|
||||
if (exclusion) { pattern = pattern.slice(1); }
|
||||
// Find all matching files for this pattern.
|
||||
var matches = fn(pattern);
|
||||
if (exclusion) {
|
||||
// If an exclusion, remove matching files.
|
||||
result = _.difference(result, matches);
|
||||
} else {
|
||||
// Otherwise add matching files.
|
||||
result = _.union(result, matches);
|
||||
}
|
||||
});
|
||||
return result;
|
||||
};
|
||||
|
||||
// Match a filepath or filepaths against one or more wildcard patterns. Returns
|
||||
// all matching filepaths.
|
||||
File.prototype.match = function(options, patterns, filepaths) {
|
||||
if (!_.isPlainObject(options)) {
|
||||
filepaths = patterns;
|
||||
patterns = options;
|
||||
options = {};
|
||||
}
|
||||
|
||||
// Return empty set if either patterns or filepaths was omitted.
|
||||
if (patterns == null || filepaths == null) { return []; }
|
||||
// Normalize patterns and filepaths to arrays.
|
||||
if (!Array.isArray(patterns)) { patterns = [patterns]; }
|
||||
if (!Array.isArray(filepaths)) { filepaths = [filepaths]; }
|
||||
// Return empty set if there are no patterns or filepaths.
|
||||
if (patterns.length === 0 || filepaths.length === 0) { return []; }
|
||||
// Return all matching filepaths.
|
||||
return processPatterns(patterns, function(pattern) {
|
||||
return minimatch.match(filepaths, pattern, options);
|
||||
}.bind(this));
|
||||
};
|
||||
|
||||
// Match a filepath or filepaths against one or more wildcard patterns. Returns
|
||||
// true if any of the patterns match.
|
||||
File.prototype.isMatch = function() {
|
||||
return this.match.apply(this, arguments).length > 0;
|
||||
};
|
||||
|
||||
// Return an array of all file paths that match the given wildcard patterns.
|
||||
File.prototype.expand = function() {
|
||||
var args = _.toArray(arguments);
|
||||
// If the first argument is an options object, save those options to pass
|
||||
// into the File.prototype.glob.sync method.
|
||||
var options = _.isPlainObject(args[0]) ? args.shift() : {};
|
||||
// Use the first argument if it's an Array, otherwise convert the arguments
|
||||
// object to an array and use that.
|
||||
var patterns = Array.isArray(args[0]) ? args[0] : args;
|
||||
// Return empty set if there are no patterns or filepaths.
|
||||
if (patterns.length === 0) { return []; }
|
||||
// Return all matching filepaths.
|
||||
var matches = processPatterns(patterns, function(pattern) {
|
||||
// Find all matching files for this pattern.
|
||||
return glob.sync(pattern, options);
|
||||
}.bind(this));
|
||||
// Filter result set?
|
||||
if (options.filter) {
|
||||
matches = matches.filter(function(filepath) {
|
||||
filepath = path.join(options.cwd || '', filepath);
|
||||
try {
|
||||
if (typeof options.filter === 'function') {
|
||||
return options.filter(filepath);
|
||||
} else {
|
||||
// If the file is of the right type and exists, this should work.
|
||||
return fs.statSync(filepath)[options.filter]();
|
||||
}
|
||||
} catch(e) {
|
||||
// Otherwise, it's probably not the right type.
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
return matches;
|
||||
};
|
||||
|
||||
var pathSeparatorRe = /[\/\\]/g;
|
||||
|
||||
// Build a multi task "files" object dynamically.
|
||||
File.prototype.expandMapping = function(patterns, destBase, options) {
|
||||
options = _.defaults({}, options, {
|
||||
rename: function(destBase, destPath) {
|
||||
return path.join(destBase || '', destPath);
|
||||
}
|
||||
});
|
||||
var files = [];
|
||||
var fileByDest = {};
|
||||
// Find all files matching pattern, using passed-in options.
|
||||
this.expand(options, patterns).forEach(function(src) {
|
||||
var destPath = src;
|
||||
// Flatten?
|
||||
if (options.flatten) {
|
||||
destPath = path.basename(destPath);
|
||||
}
|
||||
// Change the extension?
|
||||
if (options.ext) {
|
||||
destPath = destPath.replace(/(\.[^\/]*)?$/, options.ext);
|
||||
}
|
||||
// Generate destination filename.
|
||||
var dest = options.rename(destBase, destPath, options);
|
||||
// Prepend cwd to src path if necessary.
|
||||
if (options.cwd) { src = path.join(options.cwd, src); }
|
||||
// Normalize filepaths to be unix-style.
|
||||
dest = dest.replace(pathSeparatorRe, '/');
|
||||
src = src.replace(pathSeparatorRe, '/');
|
||||
// Map correct src path to dest path.
|
||||
if (fileByDest[dest]) {
|
||||
// If dest already exists, push this src onto that dest's src array.
|
||||
fileByDest[dest].src.push(src);
|
||||
} else {
|
||||
// Otherwise create a new src-dest file mapping object.
|
||||
files.push({
|
||||
src: [src],
|
||||
dest: dest,
|
||||
});
|
||||
// And store a reference for later use.
|
||||
fileByDest[dest] = files[files.length - 1];
|
||||
}
|
||||
});
|
||||
return files;
|
||||
};
|
||||
|
||||
// Like mkdir -p. Create a directory and any intermediary directories.
|
||||
File.prototype.mkdir = function(dirpath, mode) {
|
||||
if (!this.option('write')) { return; }
|
||||
// Set directory mode in a strict-mode-friendly way.
|
||||
if (mode == null) {
|
||||
mode = parseInt('0777', 8) & (~process.umask());
|
||||
}
|
||||
dirpath.split(pathSeparatorRe).reduce(function(parts, part) {
|
||||
parts += part + '/';
|
||||
var subpath = path.resolve(parts);
|
||||
if (!File.prototype.exists.call(null, subpath)) {
|
||||
try {
|
||||
fs.mkdirSync(subpath, mode);
|
||||
} catch(e) {
|
||||
throw new Error('Unable to create directory "' + subpath + '" (Error code: ' + e.code + ').', e);
|
||||
}
|
||||
}
|
||||
return parts;
|
||||
}.bind(this), '');
|
||||
};
|
||||
|
||||
// Recurse into a directory, executing callback for each file.
|
||||
File.prototype.recurse = function(rootdir, callback, subdir) {
|
||||
var abspath = subdir ? path.join(rootdir, subdir) : rootdir;
|
||||
fs.readdirSync(abspath).forEach(function(filename) {
|
||||
var filepath = path.join(abspath, filename);
|
||||
if (fs.statSync(filepath).isDirectory()) {
|
||||
this.recurse(rootdir, callback, unixifyPath(path.join(subdir || '', filename || '')));
|
||||
} else {
|
||||
callback(unixifyPath(filepath), rootdir, subdir, filename);
|
||||
}
|
||||
}.bind(this));
|
||||
};
|
||||
|
||||
// Read a file, return its contents.
|
||||
File.prototype.read = function(filepath, options) {
|
||||
if (!options) { options = {}; }
|
||||
var contents;
|
||||
try {
|
||||
contents = fs.readFileSync(filepath);
|
||||
// If encoding is not explicitly null, convert from encoded buffer to a
|
||||
// string. If no encoding was specified, use the default.
|
||||
if (options.encoding !== null) {
|
||||
contents = iconv.decode(contents, options.encoding || this.option('encoding'));
|
||||
// Strip any BOM that might exist.
|
||||
if (contents.charCodeAt(0) === 0xFEFF) {
|
||||
contents = contents.substring(1);
|
||||
}
|
||||
}
|
||||
return contents;
|
||||
} catch(e) {
|
||||
throw new Error('Unable to read "' + filepath + '" file (Error code: ' + e.code + ').', e);
|
||||
}
|
||||
};
|
||||
|
||||
// Read a file, parse its contents, return an object.
|
||||
File.prototype.readJSON = function(filepath, options) {
|
||||
var src = this.read(filepath, options);
|
||||
var result;
|
||||
try {
|
||||
result = JSON.parse(src);
|
||||
return result;
|
||||
} catch(e) {
|
||||
throw new Error('Unable to parse "' + filepath + '" file (' + e.message + ').', e);
|
||||
}
|
||||
};
|
||||
|
||||
// Write a file.
|
||||
File.prototype.write = function(filepath, contents, options) {
|
||||
if (!options) { options = {}; }
|
||||
var nowrite = !this.option('write');
|
||||
this.log.write((nowrite ? 'Not actually writing ' : 'Writing ') + filepath + '...');
|
||||
// Create path, if necessary.
|
||||
this.mkdir(path.dirname(filepath));
|
||||
try {
|
||||
// If contents is already a Buffer, don't try to encode it. If no encoding
|
||||
// was specified, use the default.
|
||||
if (!Buffer.isBuffer(contents)) {
|
||||
contents = iconv.encode(contents, options.encoding || this.option('encoding'));
|
||||
}
|
||||
// Actually write file.
|
||||
if (!nowrite) {
|
||||
fs.writeFileSync(filepath, contents, { mode: options.mode });
|
||||
}
|
||||
return true;
|
||||
} catch(e) {
|
||||
throw new Error('Unable to write "' + filepath + '" file (Error code: ' + e.code + ').', e);
|
||||
}
|
||||
};
|
||||
|
||||
// Read a file, optionally processing its content, then write the output.
|
||||
File.prototype.copy = function(srcpath, destpath, options) {
|
||||
if (!options) { options = {}; }
|
||||
// If a process function was specified, and noProcess isn't true or doesn't
|
||||
// match the srcpath, process the file's source.
|
||||
var process = options.process && options.noProcess !== true &&
|
||||
!(options.noProcess && this.isMatch(options.noProcess, srcpath));
|
||||
// If the file will be processed, use the encoding as-specified. Otherwise,
|
||||
// use an encoding of null to force the file to be read/written as a Buffer.
|
||||
if (options.encoding === undefined && !isBinaryFile(srcpath)) {
|
||||
options.encoding = this.option('encoding');
|
||||
}
|
||||
var readWriteOptions = process ? options : _.extend({
|
||||
encoding: null,
|
||||
mode: fs.statSync(srcpath).mode
|
||||
}, options);
|
||||
// Actually read the file.
|
||||
var contents = this.read(srcpath, readWriteOptions);
|
||||
if (process) {
|
||||
this.log.write('Processing source...');
|
||||
try {
|
||||
contents = options.process(contents, srcpath);
|
||||
} catch(e) {
|
||||
throw new Error('Error while processing "' + srcpath + '" file.', e);
|
||||
}
|
||||
}
|
||||
|
||||
// Abort copy if the process function returns false.
|
||||
if (contents === false) {
|
||||
this.log.write('Write aborted.');
|
||||
} else {
|
||||
this.write(destpath, contents, readWriteOptions);
|
||||
}
|
||||
};
|
||||
|
||||
// Delete folders and files recursively
|
||||
File.prototype.delete = function(filepath, options) {
|
||||
var nowrite = !this.option('write');
|
||||
if (!options) {
|
||||
options = {force: this.option('force') || false};
|
||||
}
|
||||
|
||||
this.log.write((nowrite ? 'Not actually deleting ' : 'Deleting ') + filepath + '...');
|
||||
|
||||
if (!File.prototype.exists.call(null, filepath)) {
|
||||
this.log.warn('Cannot delete nonexistent file.');
|
||||
return false;
|
||||
}
|
||||
|
||||
// Only delete cwd or outside cwd if --force enabled. Be careful, people!
|
||||
if (!options.force) {
|
||||
var base = path.resolve(this._base || '');
|
||||
if (fquery.isPathCwd(filepath)) {
|
||||
this.log.warn('Cannot delete the current working directory.');
|
||||
return false;
|
||||
} else if (!fquery.doesPathContain(base, filepath)) {
|
||||
this.log.warn('Cannot delete files outside the current working directory.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
// Actually delete. Or not.
|
||||
if (!nowrite) {
|
||||
rimraf.sync(filepath);
|
||||
}
|
||||
return true;
|
||||
} catch(e) {
|
||||
throw new Error('Unable to delete "' + filepath + '" file (' + e.message + ').', e);
|
||||
}
|
||||
};
|
||||
|
||||
// Extend dependencies
|
||||
File.prototype.glob = require('glob');
|
||||
File.prototype.minimatch = require('minimatch');
|
||||
File.prototype.findup = require('findup-sync');
|
||||
_.extend(File.prototype, fquery);
|
||||
Generated
Vendored
-8
@@ -1,8 +0,0 @@
|
||||
module.exports = {
|
||||
warn: function(msg) {
|
||||
console.log('WARN: ' + msg);
|
||||
},
|
||||
write: function(msg) {
|
||||
console.log(msg);
|
||||
}
|
||||
};
|
||||
Generated
Vendored
-82
@@ -1,82 +0,0 @@
|
||||
/**
|
||||
* File/Path comparison and queries
|
||||
*/
|
||||
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
|
||||
// True if the file path exists.
|
||||
exports.exists = function() {
|
||||
var filepath = path.join.apply(path, arguments);
|
||||
return fs.existsSync(filepath);
|
||||
};
|
||||
|
||||
// True if the file is a symbolic link.
|
||||
exports.isLink = function() {
|
||||
var filepath = path.join.apply(path, arguments);
|
||||
return this.exists(filepath) && fs.lstatSync(filepath).isSymbolicLink();
|
||||
};
|
||||
|
||||
// True if the path is a directory.
|
||||
exports.isDir = function() {
|
||||
var filepath = path.join.apply(path, arguments);
|
||||
return this.exists(filepath) && fs.statSync(filepath).isDirectory();
|
||||
};
|
||||
|
||||
// True if the path is a file.
|
||||
exports.isFile = function() {
|
||||
var filepath = path.join.apply(path, arguments);
|
||||
return this.exists(filepath) && fs.statSync(filepath).isFile();
|
||||
};
|
||||
|
||||
exports.isExecutable = function(filepath) {
|
||||
var stats = fs.statSync(filepath);
|
||||
return !!(1 & parseFloat((stats.mode & parseInt(777, 8)).toString(8)[0]));
|
||||
};
|
||||
|
||||
// Is a given file path absolute?
|
||||
exports.isPathAbsolute = function() {
|
||||
var filepath = path.join.apply(path, arguments);
|
||||
return path.resolve(filepath) === filepath.replace(/[\/\\]+$/, '');
|
||||
};
|
||||
|
||||
// Do all the specified paths refer to the same path?
|
||||
exports.arePathsEquivalent = function(first) {
|
||||
first = path.resolve(first);
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
if (first !== path.resolve(arguments[i])) { return false; }
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
// Are descendant path(s) contained within ancestor path? Note: does not test
|
||||
// if paths actually exist.
|
||||
exports.doesPathContain = function(ancestor) {
|
||||
ancestor = path.resolve(ancestor);
|
||||
var relative;
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
relative = path.relative(path.resolve(arguments[i]), ancestor);
|
||||
if (relative === '' || /\w+/.test(relative)) { return false; }
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
// Test to see if a filepath is the CWD.
|
||||
exports.isPathCwd = function() {
|
||||
var filepath = path.join.apply(path, arguments);
|
||||
try {
|
||||
return this.arePathsEquivalent(process.cwd(), fs.realpathSync(filepath));
|
||||
} catch(e) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
// Test to see if a filepath is contained within the CWD.
|
||||
exports.isPathInCwd = function() {
|
||||
var filepath = path.join.apply(path, arguments);
|
||||
try {
|
||||
return this.doesPathContain(process.cwd(), fs.realpathSync(filepath));
|
||||
} catch(e) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
Generated
Vendored
-15
@@ -1,15 +0,0 @@
|
||||
#!/bin/sh
|
||||
basedir=`dirname "$0"`
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
"$basedir/node" "$basedir/../rimraf/bin.js" "$@"
|
||||
ret=$?
|
||||
else
|
||||
node "$basedir/../rimraf/bin.js" "$@"
|
||||
ret=$?
|
||||
fi
|
||||
exit $ret
|
||||
Generated
Vendored
-5
@@ -1,5 +0,0 @@
|
||||
@IF EXIST "%~dp0\node.exe" (
|
||||
"%~dp0\node.exe" "%~dp0\..\rimraf\bin.js" %*
|
||||
) ELSE (
|
||||
node "%~dp0\..\rimraf\bin.js" %*
|
||||
)
|
||||
Generated
Vendored
-25
@@ -1,25 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
module.exports = function(grunt) {
|
||||
|
||||
// Project configuration.
|
||||
grunt.initConfig({
|
||||
nodeunit: {
|
||||
files: ['test/**/*_test.js'],
|
||||
},
|
||||
jshint: {
|
||||
options: {
|
||||
jshintrc: '.jshintrc'
|
||||
},
|
||||
all: ['Gruntfile.js', 'lib/**/*.js', 'test/**/*.js']
|
||||
}
|
||||
});
|
||||
|
||||
// Load plugins.
|
||||
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||
grunt.loadNpmTasks('grunt-contrib-nodeunit');
|
||||
|
||||
// Default task.
|
||||
grunt.registerTask('default', ['jshint', 'nodeunit']);
|
||||
|
||||
};
|
||||
Generated
Vendored
-46
@@ -1,46 +0,0 @@
|
||||
/*
|
||||
* findup-sync
|
||||
* https://github.com/cowboy/node-findup-sync
|
||||
*
|
||||
* Copyright (c) 2013 "Cowboy" Ben Alman
|
||||
* Licensed under the MIT license.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
// Nodejs libs.
|
||||
var path = require('path');
|
||||
|
||||
// External libs.
|
||||
var glob = require('glob');
|
||||
var _ = require('lodash');
|
||||
|
||||
// Search for a filename in the given directory or all parent directories.
|
||||
module.exports = function(patterns, options) {
|
||||
// Normalize patterns to an array.
|
||||
if (!Array.isArray(patterns)) { patterns = [patterns]; }
|
||||
// Create globOptions so that it can be modified without mutating the
|
||||
// original object.
|
||||
var globOptions = Object.create(options || {});
|
||||
globOptions.maxDepth = 1;
|
||||
globOptions.cwd = path.resolve(globOptions.cwd || '.');
|
||||
|
||||
var files, lastpath;
|
||||
do {
|
||||
// Search for files matching patterns.
|
||||
files = _(patterns).map(function(pattern) {
|
||||
return glob.sync(pattern, globOptions);
|
||||
}).flatten().uniq().value();
|
||||
// Return file if found.
|
||||
if (files.length > 0) {
|
||||
return path.resolve(path.join(globOptions.cwd, files[0]));
|
||||
}
|
||||
// Go up a directory.
|
||||
lastpath = globOptions.cwd;
|
||||
globOptions.cwd = path.resolve(globOptions.cwd, '..');
|
||||
// If parentpath is the same as basedir, we can't go any higher.
|
||||
} while (globOptions.cwd !== lastpath);
|
||||
|
||||
// No files were found!
|
||||
return null;
|
||||
};
|
||||
Generated
Vendored
-64
@@ -1,64 +0,0 @@
|
||||
{
|
||||
"name": "findup-sync",
|
||||
"description": "Find the first file matching a given pattern in the current directory or the nearest ancestor directory.",
|
||||
"version": "0.1.3",
|
||||
"homepage": "https://github.com/cowboy/node-findup-sync",
|
||||
"author": {
|
||||
"name": "\"Cowboy\" Ben Alman",
|
||||
"url": "http://benalman.com/"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/cowboy/node-findup-sync.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/cowboy/node-findup-sync/issues"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
"type": "MIT",
|
||||
"url": "https://github.com/cowboy/node-findup-sync/blob/master/LICENSE-MIT"
|
||||
}
|
||||
],
|
||||
"main": "lib/findup-sync",
|
||||
"engines": {
|
||||
"node": ">= 0.6.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "grunt nodeunit"
|
||||
},
|
||||
"dependencies": {
|
||||
"glob": "~3.2.9",
|
||||
"lodash": "~2.4.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"grunt": "~0.4.4",
|
||||
"grunt-contrib-jshint": "~0.9.2",
|
||||
"grunt-contrib-nodeunit": "~0.3.3"
|
||||
},
|
||||
"keywords": [
|
||||
"find",
|
||||
"glob",
|
||||
"file"
|
||||
],
|
||||
"_id": "findup-sync@0.1.3",
|
||||
"dist": {
|
||||
"shasum": "7f3e7a97b82392c653bf06589bd85190e93c3683",
|
||||
"tarball": "http://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz"
|
||||
},
|
||||
"_from": "findup-sync@~0.1.2",
|
||||
"_npmVersion": "1.4.4",
|
||||
"_npmUser": {
|
||||
"name": "cowboy",
|
||||
"email": "cowboy@rj3.net"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "cowboy",
|
||||
"email": "cowboy@rj3.net"
|
||||
}
|
||||
],
|
||||
"directories": {},
|
||||
"_shasum": "7f3e7a97b82392c653bf06589bd85190e93c3683",
|
||||
"_resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz"
|
||||
}
|
||||
Generated
Vendored
-728
@@ -1,728 +0,0 @@
|
||||
// Approach:
|
||||
//
|
||||
// 1. Get the minimatch set
|
||||
// 2. For each pattern in the set, PROCESS(pattern)
|
||||
// 3. Store matches per-set, then uniq them
|
||||
//
|
||||
// PROCESS(pattern)
|
||||
// Get the first [n] items from pattern that are all strings
|
||||
// Join these together. This is PREFIX.
|
||||
// If there is no more remaining, then stat(PREFIX) and
|
||||
// add to matches if it succeeds. END.
|
||||
// readdir(PREFIX) as ENTRIES
|
||||
// If fails, END
|
||||
// If pattern[n] is GLOBSTAR
|
||||
// // handle the case where the globstar match is empty
|
||||
// // by pruning it out, and testing the resulting pattern
|
||||
// PROCESS(pattern[0..n] + pattern[n+1 .. $])
|
||||
// // handle other cases.
|
||||
// for ENTRY in ENTRIES (not dotfiles)
|
||||
// // attach globstar + tail onto the entry
|
||||
// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $])
|
||||
//
|
||||
// else // not globstar
|
||||
// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
|
||||
// Test ENTRY against pattern[n]
|
||||
// If fails, continue
|
||||
// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
|
||||
//
|
||||
// Caveat:
|
||||
// Cache all stats and readdirs results to minimize syscall. Since all
|
||||
// we ever care about is existence and directory-ness, we can just keep
|
||||
// `true` for files, and [children,...] for directories, or `false` for
|
||||
// things that don't exist.
|
||||
|
||||
|
||||
|
||||
module.exports = glob
|
||||
|
||||
var fs = require("fs")
|
||||
, minimatch = require("minimatch")
|
||||
, Minimatch = minimatch.Minimatch
|
||||
, inherits = require("inherits")
|
||||
, EE = require("events").EventEmitter
|
||||
, path = require("path")
|
||||
, isDir = {}
|
||||
, assert = require("assert").ok
|
||||
|
||||
function glob (pattern, options, cb) {
|
||||
if (typeof options === "function") cb = options, options = {}
|
||||
if (!options) options = {}
|
||||
|
||||
if (typeof options === "number") {
|
||||
deprecated()
|
||||
return
|
||||
}
|
||||
|
||||
var g = new Glob(pattern, options, cb)
|
||||
return g.sync ? g.found : g
|
||||
}
|
||||
|
||||
glob.fnmatch = deprecated
|
||||
|
||||
function deprecated () {
|
||||
throw new Error("glob's interface has changed. Please see the docs.")
|
||||
}
|
||||
|
||||
glob.sync = globSync
|
||||
function globSync (pattern, options) {
|
||||
if (typeof options === "number") {
|
||||
deprecated()
|
||||
return
|
||||
}
|
||||
|
||||
options = options || {}
|
||||
options.sync = true
|
||||
return glob(pattern, options)
|
||||
}
|
||||
|
||||
this._processingEmitQueue = false
|
||||
|
||||
glob.Glob = Glob
|
||||
inherits(Glob, EE)
|
||||
function Glob (pattern, options, cb) {
|
||||
if (!(this instanceof Glob)) {
|
||||
return new Glob(pattern, options, cb)
|
||||
}
|
||||
|
||||
if (typeof options === "function") {
|
||||
cb = options
|
||||
options = null
|
||||
}
|
||||
|
||||
if (typeof cb === "function") {
|
||||
this.on("error", cb)
|
||||
this.on("end", function (matches) {
|
||||
cb(null, matches)
|
||||
})
|
||||
}
|
||||
|
||||
options = options || {}
|
||||
|
||||
this._endEmitted = false
|
||||
this.EOF = {}
|
||||
this._emitQueue = []
|
||||
|
||||
this.paused = false
|
||||
this._processingEmitQueue = false
|
||||
|
||||
this.maxDepth = options.maxDepth || 1000
|
||||
this.maxLength = options.maxLength || Infinity
|
||||
this.cache = options.cache || {}
|
||||
this.statCache = options.statCache || {}
|
||||
|
||||
this.changedCwd = false
|
||||
var cwd = process.cwd()
|
||||
if (!options.hasOwnProperty("cwd")) this.cwd = cwd
|
||||
else {
|
||||
this.cwd = options.cwd
|
||||
this.changedCwd = path.resolve(options.cwd) !== cwd
|
||||
}
|
||||
|
||||
this.root = options.root || path.resolve(this.cwd, "/")
|
||||
this.root = path.resolve(this.root)
|
||||
if (process.platform === "win32")
|
||||
this.root = this.root.replace(/\\/g, "/")
|
||||
|
||||
this.nomount = !!options.nomount
|
||||
|
||||
if (!pattern) {
|
||||
throw new Error("must provide pattern")
|
||||
}
|
||||
|
||||
// base-matching: just use globstar for that.
|
||||
if (options.matchBase && -1 === pattern.indexOf("/")) {
|
||||
if (options.noglobstar) {
|
||||
throw new Error("base matching requires globstar")
|
||||
}
|
||||
pattern = "**/" + pattern
|
||||
}
|
||||
|
||||
this.strict = options.strict !== false
|
||||
this.dot = !!options.dot
|
||||
this.mark = !!options.mark
|
||||
this.sync = !!options.sync
|
||||
this.nounique = !!options.nounique
|
||||
this.nonull = !!options.nonull
|
||||
this.nosort = !!options.nosort
|
||||
this.nocase = !!options.nocase
|
||||
this.stat = !!options.stat
|
||||
|
||||
this.debug = !!options.debug || !!options.globDebug
|
||||
if (this.debug)
|
||||
this.log = console.error
|
||||
|
||||
this.silent = !!options.silent
|
||||
|
||||
var mm = this.minimatch = new Minimatch(pattern, options)
|
||||
this.options = mm.options
|
||||
pattern = this.pattern = mm.pattern
|
||||
|
||||
this.error = null
|
||||
this.aborted = false
|
||||
|
||||
// list of all the patterns that ** has resolved do, so
|
||||
// we can avoid visiting multiple times.
|
||||
this._globstars = {}
|
||||
|
||||
EE.call(this)
|
||||
|
||||
// process each pattern in the minimatch set
|
||||
var n = this.minimatch.set.length
|
||||
|
||||
// The matches are stored as {<filename>: true,...} so that
|
||||
// duplicates are automagically pruned.
|
||||
// Later, we do an Object.keys() on these.
|
||||
// Keep them as a list so we can fill in when nonull is set.
|
||||
this.matches = new Array(n)
|
||||
|
||||
this.minimatch.set.forEach(iterator.bind(this))
|
||||
function iterator (pattern, i, set) {
|
||||
this._process(pattern, 0, i, function (er) {
|
||||
if (er) this.emit("error", er)
|
||||
if (-- n <= 0) this._finish()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Glob.prototype.log = function () {}
|
||||
|
||||
Glob.prototype._finish = function () {
|
||||
assert(this instanceof Glob)
|
||||
|
||||
var nou = this.nounique
|
||||
, all = nou ? [] : {}
|
||||
|
||||
for (var i = 0, l = this.matches.length; i < l; i ++) {
|
||||
var matches = this.matches[i]
|
||||
this.log("matches[%d] =", i, matches)
|
||||
// do like the shell, and spit out the literal glob
|
||||
if (!matches) {
|
||||
if (this.nonull) {
|
||||
var literal = this.minimatch.globSet[i]
|
||||
if (nou) all.push(literal)
|
||||
else all[literal] = true
|
||||
}
|
||||
} else {
|
||||
// had matches
|
||||
var m = Object.keys(matches)
|
||||
if (nou) all.push.apply(all, m)
|
||||
else m.forEach(function (m) {
|
||||
all[m] = true
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (!nou) all = Object.keys(all)
|
||||
|
||||
if (!this.nosort) {
|
||||
all = all.sort(this.nocase ? alphasorti : alphasort)
|
||||
}
|
||||
|
||||
if (this.mark) {
|
||||
// at *some* point we statted all of these
|
||||
all = all.map(this._mark, this)
|
||||
}
|
||||
|
||||
this.log("emitting end", all)
|
||||
|
||||
this.EOF = this.found = all
|
||||
this.emitMatch(this.EOF)
|
||||
}
|
||||
|
||||
function alphasorti (a, b) {
|
||||
a = a.toLowerCase()
|
||||
b = b.toLowerCase()
|
||||
return alphasort(a, b)
|
||||
}
|
||||
|
||||
function alphasort (a, b) {
|
||||
return a > b ? 1 : a < b ? -1 : 0
|
||||
}
|
||||
|
||||
Glob.prototype._mark = function (p) {
|
||||
var c = this.cache[p]
|
||||
var m = p
|
||||
if (c) {
|
||||
var isDir = c === 2 || Array.isArray(c)
|
||||
var slash = p.slice(-1) === '/'
|
||||
|
||||
if (isDir && !slash)
|
||||
m += '/'
|
||||
else if (!isDir && slash)
|
||||
m = m.slice(0, -1)
|
||||
|
||||
if (m !== p) {
|
||||
this.statCache[m] = this.statCache[p]
|
||||
this.cache[m] = this.cache[p]
|
||||
}
|
||||
}
|
||||
|
||||
return m
|
||||
}
|
||||
|
||||
Glob.prototype.abort = function () {
|
||||
this.aborted = true
|
||||
this.emit("abort")
|
||||
}
|
||||
|
||||
Glob.prototype.pause = function () {
|
||||
if (this.paused) return
|
||||
if (this.sync)
|
||||
this.emit("error", new Error("Can't pause/resume sync glob"))
|
||||
this.paused = true
|
||||
this.emit("pause")
|
||||
}
|
||||
|
||||
Glob.prototype.resume = function () {
|
||||
if (!this.paused) return
|
||||
if (this.sync)
|
||||
this.emit("error", new Error("Can't pause/resume sync glob"))
|
||||
this.paused = false
|
||||
this.emit("resume")
|
||||
this._processEmitQueue()
|
||||
//process.nextTick(this.emit.bind(this, "resume"))
|
||||
}
|
||||
|
||||
Glob.prototype.emitMatch = function (m) {
|
||||
this.log('emitMatch', m)
|
||||
this._emitQueue.push(m)
|
||||
this._processEmitQueue()
|
||||
}
|
||||
|
||||
Glob.prototype._processEmitQueue = function (m) {
|
||||
this.log("pEQ paused=%j processing=%j m=%j", this.paused,
|
||||
this._processingEmitQueue, m)
|
||||
var done = false
|
||||
while (!this._processingEmitQueue &&
|
||||
!this.paused) {
|
||||
this._processingEmitQueue = true
|
||||
var m = this._emitQueue.shift()
|
||||
this.log(">processEmitQueue", m === this.EOF ? ":EOF:" : m)
|
||||
if (!m) {
|
||||
this.log(">processEmitQueue, falsey m")
|
||||
this._processingEmitQueue = false
|
||||
break
|
||||
}
|
||||
|
||||
if (m === this.EOF || !(this.mark && !this.stat)) {
|
||||
this.log("peq: unmarked, or eof")
|
||||
next.call(this, 0, false)
|
||||
} else if (this.statCache[m]) {
|
||||
var sc = this.statCache[m]
|
||||
var exists
|
||||
if (sc)
|
||||
exists = sc.isDirectory() ? 2 : 1
|
||||
this.log("peq: stat cached")
|
||||
next.call(this, exists, exists === 2)
|
||||
} else {
|
||||
this.log("peq: _stat, then next")
|
||||
this._stat(m, next)
|
||||
}
|
||||
|
||||
function next(exists, isDir) {
|
||||
this.log("next", m, exists, isDir)
|
||||
var ev = m === this.EOF ? "end" : "match"
|
||||
|
||||
// "end" can only happen once.
|
||||
assert(!this._endEmitted)
|
||||
if (ev === "end")
|
||||
this._endEmitted = true
|
||||
|
||||
if (exists) {
|
||||
// Doesn't mean it necessarily doesn't exist, it's possible
|
||||
// we just didn't check because we don't care that much, or
|
||||
// this is EOF anyway.
|
||||
if (isDir && !m.match(/\/$/)) {
|
||||
m = m + "/"
|
||||
} else if (!isDir && m.match(/\/$/)) {
|
||||
m = m.replace(/\/+$/, "")
|
||||
}
|
||||
}
|
||||
this.log("emit", ev, m)
|
||||
this.emit(ev, m)
|
||||
this._processingEmitQueue = false
|
||||
if (done && m !== this.EOF && !this.paused)
|
||||
this._processEmitQueue()
|
||||
}
|
||||
}
|
||||
done = true
|
||||
}
|
||||
|
||||
Glob.prototype._process = function (pattern, depth, index, cb_) {
|
||||
assert(this instanceof Glob)
|
||||
|
||||
var cb = function cb (er, res) {
|
||||
assert(this instanceof Glob)
|
||||
if (this.paused) {
|
||||
if (!this._processQueue) {
|
||||
this._processQueue = []
|
||||
this.once("resume", function () {
|
||||
var q = this._processQueue
|
||||
this._processQueue = null
|
||||
q.forEach(function (cb) { cb() })
|
||||
})
|
||||
}
|
||||
this._processQueue.push(cb_.bind(this, er, res))
|
||||
} else {
|
||||
cb_.call(this, er, res)
|
||||
}
|
||||
}.bind(this)
|
||||
|
||||
if (this.aborted) return cb()
|
||||
|
||||
if (depth > this.maxDepth) return cb()
|
||||
|
||||
// Get the first [n] parts of pattern that are all strings.
|
||||
var n = 0
|
||||
while (typeof pattern[n] === "string") {
|
||||
n ++
|
||||
}
|
||||
// now n is the index of the first one that is *not* a string.
|
||||
|
||||
// see if there's anything else
|
||||
var prefix
|
||||
switch (n) {
|
||||
// if not, then this is rather simple
|
||||
case pattern.length:
|
||||
prefix = pattern.join("/")
|
||||
this._stat(prefix, function (exists, isDir) {
|
||||
// either it's there, or it isn't.
|
||||
// nothing more to do, either way.
|
||||
if (exists) {
|
||||
if (prefix && isAbsolute(prefix) && !this.nomount) {
|
||||
if (prefix.charAt(0) === "/") {
|
||||
prefix = path.join(this.root, prefix)
|
||||
} else {
|
||||
prefix = path.resolve(this.root, prefix)
|
||||
}
|
||||
}
|
||||
|
||||
if (process.platform === "win32")
|
||||
prefix = prefix.replace(/\\/g, "/")
|
||||
|
||||
this.matches[index] = this.matches[index] || {}
|
||||
this.matches[index][prefix] = true
|
||||
this.emitMatch(prefix)
|
||||
}
|
||||
return cb()
|
||||
})
|
||||
return
|
||||
|
||||
case 0:
|
||||
// pattern *starts* with some non-trivial item.
|
||||
// going to readdir(cwd), but not include the prefix in matches.
|
||||
prefix = null
|
||||
break
|
||||
|
||||
default:
|
||||
// pattern has some string bits in the front.
|
||||
// whatever it starts with, whether that's "absolute" like /foo/bar,
|
||||
// or "relative" like "../baz"
|
||||
prefix = pattern.slice(0, n)
|
||||
prefix = prefix.join("/")
|
||||
break
|
||||
}
|
||||
|
||||
// get the list of entries.
|
||||
var read
|
||||
if (prefix === null) read = "."
|
||||
else if (isAbsolute(prefix) || isAbsolute(pattern.join("/"))) {
|
||||
if (!prefix || !isAbsolute(prefix)) {
|
||||
prefix = path.join("/", prefix)
|
||||
}
|
||||
read = prefix = path.resolve(prefix)
|
||||
|
||||
// if (process.platform === "win32")
|
||||
// read = prefix = prefix.replace(/^[a-zA-Z]:|\\/g, "/")
|
||||
|
||||
this.log('absolute: ', prefix, this.root, pattern, read)
|
||||
} else {
|
||||
read = prefix
|
||||
}
|
||||
|
||||
this.log('readdir(%j)', read, this.cwd, this.root)
|
||||
|
||||
return this._readdir(read, function (er, entries) {
|
||||
if (er) {
|
||||
// not a directory!
|
||||
// this means that, whatever else comes after this, it can never match
|
||||
return cb()
|
||||
}
|
||||
|
||||
// globstar is special
|
||||
if (pattern[n] === minimatch.GLOBSTAR) {
|
||||
// test without the globstar, and with every child both below
|
||||
// and replacing the globstar.
|
||||
var s = [ pattern.slice(0, n).concat(pattern.slice(n + 1)) ]
|
||||
entries.forEach(function (e) {
|
||||
if (e.charAt(0) === "." && !this.dot) return
|
||||
// instead of the globstar
|
||||
s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1)))
|
||||
// below the globstar
|
||||
s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n)))
|
||||
}, this)
|
||||
|
||||
s = s.filter(function (pattern) {
|
||||
var key = gsKey(pattern)
|
||||
var seen = !this._globstars[key]
|
||||
this._globstars[key] = true
|
||||
return seen
|
||||
}, this)
|
||||
|
||||
if (!s.length)
|
||||
return cb()
|
||||
|
||||
// now asyncForEach over this
|
||||
var l = s.length
|
||||
, errState = null
|
||||
s.forEach(function (gsPattern) {
|
||||
this._process(gsPattern, depth + 1, index, function (er) {
|
||||
if (errState) return
|
||||
if (er) return cb(errState = er)
|
||||
if (--l <= 0) return cb()
|
||||
})
|
||||
}, this)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// not a globstar
|
||||
// It will only match dot entries if it starts with a dot, or if
|
||||
// dot is set. Stuff like @(.foo|.bar) isn't allowed.
|
||||
var pn = pattern[n]
|
||||
var rawGlob = pattern[n]._glob
|
||||
, dotOk = this.dot || rawGlob.charAt(0) === "."
|
||||
|
||||
entries = entries.filter(function (e) {
|
||||
return (e.charAt(0) !== "." || dotOk) &&
|
||||
e.match(pattern[n])
|
||||
})
|
||||
|
||||
// If n === pattern.length - 1, then there's no need for the extra stat
|
||||
// *unless* the user has specified "mark" or "stat" explicitly.
|
||||
// We know that they exist, since the readdir returned them.
|
||||
if (n === pattern.length - 1 &&
|
||||
!this.mark &&
|
||||
!this.stat) {
|
||||
entries.forEach(function (e) {
|
||||
if (prefix) {
|
||||
if (prefix !== "/") e = prefix + "/" + e
|
||||
else e = prefix + e
|
||||
}
|
||||
if (e.charAt(0) === "/" && !this.nomount) {
|
||||
e = path.join(this.root, e)
|
||||
}
|
||||
|
||||
if (process.platform === "win32")
|
||||
e = e.replace(/\\/g, "/")
|
||||
|
||||
this.matches[index] = this.matches[index] || {}
|
||||
this.matches[index][e] = true
|
||||
this.emitMatch(e)
|
||||
}, this)
|
||||
return cb.call(this)
|
||||
}
|
||||
|
||||
|
||||
// now test all the remaining entries as stand-ins for that part
|
||||
// of the pattern.
|
||||
var l = entries.length
|
||||
, errState = null
|
||||
if (l === 0) return cb() // no matches possible
|
||||
entries.forEach(function (e) {
|
||||
var p = pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1))
|
||||
this._process(p, depth + 1, index, function (er) {
|
||||
if (errState) return
|
||||
if (er) return cb(errState = er)
|
||||
if (--l === 0) return cb.call(this)
|
||||
})
|
||||
}, this)
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
function gsKey (pattern) {
|
||||
return '**' + pattern.map(function (p) {
|
||||
return (p === minimatch.GLOBSTAR) ? '**' : (''+p)
|
||||
}).join('/')
|
||||
}
|
||||
|
||||
Glob.prototype._stat = function (f, cb) {
|
||||
assert(this instanceof Glob)
|
||||
var abs = f
|
||||
if (f.charAt(0) === "/") {
|
||||
abs = path.join(this.root, f)
|
||||
} else if (this.changedCwd) {
|
||||
abs = path.resolve(this.cwd, f)
|
||||
}
|
||||
|
||||
if (f.length > this.maxLength) {
|
||||
var er = new Error("Path name too long")
|
||||
er.code = "ENAMETOOLONG"
|
||||
er.path = f
|
||||
return this._afterStat(f, abs, cb, er)
|
||||
}
|
||||
|
||||
this.log('stat', [this.cwd, f, '=', abs])
|
||||
|
||||
if (!this.stat && this.cache.hasOwnProperty(f)) {
|
||||
var exists = this.cache[f]
|
||||
, isDir = exists && (Array.isArray(exists) || exists === 2)
|
||||
if (this.sync) return cb.call(this, !!exists, isDir)
|
||||
return process.nextTick(cb.bind(this, !!exists, isDir))
|
||||
}
|
||||
|
||||
var stat = this.statCache[abs]
|
||||
if (this.sync || stat) {
|
||||
var er
|
||||
try {
|
||||
stat = fs.statSync(abs)
|
||||
} catch (e) {
|
||||
er = e
|
||||
}
|
||||
this._afterStat(f, abs, cb, er, stat)
|
||||
} else {
|
||||
fs.stat(abs, this._afterStat.bind(this, f, abs, cb))
|
||||
}
|
||||
}
|
||||
|
||||
Glob.prototype._afterStat = function (f, abs, cb, er, stat) {
|
||||
var exists
|
||||
assert(this instanceof Glob)
|
||||
|
||||
if (abs.slice(-1) === "/" && stat && !stat.isDirectory()) {
|
||||
this.log("should be ENOTDIR, fake it")
|
||||
|
||||
er = new Error("ENOTDIR, not a directory '" + abs + "'")
|
||||
er.path = abs
|
||||
er.code = "ENOTDIR"
|
||||
stat = null
|
||||
}
|
||||
|
||||
var emit = !this.statCache[abs]
|
||||
this.statCache[abs] = stat
|
||||
|
||||
if (er || !stat) {
|
||||
exists = false
|
||||
} else {
|
||||
exists = stat.isDirectory() ? 2 : 1
|
||||
if (emit)
|
||||
this.emit('stat', f, stat)
|
||||
}
|
||||
this.cache[f] = this.cache[f] || exists
|
||||
cb.call(this, !!exists, exists === 2)
|
||||
}
|
||||
|
||||
Glob.prototype._readdir = function (f, cb) {
|
||||
assert(this instanceof Glob)
|
||||
var abs = f
|
||||
if (f.charAt(0) === "/") {
|
||||
abs = path.join(this.root, f)
|
||||
} else if (isAbsolute(f)) {
|
||||
abs = f
|
||||
} else if (this.changedCwd) {
|
||||
abs = path.resolve(this.cwd, f)
|
||||
}
|
||||
|
||||
if (f.length > this.maxLength) {
|
||||
var er = new Error("Path name too long")
|
||||
er.code = "ENAMETOOLONG"
|
||||
er.path = f
|
||||
return this._afterReaddir(f, abs, cb, er)
|
||||
}
|
||||
|
||||
this.log('readdir', [this.cwd, f, abs])
|
||||
if (this.cache.hasOwnProperty(f)) {
|
||||
var c = this.cache[f]
|
||||
if (Array.isArray(c)) {
|
||||
if (this.sync) return cb.call(this, null, c)
|
||||
return process.nextTick(cb.bind(this, null, c))
|
||||
}
|
||||
|
||||
if (!c || c === 1) {
|
||||
// either ENOENT or ENOTDIR
|
||||
var code = c ? "ENOTDIR" : "ENOENT"
|
||||
, er = new Error((c ? "Not a directory" : "Not found") + ": " + f)
|
||||
er.path = f
|
||||
er.code = code
|
||||
this.log(f, er)
|
||||
if (this.sync) return cb.call(this, er)
|
||||
return process.nextTick(cb.bind(this, er))
|
||||
}
|
||||
|
||||
// at this point, c === 2, meaning it's a dir, but we haven't
|
||||
// had to read it yet, or c === true, meaning it's *something*
|
||||
// but we don't have any idea what. Need to read it, either way.
|
||||
}
|
||||
|
||||
if (this.sync) {
|
||||
var er, entries
|
||||
try {
|
||||
entries = fs.readdirSync(abs)
|
||||
} catch (e) {
|
||||
er = e
|
||||
}
|
||||
return this._afterReaddir(f, abs, cb, er, entries)
|
||||
}
|
||||
|
||||
fs.readdir(abs, this._afterReaddir.bind(this, f, abs, cb))
|
||||
}
|
||||
|
||||
Glob.prototype._afterReaddir = function (f, abs, cb, er, entries) {
|
||||
assert(this instanceof Glob)
|
||||
if (entries && !er) {
|
||||
this.cache[f] = entries
|
||||
// if we haven't asked to stat everything for suresies, then just
|
||||
// assume that everything in there exists, so we can avoid
|
||||
// having to stat it a second time. This also gets us one step
|
||||
// further into ELOOP territory.
|
||||
if (!this.mark && !this.stat) {
|
||||
entries.forEach(function (e) {
|
||||
if (f === "/") e = f + e
|
||||
else e = f + "/" + e
|
||||
this.cache[e] = true
|
||||
}, this)
|
||||
}
|
||||
|
||||
return cb.call(this, er, entries)
|
||||
}
|
||||
|
||||
// now handle errors, and cache the information
|
||||
if (er) switch (er.code) {
|
||||
case "ENOTDIR": // totally normal. means it *does* exist.
|
||||
this.cache[f] = 1
|
||||
return cb.call(this, er)
|
||||
case "ENOENT": // not terribly unusual
|
||||
case "ELOOP":
|
||||
case "ENAMETOOLONG":
|
||||
case "UNKNOWN":
|
||||
this.cache[f] = false
|
||||
return cb.call(this, er)
|
||||
default: // some unusual error. Treat as failure.
|
||||
this.cache[f] = false
|
||||
if (this.strict) this.emit("error", er)
|
||||
if (!this.silent) console.error("glob error", er)
|
||||
return cb.call(this, er)
|
||||
}
|
||||
}
|
||||
|
||||
var isAbsolute = process.platform === "win32" ? absWin : absUnix
|
||||
|
||||
function absWin (p) {
|
||||
if (absUnix(p)) return true
|
||||
// pull off the device/UNC bit from a windows path.
|
||||
// from node's lib/path.js
|
||||
var splitDeviceRe =
|
||||
/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/
|
||||
, result = splitDeviceRe.exec(p)
|
||||
, device = result[1] || ''
|
||||
, isUnc = device && device.charAt(1) !== ':'
|
||||
, isAbsolute = !!result[2] || isUnc // UNC paths are always absolute
|
||||
|
||||
return isAbsolute
|
||||
}
|
||||
|
||||
function absUnix (p) {
|
||||
return p.charAt(0) === "/" || p === ""
|
||||
}
|
||||
Generated
Vendored
-1061
File diff suppressed because it is too large
Load Diff
Generated
Vendored
Generated
Vendored
-56
@@ -1,56 +0,0 @@
|
||||
{
|
||||
"author": {
|
||||
"name": "Isaac Z. Schlueter",
|
||||
"email": "i@izs.me",
|
||||
"url": "http://blog.izs.me"
|
||||
},
|
||||
"name": "minimatch",
|
||||
"description": "a glob matcher in javascript",
|
||||
"version": "0.3.0",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/isaacs/minimatch.git"
|
||||
},
|
||||
"main": "minimatch.js",
|
||||
"scripts": {
|
||||
"test": "tap test/*.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
},
|
||||
"dependencies": {
|
||||
"lru-cache": "2",
|
||||
"sigmund": "~1.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"tap": ""
|
||||
},
|
||||
"license": {
|
||||
"type": "MIT",
|
||||
"url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/isaacs/minimatch/issues"
|
||||
},
|
||||
"homepage": "https://github.com/isaacs/minimatch",
|
||||
"_id": "minimatch@0.3.0",
|
||||
"_shasum": "275d8edaac4f1bb3326472089e7949c8394699dd",
|
||||
"_from": "minimatch@0.3",
|
||||
"_npmVersion": "1.4.10",
|
||||
"_npmUser": {
|
||||
"name": "isaacs",
|
||||
"email": "i@izs.me"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "isaacs",
|
||||
"email": "i@izs.me"
|
||||
}
|
||||
],
|
||||
"dist": {
|
||||
"shasum": "275d8edaac4f1bb3326472089e7949c8394699dd",
|
||||
"tarball": "http://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz"
|
||||
},
|
||||
"directories": {},
|
||||
"_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz"
|
||||
}
|
||||
Generated
Vendored
-57
@@ -1,57 +0,0 @@
|
||||
{
|
||||
"author": {
|
||||
"name": "Isaac Z. Schlueter",
|
||||
"email": "i@izs.me",
|
||||
"url": "http://blog.izs.me/"
|
||||
},
|
||||
"name": "glob",
|
||||
"description": "a little globber",
|
||||
"version": "3.2.11",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/isaacs/node-glob.git"
|
||||
},
|
||||
"main": "glob.js",
|
||||
"engines": {
|
||||
"node": "*"
|
||||
},
|
||||
"dependencies": {
|
||||
"inherits": "2",
|
||||
"minimatch": "0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"tap": "~0.4.0",
|
||||
"mkdirp": "0",
|
||||
"rimraf": "1"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "tap test/*.js",
|
||||
"test-regen": "TEST_REGEN=1 node test/00-setup.js"
|
||||
},
|
||||
"license": "BSD",
|
||||
"gitHead": "73f57e99510582b2024b762305970ebcf9b70aa2",
|
||||
"bugs": {
|
||||
"url": "https://github.com/isaacs/node-glob/issues"
|
||||
},
|
||||
"homepage": "https://github.com/isaacs/node-glob",
|
||||
"_id": "glob@3.2.11",
|
||||
"_shasum": "4a973f635b9190f715d10987d5c00fd2815ebe3d",
|
||||
"_from": "glob@~3.2.6",
|
||||
"_npmVersion": "1.4.10",
|
||||
"_npmUser": {
|
||||
"name": "isaacs",
|
||||
"email": "i@izs.me"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "isaacs",
|
||||
"email": "i@izs.me"
|
||||
}
|
||||
],
|
||||
"dist": {
|
||||
"shasum": "4a973f635b9190f715d10987d5c00fd2815ebe3d",
|
||||
"tarball": "http://registry.npmjs.org/glob/-/glob-3.2.11.tgz"
|
||||
},
|
||||
"directories": {},
|
||||
"_resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz"
|
||||
}
|
||||
Generated
Vendored
-54
@@ -1,54 +0,0 @@
|
||||
iconv-lite - native javascript conversion between character encodings.
|
||||
======================================================================
|
||||
|
||||
## Usage
|
||||
|
||||
var iconv = require('iconv-lite');
|
||||
|
||||
// Convert from an encoded buffer to string.
|
||||
str = iconv.fromEncoding(buf, 'win-1251');
|
||||
// Or
|
||||
str = iconv.decode(buf, 'win-1251');
|
||||
|
||||
// Convert from string to an encoded buffer.
|
||||
buf = iconv.toEncoding("Sample input string", 'win-1251');
|
||||
// Or
|
||||
buf = iconv.encode("Sample input string", 'win-1251');
|
||||
|
||||
## Supported encodings
|
||||
|
||||
Currently only a small part of encodings supported:
|
||||
|
||||
* All node.js native encodings: 'utf8', 'ucs2', 'ascii', 'binary', 'base64'.
|
||||
* 'latin1'
|
||||
* Cyrillic encodings: 'windows-1251', 'koi8-r', 'iso 8859-5'.
|
||||
|
||||
Other encodings are easy to add, see the source. Please, participate.
|
||||
|
||||
|
||||
## Encoding/decoding speed
|
||||
|
||||
Comparison with iconv module (1000 times 256kb, on Core i5/2.5 GHz).
|
||||
|
||||
Operation\module iconv iconv-lite (this)
|
||||
toEncoding('win1251') 19.57 mb/s 49.04 mb/s
|
||||
fromEncoding('win1251') 16.39 mb/s 24.11 mb/s
|
||||
|
||||
|
||||
## Notes
|
||||
|
||||
This module is JavaScript-only, thus can be used in a sandboxed environment like [Cloud9](http://c9.io).
|
||||
|
||||
Untranslatable characters are set to '?'. No transliteration is currently supported, pull requests are welcome.
|
||||
|
||||
## Testing
|
||||
|
||||
npm install --dev iconv-lite
|
||||
vows
|
||||
|
||||
## TODO
|
||||
|
||||
* Support streaming character conversion, something like util.pipe(req, iconv.fromEncodingStream('latin1')).
|
||||
* Add more encodings.
|
||||
* Add transliteration (best fit char).
|
||||
* Add tests and correct support of variable-byte encodings (currently work is delegated to node).
|
||||
Generated
Vendored
-9
@@ -1,9 +0,0 @@
|
||||
var big5Table = require('./table/big5.js');
|
||||
module.exports = {
|
||||
'windows950': 'big5',
|
||||
'cp950': 'big5',
|
||||
'big5': {
|
||||
type: 'table',
|
||||
table: big5Table
|
||||
}
|
||||
}
|
||||
Generated
Vendored
-9
@@ -1,9 +0,0 @@
|
||||
var gbkTable = require('./table/gbk.js');
|
||||
module.exports = {
|
||||
'windows936': 'gbk',
|
||||
'gb2312': 'gbk',
|
||||
'gbk': {
|
||||
type: 'table',
|
||||
table: gbkTable
|
||||
}
|
||||
}
|
||||
Generated
Vendored
-340
@@ -1,340 +0,0 @@
|
||||
module.exports = {
|
||||
"437": "cp437",
|
||||
"737": "cp737",
|
||||
"775": "cp775",
|
||||
"850": "cp850",
|
||||
"852": "cp852",
|
||||
"855": "cp855",
|
||||
"857": "cp857",
|
||||
"858": "cp858",
|
||||
"860": "cp860",
|
||||
"861": "cp861",
|
||||
"862": "cp862",
|
||||
"863": "cp863",
|
||||
"864": "cp864",
|
||||
"865": "cp865",
|
||||
"866": "cp866",
|
||||
"869": "cp869",
|
||||
"874": "iso885911",
|
||||
"1250": "windows1250",
|
||||
"1251": "windows1251",
|
||||
"1252": "windows1252",
|
||||
"1253": "windows1253",
|
||||
"1254": "windows1254",
|
||||
"1255": "windows1255",
|
||||
"1256": "windows1256",
|
||||
"1257": "windows1257",
|
||||
"1258": "windows1258",
|
||||
"10000": "macroman",
|
||||
"10006": "macgreek",
|
||||
"10007": "maccyrillic",
|
||||
"10029": "maccenteuro",
|
||||
"10079": "maciceland",
|
||||
"10081": "macturkish",
|
||||
"20866": "koi8r",
|
||||
"21866": "koi8u",
|
||||
"28591": "iso88591",
|
||||
"28592": "iso88592",
|
||||
"28593": "iso88593",
|
||||
"28594": "iso88594",
|
||||
"28595": "iso88595",
|
||||
"28596": "iso88596",
|
||||
"28597": "iso88597",
|
||||
"28598": "iso88598",
|
||||
"28599": "iso88599",
|
||||
"28600": "iso885910",
|
||||
"28601": "iso885911",
|
||||
"28603": "iso885913",
|
||||
"28604": "iso885914",
|
||||
"28605": "iso885915",
|
||||
"28606": "iso885916",
|
||||
"ascii8bit": "ascii",
|
||||
"usascii": "ascii",
|
||||
"latin1": "iso88591",
|
||||
"latin2": "iso88592",
|
||||
"latin3": "iso88593",
|
||||
"latin4": "iso88594",
|
||||
"latin6": "iso885910",
|
||||
"latin7": "iso885913",
|
||||
"latin8": "iso885914",
|
||||
"latin9": "iso885915",
|
||||
"latin10": "iso885916",
|
||||
"cp819": "iso88951",
|
||||
"arabic": "iso88596",
|
||||
"arabic8": "iso88596",
|
||||
"greek": "iso88597",
|
||||
"greek8": "iso88597",
|
||||
"hebrew": "iso88598",
|
||||
"hebrew8": "iso88598",
|
||||
"turkish": "iso88599",
|
||||
"turkish8": "iso88599",
|
||||
"thai": "iso885911",
|
||||
"thai8": "iso885911",
|
||||
"tis620": "iso885911",
|
||||
"windows874": "iso885911",
|
||||
"win874": "iso885911",
|
||||
"cp874": "iso885911",
|
||||
"celtic": "iso885914",
|
||||
"celtic8": "iso885914",
|
||||
"cp20866": "koi8r",
|
||||
"ibm878": "koi8r",
|
||||
"cp21866": "koi8u",
|
||||
"ibm1168": "koi8u",
|
||||
"windows1250": {
|
||||
"type": "singlebyte",
|
||||
"chars": "€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙"
|
||||
},
|
||||
"win1250": "windows1250",
|
||||
"cp1250": "windows1250",
|
||||
"windows1251": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"
|
||||
},
|
||||
"win1251": "windows1251",
|
||||
"cp1251": "windows1251",
|
||||
"windows1252": {
|
||||
"type": "singlebyte",
|
||||
"chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
|
||||
},
|
||||
"win1252": "windows1252",
|
||||
"cp1252": "windows1252",
|
||||
"windows1253": {
|
||||
"type": "singlebyte",
|
||||
"chars": "€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�"
|
||||
},
|
||||
"win1253": "windows1253",
|
||||
"cp1253": "windows1253",
|
||||
"windows1254": {
|
||||
"type": "singlebyte",
|
||||
"chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ"
|
||||
},
|
||||
"win1254": "windows1254",
|
||||
"cp1254": "windows1254",
|
||||
"windows1255": {
|
||||
"type": "singlebyte",
|
||||
"chars": "€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹ�ֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת���"
|
||||
},
|
||||
"win1255": "windows1255",
|
||||
"cp1255": "windows1255",
|
||||
"windows1256": {
|
||||
"type": "singlebyte",
|
||||
"chars": "€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œں ،¢£¤¥¦§¨©ھ«¬®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûüے"
|
||||
},
|
||||
"win1256": "windows1256",
|
||||
"cp1256": "windows1256",
|
||||
"windows1257": {
|
||||
"type": "singlebyte",
|
||||
"chars": "€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙"
|
||||
},
|
||||
"win1257": "windows1257",
|
||||
"cp1257": "windows1257",
|
||||
"windows1258": {
|
||||
"type": "singlebyte",
|
||||
"chars": "€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"
|
||||
},
|
||||
"win1258": "windows1258",
|
||||
"cp1258": "windows1258",
|
||||
"iso88591": {
|
||||
"type": "singlebyte",
|
||||
"chars": "
¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
|
||||
},
|
||||
"cp28591": "iso88591",
|
||||
"iso88592": {
|
||||
"type": "singlebyte",
|
||||
"chars": "
Ą˘Ł¤ĽŚ§¨ŠŞŤŹŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙"
|
||||
},
|
||||
"cp28592": "iso88592",
|
||||
"iso88593": {
|
||||
"type": "singlebyte",
|
||||
"chars": "
Ħ˘£¤�Ĥ§¨İŞĞĴ�ݰħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙"
|
||||
},
|
||||
"cp28593": "iso88593",
|
||||
"iso88594": {
|
||||
"type": "singlebyte",
|
||||
"chars": "
ĄĸŖ¤Ĩϧ¨ŠĒĢŦޝ°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙"
|
||||
},
|
||||
"cp28594": "iso88594",
|
||||
"iso88595": {
|
||||
"type": "singlebyte",
|
||||
"chars": "
ЁЂЃЄЅІЇЈЉЊЋЌЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ"
|
||||
},
|
||||
"cp28595": "iso88595",
|
||||
"iso88596": {
|
||||
"type": "singlebyte",
|
||||
"chars": "
���¤�������،�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������"
|
||||
},
|
||||
"cp28596": "iso88596",
|
||||
"iso88597": {
|
||||
"type": "singlebyte",
|
||||
"chars": "
‘’£€₯¦§¨©ͺ«¬�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�"
|
||||
},
|
||||
"cp28597": "iso88597",
|
||||
"iso88598": {
|
||||
"type": "singlebyte",
|
||||
"chars": "
�¢£¤¥¦§¨©×«¬®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת���"
|
||||
},
|
||||
"cp28598": "iso88598",
|
||||
"iso88599": {
|
||||
"type": "singlebyte",
|
||||
"chars": "
¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ"
|
||||
},
|
||||
"cp28599": "iso88599",
|
||||
"iso885910": {
|
||||
"type": "singlebyte",
|
||||
"chars": "
ĄĒĢĪĨͧĻĐŠŦŽŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ"
|
||||
},
|
||||
"cp28600": "iso885910",
|
||||
"iso885911": {
|
||||
"type": "singlebyte",
|
||||
"chars": "
กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"
|
||||
},
|
||||
"cp28601": "iso885911",
|
||||
"iso885913": {
|
||||
"type": "singlebyte",
|
||||
"chars": "
”¢£¤„¦§Ø©Ŗ«¬®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’"
|
||||
},
|
||||
"cp28603": "iso885913",
|
||||
"iso885914": {
|
||||
"type": "singlebyte",
|
||||
"chars": "
Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ"
|
||||
},
|
||||
"cp28604": "iso885914",
|
||||
"iso885915": {
|
||||
"type": "singlebyte",
|
||||
"chars": "
¡¢£€¥Š§š©ª«¬®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
|
||||
},
|
||||
"cp28605": "iso885915",
|
||||
"iso885916": {
|
||||
"type": "singlebyte",
|
||||
"chars": "
ĄąŁ€„Чš©Ș«ŹźŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ"
|
||||
},
|
||||
"cp28606": "iso885916",
|
||||
"cp437": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
|
||||
},
|
||||
"ibm437": "cp437",
|
||||
"cp737": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ "
|
||||
},
|
||||
"ibm737": "cp737",
|
||||
"cp775": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’±“¾¶§÷„°∙·¹³²■ "
|
||||
},
|
||||
"ibm775": "cp775",
|
||||
"cp850": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´±‗¾¶§÷¸°¨·¹³²■ "
|
||||
},
|
||||
"ibm850": "cp850",
|
||||
"cp852": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´˝˛ˇ˘§÷¸°¨˙űŘř■ "
|
||||
},
|
||||
"ibm852": "cp852",
|
||||
"cp855": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№ыЫзЗшШэЭщЩчЧ§■ "
|
||||
},
|
||||
"ibm855": "cp855",
|
||||
"cp857": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´±�¾¶§÷¸°¨·¹³²■ "
|
||||
},
|
||||
"ibm857": "cp857",
|
||||
"cp858": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´±‗¾¶§÷¸°¨·¹³²■ "
|
||||
},
|
||||
"ibm858": "cp858",
|
||||
"cp860": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
|
||||
},
|
||||
"ibm860": "cp860",
|
||||
"cp861": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
|
||||
},
|
||||
"ibm861": "cp861",
|
||||
"cp862": {
|
||||
"type": "singlebyte",
|
||||
"chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
|
||||
},
|
||||
"ibm862": "cp862",
|
||||
"cp863": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
|
||||
},
|
||||
"ibm863": "cp863",
|
||||
"cp864": {
|
||||
"type": "singlebyte",
|
||||
"chars": "°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�"
|
||||
},
|
||||
"ibm864": "cp864",
|
||||
"cp865": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "
|
||||
},
|
||||
"ibm865": "cp865",
|
||||
"cp866": {
|
||||
"type": "singlebyte",
|
||||
"chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ "
|
||||
},
|
||||
"ibm866": "cp866",
|
||||
"cp869": {
|
||||
"type": "singlebyte",
|
||||
"chars": "������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄±υφχ§ψ΅°¨ωϋΰώ■ "
|
||||
},
|
||||
"ibm869": "cp869",
|
||||
"maccenteuro": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ"
|
||||
},
|
||||
"maccroatian": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ"
|
||||
},
|
||||
"maccyrillic": {
|
||||
"type": "singlebyte",
|
||||
"chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤"
|
||||
},
|
||||
"macgreek": {
|
||||
"type": "singlebyte",
|
||||
"chars": "Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�"
|
||||
},
|
||||
"maciceland": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"
|
||||
},
|
||||
"macroman": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"
|
||||
},
|
||||
"macromania": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"
|
||||
},
|
||||
"macthai": {
|
||||
"type": "singlebyte",
|
||||
"chars": "«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����"
|
||||
},
|
||||
"macturkish": {
|
||||
"type": "singlebyte",
|
||||
"chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ"
|
||||
},
|
||||
"macukraine": {
|
||||
"type": "singlebyte",
|
||||
"chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤"
|
||||
},
|
||||
"koi8r": {
|
||||
"type": "singlebyte",
|
||||
"chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"
|
||||
},
|
||||
"koi8u": {
|
||||
"type": "singlebyte",
|
||||
"chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"
|
||||
}
|
||||
};
|
||||
Generated
Vendored
-1
File diff suppressed because one or more lines are too long
Generated
Vendored
-1
File diff suppressed because one or more lines are too long
Generated
Vendored
-25
@@ -1,25 +0,0 @@
|
||||
var http = require('http');
|
||||
var fs = require('fs');
|
||||
// BIG5
|
||||
var cp950_b2u = {host:'moztw.org',path:'/docs/big5/table/cp950-b2u.txt'},
|
||||
cp950_u2b = {host:'moztw.org',path:'/docs/big5/table/cp950-u2b.txt'},
|
||||
cp950_moz18_b2u = {host:'moztw.org',path:'/docs/big5/table/moz18-b2u.txt'};
|
||||
|
||||
http.get(cp950_moz18_b2u, function(res) {
|
||||
var data = '';
|
||||
res.on('data', function(chunk) {
|
||||
data += chunk;
|
||||
});
|
||||
res.on('end', function() {
|
||||
var table = {};
|
||||
data = data.split('\n').slice(1);
|
||||
data.forEach(function(line, idx) {
|
||||
var pair = line.split(' ');
|
||||
var key = parseInt(pair[0]);
|
||||
var val = parseInt(pair[1]);
|
||||
table[key] = val;
|
||||
});
|
||||
fs.createWriteSync('encodings/table/big5.js',
|
||||
'module.exports = ' + JSON.stringify(table) + ';');
|
||||
});
|
||||
});
|
||||
Generated
Vendored
-142
@@ -1,142 +0,0 @@
|
||||
var fs = require("fs");
|
||||
var Iconv = require("iconv").Iconv;
|
||||
|
||||
|
||||
var encodingFamilies = [
|
||||
{
|
||||
// Windows code pages
|
||||
encodings: [1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258],
|
||||
convert: function(cp) {
|
||||
return {
|
||||
name: "windows-"+cp,
|
||||
aliases: ["win"+cp, "cp"+cp, ""+cp],
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
// ISO-8859 code pages
|
||||
encodings: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16],
|
||||
convert: function(i) {
|
||||
return {
|
||||
name: "iso-8859-"+i,
|
||||
aliases: ["cp"+(28590+i), (28590+i)],
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
// IBM/DOS code pages
|
||||
encodings: [437, 737, 775, 850, 852, 855, 857, 858, 860, 861, 862, 863, 864, 865, 866, 869],
|
||||
convert: function(cp) {
|
||||
return {
|
||||
name: "CP"+cp,
|
||||
aliases: ["ibm"+cp, ""+cp],
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
// Macintosh code pages
|
||||
encodings: ["macCroatian", "macCyrillic", "macGreek",
|
||||
"macIceland", "macRoman", "macRomania",
|
||||
"macThai", "macTurkish", "macUkraine"],
|
||||
},
|
||||
{
|
||||
// KOI8 code pages
|
||||
encodings: ["KOI8-R", "KOI8-U"],
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
var encodings = {
|
||||
// Aliases.
|
||||
"ascii8bit": "ascii",
|
||||
"usascii": "ascii",
|
||||
|
||||
"latin1": "iso88591",
|
||||
"latin2": "iso88592",
|
||||
"latin3": "iso88593",
|
||||
"latin4": "iso88594",
|
||||
"latin6": "iso885910",
|
||||
"latin7": "iso885913",
|
||||
"latin8": "iso885914",
|
||||
"latin9": "iso885915",
|
||||
"latin10": "iso885916",
|
||||
|
||||
"cp819": "iso88951",
|
||||
"arabic": "iso88596",
|
||||
"arabic8": "iso88596",
|
||||
"greek" : "iso88597",
|
||||
"greek8" : "iso88597",
|
||||
"hebrew": "iso88598",
|
||||
"hebrew8": "iso88598",
|
||||
"turkish": "iso88599",
|
||||
"turkish8": "iso88599",
|
||||
"thai": "iso885911",
|
||||
"thai8": "iso885911",
|
||||
"tis620": "iso885911",
|
||||
"windows874": "iso885911",
|
||||
"win874": "iso885911",
|
||||
"cp874": "iso885911",
|
||||
"874": "iso885911",
|
||||
"celtic": "iso885914",
|
||||
"celtic8": "iso885914",
|
||||
|
||||
"cp20866": "koi8r",
|
||||
"20866": "koi8r",
|
||||
"ibm878": "koi8r",
|
||||
"cp21866": "koi8u",
|
||||
"21866": "koi8u",
|
||||
"ibm1168": "koi8u",
|
||||
|
||||
};
|
||||
|
||||
// Add all encodings from encodingFamilies.
|
||||
encodingFamilies.forEach(function(family){
|
||||
family.encodings.forEach(function(encoding){
|
||||
if (family.convert)
|
||||
encoding = family.convert(encoding);
|
||||
|
||||
var encodingIconvName = encoding.name ? encoding.name : encoding;
|
||||
var encodingName = encodingIconvName.replace(/[-_]/g, "").toLowerCase();
|
||||
|
||||
encodings[encodingName] = {
|
||||
type: "singlebyte",
|
||||
chars: generateCharsString(encodingIconvName)
|
||||
};
|
||||
|
||||
if (encoding.aliases)
|
||||
encoding.aliases.forEach(function(alias){
|
||||
encodings[alias] = encodingName;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Write encodings.
|
||||
fs.writeFileSync("encodings/singlebyte.js",
|
||||
"module.exports = " + JSON.stringify(encodings, undefined, " ") + ";");
|
||||
|
||||
|
||||
function generateCharsString(encoding) {
|
||||
console.log("Generate encoding for " + encoding);
|
||||
var iconvToUtf8 = new Iconv(encoding, "UTF-8");
|
||||
var chars = "";
|
||||
|
||||
for (var b = 0x80; b < 0x100; b++) {
|
||||
|
||||
try {
|
||||
var convertedChar = iconvToUtf8.convert(new Buffer([b])).toString();
|
||||
|
||||
if (convertedChar.length != 1)
|
||||
throw new Error("Single-byte encoding error: Must return single char.");
|
||||
} catch (exception) {
|
||||
if (exception.code === "EILSEQ") {
|
||||
convertedChar = "\ufffd";
|
||||
} else {
|
||||
throw exception;
|
||||
}
|
||||
}
|
||||
|
||||
chars += convertedChar;
|
||||
}
|
||||
|
||||
return chars;
|
||||
}
|
||||
Generated
Vendored
-231
@@ -1,231 +0,0 @@
|
||||
var RE_SPACEDASH = /[- ]/g;
|
||||
// Module exports
|
||||
var iconv = module.exports = {
|
||||
toEncoding: function(str, encoding) {
|
||||
return iconv.getCodec(encoding).toEncoding(str);
|
||||
},
|
||||
fromEncoding: function(buf, encoding) {
|
||||
return iconv.getCodec(encoding).fromEncoding(buf);
|
||||
},
|
||||
encodingExists: function(enc) {
|
||||
loadEncodings();
|
||||
enc = enc.replace(RE_SPACEDASH, "").toLowerCase();
|
||||
return (iconv.encodings[enc] !== undefined);
|
||||
},
|
||||
|
||||
defaultCharUnicode: '�',
|
||||
defaultCharSingleByte: '?',
|
||||
|
||||
encodingsLoaded: false,
|
||||
|
||||
// Get correct codec for given encoding.
|
||||
getCodec: function(encoding) {
|
||||
loadEncodings();
|
||||
var enc = encoding || "utf8";
|
||||
var codecOptions = undefined;
|
||||
while (1) {
|
||||
if (getType(enc) === "String")
|
||||
enc = enc.replace(RE_SPACEDASH, "").toLowerCase();
|
||||
var codec = iconv.encodings[enc];
|
||||
var type = getType(codec);
|
||||
if (type === "String") {
|
||||
// Link to other encoding.
|
||||
codecOptions = {originalEncoding: enc};
|
||||
enc = codec;
|
||||
}
|
||||
else if (type === "Object" && codec.type != undefined) {
|
||||
// Options for other encoding.
|
||||
codecOptions = codec;
|
||||
enc = codec.type;
|
||||
}
|
||||
else if (type === "Function")
|
||||
// Codec itself.
|
||||
return codec(codecOptions);
|
||||
else
|
||||
throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '"+enc+"')");
|
||||
}
|
||||
},
|
||||
|
||||
// Define basic encodings
|
||||
encodings: {
|
||||
internal: function(options) {
|
||||
return {
|
||||
toEncoding: toInternalEncoding,
|
||||
fromEncoding: fromInternalEncoding,
|
||||
options: options
|
||||
};
|
||||
},
|
||||
utf8: "internal",
|
||||
ucs2: "internal",
|
||||
binary: "internal",
|
||||
ascii: "internal",
|
||||
base64: "internal",
|
||||
|
||||
// Codepage single-byte encodings.
|
||||
singlebyte: function(options) {
|
||||
// Prepare chars if needed
|
||||
if (!options.charsBuf) {
|
||||
if (!options.chars || (options.chars.length !== 128 && options.chars.length !== 256))
|
||||
throw new Error("Encoding '"+options.type+"' has incorrect 'chars' (must be of len 128 or 256)");
|
||||
|
||||
if (options.chars.length === 128)
|
||||
options.chars = asciiString + options.chars;
|
||||
|
||||
options.charsBuf = new Buffer(options.chars, 'ucs2');
|
||||
}
|
||||
|
||||
if (!options.revCharsBuf) {
|
||||
options.revCharsBuf = new Buffer(65536);
|
||||
var defChar = iconv.defaultCharSingleByte.charCodeAt(0);
|
||||
for (var i = 0; i < options.revCharsBuf.length; i++)
|
||||
options.revCharsBuf[i] = defChar;
|
||||
for (var i = 0; i < options.chars.length; i++)
|
||||
options.revCharsBuf[options.chars.charCodeAt(i)] = i;
|
||||
}
|
||||
|
||||
return {
|
||||
toEncoding: toSingleByteEncoding,
|
||||
fromEncoding: fromSingleByteEncoding,
|
||||
options: options,
|
||||
};
|
||||
},
|
||||
|
||||
// Codepage double-byte encodings.
|
||||
table: function(options) {
|
||||
if (!options.table) {
|
||||
throw new Error("Encoding '" + options.type + "' has incorect 'table' option");
|
||||
}
|
||||
if (!options.revCharsTable) {
|
||||
var revCharsTable = options.revCharsTable = {};
|
||||
for (var i = 0; i <= 0xFFFF; i++) {
|
||||
revCharsTable[i] = 0;
|
||||
}
|
||||
|
||||
var table = options.table;
|
||||
for (var key in table) {
|
||||
revCharsTable[table[key]] = +key;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
toEncoding: toTableEncoding,
|
||||
fromEncoding: fromTableEncoding,
|
||||
options: options,
|
||||
};
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function toInternalEncoding(str) {
|
||||
return new Buffer(ensureString(str), this.options.originalEncoding);
|
||||
}
|
||||
|
||||
function fromInternalEncoding(buf) {
|
||||
return ensureBuffer(buf).toString(this.options.originalEncoding);
|
||||
}
|
||||
|
||||
function toTableEncoding(str) {
|
||||
str = ensureString(str);
|
||||
var strLen = str.length;
|
||||
var revCharsTable = this.options.revCharsTable;
|
||||
var newBuf = new Buffer(strLen*2), gbkcode, unicode,
|
||||
defaultChar = revCharsTable[iconv.defaultCharUnicode.charCodeAt(0)];
|
||||
|
||||
for (var i = 0, j = 0; i < strLen; i++) {
|
||||
unicode = str.charCodeAt(i);
|
||||
if (unicode >> 7) {
|
||||
gbkcode = revCharsTable[unicode] || defaultChar;
|
||||
newBuf[j++] = gbkcode >> 8; //high byte;
|
||||
newBuf[j++] = gbkcode & 0xFF; //low byte
|
||||
} else {//ascii
|
||||
newBuf[j++] = unicode;
|
||||
}
|
||||
}
|
||||
return newBuf.slice(0, j);
|
||||
}
|
||||
|
||||
function fromTableEncoding(buf) {
|
||||
buf = ensureBuffer(buf);
|
||||
var bufLen = buf.length;
|
||||
var table = this.options.table;
|
||||
var newBuf = new Buffer(bufLen*2), unicode, gbkcode,
|
||||
defaultChar = iconv.defaultCharUnicode.charCodeAt(0);
|
||||
|
||||
for (var i = 0, j = 0; i < bufLen; i++, j+=2) {
|
||||
gbkcode = buf[i];
|
||||
if (gbkcode & 0x80) {
|
||||
gbkcode = (gbkcode << 8) + buf[++i];
|
||||
unicode = table[gbkcode] || defaultChar;
|
||||
} else {
|
||||
unicode = gbkcode;
|
||||
}
|
||||
newBuf[j] = unicode & 0xFF; //low byte
|
||||
newBuf[j+1] = unicode >> 8; //high byte
|
||||
}
|
||||
return newBuf.slice(0, j).toString('ucs2');
|
||||
}
|
||||
|
||||
function toSingleByteEncoding(str) {
|
||||
str = ensureString(str);
|
||||
|
||||
var buf = new Buffer(str.length);
|
||||
var revCharsBuf = this.options.revCharsBuf;
|
||||
for (var i = 0; i < str.length; i++)
|
||||
buf[i] = revCharsBuf[str.charCodeAt(i)];
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
function fromSingleByteEncoding(buf) {
|
||||
buf = ensureBuffer(buf);
|
||||
|
||||
// Strings are immutable in JS -> we use ucs2 buffer to speed up computations.
|
||||
var charsBuf = this.options.charsBuf;
|
||||
var newBuf = new Buffer(buf.length*2);
|
||||
var idx1 = 0, idx2 = 0;
|
||||
for (var i = 0, _len = buf.length; i < _len; i++) {
|
||||
idx1 = buf[i]*2; idx2 = i*2;
|
||||
newBuf[idx2] = charsBuf[idx1];
|
||||
newBuf[idx2+1] = charsBuf[idx1+1];
|
||||
}
|
||||
return newBuf.toString('ucs2');
|
||||
}
|
||||
|
||||
// Add aliases to convert functions
|
||||
iconv.encode = iconv.toEncoding;
|
||||
iconv.decode = iconv.fromEncoding;
|
||||
|
||||
// Load other encodings manually from files in /encodings dir.
|
||||
function loadEncodings() {
|
||||
if (!iconv.encodingsLoaded) {
|
||||
[ require('./encodings/singlebyte'),
|
||||
require('./encodings/gbk'),
|
||||
require('./encodings/big5')
|
||||
].forEach(function(encodings) {
|
||||
for (var key in encodings)
|
||||
iconv.encodings[key] = encodings[key]
|
||||
});
|
||||
iconv.encodingsLoaded = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Utilities
|
||||
var asciiString = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f'+
|
||||
' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f';
|
||||
|
||||
var ensureBuffer = function(buf) {
|
||||
buf = buf || new Buffer(0);
|
||||
return (buf instanceof Buffer) ? buf : new Buffer(""+buf, "binary");
|
||||
}
|
||||
|
||||
var ensureString = function(str) {
|
||||
str = str || "";
|
||||
return (str instanceof Buffer) ? str.toString('utf8') : (""+str);
|
||||
}
|
||||
|
||||
var getType = function(obj) {
|
||||
return Object.prototype.toString.call(obj).slice(8, -1);
|
||||
}
|
||||
|
||||
Generated
Vendored
-96
@@ -1,96 +0,0 @@
|
||||
{
|
||||
"name": "iconv-lite",
|
||||
"description": "Convert character encodings in pure javascript.",
|
||||
"version": "0.2.11",
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"iconv",
|
||||
"convert",
|
||||
"charset"
|
||||
],
|
||||
"author": {
|
||||
"name": "Alexander Shtuchkin",
|
||||
"email": "ashtuchkin@gmail.com"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Jinwu Zhan",
|
||||
"url": "https://github.com/jenkinv"
|
||||
},
|
||||
{
|
||||
"name": "Adamansky Anton",
|
||||
"url": "https://github.com/adamansky"
|
||||
},
|
||||
{
|
||||
"name": "George Stagas",
|
||||
"url": "https://github.com/stagas"
|
||||
},
|
||||
{
|
||||
"name": "Mike D Pilsbury",
|
||||
"url": "https://github.com/pekim"
|
||||
},
|
||||
{
|
||||
"name": "Niggler",
|
||||
"url": "https://github.com/Niggler"
|
||||
},
|
||||
{
|
||||
"name": "wychi",
|
||||
"url": "https://github.com/wychi"
|
||||
},
|
||||
{
|
||||
"name": "David Kuo",
|
||||
"url": "https://github.com/david50407"
|
||||
},
|
||||
{
|
||||
"name": "ChangZhuo Chen",
|
||||
"url": "https://github.com/czchen"
|
||||
},
|
||||
{
|
||||
"name": "Lee Treveil",
|
||||
"url": "https://github.com/leetreveil"
|
||||
},
|
||||
{
|
||||
"name": "Brian White",
|
||||
"url": "https://github.com/mscdex"
|
||||
}
|
||||
],
|
||||
"main": "index.js",
|
||||
"homepage": "https://github.com/ashtuchkin/iconv-lite",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/ashtuchkin/iconv-lite.git"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "vows --spec"
|
||||
},
|
||||
"devDependencies": {
|
||||
"vows": "",
|
||||
"iconv": ">=1.1"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/ashtuchkin/iconv-lite/issues"
|
||||
},
|
||||
"_id": "iconv-lite@0.2.11",
|
||||
"dist": {
|
||||
"shasum": "1ce60a3a57864a292d1321ff4609ca4bb965adc8",
|
||||
"tarball": "http://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz"
|
||||
},
|
||||
"_from": "iconv-lite@~0.2.11",
|
||||
"_npmVersion": "1.3.2",
|
||||
"_npmUser": {
|
||||
"name": "ashtuchkin",
|
||||
"email": "ashtuchkin@gmail.com"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "ashtuchkin",
|
||||
"email": "ashtuchkin@gmail.com"
|
||||
}
|
||||
],
|
||||
"directories": {},
|
||||
"_shasum": "1ce60a3a57864a292d1321ff4609ca4bb965adc8",
|
||||
"_resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz"
|
||||
}
|
||||
Generated
Vendored
-87
@@ -1,87 +0,0 @@
|
||||
var fs = require('fs');
|
||||
var path = require("path");
|
||||
var max_bytes = 512;
|
||||
|
||||
module.exports = function(bytes, size) {
|
||||
// Read the file with no encoding for raw buffer access.
|
||||
if (size === undefined) {
|
||||
var file = bytes, existsSync = fs.existsSync || path.existsSync;
|
||||
if (!existsSync(file))
|
||||
return false;
|
||||
var descriptor = fs.openSync(file, 'r');
|
||||
try {
|
||||
bytes = new Buffer(max_bytes);
|
||||
size = fs.readSync(descriptor, bytes, 0, bytes.length, 0);
|
||||
} finally {
|
||||
fs.closeSync(descriptor);
|
||||
}
|
||||
}
|
||||
else if (typeof size === "function") {
|
||||
var file = bytes, callback = size;
|
||||
var exists = fs.exists || path.exists;
|
||||
exists(file, function (exists) {
|
||||
if (!exists) return callback(null, false);
|
||||
|
||||
fs.open(file, 'r', function(err, descriptor){
|
||||
if (err) return callback(err);
|
||||
var bytes = new Buffer(max_bytes);
|
||||
// Read the file with no encoding for raw buffer access.
|
||||
fs.read(descriptor, bytes, 0, bytes.length, 0, function(err, size, bytes){
|
||||
fs.close(descriptor, function(err2){
|
||||
if (err || err2)
|
||||
return callback(err || err2);
|
||||
return callback(null, isBinaryCheck(bytes, size));
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return isBinaryCheck(bytes, size);
|
||||
}
|
||||
|
||||
function isBinaryCheck(bytes, size) {
|
||||
if (size === 0)
|
||||
return false;
|
||||
|
||||
var suspicious_bytes = 0;
|
||||
var total_bytes = Math.min(size, max_bytes);
|
||||
|
||||
if (size >= 3 && bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) {
|
||||
// UTF-8 BOM. This isn't binary.
|
||||
return false;
|
||||
}
|
||||
|
||||
for (var i = 0; i < total_bytes; i++) {
|
||||
if (bytes[i] === 0) { // NULL byte--it's binary!
|
||||
return true;
|
||||
}
|
||||
else if ((bytes[i] < 7 || bytes[i] > 14) && (bytes[i] < 32 || bytes[i] > 127)) {
|
||||
// UTF-8 detection
|
||||
if (bytes[i] > 191 && bytes[i] < 224 && i + 1 < total_bytes) {
|
||||
i++;
|
||||
if (bytes[i] < 192) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (bytes[i] > 223 && bytes[i] < 239 && i + 2 < total_bytes) {
|
||||
i++;
|
||||
if (bytes[i] < 192 && bytes[i + 1] < 192) {
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
suspicious_bytes++;
|
||||
// Read at least 32 bytes before making a decision
|
||||
if (i > 32 && (suspicious_bytes * 100) / total_bytes > 10) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((suspicious_bytes * 100) / total_bytes > 10) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
Generated
Vendored
-39
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"name": "isbinaryfile",
|
||||
"version": "2.0.1",
|
||||
"description": "Detects if a file is binary in Node.js. Similar to Perl's -B.",
|
||||
"main": "./lib/panino.js",
|
||||
"engines": {
|
||||
"node": ">=0.6.0"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "gjtorikian",
|
||||
"email": "gjtorikian@gmail.com"
|
||||
}
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/gjtorikian/isBinaryFile"
|
||||
},
|
||||
"devDependencies": {
|
||||
"mocha": ""
|
||||
},
|
||||
"scripts": {
|
||||
"test": "mocha tests/test.js"
|
||||
},
|
||||
"_id": "isbinaryfile@2.0.1",
|
||||
"dist": {
|
||||
"shasum": "b92369bfdaf616027133e077c5ba145f36699d55",
|
||||
"tarball": "http://registry.npmjs.org/isbinaryfile/-/isbinaryfile-2.0.1.tgz"
|
||||
},
|
||||
"_from": "isbinaryfile@~2.0.0",
|
||||
"_npmVersion": "1.2.17",
|
||||
"_npmUser": {
|
||||
"name": "gjtorikian",
|
||||
"email": "gjtorikian@gmail.com"
|
||||
},
|
||||
"directories": {},
|
||||
"_shasum": "b92369bfdaf616027133e077c5ba145f36699d55",
|
||||
"_resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-2.0.1.tgz"
|
||||
}
|
||||
Generated
Vendored
-252
@@ -1,252 +0,0 @@
|
||||
;(function () { // closure for web browsers
|
||||
|
||||
if (typeof module === 'object' && module.exports) {
|
||||
module.exports = LRUCache
|
||||
} else {
|
||||
// just set the global for non-node platforms.
|
||||
this.LRUCache = LRUCache
|
||||
}
|
||||
|
||||
function hOP (obj, key) {
|
||||
return Object.prototype.hasOwnProperty.call(obj, key)
|
||||
}
|
||||
|
||||
function naiveLength () { return 1 }
|
||||
|
||||
function LRUCache (options) {
|
||||
if (!(this instanceof LRUCache))
|
||||
return new LRUCache(options)
|
||||
|
||||
if (typeof options === 'number')
|
||||
options = { max: options }
|
||||
|
||||
if (!options)
|
||||
options = {}
|
||||
|
||||
this._max = options.max
|
||||
// Kind of weird to have a default max of Infinity, but oh well.
|
||||
if (!this._max || !(typeof this._max === "number") || this._max <= 0 )
|
||||
this._max = Infinity
|
||||
|
||||
this._lengthCalculator = options.length || naiveLength
|
||||
if (typeof this._lengthCalculator !== "function")
|
||||
this._lengthCalculator = naiveLength
|
||||
|
||||
this._allowStale = options.stale || false
|
||||
this._maxAge = options.maxAge || null
|
||||
this._dispose = options.dispose
|
||||
this.reset()
|
||||
}
|
||||
|
||||
// resize the cache when the max changes.
|
||||
Object.defineProperty(LRUCache.prototype, "max",
|
||||
{ set : function (mL) {
|
||||
if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity
|
||||
this._max = mL
|
||||
if (this._length > this._max) trim(this)
|
||||
}
|
||||
, get : function () { return this._max }
|
||||
, enumerable : true
|
||||
})
|
||||
|
||||
// resize the cache when the lengthCalculator changes.
|
||||
Object.defineProperty(LRUCache.prototype, "lengthCalculator",
|
||||
{ set : function (lC) {
|
||||
if (typeof lC !== "function") {
|
||||
this._lengthCalculator = naiveLength
|
||||
this._length = this._itemCount
|
||||
for (var key in this._cache) {
|
||||
this._cache[key].length = 1
|
||||
}
|
||||
} else {
|
||||
this._lengthCalculator = lC
|
||||
this._length = 0
|
||||
for (var key in this._cache) {
|
||||
this._cache[key].length = this._lengthCalculator(this._cache[key].value)
|
||||
this._length += this._cache[key].length
|
||||
}
|
||||
}
|
||||
|
||||
if (this._length > this._max) trim(this)
|
||||
}
|
||||
, get : function () { return this._lengthCalculator }
|
||||
, enumerable : true
|
||||
})
|
||||
|
||||
Object.defineProperty(LRUCache.prototype, "length",
|
||||
{ get : function () { return this._length }
|
||||
, enumerable : true
|
||||
})
|
||||
|
||||
|
||||
Object.defineProperty(LRUCache.prototype, "itemCount",
|
||||
{ get : function () { return this._itemCount }
|
||||
, enumerable : true
|
||||
})
|
||||
|
||||
LRUCache.prototype.forEach = function (fn, thisp) {
|
||||
thisp = thisp || this
|
||||
var i = 0;
|
||||
for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
|
||||
i++
|
||||
var hit = this._lruList[k]
|
||||
if (this._maxAge && (Date.now() - hit.now > this._maxAge)) {
|
||||
del(this, hit)
|
||||
if (!this._allowStale) hit = undefined
|
||||
}
|
||||
if (hit) {
|
||||
fn.call(thisp, hit.value, hit.key, this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LRUCache.prototype.keys = function () {
|
||||
var keys = new Array(this._itemCount)
|
||||
var i = 0
|
||||
for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
|
||||
var hit = this._lruList[k]
|
||||
keys[i++] = hit.key
|
||||
}
|
||||
return keys
|
||||
}
|
||||
|
||||
LRUCache.prototype.values = function () {
|
||||
var values = new Array(this._itemCount)
|
||||
var i = 0
|
||||
for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
|
||||
var hit = this._lruList[k]
|
||||
values[i++] = hit.value
|
||||
}
|
||||
return values
|
||||
}
|
||||
|
||||
LRUCache.prototype.reset = function () {
|
||||
if (this._dispose && this._cache) {
|
||||
for (var k in this._cache) {
|
||||
this._dispose(k, this._cache[k].value)
|
||||
}
|
||||
}
|
||||
|
||||
this._cache = Object.create(null) // hash of items by key
|
||||
this._lruList = Object.create(null) // list of items in order of use recency
|
||||
this._mru = 0 // most recently used
|
||||
this._lru = 0 // least recently used
|
||||
this._length = 0 // number of items in the list
|
||||
this._itemCount = 0
|
||||
}
|
||||
|
||||
// Provided for debugging/dev purposes only. No promises whatsoever that
|
||||
// this API stays stable.
|
||||
LRUCache.prototype.dump = function () {
|
||||
return this._cache
|
||||
}
|
||||
|
||||
LRUCache.prototype.dumpLru = function () {
|
||||
return this._lruList
|
||||
}
|
||||
|
||||
LRUCache.prototype.set = function (key, value) {
|
||||
if (hOP(this._cache, key)) {
|
||||
// dispose of the old one before overwriting
|
||||
if (this._dispose) this._dispose(key, this._cache[key].value)
|
||||
if (this._maxAge) this._cache[key].now = Date.now()
|
||||
this._cache[key].value = value
|
||||
this.get(key)
|
||||
return true
|
||||
}
|
||||
|
||||
var len = this._lengthCalculator(value)
|
||||
var age = this._maxAge ? Date.now() : 0
|
||||
var hit = new Entry(key, value, this._mru++, len, age)
|
||||
|
||||
// oversized objects fall out of cache automatically.
|
||||
if (hit.length > this._max) {
|
||||
if (this._dispose) this._dispose(key, value)
|
||||
return false
|
||||
}
|
||||
|
||||
this._length += hit.length
|
||||
this._lruList[hit.lu] = this._cache[key] = hit
|
||||
this._itemCount ++
|
||||
|
||||
if (this._length > this._max) trim(this)
|
||||
return true
|
||||
}
|
||||
|
||||
LRUCache.prototype.has = function (key) {
|
||||
if (!hOP(this._cache, key)) return false
|
||||
var hit = this._cache[key]
|
||||
if (this._maxAge && (Date.now() - hit.now > this._maxAge)) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
LRUCache.prototype.get = function (key) {
|
||||
return get(this, key, true)
|
||||
}
|
||||
|
||||
LRUCache.prototype.peek = function (key) {
|
||||
return get(this, key, false)
|
||||
}
|
||||
|
||||
LRUCache.prototype.pop = function () {
|
||||
var hit = this._lruList[this._lru]
|
||||
del(this, hit)
|
||||
return hit || null
|
||||
}
|
||||
|
||||
LRUCache.prototype.del = function (key) {
|
||||
del(this, this._cache[key])
|
||||
}
|
||||
|
||||
function get (self, key, doUse) {
|
||||
var hit = self._cache[key]
|
||||
if (hit) {
|
||||
if (self._maxAge && (Date.now() - hit.now > self._maxAge)) {
|
||||
del(self, hit)
|
||||
if (!self._allowStale) hit = undefined
|
||||
} else {
|
||||
if (doUse) use(self, hit)
|
||||
}
|
||||
if (hit) hit = hit.value
|
||||
}
|
||||
return hit
|
||||
}
|
||||
|
||||
function use (self, hit) {
|
||||
shiftLU(self, hit)
|
||||
hit.lu = self._mru ++
|
||||
self._lruList[hit.lu] = hit
|
||||
}
|
||||
|
||||
function trim (self) {
|
||||
while (self._lru < self._mru && self._length > self._max)
|
||||
del(self, self._lruList[self._lru])
|
||||
}
|
||||
|
||||
function shiftLU (self, hit) {
|
||||
delete self._lruList[ hit.lu ]
|
||||
while (self._lru < self._mru && !self._lruList[self._lru]) self._lru ++
|
||||
}
|
||||
|
||||
function del (self, hit) {
|
||||
if (hit) {
|
||||
if (self._dispose) self._dispose(hit.key, hit.value)
|
||||
self._length -= hit.length
|
||||
self._itemCount --
|
||||
delete self._cache[ hit.key ]
|
||||
shiftLU(self, hit)
|
||||
}
|
||||
}
|
||||
|
||||
// classy, since V8 prefers predictable objects.
|
||||
function Entry (key, value, lu, length, now) {
|
||||
this.key = key
|
||||
this.value = value
|
||||
this.lu = lu
|
||||
this.length = length
|
||||
this.now = now
|
||||
}
|
||||
|
||||
})()
|
||||
Generated
Vendored
-50
@@ -1,50 +0,0 @@
|
||||
{
|
||||
"name": "lru-cache",
|
||||
"description": "A cache object that deletes the least-recently-used items.",
|
||||
"version": "2.5.0",
|
||||
"author": {
|
||||
"name": "Isaac Z. Schlueter",
|
||||
"email": "i@izs.me"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "tap test --gc"
|
||||
},
|
||||
"main": "lib/lru-cache.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/isaacs/node-lru-cache.git"
|
||||
},
|
||||
"devDependencies": {
|
||||
"tap": "",
|
||||
"weak": ""
|
||||
},
|
||||
"license": {
|
||||
"type": "MIT",
|
||||
"url": "http://github.com/isaacs/node-lru-cache/raw/master/LICENSE"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/isaacs/node-lru-cache/issues"
|
||||
},
|
||||
"homepage": "https://github.com/isaacs/node-lru-cache",
|
||||
"_id": "lru-cache@2.5.0",
|
||||
"dist": {
|
||||
"shasum": "d82388ae9c960becbea0c73bb9eb79b6c6ce9aeb",
|
||||
"tarball": "http://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
|
||||
},
|
||||
"_from": "lru-cache@2.5.0",
|
||||
"_npmVersion": "1.3.15",
|
||||
"_npmUser": {
|
||||
"name": "isaacs",
|
||||
"email": "i@izs.me"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "isaacs",
|
||||
"email": "i@izs.me"
|
||||
}
|
||||
],
|
||||
"directories": {},
|
||||
"_shasum": "d82388ae9c960becbea0c73bb9eb79b6c6ce9aeb",
|
||||
"_resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz",
|
||||
"readme": "ERROR: No README data found!"
|
||||
}
|
||||
Generated
Vendored
-1055
File diff suppressed because it is too large
Load Diff
Generated
Vendored
Generated
Vendored
-56
@@ -1,56 +0,0 @@
|
||||
{
|
||||
"author": {
|
||||
"name": "Isaac Z. Schlueter",
|
||||
"email": "i@izs.me",
|
||||
"url": "http://blog.izs.me"
|
||||
},
|
||||
"name": "minimatch",
|
||||
"description": "a glob matcher in javascript",
|
||||
"version": "0.2.14",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/isaacs/minimatch.git"
|
||||
},
|
||||
"main": "minimatch.js",
|
||||
"scripts": {
|
||||
"test": "tap test/*.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
},
|
||||
"dependencies": {
|
||||
"lru-cache": "2",
|
||||
"sigmund": "~1.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"tap": ""
|
||||
},
|
||||
"license": {
|
||||
"type": "MIT",
|
||||
"url": "http://github.com/isaacs/minimatch/raw/master/LICENSE"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/isaacs/minimatch/issues"
|
||||
},
|
||||
"homepage": "https://github.com/isaacs/minimatch",
|
||||
"_id": "minimatch@0.2.14",
|
||||
"dist": {
|
||||
"shasum": "c74e780574f63c6f9a090e90efbe6ef53a6a756a",
|
||||
"tarball": "http://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz"
|
||||
},
|
||||
"_from": "minimatch@~0.2.12",
|
||||
"_npmVersion": "1.3.17",
|
||||
"_npmUser": {
|
||||
"name": "isaacs",
|
||||
"email": "i@izs.me"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "isaacs",
|
||||
"email": "i@izs.me"
|
||||
}
|
||||
],
|
||||
"directories": {},
|
||||
"_shasum": "c74e780574f63c6f9a090e90efbe6ef53a6a756a",
|
||||
"_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz"
|
||||
}
|
||||
Generated
Vendored
-33
@@ -1,33 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var rimraf = require('./')
|
||||
|
||||
var help = false
|
||||
var dashdash = false
|
||||
var args = process.argv.slice(2).filter(function(arg) {
|
||||
if (dashdash)
|
||||
return !!arg
|
||||
else if (arg === '--')
|
||||
dashdash = true
|
||||
else if (arg.match(/^(-+|\/)(h(elp)?|\?)$/))
|
||||
help = true
|
||||
else
|
||||
return !!arg
|
||||
});
|
||||
|
||||
if (help || args.length === 0) {
|
||||
// If they didn't ask for help, then this is not a "success"
|
||||
var log = help ? console.log : console.error
|
||||
log('Usage: rimraf <path>')
|
||||
log('')
|
||||
log(' Deletes all files and folders at "path" recursively.')
|
||||
log('')
|
||||
log('Options:')
|
||||
log('')
|
||||
log(' -h, --help Display this usage info')
|
||||
process.exit(help ? 0 : 1)
|
||||
} else {
|
||||
args.forEach(function(arg) {
|
||||
rimraf.sync(arg)
|
||||
})
|
||||
}
|
||||
Generated
Vendored
-72
@@ -1,72 +0,0 @@
|
||||
{
|
||||
"name": "rimraf",
|
||||
"version": "2.2.8",
|
||||
"main": "rimraf.js",
|
||||
"description": "A deep deletion module for node (like `rm -rf`)",
|
||||
"author": {
|
||||
"name": "Isaac Z. Schlueter",
|
||||
"email": "i@izs.me",
|
||||
"url": "http://blog.izs.me/"
|
||||
},
|
||||
"license": {
|
||||
"type": "MIT",
|
||||
"url": "https://github.com/isaacs/rimraf/raw/master/LICENSE"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/isaacs/rimraf.git"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "cd test && bash run.sh"
|
||||
},
|
||||
"bin": {
|
||||
"rimraf": "./bin.js"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Isaac Z. Schlueter",
|
||||
"email": "i@izs.me",
|
||||
"url": "http://blog.izs.me"
|
||||
},
|
||||
{
|
||||
"name": "Wayne Larsen",
|
||||
"email": "wayne@larsen.st",
|
||||
"url": "http://github.com/wvl"
|
||||
},
|
||||
{
|
||||
"name": "ritch",
|
||||
"email": "skawful@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Marcel Laverdet"
|
||||
},
|
||||
{
|
||||
"name": "Yosef Dinerstein",
|
||||
"email": "yosefd@microsoft.com"
|
||||
}
|
||||
],
|
||||
"bugs": {
|
||||
"url": "https://github.com/isaacs/rimraf/issues"
|
||||
},
|
||||
"homepage": "https://github.com/isaacs/rimraf",
|
||||
"_id": "rimraf@2.2.8",
|
||||
"_shasum": "e439be2aaee327321952730f99a8929e4fc50582",
|
||||
"_from": "rimraf@~2.2.2",
|
||||
"_npmVersion": "1.4.10",
|
||||
"_npmUser": {
|
||||
"name": "isaacs",
|
||||
"email": "i@izs.me"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "isaacs",
|
||||
"email": "i@izs.me"
|
||||
}
|
||||
],
|
||||
"dist": {
|
||||
"shasum": "e439be2aaee327321952730f99a8929e4fc50582",
|
||||
"tarball": "http://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz"
|
||||
},
|
||||
"directories": {},
|
||||
"_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz"
|
||||
}
|
||||
Generated
Vendored
-248
@@ -1,248 +0,0 @@
|
||||
module.exports = rimraf
|
||||
rimraf.sync = rimrafSync
|
||||
|
||||
var assert = require("assert")
|
||||
var path = require("path")
|
||||
var fs = require("fs")
|
||||
|
||||
// for EMFILE handling
|
||||
var timeout = 0
|
||||
exports.EMFILE_MAX = 1000
|
||||
exports.BUSYTRIES_MAX = 3
|
||||
|
||||
var isWindows = (process.platform === "win32")
|
||||
|
||||
function defaults (options) {
|
||||
var methods = [
|
||||
'unlink',
|
||||
'chmod',
|
||||
'stat',
|
||||
'rmdir',
|
||||
'readdir'
|
||||
]
|
||||
methods.forEach(function(m) {
|
||||
options[m] = options[m] || fs[m]
|
||||
m = m + 'Sync'
|
||||
options[m] = options[m] || fs[m]
|
||||
})
|
||||
}
|
||||
|
||||
function rimraf (p, options, cb) {
|
||||
if (typeof options === 'function') {
|
||||
cb = options
|
||||
options = {}
|
||||
}
|
||||
assert(p)
|
||||
assert(options)
|
||||
assert(typeof cb === 'function')
|
||||
|
||||
defaults(options)
|
||||
|
||||
if (!cb) throw new Error("No callback passed to rimraf()")
|
||||
|
||||
var busyTries = 0
|
||||
rimraf_(p, options, function CB (er) {
|
||||
if (er) {
|
||||
if (isWindows && (er.code === "EBUSY" || er.code === "ENOTEMPTY") &&
|
||||
busyTries < exports.BUSYTRIES_MAX) {
|
||||
busyTries ++
|
||||
var time = busyTries * 100
|
||||
// try again, with the same exact callback as this one.
|
||||
return setTimeout(function () {
|
||||
rimraf_(p, options, CB)
|
||||
}, time)
|
||||
}
|
||||
|
||||
// this one won't happen if graceful-fs is used.
|
||||
if (er.code === "EMFILE" && timeout < exports.EMFILE_MAX) {
|
||||
return setTimeout(function () {
|
||||
rimraf_(p, options, CB)
|
||||
}, timeout ++)
|
||||
}
|
||||
|
||||
// already gone
|
||||
if (er.code === "ENOENT") er = null
|
||||
}
|
||||
|
||||
timeout = 0
|
||||
cb(er)
|
||||
})
|
||||
}
|
||||
|
||||
// Two possible strategies.
|
||||
// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR
|
||||
// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR
|
||||
//
|
||||
// Both result in an extra syscall when you guess wrong. However, there
|
||||
// are likely far more normal files in the world than directories. This
|
||||
// is based on the assumption that a the average number of files per
|
||||
// directory is >= 1.
|
||||
//
|
||||
// If anyone ever complains about this, then I guess the strategy could
|
||||
// be made configurable somehow. But until then, YAGNI.
|
||||
function rimraf_ (p, options, cb) {
|
||||
assert(p)
|
||||
assert(options)
|
||||
assert(typeof cb === 'function')
|
||||
|
||||
options.unlink(p, function (er) {
|
||||
if (er) {
|
||||
if (er.code === "ENOENT")
|
||||
return cb(null)
|
||||
if (er.code === "EPERM")
|
||||
return (isWindows)
|
||||
? fixWinEPERM(p, options, er, cb)
|
||||
: rmdir(p, options, er, cb)
|
||||
if (er.code === "EISDIR")
|
||||
return rmdir(p, options, er, cb)
|
||||
}
|
||||
return cb(er)
|
||||
})
|
||||
}
|
||||
|
||||
function fixWinEPERM (p, options, er, cb) {
|
||||
assert(p)
|
||||
assert(options)
|
||||
assert(typeof cb === 'function')
|
||||
if (er)
|
||||
assert(er instanceof Error)
|
||||
|
||||
options.chmod(p, 666, function (er2) {
|
||||
if (er2)
|
||||
cb(er2.code === "ENOENT" ? null : er)
|
||||
else
|
||||
options.stat(p, function(er3, stats) {
|
||||
if (er3)
|
||||
cb(er3.code === "ENOENT" ? null : er)
|
||||
else if (stats.isDirectory())
|
||||
rmdir(p, options, er, cb)
|
||||
else
|
||||
options.unlink(p, cb)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function fixWinEPERMSync (p, options, er) {
|
||||
assert(p)
|
||||
assert(options)
|
||||
if (er)
|
||||
assert(er instanceof Error)
|
||||
|
||||
try {
|
||||
options.chmodSync(p, 666)
|
||||
} catch (er2) {
|
||||
if (er2.code === "ENOENT")
|
||||
return
|
||||
else
|
||||
throw er
|
||||
}
|
||||
|
||||
try {
|
||||
var stats = options.statSync(p)
|
||||
} catch (er3) {
|
||||
if (er3.code === "ENOENT")
|
||||
return
|
||||
else
|
||||
throw er
|
||||
}
|
||||
|
||||
if (stats.isDirectory())
|
||||
rmdirSync(p, options, er)
|
||||
else
|
||||
options.unlinkSync(p)
|
||||
}
|
||||
|
||||
function rmdir (p, options, originalEr, cb) {
|
||||
assert(p)
|
||||
assert(options)
|
||||
if (originalEr)
|
||||
assert(originalEr instanceof Error)
|
||||
assert(typeof cb === 'function')
|
||||
|
||||
// try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
|
||||
// if we guessed wrong, and it's not a directory, then
|
||||
// raise the original error.
|
||||
options.rmdir(p, function (er) {
|
||||
if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM"))
|
||||
rmkids(p, options, cb)
|
||||
else if (er && er.code === "ENOTDIR")
|
||||
cb(originalEr)
|
||||
else
|
||||
cb(er)
|
||||
})
|
||||
}
|
||||
|
||||
function rmkids(p, options, cb) {
|
||||
assert(p)
|
||||
assert(options)
|
||||
assert(typeof cb === 'function')
|
||||
|
||||
options.readdir(p, function (er, files) {
|
||||
if (er)
|
||||
return cb(er)
|
||||
var n = files.length
|
||||
if (n === 0)
|
||||
return options.rmdir(p, cb)
|
||||
var errState
|
||||
files.forEach(function (f) {
|
||||
rimraf(path.join(p, f), options, function (er) {
|
||||
if (errState)
|
||||
return
|
||||
if (er)
|
||||
return cb(errState = er)
|
||||
if (--n === 0)
|
||||
options.rmdir(p, cb)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// this looks simpler, and is strictly *faster*, but will
|
||||
// tie up the JavaScript thread and fail on excessively
|
||||
// deep directory trees.
|
||||
function rimrafSync (p, options) {
|
||||
options = options || {}
|
||||
defaults(options)
|
||||
|
||||
assert(p)
|
||||
assert(options)
|
||||
|
||||
try {
|
||||
options.unlinkSync(p)
|
||||
} catch (er) {
|
||||
if (er.code === "ENOENT")
|
||||
return
|
||||
if (er.code === "EPERM")
|
||||
return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
|
||||
if (er.code !== "EISDIR")
|
||||
throw er
|
||||
rmdirSync(p, options, er)
|
||||
}
|
||||
}
|
||||
|
||||
function rmdirSync (p, options, originalEr) {
|
||||
assert(p)
|
||||
assert(options)
|
||||
if (originalEr)
|
||||
assert(originalEr instanceof Error)
|
||||
|
||||
try {
|
||||
options.rmdirSync(p)
|
||||
} catch (er) {
|
||||
if (er.code === "ENOENT")
|
||||
return
|
||||
if (er.code === "ENOTDIR")
|
||||
throw originalEr
|
||||
if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")
|
||||
rmkidsSync(p, options)
|
||||
}
|
||||
}
|
||||
|
||||
function rmkidsSync (p, options) {
|
||||
assert(p)
|
||||
assert(options)
|
||||
options.readdirSync(p).forEach(function (f) {
|
||||
rimrafSync(path.join(p, f), options)
|
||||
})
|
||||
options.rmdirSync(p, options)
|
||||
}
|
||||
Generated
Vendored
-283
@@ -1,283 +0,0 @@
|
||||
// different ways to id objects
|
||||
// use a req/res pair, since it's crazy deep and cyclical
|
||||
|
||||
// sparseFE10 and sigmund are usually pretty close, which is to be expected,
|
||||
// since they are essentially the same algorithm, except that sigmund handles
|
||||
// regular expression objects properly.
|
||||
|
||||
|
||||
var http = require('http')
|
||||
var util = require('util')
|
||||
var sigmund = require('./sigmund.js')
|
||||
var sreq, sres, creq, cres, test
|
||||
|
||||
http.createServer(function (q, s) {
|
||||
sreq = q
|
||||
sres = s
|
||||
sres.end('ok')
|
||||
this.close(function () { setTimeout(function () {
|
||||
start()
|
||||
}, 200) })
|
||||
}).listen(1337, function () {
|
||||
creq = http.get({ port: 1337 })
|
||||
creq.on('response', function (s) { cres = s })
|
||||
})
|
||||
|
||||
function start () {
|
||||
test = [sreq, sres, creq, cres]
|
||||
// test = sreq
|
||||
// sreq.sres = sres
|
||||
// sreq.creq = creq
|
||||
// sreq.cres = cres
|
||||
|
||||
for (var i in exports.compare) {
|
||||
console.log(i)
|
||||
var hash = exports.compare[i]()
|
||||
console.log(hash)
|
||||
console.log(hash.length)
|
||||
console.log('')
|
||||
}
|
||||
|
||||
require('bench').runMain()
|
||||
}
|
||||
|
||||
function customWs (obj, md, d) {
|
||||
d = d || 0
|
||||
var to = typeof obj
|
||||
if (to === 'undefined' || to === 'function' || to === null) return ''
|
||||
if (d > md || !obj || to !== 'object') return ('' + obj).replace(/[\n ]+/g, '')
|
||||
|
||||
if (Array.isArray(obj)) {
|
||||
return obj.map(function (i, _, __) {
|
||||
return customWs(i, md, d + 1)
|
||||
}).reduce(function (a, b) { return a + b }, '')
|
||||
}
|
||||
|
||||
var keys = Object.keys(obj)
|
||||
return keys.map(function (k, _, __) {
|
||||
return k + ':' + customWs(obj[k], md, d + 1)
|
||||
}).reduce(function (a, b) { return a + b }, '')
|
||||
}
|
||||
|
||||
function custom (obj, md, d) {
|
||||
d = d || 0
|
||||
var to = typeof obj
|
||||
if (to === 'undefined' || to === 'function' || to === null) return ''
|
||||
if (d > md || !obj || to !== 'object') return '' + obj
|
||||
|
||||
if (Array.isArray(obj)) {
|
||||
return obj.map(function (i, _, __) {
|
||||
return custom(i, md, d + 1)
|
||||
}).reduce(function (a, b) { return a + b }, '')
|
||||
}
|
||||
|
||||
var keys = Object.keys(obj)
|
||||
return keys.map(function (k, _, __) {
|
||||
return k + ':' + custom(obj[k], md, d + 1)
|
||||
}).reduce(function (a, b) { return a + b }, '')
|
||||
}
|
||||
|
||||
function sparseFE2 (obj, maxDepth) {
|
||||
var seen = []
|
||||
var soFar = ''
|
||||
function ch (v, depth) {
|
||||
if (depth > maxDepth) return
|
||||
if (typeof v === 'function' || typeof v === 'undefined') return
|
||||
if (typeof v !== 'object' || !v) {
|
||||
soFar += v
|
||||
return
|
||||
}
|
||||
if (seen.indexOf(v) !== -1 || depth === maxDepth) return
|
||||
seen.push(v)
|
||||
soFar += '{'
|
||||
Object.keys(v).forEach(function (k, _, __) {
|
||||
// pseudo-private values. skip those.
|
||||
if (k.charAt(0) === '_') return
|
||||
var to = typeof v[k]
|
||||
if (to === 'function' || to === 'undefined') return
|
||||
soFar += k + ':'
|
||||
ch(v[k], depth + 1)
|
||||
})
|
||||
soFar += '}'
|
||||
}
|
||||
ch(obj, 0)
|
||||
return soFar
|
||||
}
|
||||
|
||||
function sparseFE (obj, maxDepth) {
|
||||
var seen = []
|
||||
var soFar = ''
|
||||
function ch (v, depth) {
|
||||
if (depth > maxDepth) return
|
||||
if (typeof v === 'function' || typeof v === 'undefined') return
|
||||
if (typeof v !== 'object' || !v) {
|
||||
soFar += v
|
||||
return
|
||||
}
|
||||
if (seen.indexOf(v) !== -1 || depth === maxDepth) return
|
||||
seen.push(v)
|
||||
soFar += '{'
|
||||
Object.keys(v).forEach(function (k, _, __) {
|
||||
// pseudo-private values. skip those.
|
||||
if (k.charAt(0) === '_') return
|
||||
var to = typeof v[k]
|
||||
if (to === 'function' || to === 'undefined') return
|
||||
soFar += k
|
||||
ch(v[k], depth + 1)
|
||||
})
|
||||
}
|
||||
ch(obj, 0)
|
||||
return soFar
|
||||
}
|
||||
|
||||
function sparse (obj, maxDepth) {
|
||||
var seen = []
|
||||
var soFar = ''
|
||||
function ch (v, depth) {
|
||||
if (depth > maxDepth) return
|
||||
if (typeof v === 'function' || typeof v === 'undefined') return
|
||||
if (typeof v !== 'object' || !v) {
|
||||
soFar += v
|
||||
return
|
||||
}
|
||||
if (seen.indexOf(v) !== -1 || depth === maxDepth) return
|
||||
seen.push(v)
|
||||
soFar += '{'
|
||||
for (var k in v) {
|
||||
// pseudo-private values. skip those.
|
||||
if (k.charAt(0) === '_') continue
|
||||
var to = typeof v[k]
|
||||
if (to === 'function' || to === 'undefined') continue
|
||||
soFar += k
|
||||
ch(v[k], depth + 1)
|
||||
}
|
||||
}
|
||||
ch(obj, 0)
|
||||
return soFar
|
||||
}
|
||||
|
||||
function noCommas (obj, maxDepth) {
|
||||
var seen = []
|
||||
var soFar = ''
|
||||
function ch (v, depth) {
|
||||
if (depth > maxDepth) return
|
||||
if (typeof v === 'function' || typeof v === 'undefined') return
|
||||
if (typeof v !== 'object' || !v) {
|
||||
soFar += v
|
||||
return
|
||||
}
|
||||
if (seen.indexOf(v) !== -1 || depth === maxDepth) return
|
||||
seen.push(v)
|
||||
soFar += '{'
|
||||
for (var k in v) {
|
||||
// pseudo-private values. skip those.
|
||||
if (k.charAt(0) === '_') continue
|
||||
var to = typeof v[k]
|
||||
if (to === 'function' || to === 'undefined') continue
|
||||
soFar += k + ':'
|
||||
ch(v[k], depth + 1)
|
||||
}
|
||||
soFar += '}'
|
||||
}
|
||||
ch(obj, 0)
|
||||
return soFar
|
||||
}
|
||||
|
||||
|
||||
function flatten (obj, maxDepth) {
|
||||
var seen = []
|
||||
var soFar = ''
|
||||
function ch (v, depth) {
|
||||
if (depth > maxDepth) return
|
||||
if (typeof v === 'function' || typeof v === 'undefined') return
|
||||
if (typeof v !== 'object' || !v) {
|
||||
soFar += v
|
||||
return
|
||||
}
|
||||
if (seen.indexOf(v) !== -1 || depth === maxDepth) return
|
||||
seen.push(v)
|
||||
soFar += '{'
|
||||
for (var k in v) {
|
||||
// pseudo-private values. skip those.
|
||||
if (k.charAt(0) === '_') continue
|
||||
var to = typeof v[k]
|
||||
if (to === 'function' || to === 'undefined') continue
|
||||
soFar += k + ':'
|
||||
ch(v[k], depth + 1)
|
||||
soFar += ','
|
||||
}
|
||||
soFar += '}'
|
||||
}
|
||||
ch(obj, 0)
|
||||
return soFar
|
||||
}
|
||||
|
||||
exports.compare =
|
||||
{
|
||||
// 'custom 2': function () {
|
||||
// return custom(test, 2, 0)
|
||||
// },
|
||||
// 'customWs 2': function () {
|
||||
// return customWs(test, 2, 0)
|
||||
// },
|
||||
'JSON.stringify (guarded)': function () {
|
||||
var seen = []
|
||||
return JSON.stringify(test, function (k, v) {
|
||||
if (typeof v !== 'object' || !v) return v
|
||||
if (seen.indexOf(v) !== -1) return undefined
|
||||
seen.push(v)
|
||||
return v
|
||||
})
|
||||
},
|
||||
|
||||
'flatten 10': function () {
|
||||
return flatten(test, 10)
|
||||
},
|
||||
|
||||
// 'flattenFE 10': function () {
|
||||
// return flattenFE(test, 10)
|
||||
// },
|
||||
|
||||
'noCommas 10': function () {
|
||||
return noCommas(test, 10)
|
||||
},
|
||||
|
||||
'sparse 10': function () {
|
||||
return sparse(test, 10)
|
||||
},
|
||||
|
||||
'sparseFE 10': function () {
|
||||
return sparseFE(test, 10)
|
||||
},
|
||||
|
||||
'sparseFE2 10': function () {
|
||||
return sparseFE2(test, 10)
|
||||
},
|
||||
|
||||
sigmund: function() {
|
||||
return sigmund(test, 10)
|
||||
},
|
||||
|
||||
|
||||
// 'util.inspect 1': function () {
|
||||
// return util.inspect(test, false, 1, false)
|
||||
// },
|
||||
// 'util.inspect undefined': function () {
|
||||
// util.inspect(test)
|
||||
// },
|
||||
// 'util.inspect 2': function () {
|
||||
// util.inspect(test, false, 2, false)
|
||||
// },
|
||||
// 'util.inspect 3': function () {
|
||||
// util.inspect(test, false, 3, false)
|
||||
// },
|
||||
// 'util.inspect 4': function () {
|
||||
// util.inspect(test, false, 4, false)
|
||||
// },
|
||||
// 'util.inspect Infinity': function () {
|
||||
// util.inspect(test, false, Infinity, false)
|
||||
// }
|
||||
}
|
||||
|
||||
/** results
|
||||
**/
|
||||
Generated
Vendored
-58
@@ -1,58 +0,0 @@
|
||||
{
|
||||
"name": "sigmund",
|
||||
"version": "1.0.0",
|
||||
"description": "Quick and dirty signatures for Objects.",
|
||||
"main": "sigmund.js",
|
||||
"directories": {
|
||||
"test": "test"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"tap": "~0.3.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "tap test/*.js",
|
||||
"bench": "node bench.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/isaacs/sigmund"
|
||||
},
|
||||
"keywords": [
|
||||
"object",
|
||||
"signature",
|
||||
"key",
|
||||
"data",
|
||||
"psychoanalysis"
|
||||
],
|
||||
"author": {
|
||||
"name": "Isaac Z. Schlueter",
|
||||
"email": "i@izs.me",
|
||||
"url": "http://blog.izs.me/"
|
||||
},
|
||||
"license": "BSD",
|
||||
"readme": "# sigmund\n\nQuick and dirty signatures for Objects.\n\nThis is like a much faster `deepEquals` comparison, which returns a\nstring key suitable for caches and the like.\n\n## Usage\n\n```javascript\nfunction doSomething (someObj) {\n var key = sigmund(someObj, maxDepth) // max depth defaults to 10\n var cached = cache.get(key)\n if (cached) return cached)\n\n var result = expensiveCalculation(someObj)\n cache.set(key, result)\n return result\n}\n```\n\nThe resulting key will be as unique and reproducible as calling\n`JSON.stringify` or `util.inspect` on the object, but is much faster.\nIn order to achieve this speed, some differences are glossed over.\nFor example, the object `{0:'foo'}` will be treated identically to the\narray `['foo']`.\n\nAlso, just as there is no way to summon the soul from the scribblings\nof a cocain-addled psychoanalyst, there is no way to revive the object\nfrom the signature string that sigmund gives you. In fact, it's\nbarely even readable.\n\nAs with `sys.inspect` and `JSON.stringify`, larger objects will\nproduce larger signature strings.\n\nBecause sigmund is a bit less strict than the more thorough\nalternatives, the strings will be shorter, and also there is a\nslightly higher chance for collisions. For example, these objects\nhave the same signature:\n\n var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]}\n var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']}\n\nLike a good Freudian, sigmund is most effective when you already have\nsome understanding of what you're looking for. It can help you help\nyourself, but you must be willing to do some work as well.\n\nCycles are handled, and cyclical objects are silently omitted (though\nthe key is included in the signature output.)\n\nThe second argument is the maximum depth, which defaults to 10,\nbecause that is the maximum object traversal depth covered by most\ninsurance carriers.\n",
|
||||
"_id": "sigmund@1.0.0",
|
||||
"dist": {
|
||||
"shasum": "66a2b3a749ae8b5fb89efd4fcc01dc94fbe02296",
|
||||
"tarball": "http://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
|
||||
},
|
||||
"_npmVersion": "1.1.48",
|
||||
"_npmUser": {
|
||||
"name": "isaacs",
|
||||
"email": "i@izs.me"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "isaacs",
|
||||
"email": "i@izs.me"
|
||||
}
|
||||
],
|
||||
"_shasum": "66a2b3a749ae8b5fb89efd4fcc01dc94fbe02296",
|
||||
"_from": "sigmund@1.0.0",
|
||||
"_resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz",
|
||||
"bugs": {
|
||||
"url": "https://github.com/isaacs/sigmund/issues"
|
||||
},
|
||||
"homepage": "https://github.com/isaacs/sigmund"
|
||||
}
|
||||
Generated
Vendored
-39
@@ -1,39 +0,0 @@
|
||||
module.exports = sigmund
|
||||
function sigmund (subject, maxSessions) {
|
||||
maxSessions = maxSessions || 10;
|
||||
var notes = [];
|
||||
var analysis = '';
|
||||
var RE = RegExp;
|
||||
|
||||
function psychoAnalyze (subject, session) {
|
||||
if (session > maxSessions) return;
|
||||
|
||||
if (typeof subject === 'function' ||
|
||||
typeof subject === 'undefined') {
|
||||
return;
|
||||
}
|
||||
|
||||
if (typeof subject !== 'object' || !subject ||
|
||||
(subject instanceof RE)) {
|
||||
analysis += subject;
|
||||
return;
|
||||
}
|
||||
|
||||
if (notes.indexOf(subject) !== -1 || session === maxSessions) return;
|
||||
|
||||
notes.push(subject);
|
||||
analysis += '{';
|
||||
Object.keys(subject).forEach(function (issue, _, __) {
|
||||
// pseudo-private values. skip those.
|
||||
if (issue.charAt(0) === '_') return;
|
||||
var to = typeof subject[issue];
|
||||
if (to === 'function' || to === 'undefined') return;
|
||||
analysis += issue;
|
||||
psychoAnalyze(subject[issue], session + 1);
|
||||
});
|
||||
}
|
||||
psychoAnalyze(subject, 0);
|
||||
return analysis;
|
||||
}
|
||||
|
||||
// vim: set softtabstop=4 shiftwidth=4:
|
||||
Generated
Vendored
-68
@@ -1,68 +0,0 @@
|
||||
{
|
||||
"name": "file-utils",
|
||||
"version": "0.2.0",
|
||||
"description": "Sync file utility for Node.js command line tools",
|
||||
"main": "index.js",
|
||||
"directories": {
|
||||
"test": "tests"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "grunt test"
|
||||
},
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"lodash": "~2.4.1",
|
||||
"iconv-lite": "~0.2.11",
|
||||
"rimraf": "~2.2.2",
|
||||
"glob": "~3.2.6",
|
||||
"minimatch": "~0.2.12",
|
||||
"findup-sync": "~0.1.2",
|
||||
"isbinaryfile": "~2.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"temporary": "~0.0.4",
|
||||
"grunt-contrib-jshint": "~0.8.0",
|
||||
"grunt-contrib-nodeunit": "~0.2.0",
|
||||
"grunt-contrib-watch": "~0.5.3",
|
||||
"grunt-release": "~0.6.0"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/SBoudrias/file-utils.git"
|
||||
},
|
||||
"keywords": [
|
||||
"file",
|
||||
"utils",
|
||||
"scaffold",
|
||||
"tool",
|
||||
"cli"
|
||||
],
|
||||
"author": {
|
||||
"name": "Simon Boudrias"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/SBoudrias/file-utils/issues"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
},
|
||||
"_id": "file-utils@0.2.0",
|
||||
"dist": {
|
||||
"shasum": "0372c89b19bd96fc9a02a180c91fad29e4dbacaa",
|
||||
"tarball": "http://registry.npmjs.org/file-utils/-/file-utils-0.2.0.tgz"
|
||||
},
|
||||
"_from": "file-utils@~0.2.0",
|
||||
"_npmVersion": "1.3.5",
|
||||
"_npmUser": {
|
||||
"name": "sboudrias",
|
||||
"email": "admin@simonboudrias.com"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "sboudrias",
|
||||
"email": "admin@simonboudrias.com"
|
||||
}
|
||||
],
|
||||
"_shasum": "0372c89b19bd96fc9a02a180c91fad29e4dbacaa",
|
||||
"_resolved": "https://registry.npmjs.org/file-utils/-/file-utils-0.2.0.tgz"
|
||||
}
|
||||
Generated
Vendored
-1
@@ -1 +0,0 @@
|
||||
module.exports = require('util').inherits
|
||||
Generated
Vendored
-23
@@ -1,23 +0,0 @@
|
||||
if (typeof Object.create === 'function') {
|
||||
// implementation from standard node.js 'util' module
|
||||
module.exports = function inherits(ctor, superCtor) {
|
||||
ctor.super_ = superCtor
|
||||
ctor.prototype = Object.create(superCtor.prototype, {
|
||||
constructor: {
|
||||
value: ctor,
|
||||
enumerable: false,
|
||||
writable: true,
|
||||
configurable: true
|
||||
}
|
||||
});
|
||||
};
|
||||
} else {
|
||||
// old school shim for old browsers
|
||||
module.exports = function inherits(ctor, superCtor) {
|
||||
ctor.super_ = superCtor
|
||||
var TempCtor = function () {}
|
||||
TempCtor.prototype = superCtor.prototype
|
||||
ctor.prototype = new TempCtor()
|
||||
ctor.prototype.constructor = ctor
|
||||
}
|
||||
}
|
||||
Generated
Vendored
-51
@@ -1,51 +0,0 @@
|
||||
{
|
||||
"name": "inherits",
|
||||
"description": "Browser-friendly inheritance fully compatible with standard node.js inherits()",
|
||||
"version": "2.0.1",
|
||||
"keywords": [
|
||||
"inheritance",
|
||||
"class",
|
||||
"klass",
|
||||
"oop",
|
||||
"object-oriented",
|
||||
"inherits",
|
||||
"browser",
|
||||
"browserify"
|
||||
],
|
||||
"main": "./inherits.js",
|
||||
"browser": "./inherits_browser.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/isaacs/inherits"
|
||||
},
|
||||
"license": "ISC",
|
||||
"scripts": {
|
||||
"test": "node test"
|
||||
},
|
||||
"readme": "Browser-friendly inheritance fully compatible with standard node.js\n[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).\n\nThis package exports standard `inherits` from node.js `util` module in\nnode environment, but also provides alternative browser-friendly\nimplementation through [browser\nfield](https://gist.github.com/shtylman/4339901). Alternative\nimplementation is a literal copy of standard one located in standalone\nmodule to avoid requiring of `util`. It also has a shim for old\nbrowsers with no `Object.create` support.\n\nWhile keeping you sure you are using standard `inherits`\nimplementation in node.js environment, it allows bundlers such as\n[browserify](https://github.com/substack/node-browserify) to not\ninclude full `util` package to your client code if all you need is\njust `inherits` function. It worth, because browser shim for `util`\npackage is large and `inherits` is often the single function you need\nfrom it.\n\nIt's recommended to use this package instead of\n`require('util').inherits` for any code that has chances to be used\nnot only in node.js but in browser too.\n\n## usage\n\n```js\nvar inherits = require('inherits');\n// then use exactly as the standard one\n```\n\n## note on version ~1.0\n\nVersion ~1.0 had completely different motivation and is not compatible\nneither with 2.0 nor with standard node.js `inherits`.\n\nIf you are using version ~1.0 and planning to switch to ~2.0, be\ncareful:\n\n* new version uses `super_` instead of `super` for referencing\n superclass\n* new version overwrites current prototype while old one preserves any\n existing fields on it\n",
|
||||
"readmeFilename": "README.md",
|
||||
"bugs": {
|
||||
"url": "https://github.com/isaacs/inherits/issues"
|
||||
},
|
||||
"_id": "inherits@2.0.1",
|
||||
"dist": {
|
||||
"shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1",
|
||||
"tarball": "http://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
|
||||
},
|
||||
"_from": "inherits@2.0.1",
|
||||
"_npmVersion": "1.3.8",
|
||||
"_npmUser": {
|
||||
"name": "isaacs",
|
||||
"email": "i@izs.me"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "isaacs",
|
||||
"email": "i@izs.me"
|
||||
}
|
||||
],
|
||||
"directories": {},
|
||||
"_shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1",
|
||||
"_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
|
||||
"homepage": "https://github.com/isaacs/inherits"
|
||||
}
|
||||
Generated
Vendored
-52
@@ -1,52 +0,0 @@
|
||||
|
||||
var util = require('util');
|
||||
var PassThrough = require('stream').PassThrough || require('readable-stream/passthrough');
|
||||
|
||||
module.exports = {
|
||||
Readable: Readable,
|
||||
Writable: Writable
|
||||
};
|
||||
|
||||
util.inherits(Readable, PassThrough);
|
||||
util.inherits(Writable, PassThrough);
|
||||
|
||||
// Patch the given method of instance so that the callback
|
||||
// is executed once, before the actual method is called the
|
||||
// first time.
|
||||
function beforeFirstCall(instance, method, callback) {
|
||||
instance[method] = function() {
|
||||
delete instance[method];
|
||||
callback.apply(this, arguments);
|
||||
return this[method].apply(this, arguments);
|
||||
};
|
||||
}
|
||||
|
||||
function Readable(fn, options) {
|
||||
if (!(this instanceof Readable))
|
||||
return new Readable(fn, options);
|
||||
|
||||
PassThrough.call(this, options);
|
||||
|
||||
beforeFirstCall(this, '_read', function() {
|
||||
var source = fn.call(this, options);
|
||||
var that = this;
|
||||
source.pipe(this);
|
||||
});
|
||||
|
||||
this.emit('readable');
|
||||
}
|
||||
|
||||
function Writable(fn, options) {
|
||||
if (!(this instanceof Writable))
|
||||
return new Writable(fn, options);
|
||||
|
||||
PassThrough.call(this, options);
|
||||
|
||||
beforeFirstCall(this, '_write', function() {
|
||||
var destination = fn.call(this, options);
|
||||
this.pipe(destination);
|
||||
});
|
||||
|
||||
this.emit('writable');
|
||||
}
|
||||
|
||||
Generated
Vendored
-61
@@ -1,61 +0,0 @@
|
||||
{
|
||||
"name": "lazystream",
|
||||
"version": "0.1.0",
|
||||
"description": "Open Node Streams on demand.",
|
||||
"homepage": "https://github.com/jpommerening/node-lazystream",
|
||||
"author": {
|
||||
"name": "J. Pommerening"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jpommerening/node-lazystream.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/jpommerening/node-lazystream/issues"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
"type": "MIT",
|
||||
"url": "https://github.com/jpommerening/node-lazystream/blob/master/LICENSE-MIT"
|
||||
}
|
||||
],
|
||||
"main": "lib/lazystream.js",
|
||||
"engines": {
|
||||
"node": ">= 0.6.3"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "nodeunit test/readable_test.js test/writable_test.js test/pipe_test.js test/fs_test.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"readable-stream": "~1.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"nodeunit": "~0.7.4"
|
||||
},
|
||||
"keywords": [
|
||||
"streams",
|
||||
"stream"
|
||||
],
|
||||
"readme": "# Lazy Streams\n\n> *Create streams lazily when they are read from or written to.* \n> `lazystream: 0.0.2` [](https://travis-ci.org/jpommerening/node-lazystream) \n\n## Why?\n\nSometimes you feel the itch to open *all the files* at once. You want to pass a bunch of streams around, so the consumer does not need to worry where the data comes from.\nFrom a software design point-of-view this sounds entirely reasonable. Then there is that neat little function `fs.createReadStream()` that opens a file and gives you a nice `fs.ReadStream` to pass around, so you use what the mighty creator deities of node bestowed upon you.\n\n> `Error: EMFILE, too many open files` \n> ─ *node*\n\nThis package provides two classes based on the node's new streams API (or `readable-stream` if you are using node a node version earlier than 0.10):\n\n## Class: lazystream.Readable\n\nA wrapper for readable streams. Extends [`stream.PassThrough`](http://nodejs.org/api/stream.html#stream_class_stream_passthrough).\n\n### new lazystream.Readable(fn [, options])\n\n* `fn` *{Function}* \n The function that the lazy stream will call to obtain the stream to actually read from.\n* `options` *{Object}* \n Options for the underlying `PassThrough` stream, accessible by `fn`.\n\nCreates a new readable stream. Once the stream is accessed (for example when you call its `read()` method, or attach a `data`-event listener) the `fn` function is called with the outer `lazystream.Readable` instance bound to `this`.\n\nIf you pass an `options` object to the constuctor, you can access it in your `fn` function.\n\n```javascript\nnew lazystream.Readable(function (options) {\n return fs.createReadStream('/dev/urandom');\n});\n```\n\n## Class: lazystream.Writable\n\nA wrapper for writable streams. Extends [`stream.PassThrough`](http://nodejs.org/api/stream.html#stream_class_stream_passthrough).\n\n### new lazystream.Writable(fn [, options])\n\n* `fn` *{Function}* \n The function that the lazy stream will call to obtain the stream to actually write to.\n* `options` *{Object}* \n Options for the underlying `PassThrough` stream, accessible by `fn`.\n\nCreates a new writable stream. Just like the one above but for writable streams.\n\n```javascript\nnew lazystream.Writable(function () {\n return fs.createWriteStream('/dev/null');\n});\n```\n\n## Install\n\n```console\n$ npm install lazystream --save\nnpm http GET https://registry.npmjs.org/readable-stream\nnpm http 200 https://registry.npmjs.org/readable-stream\nnpm http GET https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.2.tgz\nnpm http 200 https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.2.tgz\nlazystream@0.0.2 node_modules/lazystream\n└── readable-stream@1.0.2\n```\n\n## Contributing\n\nFork it, branch it, send me a pull request. We'll work out the rest together.\n\n## Credits\n\n[Chris Talkington](https://github.com/ctalkington) and his [node-archiver](https://github.com/ctalkington/node-archiver) for providing a use-case.\n\n## [License](LICENSE-MIT)\n\nCopyright (c) 2013 J. Pommerening, contributors.\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n\n",
|
||||
"readmeFilename": "README.md",
|
||||
"_id": "lazystream@0.1.0",
|
||||
"dist": {
|
||||
"shasum": "1b25d63c772a4c20f0a5ed0a9d77f484b6e16920",
|
||||
"tarball": "http://registry.npmjs.org/lazystream/-/lazystream-0.1.0.tgz"
|
||||
},
|
||||
"_from": "lazystream@~0.1.0",
|
||||
"_npmVersion": "1.2.17",
|
||||
"_npmUser": {
|
||||
"name": "jpommerening",
|
||||
"email": "jonas.pommerening@gmail.com"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "jpommerening",
|
||||
"email": "jonas.pommerening@gmail.com"
|
||||
}
|
||||
],
|
||||
"directories": {},
|
||||
"_shasum": "1b25d63c772a4c20f0a5ed0a9d77f484b6e16920",
|
||||
"_resolved": "https://registry.npmjs.org/lazystream/-/lazystream-0.1.0.tgz"
|
||||
}
|
||||
Generated
Vendored
-6785
File diff suppressed because it is too large
Load Diff
Generated
Vendored
-131
@@ -1,131 +0,0 @@
|
||||
{
|
||||
"name": "lodash",
|
||||
"version": "2.4.1",
|
||||
"description": "A utility library delivering consistency, customization, performance, & extras.",
|
||||
"homepage": "http://lodash.com/",
|
||||
"license": "MIT",
|
||||
"main": "dist/lodash.js",
|
||||
"keywords": [
|
||||
"amd",
|
||||
"browser",
|
||||
"client",
|
||||
"customize",
|
||||
"functional",
|
||||
"server",
|
||||
"util"
|
||||
],
|
||||
"author": {
|
||||
"name": "John-David Dalton",
|
||||
"email": "john.david.dalton@gmail.com",
|
||||
"url": "http://allyoucanleet.com/"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "John-David Dalton",
|
||||
"email": "john.david.dalton@gmail.com",
|
||||
"url": "http://allyoucanleet.com/"
|
||||
},
|
||||
{
|
||||
"name": "Blaine Bublitz",
|
||||
"email": "blaine@iceddev.com",
|
||||
"url": "http://www.iceddev.com/"
|
||||
},
|
||||
{
|
||||
"name": "Kit Cambridge",
|
||||
"email": "github@kitcambridge.be",
|
||||
"url": "http://kitcambridge.be/"
|
||||
},
|
||||
{
|
||||
"name": "Mathias Bynens",
|
||||
"email": "mathias@qiwi.be",
|
||||
"url": "http://mathiasbynens.be/"
|
||||
}
|
||||
],
|
||||
"bugs": {
|
||||
"url": "https://github.com/lodash/lodash/issues"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/lodash/lodash.git"
|
||||
},
|
||||
"engines": [
|
||||
"node",
|
||||
"rhino"
|
||||
],
|
||||
"files": [
|
||||
"LICENSE.txt",
|
||||
"lodash.js",
|
||||
"dist/lodash.js",
|
||||
"dist/lodash.min.js",
|
||||
"dist/lodash.compat.js",
|
||||
"dist/lodash.compat.min.js",
|
||||
"dist/lodash.underscore.js",
|
||||
"dist/lodash.underscore.min.js"
|
||||
],
|
||||
"jam": {
|
||||
"main": "dist/lodash.compat.js",
|
||||
"include": [
|
||||
"LICENSE.txt",
|
||||
"dist/lodash.js",
|
||||
"dist/lodash.min.js",
|
||||
"dist/lodash.compat.js",
|
||||
"dist/lodash.compat.min.js",
|
||||
"dist/lodash.underscore.js",
|
||||
"dist/lodash.underscore.min.js"
|
||||
]
|
||||
},
|
||||
"volo": {
|
||||
"type": "directory",
|
||||
"ignore": [
|
||||
".*",
|
||||
"*.custom.*",
|
||||
"*.min.*",
|
||||
"*.template.*",
|
||||
"*.map",
|
||||
"*.md",
|
||||
"lodash.js",
|
||||
"index.js",
|
||||
"bower.json",
|
||||
"component.json",
|
||||
"doc",
|
||||
"modularize",
|
||||
"node_modules",
|
||||
"perf",
|
||||
"test",
|
||||
"vendor"
|
||||
]
|
||||
},
|
||||
"_id": "lodash@2.4.1",
|
||||
"dist": {
|
||||
"shasum": "5b7723034dda4d262e5a46fb2c58d7cc22f71420",
|
||||
"tarball": "http://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz"
|
||||
},
|
||||
"_from": "lodash@~2.4.1",
|
||||
"_npmVersion": "1.3.14",
|
||||
"_npmUser": {
|
||||
"name": "jdalton",
|
||||
"email": "john.david.dalton@gmail.com"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "jdalton",
|
||||
"email": "john.david.dalton@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "mathias",
|
||||
"email": "mathias@qiwi.be"
|
||||
},
|
||||
{
|
||||
"name": "phated",
|
||||
"email": "blaine@iceddev.com"
|
||||
},
|
||||
{
|
||||
"name": "kitcambridge",
|
||||
"email": "github@kitcambridge.be"
|
||||
}
|
||||
],
|
||||
"directories": {},
|
||||
"_shasum": "5b7723034dda4d262e5a46fb2c58d7cc22f71420",
|
||||
"_resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz",
|
||||
"readme": "ERROR: No README data found!"
|
||||
}
|
||||
packages/NoGit.0.0.8/node_modules/nogit/node_modules/archiver/node_modules/readable-stream/duplex.js
Generated
Vendored
-1
@@ -1 +0,0 @@
|
||||
module.exports = require("./lib/_stream_duplex.js")
|
||||
Generated
Vendored
-89
@@ -1,89 +0,0 @@
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
// copy of this software and associated documentation files (the
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||
// persons to whom the Software is furnished to do so, subject to the
|
||||
// following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included
|
||||
// in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// a duplex stream is just a stream that is both readable and writable.
|
||||
// Since JS doesn't have multiple prototypal inheritance, this class
|
||||
// prototypally inherits from Readable, and then parasitically from
|
||||
// Writable.
|
||||
|
||||
module.exports = Duplex;
|
||||
|
||||
/*<replacement>*/
|
||||
var objectKeys = Object.keys || function (obj) {
|
||||
var keys = [];
|
||||
for (var key in obj) keys.push(key);
|
||||
return keys;
|
||||
}
|
||||
/*</replacement>*/
|
||||
|
||||
|
||||
/*<replacement>*/
|
||||
var util = require('core-util-is');
|
||||
util.inherits = require('inherits');
|
||||
/*</replacement>*/
|
||||
|
||||
var Readable = require('./_stream_readable');
|
||||
var Writable = require('./_stream_writable');
|
||||
|
||||
util.inherits(Duplex, Readable);
|
||||
|
||||
forEach(objectKeys(Writable.prototype), function(method) {
|
||||
if (!Duplex.prototype[method])
|
||||
Duplex.prototype[method] = Writable.prototype[method];
|
||||
});
|
||||
|
||||
function Duplex(options) {
|
||||
if (!(this instanceof Duplex))
|
||||
return new Duplex(options);
|
||||
|
||||
Readable.call(this, options);
|
||||
Writable.call(this, options);
|
||||
|
||||
if (options && options.readable === false)
|
||||
this.readable = false;
|
||||
|
||||
if (options && options.writable === false)
|
||||
this.writable = false;
|
||||
|
||||
this.allowHalfOpen = true;
|
||||
if (options && options.allowHalfOpen === false)
|
||||
this.allowHalfOpen = false;
|
||||
|
||||
this.once('end', onend);
|
||||
}
|
||||
|
||||
// the no-half-open enforcer
|
||||
function onend() {
|
||||
// if we allow half-open state, or if the writable side ended,
|
||||
// then we're ok.
|
||||
if (this.allowHalfOpen || this._writableState.ended)
|
||||
return;
|
||||
|
||||
// no more data can be written.
|
||||
// But allow more writes to happen in this tick.
|
||||
process.nextTick(this.end.bind(this));
|
||||
}
|
||||
|
||||
function forEach (xs, f) {
|
||||
for (var i = 0, l = xs.length; i < l; i++) {
|
||||
f(xs[i], i);
|
||||
}
|
||||
}
|
||||
Generated
Vendored
-46
@@ -1,46 +0,0 @@
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
// copy of this software and associated documentation files (the
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||
// persons to whom the Software is furnished to do so, subject to the
|
||||
// following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included
|
||||
// in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// a passthrough stream.
|
||||
// basically just the most minimal sort of Transform stream.
|
||||
// Every written chunk gets output as-is.
|
||||
|
||||
module.exports = PassThrough;
|
||||
|
||||
var Transform = require('./_stream_transform');
|
||||
|
||||
/*<replacement>*/
|
||||
var util = require('core-util-is');
|
||||
util.inherits = require('inherits');
|
||||
/*</replacement>*/
|
||||
|
||||
util.inherits(PassThrough, Transform);
|
||||
|
||||
function PassThrough(options) {
|
||||
if (!(this instanceof PassThrough))
|
||||
return new PassThrough(options);
|
||||
|
||||
Transform.call(this, options);
|
||||
}
|
||||
|
||||
PassThrough.prototype._transform = function(chunk, encoding, cb) {
|
||||
cb(null, chunk);
|
||||
};
|
||||
Generated
Vendored
-959
@@ -1,959 +0,0 @@
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
// copy of this software and associated documentation files (the
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||
// persons to whom the Software is furnished to do so, subject to the
|
||||
// following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included
|
||||
// in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
module.exports = Readable;
|
||||
|
||||
/*<replacement>*/
|
||||
var isArray = require('isarray');
|
||||
/*</replacement>*/
|
||||
|
||||
|
||||
/*<replacement>*/
|
||||
var Buffer = require('buffer').Buffer;
|
||||
/*</replacement>*/
|
||||
|
||||
Readable.ReadableState = ReadableState;
|
||||
|
||||
var EE = require('events').EventEmitter;
|
||||
|
||||
/*<replacement>*/
|
||||
if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
|
||||
return emitter.listeners(type).length;
|
||||
};
|
||||
/*</replacement>*/
|
||||
|
||||
var Stream = require('stream');
|
||||
|
||||
/*<replacement>*/
|
||||
var util = require('core-util-is');
|
||||
util.inherits = require('inherits');
|
||||
/*</replacement>*/
|
||||
|
||||
var StringDecoder;
|
||||
|
||||
util.inherits(Readable, Stream);
|
||||
|
||||
function ReadableState(options, stream) {
|
||||
options = options || {};
|
||||
|
||||
// the point at which it stops calling _read() to fill the buffer
|
||||
// Note: 0 is a valid value, means "don't call _read preemptively ever"
|
||||
var hwm = options.highWaterMark;
|
||||
this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024;
|
||||
|
||||
// cast to ints.
|
||||
this.highWaterMark = ~~this.highWaterMark;
|
||||
|
||||
this.buffer = [];
|
||||
this.length = 0;
|
||||
this.pipes = null;
|
||||
this.pipesCount = 0;
|
||||
this.flowing = false;
|
||||
this.ended = false;
|
||||
this.endEmitted = false;
|
||||
this.reading = false;
|
||||
|
||||
// In streams that never have any data, and do push(null) right away,
|
||||
// the consumer can miss the 'end' event if they do some I/O before
|
||||
// consuming the stream. So, we don't emit('end') until some reading
|
||||
// happens.
|
||||
this.calledRead = false;
|
||||
|
||||
// a flag to be able to tell if the onwrite cb is called immediately,
|
||||
// or on a later tick. We set this to true at first, becuase any
|
||||
// actions that shouldn't happen until "later" should generally also
|
||||
// not happen before the first write call.
|
||||
this.sync = true;
|
||||
|
||||
// whenever we return null, then we set a flag to say
|
||||
// that we're awaiting a 'readable' event emission.
|
||||
this.needReadable = false;
|
||||
this.emittedReadable = false;
|
||||
this.readableListening = false;
|
||||
|
||||
|
||||
// object stream flag. Used to make read(n) ignore n and to
|
||||
// make all the buffer merging and length checks go away
|
||||
this.objectMode = !!options.objectMode;
|
||||
|
||||
// Crypto is kind of old and crusty. Historically, its default string
|
||||
// encoding is 'binary' so we have to make this configurable.
|
||||
// Everything else in the universe uses 'utf8', though.
|
||||
this.defaultEncoding = options.defaultEncoding || 'utf8';
|
||||
|
||||
// when piping, we only care about 'readable' events that happen
|
||||
// after read()ing all the bytes and not getting any pushback.
|
||||
this.ranOut = false;
|
||||
|
||||
// the number of writers that are awaiting a drain event in .pipe()s
|
||||
this.awaitDrain = 0;
|
||||
|
||||
// if true, a maybeReadMore has been scheduled
|
||||
this.readingMore = false;
|
||||
|
||||
this.decoder = null;
|
||||
this.encoding = null;
|
||||
if (options.encoding) {
|
||||
if (!StringDecoder)
|
||||
StringDecoder = require('string_decoder/').StringDecoder;
|
||||
this.decoder = new StringDecoder(options.encoding);
|
||||
this.encoding = options.encoding;
|
||||
}
|
||||
}
|
||||
|
||||
function Readable(options) {
|
||||
if (!(this instanceof Readable))
|
||||
return new Readable(options);
|
||||
|
||||
this._readableState = new ReadableState(options, this);
|
||||
|
||||
// legacy
|
||||
this.readable = true;
|
||||
|
||||
Stream.call(this);
|
||||
}
|
||||
|
||||
// Manually shove something into the read() buffer.
|
||||
// This returns true if the highWaterMark has not been hit yet,
|
||||
// similar to how Writable.write() returns true if you should
|
||||
// write() some more.
|
||||
Readable.prototype.push = function(chunk, encoding) {
|
||||
var state = this._readableState;
|
||||
|
||||
if (typeof chunk === 'string' && !state.objectMode) {
|
||||
encoding = encoding || state.defaultEncoding;
|
||||
if (encoding !== state.encoding) {
|
||||
chunk = new Buffer(chunk, encoding);
|
||||
encoding = '';
|
||||
}
|
||||
}
|
||||
|
||||
return readableAddChunk(this, state, chunk, encoding, false);
|
||||
};
|
||||
|
||||
// Unshift should *always* be something directly out of read()
|
||||
Readable.prototype.unshift = function(chunk) {
|
||||
var state = this._readableState;
|
||||
return readableAddChunk(this, state, chunk, '', true);
|
||||
};
|
||||
|
||||
function readableAddChunk(stream, state, chunk, encoding, addToFront) {
|
||||
var er = chunkInvalid(state, chunk);
|
||||
if (er) {
|
||||
stream.emit('error', er);
|
||||
} else if (chunk === null || chunk === undefined) {
|
||||
state.reading = false;
|
||||
if (!state.ended)
|
||||
onEofChunk(stream, state);
|
||||
} else if (state.objectMode || chunk && chunk.length > 0) {
|
||||
if (state.ended && !addToFront) {
|
||||
var e = new Error('stream.push() after EOF');
|
||||
stream.emit('error', e);
|
||||
} else if (state.endEmitted && addToFront) {
|
||||
var e = new Error('stream.unshift() after end event');
|
||||
stream.emit('error', e);
|
||||
} else {
|
||||
if (state.decoder && !addToFront && !encoding)
|
||||
chunk = state.decoder.write(chunk);
|
||||
|
||||
// update the buffer info.
|
||||
state.length += state.objectMode ? 1 : chunk.length;
|
||||
if (addToFront) {
|
||||
state.buffer.unshift(chunk);
|
||||
} else {
|
||||
state.reading = false;
|
||||
state.buffer.push(chunk);
|
||||
}
|
||||
|
||||
if (state.needReadable)
|
||||
emitReadable(stream);
|
||||
|
||||
maybeReadMore(stream, state);
|
||||
}
|
||||
} else if (!addToFront) {
|
||||
state.reading = false;
|
||||
}
|
||||
|
||||
return needMoreData(state);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// if it's past the high water mark, we can push in some more.
|
||||
// Also, if we have no data yet, we can stand some
|
||||
// more bytes. This is to work around cases where hwm=0,
|
||||
// such as the repl. Also, if the push() triggered a
|
||||
// readable event, and the user called read(largeNumber) such that
|
||||
// needReadable was set, then we ought to push more, so that another
|
||||
// 'readable' event will be triggered.
|
||||
function needMoreData(state) {
|
||||
return !state.ended &&
|
||||
(state.needReadable ||
|
||||
state.length < state.highWaterMark ||
|
||||
state.length === 0);
|
||||
}
|
||||
|
||||
// backwards compatibility.
|
||||
Readable.prototype.setEncoding = function(enc) {
|
||||
if (!StringDecoder)
|
||||
StringDecoder = require('string_decoder/').StringDecoder;
|
||||
this._readableState.decoder = new StringDecoder(enc);
|
||||
this._readableState.encoding = enc;
|
||||
};
|
||||
|
||||
// Don't raise the hwm > 128MB
|
||||
var MAX_HWM = 0x800000;
|
||||
function roundUpToNextPowerOf2(n) {
|
||||
if (n >= MAX_HWM) {
|
||||
n = MAX_HWM;
|
||||
} else {
|
||||
// Get the next highest power of 2
|
||||
n--;
|
||||
for (var p = 1; p < 32; p <<= 1) n |= n >> p;
|
||||
n++;
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
function howMuchToRead(n, state) {
|
||||
if (state.length === 0 && state.ended)
|
||||
return 0;
|
||||
|
||||
if (state.objectMode)
|
||||
return n === 0 ? 0 : 1;
|
||||
|
||||
if (isNaN(n) || n === null) {
|
||||
// only flow one buffer at a time
|
||||
if (state.flowing && state.buffer.length)
|
||||
return state.buffer[0].length;
|
||||
else
|
||||
return state.length;
|
||||
}
|
||||
|
||||
if (n <= 0)
|
||||
return 0;
|
||||
|
||||
// If we're asking for more than the target buffer level,
|
||||
// then raise the water mark. Bump up to the next highest
|
||||
// power of 2, to prevent increasing it excessively in tiny
|
||||
// amounts.
|
||||
if (n > state.highWaterMark)
|
||||
state.highWaterMark = roundUpToNextPowerOf2(n);
|
||||
|
||||
// don't have that much. return null, unless we've ended.
|
||||
if (n > state.length) {
|
||||
if (!state.ended) {
|
||||
state.needReadable = true;
|
||||
return 0;
|
||||
} else
|
||||
return state.length;
|
||||
}
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
// you can override either this method, or the async _read(n) below.
|
||||
Readable.prototype.read = function(n) {
|
||||
var state = this._readableState;
|
||||
state.calledRead = true;
|
||||
var nOrig = n;
|
||||
|
||||
if (typeof n !== 'number' || n > 0)
|
||||
state.emittedReadable = false;
|
||||
|
||||
// if we're doing read(0) to trigger a readable event, but we
|
||||
// already have a bunch of data in the buffer, then just trigger
|
||||
// the 'readable' event and move on.
|
||||
if (n === 0 &&
|
||||
state.needReadable &&
|
||||
(state.length >= state.highWaterMark || state.ended)) {
|
||||
emitReadable(this);
|
||||
return null;
|
||||
}
|
||||
|
||||
n = howMuchToRead(n, state);
|
||||
|
||||
// if we've ended, and we're now clear, then finish it up.
|
||||
if (n === 0 && state.ended) {
|
||||
if (state.length === 0)
|
||||
endReadable(this);
|
||||
return null;
|
||||
}
|
||||
|
||||
// All the actual chunk generation logic needs to be
|
||||
// *below* the call to _read. The reason is that in certain
|
||||
// synthetic stream cases, such as passthrough streams, _read
|
||||
// may be a completely synchronous operation which may change
|
||||
// the state of the read buffer, providing enough data when
|
||||
// before there was *not* enough.
|
||||
//
|
||||
// So, the steps are:
|
||||
// 1. Figure out what the state of things will be after we do
|
||||
// a read from the buffer.
|
||||
//
|
||||
// 2. If that resulting state will trigger a _read, then call _read.
|
||||
// Note that this may be asynchronous, or synchronous. Yes, it is
|
||||
// deeply ugly to write APIs this way, but that still doesn't mean
|
||||
// that the Readable class should behave improperly, as streams are
|
||||
// designed to be sync/async agnostic.
|
||||
// Take note if the _read call is sync or async (ie, if the read call
|
||||
// has returned yet), so that we know whether or not it's safe to emit
|
||||
// 'readable' etc.
|
||||
//
|
||||
// 3. Actually pull the requested chunks out of the buffer and return.
|
||||
|
||||
// if we need a readable event, then we need to do some reading.
|
||||
var doRead = state.needReadable;
|
||||
|
||||
// if we currently have less than the highWaterMark, then also read some
|
||||
if (state.length - n <= state.highWaterMark)
|
||||
doRead = true;
|
||||
|
||||
// however, if we've ended, then there's no point, and if we're already
|
||||
// reading, then it's unnecessary.
|
||||
if (state.ended || state.reading)
|
||||
doRead = false;
|
||||
|
||||
if (doRead) {
|
||||
state.reading = true;
|
||||
state.sync = true;
|
||||
// if the length is currently zero, then we *need* a readable event.
|
||||
if (state.length === 0)
|
||||
state.needReadable = true;
|
||||
// call internal read method
|
||||
this._read(state.highWaterMark);
|
||||
state.sync = false;
|
||||
}
|
||||
|
||||
// If _read called its callback synchronously, then `reading`
|
||||
// will be false, and we need to re-evaluate how much data we
|
||||
// can return to the user.
|
||||
if (doRead && !state.reading)
|
||||
n = howMuchToRead(nOrig, state);
|
||||
|
||||
var ret;
|
||||
if (n > 0)
|
||||
ret = fromList(n, state);
|
||||
else
|
||||
ret = null;
|
||||
|
||||
if (ret === null) {
|
||||
state.needReadable = true;
|
||||
n = 0;
|
||||
}
|
||||
|
||||
state.length -= n;
|
||||
|
||||
// If we have nothing in the buffer, then we want to know
|
||||
// as soon as we *do* get something into the buffer.
|
||||
if (state.length === 0 && !state.ended)
|
||||
state.needReadable = true;
|
||||
|
||||
// If we happened to read() exactly the remaining amount in the
|
||||
// buffer, and the EOF has been seen at this point, then make sure
|
||||
// that we emit 'end' on the very next tick.
|
||||
if (state.ended && !state.endEmitted && state.length === 0)
|
||||
endReadable(this);
|
||||
|
||||
return ret;
|
||||
};
|
||||
|
||||
function chunkInvalid(state, chunk) {
|
||||
var er = null;
|
||||
if (!Buffer.isBuffer(chunk) &&
|
||||
'string' !== typeof chunk &&
|
||||
chunk !== null &&
|
||||
chunk !== undefined &&
|
||||
!state.objectMode &&
|
||||
!er) {
|
||||
er = new TypeError('Invalid non-string/buffer chunk');
|
||||
}
|
||||
return er;
|
||||
}
|
||||
|
||||
|
||||
function onEofChunk(stream, state) {
|
||||
if (state.decoder && !state.ended) {
|
||||
var chunk = state.decoder.end();
|
||||
if (chunk && chunk.length) {
|
||||
state.buffer.push(chunk);
|
||||
state.length += state.objectMode ? 1 : chunk.length;
|
||||
}
|
||||
}
|
||||
state.ended = true;
|
||||
|
||||
// if we've ended and we have some data left, then emit
|
||||
// 'readable' now to make sure it gets picked up.
|
||||
if (state.length > 0)
|
||||
emitReadable(stream);
|
||||
else
|
||||
endReadable(stream);
|
||||
}
|
||||
|
||||
// Don't emit readable right away in sync mode, because this can trigger
|
||||
// another read() call => stack overflow. This way, it might trigger
|
||||
// a nextTick recursion warning, but that's not so bad.
|
||||
function emitReadable(stream) {
|
||||
var state = stream._readableState;
|
||||
state.needReadable = false;
|
||||
if (state.emittedReadable)
|
||||
return;
|
||||
|
||||
state.emittedReadable = true;
|
||||
if (state.sync)
|
||||
process.nextTick(function() {
|
||||
emitReadable_(stream);
|
||||
});
|
||||
else
|
||||
emitReadable_(stream);
|
||||
}
|
||||
|
||||
function emitReadable_(stream) {
|
||||
stream.emit('readable');
|
||||
}
|
||||
|
||||
|
||||
// at this point, the user has presumably seen the 'readable' event,
|
||||
// and called read() to consume some data. that may have triggered
|
||||
// in turn another _read(n) call, in which case reading = true if
|
||||
// it's in progress.
|
||||
// However, if we're not ended, or reading, and the length < hwm,
|
||||
// then go ahead and try to read some more preemptively.
|
||||
function maybeReadMore(stream, state) {
|
||||
if (!state.readingMore) {
|
||||
state.readingMore = true;
|
||||
process.nextTick(function() {
|
||||
maybeReadMore_(stream, state);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function maybeReadMore_(stream, state) {
|
||||
var len = state.length;
|
||||
while (!state.reading && !state.flowing && !state.ended &&
|
||||
state.length < state.highWaterMark) {
|
||||
stream.read(0);
|
||||
if (len === state.length)
|
||||
// didn't get any data, stop spinning.
|
||||
break;
|
||||
else
|
||||
len = state.length;
|
||||
}
|
||||
state.readingMore = false;
|
||||
}
|
||||
|
||||
// abstract method. to be overridden in specific implementation classes.
|
||||
// call cb(er, data) where data is <= n in length.
|
||||
// for virtual (non-string, non-buffer) streams, "length" is somewhat
|
||||
// arbitrary, and perhaps not very meaningful.
|
||||
Readable.prototype._read = function(n) {
|
||||
this.emit('error', new Error('not implemented'));
|
||||
};
|
||||
|
||||
Readable.prototype.pipe = function(dest, pipeOpts) {
|
||||
var src = this;
|
||||
var state = this._readableState;
|
||||
|
||||
switch (state.pipesCount) {
|
||||
case 0:
|
||||
state.pipes = dest;
|
||||
break;
|
||||
case 1:
|
||||
state.pipes = [state.pipes, dest];
|
||||
break;
|
||||
default:
|
||||
state.pipes.push(dest);
|
||||
break;
|
||||
}
|
||||
state.pipesCount += 1;
|
||||
|
||||
var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
|
||||
dest !== process.stdout &&
|
||||
dest !== process.stderr;
|
||||
|
||||
var endFn = doEnd ? onend : cleanup;
|
||||
if (state.endEmitted)
|
||||
process.nextTick(endFn);
|
||||
else
|
||||
src.once('end', endFn);
|
||||
|
||||
dest.on('unpipe', onunpipe);
|
||||
function onunpipe(readable) {
|
||||
if (readable !== src) return;
|
||||
cleanup();
|
||||
}
|
||||
|
||||
function onend() {
|
||||
dest.end();
|
||||
}
|
||||
|
||||
// when the dest drains, it reduces the awaitDrain counter
|
||||
// on the source. This would be more elegant with a .once()
|
||||
// handler in flow(), but adding and removing repeatedly is
|
||||
// too slow.
|
||||
var ondrain = pipeOnDrain(src);
|
||||
dest.on('drain', ondrain);
|
||||
|
||||
function cleanup() {
|
||||
// cleanup event handlers once the pipe is broken
|
||||
dest.removeListener('close', onclose);
|
||||
dest.removeListener('finish', onfinish);
|
||||
dest.removeListener('drain', ondrain);
|
||||
dest.removeListener('error', onerror);
|
||||
dest.removeListener('unpipe', onunpipe);
|
||||
src.removeListener('end', onend);
|
||||
src.removeListener('end', cleanup);
|
||||
|
||||
// if the reader is waiting for a drain event from this
|
||||
// specific writer, then it would cause it to never start
|
||||
// flowing again.
|
||||
// So, if this is awaiting a drain, then we just call it now.
|
||||
// If we don't know, then assume that we are waiting for one.
|
||||
if (!dest._writableState || dest._writableState.needDrain)
|
||||
ondrain();
|
||||
}
|
||||
|
||||
// if the dest has an error, then stop piping into it.
|
||||
// however, don't suppress the throwing behavior for this.
|
||||
function onerror(er) {
|
||||
unpipe();
|
||||
dest.removeListener('error', onerror);
|
||||
if (EE.listenerCount(dest, 'error') === 0)
|
||||
dest.emit('error', er);
|
||||
}
|
||||
// This is a brutally ugly hack to make sure that our error handler
|
||||
// is attached before any userland ones. NEVER DO THIS.
|
||||
if (!dest._events || !dest._events.error)
|
||||
dest.on('error', onerror);
|
||||
else if (isArray(dest._events.error))
|
||||
dest._events.error.unshift(onerror);
|
||||
else
|
||||
dest._events.error = [onerror, dest._events.error];
|
||||
|
||||
|
||||
|
||||
// Both close and finish should trigger unpipe, but only once.
|
||||
function onclose() {
|
||||
dest.removeListener('finish', onfinish);
|
||||
unpipe();
|
||||
}
|
||||
dest.once('close', onclose);
|
||||
function onfinish() {
|
||||
dest.removeListener('close', onclose);
|
||||
unpipe();
|
||||
}
|
||||
dest.once('finish', onfinish);
|
||||
|
||||
function unpipe() {
|
||||
src.unpipe(dest);
|
||||
}
|
||||
|
||||
// tell the dest that it's being piped to
|
||||
dest.emit('pipe', src);
|
||||
|
||||
// start the flow if it hasn't been started already.
|
||||
if (!state.flowing) {
|
||||
// the handler that waits for readable events after all
|
||||
// the data gets sucked out in flow.
|
||||
// This would be easier to follow with a .once() handler
|
||||
// in flow(), but that is too slow.
|
||||
this.on('readable', pipeOnReadable);
|
||||
|
||||
state.flowing = true;
|
||||
process.nextTick(function() {
|
||||
flow(src);
|
||||
});
|
||||
}
|
||||
|
||||
return dest;
|
||||
};
|
||||
|
||||
function pipeOnDrain(src) {
|
||||
return function() {
|
||||
var dest = this;
|
||||
var state = src._readableState;
|
||||
state.awaitDrain--;
|
||||
if (state.awaitDrain === 0)
|
||||
flow(src);
|
||||
};
|
||||
}
|
||||
|
||||
function flow(src) {
|
||||
var state = src._readableState;
|
||||
var chunk;
|
||||
state.awaitDrain = 0;
|
||||
|
||||
function write(dest, i, list) {
|
||||
var written = dest.write(chunk);
|
||||
if (false === written) {
|
||||
state.awaitDrain++;
|
||||
}
|
||||
}
|
||||
|
||||
while (state.pipesCount && null !== (chunk = src.read())) {
|
||||
|
||||
if (state.pipesCount === 1)
|
||||
write(state.pipes, 0, null);
|
||||
else
|
||||
forEach(state.pipes, write);
|
||||
|
||||
src.emit('data', chunk);
|
||||
|
||||
// if anyone needs a drain, then we have to wait for that.
|
||||
if (state.awaitDrain > 0)
|
||||
return;
|
||||
}
|
||||
|
||||
// if every destination was unpiped, either before entering this
|
||||
// function, or in the while loop, then stop flowing.
|
||||
//
|
||||
// NB: This is a pretty rare edge case.
|
||||
if (state.pipesCount === 0) {
|
||||
state.flowing = false;
|
||||
|
||||
// if there were data event listeners added, then switch to old mode.
|
||||
if (EE.listenerCount(src, 'data') > 0)
|
||||
emitDataEvents(src);
|
||||
return;
|
||||
}
|
||||
|
||||
// at this point, no one needed a drain, so we just ran out of data
|
||||
// on the next readable event, start it over again.
|
||||
state.ranOut = true;
|
||||
}
|
||||
|
||||
function pipeOnReadable() {
|
||||
if (this._readableState.ranOut) {
|
||||
this._readableState.ranOut = false;
|
||||
flow(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Readable.prototype.unpipe = function(dest) {
|
||||
var state = this._readableState;
|
||||
|
||||
// if we're not piping anywhere, then do nothing.
|
||||
if (state.pipesCount === 0)
|
||||
return this;
|
||||
|
||||
// just one destination. most common case.
|
||||
if (state.pipesCount === 1) {
|
||||
// passed in one, but it's not the right one.
|
||||
if (dest && dest !== state.pipes)
|
||||
return this;
|
||||
|
||||
if (!dest)
|
||||
dest = state.pipes;
|
||||
|
||||
// got a match.
|
||||
state.pipes = null;
|
||||
state.pipesCount = 0;
|
||||
this.removeListener('readable', pipeOnReadable);
|
||||
state.flowing = false;
|
||||
if (dest)
|
||||
dest.emit('unpipe', this);
|
||||
return this;
|
||||
}
|
||||
|
||||
// slow case. multiple pipe destinations.
|
||||
|
||||
if (!dest) {
|
||||
// remove all.
|
||||
var dests = state.pipes;
|
||||
var len = state.pipesCount;
|
||||
state.pipes = null;
|
||||
state.pipesCount = 0;
|
||||
this.removeListener('readable', pipeOnReadable);
|
||||
state.flowing = false;
|
||||
|
||||
for (var i = 0; i < len; i++)
|
||||
dests[i].emit('unpipe', this);
|
||||
return this;
|
||||
}
|
||||
|
||||
// try to find the right one.
|
||||
var i = indexOf(state.pipes, dest);
|
||||
if (i === -1)
|
||||
return this;
|
||||
|
||||
state.pipes.splice(i, 1);
|
||||
state.pipesCount -= 1;
|
||||
if (state.pipesCount === 1)
|
||||
state.pipes = state.pipes[0];
|
||||
|
||||
dest.emit('unpipe', this);
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
// set up data events if they are asked for
|
||||
// Ensure readable listeners eventually get something
|
||||
Readable.prototype.on = function(ev, fn) {
|
||||
var res = Stream.prototype.on.call(this, ev, fn);
|
||||
|
||||
if (ev === 'data' && !this._readableState.flowing)
|
||||
emitDataEvents(this);
|
||||
|
||||
if (ev === 'readable' && this.readable) {
|
||||
var state = this._readableState;
|
||||
if (!state.readableListening) {
|
||||
state.readableListening = true;
|
||||
state.emittedReadable = false;
|
||||
state.needReadable = true;
|
||||
if (!state.reading) {
|
||||
this.read(0);
|
||||
} else if (state.length) {
|
||||
emitReadable(this, state);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
};
|
||||
Readable.prototype.addListener = Readable.prototype.on;
|
||||
|
||||
// pause() and resume() are remnants of the legacy readable stream API
|
||||
// If the user uses them, then switch into old mode.
|
||||
Readable.prototype.resume = function() {
|
||||
emitDataEvents(this);
|
||||
this.read(0);
|
||||
this.emit('resume');
|
||||
};
|
||||
|
||||
Readable.prototype.pause = function() {
|
||||
emitDataEvents(this, true);
|
||||
this.emit('pause');
|
||||
};
|
||||
|
||||
function emitDataEvents(stream, startPaused) {
|
||||
var state = stream._readableState;
|
||||
|
||||
if (state.flowing) {
|
||||
// https://github.com/isaacs/readable-stream/issues/16
|
||||
throw new Error('Cannot switch to old mode now.');
|
||||
}
|
||||
|
||||
var paused = startPaused || false;
|
||||
var readable = false;
|
||||
|
||||
// convert to an old-style stream.
|
||||
stream.readable = true;
|
||||
stream.pipe = Stream.prototype.pipe;
|
||||
stream.on = stream.addListener = Stream.prototype.on;
|
||||
|
||||
stream.on('readable', function() {
|
||||
readable = true;
|
||||
|
||||
var c;
|
||||
while (!paused && (null !== (c = stream.read())))
|
||||
stream.emit('data', c);
|
||||
|
||||
if (c === null) {
|
||||
readable = false;
|
||||
stream._readableState.needReadable = true;
|
||||
}
|
||||
});
|
||||
|
||||
stream.pause = function() {
|
||||
paused = true;
|
||||
this.emit('pause');
|
||||
};
|
||||
|
||||
stream.resume = function() {
|
||||
paused = false;
|
||||
if (readable)
|
||||
process.nextTick(function() {
|
||||
stream.emit('readable');
|
||||
});
|
||||
else
|
||||
this.read(0);
|
||||
this.emit('resume');
|
||||
};
|
||||
|
||||
// now make it start, just in case it hadn't already.
|
||||
stream.emit('readable');
|
||||
}
|
||||
|
||||
// wrap an old-style stream as the async data source.
|
||||
// This is *not* part of the readable stream interface.
|
||||
// It is an ugly unfortunate mess of history.
|
||||
Readable.prototype.wrap = function(stream) {
|
||||
var state = this._readableState;
|
||||
var paused = false;
|
||||
|
||||
var self = this;
|
||||
stream.on('end', function() {
|
||||
if (state.decoder && !state.ended) {
|
||||
var chunk = state.decoder.end();
|
||||
if (chunk && chunk.length)
|
||||
self.push(chunk);
|
||||
}
|
||||
|
||||
self.push(null);
|
||||
});
|
||||
|
||||
stream.on('data', function(chunk) {
|
||||
if (state.decoder)
|
||||
chunk = state.decoder.write(chunk);
|
||||
if (!chunk || !state.objectMode && !chunk.length)
|
||||
return;
|
||||
|
||||
var ret = self.push(chunk);
|
||||
if (!ret) {
|
||||
paused = true;
|
||||
stream.pause();
|
||||
}
|
||||
});
|
||||
|
||||
// proxy all the other methods.
|
||||
// important when wrapping filters and duplexes.
|
||||
for (var i in stream) {
|
||||
if (typeof stream[i] === 'function' &&
|
||||
typeof this[i] === 'undefined') {
|
||||
this[i] = function(method) { return function() {
|
||||
return stream[method].apply(stream, arguments);
|
||||
}}(i);
|
||||
}
|
||||
}
|
||||
|
||||
// proxy certain important events.
|
||||
var events = ['error', 'close', 'destroy', 'pause', 'resume'];
|
||||
forEach(events, function(ev) {
|
||||
stream.on(ev, self.emit.bind(self, ev));
|
||||
});
|
||||
|
||||
// when we try to consume some more bytes, simply unpause the
|
||||
// underlying stream.
|
||||
self._read = function(n) {
|
||||
if (paused) {
|
||||
paused = false;
|
||||
stream.resume();
|
||||
}
|
||||
};
|
||||
|
||||
return self;
|
||||
};
|
||||
|
||||
|
||||
|
||||
// exposed for testing purposes only.
|
||||
Readable._fromList = fromList;
|
||||
|
||||
// Pluck off n bytes from an array of buffers.
|
||||
// Length is the combined lengths of all the buffers in the list.
|
||||
function fromList(n, state) {
|
||||
var list = state.buffer;
|
||||
var length = state.length;
|
||||
var stringMode = !!state.decoder;
|
||||
var objectMode = !!state.objectMode;
|
||||
var ret;
|
||||
|
||||
// nothing in the list, definitely empty.
|
||||
if (list.length === 0)
|
||||
return null;
|
||||
|
||||
if (length === 0)
|
||||
ret = null;
|
||||
else if (objectMode)
|
||||
ret = list.shift();
|
||||
else if (!n || n >= length) {
|
||||
// read it all, truncate the array.
|
||||
if (stringMode)
|
||||
ret = list.join('');
|
||||
else
|
||||
ret = Buffer.concat(list, length);
|
||||
list.length = 0;
|
||||
} else {
|
||||
// read just some of it.
|
||||
if (n < list[0].length) {
|
||||
// just take a part of the first list item.
|
||||
// slice is the same for buffers and strings.
|
||||
var buf = list[0];
|
||||
ret = buf.slice(0, n);
|
||||
list[0] = buf.slice(n);
|
||||
} else if (n === list[0].length) {
|
||||
// first list is a perfect match
|
||||
ret = list.shift();
|
||||
} else {
|
||||
// complex case.
|
||||
// we have enough to cover it, but it spans past the first buffer.
|
||||
if (stringMode)
|
||||
ret = '';
|
||||
else
|
||||
ret = new Buffer(n);
|
||||
|
||||
var c = 0;
|
||||
for (var i = 0, l = list.length; i < l && c < n; i++) {
|
||||
var buf = list[0];
|
||||
var cpy = Math.min(n - c, buf.length);
|
||||
|
||||
if (stringMode)
|
||||
ret += buf.slice(0, cpy);
|
||||
else
|
||||
buf.copy(ret, c, 0, cpy);
|
||||
|
||||
if (cpy < buf.length)
|
||||
list[0] = buf.slice(cpy);
|
||||
else
|
||||
list.shift();
|
||||
|
||||
c += cpy;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
function endReadable(stream) {
|
||||
var state = stream._readableState;
|
||||
|
||||
// If we get here before consuming all the bytes, then that is a
|
||||
// bug in node. Should never happen.
|
||||
if (state.length > 0)
|
||||
throw new Error('endReadable called on non-empty stream');
|
||||
|
||||
if (!state.endEmitted && state.calledRead) {
|
||||
state.ended = true;
|
||||
process.nextTick(function() {
|
||||
// Check that we didn't get one last unshift.
|
||||
if (!state.endEmitted && state.length === 0) {
|
||||
state.endEmitted = true;
|
||||
stream.readable = false;
|
||||
stream.emit('end');
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function forEach (xs, f) {
|
||||
for (var i = 0, l = xs.length; i < l; i++) {
|
||||
f(xs[i], i);
|
||||
}
|
||||
}
|
||||
|
||||
function indexOf (xs, x) {
|
||||
for (var i = 0, l = xs.length; i < l; i++) {
|
||||
if (xs[i] === x) return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
Generated
Vendored
-210
@@ -1,210 +0,0 @@
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
// copy of this software and associated documentation files (the
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||
// persons to whom the Software is furnished to do so, subject to the
|
||||
// following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included
|
||||
// in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
|
||||
// a transform stream is a readable/writable stream where you do
|
||||
// something with the data. Sometimes it's called a "filter",
|
||||
// but that's not a great name for it, since that implies a thing where
|
||||
// some bits pass through, and others are simply ignored. (That would
|
||||
// be a valid example of a transform, of course.)
|
||||
//
|
||||
// While the output is causally related to the input, it's not a
|
||||
// necessarily symmetric or synchronous transformation. For example,
|
||||
// a zlib stream might take multiple plain-text writes(), and then
|
||||
// emit a single compressed chunk some time in the future.
|
||||
//
|
||||
// Here's how this works:
|
||||
//
|
||||
// The Transform stream has all the aspects of the readable and writable
|
||||
// stream classes. When you write(chunk), that calls _write(chunk,cb)
|
||||
// internally, and returns false if there's a lot of pending writes
|
||||
// buffered up. When you call read(), that calls _read(n) until
|
||||
// there's enough pending readable data buffered up.
|
||||
//
|
||||
// In a transform stream, the written data is placed in a buffer. When
|
||||
// _read(n) is called, it transforms the queued up data, calling the
|
||||
// buffered _write cb's as it consumes chunks. If consuming a single
|
||||
// written chunk would result in multiple output chunks, then the first
|
||||
// outputted bit calls the readcb, and subsequent chunks just go into
|
||||
// the read buffer, and will cause it to emit 'readable' if necessary.
|
||||
//
|
||||
// This way, back-pressure is actually determined by the reading side,
|
||||
// since _read has to be called to start processing a new chunk. However,
|
||||
// a pathological inflate type of transform can cause excessive buffering
|
||||
// here. For example, imagine a stream where every byte of input is
|
||||
// interpreted as an integer from 0-255, and then results in that many
|
||||
// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
|
||||
// 1kb of data being output. In this case, you could write a very small
|
||||
// amount of input, and end up with a very large amount of output. In
|
||||
// such a pathological inflating mechanism, there'd be no way to tell
|
||||
// the system to stop doing the transform. A single 4MB write could
|
||||
// cause the system to run out of memory.
|
||||
//
|
||||
// However, even in such a pathological case, only a single written chunk
|
||||
// would be consumed, and then the rest would wait (un-transformed) until
|
||||
// the results of the previous transformed chunk were consumed.
|
||||
|
||||
module.exports = Transform;
|
||||
|
||||
var Duplex = require('./_stream_duplex');
|
||||
|
||||
/*<replacement>*/
|
||||
var util = require('core-util-is');
|
||||
util.inherits = require('inherits');
|
||||
/*</replacement>*/
|
||||
|
||||
util.inherits(Transform, Duplex);
|
||||
|
||||
|
||||
function TransformState(options, stream) {
|
||||
this.afterTransform = function(er, data) {
|
||||
return afterTransform(stream, er, data);
|
||||
};
|
||||
|
||||
this.needTransform = false;
|
||||
this.transforming = false;
|
||||
this.writecb = null;
|
||||
this.writechunk = null;
|
||||
}
|
||||
|
||||
function afterTransform(stream, er, data) {
|
||||
var ts = stream._transformState;
|
||||
ts.transforming = false;
|
||||
|
||||
var cb = ts.writecb;
|
||||
|
||||
if (!cb)
|
||||
return stream.emit('error', new Error('no writecb in Transform class'));
|
||||
|
||||
ts.writechunk = null;
|
||||
ts.writecb = null;
|
||||
|
||||
if (data !== null && data !== undefined)
|
||||
stream.push(data);
|
||||
|
||||
if (cb)
|
||||
cb(er);
|
||||
|
||||
var rs = stream._readableState;
|
||||
rs.reading = false;
|
||||
if (rs.needReadable || rs.length < rs.highWaterMark) {
|
||||
stream._read(rs.highWaterMark);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function Transform(options) {
|
||||
if (!(this instanceof Transform))
|
||||
return new Transform(options);
|
||||
|
||||
Duplex.call(this, options);
|
||||
|
||||
var ts = this._transformState = new TransformState(options, this);
|
||||
|
||||
// when the writable side finishes, then flush out anything remaining.
|
||||
var stream = this;
|
||||
|
||||
// start out asking for a readable event once data is transformed.
|
||||
this._readableState.needReadable = true;
|
||||
|
||||
// we have implemented the _read method, and done the other things
|
||||
// that Readable wants before the first _read call, so unset the
|
||||
// sync guard flag.
|
||||
this._readableState.sync = false;
|
||||
|
||||
this.once('finish', function() {
|
||||
if ('function' === typeof this._flush)
|
||||
this._flush(function(er) {
|
||||
done(stream, er);
|
||||
});
|
||||
else
|
||||
done(stream);
|
||||
});
|
||||
}
|
||||
|
||||
Transform.prototype.push = function(chunk, encoding) {
|
||||
this._transformState.needTransform = false;
|
||||
return Duplex.prototype.push.call(this, chunk, encoding);
|
||||
};
|
||||
|
||||
// This is the part where you do stuff!
|
||||
// override this function in implementation classes.
|
||||
// 'chunk' is an input chunk.
|
||||
//
|
||||
// Call `push(newChunk)` to pass along transformed output
|
||||
// to the readable side. You may call 'push' zero or more times.
|
||||
//
|
||||
// Call `cb(err)` when you are done with this chunk. If you pass
|
||||
// an error, then that'll put the hurt on the whole operation. If you
|
||||
// never call cb(), then you'll never get another chunk.
|
||||
Transform.prototype._transform = function(chunk, encoding, cb) {
|
||||
throw new Error('not implemented');
|
||||
};
|
||||
|
||||
Transform.prototype._write = function(chunk, encoding, cb) {
|
||||
var ts = this._transformState;
|
||||
ts.writecb = cb;
|
||||
ts.writechunk = chunk;
|
||||
ts.writeencoding = encoding;
|
||||
if (!ts.transforming) {
|
||||
var rs = this._readableState;
|
||||
if (ts.needTransform ||
|
||||
rs.needReadable ||
|
||||
rs.length < rs.highWaterMark)
|
||||
this._read(rs.highWaterMark);
|
||||
}
|
||||
};
|
||||
|
||||
// Doesn't matter what the args are here.
|
||||
// _transform does all the work.
|
||||
// That we got here means that the readable side wants more data.
|
||||
Transform.prototype._read = function(n) {
|
||||
var ts = this._transformState;
|
||||
|
||||
if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
|
||||
ts.transforming = true;
|
||||
this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
|
||||
} else {
|
||||
// mark that we need a transform, so that any data that comes in
|
||||
// will get processed, now that we've asked for it.
|
||||
ts.needTransform = true;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function done(stream, er) {
|
||||
if (er)
|
||||
return stream.emit('error', er);
|
||||
|
||||
// if there's nothing in the write buffer, then that means
|
||||
// that nothing more will ever be provided
|
||||
var ws = stream._writableState;
|
||||
var rs = stream._readableState;
|
||||
var ts = stream._transformState;
|
||||
|
||||
if (ws.length)
|
||||
throw new Error('calling transform done when ws.length != 0');
|
||||
|
||||
if (ts.transforming)
|
||||
throw new Error('calling transform done when still transforming');
|
||||
|
||||
return stream.push(null);
|
||||
}
|
||||
Generated
Vendored
-387
@@ -1,387 +0,0 @@
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
// copy of this software and associated documentation files (the
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||
// persons to whom the Software is furnished to do so, subject to the
|
||||
// following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included
|
||||
// in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// A bit simpler than readable streams.
|
||||
// Implement an async ._write(chunk, cb), and it'll handle all
|
||||
// the drain event emission and buffering.
|
||||
|
||||
module.exports = Writable;
|
||||
|
||||
/*<replacement>*/
|
||||
var Buffer = require('buffer').Buffer;
|
||||
/*</replacement>*/
|
||||
|
||||
Writable.WritableState = WritableState;
|
||||
|
||||
|
||||
/*<replacement>*/
|
||||
var util = require('core-util-is');
|
||||
util.inherits = require('inherits');
|
||||
/*</replacement>*/
|
||||
|
||||
|
||||
var Stream = require('stream');
|
||||
|
||||
util.inherits(Writable, Stream);
|
||||
|
||||
function WriteReq(chunk, encoding, cb) {
|
||||
this.chunk = chunk;
|
||||
this.encoding = encoding;
|
||||
this.callback = cb;
|
||||
}
|
||||
|
||||
function WritableState(options, stream) {
|
||||
options = options || {};
|
||||
|
||||
// the point at which write() starts returning false
|
||||
// Note: 0 is a valid value, means that we always return false if
|
||||
// the entire buffer is not flushed immediately on write()
|
||||
var hwm = options.highWaterMark;
|
||||
this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024;
|
||||
|
||||
// object stream flag to indicate whether or not this stream
|
||||
// contains buffers or objects.
|
||||
this.objectMode = !!options.objectMode;
|
||||
|
||||
// cast to ints.
|
||||
this.highWaterMark = ~~this.highWaterMark;
|
||||
|
||||
this.needDrain = false;
|
||||
// at the start of calling end()
|
||||
this.ending = false;
|
||||
// when end() has been called, and returned
|
||||
this.ended = false;
|
||||
// when 'finish' is emitted
|
||||
this.finished = false;
|
||||
|
||||
// should we decode strings into buffers before passing to _write?
|
||||
// this is here so that some node-core streams can optimize string
|
||||
// handling at a lower level.
|
||||
var noDecode = options.decodeStrings === false;
|
||||
this.decodeStrings = !noDecode;
|
||||
|
||||
// Crypto is kind of old and crusty. Historically, its default string
|
||||
// encoding is 'binary' so we have to make this configurable.
|
||||
// Everything else in the universe uses 'utf8', though.
|
||||
this.defaultEncoding = options.defaultEncoding || 'utf8';
|
||||
|
||||
// not an actual buffer we keep track of, but a measurement
|
||||
// of how much we're waiting to get pushed to some underlying
|
||||
// socket or file.
|
||||
this.length = 0;
|
||||
|
||||
// a flag to see when we're in the middle of a write.
|
||||
this.writing = false;
|
||||
|
||||
// a flag to be able to tell if the onwrite cb is called immediately,
|
||||
// or on a later tick. We set this to true at first, becuase any
|
||||
// actions that shouldn't happen until "later" should generally also
|
||||
// not happen before the first write call.
|
||||
this.sync = true;
|
||||
|
||||
// a flag to know if we're processing previously buffered items, which
|
||||
// may call the _write() callback in the same tick, so that we don't
|
||||
// end up in an overlapped onwrite situation.
|
||||
this.bufferProcessing = false;
|
||||
|
||||
// the callback that's passed to _write(chunk,cb)
|
||||
this.onwrite = function(er) {
|
||||
onwrite(stream, er);
|
||||
};
|
||||
|
||||
// the callback that the user supplies to write(chunk,encoding,cb)
|
||||
this.writecb = null;
|
||||
|
||||
// the amount that is being written when _write is called.
|
||||
this.writelen = 0;
|
||||
|
||||
this.buffer = [];
|
||||
|
||||
// True if the error was already emitted and should not be thrown again
|
||||
this.errorEmitted = false;
|
||||
}
|
||||
|
||||
function Writable(options) {
|
||||
var Duplex = require('./_stream_duplex');
|
||||
|
||||
// Writable ctor is applied to Duplexes, though they're not
|
||||
// instanceof Writable, they're instanceof Readable.
|
||||
if (!(this instanceof Writable) && !(this instanceof Duplex))
|
||||
return new Writable(options);
|
||||
|
||||
this._writableState = new WritableState(options, this);
|
||||
|
||||
// legacy.
|
||||
this.writable = true;
|
||||
|
||||
Stream.call(this);
|
||||
}
|
||||
|
||||
// Otherwise people can pipe Writable streams, which is just wrong.
|
||||
Writable.prototype.pipe = function() {
|
||||
this.emit('error', new Error('Cannot pipe. Not readable.'));
|
||||
};
|
||||
|
||||
|
||||
function writeAfterEnd(stream, state, cb) {
|
||||
var er = new Error('write after end');
|
||||
// TODO: defer error events consistently everywhere, not just the cb
|
||||
stream.emit('error', er);
|
||||
process.nextTick(function() {
|
||||
cb(er);
|
||||
});
|
||||
}
|
||||
|
||||
// If we get something that is not a buffer, string, null, or undefined,
|
||||
// and we're not in objectMode, then that's an error.
|
||||
// Otherwise stream chunks are all considered to be of length=1, and the
|
||||
// watermarks determine how many objects to keep in the buffer, rather than
|
||||
// how many bytes or characters.
|
||||
function validChunk(stream, state, chunk, cb) {
|
||||
var valid = true;
|
||||
if (!Buffer.isBuffer(chunk) &&
|
||||
'string' !== typeof chunk &&
|
||||
chunk !== null &&
|
||||
chunk !== undefined &&
|
||||
!state.objectMode) {
|
||||
var er = new TypeError('Invalid non-string/buffer chunk');
|
||||
stream.emit('error', er);
|
||||
process.nextTick(function() {
|
||||
cb(er);
|
||||
});
|
||||
valid = false;
|
||||
}
|
||||
return valid;
|
||||
}
|
||||
|
||||
Writable.prototype.write = function(chunk, encoding, cb) {
|
||||
var state = this._writableState;
|
||||
var ret = false;
|
||||
|
||||
if (typeof encoding === 'function') {
|
||||
cb = encoding;
|
||||
encoding = null;
|
||||
}
|
||||
|
||||
if (Buffer.isBuffer(chunk))
|
||||
encoding = 'buffer';
|
||||
else if (!encoding)
|
||||
encoding = state.defaultEncoding;
|
||||
|
||||
if (typeof cb !== 'function')
|
||||
cb = function() {};
|
||||
|
||||
if (state.ended)
|
||||
writeAfterEnd(this, state, cb);
|
||||
else if (validChunk(this, state, chunk, cb))
|
||||
ret = writeOrBuffer(this, state, chunk, encoding, cb);
|
||||
|
||||
return ret;
|
||||
};
|
||||
|
||||
function decodeChunk(state, chunk, encoding) {
|
||||
if (!state.objectMode &&
|
||||
state.decodeStrings !== false &&
|
||||
typeof chunk === 'string') {
|
||||
chunk = new Buffer(chunk, encoding);
|
||||
}
|
||||
return chunk;
|
||||
}
|
||||
|
||||
// if we're already writing something, then just put this
|
||||
// in the queue, and wait our turn. Otherwise, call _write
|
||||
// If we return false, then we need a drain event, so set that flag.
|
||||
function writeOrBuffer(stream, state, chunk, encoding, cb) {
|
||||
chunk = decodeChunk(state, chunk, encoding);
|
||||
if (Buffer.isBuffer(chunk))
|
||||
encoding = 'buffer';
|
||||
var len = state.objectMode ? 1 : chunk.length;
|
||||
|
||||
state.length += len;
|
||||
|
||||
var ret = state.length < state.highWaterMark;
|
||||
// we must ensure that previous needDrain will not be reset to false.
|
||||
if (!ret)
|
||||
state.needDrain = true;
|
||||
|
||||
if (state.writing)
|
||||
state.buffer.push(new WriteReq(chunk, encoding, cb));
|
||||
else
|
||||
doWrite(stream, state, len, chunk, encoding, cb);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
function doWrite(stream, state, len, chunk, encoding, cb) {
|
||||
state.writelen = len;
|
||||
state.writecb = cb;
|
||||
state.writing = true;
|
||||
state.sync = true;
|
||||
stream._write(chunk, encoding, state.onwrite);
|
||||
state.sync = false;
|
||||
}
|
||||
|
||||
function onwriteError(stream, state, sync, er, cb) {
|
||||
if (sync)
|
||||
process.nextTick(function() {
|
||||
cb(er);
|
||||
});
|
||||
else
|
||||
cb(er);
|
||||
|
||||
stream._writableState.errorEmitted = true;
|
||||
stream.emit('error', er);
|
||||
}
|
||||
|
||||
function onwriteStateUpdate(state) {
|
||||
state.writing = false;
|
||||
state.writecb = null;
|
||||
state.length -= state.writelen;
|
||||
state.writelen = 0;
|
||||
}
|
||||
|
||||
function onwrite(stream, er) {
|
||||
var state = stream._writableState;
|
||||
var sync = state.sync;
|
||||
var cb = state.writecb;
|
||||
|
||||
onwriteStateUpdate(state);
|
||||
|
||||
if (er)
|
||||
onwriteError(stream, state, sync, er, cb);
|
||||
else {
|
||||
// Check if we're actually ready to finish, but don't emit yet
|
||||
var finished = needFinish(stream, state);
|
||||
|
||||
if (!finished && !state.bufferProcessing && state.buffer.length)
|
||||
clearBuffer(stream, state);
|
||||
|
||||
if (sync) {
|
||||
process.nextTick(function() {
|
||||
afterWrite(stream, state, finished, cb);
|
||||
});
|
||||
} else {
|
||||
afterWrite(stream, state, finished, cb);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function afterWrite(stream, state, finished, cb) {
|
||||
if (!finished)
|
||||
onwriteDrain(stream, state);
|
||||
cb();
|
||||
if (finished)
|
||||
finishMaybe(stream, state);
|
||||
}
|
||||
|
||||
// Must force callback to be called on nextTick, so that we don't
|
||||
// emit 'drain' before the write() consumer gets the 'false' return
|
||||
// value, and has a chance to attach a 'drain' listener.
|
||||
function onwriteDrain(stream, state) {
|
||||
if (state.length === 0 && state.needDrain) {
|
||||
state.needDrain = false;
|
||||
stream.emit('drain');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// if there's something in the buffer waiting, then process it
|
||||
function clearBuffer(stream, state) {
|
||||
state.bufferProcessing = true;
|
||||
|
||||
for (var c = 0; c < state.buffer.length; c++) {
|
||||
var entry = state.buffer[c];
|
||||
var chunk = entry.chunk;
|
||||
var encoding = entry.encoding;
|
||||
var cb = entry.callback;
|
||||
var len = state.objectMode ? 1 : chunk.length;
|
||||
|
||||
doWrite(stream, state, len, chunk, encoding, cb);
|
||||
|
||||
// if we didn't call the onwrite immediately, then
|
||||
// it means that we need to wait until it does.
|
||||
// also, that means that the chunk and cb are currently
|
||||
// being processed, so move the buffer counter past them.
|
||||
if (state.writing) {
|
||||
c++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
state.bufferProcessing = false;
|
||||
if (c < state.buffer.length)
|
||||
state.buffer = state.buffer.slice(c);
|
||||
else
|
||||
state.buffer.length = 0;
|
||||
}
|
||||
|
||||
Writable.prototype._write = function(chunk, encoding, cb) {
|
||||
cb(new Error('not implemented'));
|
||||
};
|
||||
|
||||
Writable.prototype.end = function(chunk, encoding, cb) {
|
||||
var state = this._writableState;
|
||||
|
||||
if (typeof chunk === 'function') {
|
||||
cb = chunk;
|
||||
chunk = null;
|
||||
encoding = null;
|
||||
} else if (typeof encoding === 'function') {
|
||||
cb = encoding;
|
||||
encoding = null;
|
||||
}
|
||||
|
||||
if (typeof chunk !== 'undefined' && chunk !== null)
|
||||
this.write(chunk, encoding);
|
||||
|
||||
// ignore unnecessary end() calls.
|
||||
if (!state.ending && !state.finished)
|
||||
endWritable(this, state, cb);
|
||||
};
|
||||
|
||||
|
||||
function needFinish(stream, state) {
|
||||
return (state.ending &&
|
||||
state.length === 0 &&
|
||||
!state.finished &&
|
||||
!state.writing);
|
||||
}
|
||||
|
||||
function finishMaybe(stream, state) {
|
||||
var need = needFinish(stream, state);
|
||||
if (need) {
|
||||
state.finished = true;
|
||||
stream.emit('finish');
|
||||
}
|
||||
return need;
|
||||
}
|
||||
|
||||
function endWritable(stream, state, cb) {
|
||||
state.ending = true;
|
||||
finishMaybe(stream, state);
|
||||
if (cb) {
|
||||
if (state.finished)
|
||||
process.nextTick(cb);
|
||||
else
|
||||
stream.once('finish', cb);
|
||||
}
|
||||
state.ended = true;
|
||||
}
|
||||
Generated
Vendored
-604
@@ -1,604 +0,0 @@
|
||||
diff --git a/lib/util.js b/lib/util.js
|
||||
index a03e874..9074e8e 100644
|
||||
--- a/lib/util.js
|
||||
+++ b/lib/util.js
|
||||
@@ -19,430 +19,6 @@
|
||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
-var formatRegExp = /%[sdj%]/g;
|
||||
-exports.format = function(f) {
|
||||
- if (!isString(f)) {
|
||||
- var objects = [];
|
||||
- for (var i = 0; i < arguments.length; i++) {
|
||||
- objects.push(inspect(arguments[i]));
|
||||
- }
|
||||
- return objects.join(' ');
|
||||
- }
|
||||
-
|
||||
- var i = 1;
|
||||
- var args = arguments;
|
||||
- var len = args.length;
|
||||
- var str = String(f).replace(formatRegExp, function(x) {
|
||||
- if (x === '%%') return '%';
|
||||
- if (i >= len) return x;
|
||||
- switch (x) {
|
||||
- case '%s': return String(args[i++]);
|
||||
- case '%d': return Number(args[i++]);
|
||||
- case '%j':
|
||||
- try {
|
||||
- return JSON.stringify(args[i++]);
|
||||
- } catch (_) {
|
||||
- return '[Circular]';
|
||||
- }
|
||||
- default:
|
||||
- return x;
|
||||
- }
|
||||
- });
|
||||
- for (var x = args[i]; i < len; x = args[++i]) {
|
||||
- if (isNull(x) || !isObject(x)) {
|
||||
- str += ' ' + x;
|
||||
- } else {
|
||||
- str += ' ' + inspect(x);
|
||||
- }
|
||||
- }
|
||||
- return str;
|
||||
-};
|
||||
-
|
||||
-
|
||||
-// Mark that a method should not be used.
|
||||
-// Returns a modified function which warns once by default.
|
||||
-// If --no-deprecation is set, then it is a no-op.
|
||||
-exports.deprecate = function(fn, msg) {
|
||||
- // Allow for deprecating things in the process of starting up.
|
||||
- if (isUndefined(global.process)) {
|
||||
- return function() {
|
||||
- return exports.deprecate(fn, msg).apply(this, arguments);
|
||||
- };
|
||||
- }
|
||||
-
|
||||
- if (process.noDeprecation === true) {
|
||||
- return fn;
|
||||
- }
|
||||
-
|
||||
- var warned = false;
|
||||
- function deprecated() {
|
||||
- if (!warned) {
|
||||
- if (process.throwDeprecation) {
|
||||
- throw new Error(msg);
|
||||
- } else if (process.traceDeprecation) {
|
||||
- console.trace(msg);
|
||||
- } else {
|
||||
- console.error(msg);
|
||||
- }
|
||||
- warned = true;
|
||||
- }
|
||||
- return fn.apply(this, arguments);
|
||||
- }
|
||||
-
|
||||
- return deprecated;
|
||||
-};
|
||||
-
|
||||
-
|
||||
-var debugs = {};
|
||||
-var debugEnviron;
|
||||
-exports.debuglog = function(set) {
|
||||
- if (isUndefined(debugEnviron))
|
||||
- debugEnviron = process.env.NODE_DEBUG || '';
|
||||
- set = set.toUpperCase();
|
||||
- if (!debugs[set]) {
|
||||
- if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
|
||||
- var pid = process.pid;
|
||||
- debugs[set] = function() {
|
||||
- var msg = exports.format.apply(exports, arguments);
|
||||
- console.error('%s %d: %s', set, pid, msg);
|
||||
- };
|
||||
- } else {
|
||||
- debugs[set] = function() {};
|
||||
- }
|
||||
- }
|
||||
- return debugs[set];
|
||||
-};
|
||||
-
|
||||
-
|
||||
-/**
|
||||
- * Echos the value of a value. Trys to print the value out
|
||||
- * in the best way possible given the different types.
|
||||
- *
|
||||
- * @param {Object} obj The object to print out.
|
||||
- * @param {Object} opts Optional options object that alters the output.
|
||||
- */
|
||||
-/* legacy: obj, showHidden, depth, colors*/
|
||||
-function inspect(obj, opts) {
|
||||
- // default options
|
||||
- var ctx = {
|
||||
- seen: [],
|
||||
- stylize: stylizeNoColor
|
||||
- };
|
||||
- // legacy...
|
||||
- if (arguments.length >= 3) ctx.depth = arguments[2];
|
||||
- if (arguments.length >= 4) ctx.colors = arguments[3];
|
||||
- if (isBoolean(opts)) {
|
||||
- // legacy...
|
||||
- ctx.showHidden = opts;
|
||||
- } else if (opts) {
|
||||
- // got an "options" object
|
||||
- exports._extend(ctx, opts);
|
||||
- }
|
||||
- // set default options
|
||||
- if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
|
||||
- if (isUndefined(ctx.depth)) ctx.depth = 2;
|
||||
- if (isUndefined(ctx.colors)) ctx.colors = false;
|
||||
- if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
|
||||
- if (ctx.colors) ctx.stylize = stylizeWithColor;
|
||||
- return formatValue(ctx, obj, ctx.depth);
|
||||
-}
|
||||
-exports.inspect = inspect;
|
||||
-
|
||||
-
|
||||
-// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
|
||||
-inspect.colors = {
|
||||
- 'bold' : [1, 22],
|
||||
- 'italic' : [3, 23],
|
||||
- 'underline' : [4, 24],
|
||||
- 'inverse' : [7, 27],
|
||||
- 'white' : [37, 39],
|
||||
- 'grey' : [90, 39],
|
||||
- 'black' : [30, 39],
|
||||
- 'blue' : [34, 39],
|
||||
- 'cyan' : [36, 39],
|
||||
- 'green' : [32, 39],
|
||||
- 'magenta' : [35, 39],
|
||||
- 'red' : [31, 39],
|
||||
- 'yellow' : [33, 39]
|
||||
-};
|
||||
-
|
||||
-// Don't use 'blue' not visible on cmd.exe
|
||||
-inspect.styles = {
|
||||
- 'special': 'cyan',
|
||||
- 'number': 'yellow',
|
||||
- 'boolean': 'yellow',
|
||||
- 'undefined': 'grey',
|
||||
- 'null': 'bold',
|
||||
- 'string': 'green',
|
||||
- 'date': 'magenta',
|
||||
- // "name": intentionally not styling
|
||||
- 'regexp': 'red'
|
||||
-};
|
||||
-
|
||||
-
|
||||
-function stylizeWithColor(str, styleType) {
|
||||
- var style = inspect.styles[styleType];
|
||||
-
|
||||
- if (style) {
|
||||
- return '\u001b[' + inspect.colors[style][0] + 'm' + str +
|
||||
- '\u001b[' + inspect.colors[style][1] + 'm';
|
||||
- } else {
|
||||
- return str;
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-
|
||||
-function stylizeNoColor(str, styleType) {
|
||||
- return str;
|
||||
-}
|
||||
-
|
||||
-
|
||||
-function arrayToHash(array) {
|
||||
- var hash = {};
|
||||
-
|
||||
- array.forEach(function(val, idx) {
|
||||
- hash[val] = true;
|
||||
- });
|
||||
-
|
||||
- return hash;
|
||||
-}
|
||||
-
|
||||
-
|
||||
-function formatValue(ctx, value, recurseTimes) {
|
||||
- // Provide a hook for user-specified inspect functions.
|
||||
- // Check that value is an object with an inspect function on it
|
||||
- if (ctx.customInspect &&
|
||||
- value &&
|
||||
- isFunction(value.inspect) &&
|
||||
- // Filter out the util module, it's inspect function is special
|
||||
- value.inspect !== exports.inspect &&
|
||||
- // Also filter out any prototype objects using the circular check.
|
||||
- !(value.constructor && value.constructor.prototype === value)) {
|
||||
- var ret = value.inspect(recurseTimes, ctx);
|
||||
- if (!isString(ret)) {
|
||||
- ret = formatValue(ctx, ret, recurseTimes);
|
||||
- }
|
||||
- return ret;
|
||||
- }
|
||||
-
|
||||
- // Primitive types cannot have properties
|
||||
- var primitive = formatPrimitive(ctx, value);
|
||||
- if (primitive) {
|
||||
- return primitive;
|
||||
- }
|
||||
-
|
||||
- // Look up the keys of the object.
|
||||
- var keys = Object.keys(value);
|
||||
- var visibleKeys = arrayToHash(keys);
|
||||
-
|
||||
- if (ctx.showHidden) {
|
||||
- keys = Object.getOwnPropertyNames(value);
|
||||
- }
|
||||
-
|
||||
- // Some type of object without properties can be shortcutted.
|
||||
- if (keys.length === 0) {
|
||||
- if (isFunction(value)) {
|
||||
- var name = value.name ? ': ' + value.name : '';
|
||||
- return ctx.stylize('[Function' + name + ']', 'special');
|
||||
- }
|
||||
- if (isRegExp(value)) {
|
||||
- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
|
||||
- }
|
||||
- if (isDate(value)) {
|
||||
- return ctx.stylize(Date.prototype.toString.call(value), 'date');
|
||||
- }
|
||||
- if (isError(value)) {
|
||||
- return formatError(value);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- var base = '', array = false, braces = ['{', '}'];
|
||||
-
|
||||
- // Make Array say that they are Array
|
||||
- if (isArray(value)) {
|
||||
- array = true;
|
||||
- braces = ['[', ']'];
|
||||
- }
|
||||
-
|
||||
- // Make functions say that they are functions
|
||||
- if (isFunction(value)) {
|
||||
- var n = value.name ? ': ' + value.name : '';
|
||||
- base = ' [Function' + n + ']';
|
||||
- }
|
||||
-
|
||||
- // Make RegExps say that they are RegExps
|
||||
- if (isRegExp(value)) {
|
||||
- base = ' ' + RegExp.prototype.toString.call(value);
|
||||
- }
|
||||
-
|
||||
- // Make dates with properties first say the date
|
||||
- if (isDate(value)) {
|
||||
- base = ' ' + Date.prototype.toUTCString.call(value);
|
||||
- }
|
||||
-
|
||||
- // Make error with message first say the error
|
||||
- if (isError(value)) {
|
||||
- base = ' ' + formatError(value);
|
||||
- }
|
||||
-
|
||||
- if (keys.length === 0 && (!array || value.length == 0)) {
|
||||
- return braces[0] + base + braces[1];
|
||||
- }
|
||||
-
|
||||
- if (recurseTimes < 0) {
|
||||
- if (isRegExp(value)) {
|
||||
- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
|
||||
- } else {
|
||||
- return ctx.stylize('[Object]', 'special');
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- ctx.seen.push(value);
|
||||
-
|
||||
- var output;
|
||||
- if (array) {
|
||||
- output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
|
||||
- } else {
|
||||
- output = keys.map(function(key) {
|
||||
- return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
|
||||
- });
|
||||
- }
|
||||
-
|
||||
- ctx.seen.pop();
|
||||
-
|
||||
- return reduceToSingleString(output, base, braces);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-function formatPrimitive(ctx, value) {
|
||||
- if (isUndefined(value))
|
||||
- return ctx.stylize('undefined', 'undefined');
|
||||
- if (isString(value)) {
|
||||
- var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
|
||||
- .replace(/'/g, "\\'")
|
||||
- .replace(/\\"/g, '"') + '\'';
|
||||
- return ctx.stylize(simple, 'string');
|
||||
- }
|
||||
- if (isNumber(value)) {
|
||||
- // Format -0 as '-0'. Strict equality won't distinguish 0 from -0,
|
||||
- // so instead we use the fact that 1 / -0 < 0 whereas 1 / 0 > 0 .
|
||||
- if (value === 0 && 1 / value < 0)
|
||||
- return ctx.stylize('-0', 'number');
|
||||
- return ctx.stylize('' + value, 'number');
|
||||
- }
|
||||
- if (isBoolean(value))
|
||||
- return ctx.stylize('' + value, 'boolean');
|
||||
- // For some reason typeof null is "object", so special case here.
|
||||
- if (isNull(value))
|
||||
- return ctx.stylize('null', 'null');
|
||||
-}
|
||||
-
|
||||
-
|
||||
-function formatError(value) {
|
||||
- return '[' + Error.prototype.toString.call(value) + ']';
|
||||
-}
|
||||
-
|
||||
-
|
||||
-function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
|
||||
- var output = [];
|
||||
- for (var i = 0, l = value.length; i < l; ++i) {
|
||||
- if (hasOwnProperty(value, String(i))) {
|
||||
- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
|
||||
- String(i), true));
|
||||
- } else {
|
||||
- output.push('');
|
||||
- }
|
||||
- }
|
||||
- keys.forEach(function(key) {
|
||||
- if (!key.match(/^\d+$/)) {
|
||||
- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
|
||||
- key, true));
|
||||
- }
|
||||
- });
|
||||
- return output;
|
||||
-}
|
||||
-
|
||||
-
|
||||
-function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
|
||||
- var name, str, desc;
|
||||
- desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
|
||||
- if (desc.get) {
|
||||
- if (desc.set) {
|
||||
- str = ctx.stylize('[Getter/Setter]', 'special');
|
||||
- } else {
|
||||
- str = ctx.stylize('[Getter]', 'special');
|
||||
- }
|
||||
- } else {
|
||||
- if (desc.set) {
|
||||
- str = ctx.stylize('[Setter]', 'special');
|
||||
- }
|
||||
- }
|
||||
- if (!hasOwnProperty(visibleKeys, key)) {
|
||||
- name = '[' + key + ']';
|
||||
- }
|
||||
- if (!str) {
|
||||
- if (ctx.seen.indexOf(desc.value) < 0) {
|
||||
- if (isNull(recurseTimes)) {
|
||||
- str = formatValue(ctx, desc.value, null);
|
||||
- } else {
|
||||
- str = formatValue(ctx, desc.value, recurseTimes - 1);
|
||||
- }
|
||||
- if (str.indexOf('\n') > -1) {
|
||||
- if (array) {
|
||||
- str = str.split('\n').map(function(line) {
|
||||
- return ' ' + line;
|
||||
- }).join('\n').substr(2);
|
||||
- } else {
|
||||
- str = '\n' + str.split('\n').map(function(line) {
|
||||
- return ' ' + line;
|
||||
- }).join('\n');
|
||||
- }
|
||||
- }
|
||||
- } else {
|
||||
- str = ctx.stylize('[Circular]', 'special');
|
||||
- }
|
||||
- }
|
||||
- if (isUndefined(name)) {
|
||||
- if (array && key.match(/^\d+$/)) {
|
||||
- return str;
|
||||
- }
|
||||
- name = JSON.stringify('' + key);
|
||||
- if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
|
||||
- name = name.substr(1, name.length - 2);
|
||||
- name = ctx.stylize(name, 'name');
|
||||
- } else {
|
||||
- name = name.replace(/'/g, "\\'")
|
||||
- .replace(/\\"/g, '"')
|
||||
- .replace(/(^"|"$)/g, "'");
|
||||
- name = ctx.stylize(name, 'string');
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- return name + ': ' + str;
|
||||
-}
|
||||
-
|
||||
-
|
||||
-function reduceToSingleString(output, base, braces) {
|
||||
- var numLinesEst = 0;
|
||||
- var length = output.reduce(function(prev, cur) {
|
||||
- numLinesEst++;
|
||||
- if (cur.indexOf('\n') >= 0) numLinesEst++;
|
||||
- return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
|
||||
- }, 0);
|
||||
-
|
||||
- if (length > 60) {
|
||||
- return braces[0] +
|
||||
- (base === '' ? '' : base + '\n ') +
|
||||
- ' ' +
|
||||
- output.join(',\n ') +
|
||||
- ' ' +
|
||||
- braces[1];
|
||||
- }
|
||||
-
|
||||
- return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
|
||||
-}
|
||||
-
|
||||
-
|
||||
// NOTE: These type checking functions intentionally don't use `instanceof`
|
||||
// because it is fragile and can be easily faked with `Object.create()`.
|
||||
function isArray(ar) {
|
||||
@@ -522,166 +98,10 @@ function isPrimitive(arg) {
|
||||
exports.isPrimitive = isPrimitive;
|
||||
|
||||
function isBuffer(arg) {
|
||||
- return arg instanceof Buffer;
|
||||
+ return Buffer.isBuffer(arg);
|
||||
}
|
||||
exports.isBuffer = isBuffer;
|
||||
|
||||
function objectToString(o) {
|
||||
return Object.prototype.toString.call(o);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-function pad(n) {
|
||||
- return n < 10 ? '0' + n.toString(10) : n.toString(10);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
|
||||
- 'Oct', 'Nov', 'Dec'];
|
||||
-
|
||||
-// 26 Feb 16:19:34
|
||||
-function timestamp() {
|
||||
- var d = new Date();
|
||||
- var time = [pad(d.getHours()),
|
||||
- pad(d.getMinutes()),
|
||||
- pad(d.getSeconds())].join(':');
|
||||
- return [d.getDate(), months[d.getMonth()], time].join(' ');
|
||||
-}
|
||||
-
|
||||
-
|
||||
-// log is just a thin wrapper to console.log that prepends a timestamp
|
||||
-exports.log = function() {
|
||||
- console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
|
||||
-};
|
||||
-
|
||||
-
|
||||
-/**
|
||||
- * Inherit the prototype methods from one constructor into another.
|
||||
- *
|
||||
- * The Function.prototype.inherits from lang.js rewritten as a standalone
|
||||
- * function (not on Function.prototype). NOTE: If this file is to be loaded
|
||||
- * during bootstrapping this function needs to be rewritten using some native
|
||||
- * functions as prototype setup using normal JavaScript does not work as
|
||||
- * expected during bootstrapping (see mirror.js in r114903).
|
||||
- *
|
||||
- * @param {function} ctor Constructor function which needs to inherit the
|
||||
- * prototype.
|
||||
- * @param {function} superCtor Constructor function to inherit prototype from.
|
||||
- */
|
||||
-exports.inherits = function(ctor, superCtor) {
|
||||
- ctor.super_ = superCtor;
|
||||
- ctor.prototype = Object.create(superCtor.prototype, {
|
||||
- constructor: {
|
||||
- value: ctor,
|
||||
- enumerable: false,
|
||||
- writable: true,
|
||||
- configurable: true
|
||||
- }
|
||||
- });
|
||||
-};
|
||||
-
|
||||
-exports._extend = function(origin, add) {
|
||||
- // Don't do anything if add isn't an object
|
||||
- if (!add || !isObject(add)) return origin;
|
||||
-
|
||||
- var keys = Object.keys(add);
|
||||
- var i = keys.length;
|
||||
- while (i--) {
|
||||
- origin[keys[i]] = add[keys[i]];
|
||||
- }
|
||||
- return origin;
|
||||
-};
|
||||
-
|
||||
-function hasOwnProperty(obj, prop) {
|
||||
- return Object.prototype.hasOwnProperty.call(obj, prop);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-// Deprecated old stuff.
|
||||
-
|
||||
-exports.p = exports.deprecate(function() {
|
||||
- for (var i = 0, len = arguments.length; i < len; ++i) {
|
||||
- console.error(exports.inspect(arguments[i]));
|
||||
- }
|
||||
-}, 'util.p: Use console.error() instead');
|
||||
-
|
||||
-
|
||||
-exports.exec = exports.deprecate(function() {
|
||||
- return require('child_process').exec.apply(this, arguments);
|
||||
-}, 'util.exec is now called `child_process.exec`.');
|
||||
-
|
||||
-
|
||||
-exports.print = exports.deprecate(function() {
|
||||
- for (var i = 0, len = arguments.length; i < len; ++i) {
|
||||
- process.stdout.write(String(arguments[i]));
|
||||
- }
|
||||
-}, 'util.print: Use console.log instead');
|
||||
-
|
||||
-
|
||||
-exports.puts = exports.deprecate(function() {
|
||||
- for (var i = 0, len = arguments.length; i < len; ++i) {
|
||||
- process.stdout.write(arguments[i] + '\n');
|
||||
- }
|
||||
-}, 'util.puts: Use console.log instead');
|
||||
-
|
||||
-
|
||||
-exports.debug = exports.deprecate(function(x) {
|
||||
- process.stderr.write('DEBUG: ' + x + '\n');
|
||||
-}, 'util.debug: Use console.error instead');
|
||||
-
|
||||
-
|
||||
-exports.error = exports.deprecate(function(x) {
|
||||
- for (var i = 0, len = arguments.length; i < len; ++i) {
|
||||
- process.stderr.write(arguments[i] + '\n');
|
||||
- }
|
||||
-}, 'util.error: Use console.error instead');
|
||||
-
|
||||
-
|
||||
-exports.pump = exports.deprecate(function(readStream, writeStream, callback) {
|
||||
- var callbackCalled = false;
|
||||
-
|
||||
- function call(a, b, c) {
|
||||
- if (callback && !callbackCalled) {
|
||||
- callback(a, b, c);
|
||||
- callbackCalled = true;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- readStream.addListener('data', function(chunk) {
|
||||
- if (writeStream.write(chunk) === false) readStream.pause();
|
||||
- });
|
||||
-
|
||||
- writeStream.addListener('drain', function() {
|
||||
- readStream.resume();
|
||||
- });
|
||||
-
|
||||
- readStream.addListener('end', function() {
|
||||
- writeStream.end();
|
||||
- });
|
||||
-
|
||||
- readStream.addListener('close', function() {
|
||||
- call();
|
||||
- });
|
||||
-
|
||||
- readStream.addListener('error', function(err) {
|
||||
- writeStream.end();
|
||||
- call(err);
|
||||
- });
|
||||
-
|
||||
- writeStream.addListener('error', function(err) {
|
||||
- readStream.destroy();
|
||||
- call(err);
|
||||
- });
|
||||
-}, 'util.pump(): Use readableStream.pipe() instead');
|
||||
-
|
||||
-
|
||||
-var uv;
|
||||
-exports._errnoException = function(err, syscall) {
|
||||
- if (isUndefined(uv)) uv = process.binding('uv');
|
||||
- var errname = uv.errname(err);
|
||||
- var e = new Error(syscall + ' ' + errname);
|
||||
- e.code = errname;
|
||||
- e.errno = errname;
|
||||
- e.syscall = syscall;
|
||||
- return e;
|
||||
-};
|
||||
+}
|
||||
Generated
Vendored
-107
@@ -1,107 +0,0 @@
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
// copy of this software and associated documentation files (the
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||
// persons to whom the Software is furnished to do so, subject to the
|
||||
// following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included
|
||||
// in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// NOTE: These type checking functions intentionally don't use `instanceof`
|
||||
// because it is fragile and can be easily faked with `Object.create()`.
|
||||
function isArray(ar) {
|
||||
return Array.isArray(ar);
|
||||
}
|
||||
exports.isArray = isArray;
|
||||
|
||||
function isBoolean(arg) {
|
||||
return typeof arg === 'boolean';
|
||||
}
|
||||
exports.isBoolean = isBoolean;
|
||||
|
||||
function isNull(arg) {
|
||||
return arg === null;
|
||||
}
|
||||
exports.isNull = isNull;
|
||||
|
||||
function isNullOrUndefined(arg) {
|
||||
return arg == null;
|
||||
}
|
||||
exports.isNullOrUndefined = isNullOrUndefined;
|
||||
|
||||
function isNumber(arg) {
|
||||
return typeof arg === 'number';
|
||||
}
|
||||
exports.isNumber = isNumber;
|
||||
|
||||
function isString(arg) {
|
||||
return typeof arg === 'string';
|
||||
}
|
||||
exports.isString = isString;
|
||||
|
||||
function isSymbol(arg) {
|
||||
return typeof arg === 'symbol';
|
||||
}
|
||||
exports.isSymbol = isSymbol;
|
||||
|
||||
function isUndefined(arg) {
|
||||
return arg === void 0;
|
||||
}
|
||||
exports.isUndefined = isUndefined;
|
||||
|
||||
function isRegExp(re) {
|
||||
return isObject(re) && objectToString(re) === '[object RegExp]';
|
||||
}
|
||||
exports.isRegExp = isRegExp;
|
||||
|
||||
function isObject(arg) {
|
||||
return typeof arg === 'object' && arg !== null;
|
||||
}
|
||||
exports.isObject = isObject;
|
||||
|
||||
function isDate(d) {
|
||||
return isObject(d) && objectToString(d) === '[object Date]';
|
||||
}
|
||||
exports.isDate = isDate;
|
||||
|
||||
function isError(e) {
|
||||
return isObject(e) &&
|
||||
(objectToString(e) === '[object Error]' || e instanceof Error);
|
||||
}
|
||||
exports.isError = isError;
|
||||
|
||||
function isFunction(arg) {
|
||||
return typeof arg === 'function';
|
||||
}
|
||||
exports.isFunction = isFunction;
|
||||
|
||||
function isPrimitive(arg) {
|
||||
return arg === null ||
|
||||
typeof arg === 'boolean' ||
|
||||
typeof arg === 'number' ||
|
||||
typeof arg === 'string' ||
|
||||
typeof arg === 'symbol' || // ES6 symbol
|
||||
typeof arg === 'undefined';
|
||||
}
|
||||
exports.isPrimitive = isPrimitive;
|
||||
|
||||
function isBuffer(arg) {
|
||||
return Buffer.isBuffer(arg);
|
||||
}
|
||||
exports.isBuffer = isBuffer;
|
||||
|
||||
function objectToString(o) {
|
||||
return Object.prototype.toString.call(o);
|
||||
}
|
||||
Generated
Vendored
-53
@@ -1,53 +0,0 @@
|
||||
{
|
||||
"name": "core-util-is",
|
||||
"version": "1.0.1",
|
||||
"description": "The `util.is*` functions introduced in Node v0.12.",
|
||||
"main": "lib/util.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/isaacs/core-util-is"
|
||||
},
|
||||
"keywords": [
|
||||
"util",
|
||||
"isBuffer",
|
||||
"isArray",
|
||||
"isNumber",
|
||||
"isString",
|
||||
"isRegExp",
|
||||
"isThis",
|
||||
"isThat",
|
||||
"polyfill"
|
||||
],
|
||||
"author": {
|
||||
"name": "Isaac Z. Schlueter",
|
||||
"email": "i@izs.me",
|
||||
"url": "http://blog.izs.me/"
|
||||
},
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/isaacs/core-util-is/issues"
|
||||
},
|
||||
"readme": "# core-util-is\n\nThe `util.is*` functions introduced in Node v0.12.\n",
|
||||
"readmeFilename": "README.md",
|
||||
"homepage": "https://github.com/isaacs/core-util-is",
|
||||
"_id": "core-util-is@1.0.1",
|
||||
"dist": {
|
||||
"shasum": "6b07085aef9a3ccac6ee53bf9d3df0c1521a5538",
|
||||
"tarball": "http://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
|
||||
},
|
||||
"_from": "core-util-is@~1.0.0",
|
||||
"_npmVersion": "1.3.23",
|
||||
"_npmUser": {
|
||||
"name": "isaacs",
|
||||
"email": "i@izs.me"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "isaacs",
|
||||
"email": "i@izs.me"
|
||||
}
|
||||
],
|
||||
"directories": {},
|
||||
"_shasum": "6b07085aef9a3ccac6ee53bf9d3df0c1521a5538",
|
||||
"_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
|
||||
}
|
||||
Generated
Vendored
-106
@@ -1,106 +0,0 @@
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
// copy of this software and associated documentation files (the
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||
// persons to whom the Software is furnished to do so, subject to the
|
||||
// following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included
|
||||
// in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// NOTE: These type checking functions intentionally don't use `instanceof`
|
||||
// because it is fragile and can be easily faked with `Object.create()`.
|
||||
function isArray(ar) {
|
||||
return Array.isArray(ar);
|
||||
}
|
||||
exports.isArray = isArray;
|
||||
|
||||
function isBoolean(arg) {
|
||||
return typeof arg === 'boolean';
|
||||
}
|
||||
exports.isBoolean = isBoolean;
|
||||
|
||||
function isNull(arg) {
|
||||
return arg === null;
|
||||
}
|
||||
exports.isNull = isNull;
|
||||
|
||||
function isNullOrUndefined(arg) {
|
||||
return arg == null;
|
||||
}
|
||||
exports.isNullOrUndefined = isNullOrUndefined;
|
||||
|
||||
function isNumber(arg) {
|
||||
return typeof arg === 'number';
|
||||
}
|
||||
exports.isNumber = isNumber;
|
||||
|
||||
function isString(arg) {
|
||||
return typeof arg === 'string';
|
||||
}
|
||||
exports.isString = isString;
|
||||
|
||||
function isSymbol(arg) {
|
||||
return typeof arg === 'symbol';
|
||||
}
|
||||
exports.isSymbol = isSymbol;
|
||||
|
||||
function isUndefined(arg) {
|
||||
return arg === void 0;
|
||||
}
|
||||
exports.isUndefined = isUndefined;
|
||||
|
||||
function isRegExp(re) {
|
||||
return isObject(re) && objectToString(re) === '[object RegExp]';
|
||||
}
|
||||
exports.isRegExp = isRegExp;
|
||||
|
||||
function isObject(arg) {
|
||||
return typeof arg === 'object' && arg !== null;
|
||||
}
|
||||
exports.isObject = isObject;
|
||||
|
||||
function isDate(d) {
|
||||
return isObject(d) && objectToString(d) === '[object Date]';
|
||||
}
|
||||
exports.isDate = isDate;
|
||||
|
||||
function isError(e) {
|
||||
return isObject(e) && objectToString(e) === '[object Error]';
|
||||
}
|
||||
exports.isError = isError;
|
||||
|
||||
function isFunction(arg) {
|
||||
return typeof arg === 'function';
|
||||
}
|
||||
exports.isFunction = isFunction;
|
||||
|
||||
function isPrimitive(arg) {
|
||||
return arg === null ||
|
||||
typeof arg === 'boolean' ||
|
||||
typeof arg === 'number' ||
|
||||
typeof arg === 'string' ||
|
||||
typeof arg === 'symbol' || // ES6 symbol
|
||||
typeof arg === 'undefined';
|
||||
}
|
||||
exports.isPrimitive = isPrimitive;
|
||||
|
||||
function isBuffer(arg) {
|
||||
return arg instanceof Buffer;
|
||||
}
|
||||
exports.isBuffer = isBuffer;
|
||||
|
||||
function objectToString(o) {
|
||||
return Object.prototype.toString.call(o);
|
||||
}
|
||||
Generated
Vendored
-209
@@ -1,209 +0,0 @@
|
||||
|
||||
/**
|
||||
* Require the given path.
|
||||
*
|
||||
* @param {String} path
|
||||
* @return {Object} exports
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function require(path, parent, orig) {
|
||||
var resolved = require.resolve(path);
|
||||
|
||||
// lookup failed
|
||||
if (null == resolved) {
|
||||
orig = orig || path;
|
||||
parent = parent || 'root';
|
||||
var err = new Error('Failed to require "' + orig + '" from "' + parent + '"');
|
||||
err.path = orig;
|
||||
err.parent = parent;
|
||||
err.require = true;
|
||||
throw err;
|
||||
}
|
||||
|
||||
var module = require.modules[resolved];
|
||||
|
||||
// perform real require()
|
||||
// by invoking the module's
|
||||
// registered function
|
||||
if (!module.exports) {
|
||||
module.exports = {};
|
||||
module.client = module.component = true;
|
||||
module.call(this, module.exports, require.relative(resolved), module);
|
||||
}
|
||||
|
||||
return module.exports;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registered modules.
|
||||
*/
|
||||
|
||||
require.modules = {};
|
||||
|
||||
/**
|
||||
* Registered aliases.
|
||||
*/
|
||||
|
||||
require.aliases = {};
|
||||
|
||||
/**
|
||||
* Resolve `path`.
|
||||
*
|
||||
* Lookup:
|
||||
*
|
||||
* - PATH/index.js
|
||||
* - PATH.js
|
||||
* - PATH
|
||||
*
|
||||
* @param {String} path
|
||||
* @return {String} path or null
|
||||
* @api private
|
||||
*/
|
||||
|
||||
require.resolve = function(path) {
|
||||
if (path.charAt(0) === '/') path = path.slice(1);
|
||||
var index = path + '/index.js';
|
||||
|
||||
var paths = [
|
||||
path,
|
||||
path + '.js',
|
||||
path + '.json',
|
||||
path + '/index.js',
|
||||
path + '/index.json'
|
||||
];
|
||||
|
||||
for (var i = 0; i < paths.length; i++) {
|
||||
var path = paths[i];
|
||||
if (require.modules.hasOwnProperty(path)) return path;
|
||||
}
|
||||
|
||||
if (require.aliases.hasOwnProperty(index)) {
|
||||
return require.aliases[index];
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Normalize `path` relative to the current path.
|
||||
*
|
||||
* @param {String} curr
|
||||
* @param {String} path
|
||||
* @return {String}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
require.normalize = function(curr, path) {
|
||||
var segs = [];
|
||||
|
||||
if ('.' != path.charAt(0)) return path;
|
||||
|
||||
curr = curr.split('/');
|
||||
path = path.split('/');
|
||||
|
||||
for (var i = 0; i < path.length; ++i) {
|
||||
if ('..' == path[i]) {
|
||||
curr.pop();
|
||||
} else if ('.' != path[i] && '' != path[i]) {
|
||||
segs.push(path[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return curr.concat(segs).join('/');
|
||||
};
|
||||
|
||||
/**
|
||||
* Register module at `path` with callback `definition`.
|
||||
*
|
||||
* @param {String} path
|
||||
* @param {Function} definition
|
||||
* @api private
|
||||
*/
|
||||
|
||||
require.register = function(path, definition) {
|
||||
require.modules[path] = definition;
|
||||
};
|
||||
|
||||
/**
|
||||
* Alias a module definition.
|
||||
*
|
||||
* @param {String} from
|
||||
* @param {String} to
|
||||
* @api private
|
||||
*/
|
||||
|
||||
require.alias = function(from, to) {
|
||||
if (!require.modules.hasOwnProperty(from)) {
|
||||
throw new Error('Failed to alias "' + from + '", it does not exist');
|
||||
}
|
||||
require.aliases[to] = from;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return a require function relative to the `parent` path.
|
||||
*
|
||||
* @param {String} parent
|
||||
* @return {Function}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
require.relative = function(parent) {
|
||||
var p = require.normalize(parent, '..');
|
||||
|
||||
/**
|
||||
* lastIndexOf helper.
|
||||
*/
|
||||
|
||||
function lastIndexOf(arr, obj) {
|
||||
var i = arr.length;
|
||||
while (i--) {
|
||||
if (arr[i] === obj) return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* The relative require() itself.
|
||||
*/
|
||||
|
||||
function localRequire(path) {
|
||||
var resolved = localRequire.resolve(path);
|
||||
return require(resolved, parent, path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve relative to the parent.
|
||||
*/
|
||||
|
||||
localRequire.resolve = function(path) {
|
||||
var c = path.charAt(0);
|
||||
if ('/' == c) return path.slice(1);
|
||||
if ('.' == c) return require.normalize(p, path);
|
||||
|
||||
// resolve deps by returning
|
||||
// the dep in the nearest "deps"
|
||||
// directory
|
||||
var segs = parent.split('/');
|
||||
var i = lastIndexOf(segs, 'deps') + 1;
|
||||
if (!i) i = 0;
|
||||
path = segs.slice(0, i + 1).join('/') + '/deps/' + path;
|
||||
return path;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if module is defined at `path`.
|
||||
*/
|
||||
|
||||
localRequire.exists = function(path) {
|
||||
return require.modules.hasOwnProperty(localRequire.resolve(path));
|
||||
};
|
||||
|
||||
return localRequire;
|
||||
};
|
||||
require.register("isarray/index.js", function(exports, require, module){
|
||||
module.exports = Array.isArray || function (arr) {
|
||||
return Object.prototype.toString.call(arr) == '[object Array]';
|
||||
};
|
||||
|
||||
});
|
||||
require.alias("isarray/index.js", "isarray/index.js");
|
||||
|
||||
Generated
Vendored
-19
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"name" : "isarray",
|
||||
"description" : "Array#isArray for older browsers",
|
||||
"version" : "0.0.1",
|
||||
"repository" : "juliangruber/isarray",
|
||||
"homepage": "https://github.com/juliangruber/isarray",
|
||||
"main" : "index.js",
|
||||
"scripts" : [
|
||||
"index.js"
|
||||
],
|
||||
"dependencies" : {},
|
||||
"keywords": ["browser","isarray","array"],
|
||||
"author": {
|
||||
"name": "Julian Gruber",
|
||||
"email": "mail@juliangruber.com",
|
||||
"url": "http://juliangruber.com"
|
||||
},
|
||||
"license": "MIT"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user