tools: update to ESLint 4.1.0

Update ESLint to 4.1.0. This fixes a bug that previously prevented us
from using the new and stricter indentation checking.

Refs: https://github.com/eslint/eslint/issues/8721
PR-URL: https://github.com/nodejs/node/pull/13895
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Roman Reiss <me@silverwind.io>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
This commit is contained in:
Rich Trott committed 2017-06-27 06:16:51 -07:00
1 parent fda25665be
commit aaee43473b
242 files changed
+10317 -10809

No files matched your search

+4
View File
@@ -137,6 +137,10 @@ These folks keep the project moving and are resources for help.
We have scheduled releases every two weeks on Friday or Saturday.
## Code of Conduct
ESLint adheres to the [JS Foundation Code of Conduct](https://js.foundation/community/code-of-conduct).
## Filing Issues
Before filing an issue, please be sure to read the guidelines for what you're reporting:
+68
View File
@@ -0,0 +1,68 @@
/**
* @fileoverview Defines a schema for configs.
* @author Sylvan Mably
*/
"use strict";
const baseConfigProperties = {
env: { type: "object" },
globals: { type: "object" },
parser: { type: ["string", "null"] },
parserOptions: { type: "object" },
plugins: { type: "array" },
rules: { type: "object" },
settings: { type: "object" }
};
const overrideProperties = Object.assign(
{},
baseConfigProperties,
{
files: {
oneOf: [
{ type: "string" },
{
type: "array",
items: { type: "string" },
minItems: 1
}
]
},
excludedFiles: {
oneOf: [
{ type: "string" },
{
type: "array",
items: { type: "string" }
}
]
}
}
);
const topLevelConfigProperties = Object.assign(
{},
baseConfigProperties,
{
extends: { type: ["string", "array"] },
root: { type: "boolean" },
overrides: {
type: "array",
items: {
type: "object",
properties: overrideProperties,
required: ["files"],
additionalProperties: false
}
}
}
);
const configSchema = {
type: "object",
properties: topLevelConfigProperties,
additionalProperties: false
};
module.exports = configSchema;
-15
View File
@@ -1,15 +0,0 @@
{
"type": "object",
"properties": {
"root": { "type": "boolean" },
"globals": { "type": ["object"] },
"parser": { "type": ["string", "null"] },
"env": { "type": "object" },
"plugins": { "type": ["array"] },
"settings": { "type": "object" },
"extends": { "type": ["string", "array"] },
"rules": { "type": "object" },
"parserOptions": { "type": "object" }
},
"additionalProperties": false
}
+1 -5
View File
@@ -25,9 +25,5 @@ module.exports = deepFreeze({
rules: {},
settings: {},
parser: "espree",
parserOptions: {
ecmaVersion: 5,
sourceType: "script",
ecmaFeatures: {}
}
parserOptions: {}
});
+18 -89
View File
@@ -23,11 +23,9 @@ const fs = require("fs"),
Config = require("./config"),
fileEntryCache = require("file-entry-cache"),
globUtil = require("./util/glob-util"),
SourceCodeFixer = require("./util/source-code-fixer"),
validator = require("./config/config-validator"),
stringify = require("json-stable-stringify"),
hash = require("./util/hash"),
pkg = require("../package.json");
const debug = require("debug")("eslint:cli-engine");
@@ -132,80 +130,6 @@ function calculateStatsPerRun(results) {
});
}
/**
* Performs multiple autofix passes over the text until as many fixes as possible
* have been applied.
* @param {string} text The source text to apply fixes to.
* @param {Object} config The ESLint config object to use.
* @param {Object} options The ESLint options object to use.
* @param {string} options.filename The filename from which the text was read.
* @param {boolean} options.allowInlineConfig Flag indicating if inline comments
* should be allowed.
* @param {Linter} linter Linter context
* @returns {Object} The result of the fix operation as returned from the
* SourceCodeFixer.
* @private
*/
function multipassFix(text, config, options, linter) {
const MAX_PASSES = 10;
let messages = [],
fixedResult,
fixed = false,
passNumber = 0;
/**
* This loop continues until one of the following is true:
*
* 1. No more fixes have been applied.
* 2. Ten passes have been made.
*
* That means anytime a fix is successfully applied, there will be another pass.
* Essentially, guaranteeing a minimum of two passes.
*/
do {
passNumber++;
debug(`Linting code for ${options.filename} (pass ${passNumber})`);
messages = linter.verify(text, config, options);
debug(`Generating fixed text for ${options.filename} (pass ${passNumber})`);
fixedResult = SourceCodeFixer.applyFixes(linter.getSourceCode(), messages);
// stop if there are any syntax errors.
// 'fixedResult.output' is a empty string.
if (messages.length === 1 && messages[0].fatal) {
break;
}
// keep track if any fixes were ever applied - important for return value
fixed = fixed || fixedResult.fixed;
// update to use the fixed output instead of the original text
text = fixedResult.output;
} while (
fixedResult.fixed &&
passNumber < MAX_PASSES
);
/*
* If the last result had fixes, we need to lint again to be sure we have
* the most up-to-date information.
*/
if (fixedResult.fixed) {
fixedResult.messages = linter.verify(text, config, options);
}
// ensure the last result properly reflects if fixes were done
fixedResult.fixed = fixed;
fixedResult.output = text;
return fixedResult;
}
/**
* Processes an source code using ESLint.
* @param {string} text The source code to check.
@@ -269,10 +193,10 @@ function processText(text, configHelper, filename, fix, allowInlineConfig, linte
} else {
if (fix) {
fixedResult = multipassFix(text, config, {
fixedResult = linter.verifyAndFix(text, config, {
filename,
allowInlineConfig
}, linter);
});
messages = fixedResult.messages;
} else {
messages = linter.verify(text, config, {
@@ -394,7 +318,7 @@ function getCacheFile(cacheFile, cwd) {
cacheFile = path.normalize(cacheFile);
const resolvedCacheFile = path.resolve(cwd, cacheFile);
const looksLikeADirectory = cacheFile[cacheFile.length - 1 ] === path.sep;
const looksLikeADirectory = cacheFile[cacheFile.length - 1] === path.sep;
/**
* return the name for the cache file in case the provided parameter is a directory
@@ -474,15 +398,17 @@ class CLIEngine {
this.options = options;
this.linter = new Linter();
const cacheFile = getCacheFile(this.options.cacheLocation || this.options.cacheFile, this.options.cwd);
if (options.cache) {
const cacheFile = getCacheFile(this.options.cacheLocation || this.options.cacheFile, this.options.cwd);
/**
* Cache used to avoid operating on files that haven't changed since the
* last successful execution (e.g., file passed linting with no errors and
* no warnings).
* @type {Object}
*/
this._fileCache = fileEntryCache.create(cacheFile);
/**
* Cache used to avoid operating on files that haven't changed since the
* last successful execution (e.g., file passed linting with no errors and
* no warnings).
* @type {Object}
*/
this._fileCache = fileEntryCache.create(cacheFile);
}
// load in additional rules
if (this.options.rulePaths) {
@@ -571,6 +497,11 @@ class CLIEngine {
fileCache = this._fileCache,
configHelper = this.config;
let prevConfig; // the previous configuration used
const cacheFile = getCacheFile(this.options.cacheLocation || this.options.cacheFile, this.options.cwd);
if (!options.cache && fs.existsSync(cacheFile)) {
fs.unlinkSync(cacheFile);
}
/**
* Calculates the hash of the config file used to validate a given file
@@ -646,8 +577,6 @@ class CLIEngine {
// move to the next file
return;
}
} else {
fileCache.destroy();
}
debug(`Processing ${filename}`);
@@ -240,7 +240,7 @@ class CodePathState {
this.breakContext = null;
this.currentSegments = [];
this.initialSegment = this.forkContext.head[ 0 ];
this.initialSegment = this.forkContext.head[0];
// returnedSegments and thrownSegments push elements into finalSegments also.
const final = this.finalSegments = [];
+246 -222
View File
@@ -13,6 +13,7 @@ const path = require("path"),
os = require("os"),
ConfigOps = require("./config/config-ops"),
ConfigFile = require("./config/config-file"),
ConfigCache = require("./config/config-cache"),
Plugins = require("./config/plugins"),
FileFinder = require("./file-finder"),
isResolvable = require("is-resolvable");
@@ -24,149 +25,22 @@ const debug = require("debug")("eslint:config");
//------------------------------------------------------------------------------
const PERSONAL_CONFIG_DIR = os.homedir() || null;
const SUBCONFIG_SEP = ":";
//------------------------------------------------------------------------------
// Helpers
//------------------------------------------------------------------------------
/**
* Check if item is an javascript object
* @param {*} item object to check for
* @returns {boolean} True if its an object
* @private
*/
function isObject(item) {
return typeof item === "object" && !Array.isArray(item) && item !== null;
}
/**
* Load and parse a JSON config object from a file.
* @param {string|Object} configToLoad the path to the JSON config file or the config object itself.
* @param {Config} configContext config instance object
* @returns {Object} the parsed config object (empty object if there was a parse error)
* @private
*/
function loadConfig(configToLoad, configContext) {
let config = {},
filePath = "";
if (configToLoad) {
if (isObject(configToLoad)) {
config = configToLoad;
if (config.extends) {
config = ConfigFile.applyExtends(config, configContext, filePath);
}
} else {
filePath = configToLoad;
config = ConfigFile.load(filePath, configContext);
}
}
return config;
}
/**
* Get personal config object from ~/.eslintrc.
* @param {Config} configContext Plugin context for the config instance
* @returns {Object} the personal config object (null if there is no personal config)
* @private
*/
function getPersonalConfig(configContext) {
let config;
if (PERSONAL_CONFIG_DIR) {
const filename = ConfigFile.getFilenameForDirectory(PERSONAL_CONFIG_DIR);
if (filename) {
debug("Using personal config");
config = loadConfig(filename, configContext);
}
}
return config || null;
}
/**
* Determine if rules were explicitly passed in as options.
* Determines if any rules were explicitly passed in as options.
* @param {Object} options The options used to create our configuration.
* @returns {boolean} True if rules were passed in as options, false otherwise.
* @private
*/
function hasRules(options) {
return options.rules && Object.keys(options.rules).length > 0;
}
/**
* Get a local config object.
* @param {Config} thisConfig A Config object.
* @param {string} directory The directory to start looking in for a local config file.
* @returns {Object} The local config object, or an empty object if there is no local config.
*/
function getLocalConfig(thisConfig, directory) {
const projectConfigPath = ConfigFile.getFilenameForDirectory(thisConfig.options.cwd);
const localConfigFiles = thisConfig.findLocalConfigFiles(directory);
let found,
config = {};
for (const localConfigFile of localConfigFiles) {
// Don't consider the personal config file in the home directory,
// except if the home directory is the same as the current working directory
if (path.dirname(localConfigFile) === PERSONAL_CONFIG_DIR && localConfigFile !== projectConfigPath) {
continue;
}
debug(`Loading ${localConfigFile}`);
const localConfig = loadConfig(localConfigFile, thisConfig);
// Don't consider a local config file found if the config is null
if (!localConfig) {
continue;
}
found = true;
debug(`Using ${localConfigFile}`);
config = ConfigOps.merge(localConfig, config);
// Check for root flag
if (localConfig.root === true) {
break;
}
}
if (!found && !thisConfig.useSpecificConfig) {
/*
* - Is there a personal config in the user's home directory? If so,
* merge that with the passed-in config.
* - Otherwise, if no rules were manually passed in, throw and error.
* - Note: This function is not called if useEslintrc is false.
*/
const personalConfig = getPersonalConfig(thisConfig);
if (personalConfig) {
config = ConfigOps.merge(config, personalConfig);
} else if (!hasRules(thisConfig.options) && !thisConfig.options.baseConfig) {
// No config file, no manual configuration, and no rules, so error.
const noConfigError = new Error("No ESLint configuration found.");
noConfigError.messageTemplate = "no-config-found";
noConfigError.messageData = {
directory,
filesExamined: localConfigFiles
};
throw noConfigError;
}
}
return config;
}
//------------------------------------------------------------------------------
// API
//------------------------------------------------------------------------------
@@ -177,7 +51,6 @@ function getLocalConfig(thisConfig, directory) {
class Config {
/**
* Config options
* @param {Object} options Options to be passed in
* @param {Linter} linterContext Linter instance object
*/
@@ -187,18 +60,26 @@ class Config {
this.linterContext = linterContext;
this.plugins = new Plugins(linterContext.environments, linterContext.rules);
this.options = options;
this.ignore = options.ignore;
this.ignorePath = options.ignorePath;
this.cache = {};
this.parser = options.parser;
this.parserOptions = options.parserOptions || {};
this.baseConfig = options.baseConfig ? loadConfig(options.baseConfig, this) : { rules: {} };
this.baseConfig = options.baseConfig
? ConfigOps.merge({}, ConfigFile.loadObject(options.baseConfig, this))
: { rules: {} };
this.baseConfig.filePath = "";
this.baseConfig.baseDirectory = this.options.cwd;
this.configCache = new ConfigCache();
this.configCache.setConfig(this.baseConfig.filePath, this.baseConfig);
this.configCache.setMergedVectorConfig(this.baseConfig.filePath, this.baseConfig);
this.useEslintrc = (options.useEslintrc !== false);
this.env = (options.envs || []).reduce((envs, name) => {
envs[ name ] = true;
envs[name] = true;
return envs;
}, {});
@@ -209,132 +90,275 @@ class Config {
* If user declares "foo", convert to "foo:false".
*/
this.globals = (options.globals || []).reduce((globals, def) => {
const parts = def.split(":");
const parts = def.split(SUBCONFIG_SEP);
globals[parts[0]] = (parts.length > 1 && parts[1] === "true");
return globals;
}, {});
this.options = options;
this.loadConfigFile(options.configFile);
}
this.loadSpecificConfig(options.configFile);
/**
* Loads the config from the configuration file
* @param {string} configFile - patch to the config file
* @returns {undefined}
*/
loadConfigFile(configFile) {
if (configFile) {
debug(`Using command line config ${configFile}`);
if (isResolvable(configFile) || isResolvable(`eslint-config-${configFile}`) || configFile.charAt(0) === "@") {
this.useSpecificConfig = loadConfig(configFile, this);
} else {
this.useSpecificConfig = loadConfig(path.resolve(this.options.cwd, configFile), this);
// Empty values in configs don't merge properly
const cliConfigOptions = {
env: this.env,
rules: this.options.rules,
globals: this.globals,
parserOptions: this.parserOptions,
plugins: this.options.plugins
};
this.cliConfig = {};
Object.keys(cliConfigOptions).forEach(configKey => {
const value = cliConfigOptions[configKey];
if (value) {
this.cliConfig[configKey] = value;
}
});
}
/**
* Loads the config options from a config specified on the command line.
* @param {string} [config] A shareable named config or path to a config file.
* @returns {void}
*/
loadSpecificConfig(config) {
if (config) {
debug(`Using command line config ${config}`);
const isNamedConfig =
isResolvable(config) ||
isResolvable(`eslint-config-${config}`) ||
config.charAt(0) === "@";
if (!isNamedConfig) {
config = path.resolve(this.options.cwd, config);
}
this.specificConfig = ConfigFile.load(config, this);
}
}
/**
* Build a config object merging the base config (conf/eslint-recommended),
* the environments config (conf/environments.js) and eventually the user
* config.
* @param {string} filePath a file in whose directory we start looking for a local config
* @returns {Object} config object
* Gets the personal config object from user's home directory.
* @returns {Object} the personal config object (null if there is no personal config)
* @private
*/
getConfig(filePath) {
const directory = filePath ? path.dirname(filePath) : this.options.cwd;
let config,
userConfig;
getPersonalConfig() {
if (typeof this.personalConfig === "undefined") {
let config;
debug(`Constructing config for ${filePath ? filePath : "text"}`);
if (PERSONAL_CONFIG_DIR) {
const filename = ConfigFile.getFilenameForDirectory(PERSONAL_CONFIG_DIR);
config = this.cache[directory];
if (config) {
debug("Using config from cache");
return config;
if (filename) {
debug("Using personal config");
config = ConfigFile.load(filename, this);
}
}
this.personalConfig = config || null;
}
// Step 1: Determine user-specified config from .eslintrc.* and package.json files
return this.personalConfig;
}
/**
* Builds a hierarchy of config objects, including the base config, all local configs from the directory tree,
* and a config file specified on the command line, if applicable.
* @param {string} directory a file in whose directory we start looking for a local config
* @returns {Object[]} The config objects, in ascending order of precedence
* @private
*/
getConfigHierarchy(directory) {
debug(`Constructing config file hierarchy for ${directory}`);
// Step 1: Always include baseConfig
let configs = [this.baseConfig];
// Step 2: Add user-specified config from .eslintrc.* and package.json files
if (this.useEslintrc) {
debug("Using .eslintrc and package.json files");
userConfig = getLocalConfig(this, directory);
configs = configs.concat(this.getLocalConfigHierarchy(directory));
} else {
debug("Not using .eslintrc or package.json files");
userConfig = {};
}
// Step 2: Create a copy of the baseConfig
config = ConfigOps.merge({}, this.baseConfig);
// Step 3: Merge in the user-specified configuration from .eslintrc and package.json
config = ConfigOps.merge(config, userConfig);
// Step 4: Merge in command line config file
if (this.useSpecificConfig) {
debug("Merging command line config file");
config = ConfigOps.merge(config, this.useSpecificConfig);
// Step 3: Merge in command line config file
if (this.specificConfig) {
debug("Using command line config file");
configs.push(this.specificConfig);
}
// Step 5: Merge in command line environments
debug("Merging command line environment settings");
config = ConfigOps.merge(config, { env: this.env });
// Step 6: Merge in command line rules
if (this.options.rules) {
debug("Merging command line rules");
config = ConfigOps.merge(config, { rules: this.options.rules });
}
// Step 7: Merge in command line globals
config = ConfigOps.merge(config, { globals: this.globals });
// Only override parser if it is passed explicitly through the command line or if it's not
// defined yet (because the final object will at least have the parser key)
if (this.parser || !config.parser) {
config = ConfigOps.merge(config, {
parser: this.parser
});
}
if (this.parserOptions) {
config = ConfigOps.merge(config, {
parserOptions: this.parserOptions
});
}
// Step 8: Merge in command line plugins
if (this.options.plugins) {
debug("Merging command line plugins");
this.plugins.loadAll(this.options.plugins);
config = ConfigOps.merge(config, { plugins: this.options.plugins });
}
// Step 9: Apply environments to the config if present
if (config.env) {
config = ConfigOps.applyEnvironments(config, this.linterContext.environments);
}
this.cache[directory] = config;
return config;
return configs;
}
/**
* Find local config files from directory and parent directories.
* Gets a list of config objects extracted from local config files that apply to the current directory, in
* descending order, beginning with the config that is highest in the directory tree.
* @param {string} directory The directory to start looking in for local config files.
* @returns {Object[]} The shallow local config objects, in ascending order of precedence (closest to the current
* directory at the end), or an empty array if there are no local configs.
* @private
*/
getLocalConfigHierarchy(directory) {
const localConfigFiles = this.findLocalConfigFiles(directory),
projectConfigPath = ConfigFile.getFilenameForDirectory(this.options.cwd),
searched = [],
configs = [];
for (const localConfigFile of localConfigFiles) {
const localConfigDirectory = path.dirname(localConfigFile);
const localConfigHierarchyCache = this.configCache.getHierarchyLocalConfigs(localConfigDirectory);
if (localConfigHierarchyCache) {
const localConfigHierarchy = localConfigHierarchyCache.concat(configs.reverse());
this.configCache.setHierarchyLocalConfigs(searched, localConfigHierarchy);
return localConfigHierarchy;
}
// Don't consider the personal config file in the home directory,
// except if the home directory is the same as the current working directory
if (localConfigDirectory === PERSONAL_CONFIG_DIR && localConfigFile !== projectConfigPath) {
continue;
}
debug(`Loading ${localConfigFile}`);
const localConfig = ConfigFile.load(localConfigFile, this);
// Ignore empty config files
if (!localConfig) {
continue;
}
debug(`Using ${localConfigFile}`);
configs.push(localConfig);
searched.push(localConfigDirectory);
// Stop traversing if a config is found with the root flag set
if (localConfig.root) {
break;
}
}
if (!configs.length && !this.specificConfig) {
// Fall back on the personal config from ~/.eslintrc
debug("Using personal config file");
const personalConfig = this.getPersonalConfig();
if (personalConfig) {
configs.push(personalConfig);
} else if (!hasRules(this.options) && !this.options.baseConfig) {
// No config file, no manual configuration, and no rules, so error.
const noConfigError = new Error("No ESLint configuration found.");
noConfigError.messageTemplate = "no-config-found";
noConfigError.messageData = {
directory,
filesExamined: localConfigFiles
};
throw noConfigError;
}
}
// Set the caches for the parent directories
this.configCache.setHierarchyLocalConfigs(searched, configs.reverse());
return configs;
}
/**
* Gets the vector of applicable configs and subconfigs from the hierarchy for a given file. A vector is an array of
* entries, each of which in an object specifying a config file path and an array of override indices corresponding
* to entries in the config file's overrides section whose glob patterns match the specified file path; e.g., the
* vector entry { configFile: '/home/john/app/.eslintrc', matchingOverrides: [0, 2] } would indicate that the main
* project .eslintrc file and its first and third override blocks apply to the current file.
* @param {string} filePath The file path for which to build the hierarchy and config vector.
* @returns {Array<Object>} config vector applicable to the specified path
* @private
*/
getConfigVector(filePath) {
const directory = filePath ? path.dirname(filePath) : this.options.cwd;
return this.getConfigHierarchy(directory).map(config => {
const vectorEntry = {
filePath: config.filePath,
matchingOverrides: []
};
if (config.overrides) {
const relativePath = path.relative(config.baseDirectory, filePath || directory);
config.overrides.forEach((override, i) => {
if (ConfigOps.pathMatchesGlobs(relativePath, override.files, override.excludedFiles)) {
vectorEntry.matchingOverrides.push(i);
}
});
}
return vectorEntry;
});
}
/**
* Finds local config files from the specified directory and its parent directories.
* @param {string} directory The directory to start searching from.
* @returns {GeneratorFunction} The paths of local config files found.
*/
findLocalConfigFiles(directory) {
if (!this.localConfigFinder) {
this.localConfigFinder = new FileFinder(ConfigFile.CONFIG_FILES, this.options.cwd);
}
return this.localConfigFinder.findAllInDirectoryAndParents(directory);
}
/**
* Builds the authoritative config object for the specified file path by merging the hierarchy of config objects
* that apply to the current file, including the base config (conf/eslint-recommended), the user's personal config
* from their homedir, all local configs from the directory tree, any specific config file passed on the command
* line, any configuration overrides set directly on the command line, and finally the environment configs
* (conf/environments).
* @param {string} filePath a file in whose directory we start looking for a local config
* @returns {Object} config object
*/
getConfig(filePath) {
const vector = this.getConfigVector(filePath);
let config = this.configCache.getMergedConfig(vector);
if (config) {
debug("Using config from cache");
return config;
}
// Step 1: Merge in the filesystem configurations (base, local, and personal)
config = ConfigOps.getConfigFromVector(vector, this.configCache);
// Step 2: Merge in command line configurations
config = ConfigOps.merge(config, this.cliConfig);
if (this.cliConfig.plugins) {
this.plugins.loadAll(this.cliConfig.plugins);
}
// Step 3: Override parser only if it is passed explicitly through the command line
// or if it's not defined yet (because the final object will at least have the parser key)
if (this.parser || !config.parser) {
config = ConfigOps.merge(config, { parser: this.parser });
}
// Step 4: Apply environments to the config if present
if (config.env) {
config = ConfigOps.applyEnvironments(config, this.linterContext.environments);
}
this.configCache.setMergedConfig(vector, config);
return config;
}
}
module.exports = Config;
+130
View File
@@ -0,0 +1,130 @@
/**
* @fileoverview Responsible for caching config files
* @author Sylvan Mably
*/
"use strict";
//------------------------------------------------------------------------------
// Helpers
//------------------------------------------------------------------------------
/**
* Get a string hash for a config vector
* @param {Array<Object>} vector config vector to hash
* @returns {string} hash of the vector values
* @private
*/
function hash(vector) {
return JSON.stringify(vector);
}
//------------------------------------------------------------------------------
// API
//------------------------------------------------------------------------------
/**
* Configuration caching class (not exported)
*/
class ConfigCache {
constructor() {
this.filePathCache = new Map();
this.localHierarchyCache = new Map();
this.mergedVectorCache = new Map();
this.mergedCache = new Map();
}
/**
* Gets a config object from the cache for the specified config file path.
* @param {string} configFilePath the absolute path to the config file
* @returns {Object|null} config object, if found in the cache, otherwise null
* @private
*/
getConfig(configFilePath) {
return this.filePathCache.get(configFilePath);
}
/**
* Sets a config object in the cache for the specified config file path.
* @param {string} configFilePath the absolute path to the config file
* @param {Object} config the config object to add to the cache
* @returns {void}
* @private
*/
setConfig(configFilePath, config) {
this.filePathCache.set(configFilePath, config);
}
/**
* Gets a list of hierarchy-local config objects that apply to the specified directory.
* @param {string} directory the path to the directory
* @returns {Object[]|null} a list of config objects, if found in the cache, otherwise null
* @private
*/
getHierarchyLocalConfigs(directory) {
return this.localHierarchyCache.get(directory);
}
/**
* For each of the supplied parent directories, sets the list of config objects for that directory to the
* appropriate subset of the supplied parent config objects.
* @param {string[]} parentDirectories a list of parent directories to add to the config cache
* @param {Object[]} parentConfigs a list of config objects that apply to the lowest directory in parentDirectories
* @returns {void}
* @private
*/
setHierarchyLocalConfigs(parentDirectories, parentConfigs) {
parentDirectories.forEach((localConfigDirectory, i) => {
const directoryParentConfigs = parentConfigs.slice(0, parentConfigs.length - i);
this.localHierarchyCache.set(localConfigDirectory, directoryParentConfigs);
});
}
/**
* Gets a merged config object corresponding to the supplied vector.
* @param {Array<Object>} vector the vector to find a merged config for
* @returns {Object|null} a merged config object, if found in the cache, otherwise null
* @private
*/
getMergedVectorConfig(vector) {
return this.mergedVectorCache.get(hash(vector));
}
/**
* Sets a merged config object in the cache for the supplied vector.
* @param {Array<Object>} vector the vector to save a merged config for
* @param {Object} config the merged config object to add to the cache
* @returns {void}
* @private
*/
setMergedVectorConfig(vector, config) {
this.mergedVectorCache.set(hash(vector), config);
}
/**
* Gets a merged config object corresponding to the supplied vector, including configuration options from outside
* the vector.
* @param {Array<Object>} vector the vector to find a merged config for
* @returns {Object|null} a merged config object, if found in the cache, otherwise null
* @private
*/
getMergedConfig(vector) {
return this.mergedCache.get(hash(vector));
}
/**
* Sets a merged config object in the cache for the supplied vector, including configuration options from outside
* the vector.
* @param {Array<Object>} vector the vector to save a merged config for
* @param {Object} config the merged config object to add to the cache
* @returns {void}
* @private
*/
setMergedConfig(vector, config) {
this.mergedCache.set(hash(vector), config);
}
}
module.exports = ConfigCache;
+47 -17
View File
@@ -418,7 +418,7 @@ function applyExtends(config, configContext, filePath, relativeTo) {
);
}
debug(`Loading ${parentPath}`);
return ConfigOps.merge(load(parentPath, configContext, false, relativeTo), previousValue);
return ConfigOps.merge(load(parentPath, configContext, relativeTo), previousValue);
} catch (e) {
/*
@@ -517,16 +517,12 @@ function resolve(filePath, relativeTo) {
/**
* Loads a configuration file from the given file path.
* @param {string} filePath The filename or package name to load the configuration
* information from.
* @param {Object} resolvedPath The value from calling resolve() on a filename or package name.
* @param {Config} configContext Plugins context
* @param {boolean} [applyEnvironments=false] Set to true to merge in environment settings.
* @param {string} [relativeTo] The path to resolve relative to.
* @returns {Object} The configuration information.
*/
function load(filePath, configContext, applyEnvironments, relativeTo) {
const resolvedPath = resolve(filePath, relativeTo),
dirname = path.dirname(resolvedPath.filePath),
function loadFromDisk(resolvedPath, configContext) {
const dirname = path.dirname(resolvedPath.filePath),
lookupPath = getLookupPath(dirname);
let config = loadConfigFile(resolvedPath);
@@ -547,27 +543,60 @@ function load(filePath, configContext, applyEnvironments, relativeTo) {
}
// validate the configuration before continuing
validator.validate(config, filePath, configContext.linterContext.rules, configContext.linterContext.environments);
validator.validate(config, resolvedPath, configContext.linterContext.rules, configContext.linterContext.environments);
/*
* If an `extends` property is defined, it represents a configuration file to use as
* a "parent". Load the referenced file and merge the configuration recursively.
*/
if (config.extends) {
config = applyExtends(config, configContext, filePath, dirname);
config = applyExtends(config, configContext, resolvedPath.filePath, dirname);
}
if (config.env && applyEnvironments) {
// Merge in environment-specific globals and parserOptions.
config = ConfigOps.applyEnvironments(config, configContext.linterContext.environments);
}
}
return config;
}
/**
* Loads a config object, applying extends if present.
* @param {Object} configObject a config object to load
* @returns {Object} the config object with extends applied if present, or the passed config if not
* @private
*/
function loadObject(configObject) {
return configObject.extends ? applyExtends(configObject, "") : configObject;
}
/**
* Loads a config object from the config cache based on its filename, falling back to the disk if the file is not yet
* cached.
* @param {string} filePath the path to the config file
* @param {Config} configContext Context for the config instance
* @param {string} [relativeTo] The path to resolve relative to.
* @returns {Object} the parsed config object (empty object if there was a parse error)
* @private
*/
function load(filePath, configContext, relativeTo) {
const resolvedPath = resolve(filePath, relativeTo);
const cachedConfig = configContext.configCache.getConfig(resolvedPath.filePath);
if (cachedConfig) {
return cachedConfig;
}
const config = loadFromDisk(resolvedPath, configContext);
if (config) {
config.filePath = resolvedPath.filePath;
config.baseDirectory = path.dirname(resolvedPath.filePath);
configContext.configCache.setConfig(resolvedPath.filePath, config);
}
return config;
}
//------------------------------------------------------------------------------
// Public Interface
//------------------------------------------------------------------------------
@@ -577,6 +606,7 @@ module.exports = {
getBaseDir,
getLookupPath,
load,
loadObject,
resolve,
write,
applyExtends,
+30 -25
View File
@@ -62,42 +62,47 @@ function writeFile(config, format) {
* @returns {void}
*/
function installModules(config) {
let modules = [];
const modules = {};
// Create a list of modules which should be installed based on config
if (config.plugins) {
modules = modules.concat(config.plugins.map(name => `eslint-plugin-${name}`));
for (const plugin of config.plugins) {
modules[`eslint-plugin-${plugin}`] = "latest";
}
}
if (config.extends && config.extends.indexOf("eslint:") === -1) {
modules.push(`eslint-config-${config.extends}`);
const moduleName = `eslint-config-${config.extends}`;
log.info(`Checking peerDependencies of ${moduleName}`);
modules[moduleName] = "latest";
Object.assign(
modules,
npmUtil.fetchPeerDependencies(`${moduleName}@latest`)
);
}
// Determine which modules are already installed
if (modules.length === 0) {
// If no modules, do nothing.
if (Object.keys(modules).length === 0) {
return;
}
// Add eslint to list in case user does not have it installed locally
modules.unshift("eslint");
modules.eslint = modules.eslint || "latest";
const installStatus = npmUtil.checkDevDeps(modules);
// Mark to show messages if it's new installation of eslint.
const installStatus = npmUtil.checkDevDeps(["eslint"]);
// Install packages which aren't already installed
const modulesToInstall = Object.keys(installStatus).filter(module => {
const notInstalled = installStatus[module] === false;
if (module === "eslint" && notInstalled) {
log.info("Local ESLint installation not found.");
config.installedESLint = true;
}
return notInstalled;
});
if (modulesToInstall.length > 0) {
log.info(`Installing ${modulesToInstall.join(", ")}`);
npmUtil.installSyncSaveDev(modulesToInstall);
if (installStatus.eslint === false) {
log.info("Local ESLint installation not found.");
config.installedESLint = true;
}
// Install packages
const modulesToInstall = Object.keys(modules).map(name => `${name}@${modules[name]}`);
log.info(`Installing ${modulesToInstall.join(", ")}`);
npmUtil.installSyncSaveDev(modulesToInstall);
}
/**
@@ -265,9 +270,9 @@ function processAnswers(answers) {
function getConfigForStyleGuide(guide) {
const guides = {
google: { extends: "google" },
airbnb: { extends: "airbnb", plugins: ["react", "jsx-a11y", "import"] },
"airbnb-base": { extends: "airbnb-base", plugins: ["import"] },
standard: { extends: "standard", plugins: ["standard", "promise"] }
airbnb: { extends: "airbnb" },
"airbnb-base": { extends: "airbnb-base" },
standard: { extends: "standard" }
};
if (!guides[guide]) {
+112 -1
View File
@@ -9,6 +9,9 @@
// Requirements
//------------------------------------------------------------------------------
const minimatch = require("minimatch"),
path = require("path");
const debug = require("debug")("eslint:config-ops");
//------------------------------------------------------------------------------
@@ -174,7 +177,9 @@ module.exports = {
});
}
Object.keys(src).forEach(key => {
if (Array.isArray(src[key]) || Array.isArray(target[key])) {
if (key === "overrides") {
dst[key] = (target[key] || []).concat(src[key] || []);
} else if (Array.isArray(src[key]) || Array.isArray(target[key])) {
dst[key] = deepmerge(target[key], src[key], key === "plugins" || key === "extends", isRule);
} else if (typeof src[key] !== "object" || !src[key] || key === "exported" || key === "astGlobals") {
dst[key] = src[key];
@@ -268,5 +273,111 @@ module.exports = {
*/
isEverySeverityValid(config) {
return Object.keys(config).every(ruleId => this.isValidSeverity(config[ruleId]));
},
/**
* Merges all configurations in a given config vector. A vector is an array of objects, each containing a config
* file path and a list of subconfig indices that match the current file path. All config data is assumed to be
* cached.
* @param {Array<Object>} vector list of config files and their subconfig indices that match the current file path
* @param {Object} configCache the config cache
* @returns {Object} config object
*/
getConfigFromVector(vector, configCache) {
const cachedConfig = configCache.getMergedVectorConfig(vector);
if (cachedConfig) {
return cachedConfig;
}
debug("Using config from partial cache");
const subvector = Array.from(vector);
let nearestCacheIndex = subvector.length - 1,
partialCachedConfig;
while (nearestCacheIndex >= 0) {
partialCachedConfig = configCache.getMergedVectorConfig(subvector);
if (partialCachedConfig) {
break;
}
subvector.pop();
nearestCacheIndex--;
}
if (!partialCachedConfig) {
partialCachedConfig = {};
}
let finalConfig = partialCachedConfig;
// Start from entry immediately following nearest cached config (first uncached entry)
for (let i = nearestCacheIndex + 1; i < vector.length; i++) {
finalConfig = this.mergeVectorEntry(finalConfig, vector[i], configCache);
configCache.setMergedVectorConfig(vector.slice(0, i + 1), finalConfig);
}
return finalConfig;
},
/**
* Merges the config options from a single vector entry into the supplied config.
* @param {Object} config the base config to merge the vector entry's options into
* @param {Object} vectorEntry a single entry from a vector, consisting of a config file path and an array of
* matching override indices
* @param {Object} configCache the config cache
* @returns {Object} merged config object
*/
mergeVectorEntry(config, vectorEntry, configCache) {
const vectorEntryConfig = Object.assign({}, configCache.getConfig(vectorEntry.filePath));
let mergedConfig = Object.assign({}, config),
overrides;
if (vectorEntryConfig.overrides) {
overrides = vectorEntryConfig.overrides.filter(
(override, overrideIndex) => vectorEntry.matchingOverrides.indexOf(overrideIndex) !== -1
);
} else {
overrides = [];
}
mergedConfig = this.merge(mergedConfig, vectorEntryConfig);
delete mergedConfig.overrides;
mergedConfig = overrides.reduce((lastConfig, override) => this.merge(lastConfig, override), mergedConfig);
if (mergedConfig.filePath) {
delete mergedConfig.filePath;
delete mergedConfig.baseDirectory;
} else if (mergedConfig.files) {
delete mergedConfig.files;
}
return mergedConfig;
},
/**
* Checks that the specified file path matches all of the supplied glob patterns.
* @param {string} filePath The file path to test patterns against
* @param {string|string[]} patterns One or more glob patterns, of which at least one should match the file path
* @param {string|string[]} [excludedPatterns] One or more glob patterns, of which none should match the file path
* @returns {boolean} True if all the supplied patterns match the file path, false otherwise
*/
pathMatchesGlobs(filePath, patterns, excludedPatterns) {
const patternList = [].concat(patterns);
const excludedPatternList = [].concat(excludedPatterns || []);
patternList.concat(excludedPatternList).forEach(pattern => {
if (path.isAbsolute(pattern) || pattern.includes("..")) {
throw new Error(`Invalid override pattern (expected relative path not containing '..'): ${pattern}`);
}
});
const opts = { matchBase: true };
return patternList.some(pattern => minimatch(filePath, pattern, opts)) &&
!excludedPatternList.some(excludedPattern => minimatch(filePath, excludedPattern, opts));
}
};
+2 -2
View File
@@ -10,7 +10,7 @@
//------------------------------------------------------------------------------
const schemaValidator = require("is-my-json-valid"),
configSchema = require("../../conf/config-schema.json"),
configSchema = require("../../conf/config-schema.js"),
util = require("util");
const validators = {
@@ -170,7 +170,7 @@ function formatErrors(errors) {
return `Property "${formattedField}" is the wrong type (expected ${formattedExpectedType} but got \`${formattedValue}\`)`;
}
return `"${error.field.replace(/^(data\.)/, "")}" ${error.message}. Value: ${error.value}`;
return `"${error.field.replace(/^(data\.)/, "")}" ${error.message}. Value: ${JSON.stringify(error.value)}`;
}).map(message => `\t- ${message}.\n`).join("");
}
+79 -19
View File
@@ -16,7 +16,6 @@ const fs = require("fs"),
const debug = require("debug")("eslint:ignored-paths");
//------------------------------------------------------------------------------
// Constants
//------------------------------------------------------------------------------
@@ -37,11 +36,23 @@ const DEFAULT_OPTIONS = {
cwd: process.cwd()
};
//------------------------------------------------------------------------------
// Helpers
//------------------------------------------------------------------------------
/**
* Find a file in the current directory.
* @param {string} cwd Current working directory
* @param {string} name File name
* @returns {string} Path of ignore file or an empty string.
*/
function findFile(cwd, name) {
cwd = cwd || DEFAULT_OPTIONS.cwd;
const ignoreFilePath = path.resolve(cwd, name);
return fs.existsSync(ignoreFilePath) && fs.statSync(ignoreFilePath).isFile() ? ignoreFilePath : "";
}
/**
* Find an ignore file in the current directory.
@@ -49,11 +60,16 @@ const DEFAULT_OPTIONS = {
* @returns {string} Path of ignore file or an empty string.
*/
function findIgnoreFile(cwd) {
cwd = cwd || DEFAULT_OPTIONS.cwd;
return findFile(cwd, ESLINT_IGNORE_FILENAME);
}
const ignoreFilePath = path.resolve(cwd, ESLINT_IGNORE_FILENAME);
return fs.existsSync(ignoreFilePath) && fs.statSync(ignoreFilePath).isFile() ? ignoreFilePath : "";
/**
* Find an package.json file in the current directory.
* @param {string} cwd Current working directory
* @returns {string} Path of package.json file or an empty string.
*/
function findPackageJSONFile(cwd) {
return findFile(cwd, "package.json");
}
/**
@@ -80,6 +96,7 @@ class IgnoredPaths {
*/
constructor(options) {
options = mergeDefaultOptions(options);
this.cache = {};
/**
* add pattern to node-ignore instance
@@ -91,17 +108,6 @@ class IgnoredPaths {
return ig.addPattern(pattern);
}
/**
* add ignore file to node-ignore instance
* @param {Object} ig, instance of node-ignore
* @param {string} filepath, file to add to ig
* @returns {array} raw ignore rules
*/
function addIgnoreFile(ig, filepath) {
ig.ignoreFiles.push(filepath);
return ig.add(fs.readFileSync(filepath, "utf8"));
}
this.defaultPatterns = [].concat(DEFAULT_IGNORE_DIRS, options.patterns || []);
this.baseDir = options.cwd;
@@ -155,8 +161,39 @@ class IgnoredPaths {
if (ignorePath) {
debug(`Adding ${ignorePath}`);
this.baseDir = path.dirname(path.resolve(options.cwd, ignorePath));
addIgnoreFile(this.ig.custom, ignorePath);
addIgnoreFile(this.ig.default, ignorePath);
this.addIgnoreFile(this.ig.custom, ignorePath);
this.addIgnoreFile(this.ig.default, ignorePath);
} else {
try {
// if the ignoreFile does not exist, check package.json for eslintIgnore
const packageJSONPath = findPackageJSONFile(options.cwd);
if (packageJSONPath) {
let packageJSONOptions;
try {
packageJSONOptions = JSON.parse(fs.readFileSync(packageJSONPath, "utf8"));
} catch (e) {
debug("Could not read package.json file to check eslintIgnore property");
throw e;
}
if (packageJSONOptions.eslintIgnore) {
if (Array.isArray(packageJSONOptions.eslintIgnore)) {
packageJSONOptions.eslintIgnore.forEach(pattern => {
addPattern(this.ig.custom, pattern);
addPattern(this.ig.default, pattern);
});
} else {
throw new Error("Package.json eslintIgnore property requires an array of paths");
}
}
}
} catch (e) {
debug("Could not find package.json to check eslintIgnore property");
throw e;
}
}
if (options.ignorePattern) {
@@ -168,6 +205,29 @@ class IgnoredPaths {
this.options = options;
}
/**
* read ignore filepath
* @param {string} filePath, file to add to ig
* @returns {array} raw ignore rules
*/
readIgnoreFile(filePath) {
if (typeof this.cache[filePath] === "undefined") {
this.cache[filePath] = fs.readFileSync(filePath, "utf8");
}
return this.cache[filePath];
}
/**
* add ignore file to node-ignore instance
* @param {Object} ig, instance of node-ignore
* @param {string} filePath, file to add to ig
* @returns {array} raw ignore rules
*/
addIgnoreFile(ig, filePath) {
ig.ignoreFiles.push(filePath);
return ig.add(this.readIgnoreFile(filePath));
}
/**
* Determine whether a file path is included in the default or custom ignore patterns
* @param {string} filepath Path to check
+74 -4
View File
@@ -27,9 +27,11 @@ const assert = require("assert"),
Rules = require("./rules"),
timing = require("./timing"),
astUtils = require("./ast-utils"),
pkg = require("../package.json"),
SourceCodeFixer = require("./util/source-code-fixer");
pkg = require("../package.json");
const debug = require("debug")("eslint:linter");
const MAX_AUTOFIX_PASSES = 10;
//------------------------------------------------------------------------------
// Typedefs
@@ -453,8 +455,8 @@ function normalizeEcmaVersion(ecmaVersion, isModule) {
*/
function prepareConfig(config, envContext) {
config.globals = config.globals || {};
const copiedRules = Object.assign({}, defaultConfig.rules);
let parserOptions = Object.assign({}, defaultConfig.parserOptions);
const copiedRules = {};
let parserOptions = {};
if (typeof config.rules === "object") {
Object.keys(config.rules).forEach(k => {
@@ -1185,6 +1187,74 @@ class Linter extends EventEmitter {
getDeclaredVariables(node) {
return (this.scopeManager && this.scopeManager.getDeclaredVariables(node)) || [];
}
/**
* Performs multiple autofix passes over the text until as many fixes as possible
* have been applied.
* @param {string} text The source text to apply fixes to.
* @param {Object} config The ESLint config object to use.
* @param {Object} options The ESLint options object to use.
* @param {string} options.filename The filename from which the text was read.
* @param {boolean} options.allowInlineConfig Flag indicating if inline comments
* should be allowed.
* @returns {Object} The result of the fix operation as returned from the
* SourceCodeFixer.
*/
verifyAndFix(text, config, options) {
let messages = [],
fixedResult,
fixed = false,
passNumber = 0;
/**
* This loop continues until one of the following is true:
*
* 1. No more fixes have been applied.
* 2. Ten passes have been made.
*
* That means anytime a fix is successfully applied, there will be another pass.
* Essentially, guaranteeing a minimum of two passes.
*/
do {
passNumber++;
debug(`Linting code for ${options.filename} (pass ${passNumber})`);
messages = this.verify(text, config, options);
debug(`Generating fixed text for ${options.filename} (pass ${passNumber})`);
fixedResult = SourceCodeFixer.applyFixes(this.getSourceCode(), messages);
// stop if there are any syntax errors.
// 'fixedResult.output' is a empty string.
if (messages.length === 1 && messages[0].fatal) {
break;
}
// keep track if any fixes were ever applied - important for return value
fixed = fixed || fixedResult.fixed;
// update to use the fixed output instead of the original text
text = fixedResult.output;
} while (
fixedResult.fixed &&
passNumber < MAX_AUTOFIX_PASSES
);
/*
* If the last result had fixes, we need to lint again to be sure we have
* the most up-to-date information.
*/
if (fixedResult.fixed) {
fixedResult.messages = this.verify(text, config, options);
}
// ensure the last result properly reflects if fixes were done
fixedResult.fixed = fixed;
fixedResult.output = text;
return fixedResult;
}
}
// methods that exist on SourceCode object
+71 -6
View File
@@ -8,6 +8,7 @@
// Requirements
//------------------------------------------------------------------------------
const assert = require("assert");
const ruleFixer = require("./util/rule-fixer");
//------------------------------------------------------------------------------
@@ -60,6 +61,75 @@ const PASSTHROUGHS = [
// Rule Definition
//------------------------------------------------------------------------------
/**
* Compares items in a fixes array by range.
* @param {Fix} a The first message.
* @param {Fix} b The second message.
* @returns {int} -1 if a comes before b, 1 if a comes after b, 0 if equal.
* @private
*/
function compareFixesByRange(a, b) {
return a.range[0] - b.range[0] || a.range[1] - b.range[1];
}
/**
* Merges the given fixes array into one.
* @param {Fix[]} fixes The fixes to merge.
* @param {SourceCode} sourceCode The source code object to get the text between fixes.
* @returns {void}
*/
function mergeFixes(fixes, sourceCode) {
if (fixes.length === 0) {
return null;
}
if (fixes.length === 1) {
return fixes[0];
}
fixes.sort(compareFixesByRange);
const originalText = sourceCode.text;
const start = fixes[0].range[0];
const end = fixes[fixes.length - 1].range[1];
let text = "";
let lastPos = Number.MIN_SAFE_INTEGER;
for (const fix of fixes) {
assert(fix.range[0] >= lastPos, "Fix objects must not be overlapped in a report.");
if (fix.range[0] >= 0) {
text += originalText.slice(Math.max(0, start, lastPos), fix.range[0]);
}
text += fix.text;
lastPos = fix.range[1];
}
text += originalText.slice(Math.max(0, start, lastPos), end);
return { range: [start, end], text };
}
/**
* Gets one fix object from the given descriptor.
* If the descriptor retrieves multiple fixes, this merges those to one.
* @param {Object} descriptor The report descriptor.
* @param {SourceCode} sourceCode The source code object to get text between fixes.
* @returns {Fix} The got fix object.
*/
function getFix(descriptor, sourceCode) {
if (typeof descriptor.fix !== "function") {
return null;
}
// @type {null | Fix | Fix[] | IterableIterator<Fix>}
const fix = descriptor.fix(ruleFixer);
// Merge to one.
if (fix && Symbol.iterator in fix) {
return mergeFixes(Array.from(fix), sourceCode);
}
return fix;
}
/**
* Rule context class
* Acts as an abstraction layer between rules and the main eslint object.
@@ -120,12 +190,7 @@ class RuleContext {
// check to see if it's a new style call
if (arguments.length === 1) {
const descriptor = nodeOrDescriptor;
let fix = null;
// if there's a fix specified, get it
if (typeof descriptor.fix === "function") {
fix = descriptor.fix(ruleFixer);
}
const fix = getFix(descriptor, this.getSourceCode());
this.eslint.report(
this.id,
+88 -41
View File
@@ -65,6 +65,29 @@ module.exports = {
const requireReturnForObjectLiteral = options[1] && options[1].requireReturnForObjectLiteral;
const sourceCode = context.getSourceCode();
/**
* Checks whether the given node has ASI problem or not.
* @param {Token} token The token to check.
* @returns {boolean} `true` if it changes semantics if `;` or `}` followed by the token are removed.
*/
function hasASIProblem(token) {
return token && token.type === "Punctuator" && /^[([/`+-]/.test(token.value);
}
/**
* Gets the closing parenthesis which is the pair of the given opening parenthesis.
* @param {Token} token The opening parenthesis token to get.
* @returns {Token} The found closing parenthesis token.
*/
function findClosingParen(token) {
let node = sourceCode.getNodeByRangeIndex(token.range[1]);
while (!astUtils.isParenthesised(sourceCode, node)) {
node = node.parent;
}
return sourceCode.getTokenAfter(node);
}
/**
* Determines whether a arrow function body needs braces
* @param {ASTNode} node The arrow function node.
@@ -91,47 +114,55 @@ module.exports = {
loc: arrowBody.loc.start,
message: "Unexpected block statement surrounding arrow body.",
fix(fixer) {
if (blockBody.length !== 1 || blockBody[0].type !== "ReturnStatement" || !blockBody[0].argument) {
return null;
const fixes = [];
if (blockBody.length !== 1 ||
blockBody[0].type !== "ReturnStatement" ||
!blockBody[0].argument ||
hasASIProblem(sourceCode.getTokenAfter(arrowBody))
) {
return fixes;
}
const sourceText = sourceCode.getText();
const returnKeyword = sourceCode.getFirstToken(blockBody[0]);
const firstValueToken = sourceCode.getTokenAfter(returnKeyword);
let lastValueToken = sourceCode.getLastToken(blockBody[0]);
const openingBrace = sourceCode.getFirstToken(arrowBody);
const closingBrace = sourceCode.getLastToken(arrowBody);
const firstValueToken = sourceCode.getFirstToken(blockBody[0], 1);
const lastValueToken = sourceCode.getLastToken(blockBody[0]);
const commentsExist =
sourceCode.commentsExistBetween(openingBrace, firstValueToken) ||
sourceCode.commentsExistBetween(lastValueToken, closingBrace);
// Remove tokens around the return value.
// If comments don't exist, remove extra spaces as well.
if (commentsExist) {
fixes.push(
fixer.remove(openingBrace),
fixer.remove(closingBrace),
fixer.remove(sourceCode.getTokenAfter(openingBrace)) // return keyword
);
} else {
fixes.push(
fixer.removeRange([openingBrace.range[0], firstValueToken.range[0]]),
fixer.removeRange([lastValueToken.range[1], closingBrace.range[1]])
);
}
// If the first token of the reutrn value is `{`,
// enclose the return value by parentheses to avoid syntax error.
if (astUtils.isOpeningBraceToken(firstValueToken)) {
fixes.push(
fixer.insertTextBefore(firstValueToken, "("),
fixer.insertTextAfter(lastValueToken, ")")
);
}
// If the last token of the return statement is semicolon, remove it.
// Non-block arrow body is an expression, not a statement.
if (astUtils.isSemicolonToken(lastValueToken)) {
/* The last token of the returned value is the last token of the ReturnExpression (if
* the ReturnExpression has no semicolon), or the second-to-last token (if the ReturnExpression
* has a semicolon).
*/
lastValueToken = sourceCode.getTokenBefore(lastValueToken);
fixes.push(fixer.remove(lastValueToken));
}
const tokenAfterArrowBody = sourceCode.getTokenAfter(arrowBody);
if (tokenAfterArrowBody && tokenAfterArrowBody.type === "Punctuator" && /^[([/`+-]/.test(tokenAfterArrowBody.value)) {
// Don't do a fix if the next token would cause ASI issues when preceded by the returned value.
return null;
}
const textBeforeReturn = sourceText.slice(arrowBody.range[0] + 1, returnKeyword.range[0]);
const textBetweenReturnAndValue = sourceText.slice(returnKeyword.range[1], firstValueToken.range[0]);
const rawReturnValueText = sourceText.slice(firstValueToken.range[0], lastValueToken.range[1]);
const returnValueText = astUtils.isOpeningBraceToken(firstValueToken) ? `(${rawReturnValueText})` : rawReturnValueText;
const textAfterValue = sourceText.slice(lastValueToken.range[1], blockBody[0].range[1] - 1);
const textAfterReturnStatement = sourceText.slice(blockBody[0].range[1], arrowBody.range[1] - 1);
/*
* For fixes that only contain spaces around the return value, remove the extra spaces.
* This avoids ugly fixes that end up with extra spaces after the arrow, e.g. `() => 0 ;`
*/
return fixer.replaceText(
arrowBody,
(textBeforeReturn + textBetweenReturnAndValue).replace(/^\s*$/, "") + returnValueText + (textAfterValue + textAfterReturnStatement).replace(/^\s*$/, "")
);
return fixes;
}
});
}
@@ -142,13 +173,29 @@ module.exports = {
loc: arrowBody.loc.start,
message: "Expected block statement surrounding arrow body.",
fix(fixer) {
const lastTokenBeforeBody = sourceCode.getLastTokenBetween(sourceCode.getFirstToken(node), arrowBody, astUtils.isNotOpeningParenToken);
const firstBodyToken = sourceCode.getTokenAfter(lastTokenBeforeBody);
const fixes = [];
const arrowToken = sourceCode.getTokenBefore(arrowBody, astUtils.isArrowToken);
const firstBodyToken = sourceCode.getTokenAfter(arrowToken);
const lastBodyToken = sourceCode.getLastToken(node);
const isParenthesisedObjectLiteral =
astUtils.isOpeningParenToken(firstBodyToken) &&
astUtils.isOpeningBraceToken(sourceCode.getTokenAfter(firstBodyToken));
return fixer.replaceTextRange(
[firstBodyToken.range[0], node.range[1]],
`{return ${sourceCode.getText().slice(firstBodyToken.range[0], node.range[1])}}`
// Wrap the value by a block and a return statement.
fixes.push(
fixer.insertTextBefore(firstBodyToken, "{return "),
fixer.insertTextAfter(lastBodyToken, "}")
);
// If the value is object literal, remove parentheses which were forced by syntax.
if (isParenthesisedObjectLiteral) {
fixes.push(
fixer.remove(firstBodyToken),
fixer.remove(findClosingParen(firstBodyToken))
);
}
return fixes;
}
});
}
@@ -156,7 +203,7 @@ module.exports = {
}
return {
ArrowFunctionExpression: validate
"ArrowFunctionExpression:exit": validate
};
}
};
+26 -17
View File
@@ -658,7 +658,6 @@ module.exports = {
while (astUtils.isOpeningParenToken(token) && token !== startToken) {
token = sourceCode.getTokenBefore(token);
}
return sourceCode.getTokenAfter(token);
}
@@ -675,7 +674,6 @@ module.exports = {
if (offset === "first" && elements.length && !elements[0]) {
return;
}
elements.forEach((element, index) => {
if (offset === "off") {
offsets.ignoreToken(getFirstToken(element));
@@ -816,7 +814,6 @@ module.exports = {
offsets.ignoreToken(operator);
offsets.ignoreToken(tokensAfterOperator[0]);
offsets.setDesiredOffset(tokensAfterOperator[0], sourceCode.getFirstToken(node), 1);
offsets.setDesiredOffsets(tokensAfterOperator, tokensAfterOperator[0], 1);
}
@@ -882,6 +879,13 @@ module.exports = {
// We only want to handle parens around expressions, so exclude parentheses that are in function parameters and function call arguments.
if (!parameterParens.has(leftParen) && !parameterParens.has(rightParen)) {
const parenthesizedTokens = new Set(sourceCode.getTokensBetween(leftParen, rightParen));
parenthesizedTokens.forEach(token => {
if (!parenthesizedTokens.has(offsets.getFirstDependency(token))) {
offsets.setDesiredOffset(token, leftParen, 1);
}
});
offsets.setDesiredOffset(sourceCode.getTokenAfter(leftParen), leftParen, 1);
}
@@ -1114,28 +1118,29 @@ module.exports = {
const tokenBeforeObject = sourceCode.getTokenBefore(node.object, token => astUtils.isNotOpeningParenToken(token) || parameterParens.has(token));
const firstObjectToken = tokenBeforeObject ? sourceCode.getTokenAfter(tokenBeforeObject) : sourceCode.ast.tokens[0];
const lastObjectToken = sourceCode.getTokenBefore(firstNonObjectToken);
const firstPropertyToken = node.computed ? firstNonObjectToken : secondNonObjectToken;
if (node.computed) {
// For computed MemberExpressions, match the closing bracket with the opening bracket.
offsets.matchIndentOf(firstNonObjectToken, sourceCode.getLastToken(node));
offsets.setDesiredOffsets(getTokensAndComments(node.property), firstNonObjectToken, 1);
}
if (typeof options.MemberExpression === "number") {
const firstPropertyToken = node.computed ? firstNonObjectToken : secondNonObjectToken;
/*
* If the object ends on the same line that the property starts, match against the last token
* of the object, to ensure that the MemberExpression is not indented.
*
* Otherwise, match against the first token of the object, e.g.
* foo
* .bar
* .baz // <-- offset by 1 from `foo`
*/
const offsetBase = lastObjectToken.loc.end.line === firstPropertyToken.loc.start.line
? lastObjectToken
: firstObjectToken;
/*
* If the object ends on the same line that the property starts, match against the last token
* of the object, to ensure that the MemberExpression is not indented.
*
* Otherwise, match against the first token of the object, e.g.
* foo
* .bar
* .baz // <-- offset by 1 from `foo`
*/
const offsetBase = lastObjectToken.loc.end.line === firstPropertyToken.loc.start.line
? lastObjectToken
: firstObjectToken;
if (typeof options.MemberExpression === "number") {
// Match the dot (for non-computed properties) or the opening bracket (for computed properties) against the object.
offsets.setDesiredOffset(firstNonObjectToken, offsetBase, options.MemberExpression);
@@ -1150,6 +1155,9 @@ module.exports = {
// If the MemberExpression option is off, ignore the dot and the first token of the property.
offsets.ignoreToken(firstNonObjectToken);
offsets.ignoreToken(secondNonObjectToken);
// To ignore the property indentation, ensure that the property tokens depend on the ignored tokens.
offsets.matchIndentOf(offsetBase, firstNonObjectToken);
offsets.matchIndentOf(firstNonObjectToken, secondNonObjectToken);
}
},
@@ -1232,6 +1240,7 @@ module.exports = {
offsets.ignoreToken(equalOperator);
offsets.ignoreToken(tokenAfterOperator);
offsets.matchIndentOf(equalOperator, tokenAfterOperator);
offsets.matchIndentOf(sourceCode.getFirstToken(node), equalOperator);
}
},
+12 -1
View File
@@ -44,7 +44,8 @@ module.exports = {
conditionalAssign: { type: "boolean" },
nestedBinaryExpressions: { type: "boolean" },
returnAssign: { type: "boolean" },
ignoreJSX: { enum: ["none", "all", "single-line", "multi-line"] }
ignoreJSX: { enum: ["none", "all", "single-line", "multi-line"] },
enforceForArrowConditionals: { type: "boolean" }
},
additionalProperties: false
}
@@ -67,6 +68,9 @@ module.exports = {
const NESTED_BINARY = ALL_NODES && context.options[1] && context.options[1].nestedBinaryExpressions === false;
const EXCEPT_RETURN_ASSIGN = ALL_NODES && context.options[1] && context.options[1].returnAssign === false;
const IGNORE_JSX = ALL_NODES && context.options[1] && context.options[1].ignoreJSX;
const IGNORE_ARROW_CONDITIONALS = ALL_NODES && context.options[1] &&
context.options[1].enforceForArrowConditionals === false;
const PRECEDENCE_OF_ASSIGNMENT_EXPR = precedence({ type: "AssignmentExpression" });
const PRECEDENCE_OF_UPDATE_EXPR = precedence({ type: "UpdateExpression" });
@@ -448,6 +452,13 @@ module.exports = {
return;
}
if (node.body.type === "ConditionalExpression" &&
IGNORE_ARROW_CONDITIONALS &&
!isParenthesisedTwice(node.body)
) {
return;
}
if (node.body.type !== "BlockStatement") {
const firstBodyToken = sourceCode.getFirstToken(node.body, astUtils.isNotOpeningParenToken);
const tokenBeforeFirst = sourceCode.getTokenBefore(firstBodyToken);
+29 -3
View File
@@ -30,6 +30,9 @@ module.exports = {
properties: {
skipBlankLines: {
type: "boolean"
},
ignoreComments: {
type: "boolean"
}
},
additionalProperties: false
@@ -45,7 +48,8 @@ module.exports = {
NONBLANK = `${BLANK_CLASS}+$`;
const options = context.options[0] || {},
skipBlankLines = options.skipBlankLines || false;
skipBlankLines = options.skipBlankLines || false,
ignoreComments = typeof options.ignoreComments === "undefined" || options.ignoreComments;
/**
* Report the error message
@@ -72,6 +76,22 @@ module.exports = {
});
}
/**
* Given a list of comment nodes, return the line numbers for those comments.
* @param {Array} comments An array of comment nodes.
* @returns {number[]} An array of line numbers containing comments.
*/
function getCommentLineNumbers(comments) {
const lines = new Set();
comments.forEach(comment => {
for (let i = comment.loc.start.line; i <= comment.loc.end.line; i++) {
lines.add(i);
}
});
return lines;
}
//--------------------------------------------------------------------------
// Public
@@ -87,7 +107,10 @@ module.exports = {
const re = new RegExp(NONBLANK),
skipMatch = new RegExp(SKIP_BLANK),
lines = sourceCode.lines,
linebreaks = sourceCode.getText().match(astUtils.createGlobalLinebreakMatcher());
linebreaks = sourceCode.getText().match(astUtils.createGlobalLinebreakMatcher()),
comments = sourceCode.getAllComments(),
commentLineNumbers = getCommentLineNumbers(comments);
let totalLength = 0,
fixRange = [];
@@ -125,7 +148,10 @@ module.exports = {
}
fixRange = [rangeStart, rangeEnd];
report(node, location, fixRange);
if (!ignoreComments || !commentLineNumbers.has(location.line)) {
report(node, location, fixRange);
}
}
totalLength += lineLength;
+8 -6
View File
@@ -106,11 +106,10 @@ module.exports = {
* @private
*/
function checkBinary(node) {
if (node.left.typeAnnotation) {
return;
}
const leftNode = (node.left.typeAnnotation) ? node.left.typeAnnotation : node.left;
const rightNode = node.right;
const nonSpacedNode = getFirstNonSpacedToken(node.left, node.right);
const nonSpacedNode = getFirstNonSpacedToken(leftNode, rightNode);
if (nonSpacedNode) {
if (!(int32Hint && sourceCode.getText(node).substr(-2) === "|0")) {
@@ -143,8 +142,11 @@ module.exports = {
* @private
*/
function checkVar(node) {
if (node.init) {
const nonSpacedNode = getFirstNonSpacedToken(node.id, node.init);
const leftNode = (node.id.typeAnnotation) ? node.id.typeAnnotation : node.id;
const rightNode = node.init;
if (rightNode) {
const nonSpacedNode = getFirstNonSpacedToken(leftNode, rightNode);
if (nonSpacedNode) {
report(node, nonSpacedNode);
+4 -2
View File
@@ -468,9 +468,11 @@ class RuleTester {
)
);
const hasMessageOfThisRule = messages.some(m => m.ruleId === ruleName);
for (let i = 0, l = item.errors.length; i < l; i++) {
assert.ok(!("fatal" in messages[i]), `A fatal parsing error occurred: ${messages[i].message}`);
assert.equal(messages[i].ruleId, ruleName, "Error rule name should be the same as the name of the rule being tested");
assert(!messages[i].fatal, `A fatal parsing error occurred: ${messages[i].message}`);
assert(hasMessageOfThisRule, "Error rule name should be the same as the name of the rule being tested");
if (typeof item.errors[i] === "string" || item.errors[i] instanceof RegExp) {
+21
View File
@@ -12,6 +12,7 @@ const assert = require("assert");
const cursors = require("./cursors");
const ForwardTokenCursor = require("./forward-token-cursor");
const PaddedTokenCursor = require("./padded-token-cursor");
const utils = require("./utils");
const astUtils = require("../ast-utils");
//------------------------------------------------------------------------------
@@ -560,6 +561,26 @@ module.exports = class TokenStore {
).getAllTokens();
}
//--------------------------------------------------------------------------
// Others.
//--------------------------------------------------------------------------
/**
* Checks whether any comments exist or not between the given 2 nodes.
*
* @param {ASTNode} left - The node to check.
* @param {ASTNode} right - The node to check.
* @returns {boolean} `true` if one or more comments exist.
*/
commentsExistBetween(left, right) {
const index = utils.search(this[COMMENTS], left.range[1]);
return (
index < this[COMMENTS].length &&
this[COMMENTS][index].range[1] <= right.range[0]
);
}
/**
* Gets all comment tokens directly before the given node or token.
* @param {ASTNode|token} nodeOrToken The AST node or token to check for adjacent comment tokens.
+15
View File
@@ -56,6 +56,20 @@ function installSyncSaveDev(packages) {
childProcess.execSync(`npm i --save-dev ${packages}`, { stdio: "inherit", encoding: "utf8" });
}
/**
* Fetch `peerDependencies` of the given package by `npm show` command.
* @param {string} packageName The package name to fetch peerDependencies.
* @returns {string[]} Gotten peerDependencies.
*/
function fetchPeerDependencies(packageName) {
const fetchedText = childProcess.execSync(
`npm show --json ${packageName} peerDependencies`,
{ encoding: "utf8" }
).trim();
return JSON.parse(fetchedText || "{}");
}
/**
* Check whether node modules are include in a project's package.json.
*
@@ -140,6 +154,7 @@ function checkPackageJson(startDir) {
module.exports = {
installSyncSaveDev,
fetchPeerDependencies,
checkDeps,
checkDevDeps,
checkPackageJson
-1
View File
@@ -1 +0,0 @@
../remark/cli.js
+19 -47
View File
@@ -1,56 +1,34 @@
{
"_args": [
[
{
"raw": "acorn@^3.0.4",
"scope": null,
"escapedName": "acorn",
"name": "acorn",
"rawSpec": "^3.0.4",
"spec": ">=3.0.4 <4.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/acorn-jsx"
]
],
"_from": "acorn@>=3.0.4 <4.0.0",
"_from": "acorn@^3.0.4",
"_id": "acorn@3.3.0",
"_inCache": true,
"_location": "/acorn-jsx/acorn",
"_nodeVersion": "6.3.0",
"_npmOperationalInternal": {
"host": "packages-16-east.internal.npmjs.com",
"tmp": "tmp/acorn-3.3.0.tgz_1469481913382_0.3856039580423385"
},
"_npmUser": {
"name": "marijn",
"email": "marijnh@gmail.com"
},
"_npmVersion": "3.10.3",
"_inBundle": false,
"_integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
"_location": "/eslint/acorn-jsx/acorn",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "acorn@^3.0.4",
"scope": null,
"escapedName": "acorn",
"name": "acorn",
"escapedName": "acorn",
"rawSpec": "^3.0.4",
"spec": ">=3.0.4 <4.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^3.0.4"
},
"_requiredBy": [
"/acorn-jsx"
"/eslint/acorn-jsx"
],
"_resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
"_shasum": "45e37fb39e8da3f25baee3ff5369e2bb5f22017a",
"_shrinkwrap": null,
"_spec": "acorn@^3.0.4",
"_where": "/Users/trott/io.js/tools/node_modules/acorn-jsx",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/acorn-jsx",
"bin": {
"acorn": "./bin/acorn"
},
"bugs": {
"url": "https://github.com/ternjs/acorn/issues"
},
"bundleDependencies": false,
"contributors": [
{
"name": "List of Acorn contributors. Updated before every release."
@@ -227,39 +205,33 @@
"name": "zsjforcn"
}
],
"dependencies": {},
"deprecated": false,
"description": "ECMAScript parser",
"devDependencies": {
"rollup": "^0.34.1",
"rollup-plugin-buble": "^0.11.0",
"unicode-9.0.0": "^0.7.0"
},
"directories": {},
"dist": {
"shasum": "45e37fb39e8da3f25baee3ff5369e2bb5f22017a",
"tarball": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz"
},
"engines": {
"node": ">=0.4.0"
},
"gitHead": "693c5fe9257c3e114a7097dc9196d6e484e52809",
"homepage": "https://github.com/ternjs/acorn",
"jsnext:main": "dist/acorn.es.js",
"license": "MIT",
"main": "dist/acorn.js",
"maintainers": [
{
"name": "marijn",
"email": "marijnh@gmail.com"
"name": "Marijn Haverbeke",
"email": "marijnh@gmail.com",
"url": "http://marijnhaverbeke.nl"
},
{
"name": "rreverser",
"email": "me@rreverser.com"
"name": "Ingvar Stepanyan",
"email": "me@rreverser.com",
"url": "http://rreverser.com/"
}
],
"name": "acorn",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/ternjs/acorn.git"
+16 -44
View File
@@ -1,78 +1,50 @@
{
"_args": [
[
{
"raw": "acorn-jsx@^3.0.0",
"scope": null,
"escapedName": "acorn-jsx",
"name": "acorn-jsx",
"rawSpec": "^3.0.0",
"spec": ">=3.0.0 <4.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/espree"
]
],
"_from": "acorn-jsx@>=3.0.0 <4.0.0",
"_from": "acorn-jsx@^3.0.0",
"_id": "acorn-jsx@3.0.1",
"_inCache": true,
"_location": "/acorn-jsx",
"_nodeVersion": "6.0.0",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/acorn-jsx-3.0.1.tgz_1462206645285_0.17844340158626437"
},
"_npmUser": {
"name": "rreverser",
"email": "me@rreverser.com"
},
"_npmVersion": "3.8.6",
"_inBundle": false,
"_integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
"_location": "/eslint/acorn-jsx",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "acorn-jsx@^3.0.0",
"scope": null,
"escapedName": "acorn-jsx",
"name": "acorn-jsx",
"escapedName": "acorn-jsx",
"rawSpec": "^3.0.0",
"spec": ">=3.0.0 <4.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^3.0.0"
},
"_requiredBy": [
"/espree"
"/eslint/espree"
],
"_resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
"_shasum": "afdf9488fb1ecefc8348f6fb22f464e32a58b36b",
"_shrinkwrap": null,
"_spec": "acorn-jsx@^3.0.0",
"_where": "/Users/trott/io.js/tools/node_modules/espree",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/espree",
"bugs": {
"url": "https://github.com/RReverser/acorn-jsx/issues"
},
"bundleDependencies": false,
"dependencies": {
"acorn": "^3.0.4"
},
"deprecated": false,
"description": "Alternative, faster React.js JSX parser",
"devDependencies": {
"chai": "^3.0.0",
"mocha": "^2.2.5"
},
"directories": {},
"dist": {
"shasum": "afdf9488fb1ecefc8348f6fb22f464e32a58b36b",
"tarball": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz"
},
"gitHead": "05852d8ae9476b7f8a25e417665e2265528d5fb9",
"homepage": "https://github.com/RReverser/acorn-jsx",
"license": "MIT",
"maintainers": [
{
"name": "rreverser",
"email": "me@rreverser.com"
"name": "Ingvar Stepanyan",
"email": "me@rreverser.com",
"url": "http://rreverser.com/"
}
],
"name": "acorn-jsx",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/RReverser/acorn-jsx.git"
+21 -45
View File
@@ -1,56 +1,34 @@
{
"_args": [
[
{
"raw": "acorn@^5.0.1",
"scope": null,
"escapedName": "acorn",
"name": "acorn",
"rawSpec": "^5.0.1",
"spec": ">=5.0.1 <6.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/espree"
]
],
"_from": "acorn@>=5.0.1 <6.0.0",
"_from": "acorn@^5.0.1",
"_id": "acorn@5.0.3",
"_inCache": true,
"_location": "/acorn",
"_nodeVersion": "6.9.1",
"_npmOperationalInternal": {
"host": "packages-18-east.internal.npmjs.com",
"tmp": "tmp/acorn-5.0.3.tgz_1491067098969_0.3370379332918674"
},
"_npmUser": {
"name": "marijn",
"email": "marijnh@gmail.com"
},
"_npmVersion": "3.10.8",
"_inBundle": false,
"_integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0=",
"_location": "/eslint/acorn",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "acorn@^5.0.1",
"scope": null,
"escapedName": "acorn",
"name": "acorn",
"escapedName": "acorn",
"rawSpec": "^5.0.1",
"spec": ">=5.0.1 <6.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^5.0.1"
},
"_requiredBy": [
"/espree"
"/eslint/espree"
],
"_resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz",
"_shasum": "c460df08491463f028ccb82eab3730bf01087b3d",
"_shrinkwrap": null,
"_spec": "acorn@^5.0.1",
"_where": "/Users/trott/io.js/tools/node_modules/espree",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/espree",
"bin": {
"acorn": "./bin/acorn"
},
"bugs": {
"url": "https://github.com/ternjs/acorn/issues"
},
"bundleDependencies": false,
"contributors": [
{
"name": "List of Acorn contributors. Updated before every release."
@@ -242,7 +220,7 @@
"name": "zsjforcn"
}
],
"dependencies": {},
"deprecated": false,
"description": "ECMAScript parser",
"devDependencies": {
"eslint": "^3.18.0",
@@ -254,28 +232,26 @@
"rollup-plugin-buble": "^0.11.0",
"unicode-9.0.0": "^0.7.0"
},
"directories": {},
"dist": {
"shasum": "c460df08491463f028ccb82eab3730bf01087b3d",
"tarball": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz"
},
"engines": {
"node": ">=0.4.0"
},
"gitHead": "dc2a033831e0813496bdb558c70b9fdf4720f048",
"homepage": "https://github.com/ternjs/acorn",
"jsnext:main": "dist/acorn.es.js",
"license": "MIT",
"main": "dist/acorn.js",
"maintainers": [
{
"name": "marijn",
"email": "marijnh@gmail.com"
"name": "Marijn Haverbeke",
"email": "marijnh@gmail.com",
"url": "http://marijnhaverbeke.nl"
},
{
"name": "Ingvar Stepanyan",
"email": "me@rreverser.com",
"url": "http://rreverser.com/"
}
],
"name": "acorn",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/ternjs/acorn.git"
+13 -49
View File
@@ -1,57 +1,35 @@
{
"_args": [
[
{
"raw": "ajv-keywords@^1.0.0",
"scope": null,
"escapedName": "ajv-keywords",
"name": "ajv-keywords",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/table"
]
],
"_from": "ajv-keywords@>=1.0.0 <2.0.0",
"_from": "ajv-keywords@^1.0.0",
"_id": "ajv-keywords@1.5.1",
"_inCache": true,
"_location": "/ajv-keywords",
"_nodeVersion": "4.6.1",
"_npmOperationalInternal": {
"host": "packages-18-east.internal.npmjs.com",
"tmp": "tmp/ajv-keywords-1.5.1.tgz_1485107517951_0.29220994655042887"
},
"_npmUser": {
"name": "esp",
"email": "e.poberezkin@me.com"
},
"_npmVersion": "2.15.9",
"_inBundle": false,
"_integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=",
"_location": "/eslint/ajv-keywords",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "ajv-keywords@^1.0.0",
"scope": null,
"escapedName": "ajv-keywords",
"name": "ajv-keywords",
"escapedName": "ajv-keywords",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.0"
},
"_requiredBy": [
"/table"
"/eslint/table"
],
"_resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz",
"_shasum": "314dd0a4b3368fad3dfcdc54ede6171b886daf3c",
"_shrinkwrap": null,
"_spec": "ajv-keywords@^1.0.0",
"_where": "/Users/trott/io.js/tools/node_modules/table",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/table",
"author": {
"name": "Evgeny Poberezkin"
},
"bugs": {
"url": "https://github.com/epoberezkin/ajv-keywords/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "Custom JSON-Schema keywords for ajv validator",
"devDependencies": {
"ajv": "^4.10.0",
@@ -68,16 +46,10 @@
"pre-commit": "^1.1.3",
"uuid": "^3.0.1"
},
"directories": {},
"dist": {
"shasum": "314dd0a4b3368fad3dfcdc54ede6171b886daf3c",
"tarball": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz"
},
"files": [
"index.js",
"keywords"
],
"gitHead": "33c43a2b190c9929fe9e3e9a32a38dace146abf4",
"homepage": "https://github.com/epoberezkin/ajv-keywords#readme",
"keywords": [
"JSON-Schema",
@@ -86,18 +58,10 @@
],
"license": "MIT",
"main": "index.js",
"maintainers": [
{
"name": "esp",
"email": "e.poberezkin@me.com"
}
],
"name": "ajv-keywords",
"optionalDependencies": {},
"peerDependencies": {
"ajv": ">=4.10.0"
},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/epoberezkin/ajv-keywords.git"
+13 -52
View File
@@ -1,60 +1,39 @@
{
"_args": [
[
{
"raw": "ajv@^4.7.0",
"scope": null,
"escapedName": "ajv",
"name": "ajv",
"rawSpec": "^4.7.0",
"spec": ">=4.7.0 <5.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/table"
]
],
"_from": "ajv@>=4.7.0 <5.0.0",
"_from": "ajv@^4.7.0",
"_id": "ajv@4.11.8",
"_inCache": true,
"_location": "/ajv",
"_nodeVersion": "4.6.1",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/ajv-4.11.8.tgz_1493407396661_0.6132844805251807"
},
"_npmUser": {
"name": "esp",
"email": "e.poberezkin@me.com"
},
"_npmVersion": "2.15.9",
"_inBundle": false,
"_integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
"_location": "/eslint/ajv",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "ajv@^4.7.0",
"scope": null,
"escapedName": "ajv",
"name": "ajv",
"escapedName": "ajv",
"rawSpec": "^4.7.0",
"spec": ">=4.7.0 <5.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^4.7.0"
},
"_requiredBy": [
"/table"
"/eslint/table"
],
"_resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
"_shasum": "82ffb02b29e662ae53bdc20af15947706739c536",
"_shrinkwrap": null,
"_spec": "ajv@^4.7.0",
"_where": "/Users/trott/io.js/tools/node_modules/table",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/table",
"author": {
"name": "Evgeny Poberezkin"
},
"bugs": {
"url": "https://github.com/epoberezkin/ajv/issues"
},
"bundleDependencies": false,
"dependencies": {
"co": "^4.6.0",
"json-stable-stringify": "^1.0.1"
},
"deprecated": false,
"description": "Another JSON Schema Validator",
"devDependencies": {
"bluebird": "^3.1.5",
@@ -87,11 +66,6 @@
"uglify-js": "^2.6.1",
"watch": "^1.0.0"
},
"directories": {},
"dist": {
"shasum": "82ffb02b29e662ae53bdc20af15947706739c536",
"tarball": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz"
},
"files": [
"lib/",
"dist/",
@@ -99,7 +73,6 @@
"LICENSE",
".tonic_example.js"
],
"gitHead": "de9fad502273ade9bdcf976e418bdd5b61b14a07",
"homepage": "https://github.com/epoberezkin/ajv",
"keywords": [
"JSON",
@@ -113,16 +86,6 @@
],
"license": "MIT",
"main": "lib/ajv.js",
"maintainers": [
{
"name": "blakeembrey",
"email": "hello@blakeembrey.com"
},
{
"name": "esp",
"email": "e.poberezkin@me.com"
}
],
"name": "ajv",
"nyc": {
"exclude": [
@@ -134,11 +97,9 @@
"text-summary"
]
},
"optionalDependencies": {},
"publishConfig": {
"tag": "4.x"
},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/epoberezkin/ajv.git"
+13 -49
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "ansi-escapes@^2.0.0",
"scope": null,
"escapedName": "ansi-escapes",
"name": "ansi-escapes",
"rawSpec": "^2.0.0",
"spec": ">=2.0.0 <3.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/inquirer"
]
],
"_from": "ansi-escapes@>=2.0.0 <3.0.0",
"_from": "ansi-escapes@^2.0.0",
"_id": "ansi-escapes@2.0.0",
"_inCache": true,
"_location": "/ansi-escapes",
"_nodeVersion": "4.7.3",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/ansi-escapes-2.0.0.tgz_1492961578751_0.06489237071946263"
},
"_npmUser": {
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
},
"_npmVersion": "2.15.11",
"_inBundle": false,
"_integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=",
"_location": "/eslint/ansi-escapes",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "ansi-escapes@^2.0.0",
"scope": null,
"escapedName": "ansi-escapes",
"name": "ansi-escapes",
"escapedName": "ansi-escapes",
"rawSpec": "^2.0.0",
"spec": ">=2.0.0 <3.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^2.0.0"
},
"_requiredBy": [
"/inquirer"
"/eslint/inquirer"
],
"_resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz",
"_shasum": "5bae52be424878dd9783e8910e3fc2922e83c81b",
"_shrinkwrap": null,
"_spec": "ansi-escapes@^2.0.0",
"_where": "/Users/trott/io.js/tools/node_modules/inquirer",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/inquirer",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
@@ -53,24 +30,19 @@
"bugs": {
"url": "https://github.com/sindresorhus/ansi-escapes/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "ANSI escape codes for manipulating the terminal",
"devDependencies": {
"ava": "*",
"xo": "*"
},
"directories": {},
"dist": {
"shasum": "5bae52be424878dd9783e8910e3fc2922e83c81b",
"tarball": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz"
},
"engines": {
"node": ">=4"
},
"files": [
"index.js"
],
"gitHead": "5dcd620fd52165650d440152ce49fb3d3c679381",
"homepage": "https://github.com/sindresorhus/ansi-escapes#readme",
"keywords": [
"ansi",
@@ -98,15 +70,7 @@
"iterm2"
],
"license": "MIT",
"maintainers": [
{
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
}
],
"name": "ansi-escapes",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/sindresorhus/ansi-escapes.git"
+25 -48
View File
@@ -1,51 +1,28 @@
{
"_args": [
[
{
"raw": "ansi-regex@^2.0.0",
"scope": null,
"escapedName": "ansi-regex",
"name": "ansi-regex",
"rawSpec": "^2.0.0",
"spec": ">=2.0.0 <3.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/has-ansi"
]
],
"_from": "ansi-regex@>=2.0.0 <3.0.0",
"_from": "ansi-regex@^2.0.0",
"_id": "ansi-regex@2.1.1",
"_inCache": true,
"_location": "/ansi-regex",
"_nodeVersion": "0.10.32",
"_npmOperationalInternal": {
"host": "packages-18-east.internal.npmjs.com",
"tmp": "tmp/ansi-regex-2.1.1.tgz_1484363378013_0.4482989883981645"
},
"_npmUser": {
"name": "qix",
"email": "i.am.qix@gmail.com"
},
"_npmVersion": "2.14.2",
"_inBundle": false,
"_integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
"_location": "/eslint/ansi-regex",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "ansi-regex@^2.0.0",
"scope": null,
"escapedName": "ansi-regex",
"name": "ansi-regex",
"escapedName": "ansi-regex",
"rawSpec": "^2.0.0",
"spec": ">=2.0.0 <3.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^2.0.0"
},
"_requiredBy": [
"/has-ansi",
"/strip-ansi"
"/eslint/has-ansi",
"/eslint/strip-ansi"
],
"_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"_shasum": "c3b33ab5ee360d86e0e628f0468ae7ef27d654df",
"_shrinkwrap": null,
"_spec": "ansi-regex@^2.0.0",
"_where": "/Users/trott/io.js/tools/node_modules/has-ansi",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/has-ansi",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
@@ -54,24 +31,19 @@
"bugs": {
"url": "https://github.com/chalk/ansi-regex/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "Regular expression for matching ANSI escape codes",
"devDependencies": {
"ava": "0.17.0",
"xo": "0.16.0"
},
"directories": {},
"dist": {
"shasum": "c3b33ab5ee360d86e0e628f0468ae7ef27d654df",
"tarball": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz"
},
"engines": {
"node": ">=0.10.0"
},
"files": [
"index.js"
],
"gitHead": "7c908e7b4eb6cd82bfe1295e33fdf6d166c7ed85",
"homepage": "https://github.com/chalk/ansi-regex#readme",
"keywords": [
"ansi",
@@ -103,17 +75,22 @@
"license": "MIT",
"maintainers": [
{
"name": "qix",
"email": "i.am.qix@gmail.com"
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
"url": "sindresorhus.com"
},
{
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
"name": "Joshua Appelman",
"email": "jappelman@xebia.com",
"url": "jbnicolai.com"
},
{
"name": "JD Ballard",
"email": "i.am.qix@gmail.com",
"url": "github.com/qix-"
}
],
"name": "ansi-regex",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/chalk/ansi-regex.git"
+21 -45
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "ansi-styles@^2.2.1",
"scope": null,
"escapedName": "ansi-styles",
"name": "ansi-styles",
"rawSpec": "^2.2.1",
"spec": ">=2.2.1 <3.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/chalk"
]
],
"_from": "ansi-styles@>=2.2.1 <3.0.0",
"_from": "ansi-styles@^2.2.1",
"_id": "ansi-styles@2.2.1",
"_inCache": true,
"_location": "/ansi-styles",
"_nodeVersion": "4.3.0",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/ansi-styles-2.2.1.tgz_1459197317833_0.9694824463222176"
},
"_npmUser": {
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
},
"_npmVersion": "3.8.3",
"_inBundle": false,
"_integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
"_location": "/eslint/ansi-styles",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "ansi-styles@^2.2.1",
"scope": null,
"escapedName": "ansi-styles",
"name": "ansi-styles",
"escapedName": "ansi-styles",
"rawSpec": "^2.2.1",
"spec": ">=2.2.1 <3.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^2.2.1"
},
"_requiredBy": [
"/chalk"
"/eslint/chalk"
],
"_resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
"_shasum": "b432dd3358b634cf75e1e4664368240533c1ddbe",
"_shrinkwrap": null,
"_spec": "ansi-styles@^2.2.1",
"_where": "/Users/trott/io.js/tools/node_modules/chalk",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/chalk",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
@@ -53,23 +30,18 @@
"bugs": {
"url": "https://github.com/chalk/ansi-styles/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "ANSI escape codes for styling strings in the terminal",
"devDependencies": {
"mocha": "*"
},
"directories": {},
"dist": {
"shasum": "b432dd3358b634cf75e1e4664368240533c1ddbe",
"tarball": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz"
},
"engines": {
"node": ">=0.10.0"
},
"files": [
"index.js"
],
"gitHead": "95c59b23be760108b6530ca1c89477c21b258032",
"homepage": "https://github.com/chalk/ansi-styles#readme",
"keywords": [
"ansi",
@@ -96,13 +68,17 @@
"license": "MIT",
"maintainers": [
{
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
"url": "sindresorhus.com"
},
{
"name": "Joshua Appelman",
"email": "jappelman@xebia.com",
"url": "jbnicolai.com"
}
],
"name": "ansi-styles",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/chalk/ansi-styles.git"
+13 -48
View File
@@ -1,53 +1,31 @@
{
"_args": [
[
{
"raw": "argparse@^1.0.7",
"scope": null,
"escapedName": "argparse",
"name": "argparse",
"rawSpec": "^1.0.7",
"spec": ">=1.0.7 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/js-yaml"
]
],
"_from": "argparse@>=1.0.7 <2.0.0",
"_from": "argparse@^1.0.7",
"_id": "argparse@1.0.9",
"_inCache": true,
"_location": "/argparse",
"_nodeVersion": "6.5.0",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/argparse-1.0.9.tgz_1475177461025_0.33920647646300495"
},
"_npmUser": {
"name": "vitaly",
"email": "vitaly@rcdesign.ru"
},
"_npmVersion": "3.10.3",
"_inBundle": false,
"_integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
"_location": "/eslint/argparse",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "argparse@^1.0.7",
"scope": null,
"escapedName": "argparse",
"name": "argparse",
"escapedName": "argparse",
"rawSpec": "^1.0.7",
"spec": ">=1.0.7 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.7"
},
"_requiredBy": [
"/js-yaml"
"/eslint/js-yaml"
],
"_resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
"_shasum": "73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86",
"_shrinkwrap": null,
"_spec": "argparse@^1.0.7",
"_where": "/Users/trott/io.js/tools/node_modules/js-yaml",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/js-yaml",
"bugs": {
"url": "https://github.com/nodeca/argparse/issues"
},
"bundleDependencies": false,
"contributors": [
{
"name": "Eugene Shkuropat"
@@ -59,6 +37,7 @@
"dependencies": {
"sprintf-js": "~1.0.2"
},
"deprecated": false,
"description": "Very powerful CLI arguments parser. Native port of argparse - python's options parsing library",
"devDependencies": {
"eslint": "^2.13.1",
@@ -66,16 +45,10 @@
"mocha": "^3.1.0",
"ndoc": "^5.0.1"
},
"directories": {},
"dist": {
"shasum": "73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86",
"tarball": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz"
},
"files": [
"index.js",
"lib/"
],
"gitHead": "acb39f2d726b90d2eadf9e6574a938d6250ad248",
"homepage": "https://github.com/nodeca/argparse#readme",
"keywords": [
"cli",
@@ -85,15 +58,7 @@
"args"
],
"license": "MIT",
"maintainers": [
{
"name": "vitaly",
"email": "vitaly@rcdesign.ru"
}
],
"name": "argparse",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/nodeca/argparse.git"
+13 -48
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "array-union@^1.0.1",
"scope": null,
"escapedName": "array-union",
"name": "array-union",
"rawSpec": "^1.0.1",
"spec": ">=1.0.1 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/globby"
]
],
"_from": "array-union@>=1.0.1 <2.0.0",
"_from": "array-union@^1.0.1",
"_id": "array-union@1.0.2",
"_inCache": true,
"_location": "/array-union",
"_nodeVersion": "4.4.2",
"_npmOperationalInternal": {
"host": "packages-16-east.internal.npmjs.com",
"tmp": "tmp/array-union-1.0.2.tgz_1466079411551_0.23353995219804347"
},
"_npmUser": {
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
},
"_npmVersion": "2.15.0",
"_inBundle": false,
"_integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
"_location": "/eslint/array-union",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "array-union@^1.0.1",
"scope": null,
"escapedName": "array-union",
"name": "array-union",
"escapedName": "array-union",
"rawSpec": "^1.0.1",
"spec": ">=1.0.1 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.1"
},
"_requiredBy": [
"/globby"
"/eslint/globby"
],
"_resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
"_shasum": "9a34410e4f4e3da23dea375be5be70f24778ec39",
"_shrinkwrap": null,
"_spec": "array-union@^1.0.1",
"_where": "/Users/trott/io.js/tools/node_modules/globby",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/globby",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
@@ -53,26 +30,22 @@
"bugs": {
"url": "https://github.com/sindresorhus/array-union/issues"
},
"bundleDependencies": false,
"dependencies": {
"array-uniq": "^1.0.1"
},
"deprecated": false,
"description": "Create an array of unique values, in order, from the input arrays",
"devDependencies": {
"ava": "*",
"xo": "*"
},
"directories": {},
"dist": {
"shasum": "9a34410e4f4e3da23dea375be5be70f24778ec39",
"tarball": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz"
},
"engines": {
"node": ">=0.10.0"
},
"files": [
"index.js"
],
"gitHead": "34e1d6a80baa4eac9723795a0674c14119ace1bd",
"homepage": "https://github.com/sindresorhus/array-union#readme",
"keywords": [
"array",
@@ -87,15 +60,7 @@
"merge"
],
"license": "MIT",
"maintainers": [
{
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
}
],
"name": "array-union",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/sindresorhus/array-union.git"
+13 -49
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "array-uniq@^1.0.1",
"scope": null,
"escapedName": "array-uniq",
"name": "array-uniq",
"rawSpec": "^1.0.1",
"spec": ">=1.0.1 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/array-union"
]
],
"_from": "array-uniq@>=1.0.1 <2.0.0",
"_from": "array-uniq@^1.0.1",
"_id": "array-uniq@1.0.3",
"_inCache": true,
"_location": "/array-uniq",
"_nodeVersion": "4.4.2",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/array-uniq-1.0.3.tgz_1466079716839_0.9139188586268574"
},
"_npmUser": {
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
},
"_npmVersion": "2.15.0",
"_inBundle": false,
"_integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
"_location": "/eslint/array-uniq",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "array-uniq@^1.0.1",
"scope": null,
"escapedName": "array-uniq",
"name": "array-uniq",
"escapedName": "array-uniq",
"rawSpec": "^1.0.1",
"spec": ">=1.0.1 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.1"
},
"_requiredBy": [
"/array-union"
"/eslint/array-union"
],
"_resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
"_shasum": "af6ac877a25cc7f74e058894753858dfdb24fdb6",
"_shrinkwrap": null,
"_spec": "array-uniq@^1.0.1",
"_where": "/Users/trott/io.js/tools/node_modules/array-union",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/array-union",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
@@ -53,7 +30,8 @@
"bugs": {
"url": "https://github.com/sindresorhus/array-uniq/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "Create an array without duplicates",
"devDependencies": {
"ava": "*",
@@ -61,18 +39,12 @@
"require-uncached": "^1.0.2",
"xo": "*"
},
"directories": {},
"dist": {
"shasum": "af6ac877a25cc7f74e058894753858dfdb24fdb6",
"tarball": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz"
},
"engines": {
"node": ">=0.10.0"
},
"files": [
"index.js"
],
"gitHead": "3b5bf5a90a585b3950284d575f33d09663f6083a",
"homepage": "https://github.com/sindresorhus/array-uniq#readme",
"keywords": [
"array",
@@ -85,15 +57,7 @@
"remove"
],
"license": "MIT",
"maintainers": [
{
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
}
],
"name": "array-uniq",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/sindresorhus/array-uniq.git"
+13 -45
View File
@@ -1,46 +1,27 @@
{
"_args": [
[
{
"raw": "arrify@^1.0.0",
"scope": null,
"escapedName": "arrify",
"name": "arrify",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/globby"
]
],
"_from": "arrify@>=1.0.0 <2.0.0",
"_from": "arrify@^1.0.0",
"_id": "arrify@1.0.1",
"_inCache": true,
"_location": "/arrify",
"_nodeVersion": "4.2.1",
"_npmUser": {
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
},
"_npmVersion": "3.5.2",
"_inBundle": false,
"_integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
"_location": "/eslint/arrify",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "arrify@^1.0.0",
"scope": null,
"escapedName": "arrify",
"name": "arrify",
"escapedName": "arrify",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.0"
},
"_requiredBy": [
"/globby"
"/eslint/globby"
],
"_resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
"_shasum": "898508da2226f380df904728456849c1501a4b0d",
"_shrinkwrap": null,
"_spec": "arrify@^1.0.0",
"_where": "/Users/trott/io.js/tools/node_modules/globby",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/globby",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
@@ -49,24 +30,19 @@
"bugs": {
"url": "https://github.com/sindresorhus/arrify/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "Convert a value to an array",
"devDependencies": {
"ava": "*",
"xo": "*"
},
"directories": {},
"dist": {
"shasum": "898508da2226f380df904728456849c1501a4b0d",
"tarball": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz"
},
"engines": {
"node": ">=0.10.0"
},
"files": [
"index.js"
],
"gitHead": "087edee1a58d5adaac6cae5a107886121ef43783",
"homepage": "https://github.com/sindresorhus/arrify#readme",
"keywords": [
"array",
@@ -77,15 +53,7 @@
"value"
],
"license": "MIT",
"maintainers": [
{
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
}
],
"name": "arrify",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/sindresorhus/arrify.git"
+12 -68
View File
@@ -1,102 +1,46 @@
{
"_args": [
[
{
"raw": "babel-code-frame@^6.22.0",
"scope": null,
"escapedName": "babel-code-frame",
"name": "babel-code-frame",
"rawSpec": "^6.22.0",
"spec": ">=6.22.0 <7.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/eslint"
]
],
"_from": "babel-code-frame@>=6.22.0 <7.0.0",
"_from": "babel-code-frame@^6.22.0",
"_id": "babel-code-frame@6.22.0",
"_inCache": true,
"_location": "/babel-code-frame",
"_nodeVersion": "6.9.0",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/babel-code-frame-6.22.0.tgz_1484872404755_0.3806710622739047"
},
"_npmUser": {
"name": "hzoo",
"email": "hi@henryzoo.com"
},
"_npmVersion": "3.10.10",
"_inBundle": false,
"_integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=",
"_location": "/eslint/babel-code-frame",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "babel-code-frame@^6.22.0",
"scope": null,
"escapedName": "babel-code-frame",
"name": "babel-code-frame",
"escapedName": "babel-code-frame",
"rawSpec": "^6.22.0",
"spec": ">=6.22.0 <7.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^6.22.0"
},
"_requiredBy": [
"/eslint"
],
"_resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz",
"_shasum": "027620bee567a88c32561574e7fd0801d33118e4",
"_shrinkwrap": null,
"_spec": "babel-code-frame@^6.22.0",
"_where": "/Users/trott/io.js/tools/node_modules/eslint",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint",
"author": {
"name": "Sebastian McKenzie",
"email": "sebmck@gmail.com"
},
"bundleDependencies": false,
"dependencies": {
"chalk": "^1.1.0",
"esutils": "^2.0.2",
"js-tokens": "^3.0.0"
},
"deprecated": false,
"description": "Generate errors that contain a code frame that point to source locations.",
"devDependencies": {},
"directories": {},
"dist": {
"shasum": "027620bee567a88c32561574e7fd0801d33118e4",
"tarball": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz"
},
"homepage": "https://babeljs.io/",
"license": "MIT",
"main": "lib/index.js",
"maintainers": [
{
"name": "amasad",
"email": "amjad.masad@gmail.com"
},
{
"name": "hzoo",
"email": "hi@henryzoo.com"
},
{
"name": "jmm",
"email": "npm-public@jessemccarthy.net"
},
{
"name": "loganfsmyth",
"email": "loganfsmyth@gmail.com"
},
{
"name": "sebmck",
"email": "sebmck@gmail.com"
},
{
"name": "thejameskyle",
"email": "me@thejameskyle.com"
}
],
"name": "babel-code-frame",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "https://github.com/babel/babel/tree/master/packages/babel-code-frame"
},
"scripts": {},
"version": "6.22.0"
}
+11 -46
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "bail@^1.0.0",
"scope": null,
"escapedName": "bail",
"name": "bail",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/eslint/node_modules/unified"
]
],
"_from": "bail@>=1.0.0 <2.0.0",
"_from": "bail@^1.0.0",
"_id": "bail@1.0.1",
"_inCache": true,
"_inBundle": false,
"_integrity": "sha1-kSV53os5Gq3zxf30zSoPwiXfO8I=",
"_location": "/bail",
"_nodeVersion": "5.0.0",
"_npmOperationalInternal": {
"host": "packages-16-east.internal.npmjs.com",
"tmp": "tmp/bail-1.0.1.tgz_1469301368484_0.1634318893775344"
},
"_npmUser": {
"name": "wooorm",
"email": "tituswormer@gmail.com"
},
"_npmVersion": "3.3.6",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "bail@^1.0.0",
"scope": null,
"escapedName": "bail",
"name": "bail",
"escapedName": "bail",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.0"
},
"_requiredBy": [
"/unified"
],
"_resolved": "https://registry.npmjs.org/bail/-/bail-1.0.1.tgz",
"_shasum": "912579de8b391aadf3c5fdf4cd2a0fc225df3bc2",
"_shrinkwrap": null,
"_spec": "bail@^1.0.0",
"_where": "/Users/trott/io.js/tools/eslint/node_modules/unified",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/unified",
"author": {
"name": "Titus Wormer",
"email": "tituswormer@gmail.com",
@@ -53,6 +30,7 @@
"bugs": {
"url": "https://github.com/wooorm/bail/issues"
},
"bundleDependencies": false,
"contributors": [
{
"name": "Titus Wormer",
@@ -61,6 +39,7 @@
}
],
"dependencies": {},
"deprecated": false,
"description": "Throw a given error",
"devDependencies": {
"browserify": "^13.0.1",
@@ -74,15 +53,9 @@
"tape": "^4.0.0",
"xo": "^0.16.0"
},
"directories": {},
"dist": {
"shasum": "912579de8b391aadf3c5fdf4cd2a0fc225df3bc2",
"tarball": "https://registry.npmjs.org/bail/-/bail-1.0.1.tgz"
},
"files": [
"index.js"
],
"gitHead": "5f9cf008fe599445037e88974801dfd66f9c1911",
"homepage": "https://github.com/wooorm/bail#readme",
"keywords": [
"fail",
@@ -92,15 +65,7 @@
"error"
],
"license": "MIT",
"maintainers": [
{
"name": "wooorm",
"email": "tituswormer@gmail.com"
}
],
"name": "bail",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"remarkConfig": {
"output": true,
"plugins": [
+13 -48
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "balanced-match@^1.0.0",
"scope": null,
"escapedName": "balanced-match",
"name": "balanced-match",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/brace-expansion"
]
],
"_from": "balanced-match@>=1.0.0 <2.0.0",
"_from": "balanced-match@^1.0.0",
"_id": "balanced-match@1.0.0",
"_inCache": true,
"_location": "/balanced-match",
"_nodeVersion": "7.8.0",
"_npmOperationalInternal": {
"host": "s3://npm-registry-packages",
"tmp": "tmp/balanced-match-1.0.0.tgz_1497251909645_0.8755026108119637"
},
"_npmUser": {
"name": "juliangruber",
"email": "julian@juliangruber.com"
},
"_npmVersion": "4.2.0",
"_inBundle": false,
"_integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"_location": "/eslint/balanced-match",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "balanced-match@^1.0.0",
"scope": null,
"escapedName": "balanced-match",
"name": "balanced-match",
"escapedName": "balanced-match",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.0"
},
"_requiredBy": [
"/brace-expansion"
"/eslint/brace-expansion"
],
"_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"_shasum": "89b4d199ab2bee49de164ea02b89ce462d71b767",
"_shrinkwrap": null,
"_spec": "balanced-match@^1.0.0",
"_where": "/Users/trott/io.js/tools/node_modules/brace-expansion",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/brace-expansion",
"author": {
"name": "Julian Gruber",
"email": "mail@juliangruber.com",
@@ -53,18 +30,14 @@
"bugs": {
"url": "https://github.com/juliangruber/balanced-match/issues"
},
"bundleDependencies": false,
"dependencies": {},
"deprecated": false,
"description": "Match balanced character pairs, like \"{\" and \"}\"",
"devDependencies": {
"matcha": "^0.7.0",
"tape": "^4.6.0"
},
"directories": {},
"dist": {
"shasum": "89b4d199ab2bee49de164ea02b89ce462d71b767",
"tarball": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz"
},
"gitHead": "d701a549a7653a874eebce7eca25d3577dc868ac",
"homepage": "https://github.com/juliangruber/balanced-match",
"keywords": [
"match",
@@ -75,15 +48,7 @@
],
"license": "MIT",
"main": "index.js",
"maintainers": [
{
"name": "juliangruber",
"email": "julian@juliangruber.com"
}
],
"name": "balanced-match",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git://github.com/juliangruber/balanced-match.git"
+13 -52
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "brace-expansion@^1.1.7",
"scope": null,
"escapedName": "brace-expansion",
"name": "brace-expansion",
"rawSpec": "^1.1.7",
"spec": ">=1.1.7 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/minimatch"
]
],
"_from": "brace-expansion@>=1.1.7 <2.0.0",
"_from": "brace-expansion@^1.1.7",
"_id": "brace-expansion@1.1.8",
"_inCache": true,
"_location": "/brace-expansion",
"_nodeVersion": "7.8.0",
"_npmOperationalInternal": {
"host": "s3://npm-registry-packages",
"tmp": "tmp/brace-expansion-1.1.8.tgz_1497251980593_0.6575565172825009"
},
"_npmUser": {
"name": "juliangruber",
"email": "julian@juliangruber.com"
},
"_npmVersion": "4.2.0",
"_inBundle": false,
"_integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
"_location": "/eslint/brace-expansion",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "brace-expansion@^1.1.7",
"scope": null,
"escapedName": "brace-expansion",
"name": "brace-expansion",
"escapedName": "brace-expansion",
"rawSpec": "^1.1.7",
"spec": ">=1.1.7 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.1.7"
},
"_requiredBy": [
"/minimatch"
"/eslint/minimatch"
],
"_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
"_shasum": "c07b211c7c952ec1f8efd51a77ef0d1d3990a292",
"_shrinkwrap": null,
"_spec": "brace-expansion@^1.1.7",
"_where": "/Users/trott/io.js/tools/node_modules/minimatch",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/minimatch",
"author": {
"name": "Julian Gruber",
"email": "mail@juliangruber.com",
@@ -53,38 +30,22 @@
"bugs": {
"url": "https://github.com/juliangruber/brace-expansion/issues"
},
"bundleDependencies": false,
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
},
"deprecated": false,
"description": "Brace expansion as known from sh/bash",
"devDependencies": {
"matcha": "^0.7.0",
"tape": "^4.6.0"
},
"directories": {},
"dist": {
"shasum": "c07b211c7c952ec1f8efd51a77ef0d1d3990a292",
"tarball": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz"
},
"gitHead": "8f59e68bd5c915a0d624e8e39354e1ccf672edf6",
"homepage": "https://github.com/juliangruber/brace-expansion",
"keywords": [],
"license": "MIT",
"main": "index.js",
"maintainers": [
{
"name": "juliangruber",
"email": "julian@juliangruber.com"
},
{
"name": "isaacs",
"email": "isaacs@npmjs.com"
}
],
"name": "brace-expansion",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git://github.com/juliangruber/brace-expansion.git"
+15 -44
View File
@@ -1,45 +1,27 @@
{
"_args": [
[
{
"raw": "caller-path@^0.1.0",
"scope": null,
"escapedName": "caller-path",
"name": "caller-path",
"rawSpec": "^0.1.0",
"spec": ">=0.1.0 <0.2.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/require-uncached"
]
],
"_from": "caller-path@>=0.1.0 <0.2.0",
"_from": "caller-path@^0.1.0",
"_id": "caller-path@0.1.0",
"_inCache": true,
"_location": "/caller-path",
"_npmUser": {
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
},
"_npmVersion": "1.4.6",
"_inBundle": false,
"_integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
"_location": "/eslint/caller-path",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "caller-path@^0.1.0",
"scope": null,
"escapedName": "caller-path",
"name": "caller-path",
"escapedName": "caller-path",
"rawSpec": "^0.1.0",
"spec": ">=0.1.0 <0.2.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^0.1.0"
},
"_requiredBy": [
"/require-uncached"
"/eslint/require-uncached"
],
"_resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
"_shasum": "94085ef63581ecd3daa92444a8fe94e82577751f",
"_shrinkwrap": null,
"_spec": "caller-path@^0.1.0",
"_where": "/Users/trott/io.js/tools/node_modules/require-uncached",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/require-uncached",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
@@ -48,25 +30,22 @@
"bugs": {
"url": "https://github.com/sindresorhus/caller-path/issues"
},
"bundleDependencies": false,
"dependencies": {
"callsites": "^0.2.0"
},
"deprecated": false,
"description": "Get the path of the caller module",
"devDependencies": {
"mocha": "*"
},
"directories": {},
"dist": {
"shasum": "94085ef63581ecd3daa92444a8fe94e82577751f",
"tarball": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz"
},
"engines": {
"node": ">=0.10.0"
},
"files": [
"index.js"
],
"homepage": "https://github.com/sindresorhus/caller-path",
"homepage": "https://github.com/sindresorhus/caller-path#readme",
"keywords": [
"caller",
"calling",
@@ -82,18 +61,10 @@
"file"
],
"license": "MIT",
"maintainers": [
{
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
}
],
"name": "caller-path",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git://github.com/sindresorhus/caller-path.git"
"url": "git+https://github.com/sindresorhus/caller-path.git"
},
"scripts": {
"test": "mocha"
+15 -45
View File
@@ -1,45 +1,27 @@
{
"_args": [
[
{
"raw": "callsites@^0.2.0",
"scope": null,
"escapedName": "callsites",
"name": "callsites",
"rawSpec": "^0.2.0",
"spec": ">=0.2.0 <0.3.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/caller-path"
]
],
"_from": "callsites@>=0.2.0 <0.3.0",
"_from": "callsites@^0.2.0",
"_id": "callsites@0.2.0",
"_inCache": true,
"_location": "/callsites",
"_npmUser": {
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
},
"_npmVersion": "1.4.6",
"_inBundle": false,
"_integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
"_location": "/eslint/callsites",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "callsites@^0.2.0",
"scope": null,
"escapedName": "callsites",
"name": "callsites",
"escapedName": "callsites",
"rawSpec": "^0.2.0",
"spec": ">=0.2.0 <0.3.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^0.2.0"
},
"_requiredBy": [
"/caller-path"
"/eslint/caller-path"
],
"_resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
"_shasum": "afab96262910a7f33c19a5775825c69f34e350ca",
"_shrinkwrap": null,
"_spec": "callsites@^0.2.0",
"_where": "/Users/trott/io.js/tools/node_modules/caller-path",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/caller-path",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
@@ -48,23 +30,19 @@
"bugs": {
"url": "https://github.com/sindresorhus/callsites/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "Get callsites from the V8 stack trace API",
"devDependencies": {
"mocha": "*"
},
"directories": {},
"dist": {
"shasum": "afab96262910a7f33c19a5775825c69f34e350ca",
"tarball": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz"
},
"engines": {
"node": ">=0.10.0"
},
"files": [
"index.js"
],
"homepage": "https://github.com/sindresorhus/callsites",
"homepage": "https://github.com/sindresorhus/callsites#readme",
"keywords": [
"callsites",
"callsite",
@@ -78,18 +56,10 @@
"debug"
],
"license": "MIT",
"maintainers": [
{
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
}
],
"name": "callsites",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git://github.com/sindresorhus/callsites.git"
"url": "git+https://github.com/sindresorhus/callsites.git"
},
"scripts": {
"test": "mocha"
+11 -46
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "ccount@^1.0.0",
"scope": null,
"escapedName": "ccount",
"name": "ccount",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/eslint/node_modules/remark-stringify"
]
],
"_from": "ccount@>=1.0.0 <2.0.0",
"_from": "ccount@^1.0.0",
"_id": "ccount@1.0.1",
"_inCache": true,
"_inBundle": false,
"_integrity": "sha1-ZlaHlFFowhjsd/9hpBVa4AInqWw=",
"_location": "/ccount",
"_nodeVersion": "5.0.0",
"_npmOperationalInternal": {
"host": "packages-16-east.internal.npmjs.com",
"tmp": "tmp/ccount-1.0.1.tgz_1469303388454_0.4032677055802196"
},
"_npmUser": {
"name": "wooorm",
"email": "tituswormer@gmail.com"
},
"_npmVersion": "3.3.6",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "ccount@^1.0.0",
"scope": null,
"escapedName": "ccount",
"name": "ccount",
"escapedName": "ccount",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.0"
},
"_requiredBy": [
"/remark-stringify"
],
"_resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.1.tgz",
"_shasum": "665687945168c218ec77ff61a4155ae00227a96c",
"_shrinkwrap": null,
"_spec": "ccount@^1.0.0",
"_where": "/Users/trott/io.js/tools/eslint/node_modules/remark-stringify",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/remark-stringify",
"author": {
"name": "Titus Wormer",
"email": "tituswormer@gmail.com",
@@ -53,6 +30,7 @@
"bugs": {
"url": "https://github.com/wooorm/ccount/issues"
},
"bundleDependencies": false,
"contributors": [
{
"name": "Titus Wormer",
@@ -61,6 +39,7 @@
}
],
"dependencies": {},
"deprecated": false,
"description": "Count characters",
"devDependencies": {
"browserify": "^13.0.1",
@@ -74,15 +53,9 @@
"tape": "^4.0.0",
"xo": "^0.16.0"
},
"directories": {},
"dist": {
"shasum": "665687945168c218ec77ff61a4155ae00227a96c",
"tarball": "https://registry.npmjs.org/ccount/-/ccount-1.0.1.tgz"
},
"files": [
"index.js"
],
"gitHead": "5a787f3e93dd18d121b9bd4be6d1da96c8c17187",
"homepage": "https://github.com/wooorm/ccount#readme",
"keywords": [
"character",
@@ -90,15 +63,7 @@
"char"
],
"license": "MIT",
"maintainers": [
{
"name": "wooorm",
"email": "tituswormer@gmail.com"
}
],
"name": "ccount",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"remarkConfig": {
"output": true,
"plugins": [
+24 -50
View File
@@ -1,56 +1,34 @@
{
"_args": [
[
{
"raw": "chalk@^1.1.3",
"scope": null,
"escapedName": "chalk",
"name": "chalk",
"rawSpec": "^1.1.3",
"spec": ">=1.1.3 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/eslint"
]
],
"_from": "chalk@>=1.1.3 <2.0.0",
"_from": "chalk@^1.1.3",
"_id": "chalk@1.1.3",
"_inCache": true,
"_location": "/chalk",
"_nodeVersion": "0.10.32",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/chalk-1.1.3.tgz_1459210604109_0.3892582862172276"
},
"_npmUser": {
"name": "qix",
"email": "i.am.qix@gmail.com"
},
"_npmVersion": "2.14.2",
"_inBundle": false,
"_integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"_location": "/eslint/chalk",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "chalk@^1.1.3",
"scope": null,
"escapedName": "chalk",
"name": "chalk",
"escapedName": "chalk",
"rawSpec": "^1.1.3",
"spec": ">=1.1.3 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.1.3"
},
"_requiredBy": [
"/babel-code-frame",
"/eslint",
"/inquirer",
"/table"
"/eslint/babel-code-frame",
"/eslint/inquirer",
"/eslint/table"
],
"_resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"_shasum": "a8115c55e4a702fe4d150abd3872822a7e09fc98",
"_shrinkwrap": null,
"_spec": "chalk@^1.1.3",
"_where": "/Users/trott/io.js/tools/node_modules/eslint",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint",
"bugs": {
"url": "https://github.com/chalk/chalk/issues"
},
"bundleDependencies": false,
"dependencies": {
"ansi-styles": "^2.2.1",
"escape-string-regexp": "^1.0.2",
@@ -58,6 +36,7 @@
"strip-ansi": "^3.0.0",
"supports-color": "^2.0.0"
},
"deprecated": false,
"description": "Terminal string styling done right. Much color.",
"devDependencies": {
"coveralls": "^2.11.2",
@@ -69,18 +48,12 @@
"semver": "^4.3.3",
"xo": "*"
},
"directories": {},
"dist": {
"shasum": "a8115c55e4a702fe4d150abd3872822a7e09fc98",
"tarball": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz"
},
"engines": {
"node": ">=0.10.0"
},
"files": [
"index.js"
],
"gitHead": "0d8d8c204eb87a4038219131ad4d8369c9f59d24",
"homepage": "https://github.com/chalk/chalk#readme",
"keywords": [
"color",
@@ -108,21 +81,22 @@
"license": "MIT",
"maintainers": [
{
"name": "qix",
"email": "i.am.qix@gmail.com"
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
"url": "sindresorhus.com"
},
{
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
"name": "Joshua Appelman",
"email": "jappelman@xebia.com",
"url": "jbnicolai.com"
},
{
"name": "unicorn",
"email": "sindresorhus+unicorn@gmail.com"
"name": "JD Ballard",
"email": "i.am.qix@gmail.com",
"url": "github.com/qix-"
}
],
"name": "chalk",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/chalk/chalk.git"
+11 -46
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "character-entities-html4@^1.0.0",
"scope": null,
"escapedName": "character-entities-html4",
"name": "character-entities-html4",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/eslint/node_modules/stringify-entities"
]
],
"_from": "character-entities-html4@>=1.0.0 <2.0.0",
"_from": "character-entities-html4@^1.0.0",
"_id": "character-entities-html4@1.1.0",
"_inCache": true,
"_inBundle": false,
"_integrity": "sha1-GrCFUdPOH6HfCNAPucod77FHoGw=",
"_location": "/character-entities-html4",
"_nodeVersion": "4.0.0",
"_npmOperationalInternal": {
"host": "packages-18-east.internal.npmjs.com",
"tmp": "tmp/character-entities-html4-1.1.0.tgz_1478288953070_0.18045797967351973"
},
"_npmUser": {
"name": "wooorm",
"email": "tituswormer@gmail.com"
},
"_npmVersion": "2.14.2",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "character-entities-html4@^1.0.0",
"scope": null,
"escapedName": "character-entities-html4",
"name": "character-entities-html4",
"escapedName": "character-entities-html4",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.0"
},
"_requiredBy": [
"/stringify-entities"
],
"_resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.0.tgz",
"_shasum": "1ab08551d3ce1fa1df08d00fb9ca1defb147a06c",
"_shrinkwrap": null,
"_spec": "character-entities-html4@^1.0.0",
"_where": "/Users/trott/io.js/tools/eslint/node_modules/stringify-entities",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/stringify-entities",
"author": {
"name": "Titus Wormer",
"email": "tituswormer@gmail.com",
@@ -53,6 +30,7 @@
"bugs": {
"url": "https://github.com/wooorm/character-entities-html4/issues"
},
"bundleDependencies": false,
"contributors": [
{
"name": "Titus Wormer",
@@ -61,6 +39,7 @@
}
],
"dependencies": {},
"deprecated": false,
"description": "HTML4 character entity information",
"devDependencies": {
"bail": "^1.0.1",
@@ -73,15 +52,9 @@
"tape": "^4.0.0",
"xo": "^0.17.0"
},
"directories": {},
"dist": {
"shasum": "1ab08551d3ce1fa1df08d00fb9ca1defb147a06c",
"tarball": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.0.tgz"
},
"files": [
"index.json"
],
"gitHead": "85835d7948614c96443f5191ea0e2265b41987da",
"homepage": "https://github.com/wooorm/character-entities-html4#readme",
"keywords": [
"html",
@@ -95,15 +68,7 @@
],
"license": "MIT",
"main": "index.json",
"maintainers": [
{
"name": "wooorm",
"email": "tituswormer@gmail.com"
}
],
"name": "character-entities-html4",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"remarkConfig": {
"output": true,
"presets": "wooorm"
+11 -46
View File
@@ -1,41 +1,19 @@
{
"_args": [
[
{
"raw": "character-entities-legacy@^1.0.0",
"scope": null,
"escapedName": "character-entities-legacy",
"name": "character-entities-legacy",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/eslint/node_modules/parse-entities"
]
],
"_from": "character-entities-legacy@>=1.0.0 <2.0.0",
"_from": "character-entities-legacy@^1.0.0",
"_id": "character-entities-legacy@1.1.0",
"_inCache": true,
"_inBundle": false,
"_integrity": "sha1-sYqtmPa3vMZGweTIH58ZVjdqVho=",
"_location": "/character-entities-legacy",
"_nodeVersion": "4.0.0",
"_npmOperationalInternal": {
"host": "packages-18-east.internal.npmjs.com",
"tmp": "tmp/character-entities-legacy-1.1.0.tgz_1478279027342_0.273034636862576"
},
"_npmUser": {
"name": "wooorm",
"email": "tituswormer@gmail.com"
},
"_npmVersion": "2.14.2",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "character-entities-legacy@^1.0.0",
"scope": null,
"escapedName": "character-entities-legacy",
"name": "character-entities-legacy",
"escapedName": "character-entities-legacy",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.0"
},
"_requiredBy": [
"/parse-entities",
@@ -43,9 +21,8 @@
],
"_resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.0.tgz",
"_shasum": "b18aad98f6b7bcc646c1e4c81f9f1956376a561a",
"_shrinkwrap": null,
"_spec": "character-entities-legacy@^1.0.0",
"_where": "/Users/trott/io.js/tools/eslint/node_modules/parse-entities",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/parse-entities",
"author": {
"name": "Titus Wormer",
"email": "tituswormer@gmail.com",
@@ -54,6 +31,7 @@
"bugs": {
"url": "https://github.com/wooorm/character-entities-legacy/issues"
},
"bundleDependencies": false,
"contributors": [
{
"name": "Titus Wormer",
@@ -62,6 +40,7 @@
}
],
"dependencies": {},
"deprecated": false,
"description": "HTML legacy character entity information",
"devDependencies": {
"bail": "^1.0.1",
@@ -74,15 +53,9 @@
"tape": "^4.0.0",
"xo": "^0.17.0"
},
"directories": {},
"dist": {
"shasum": "b18aad98f6b7bcc646c1e4c81f9f1956376a561a",
"tarball": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.0.tgz"
},
"files": [
"index.json"
],
"gitHead": "2cc6c73d528560ba4664f47a4e7979ab85b245b4",
"homepage": "https://github.com/wooorm/character-entities-legacy#readme",
"keywords": [
"html",
@@ -95,15 +68,7 @@
],
"license": "MIT",
"main": "index.json",
"maintainers": [
{
"name": "wooorm",
"email": "tituswormer@gmail.com"
}
],
"name": "character-entities-legacy",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"remarkConfig": {
"output": true,
"presets": "wooorm"
+11 -46
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "character-entities@^1.0.0",
"scope": null,
"escapedName": "character-entities",
"name": "character-entities",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/eslint/node_modules/parse-entities"
]
],
"_from": "character-entities@>=1.0.0 <2.0.0",
"_from": "character-entities@^1.0.0",
"_id": "character-entities@1.2.0",
"_inCache": true,
"_inBundle": false,
"_integrity": "sha1-poPiz3Xb6LFxljUxNk5Y4YobFV8=",
"_location": "/character-entities",
"_nodeVersion": "4.0.0",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/character-entities-1.2.0.tgz_1478289534115_0.5894565787166357"
},
"_npmUser": {
"name": "wooorm",
"email": "tituswormer@gmail.com"
},
"_npmVersion": "2.14.2",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "character-entities@^1.0.0",
"scope": null,
"escapedName": "character-entities",
"name": "character-entities",
"escapedName": "character-entities",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.0"
},
"_requiredBy": [
"/parse-entities"
],
"_resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.0.tgz",
"_shasum": "a683e2cf75dbe8b171963531364e58e18a1b155f",
"_shrinkwrap": null,
"_spec": "character-entities@^1.0.0",
"_where": "/Users/trott/io.js/tools/eslint/node_modules/parse-entities",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/parse-entities",
"author": {
"name": "Titus Wormer",
"email": "tituswormer@gmail.com",
@@ -53,6 +30,7 @@
"bugs": {
"url": "https://github.com/wooorm/character-entities/issues"
},
"bundleDependencies": false,
"contributors": [
{
"name": "Titus Wormer",
@@ -61,6 +39,7 @@
}
],
"dependencies": {},
"deprecated": false,
"description": "HTML character entity information",
"devDependencies": {
"bail": "^1.0.1",
@@ -73,15 +52,9 @@
"tape": "^4.0.0",
"xo": "^0.17.0"
},
"directories": {},
"dist": {
"shasum": "a683e2cf75dbe8b171963531364e58e18a1b155f",
"tarball": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.0.tgz"
},
"files": [
"index.json"
],
"gitHead": "c091dd2371a10a25095de2967ebb95458389fdb4",
"homepage": "https://github.com/wooorm/character-entities#readme",
"keywords": [
"html",
@@ -94,15 +67,7 @@
],
"license": "MIT",
"main": "index.json",
"maintainers": [
{
"name": "wooorm",
"email": "tituswormer@gmail.com"
}
],
"name": "character-entities",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"remarkConfig": {
"output": true,
"presets": "wooorm"
+11 -46
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "character-reference-invalid@^1.0.0",
"scope": null,
"escapedName": "character-reference-invalid",
"name": "character-reference-invalid",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/eslint/node_modules/parse-entities"
]
],
"_from": "character-reference-invalid@>=1.0.0 <2.0.0",
"_from": "character-reference-invalid@^1.0.0",
"_id": "character-reference-invalid@1.1.0",
"_inCache": true,
"_inBundle": false,
"_integrity": "sha1-3smtHfufjQa0/NqircPE/ZevHmg=",
"_location": "/character-reference-invalid",
"_nodeVersion": "4.0.0",
"_npmOperationalInternal": {
"host": "packages-18-east.internal.npmjs.com",
"tmp": "tmp/character-reference-invalid-1.1.0.tgz_1478290328584_0.23455824935808778"
},
"_npmUser": {
"name": "wooorm",
"email": "tituswormer@gmail.com"
},
"_npmVersion": "2.14.2",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "character-reference-invalid@^1.0.0",
"scope": null,
"escapedName": "character-reference-invalid",
"name": "character-reference-invalid",
"escapedName": "character-reference-invalid",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.0"
},
"_requiredBy": [
"/parse-entities"
],
"_resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.0.tgz",
"_shasum": "dec9ad1dfb9f8d06b4fcdaa2adc3c4fd97af1e68",
"_shrinkwrap": null,
"_spec": "character-reference-invalid@^1.0.0",
"_where": "/Users/trott/io.js/tools/eslint/node_modules/parse-entities",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/parse-entities",
"author": {
"name": "Titus Wormer",
"email": "tituswormer@gmail.com",
@@ -53,6 +30,7 @@
"bugs": {
"url": "https://github.com/wooorm/character-reference-invalid/issues"
},
"bundleDependencies": false,
"contributors": [
{
"name": "Titus Wormer",
@@ -61,6 +39,7 @@
}
],
"dependencies": {},
"deprecated": false,
"description": "HTML invalid numeric character reference information",
"devDependencies": {
"bail": "^1.0.1",
@@ -73,15 +52,9 @@
"tape": "^4.0.0",
"xo": "^0.17.0"
},
"directories": {},
"dist": {
"shasum": "dec9ad1dfb9f8d06b4fcdaa2adc3c4fd97af1e68",
"tarball": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.0.tgz"
},
"files": [
"index.json"
],
"gitHead": "66104251bb83f85958dcb9328a5873003fea27a2",
"homepage": "https://github.com/wooorm/character-reference-invalid#readme",
"keywords": [
"html",
@@ -95,15 +68,7 @@
],
"license": "MIT",
"main": "index.json",
"maintainers": [
{
"name": "wooorm",
"email": "tituswormer@gmail.com"
}
],
"name": "character-reference-invalid",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"remarkConfig": {
"output": true,
"presets": "wooorm"
+13 -49
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "circular-json@^0.3.1",
"scope": null,
"escapedName": "circular-json",
"name": "circular-json",
"rawSpec": "^0.3.1",
"spec": ">=0.3.1 <0.4.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/flat-cache"
]
],
"_from": "circular-json@>=0.3.1 <0.4.0",
"_from": "circular-json@^0.3.1",
"_id": "circular-json@0.3.1",
"_inCache": true,
"_location": "/circular-json",
"_nodeVersion": "6.3.1",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/circular-json-0.3.1.tgz_1470074424027_0.9458420514129102"
},
"_npmUser": {
"name": "webreflection",
"email": "andrea.giammarchi@gmail.com"
},
"_npmVersion": "3.10.5",
"_inBundle": false,
"_integrity": "sha1-vos2rvzN6LPKeqLWr8B6NyQsDS0=",
"_location": "/eslint/circular-json",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "circular-json@^0.3.1",
"scope": null,
"escapedName": "circular-json",
"name": "circular-json",
"escapedName": "circular-json",
"rawSpec": "^0.3.1",
"spec": ">=0.3.1 <0.4.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^0.3.1"
},
"_requiredBy": [
"/flat-cache"
"/eslint/flat-cache"
],
"_resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz",
"_shasum": "be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d",
"_shrinkwrap": null,
"_spec": "circular-json@^0.3.1",
"_where": "/Users/trott/io.js/tools/node_modules/flat-cache",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/flat-cache",
"author": {
"name": "Andrea Giammarchi",
"url": "http://webreflection.blogspot.com/"
@@ -52,18 +29,13 @@
"bugs": {
"url": "https://github.com/WebReflection/circular-json/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "JSON does not handle circular references. This version does",
"devDependencies": {
"wru": "*"
},
"directories": {},
"dist": {
"shasum": "be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d",
"tarball": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz"
},
"generator": "https://github.com/WebReflection/gitstrap",
"gitHead": "54e5be62cf7f8b761ad120ea7a986da7fbffa5b9",
"homepage": "https://github.com/WebReflection/circular-json",
"keywords": [
"JSON",
@@ -76,15 +48,7 @@
],
"license": "MIT",
"main": "./build/circular-json.node.js",
"maintainers": [
{
"name": "webreflection",
"email": "andrea.giammarchi@gmail.com"
}
],
"name": "circular-json",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git://github.com/WebReflection/circular-json.git"
+13 -48
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "cli-cursor@^2.1.0",
"scope": null,
"escapedName": "cli-cursor",
"name": "cli-cursor",
"rawSpec": "^2.1.0",
"spec": ">=2.1.0 <3.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/inquirer"
]
],
"_from": "cli-cursor@>=2.1.0 <3.0.0",
"_from": "cli-cursor@^2.1.0",
"_id": "cli-cursor@2.1.0",
"_inCache": true,
"_location": "/cli-cursor",
"_nodeVersion": "4.6.2",
"_npmOperationalInternal": {
"host": "packages-18-east.internal.npmjs.com",
"tmp": "tmp/cli-cursor-2.1.0.tgz_1483990808692_0.16963833128102124"
},
"_npmUser": {
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
},
"_npmVersion": "2.15.11",
"_inBundle": false,
"_integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
"_location": "/eslint/cli-cursor",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "cli-cursor@^2.1.0",
"scope": null,
"escapedName": "cli-cursor",
"name": "cli-cursor",
"escapedName": "cli-cursor",
"rawSpec": "^2.1.0",
"spec": ">=2.1.0 <3.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^2.1.0"
},
"_requiredBy": [
"/inquirer"
"/eslint/inquirer"
],
"_resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
"_shasum": "b35dac376479facc3e94747d41d0d0f5238ffcb5",
"_shrinkwrap": null,
"_spec": "cli-cursor@^2.1.0",
"_where": "/Users/trott/io.js/tools/node_modules/inquirer",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/inquirer",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
@@ -53,26 +30,22 @@
"bugs": {
"url": "https://github.com/sindresorhus/cli-cursor/issues"
},
"bundleDependencies": false,
"dependencies": {
"restore-cursor": "^2.0.0"
},
"deprecated": false,
"description": "Toggle the CLI cursor",
"devDependencies": {
"ava": "*",
"xo": "*"
},
"directories": {},
"dist": {
"shasum": "b35dac376479facc3e94747d41d0d0f5238ffcb5",
"tarball": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz"
},
"engines": {
"node": ">=4"
},
"files": [
"index.js"
],
"gitHead": "5a403335e6b3980a1235b71f8afe1d63ee8c3ce1",
"homepage": "https://github.com/sindresorhus/cli-cursor#readme",
"keywords": [
"cli",
@@ -90,15 +63,7 @@
"command-line"
],
"license": "MIT",
"maintainers": [
{
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
}
],
"name": "cli-cursor",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/sindresorhus/cli-cursor.git"
+13 -49
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "cli-width@^2.0.0",
"scope": null,
"escapedName": "cli-width",
"name": "cli-width",
"rawSpec": "^2.0.0",
"spec": ">=2.0.0 <3.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/inquirer"
]
],
"_from": "cli-width@>=2.0.0 <3.0.0",
"_from": "cli-width@^2.0.0",
"_id": "cli-width@2.1.0",
"_inCache": true,
"_location": "/cli-width",
"_nodeVersion": "4.2.6",
"_npmOperationalInternal": {
"host": "packages-9-west.internal.npmjs.com",
"tmp": "tmp/cli-width-2.1.0.tgz_1455570612101_0.2879865295253694"
},
"_npmUser": {
"name": "knownasilya",
"email": "ilya@burstcreations.com"
},
"_npmVersion": "2.14.12",
"_inBundle": false,
"_integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=",
"_location": "/eslint/cli-width",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "cli-width@^2.0.0",
"scope": null,
"escapedName": "cli-width",
"name": "cli-width",
"escapedName": "cli-width",
"rawSpec": "^2.0.0",
"spec": ">=2.0.0 <3.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^2.0.0"
},
"_requiredBy": [
"/inquirer"
"/eslint/inquirer"
],
"_resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz",
"_shasum": "b234ca209b29ef66fc518d9b98d5847b00edf00a",
"_shrinkwrap": null,
"_spec": "cli-width@^2.0.0",
"_where": "/Users/trott/io.js/tools/node_modules/inquirer",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/inquirer",
"author": {
"name": "Ilya Radchenko",
"email": "ilya@burstcreations.com"
@@ -52,7 +29,8 @@
"bugs": {
"url": "https://github.com/knownasilya/cli-width/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "Get stdout window width, with two fallbacks, tty and then a default.",
"devDependencies": {
"coveralls": "^2.11.4",
@@ -61,24 +39,10 @@
"tap-spec": "^4.1.0",
"tape": "^3.4.0"
},
"directories": {},
"dist": {
"shasum": "b234ca209b29ef66fc518d9b98d5847b00edf00a",
"tarball": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz"
},
"gitHead": "c9506fd74bd3863ff327f8f8892601fa4ac2dbb3",
"homepage": "https://github.com/knownasilya/cli-width",
"license": "ISC",
"main": "index.js",
"maintainers": [
{
"name": "knownasilya",
"email": "ilya@burstcreations.com"
}
],
"name": "cli-width",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/knownasilya/cli-width.git"
+13 -53
View File
@@ -1,50 +1,32 @@
{
"_args": [
[
{
"raw": "co@^4.6.0",
"scope": null,
"escapedName": "co",
"name": "co",
"rawSpec": "^4.6.0",
"spec": ">=4.6.0 <5.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/ajv"
]
],
"_from": "co@>=4.6.0 <5.0.0",
"_from": "co@^4.6.0",
"_id": "co@4.6.0",
"_inCache": true,
"_location": "/co",
"_nodeVersion": "2.3.3",
"_npmUser": {
"name": "jongleberry",
"email": "jonathanrichardong@gmail.com"
},
"_npmVersion": "2.11.3",
"_inBundle": false,
"_integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
"_location": "/eslint/co",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "co@^4.6.0",
"scope": null,
"escapedName": "co",
"name": "co",
"escapedName": "co",
"rawSpec": "^4.6.0",
"spec": ">=4.6.0 <5.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^4.6.0"
},
"_requiredBy": [
"/ajv"
"/eslint/ajv"
],
"_resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
"_shasum": "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184",
"_shrinkwrap": null,
"_spec": "co@^4.6.0",
"_where": "/Users/trott/io.js/tools/node_modules/ajv",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/ajv",
"bugs": {
"url": "https://github.com/tj/co/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "generator async control flow goodness",
"devDependencies": {
"browserify": "^10.0.0",
@@ -52,11 +34,6 @@
"mocha": "^2.0.0",
"mz": "^1.0.2"
},
"directories": {},
"dist": {
"shasum": "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184",
"tarball": "https://registry.npmjs.org/co/-/co-4.6.0.tgz"
},
"engines": {
"iojs": ">= 1.0.0",
"node": ">= 0.12.0"
@@ -64,7 +41,6 @@
"files": [
"index.js"
],
"gitHead": "b54d18f8f472ad1314800e786993c4169a5ff9f8",
"homepage": "https://github.com/tj/co#readme",
"keywords": [
"async",
@@ -74,23 +50,7 @@
"coroutine"
],
"license": "MIT",
"maintainers": [
{
"name": "tjholowaychuk",
"email": "tj@vision-media.ca"
},
{
"name": "jonathanong",
"email": "jonathanrichardong@gmail.com"
},
{
"name": "jongleberry",
"email": "jonathanrichardong@gmail.com"
}
],
"name": "co",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/tj/co.git"
-16
View File
@@ -1,16 +0,0 @@
<!--remark setext-->
<!--lint disable no-multiple-toplevel-headings-->
1.0.2 / 2016-07-23
==================
* Fix `readme.md` ([`03823ce`](https://github.com/wooorm/collapse-white-space/commit/03823ce))
1.0.1 / 2016-07-23
==================
* Rewrite module ([`6d48e8d`](https://github.com/wooorm/collapse-white-space/commit/6d48e8d))
1.0.0 / 2015-07-12
==================
+1 -20
View File
@@ -1,27 +1,8 @@
/**
* @author Titus Wormer
* @copyright 2015 Titus Wormer
* @license MIT
* @module collapse-white-space
* @fileoverview Replace multiple white-space characters
* with a single space.
*/
'use strict';
/* Expose. */
module.exports = collapse;
/**
* Replace multiple white-space characters with a single space.
*
* @example
* collapse(' \t\nbar \nbaz\t'); // ' bar baz '
*
* @param {string} value - Value with uncollapsed white-space,
* coerced to string.
* @return {string} - Value with collapsed white-space.
*/
/* collapse(' \t\nbar \nbaz\t'); // ' bar baz ' */
function collapse(value) {
return String(value).replace(/\s+/g, ' ');
}
+28 -70
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "collapse-white-space@^1.0.0",
"scope": null,
"escapedName": "collapse-white-space",
"name": "collapse-white-space",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/eslint/node_modules/remark-parse"
]
],
"_from": "collapse-white-space@>=1.0.0 <2.0.0",
"_id": "collapse-white-space@1.0.2",
"_inCache": true,
"_from": "collapse-white-space@^1.0.0",
"_id": "collapse-white-space@1.0.3",
"_inBundle": false,
"_integrity": "sha1-S5BvZw5aljqHt2sOFolkM0G2Ajw=",
"_location": "/collapse-white-space",
"_nodeVersion": "5.0.0",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/collapse-white-space-1.0.2.tgz_1469310043598_0.74730454524979"
},
"_npmUser": {
"name": "wooorm",
"email": "tituswormer@gmail.com"
},
"_npmVersion": "3.3.6",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "collapse-white-space@^1.0.0",
"scope": null,
"escapedName": "collapse-white-space",
"name": "collapse-white-space",
"escapedName": "collapse-white-space",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.0"
},
"_requiredBy": [
"/remark-parse"
],
"_resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.2.tgz",
"_shasum": "9c463fb9c6d190d2dcae21a356a01bcae9eeef6d",
"_shrinkwrap": null,
"_resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.3.tgz",
"_shasum": "4b906f670e5a963a87b76b0e1689643341b6023c",
"_spec": "collapse-white-space@^1.0.0",
"_where": "/Users/trott/io.js/tools/eslint/node_modules/remark-parse",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/remark-parse",
"author": {
"name": "Titus Wormer",
"email": "tituswormer@gmail.com",
@@ -53,6 +30,7 @@
"bugs": {
"url": "https://github.com/wooorm/collapse-white-space/issues"
},
"bundleDependencies": false,
"contributors": [
{
"name": "Titus Wormer",
@@ -61,28 +39,20 @@
}
],
"dependencies": {},
"deprecated": false,
"description": "Replace multiple white-space characters with a single space",
"devDependencies": {
"browserify": "^13.0.1",
"browserify": "^14.0.0",
"esmangle": "^1.0.1",
"nyc": "^7.0.0",
"remark-cli": "^1.0.0",
"remark-comment-config": "^4.0.0",
"remark-github": "^5.0.0",
"remark-lint": "^4.0.0",
"remark-validate-links": "^4.0.0",
"nyc": "^11.0.0",
"remark-cli": "^3.0.0",
"remark-preset-wooorm": "^3.0.0",
"tape": "^4.0.0",
"xo": "^0.16.0"
},
"directories": {},
"dist": {
"shasum": "9c463fb9c6d190d2dcae21a356a01bcae9eeef6d",
"tarball": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.2.tgz"
"xo": "^0.18.0"
},
"files": [
"index.js"
],
"gitHead": "cd218a06e569cf9cbd4657436557299d3bb504cf",
"homepage": "https://github.com/wooorm/collapse-white-space#readme",
"keywords": [
"collapse",
@@ -90,26 +60,11 @@
"space"
],
"license": "MIT",
"maintainers": [
{
"name": "wooorm",
"email": "tituswormer@gmail.com"
}
],
"name": "collapse-white-space",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"remarkConfig": {
"output": true,
"plugins": [
"comment-config",
"github",
"lint",
"validate-links"
],
"settings": {
"bullet": "*"
}
"preset-wooorm"
]
},
"repository": {
"type": "git",
@@ -119,18 +74,21 @@
"build": "npm run build-md && npm run build-bundle && npm run build-mangle",
"build-bundle": "browserify index.js --bare -s collapseWhiteSpace > collapse-white-space.js",
"build-mangle": "esmangle collapse-white-space.js > collapse-white-space.min.js",
"build-md": "remark . --quiet --frail",
"build-md": "remark . -qfo",
"lint": "xo",
"test": "npm run build && npm run lint && npm run test-coverage",
"test-api": "node test",
"test-coverage": "nyc --reporter lcov tape test.js"
},
"version": "1.0.2",
"version": "1.0.3",
"xo": {
"space": true,
"esnext": false,
"rules": {
"capitalized-comments": "off"
},
"ignores": [
"collapse-white-space.js",
"collapse-white-space.min.js"
"collapse-white-space.js"
]
}
}
+2 -24
View File
@@ -1,7 +1,5 @@
# collapse-white-space [![Build Status][travis-badge]][travis] [![Coverage Status][codecov-badge]][codecov]
<!--lint disable heading-increment list-item-spacing no-duplicate-headings-->
Replace multiple white-space characters with a single space.
## Installation
@@ -14,37 +12,17 @@ npm install collapse-white-space
## Usage
Dependencies.
```javascript
var collapse = require('collapse-white-space');
```
Collapse white space:
```javascript
var result = collapse('\tfoo \n\tbar \t\r\nbaz');
```
Yields:
```text
foo bar baz
collapse('\tfoo \n\tbar \t\r\nbaz'); //=> ' foo bar baz'
```
## API
### `collapse(value)`
Replace multiple white-space characters with a single space.
###### Parameters
* `value` (`string`) — Value with uncollapsed white-space, coerced to string.
###### Returns
`string` — Value with collapsed white-space.
Replace multiple white-space characters in value with a single space.
## License
+13 -42
View File
@@ -1,45 +1,27 @@
{
"_args": [
[
{
"raw": "concat-map@0.0.1",
"scope": null,
"escapedName": "concat-map",
"name": "concat-map",
"rawSpec": "0.0.1",
"spec": "0.0.1",
"type": "version"
},
"/Users/trott/io.js/tools/node_modules/brace-expansion"
]
],
"_from": "concat-map@0.0.1",
"_id": "concat-map@0.0.1",
"_inCache": true,
"_location": "/concat-map",
"_npmUser": {
"name": "substack",
"email": "mail@substack.net"
},
"_npmVersion": "1.3.21",
"_inBundle": false,
"_integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"_location": "/eslint/concat-map",
"_phantomChildren": {},
"_requested": {
"type": "version",
"registry": true,
"raw": "concat-map@0.0.1",
"scope": null,
"escapedName": "concat-map",
"name": "concat-map",
"escapedName": "concat-map",
"rawSpec": "0.0.1",
"spec": "0.0.1",
"type": "version"
"saveSpec": null,
"fetchSpec": "0.0.1"
},
"_requiredBy": [
"/brace-expansion"
"/eslint/brace-expansion"
],
"_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"_shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
"_shrinkwrap": null,
"_spec": "concat-map@0.0.1",
"_where": "/Users/trott/io.js/tools/node_modules/brace-expansion",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/brace-expansion",
"author": {
"name": "James Halliday",
"email": "mail@substack.net",
@@ -48,7 +30,8 @@
"bugs": {
"url": "https://github.com/substack/node-concat-map/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "concatenative mapdashery",
"devDependencies": {
"tape": "~2.4.0"
@@ -57,11 +40,7 @@
"example": "example",
"test": "test"
},
"dist": {
"shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
"tarball": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
},
"homepage": "https://github.com/substack/node-concat-map",
"homepage": "https://github.com/substack/node-concat-map#readme",
"keywords": [
"concat",
"concatMap",
@@ -71,15 +50,7 @@
],
"license": "MIT",
"main": "index.js",
"maintainers": [
{
"name": "substack",
"email": "mail@substack.net"
}
],
"name": "concat-map",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git://github.com/substack/node-concat-map.git"
+13 -52
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "concat-stream@^1.6.0",
"scope": null,
"escapedName": "concat-stream",
"name": "concat-stream",
"rawSpec": "^1.6.0",
"spec": ">=1.6.0 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/eslint"
]
],
"_from": "concat-stream@>=1.6.0 <2.0.0",
"_from": "concat-stream@^1.6.0",
"_id": "concat-stream@1.6.0",
"_inCache": true,
"_location": "/concat-stream",
"_nodeVersion": "4.6.2",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/concat-stream-1.6.0.tgz_1482162257023_0.2988202746491879"
},
"_npmUser": {
"name": "mafintosh",
"email": "mathiasbuus@gmail.com"
},
"_npmVersion": "2.15.11",
"_inBundle": false,
"_integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
"_location": "/eslint/concat-stream",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "concat-stream@^1.6.0",
"scope": null,
"escapedName": "concat-stream",
"name": "concat-stream",
"escapedName": "concat-stream",
"rawSpec": "^1.6.0",
"spec": ">=1.6.0 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.6.0"
},
"_requiredBy": [
"/eslint"
],
"_resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
"_shasum": "0aac662fd52be78964d5532f694784e70110acf7",
"_shrinkwrap": null,
"_spec": "concat-stream@^1.6.0",
"_where": "/Users/trott/io.js/tools/node_modules/eslint",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint",
"author": {
"name": "Max Ogden",
"email": "max@maxogden.com"
@@ -52,43 +29,27 @@
"bugs": {
"url": "http://github.com/maxogden/concat-stream/issues"
},
"bundleDependencies": false,
"dependencies": {
"inherits": "^2.0.3",
"readable-stream": "^2.2.2",
"typedarray": "^0.0.6"
},
"deprecated": false,
"description": "writable stream that concatenates strings or binary data and calls a callback with the result",
"devDependencies": {
"tape": "^4.6.3"
},
"directories": {},
"dist": {
"shasum": "0aac662fd52be78964d5532f694784e70110acf7",
"tarball": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz"
},
"engines": [
"node >= 0.8"
],
"files": [
"index.js"
],
"gitHead": "e482281642c1e011fc158f5749ef40a71c77a426",
"homepage": "https://github.com/maxogden/concat-stream",
"homepage": "https://github.com/maxogden/concat-stream#readme",
"license": "MIT",
"main": "index.js",
"maintainers": [
{
"name": "mafintosh",
"email": "mathiasbuus@gmail.com"
},
{
"name": "maxogden",
"email": "max@maxogden.com"
}
],
"name": "concat-stream",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/maxogden/concat-stream.git"
+13 -45
View File
@@ -1,46 +1,27 @@
{
"_args": [
[
{
"raw": "core-util-is@~1.0.0",
"scope": null,
"escapedName": "core-util-is",
"name": "core-util-is",
"rawSpec": "~1.0.0",
"spec": ">=1.0.0 <1.1.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/readable-stream"
]
],
"_from": "core-util-is@>=1.0.0 <1.1.0",
"_from": "core-util-is@~1.0.0",
"_id": "core-util-is@1.0.2",
"_inCache": true,
"_location": "/core-util-is",
"_nodeVersion": "4.0.0",
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
},
"_npmVersion": "3.3.2",
"_inBundle": false,
"_integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"_location": "/eslint/core-util-is",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "core-util-is@~1.0.0",
"scope": null,
"escapedName": "core-util-is",
"name": "core-util-is",
"escapedName": "core-util-is",
"rawSpec": "~1.0.0",
"spec": ">=1.0.0 <1.1.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "~1.0.0"
},
"_requiredBy": [
"/readable-stream"
"/eslint/readable-stream"
],
"_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"_shasum": "b5fd54220aa2bc5ab57aab7140c940754503c1a7",
"_shrinkwrap": null,
"_spec": "core-util-is@~1.0.0",
"_where": "/Users/trott/io.js/tools/node_modules/readable-stream",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/readable-stream",
"author": {
"name": "Isaac Z. Schlueter",
"email": "i@izs.me",
@@ -49,17 +30,12 @@
"bugs": {
"url": "https://github.com/isaacs/core-util-is/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "The `util.is*` functions introduced in Node v0.12.",
"devDependencies": {
"tap": "^2.3.0"
},
"directories": {},
"dist": {
"shasum": "b5fd54220aa2bc5ab57aab7140c940754503c1a7",
"tarball": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz"
},
"gitHead": "a177da234df5638b363ddc15fa324619a38577c8",
"homepage": "https://github.com/isaacs/core-util-is#readme",
"keywords": [
"util",
@@ -74,15 +50,7 @@
],
"license": "MIT",
"main": "lib/util.js",
"maintainers": [
{
"name": "isaacs",
"email": "i@izs.me"
}
],
"name": "core-util-is",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/core-util-is.git"
+12 -48
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "debug@^2.6.8",
"scope": null,
"escapedName": "debug",
"name": "debug",
"rawSpec": "^2.6.8",
"spec": ">=2.6.8 <3.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/eslint"
]
],
"_from": "debug@>=2.6.8 <3.0.0",
"_from": "debug@^2.6.8",
"_id": "debug@2.6.8",
"_inCache": true,
"_location": "/debug",
"_nodeVersion": "7.10.0",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/debug-2.6.8.tgz_1495138020906_0.5965513256378472"
},
"_npmUser": {
"name": "tootallnate",
"email": "nathan@tootallnate.net"
},
"_npmVersion": "4.2.0",
"_inBundle": false,
"_integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
"_location": "/eslint/debug",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "debug@^2.6.8",
"scope": null,
"escapedName": "debug",
"name": "debug",
"escapedName": "debug",
"rawSpec": "^2.6.8",
"spec": ">=2.6.8 <3.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^2.6.8"
},
"_requiredBy": [
"/eslint"
],
"_resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
"_shasum": "e731531ca2ede27d188222427da17821d68ff4fc",
"_shrinkwrap": null,
"_spec": "debug@^2.6.8",
"_where": "/Users/trott/io.js/tools/node_modules/eslint",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint",
"author": {
"name": "TJ Holowaychuk",
"email": "tj@vision-media.ca"
@@ -53,6 +30,7 @@
"bugs": {
"url": "https://github.com/visionmedia/debug/issues"
},
"bundleDependencies": false,
"component": {
"scripts": {
"debug/index.js": "browser.js",
@@ -73,6 +51,7 @@
"dependencies": {
"ms": "2.0.0"
},
"deprecated": false,
"description": "small debugging utility",
"devDependencies": {
"browserify": "9.0.3",
@@ -92,12 +71,6 @@
"sinon": "^1.17.6",
"sinon-chai": "^2.8.0"
},
"directories": {},
"dist": {
"shasum": "e731531ca2ede27d188222427da17821d68ff4fc",
"tarball": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz"
},
"gitHead": "52e1f21284322f167839e5d3a60f635c8b2dc842",
"homepage": "https://github.com/visionmedia/debug#readme",
"keywords": [
"debug",
@@ -106,19 +79,10 @@
],
"license": "MIT",
"main": "./src/index.js",
"maintainers": [
{
"name": "thebigredgeek",
"email": "rhyneandrew@gmail.com"
}
],
"name": "debug",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git://github.com/visionmedia/debug.git"
},
"scripts": {},
"version": "2.6.8"
}
+14 -44
View File
@@ -1,45 +1,27 @@
{
"_args": [
[
{
"raw": "deep-is@~0.1.3",
"scope": null,
"escapedName": "deep-is",
"name": "deep-is",
"rawSpec": "~0.1.3",
"spec": ">=0.1.3 <0.2.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/optionator"
]
],
"_from": "deep-is@>=0.1.3 <0.2.0",
"_from": "deep-is@~0.1.3",
"_id": "deep-is@0.1.3",
"_inCache": true,
"_location": "/deep-is",
"_npmUser": {
"name": "thlorenz",
"email": "thlorenz@gmx.de"
},
"_npmVersion": "1.4.14",
"_inBundle": false,
"_integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"_location": "/eslint/deep-is",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "deep-is@~0.1.3",
"scope": null,
"escapedName": "deep-is",
"name": "deep-is",
"escapedName": "deep-is",
"rawSpec": "~0.1.3",
"spec": ">=0.1.3 <0.2.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "~0.1.3"
},
"_requiredBy": [
"/optionator"
"/eslint/optionator"
],
"_resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
"_shasum": "b369d6fb5dbc13eecf524f91b070feedc357cf34",
"_shrinkwrap": null,
"_spec": "deep-is@~0.1.3",
"_where": "/Users/trott/io.js/tools/node_modules/optionator",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/optionator",
"author": {
"name": "Thorsten Lorenz",
"email": "thlorenz@gmx.de",
@@ -48,7 +30,8 @@
"bugs": {
"url": "https://github.com/thlorenz/deep-is/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "node's assert.deepEqual algorithm except for NaN being equal to NaN",
"devDependencies": {
"tape": "~1.0.2"
@@ -58,12 +41,7 @@
"example": "example",
"test": "test"
},
"dist": {
"shasum": "b369d6fb5dbc13eecf524f91b070feedc357cf34",
"tarball": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz"
},
"gitHead": "f126057628423458636dec9df3d621843b9ac55e",
"homepage": "https://github.com/thlorenz/deep-is",
"homepage": "https://github.com/thlorenz/deep-is#readme",
"keywords": [
"equality",
"equal",
@@ -74,15 +52,7 @@
"url": "https://github.com/thlorenz/deep-is/blob/master/LICENSE"
},
"main": "index.js",
"maintainers": [
{
"name": "thlorenz",
"email": "thlorenz@gmx.de"
}
],
"name": "deep-is",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/thlorenz/deep-is.git"
+13 -48
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "del@^2.0.2",
"scope": null,
"escapedName": "del",
"name": "del",
"rawSpec": "^2.0.2",
"spec": ">=2.0.2 <3.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/flat-cache"
]
],
"_from": "del@>=2.0.2 <3.0.0",
"_from": "del@^2.0.2",
"_id": "del@2.2.2",
"_inCache": true,
"_location": "/del",
"_nodeVersion": "4.4.5",
"_npmOperationalInternal": {
"host": "packages-16-east.internal.npmjs.com",
"tmp": "tmp/del-2.2.2.tgz_1471046735537_0.4419694794341922"
},
"_npmUser": {
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
},
"_npmVersion": "2.15.5",
"_inBundle": false,
"_integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
"_location": "/eslint/del",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "del@^2.0.2",
"scope": null,
"escapedName": "del",
"name": "del",
"escapedName": "del",
"rawSpec": "^2.0.2",
"spec": ">=2.0.2 <3.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^2.0.2"
},
"_requiredBy": [
"/flat-cache"
"/eslint/flat-cache"
],
"_resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
"_shasum": "c12c981d067846c84bcaf862cff930d907ffd1a8",
"_shrinkwrap": null,
"_spec": "del@^2.0.2",
"_where": "/Users/trott/io.js/tools/node_modules/flat-cache",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/flat-cache",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
@@ -53,6 +30,7 @@
"bugs": {
"url": "https://github.com/sindresorhus/del/issues"
},
"bundleDependencies": false,
"dependencies": {
"globby": "^5.0.0",
"is-path-cwd": "^1.0.0",
@@ -62,6 +40,7 @@
"pinkie-promise": "^2.0.0",
"rimraf": "^2.2.8"
},
"deprecated": false,
"description": "Delete files and folders",
"devDependencies": {
"ava": "*",
@@ -70,18 +49,12 @@
"tempfile": "^1.1.1",
"xo": "*"
},
"directories": {},
"dist": {
"shasum": "c12c981d067846c84bcaf862cff930d907ffd1a8",
"tarball": "https://registry.npmjs.org/del/-/del-2.2.2.tgz"
},
"engines": {
"node": ">=0.10.0"
},
"files": [
"index.js"
],
"gitHead": "3a97a5ba131055fbf7eb39f5ed47db86a2fd4497",
"homepage": "https://github.com/sindresorhus/del#readme",
"keywords": [
"delete",
@@ -108,15 +81,7 @@
"filesystem"
],
"license": "MIT",
"maintainers": [
{
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
}
],
"name": "del",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/sindresorhus/del.git"
+18 -48
View File
@@ -1,57 +1,36 @@
{
"_args": [
[
{
"raw": "doctrine@^2.0.0",
"scope": null,
"escapedName": "doctrine",
"name": "doctrine",
"rawSpec": "^2.0.0",
"spec": ">=2.0.0 <3.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/eslint"
]
],
"_from": "doctrine@>=2.0.0 <3.0.0",
"_from": "doctrine@^2.0.0",
"_id": "doctrine@2.0.0",
"_inCache": true,
"_location": "/doctrine",
"_nodeVersion": "4.4.2",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/doctrine-2.0.0.tgz_1479232728285_0.34204454137943685"
},
"_npmUser": {
"name": "nzakas",
"email": "nicholas@nczconsulting.com"
},
"_npmVersion": "2.15.0",
"_inBundle": false,
"_integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=",
"_location": "/eslint/doctrine",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "doctrine@^2.0.0",
"scope": null,
"escapedName": "doctrine",
"name": "doctrine",
"escapedName": "doctrine",
"rawSpec": "^2.0.0",
"spec": ">=2.0.0 <3.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^2.0.0"
},
"_requiredBy": [
"/eslint"
],
"_resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz",
"_shasum": "c73d8d2909d22291e1a007a395804da8b665fe63",
"_shrinkwrap": null,
"_spec": "doctrine@^2.0.0",
"_where": "/Users/trott/io.js/tools/node_modules/eslint",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint",
"bugs": {
"url": "https://github.com/eslint/doctrine/issues"
},
"bundleDependencies": false,
"dependencies": {
"esutils": "^2.0.2",
"isarray": "^1.0.0"
},
"deprecated": false,
"description": "JSDoc parser",
"devDependencies": {
"coveralls": "^2.11.2",
@@ -70,10 +49,6 @@
"directories": {
"lib": "./lib"
},
"dist": {
"shasum": "c73d8d2909d22291e1a007a395804da8b665fe63",
"tarball": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz"
},
"engines": {
"node": ">=0.10.0"
},
@@ -84,27 +59,22 @@
"LICENSE.esprima",
"README.md"
],
"gitHead": "46c600f27f54b3ab6b0b8a9ac9f97c807ffa95ef",
"homepage": "https://github.com/eslint/doctrine",
"license": "Apache-2.0",
"main": "lib/doctrine.js",
"maintainers": [
{
"name": "constellation",
"email": "utatane.tea@gmail.com"
"name": "Nicholas C. Zakas",
"email": "nicholas+npm@nczconsulting.com",
"url": "https://www.nczonline.net"
},
{
"name": "eslint",
"email": "nicholas+eslint@nczconsulting.com"
},
{
"name": "nzakas",
"email": "nicholas@nczconsulting.com"
"name": "Yusuke Suzuki",
"email": "utatane.tea@gmail.com",
"url": "https://github.com/Constellation"
}
],
"name": "doctrine",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/eslint/doctrine.git"
+21 -49
View File
@@ -1,51 +1,28 @@
{
"_args": [
[
{
"raw": "escape-string-regexp@^1.0.2",
"scope": null,
"escapedName": "escape-string-regexp",
"name": "escape-string-regexp",
"rawSpec": "^1.0.2",
"spec": ">=1.0.2 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/chalk"
]
],
"_from": "escape-string-regexp@>=1.0.2 <2.0.0",
"_from": "escape-string-regexp@^1.0.2",
"_id": "escape-string-regexp@1.0.5",
"_inCache": true,
"_location": "/escape-string-regexp",
"_nodeVersion": "4.2.6",
"_npmOperationalInternal": {
"host": "packages-9-west.internal.npmjs.com",
"tmp": "tmp/escape-string-regexp-1.0.5.tgz_1456059312074_0.7245344955008477"
},
"_npmUser": {
"name": "jbnicolai",
"email": "jappelman@xebia.com"
},
"_npmVersion": "2.14.12",
"_inBundle": false,
"_integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"_location": "/eslint/escape-string-regexp",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "escape-string-regexp@^1.0.2",
"scope": null,
"escapedName": "escape-string-regexp",
"name": "escape-string-regexp",
"escapedName": "escape-string-regexp",
"rawSpec": "^1.0.2",
"spec": ">=1.0.2 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.2"
},
"_requiredBy": [
"/chalk",
"/figures"
"/eslint/chalk",
"/eslint/figures"
],
"_resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"_shasum": "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4",
"_shrinkwrap": null,
"_spec": "escape-string-regexp@^1.0.2",
"_where": "/Users/trott/io.js/tools/node_modules/chalk",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/chalk",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
@@ -54,25 +31,20 @@
"bugs": {
"url": "https://github.com/sindresorhus/escape-string-regexp/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "Escape RegExp special characters",
"devDependencies": {
"ava": "*",
"xo": "*"
},
"directories": {},
"dist": {
"shasum": "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4",
"tarball": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
},
"engines": {
"node": ">=0.8.0"
},
"files": [
"index.js"
],
"gitHead": "db124a3e1aae9d692c4899e42a5c6c3e329eaa20",
"homepage": "https://github.com/sindresorhus/escape-string-regexp",
"homepage": "https://github.com/sindresorhus/escape-string-regexp#readme",
"keywords": [
"escape",
"regex",
@@ -88,17 +60,17 @@
"license": "MIT",
"maintainers": [
{
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
"url": "sindresorhus.com"
},
{
"name": "jbnicolai",
"email": "jappelman@xebia.com"
"name": "Joshua Boy Nicolai Appelman",
"email": "joshua@jbna.nl",
"url": "jbna.nl"
}
],
"name": "escape-string-regexp",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/sindresorhus/escape-string-regexp.git"
+12 -46
View File
@@ -1,50 +1,28 @@
{
"_args": [
[
{
"raw": "eslint-plugin-markdown@1.0.0-beta.4",
"scope": null,
"escapedName": "eslint-plugin-markdown",
"name": "eslint-plugin-markdown",
"rawSpec": "1.0.0-beta.4",
"spec": "1.0.0-beta.4",
"type": "version"
},
"/Users/trott/io.js/tools/eslint/node_modules"
]
],
"_from": "eslint-plugin-markdown@1.0.0-beta.4",
"_id": "eslint-plugin-markdown@1.0.0-beta.4",
"_inCache": true,
"_inBundle": false,
"_integrity": "sha1-gqGZcTmeSxti99SsZCRofCwH7no=",
"_location": "/eslint-plugin-markdown",
"_nodeVersion": "7.7.1",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/eslint-plugin-markdown-1.0.0-beta.4.tgz_1488662554242_0.9874107467476279"
},
"_npmUser": {
"name": "btmills",
"email": "mills.brandont@gmail.com"
},
"_npmVersion": "4.1.2",
"_phantomChildren": {},
"_requested": {
"type": "version",
"registry": true,
"raw": "eslint-plugin-markdown@1.0.0-beta.4",
"scope": null,
"escapedName": "eslint-plugin-markdown",
"name": "eslint-plugin-markdown",
"escapedName": "eslint-plugin-markdown",
"rawSpec": "1.0.0-beta.4",
"spec": "1.0.0-beta.4",
"type": "version"
"saveSpec": null,
"fetchSpec": "1.0.0-beta.4"
},
"_requiredBy": [
"#USER"
"#USER",
"/"
],
"_resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-1.0.0-beta.4.tgz",
"_shasum": "82a19971399e4b1b62f7d4ac6424687c2c07ee7a",
"_shrinkwrap": null,
"_spec": "eslint-plugin-markdown@1.0.0-beta.4",
"_where": "/Users/trott/io.js/tools/eslint/node_modules",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint",
"author": {
"name": "Brandon Mills",
"url": "https://github.com/btmills"
@@ -52,11 +30,13 @@
"bugs": {
"url": "https://github.com/eslint/eslint-plugin-markdown/issues"
},
"bundleDependencies": false,
"dependencies": {
"object-assign": "^4.0.1",
"parse5": "^2.2.2",
"remark": "^5.0.0"
},
"deprecated": false,
"description": "An ESLint plugin to lint JavaScript in Markdown code fences.",
"devDependencies": {
"chai": "^3.0.0",
@@ -64,18 +44,12 @@
"eslint-config-eslint": "^3.0.0",
"mocha": "^2.2.5"
},
"directories": {},
"dist": {
"shasum": "82a19971399e4b1b62f7d4ac6424687c2c07ee7a",
"tarball": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-1.0.0-beta.4.tgz"
},
"files": [
"lib/*.js",
"index.js",
"LICENSE",
"README.md"
],
"gitHead": "c84a63171c85a1ffec9b4fd41b55f29bb2117b21",
"homepage": "https://github.com/eslint/eslint-plugin-markdown#readme",
"keywords": [
"eslint",
@@ -86,15 +60,7 @@
],
"license": "MIT",
"main": "index.js",
"maintainers": [
{
"name": "btmills",
"email": "mills.brandont@gmail.com"
}
],
"name": "eslint-plugin-markdown",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/eslint/eslint-plugin-markdown.git"
+12 -55
View File
@@ -1,57 +1,36 @@
{
"_args": [
[
{
"raw": "eslint-scope@^3.7.1",
"scope": null,
"escapedName": "eslint-scope",
"name": "eslint-scope",
"rawSpec": "^3.7.1",
"spec": ">=3.7.1 <4.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/eslint"
]
],
"_from": "eslint-scope@>=3.7.1 <4.0.0",
"_from": "eslint-scope@^3.7.1",
"_id": "eslint-scope@3.7.1",
"_inCache": true,
"_location": "/eslint-scope",
"_nodeVersion": "4.3.1",
"_npmOperationalInternal": {
"host": "packages-18-east.internal.npmjs.com",
"tmp": "tmp/eslint-scope-3.7.1.tgz_1492031610481_0.544424896594137"
},
"_npmUser": {
"name": "ivolodin",
"email": "ivolodin@gmail.com"
},
"_npmVersion": "2.14.12",
"_inBundle": false,
"_integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
"_location": "/eslint/eslint-scope",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "eslint-scope@^3.7.1",
"scope": null,
"escapedName": "eslint-scope",
"name": "eslint-scope",
"escapedName": "eslint-scope",
"rawSpec": "^3.7.1",
"spec": ">=3.7.1 <4.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^3.7.1"
},
"_requiredBy": [
"/eslint"
],
"_resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
"_shasum": "3d63c3edfda02e06e01a452ad88caacc7cdcb6e8",
"_shrinkwrap": null,
"_spec": "eslint-scope@^3.7.1",
"_where": "/Users/trott/io.js/tools/node_modules/eslint",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint",
"bugs": {
"url": "https://github.com/eslint/eslint-scope/issues"
},
"bundleDependencies": false,
"dependencies": {
"esrecurse": "^4.1.0",
"estraverse": "^4.1.1"
},
"deprecated": false,
"description": "ECMAScript scope analyzer for ESLint",
"devDependencies": {
"chai": "^3.4.1",
@@ -66,11 +45,6 @@
"typescript": "~2.0.10",
"typescript-eslint-parser": "^1.0.0"
},
"directories": {},
"dist": {
"shasum": "3d63c3edfda02e06e01a452ad88caacc7cdcb6e8",
"tarball": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz"
},
"engines": {
"node": ">=4.0.0"
},
@@ -79,27 +53,10 @@
"README.md",
"lib"
],
"gitHead": "bec1febf351ae7137a62241c18eb78876ee4fb7f",
"homepage": "http://github.com/eslint/eslint-scope",
"license": "BSD-2-Clause",
"main": "lib/index.js",
"maintainers": [
{
"name": "eslint",
"email": "nicholas+eslint@nczconsulting.com"
},
{
"name": "ivolodin",
"email": "ivolodin@gmail.com"
},
{
"name": "nzakas",
"email": "nicholas@nczconsulting.com"
}
],
"name": "eslint-scope",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/eslint/eslint-scope.git"
+12 -79
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "espree@^3.4.3",
"scope": null,
"escapedName": "espree",
"name": "espree",
"rawSpec": "^3.4.3",
"spec": ">=3.4.3 <4.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/eslint"
]
],
"_from": "espree@>=3.4.3 <4.0.0",
"_from": "espree@^3.4.3",
"_id": "espree@3.4.3",
"_inCache": true,
"_location": "/espree",
"_nodeVersion": "4.4.7",
"_npmOperationalInternal": {
"host": "packages-18-east.internal.npmjs.com",
"tmp": "tmp/espree-3.4.3.tgz_1494016113798_0.18147883261553943"
},
"_npmUser": {
"name": "eslint",
"email": "nicholas+eslint@nczconsulting.com"
},
"_npmVersion": "2.15.8",
"_inBundle": false,
"_integrity": "sha1-KRC1zNSc6JPC//+qtP2LOjG4I3Q=",
"_location": "/eslint/espree",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "espree@^3.4.3",
"scope": null,
"escapedName": "espree",
"name": "espree",
"escapedName": "espree",
"rawSpec": "^3.4.3",
"spec": ">=3.4.3 <4.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^3.4.3"
},
"_requiredBy": [
"/eslint"
],
"_resolved": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz",
"_shasum": "2910b5ccd49ce893c2ffffaab4fd8b3a31b82374",
"_shrinkwrap": null,
"_spec": "espree@^3.4.3",
"_where": "/Users/trott/io.js/tools/node_modules/eslint",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint",
"author": {
"name": "Nicholas C. Zakas",
"email": "nicholas+npm@nczconsulting.com"
@@ -52,10 +29,12 @@
"bugs": {
"url": "http://github.com/eslint/espree.git"
},
"bundleDependencies": false,
"dependencies": {
"acorn": "^5.0.1",
"acorn-jsx": "^3.0.0"
},
"deprecated": false,
"description": "An Esprima-compatible JavaScript parser built on Acorn",
"devDependencies": {
"browserify": "^7.0.0",
@@ -74,11 +53,6 @@
"shelljs-nodecli": "^0.1.1",
"unicode-6.3.0": "~0.1.0"
},
"directories": {},
"dist": {
"shasum": "2910b5ccd49ce893c2ffffaab4fd8b3a31b82374",
"tarball": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz"
},
"engines": {
"node": ">=0.10.0"
},
@@ -86,7 +60,6 @@
"lib",
"espree.js"
],
"gitHead": "ea086113d26c40b91647b2184e5e8aa9190db654",
"homepage": "https://github.com/eslint/espree",
"keywords": [
"ast",
@@ -98,47 +71,7 @@
],
"license": "BSD-2-Clause",
"main": "espree.js",
"maintainers": [
{
"name": "btmills",
"email": "mills.brandont@gmail.com"
},
{
"name": "eslint",
"email": "nicholas+eslint@nczconsulting.com"
},
{
"name": "gyandeeps",
"email": "gyandeeps@gmail.com"
},
{
"name": "ivolodin",
"email": "ivolodin@gmail.com"
},
{
"name": "kaicataldo",
"email": "kaicataldo@gmail.com"
},
{
"name": "mysticatea",
"email": "star.ctor@gmail.com"
},
{
"name": "not-an-aardvark",
"email": "notaardvark@gmail.com"
},
{
"name": "nzakas",
"email": "nicholas@nczconsulting.com"
},
{
"name": "sharpbites",
"email": "alberto.email@gmail.com"
}
],
"name": "espree",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/eslint/espree.git"
+16 -45
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "esprima@^3.1.1",
"scope": null,
"escapedName": "esprima",
"name": "esprima",
"rawSpec": "^3.1.1",
"spec": ">=3.1.1 <4.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/js-yaml"
]
],
"_from": "esprima@>=3.1.1 <4.0.0",
"_from": "esprima@^3.1.1",
"_id": "esprima@3.1.3",
"_inCache": true,
"_location": "/esprima",
"_nodeVersion": "7.1.0",
"_npmOperationalInternal": {
"host": "packages-18-east.internal.npmjs.com",
"tmp": "tmp/esprima-3.1.3.tgz_1482463104044_0.19027737597934902"
},
"_npmUser": {
"name": "ariya",
"email": "ariya.hidayat@gmail.com"
},
"_npmVersion": "3.10.9",
"_inBundle": false,
"_integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
"_location": "/eslint/esprima",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "esprima@^3.1.1",
"scope": null,
"escapedName": "esprima",
"name": "esprima",
"escapedName": "esprima",
"rawSpec": "^3.1.1",
"spec": ">=3.1.1 <4.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^3.1.1"
},
"_requiredBy": [
"/js-yaml"
"/eslint/js-yaml"
],
"_resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
"_shasum": "fdca51cee6133895e3c88d535ce49dbff62a4633",
"_shrinkwrap": null,
"_spec": "esprima@^3.1.1",
"_where": "/Users/trott/io.js/tools/node_modules/js-yaml",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/js-yaml",
"author": {
"name": "Ariya Hidayat",
"email": "ariya.hidayat@gmail.com"
@@ -56,7 +33,8 @@
"bugs": {
"url": "https://github.com/jquery/esprima/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "ECMAScript parsing infrastructure for multipurpose analysis",
"devDependencies": {
"codecov.io": "~0.1.6",
@@ -84,11 +62,6 @@
"unicode-8.0.0": "~0.7.0",
"webpack": "~1.13.2"
},
"directories": {},
"dist": {
"shasum": "fdca51cee6133895e3c88d535ce49dbff62a4633",
"tarball": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz"
},
"engines": {
"node": ">=4"
},
@@ -96,7 +69,6 @@
"bin",
"dist/esprima.js"
],
"gitHead": "cd5909280f363d503142cb79077ec532132d9749",
"homepage": "http://esprima.org",
"keywords": [
"ast",
@@ -110,13 +82,12 @@
"main": "dist/esprima.js",
"maintainers": [
{
"name": "ariya",
"email": "ariya.hidayat@gmail.com"
"name": "Ariya Hidayat",
"email": "ariya.hidayat@gmail.com",
"url": "http://ariya.ofilabs.com"
}
],
"name": "esprima",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/jquery/esprima.git"
+12 -51
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "esquery@^1.0.0",
"scope": null,
"escapedName": "esquery",
"name": "esquery",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/eslint"
]
],
"_from": "esquery@>=1.0.0 <2.0.0",
"_from": "esquery@^1.0.0",
"_id": "esquery@1.0.0",
"_inCache": true,
"_location": "/esquery",
"_nodeVersion": "7.5.0",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/esquery-1.0.0.tgz_1489187536588_0.0852991035208106"
},
"_npmUser": {
"name": "michaelficarra",
"email": "npm@michael.ficarra.me"
},
"_npmVersion": "4.1.2",
"_inBundle": false,
"_integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
"_location": "/eslint/esquery",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "esquery@^1.0.0",
"scope": null,
"escapedName": "esquery",
"name": "esquery",
"escapedName": "esquery",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.0"
},
"_requiredBy": [
"/eslint"
],
"_resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz",
"_shasum": "cfba8b57d7fba93f17298a8a006a04cda13d80fa",
"_shrinkwrap": null,
"_spec": "esquery@^1.0.0",
"_where": "/Users/trott/io.js/tools/node_modules/eslint",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint",
"author": {
"name": "Joel Feenstra",
"email": "jrfeenst+esquery@gmail.com"
@@ -52,9 +29,11 @@
"bugs": {
"url": "https://github.com/jrfeenst/esquery/issues"
},
"bundleDependencies": false,
"dependencies": {
"estraverse": "^4.0.0"
},
"deprecated": false,
"description": "A query library for ECMAScript AST using a CSS selector like query language.",
"devDependencies": {
"commonjs-everywhere": "~0.9.4",
@@ -62,11 +41,6 @@
"jstestr": ">=0.4",
"pegjs": "~0.7.0"
},
"directories": {},
"dist": {
"shasum": "cfba8b57d7fba93f17298a8a006a04cda13d80fa",
"tarball": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz"
},
"engines": {
"node": ">=0.6"
},
@@ -76,7 +50,6 @@
"license.txt",
"README.md"
],
"gitHead": "c029e89dcef7bc4ca66588a503ec154bd68f0e05",
"homepage": "https://github.com/jrfeenst/esquery#readme",
"keywords": [
"ast",
@@ -86,20 +59,8 @@
],
"license": "BSD",
"main": "esquery.js",
"maintainers": [
{
"name": "jrfeenst",
"email": "jrfeenst@gmail.com"
},
{
"name": "michaelficarra",
"email": "npm@michael.ficarra.me"
}
],
"name": "esquery",
"optionalDependencies": {},
"preferGlobal": false,
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/jrfeenst/esquery.git"
+3
View File
@@ -0,0 +1,3 @@
{
"presets": ["es2015"]
}
+170
View File
@@ -0,0 +1,170 @@
### Esrecurse [![Build Status](https://travis-ci.org/estools/esrecurse.svg?branch=master)](https://travis-ci.org/estools/esrecurse)
Esrecurse ([esrecurse](https://github.com/estools/esrecurse)) is
[ECMAScript](https://www.ecma-international.org/publications/standards/Ecma-262.htm)
recursive traversing functionality.
### Example Usage
The following code will output all variables declared at the root of a file.
```javascript
esrecurse.visit(ast, {
XXXStatement: function (node) {
this.visit(node.left);
// do something...
this.visit(node.right);
}
});
```
We can use `Visitor` instance.
```javascript
var visitor = new esrecurse.Visitor({
XXXStatement: function (node) {
this.visit(node.left);
// do something...
this.visit(node.right);
}
});
visitor.visit(ast);
```
We can inherit `Visitor` instance easily.
```javascript
class Derived extends esrecurse.Visitor {
constructor()
{
super(null);
}
XXXStatement(node) {
}
}
```javascript
function DerivedVisitor() {
esrecurse.Visitor.call(/* this for constructor */ this /* visitor object automatically becomes this. */);
}
util.inherits(DerivedVisitor, esrecurse.Visitor);
DerivedVisitor.prototype.XXXStatement = function (node) {
this.visit(node.left);
// do something...
this.visit(node.right);
};
```
And you can invoke default visiting operation inside custom visit operation.
```javascript
function DerivedVisitor() {
esrecurse.Visitor.call(/* this for constructor */ this /* visitor object automatically becomes this. */);
}
util.inherits(DerivedVisitor, esrecurse.Visitor);
DerivedVisitor.prototype.XXXStatement = function (node) {
// do something...
this.visitChildren(node);
};
```
The `childVisitorKeys` option does customize the behavoir of `this.visitChildren(node)`.
We can use user-defined node types.
```javascript
// This tree contains a user-defined `TestExpression` node.
var tree = {
type: 'TestExpression',
// This 'argument' is the property containing the other **node**.
argument: {
type: 'Literal',
value: 20
},
// This 'extended' is the property not containing the other **node**.
extended: true
};
esrecurse.visit(
ast,
{
Literal: function (node) {
// do something...
}
},
{
// Extending the existing traversing rules.
childVisitorKeys: {
// TargetNodeName: [ 'keys', 'containing', 'the', 'other', '**node**' ]
TestExpression: ['argument']
}
}
);
```
We can use the `fallback` option as well.
If the `fallback` option is `"iteration"`, `esrecurse` would visit all enumerable properties of unknown nodes.
Please note circular references cause the stack overflow. AST might have circular references in additional properties for some purpose (e.g. `node.parent`).
```javascript
esrecurse.visit(
ast,
{
Literal: function (node) {
// do something...
}
},
{
fallback: 'iteration'
}
);
```
If the `fallback` option is a function, `esrecurse` calls this function to determine the enumerable properties of unknown nodes.
Please note circular references cause the stack overflow. AST might have circular references in additional properties for some purpose (e.g. `node.parent`).
```javascript
esrecurse.visit(
ast,
{
Literal: function (node) {
// do something...
}
},
{
fallback: function (node) {
return Object.keys(node).filter(function(key) {
return key !== 'argument'
});
}
}
);
```
### License
Copyright (C) 2014 [Yusuke Suzuki](https://github.com/Constellation)
(twitter: [@Constellation](https://twitter.com/Constellation)) and other contributors.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -1,19 +0,0 @@
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-124
View File
@@ -1,124 +0,0 @@
### Estraverse [![Build Status](https://secure.travis-ci.org/estools/estraverse.png)](http://travis-ci.org/estools/estraverse)
Estraverse ([estraverse](http://github.com/estools/estraverse)) is
[ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm)
traversal functions from [esmangle project](http://github.com/estools/esmangle).
### Documentation
You can find usage docs at [wiki page](https://github.com/estools/estraverse/wiki/Usage).
### Example Usage
The following code will output all variables declared at the root of a file.
```javascript
estraverse.traverse(ast, {
enter: function (node, parent) {
if (node.type == 'FunctionExpression' || node.type == 'FunctionDeclaration')
return estraverse.VisitorOption.Skip;
},
leave: function (node, parent) {
if (node.type == 'VariableDeclarator')
console.log(node.id.name);
}
});
```
We can use `this.skip`, `this.remove` and `this.break` functions instead of using Skip, Remove and Break.
```javascript
estraverse.traverse(ast, {
enter: function (node) {
this.break();
}
});
```
And estraverse provides `estraverse.replace` function. When returning node from `enter`/`leave`, current node is replaced with it.
```javascript
result = estraverse.replace(tree, {
enter: function (node) {
// Replace it with replaced.
if (node.type === 'Literal')
return replaced;
}
});
```
By passing `visitor.keys` mapping, we can extend estraverse traversing functionality.
```javascript
// This tree contains a user-defined `TestExpression` node.
var tree = {
type: 'TestExpression',
// This 'argument' is the property containing the other **node**.
argument: {
type: 'Literal',
value: 20
},
// This 'extended' is the property not containing the other **node**.
extended: true
};
estraverse.traverse(tree, {
enter: function (node) { },
// Extending the existing traversing rules.
keys: {
// TargetNodeName: [ 'keys', 'containing', 'the', 'other', '**node**' ]
TestExpression: ['argument']
}
});
```
By passing `visitor.fallback` option, we can control the behavior when encountering unknown nodes.
```javascript
// This tree contains a user-defined `TestExpression` node.
var tree = {
type: 'TestExpression',
// This 'argument' is the property containing the other **node**.
argument: {
type: 'Literal',
value: 20
},
// This 'extended' is the property not containing the other **node**.
extended: true
};
estraverse.traverse(tree, {
enter: function (node) { },
// Iterating the child **nodes** of unknown nodes.
fallback: 'iteration'
});
```
### License
Copyright (C) 2012-2013 [Yusuke Suzuki](http://github.com/Constellation)
(twitter: [@Constellation](http://twitter.com/Constellation)) and other contributors.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -1,843 +0,0 @@
/*
Copyright (C) 2012-2013 Yusuke Suzuki <utatane.tea@gmail.com>
Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*jslint vars:false, bitwise:true*/
/*jshint indent:4*/
/*global exports:true*/
(function clone(exports) {
'use strict';
var Syntax,
isArray,
VisitorOption,
VisitorKeys,
objectCreate,
objectKeys,
BREAK,
SKIP,
REMOVE;
function ignoreJSHintError() { }
isArray = Array.isArray;
if (!isArray) {
isArray = function isArray(array) {
return Object.prototype.toString.call(array) === '[object Array]';
};
}
function deepCopy(obj) {
var ret = {}, key, val;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
val = obj[key];
if (typeof val === 'object' && val !== null) {
ret[key] = deepCopy(val);
} else {
ret[key] = val;
}
}
}
return ret;
}
function shallowCopy(obj) {
var ret = {}, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
ret[key] = obj[key];
}
}
return ret;
}
ignoreJSHintError(shallowCopy);
// based on LLVM libc++ upper_bound / lower_bound
// MIT License
function upperBound(array, func) {
var diff, len, i, current;
len = array.length;
i = 0;
while (len) {
diff = len >>> 1;
current = i + diff;
if (func(array[current])) {
len = diff;
} else {
i = current + 1;
len -= diff + 1;
}
}
return i;
}
function lowerBound(array, func) {
var diff, len, i, current;
len = array.length;
i = 0;
while (len) {
diff = len >>> 1;
current = i + diff;
if (func(array[current])) {
i = current + 1;
len -= diff + 1;
} else {
len = diff;
}
}
return i;
}
ignoreJSHintError(lowerBound);
objectCreate = Object.create || (function () {
function F() { }
return function (o) {
F.prototype = o;
return new F();
};
})();
objectKeys = Object.keys || function (o) {
var keys = [], key;
for (key in o) {
keys.push(key);
}
return keys;
};
function extend(to, from) {
var keys = objectKeys(from), key, i, len;
for (i = 0, len = keys.length; i < len; i += 1) {
key = keys[i];
to[key] = from[key];
}
return to;
}
Syntax = {
AssignmentExpression: 'AssignmentExpression',
AssignmentPattern: 'AssignmentPattern',
ArrayExpression: 'ArrayExpression',
ArrayPattern: 'ArrayPattern',
ArrowFunctionExpression: 'ArrowFunctionExpression',
AwaitExpression: 'AwaitExpression', // CAUTION: It's deferred to ES7.
BlockStatement: 'BlockStatement',
BinaryExpression: 'BinaryExpression',
BreakStatement: 'BreakStatement',
CallExpression: 'CallExpression',
CatchClause: 'CatchClause',
ClassBody: 'ClassBody',
ClassDeclaration: 'ClassDeclaration',
ClassExpression: 'ClassExpression',
ComprehensionBlock: 'ComprehensionBlock', // CAUTION: It's deferred to ES7.
ComprehensionExpression: 'ComprehensionExpression', // CAUTION: It's deferred to ES7.
ConditionalExpression: 'ConditionalExpression',
ContinueStatement: 'ContinueStatement',
DebuggerStatement: 'DebuggerStatement',
DirectiveStatement: 'DirectiveStatement',
DoWhileStatement: 'DoWhileStatement',
EmptyStatement: 'EmptyStatement',
ExportAllDeclaration: 'ExportAllDeclaration',
ExportDefaultDeclaration: 'ExportDefaultDeclaration',
ExportNamedDeclaration: 'ExportNamedDeclaration',
ExportSpecifier: 'ExportSpecifier',
ExpressionStatement: 'ExpressionStatement',
ForStatement: 'ForStatement',
ForInStatement: 'ForInStatement',
ForOfStatement: 'ForOfStatement',
FunctionDeclaration: 'FunctionDeclaration',
FunctionExpression: 'FunctionExpression',
GeneratorExpression: 'GeneratorExpression', // CAUTION: It's deferred to ES7.
Identifier: 'Identifier',
IfStatement: 'IfStatement',
ImportDeclaration: 'ImportDeclaration',
ImportDefaultSpecifier: 'ImportDefaultSpecifier',
ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',
ImportSpecifier: 'ImportSpecifier',
Literal: 'Literal',
LabeledStatement: 'LabeledStatement',
LogicalExpression: 'LogicalExpression',
MemberExpression: 'MemberExpression',
MetaProperty: 'MetaProperty',
MethodDefinition: 'MethodDefinition',
ModuleSpecifier: 'ModuleSpecifier',
NewExpression: 'NewExpression',
ObjectExpression: 'ObjectExpression',
ObjectPattern: 'ObjectPattern',
Program: 'Program',
Property: 'Property',
RestElement: 'RestElement',
ReturnStatement: 'ReturnStatement',
SequenceExpression: 'SequenceExpression',
SpreadElement: 'SpreadElement',
Super: 'Super',
SwitchStatement: 'SwitchStatement',
SwitchCase: 'SwitchCase',
TaggedTemplateExpression: 'TaggedTemplateExpression',
TemplateElement: 'TemplateElement',
TemplateLiteral: 'TemplateLiteral',
ThisExpression: 'ThisExpression',
ThrowStatement: 'ThrowStatement',
TryStatement: 'TryStatement',
UnaryExpression: 'UnaryExpression',
UpdateExpression: 'UpdateExpression',
VariableDeclaration: 'VariableDeclaration',
VariableDeclarator: 'VariableDeclarator',
WhileStatement: 'WhileStatement',
WithStatement: 'WithStatement',
YieldExpression: 'YieldExpression'
};
VisitorKeys = {
AssignmentExpression: ['left', 'right'],
AssignmentPattern: ['left', 'right'],
ArrayExpression: ['elements'],
ArrayPattern: ['elements'],
ArrowFunctionExpression: ['params', 'body'],
AwaitExpression: ['argument'], // CAUTION: It's deferred to ES7.
BlockStatement: ['body'],
BinaryExpression: ['left', 'right'],
BreakStatement: ['label'],
CallExpression: ['callee', 'arguments'],
CatchClause: ['param', 'body'],
ClassBody: ['body'],
ClassDeclaration: ['id', 'superClass', 'body'],
ClassExpression: ['id', 'superClass', 'body'],
ComprehensionBlock: ['left', 'right'], // CAUTION: It's deferred to ES7.
ComprehensionExpression: ['blocks', 'filter', 'body'], // CAUTION: It's deferred to ES7.
ConditionalExpression: ['test', 'consequent', 'alternate'],
ContinueStatement: ['label'],
DebuggerStatement: [],
DirectiveStatement: [],
DoWhileStatement: ['body', 'test'],
EmptyStatement: [],
ExportAllDeclaration: ['source'],
ExportDefaultDeclaration: ['declaration'],
ExportNamedDeclaration: ['declaration', 'specifiers', 'source'],
ExportSpecifier: ['exported', 'local'],
ExpressionStatement: ['expression'],
ForStatement: ['init', 'test', 'update', 'body'],
ForInStatement: ['left', 'right', 'body'],
ForOfStatement: ['left', 'right', 'body'],
FunctionDeclaration: ['id', 'params', 'body'],
FunctionExpression: ['id', 'params', 'body'],
GeneratorExpression: ['blocks', 'filter', 'body'], // CAUTION: It's deferred to ES7.
Identifier: [],
IfStatement: ['test', 'consequent', 'alternate'],
ImportDeclaration: ['specifiers', 'source'],
ImportDefaultSpecifier: ['local'],
ImportNamespaceSpecifier: ['local'],
ImportSpecifier: ['imported', 'local'],
Literal: [],
LabeledStatement: ['label', 'body'],
LogicalExpression: ['left', 'right'],
MemberExpression: ['object', 'property'],
MetaProperty: ['meta', 'property'],
MethodDefinition: ['key', 'value'],
ModuleSpecifier: [],
NewExpression: ['callee', 'arguments'],
ObjectExpression: ['properties'],
ObjectPattern: ['properties'],
Program: ['body'],
Property: ['key', 'value'],
RestElement: [ 'argument' ],
ReturnStatement: ['argument'],
SequenceExpression: ['expressions'],
SpreadElement: ['argument'],
Super: [],
SwitchStatement: ['discriminant', 'cases'],
SwitchCase: ['test', 'consequent'],
TaggedTemplateExpression: ['tag', 'quasi'],
TemplateElement: [],
TemplateLiteral: ['quasis', 'expressions'],
ThisExpression: [],
ThrowStatement: ['argument'],
TryStatement: ['block', 'handler', 'finalizer'],
UnaryExpression: ['argument'],
UpdateExpression: ['argument'],
VariableDeclaration: ['declarations'],
VariableDeclarator: ['id', 'init'],
WhileStatement: ['test', 'body'],
WithStatement: ['object', 'body'],
YieldExpression: ['argument']
};
// unique id
BREAK = {};
SKIP = {};
REMOVE = {};
VisitorOption = {
Break: BREAK,
Skip: SKIP,
Remove: REMOVE
};
function Reference(parent, key) {
this.parent = parent;
this.key = key;
}
Reference.prototype.replace = function replace(node) {
this.parent[this.key] = node;
};
Reference.prototype.remove = function remove() {
if (isArray(this.parent)) {
this.parent.splice(this.key, 1);
return true;
} else {
this.replace(null);
return false;
}
};
function Element(node, path, wrap, ref) {
this.node = node;
this.path = path;
this.wrap = wrap;
this.ref = ref;
}
function Controller() { }
// API:
// return property path array from root to current node
Controller.prototype.path = function path() {
var i, iz, j, jz, result, element;
function addToPath(result, path) {
if (isArray(path)) {
for (j = 0, jz = path.length; j < jz; ++j) {
result.push(path[j]);
}
} else {
result.push(path);
}
}
// root node
if (!this.__current.path) {
return null;
}
// first node is sentinel, second node is root element
result = [];
for (i = 2, iz = this.__leavelist.length; i < iz; ++i) {
element = this.__leavelist[i];
addToPath(result, element.path);
}
addToPath(result, this.__current.path);
return result;
};
// API:
// return type of current node
Controller.prototype.type = function () {
var node = this.current();
return node.type || this.__current.wrap;
};
// API:
// return array of parent elements
Controller.prototype.parents = function parents() {
var i, iz, result;
// first node is sentinel
result = [];
for (i = 1, iz = this.__leavelist.length; i < iz; ++i) {
result.push(this.__leavelist[i].node);
}
return result;
};
// API:
// return current node
Controller.prototype.current = function current() {
return this.__current.node;
};
Controller.prototype.__execute = function __execute(callback, element) {
var previous, result;
result = undefined;
previous = this.__current;
this.__current = element;
this.__state = null;
if (callback) {
result = callback.call(this, element.node, this.__leavelist[this.__leavelist.length - 1].node);
}
this.__current = previous;
return result;
};
// API:
// notify control skip / break
Controller.prototype.notify = function notify(flag) {
this.__state = flag;
};
// API:
// skip child nodes of current node
Controller.prototype.skip = function () {
this.notify(SKIP);
};
// API:
// break traversals
Controller.prototype['break'] = function () {
this.notify(BREAK);
};
// API:
// remove node
Controller.prototype.remove = function () {
this.notify(REMOVE);
};
Controller.prototype.__initialize = function(root, visitor) {
this.visitor = visitor;
this.root = root;
this.__worklist = [];
this.__leavelist = [];
this.__current = null;
this.__state = null;
this.__fallback = visitor.fallback === 'iteration';
this.__keys = VisitorKeys;
if (visitor.keys) {
this.__keys = extend(objectCreate(this.__keys), visitor.keys);
}
};
function isNode(node) {
if (node == null) {
return false;
}
return typeof node === 'object' && typeof node.type === 'string';
}
function isProperty(nodeType, key) {
return (nodeType === Syntax.ObjectExpression || nodeType === Syntax.ObjectPattern) && 'properties' === key;
}
Controller.prototype.traverse = function traverse(root, visitor) {
var worklist,
leavelist,
element,
node,
nodeType,
ret,
key,
current,
current2,
candidates,
candidate,
sentinel;
this.__initialize(root, visitor);
sentinel = {};
// reference
worklist = this.__worklist;
leavelist = this.__leavelist;
// initialize
worklist.push(new Element(root, null, null, null));
leavelist.push(new Element(null, null, null, null));
while (worklist.length) {
element = worklist.pop();
if (element === sentinel) {
element = leavelist.pop();
ret = this.__execute(visitor.leave, element);
if (this.__state === BREAK || ret === BREAK) {
return;
}
continue;
}
if (element.node) {
ret = this.__execute(visitor.enter, element);
if (this.__state === BREAK || ret === BREAK) {
return;
}
worklist.push(sentinel);
leavelist.push(element);
if (this.__state === SKIP || ret === SKIP) {
continue;
}
node = element.node;
nodeType = node.type || element.wrap;
candidates = this.__keys[nodeType];
if (!candidates) {
if (this.__fallback) {
candidates = objectKeys(node);
} else {
throw new Error('Unknown node type ' + nodeType + '.');
}
}
current = candidates.length;
while ((current -= 1) >= 0) {
key = candidates[current];
candidate = node[key];
if (!candidate) {
continue;
}
if (isArray(candidate)) {
current2 = candidate.length;
while ((current2 -= 1) >= 0) {
if (!candidate[current2]) {
continue;
}
if (isProperty(nodeType, candidates[current])) {
element = new Element(candidate[current2], [key, current2], 'Property', null);
} else if (isNode(candidate[current2])) {
element = new Element(candidate[current2], [key, current2], null, null);
} else {
continue;
}
worklist.push(element);
}
} else if (isNode(candidate)) {
worklist.push(new Element(candidate, key, null, null));
}
}
}
}
};
Controller.prototype.replace = function replace(root, visitor) {
function removeElem(element) {
var i,
key,
nextElem,
parent;
if (element.ref.remove()) {
// When the reference is an element of an array.
key = element.ref.key;
parent = element.ref.parent;
// If removed from array, then decrease following items' keys.
i = worklist.length;
while (i--) {
nextElem = worklist[i];
if (nextElem.ref && nextElem.ref.parent === parent) {
if (nextElem.ref.key < key) {
break;
}
--nextElem.ref.key;
}
}
}
}
var worklist,
leavelist,
node,
nodeType,
target,
element,
current,
current2,
candidates,
candidate,
sentinel,
outer,
key;
this.__initialize(root, visitor);
sentinel = {};
// reference
worklist = this.__worklist;
leavelist = this.__leavelist;
// initialize
outer = {
root: root
};
element = new Element(root, null, null, new Reference(outer, 'root'));
worklist.push(element);
leavelist.push(element);
while (worklist.length) {
element = worklist.pop();
if (element === sentinel) {
element = leavelist.pop();
target = this.__execute(visitor.leave, element);
// node may be replaced with null,
// so distinguish between undefined and null in this place
if (target !== undefined && target !== BREAK && target !== SKIP && target !== REMOVE) {
// replace
element.ref.replace(target);
}
if (this.__state === REMOVE || target === REMOVE) {
removeElem(element);
}
if (this.__state === BREAK || target === BREAK) {
return outer.root;
}
continue;
}
target = this.__execute(visitor.enter, element);
// node may be replaced with null,
// so distinguish between undefined and null in this place
if (target !== undefined && target !== BREAK && target !== SKIP && target !== REMOVE) {
// replace
element.ref.replace(target);
element.node = target;
}
if (this.__state === REMOVE || target === REMOVE) {
removeElem(element);
element.node = null;
}
if (this.__state === BREAK || target === BREAK) {
return outer.root;
}
// node may be null
node = element.node;
if (!node) {
continue;
}
worklist.push(sentinel);
leavelist.push(element);
if (this.__state === SKIP || target === SKIP) {
continue;
}
nodeType = node.type || element.wrap;
candidates = this.__keys[nodeType];
if (!candidates) {
if (this.__fallback) {
candidates = objectKeys(node);
} else {
throw new Error('Unknown node type ' + nodeType + '.');
}
}
current = candidates.length;
while ((current -= 1) >= 0) {
key = candidates[current];
candidate = node[key];
if (!candidate) {
continue;
}
if (isArray(candidate)) {
current2 = candidate.length;
while ((current2 -= 1) >= 0) {
if (!candidate[current2]) {
continue;
}
if (isProperty(nodeType, candidates[current])) {
element = new Element(candidate[current2], [key, current2], 'Property', new Reference(candidate, current2));
} else if (isNode(candidate[current2])) {
element = new Element(candidate[current2], [key, current2], null, new Reference(candidate, current2));
} else {
continue;
}
worklist.push(element);
}
} else if (isNode(candidate)) {
worklist.push(new Element(candidate, key, null, new Reference(node, key)));
}
}
}
return outer.root;
};
function traverse(root, visitor) {
var controller = new Controller();
return controller.traverse(root, visitor);
}
function replace(root, visitor) {
var controller = new Controller();
return controller.replace(root, visitor);
}
function extendCommentRange(comment, tokens) {
var target;
target = upperBound(tokens, function search(token) {
return token.range[0] > comment.range[0];
});
comment.extendedRange = [comment.range[0], comment.range[1]];
if (target !== tokens.length) {
comment.extendedRange[1] = tokens[target].range[0];
}
target -= 1;
if (target >= 0) {
comment.extendedRange[0] = tokens[target].range[1];
}
return comment;
}
function attachComments(tree, providedComments, tokens) {
// At first, we should calculate extended comment ranges.
var comments = [], comment, len, i, cursor;
if (!tree.range) {
throw new Error('attachComments needs range information');
}
// tokens array is empty, we attach comments to tree as 'leadingComments'
if (!tokens.length) {
if (providedComments.length) {
for (i = 0, len = providedComments.length; i < len; i += 1) {
comment = deepCopy(providedComments[i]);
comment.extendedRange = [0, tree.range[0]];
comments.push(comment);
}
tree.leadingComments = comments;
}
return tree;
}
for (i = 0, len = providedComments.length; i < len; i += 1) {
comments.push(extendCommentRange(deepCopy(providedComments[i]), tokens));
}
// This is based on John Freeman's implementation.
cursor = 0;
traverse(tree, {
enter: function (node) {
var comment;
while (cursor < comments.length) {
comment = comments[cursor];
if (comment.extendedRange[1] > node.range[0]) {
break;
}
if (comment.extendedRange[1] === node.range[0]) {
if (!node.leadingComments) {
node.leadingComments = [];
}
node.leadingComments.push(comment);
comments.splice(cursor, 1);
} else {
cursor += 1;
}
}
// already out of owned node
if (cursor === comments.length) {
return VisitorOption.Break;
}
if (comments[cursor].extendedRange[0] > node.range[1]) {
return VisitorOption.Skip;
}
}
});
cursor = 0;
traverse(tree, {
leave: function (node) {
var comment;
while (cursor < comments.length) {
comment = comments[cursor];
if (node.range[1] < comment.extendedRange[0]) {
break;
}
if (node.range[1] === comment.extendedRange[0]) {
if (!node.trailingComments) {
node.trailingComments = [];
}
node.trailingComments.push(comment);
comments.splice(cursor, 1);
} else {
cursor += 1;
}
}
// already out of owned node
if (cursor === comments.length) {
return VisitorOption.Break;
}
if (comments[cursor].extendedRange[0] > node.range[1]) {
return VisitorOption.Skip;
}
}
});
return tree;
}
exports.version = require('./package.json').version;
exports.Syntax = Syntax;
exports.traverse = traverse;
exports.replace = replace;
exports.attachComments = attachComments;
exports.VisitorKeys = VisitorKeys;
exports.VisitorOption = VisitorOption;
exports.Controller = Controller;
exports.cloneEnvironment = function () { return clone({}); };
return exports;
}(exports));
/* vim: set sw=4 ts=4 et tw=80 : */
@@ -1,100 +0,0 @@
{
"_args": [
[
{
"raw": "estraverse@~4.1.0",
"scope": null,
"escapedName": "estraverse",
"name": "estraverse",
"rawSpec": "~4.1.0",
"spec": ">=4.1.0 <4.2.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/esrecurse"
]
],
"_from": "estraverse@>=4.1.0 <4.2.0",
"_id": "estraverse@4.1.1",
"_inCache": true,
"_location": "/esrecurse/estraverse",
"_nodeVersion": "4.1.1",
"_npmUser": {
"name": "constellation",
"email": "utatane.tea@gmail.com"
},
"_npmVersion": "2.14.4",
"_phantomChildren": {},
"_requested": {
"raw": "estraverse@~4.1.0",
"scope": null,
"escapedName": "estraverse",
"name": "estraverse",
"rawSpec": "~4.1.0",
"spec": ">=4.1.0 <4.2.0",
"type": "range"
},
"_requiredBy": [
"/esrecurse"
],
"_resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz",
"_shasum": "f6caca728933a850ef90661d0e17982ba47111a2",
"_shrinkwrap": null,
"_spec": "estraverse@~4.1.0",
"_where": "/Users/trott/io.js/tools/node_modules/esrecurse",
"bugs": {
"url": "https://github.com/estools/estraverse/issues"
},
"dependencies": {},
"description": "ECMAScript JS AST traversal functions",
"devDependencies": {
"chai": "^2.1.1",
"coffee-script": "^1.8.0",
"espree": "^1.11.0",
"gulp": "^3.8.10",
"gulp-bump": "^0.2.2",
"gulp-filter": "^2.0.0",
"gulp-git": "^1.0.1",
"gulp-tag-version": "^1.2.1",
"jshint": "^2.5.6",
"mocha": "^2.1.0"
},
"directories": {},
"dist": {
"shasum": "f6caca728933a850ef90661d0e17982ba47111a2",
"tarball": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz"
},
"engines": {
"node": ">=0.10.0"
},
"gitHead": "bbcccbfe98296585e4311c8755e1d00dcd581e3c",
"homepage": "https://github.com/estools/estraverse",
"license": "BSD-2-Clause",
"main": "estraverse.js",
"maintainers": [
{
"name": "constellation",
"email": "utatane.tea@gmail.com"
},
{
"name": "michaelficarra",
"email": "npm@michael.ficarra.me"
},
{
"name": "nzakas",
"email": "nicholas@nczconsulting.com"
}
],
"name": "estraverse",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/estools/estraverse.git"
},
"scripts": {
"lint": "jshint estraverse.js",
"test": "npm run-script lint && npm run-script unit-test",
"unit-test": "mocha --compilers coffee:coffee-script/register"
},
"version": "4.1.1"
}
File diff suppressed because it is too large. Load diff
Generated Vendored Regular → Executable
+37 -65
View File
@@ -1,101 +1,73 @@
{
"_args": [
[
{
"raw": "esrecurse@^4.1.0",
"scope": null,
"escapedName": "esrecurse",
"name": "esrecurse",
"rawSpec": "^4.1.0",
"spec": ">=4.1.0 <5.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/eslint-scope"
]
],
"_from": "esrecurse@>=4.1.0 <5.0.0",
"_id": "esrecurse@4.1.0",
"_inCache": true,
"_location": "/esrecurse",
"_nodeVersion": "0.12.9",
"_npmOperationalInternal": {
"host": "packages-13-west.internal.npmjs.com",
"tmp": "tmp/esrecurse-4.1.0.tgz_1457712782215_0.15950557170435786"
},
"_npmUser": {
"name": "nzakas",
"email": "nicholas@nczconsulting.com"
},
"_npmVersion": "2.14.9",
"_from": "esrecurse@^4.1.0",
"_id": "esrecurse@4.2.0",
"_inBundle": false,
"_integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
"_location": "/eslint/esrecurse",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "esrecurse@^4.1.0",
"scope": null,
"escapedName": "esrecurse",
"name": "esrecurse",
"escapedName": "esrecurse",
"rawSpec": "^4.1.0",
"spec": ">=4.1.0 <5.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^4.1.0"
},
"_requiredBy": [
"/eslint-scope"
"/eslint/eslint-scope"
],
"_resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz",
"_shasum": "4713b6536adf7f2ac4f327d559e7756bff648220",
"_shrinkwrap": null,
"_resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
"_shasum": "fa9568d98d3823f9a41d91e902dcab9ea6e5b163",
"_spec": "esrecurse@^4.1.0",
"_where": "/Users/trott/io.js/tools/node_modules/eslint-scope",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/eslint-scope",
"babel": {
"presets": [
"es2015"
]
},
"bugs": {
"url": "https://github.com/estools/esrecurse/issues"
},
"bundleDependencies": false,
"dependencies": {
"estraverse": "~4.1.0",
"estraverse": "^4.1.0",
"object-assign": "^4.0.1"
},
"deprecated": false,
"description": "ECMAScript AST recursive visitor",
"devDependencies": {
"chai": "^3.3.0",
"coffee-script": "^1.9.1",
"esprima": "^2.1.0",
"babel-cli": "^6.24.1",
"babel-eslint": "^7.2.3",
"babel-preset-es2015": "^6.24.1",
"babel-register": "^6.24.1",
"chai": "^4.0.2",
"esprima": "^4.0.0",
"gulp": "^3.9.0",
"gulp-bump": "^1.0.0",
"gulp-eslint": "^1.0.0",
"gulp-filter": "^3.0.1",
"gulp-git": "^1.1.0",
"gulp-mocha": "^2.1.3",
"gulp-bump": "^2.7.0",
"gulp-eslint": "^4.0.0",
"gulp-filter": "^5.0.0",
"gulp-git": "^2.4.1",
"gulp-mocha": "^4.3.1",
"gulp-tag-version": "^1.2.1",
"jsdoc": "^3.3.0-alpha10",
"minimist": "^1.1.0"
},
"directories": {},
"dist": {
"shasum": "4713b6536adf7f2ac4f327d559e7756bff648220",
"tarball": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz"
},
"engines": {
"node": ">=0.10.0"
},
"gitHead": "63a34714834bd7ad2063054bd4abb24fb82ca667",
"homepage": "https://github.com/estools/esrecurse",
"license": "BSD-2-Clause",
"main": "esrecurse.js",
"maintainers": [
{
"name": "constellation",
"email": "utatane.tea@gmail.com"
},
{
"name": "michaelficarra",
"email": "npm@michael.ficarra.me"
},
{
"name": "nzakas",
"email": "nicholas@nczconsulting.com"
"name": "Yusuke Suzuki",
"email": "utatane.tea@gmail.com",
"url": "https://github.com/Constellation"
}
],
"name": "esrecurse",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/estools/esrecurse.git"
@@ -105,5 +77,5 @@
"test": "gulp travis",
"unit-test": "gulp test"
},
"version": "4.1.0"
"version": "4.2.0"
}
+18 -54
View File
@@ -1,56 +1,35 @@
{
"_args": [
[
{
"raw": "estraverse@^4.2.0",
"scope": null,
"escapedName": "estraverse",
"name": "estraverse",
"rawSpec": "^4.2.0",
"spec": ">=4.2.0 <5.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/eslint"
]
],
"_from": "estraverse@>=4.2.0 <5.0.0",
"_from": "estraverse@^4.2.0",
"_id": "estraverse@4.2.0",
"_inCache": true,
"_location": "/estraverse",
"_nodeVersion": "0.12.9",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/estraverse-4.2.0.tgz_1457646738925_0.7118953282479197"
},
"_npmUser": {
"name": "nzakas",
"email": "nicholas@nczconsulting.com"
},
"_npmVersion": "2.14.9",
"_inBundle": false,
"_integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
"_location": "/eslint/estraverse",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "estraverse@^4.2.0",
"scope": null,
"escapedName": "estraverse",
"name": "estraverse",
"escapedName": "estraverse",
"rawSpec": "^4.2.0",
"spec": ">=4.2.0 <5.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^4.2.0"
},
"_requiredBy": [
"/eslint",
"/eslint-scope",
"/esquery"
"/eslint/eslint-scope",
"/eslint/esquery",
"/eslint/esrecurse"
],
"_resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
"_shasum": "0dee3fed31fcd469618ce7342099fc1afa0bdb13",
"_shrinkwrap": null,
"_spec": "estraverse@^4.2.0",
"_where": "/Users/trott/io.js/tools/node_modules/eslint",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint",
"bugs": {
"url": "https://github.com/estools/estraverse/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "ECMAScript JS AST traversal functions",
"devDependencies": {
"babel-preset-es2015": "^6.3.13",
@@ -65,35 +44,20 @@
"jshint": "^2.5.6",
"mocha": "^2.1.0"
},
"directories": {},
"dist": {
"shasum": "0dee3fed31fcd469618ce7342099fc1afa0bdb13",
"tarball": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz"
},
"engines": {
"node": ">=0.10.0"
},
"gitHead": "6f6a4e99653908e859c7c10d04d9518bf4844ede",
"homepage": "https://github.com/estools/estraverse",
"license": "BSD-2-Clause",
"main": "estraverse.js",
"maintainers": [
{
"name": "constellation",
"email": "utatane.tea@gmail.com"
},
{
"name": "michaelficarra",
"email": "npm@michael.ficarra.me"
},
{
"name": "nzakas",
"email": "nicholas@nczconsulting.com"
"name": "Yusuke Suzuki",
"email": "utatane.tea@gmail.com",
"url": "http://github.com/Constellation"
}
],
"name": "estraverse",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/estools/estraverse.git"
+18 -46
View File
@@ -1,52 +1,34 @@
{
"_args": [
[
{
"raw": "esutils@^2.0.2",
"scope": null,
"escapedName": "esutils",
"name": "esutils",
"rawSpec": "^2.0.2",
"spec": ">=2.0.2 <3.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/eslint"
]
],
"_from": "esutils@>=2.0.2 <3.0.0",
"_from": "esutils@^2.0.2",
"_id": "esutils@2.0.2",
"_inCache": true,
"_location": "/esutils",
"_nodeVersion": "0.12.0",
"_npmUser": {
"name": "michaelficarra",
"email": "npm@michael.ficarra.me"
},
"_npmVersion": "2.5.1",
"_inBundle": false,
"_integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
"_location": "/eslint/esutils",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "esutils@^2.0.2",
"scope": null,
"escapedName": "esutils",
"name": "esutils",
"escapedName": "esutils",
"rawSpec": "^2.0.2",
"spec": ">=2.0.2 <3.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^2.0.2"
},
"_requiredBy": [
"/babel-code-frame",
"/doctrine",
"/eslint"
"/eslint",
"/eslint/babel-code-frame",
"/eslint/doctrine"
],
"_resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
"_shasum": "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b",
"_shrinkwrap": null,
"_spec": "esutils@^2.0.2",
"_where": "/Users/trott/io.js/tools/node_modules/eslint",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint",
"bugs": {
"url": "https://github.com/estools/esutils/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "utility box for ECMAScript language tools",
"devDependencies": {
"chai": "~1.7.2",
@@ -59,10 +41,6 @@
"directories": {
"lib": "./lib"
},
"dist": {
"shasum": "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b",
"tarball": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz"
},
"engines": {
"node": ">=0.10.0"
},
@@ -71,7 +49,6 @@
"README.md",
"lib"
],
"gitHead": "3ffd1c403f3f29db9e8a9574b1895682e57b6a7f",
"homepage": "https://github.com/estools/esutils",
"licenses": [
{
@@ -82,17 +59,12 @@
"main": "lib/utils.js",
"maintainers": [
{
"name": "constellation",
"email": "utatane.tea@gmail.com"
},
{
"name": "michaelficarra",
"email": "npm@michael.ficarra.me"
"name": "Yusuke Suzuki",
"email": "utatane.tea@gmail.com",
"url": "http://github.com/Constellation"
}
],
"name": "esutils",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/estools/esutils.git"
-17
View File
@@ -1,17 +0,0 @@
{
"root": true,
"extends": "@ljharb",
"rules": {
"complexity": [2, 15],
"eqeqeq": [2, "allow-null"],
"func-name-matching": [1],
"max-depth": [1, 4],
"max-statements": [2, 26],
"no-extra-parens": [1],
"no-magic-numbers": [0],
"no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "DebuggerStatement", "LabeledStatement", "WithStatement"],
"sort-keys": [0],
}
}
-175
View File
@@ -1,175 +0,0 @@
{
"es3": true,
"additionalRules": [],
"requireSemicolons": true,
"disallowMultipleSpaces": true,
"disallowIdentifierNames": [],
"requireCurlyBraces": {
"allExcept": [],
"keywords": ["if", "else", "for", "while", "do", "try", "catch"]
},
"requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"],
"disallowSpaceAfterKeywords": [],
"disallowSpaceBeforeComma": true,
"disallowSpaceAfterComma": false,
"disallowSpaceBeforeSemicolon": true,
"disallowNodeTypes": [
"DebuggerStatement",
"LabeledStatement",
"SwitchCase",
"SwitchStatement",
"WithStatement"
],
"requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] },
"requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true },
"requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true },
"disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true },
"requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true },
"disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true },
"requireSpaceBetweenArguments": true,
"disallowSpacesInsideParentheses": true,
"disallowSpacesInsideArrayBrackets": true,
"disallowQuotedKeysInObjects": { "allExcept": ["reserved"] },
"disallowSpaceAfterObjectKeys": true,
"requireCommaBeforeLineBreak": true,
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
"requireSpaceAfterPrefixUnaryOperators": [],
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
"requireSpaceBeforePostfixUnaryOperators": [],
"disallowSpaceBeforeBinaryOperators": [],
"requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
"requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
"disallowSpaceAfterBinaryOperators": [],
"disallowImplicitTypeConversion": ["binary", "string"],
"disallowKeywords": ["with", "eval"],
"requireKeywordsOnNewLine": [],
"disallowKeywordsOnNewLine": ["else"],
"requireLineFeedAtFileEnd": true,
"disallowTrailingWhitespace": true,
"disallowTrailingComma": true,
"excludeFiles": ["node_modules/**", "vendor/**"],
"disallowMultipleLineStrings": true,
"requireDotNotation": { "allExcept": ["keywords"] },
"requireParenthesesAroundIIFE": true,
"validateLineBreaks": "LF",
"validateQuoteMarks": {
"escape": true,
"mark": "'"
},
"disallowOperatorBeforeLineBreak": [],
"requireSpaceBeforeKeywords": [
"do",
"for",
"if",
"else",
"switch",
"case",
"try",
"catch",
"finally",
"while",
"with",
"return"
],
"validateAlignedFunctionParameters": {
"lineBreakAfterOpeningBraces": true,
"lineBreakBeforeClosingBraces": true
},
"requirePaddingNewLinesBeforeExport": true,
"validateNewlineAfterArrayElements": {
"maximum": 6
},
"requirePaddingNewLinesAfterUseStrict": true,
"disallowArrowFunctions": true,
"disallowMultiLineTernary": true,
"validateOrderInObjectKeys": false,
"disallowIdenticalDestructuringNames": true,
"disallowNestedTernaries": { "maxLevel": 1 },
"requireSpaceAfterComma": { "allExcept": ["trailing"] },
"requireAlignedMultilineParams": false,
"requireSpacesInGenerator": {
"afterStar": true
},
"disallowSpacesInGenerator": {
"beforeStar": true
},
"disallowVar": false,
"requireArrayDestructuring": false,
"requireEnhancedObjectLiterals": false,
"requireObjectDestructuring": false,
"requireEarlyReturn": false,
"requireCapitalizedConstructorsNew": {
"allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"]
},
"requireImportAlphabetized": false,
"requireSpaceBeforeObjectValues": true,
"requireSpaceBeforeDestructuredValues": true,
"disallowSpacesInsideTemplateStringPlaceholders": true,
"disallowArrayDestructuringReturn": false,
"requireNewlineBeforeSingleStatementsInIf": false,
"disallowUnusedVariables": true,
"requireSpacesInsideImportedObjectBraces": true,
"requireUseStrict": true
}
-1
View File
@@ -1 +0,0 @@
test
-179
View File
@@ -1,179 +0,0 @@
language: node_js
os:
- linux
node_js:
- "7.9"
- "6.10"
- "5.12"
- "4.8"
- "iojs-v3.3"
- "iojs-v2.5"
- "iojs-v1.8"
- "0.12"
- "0.10"
- "0.8"
before_install:
- 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then npm install -g npm@1.3 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi'
- 'if [ "${TRAVIS_NODE_VERSION}" != "0.6" ] && [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then npm install -g npm; fi'
install:
- 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then nvm install 0.8 && npm install -g npm@1.3 && npm install -g npm@1.4.28 && npm install -g npm@2 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;'
script:
- 'if [ -n "${PRETEST-}" ]; then npm run pretest ; fi'
- 'if [ -n "${POSTTEST-}" ]; then npm run posttest ; fi'
- 'if [ -n "${COVERAGE-}" ]; then npm run coverage ; fi'
- 'if [ -n "${TEST-}" ]; then npm run tests-only ; fi'
sudo: false
env:
- TEST=true
matrix:
fast_finish: true
include:
- node_js: "node"
env: PRETEST=true
- node_js: "node"
env: COVERAGE=true
- node_js: "7.8"
env: TEST=true ALLOW_FAILURE=true
- node_js: "7.7"
env: TEST=true ALLOW_FAILURE=true
- node_js: "7.6"
env: TEST=true ALLOW_FAILURE=true
- node_js: "7.5"
env: TEST=true ALLOW_FAILURE=true
- node_js: "7.4"
env: TEST=true ALLOW_FAILURE=true
- node_js: "7.3"
env: TEST=true ALLOW_FAILURE=true
- node_js: "7.2"
env: TEST=true ALLOW_FAILURE=true
- node_js: "7.1"
env: TEST=true ALLOW_FAILURE=true
- node_js: "7.0"
env: TEST=true ALLOW_FAILURE=true
- node_js: "6.9"
env: TEST=true ALLOW_FAILURE=true
- node_js: "6.8"
env: TEST=true ALLOW_FAILURE=true
- node_js: "6.7"
env: TEST=true ALLOW_FAILURE=true
- node_js: "6.6"
env: TEST=true ALLOW_FAILURE=true
- node_js: "6.5"
env: TEST=true ALLOW_FAILURE=true
- node_js: "6.4"
env: TEST=true ALLOW_FAILURE=true
- node_js: "6.3"
env: TEST=true ALLOW_FAILURE=true
- node_js: "6.2"
env: TEST=true ALLOW_FAILURE=true
- node_js: "6.1"
env: TEST=true ALLOW_FAILURE=true
- node_js: "6.0"
env: TEST=true ALLOW_FAILURE=true
- node_js: "5.11"
env: TEST=true ALLOW_FAILURE=true
- node_js: "5.10"
env: TEST=true ALLOW_FAILURE=true
- node_js: "5.9"
env: TEST=true ALLOW_FAILURE=true
- node_js: "5.8"
env: TEST=true ALLOW_FAILURE=true
- node_js: "5.7"
env: TEST=true ALLOW_FAILURE=true
- node_js: "5.6"
env: TEST=true ALLOW_FAILURE=true
- node_js: "5.5"
env: TEST=true ALLOW_FAILURE=true
- node_js: "5.4"
env: TEST=true ALLOW_FAILURE=true
- node_js: "5.3"
env: TEST=true ALLOW_FAILURE=true
- node_js: "5.2"
env: TEST=true ALLOW_FAILURE=true
- node_js: "5.1"
env: TEST=true ALLOW_FAILURE=true
- node_js: "5.0"
env: TEST=true ALLOW_FAILURE=true
- node_js: "4.7"
env: TEST=true ALLOW_FAILURE=true
- node_js: "4.6"
env: TEST=true ALLOW_FAILURE=true
- node_js: "4.5"
env: TEST=true ALLOW_FAILURE=true
- node_js: "4.4"
env: TEST=true ALLOW_FAILURE=true
- node_js: "4.3"
env: TEST=true ALLOW_FAILURE=true
- node_js: "4.2"
env: TEST=true ALLOW_FAILURE=true
- node_js: "4.1"
env: TEST=true ALLOW_FAILURE=true
- node_js: "4.0"
env: TEST=true ALLOW_FAILURE=true
- node_js: "iojs-v3.2"
env: TEST=true ALLOW_FAILURE=true
- node_js: "iojs-v3.1"
env: TEST=true ALLOW_FAILURE=true
- node_js: "iojs-v3.0"
env: TEST=true ALLOW_FAILURE=true
- node_js: "iojs-v2.4"
env: TEST=true ALLOW_FAILURE=true
- node_js: "iojs-v2.3"
env: TEST=true ALLOW_FAILURE=true
- node_js: "iojs-v2.2"
env: TEST=true ALLOW_FAILURE=true
- node_js: "iojs-v2.1"
env: TEST=true ALLOW_FAILURE=true
- node_js: "iojs-v2.0"
env: TEST=true ALLOW_FAILURE=true
- node_js: "iojs-v1.7"
env: TEST=true ALLOW_FAILURE=true
- node_js: "iojs-v1.6"
env: TEST=true ALLOW_FAILURE=true
- node_js: "iojs-v1.5"
env: TEST=true ALLOW_FAILURE=true
- node_js: "iojs-v1.4"
env: TEST=true ALLOW_FAILURE=true
- node_js: "iojs-v1.3"
env: TEST=true ALLOW_FAILURE=true
- node_js: "iojs-v1.2"
env: TEST=true ALLOW_FAILURE=true
- node_js: "iojs-v1.1"
env: TEST=true ALLOW_FAILURE=true
- node_js: "iojs-v1.0"
env: TEST=true ALLOW_FAILURE=true
- node_js: "0.11"
env: TEST=true ALLOW_FAILURE=true
- node_js: "0.9"
env: TEST=true ALLOW_FAILURE=true
- node_js: "0.6"
env: TEST=true ALLOW_FAILURE=true
- node_js: "0.4"
env: TEST=true ALLOW_FAILURE=true
##- node_js: "7"
#env: TEST=true
#os: osx
#- node_js: "6"
#env: TEST=true
#os: osx
#- node_js: "5"
#env: TEST=true
#os: osx
#- node_js: "4"
#env: TEST=true
#os: osx
#- node_js: "iojs"
#env: TEST=true
#os: osx
#- node_js: "0.12"
#env: TEST=true
#os: osx
#- node_js: "0.10"
#env: TEST=true
#os: osx
#- node_js: "0.8"
#env: TEST=true
#os: osx
allow_failures:
- os: osx
- env: TEST=true ALLOW_FAILURE=true
-77
View File
@@ -1,77 +0,0 @@
3.0.1 / 2017-04-27
==================
* [Fix] deep extending should work with a non-object (#46)
* [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`
* [Tests] up to `node` `v7.9`, `v6.10`, `v4.8`; improve matrix
* [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG.
* [Docs] Add example to readme (#34)
3.0.0 / 2015-07-01
==================
* [Possible breaking change] Use global "strict" directive (#32)
* [Tests] `int` is an ES3 reserved word
* [Tests] Test up to `io.js` `v2.3`
* [Tests] Add `npm run eslint`
* [Dev Deps] Update `covert`, `jscs`
2.0.1 / 2015-04-25
==================
* Use an inline `isArray` check, for ES3 browsers. (#27)
* Some old browsers fail when an identifier is `toString`
* Test latest `node` and `io.js` versions on `travis-ci`; speed up builds
* Add license info to package.json (#25)
* Update `tape`, `jscs`
* Adding a CHANGELOG
2.0.0 / 2014-10-01
==================
* Increase code coverage to 100%; run code coverage as part of tests
* Add `npm run lint`; Run linter as part of tests
* Remove nodeType and setInterval checks in isPlainObject
* Updating `tape`, `jscs`, `covert`
* General style and README cleanup
1.3.0 / 2014-06-20
==================
* Add component.json for browser support (#18)
* Use SVG for badges in README (#16)
* Updating `tape`, `covert`
* Updating travis-ci to work with multiple node versions
* Fix `deep === false` bug (returning target as {}) (#14)
* Fixing constructor checks in isPlainObject
* Adding additional test coverage
* Adding `npm run coverage`
* Add LICENSE (#13)
* Adding a warning about `false`, per #11
* General style and whitespace cleanup
1.2.1 / 2013-09-14
==================
* Fixing hasOwnProperty bugs that would only have shown up in specific browsers. Fixes #8
* Updating `tape`
1.2.0 / 2013-09-02
==================
* Updating the README: add badges
* Adding a missing variable reference.
* Using `tape` instead of `buster` for tests; add more tests (#7)
* Adding node 0.10 to Travis CI (#6)
* Enabling "npm test" and cleaning up package.json (#5)
* Add Travis CI.
1.1.3 / 2012-12-06
==================
* Added unit tests.
* Ensure extend function is named. (Looks nicer in a stack trace.)
* README cleanup.
1.1.1 / 2012-11-07
==================
* README cleanup.
* Added installation instructions.
* Added a missing semicolon
1.0.0 / 2012-04-08
==================
* Initial commit
-32
View File
@@ -1,32 +0,0 @@
{
"name": "extend",
"author": "Stefan Thomas <justmoon@members.fsf.org> (http://www.justmoon.net)",
"version": "3.0.0",
"description": "Port of jQuery.extend for node.js and the browser.",
"scripts": [
"index.js"
],
"contributors": [
{
"name": "Jordan Harband",
"url": "https://github.com/ljharb"
}
],
"keywords": [
"extend",
"clone",
"merge"
],
"repository" : {
"type": "git",
"url": "https://github.com/justmoon/node-extend.git"
},
"dependencies": {
},
"devDependencies": {
"tape" : "~3.0.0",
"covert": "~0.4.0",
"jscs": "~1.6.2"
}
}
+11 -50
View File
@@ -1,41 +1,19 @@
{
"_args": [
[
{
"raw": "extend@^3.0.0",
"scope": null,
"escapedName": "extend",
"name": "extend",
"rawSpec": "^3.0.0",
"spec": ">=3.0.0 <4.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/eslint/node_modules/remark-parse"
]
],
"_from": "extend@>=3.0.0 <4.0.0",
"_from": "extend@^3.0.0",
"_id": "extend@3.0.1",
"_inCache": true,
"_inBundle": false,
"_integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
"_location": "/extend",
"_nodeVersion": "7.9.0",
"_npmOperationalInternal": {
"host": "packages-18-east.internal.npmjs.com",
"tmp": "tmp/extend-3.0.1.tgz_1493357803699_0.1708133383654058"
},
"_npmUser": {
"name": "ljharb",
"email": "ljharb@gmail.com"
},
"_npmVersion": "4.2.0",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "extend@^3.0.0",
"scope": null,
"escapedName": "extend",
"name": "extend",
"escapedName": "extend",
"rawSpec": "^3.0.0",
"spec": ">=3.0.0 <4.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^3.0.0"
},
"_requiredBy": [
"/remark-parse",
@@ -44,9 +22,8 @@
],
"_resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
"_shasum": "a755ea7bc1adfcc5a31ce7e762dbaadc5e636444",
"_shrinkwrap": null,
"_spec": "extend@^3.0.0",
"_where": "/Users/trott/io.js/tools/eslint/node_modules/remark-parse",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/remark-parse",
"author": {
"name": "Stefan Thomas",
"email": "justmoon@members.fsf.org",
@@ -55,6 +32,7 @@
"bugs": {
"url": "https://github.com/justmoon/node-extend/issues"
},
"bundleDependencies": false,
"contributors": [
{
"name": "Jordan Harband",
@@ -62,6 +40,7 @@
}
],
"dependencies": {},
"deprecated": false,
"description": "Port of jQuery.extend for node.js and the browser",
"devDependencies": {
"@ljharb/eslint-config": "^11.0.0",
@@ -70,12 +49,6 @@
"jscs": "^3.0.7",
"tape": "^4.6.3"
},
"directories": {},
"dist": {
"shasum": "a755ea7bc1adfcc5a31ce7e762dbaadc5e636444",
"tarball": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz"
},
"gitHead": "138b515df4d628bb1742254ede5d2551c0fecae7",
"homepage": "https://github.com/justmoon/node-extend#readme",
"keywords": [
"extend",
@@ -84,19 +57,7 @@
],
"license": "MIT",
"main": "index",
"maintainers": [
{
"name": "justmoon",
"email": "justmoon@members.fsf.org"
},
{
"name": "ljharb",
"email": "ljharb@gmail.com"
}
],
"name": "extend",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/justmoon/node-extend.git"
+13 -48
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "external-editor@^2.0.4",
"scope": null,
"escapedName": "external-editor",
"name": "external-editor",
"rawSpec": "^2.0.4",
"spec": ">=2.0.4 <3.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/inquirer"
]
],
"_from": "external-editor@>=2.0.4 <3.0.0",
"_from": "external-editor@^2.0.4",
"_id": "external-editor@2.0.4",
"_inCache": true,
"_location": "/external-editor",
"_nodeVersion": "7.7.3",
"_npmOperationalInternal": {
"host": "s3://npm-registry-packages",
"tmp": "tmp/external-editor-2.0.4.tgz_1495568005250_0.5491060812491924"
},
"_npmUser": {
"name": "mrkmg",
"email": "kevin@mrkmg.com"
},
"_npmVersion": "4.1.2",
"_inBundle": false,
"_integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=",
"_location": "/eslint/external-editor",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "external-editor@^2.0.4",
"scope": null,
"escapedName": "external-editor",
"name": "external-editor",
"escapedName": "external-editor",
"rawSpec": "^2.0.4",
"spec": ">=2.0.4 <3.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^2.0.4"
},
"_requiredBy": [
"/inquirer"
"/eslint/inquirer"
],
"_resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz",
"_shasum": "1ed9199da9cbfe2ef2f7a31b2fde8b0d12368972",
"_shrinkwrap": null,
"_spec": "external-editor@^2.0.4",
"_where": "/Users/trott/io.js/tools/node_modules/inquirer",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/inquirer",
"author": {
"name": "Kevin Gravier",
"email": "kevin@mrkmg.com",
@@ -53,11 +30,13 @@
"bugs": {
"url": "https://github.com/mrkmg/node-external-editor/issues"
},
"bundleDependencies": false,
"dependencies": {
"iconv-lite": "^0.4.17",
"jschardet": "^1.4.2",
"tmp": "^0.0.31"
},
"deprecated": false,
"description": "Edit a string with the users preferred text editor using $VISUAL or $ENVIRONMENT",
"devDependencies": {
"chai": "^3.5.0",
@@ -65,11 +44,6 @@
"coffeelint": "^1.14.2",
"mocha": "^3.2.0"
},
"directories": {},
"dist": {
"shasum": "1ed9199da9cbfe2ef2f7a31b2fde8b0d12368972",
"tarball": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz"
},
"engines": {
"node": ">=0.12"
},
@@ -78,7 +52,6 @@
"example_sync.js",
"example_async.js"
],
"gitHead": "caa73e5fb283ba64a3c67a51f69a0c49bb544960",
"homepage": "https://github.com/mrkmg/node-external-editor#readme",
"keywords": [
"editor",
@@ -88,15 +61,7 @@
],
"license": "MIT",
"main": "main/index.js",
"maintainers": [
{
"name": "mrkmg",
"email": "kevin@mrkmg.com"
}
],
"name": "external-editor",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/mrkmg/node-external-editor.git"
+13 -49
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "fast-levenshtein@~2.0.4",
"scope": null,
"escapedName": "fast-levenshtein",
"name": "fast-levenshtein",
"rawSpec": "~2.0.4",
"spec": ">=2.0.4 <2.1.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/optionator"
]
],
"_from": "fast-levenshtein@>=2.0.4 <2.1.0",
"_from": "fast-levenshtein@~2.0.4",
"_id": "fast-levenshtein@2.0.6",
"_inCache": true,
"_location": "/fast-levenshtein",
"_nodeVersion": "6.9.1",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/fast-levenshtein-2.0.6.tgz_1482873305730_0.48711988772265613"
},
"_npmUser": {
"name": "hiddentao",
"email": "ram@hiddentao.com"
},
"_npmVersion": "3.10.8",
"_inBundle": false,
"_integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"_location": "/eslint/fast-levenshtein",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "fast-levenshtein@~2.0.4",
"scope": null,
"escapedName": "fast-levenshtein",
"name": "fast-levenshtein",
"escapedName": "fast-levenshtein",
"rawSpec": "~2.0.4",
"spec": ">=2.0.4 <2.1.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "~2.0.4"
},
"_requiredBy": [
"/optionator"
"/eslint/optionator"
],
"_resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"_shasum": "3d8a5c66883a16a30ca8643e851f19baa7797917",
"_shrinkwrap": null,
"_spec": "fast-levenshtein@~2.0.4",
"_where": "/Users/trott/io.js/tools/node_modules/optionator",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/optionator",
"author": {
"name": "Ramesh Nair",
"email": "ram@hiddentao.com",
@@ -53,7 +30,8 @@
"bugs": {
"url": "https://github.com/hiddentao/fast-levenshtein/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "Efficient implementation of Levenshtein algorithm with locale-specific collator support.",
"devDependencies": {
"chai": "~1.5.0",
@@ -68,15 +46,9 @@
"lodash": "^4.0.1",
"mocha": "~1.9.0"
},
"directories": {},
"dist": {
"shasum": "3d8a5c66883a16a30ca8643e851f19baa7797917",
"tarball": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
},
"files": [
"levenshtein.js"
],
"gitHead": "5bffe7151f99fb02f319f70a004e653105a760fb",
"homepage": "https://github.com/hiddentao/fast-levenshtein#readme",
"keywords": [
"levenshtein",
@@ -85,15 +57,7 @@
],
"license": "MIT",
"main": "levenshtein.js",
"maintainers": [
{
"name": "hiddentao",
"email": "ram@hiddentao.com"
}
],
"name": "fast-levenshtein",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/hiddentao/fast-levenshtein.git"
+13 -48
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "figures@^2.0.0",
"scope": null,
"escapedName": "figures",
"name": "figures",
"rawSpec": "^2.0.0",
"spec": ">=2.0.0 <3.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/inquirer"
]
],
"_from": "figures@>=2.0.0 <3.0.0",
"_from": "figures@^2.0.0",
"_id": "figures@2.0.0",
"_inCache": true,
"_location": "/figures",
"_nodeVersion": "4.6.0",
"_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com",
"tmp": "tmp/figures-2.0.0.tgz_1476763139845_0.48903139564208686"
},
"_npmUser": {
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
},
"_npmVersion": "2.15.9",
"_inBundle": false,
"_integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
"_location": "/eslint/figures",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "figures@^2.0.0",
"scope": null,
"escapedName": "figures",
"name": "figures",
"escapedName": "figures",
"rawSpec": "^2.0.0",
"spec": ">=2.0.0 <3.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^2.0.0"
},
"_requiredBy": [
"/inquirer"
"/eslint/inquirer"
],
"_resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
"_shasum": "3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962",
"_shrinkwrap": null,
"_spec": "figures@^2.0.0",
"_where": "/Users/trott/io.js/tools/node_modules/inquirer",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/inquirer",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
@@ -53,9 +30,11 @@
"bugs": {
"url": "https://github.com/sindresorhus/figures/issues"
},
"bundleDependencies": false,
"dependencies": {
"escape-string-regexp": "^1.0.5"
},
"deprecated": false,
"description": "Unicode symbols with Windows CMD fallbacks",
"devDependencies": {
"ava": "*",
@@ -63,18 +42,12 @@
"require-uncached": "^1.0.2",
"xo": "*"
},
"directories": {},
"dist": {
"shasum": "3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962",
"tarball": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz"
},
"engines": {
"node": ">=4"
},
"files": [
"index.js"
],
"gitHead": "fee8887d9f776798ae87ff54386443273c92ad97",
"homepage": "https://github.com/sindresorhus/figures#readme",
"keywords": [
"unicode",
@@ -90,15 +63,7 @@
"fallback"
],
"license": "MIT",
"maintainers": [
{
"name": "sindresorhus",
"email": "sindresorhus@gmail.com"
}
],
"name": "figures",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/sindresorhus/figures.git"
+12 -47
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "file-entry-cache@^2.0.0",
"scope": null,
"escapedName": "file-entry-cache",
"name": "file-entry-cache",
"rawSpec": "^2.0.0",
"spec": ">=2.0.0 <3.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/eslint"
]
],
"_from": "file-entry-cache@>=2.0.0 <3.0.0",
"_from": "file-entry-cache@^2.0.0",
"_id": "file-entry-cache@2.0.0",
"_inCache": true,
"_location": "/file-entry-cache",
"_nodeVersion": "6.3.0",
"_npmOperationalInternal": {
"host": "packages-16-east.internal.npmjs.com",
"tmp": "tmp/file-entry-cache-2.0.0.tgz_1471380536263_0.40089720860123634"
},
"_npmUser": {
"name": "royriojas",
"email": "royriojas@gmail.com"
},
"_npmVersion": "3.10.3",
"_inBundle": false,
"_integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
"_location": "/eslint/file-entry-cache",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "file-entry-cache@^2.0.0",
"scope": null,
"escapedName": "file-entry-cache",
"name": "file-entry-cache",
"escapedName": "file-entry-cache",
"rawSpec": "^2.0.0",
"spec": ">=2.0.0 <3.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^2.0.0"
},
"_requiredBy": [
"/eslint"
],
"_resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
"_shasum": "c392990c3e684783d838b8c84a45d8a048458361",
"_shrinkwrap": null,
"_spec": "file-entry-cache@^2.0.0",
"_where": "/Users/trott/io.js/tools/node_modules/eslint",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint",
"author": {
"name": "Roy Riojas",
"url": "http://royriojas.com"
@@ -52,6 +29,7 @@
"bugs": {
"url": "https://github.com/royriojas/file-entry-cache/issues"
},
"bundleDependencies": false,
"changelogx": {
"ignoreRegExp": [
"BLD: Release",
@@ -68,6 +46,7 @@
"flat-cache": "^1.2.1",
"object-assign": "^4.0.1"
},
"deprecated": false,
"description": "Super simple cache for file metadata, useful for process that work o a given series of files and that only need to repeat the job on the changed ones since the previous run of the process",
"devDependencies": {
"chai": "^3.2.0",
@@ -87,18 +66,12 @@
"watch-run": "^1.2.1",
"write": "^0.3.1"
},
"directories": {},
"dist": {
"shasum": "c392990c3e684783d838b8c84a45d8a048458361",
"tarball": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz"
},
"engines": {
"node": ">=0.10.0"
},
"files": [
"cache.js"
],
"gitHead": "8c015253938e1756104b524c09ea48798e788aa0",
"homepage": "https://github.com/royriojas/file-entry-cache#readme",
"keywords": [
"file cache",
@@ -110,21 +83,13 @@
],
"license": "MIT",
"main": "cache.js",
"maintainers": [
{
"name": "royriojas",
"email": "royriojas@gmail.com"
}
],
"name": "file-entry-cache",
"optionalDependencies": {},
"precommit": [
"npm run verify"
],
"prepush": [
"npm run verify"
],
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/royriojas/file-entry-cache.git"
+13 -48
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "flat-cache@^1.2.1",
"scope": null,
"escapedName": "flat-cache",
"name": "flat-cache",
"rawSpec": "^1.2.1",
"spec": ">=1.2.1 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/file-entry-cache"
]
],
"_from": "flat-cache@>=1.2.1 <2.0.0",
"_from": "flat-cache@^1.2.1",
"_id": "flat-cache@1.2.2",
"_inCache": true,
"_location": "/flat-cache",
"_nodeVersion": "6.9.1",
"_npmOperationalInternal": {
"host": "packages-18-east.internal.npmjs.com",
"tmp": "tmp/flat-cache-1.2.2.tgz_1482199463409_0.13759022881276906"
},
"_npmUser": {
"name": "royriojas",
"email": "royriojas@gmail.com"
},
"_npmVersion": "3.10.8",
"_inBundle": false,
"_integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=",
"_location": "/eslint/flat-cache",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "flat-cache@^1.2.1",
"scope": null,
"escapedName": "flat-cache",
"name": "flat-cache",
"escapedName": "flat-cache",
"rawSpec": "^1.2.1",
"spec": ">=1.2.1 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.2.1"
},
"_requiredBy": [
"/file-entry-cache"
"/eslint/file-entry-cache"
],
"_resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz",
"_shasum": "fa86714e72c21db88601761ecf2f555d1abc6b96",
"_shrinkwrap": null,
"_spec": "flat-cache@^1.2.1",
"_where": "/Users/trott/io.js/tools/node_modules/file-entry-cache",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/file-entry-cache",
"author": {
"name": "Roy Riojas",
"url": "http://royriojas.com"
@@ -52,6 +29,7 @@
"bugs": {
"url": "https://github.com/royriojas/flat-cache/issues"
},
"bundleDependencies": false,
"changelogx": {
"ignoreRegExp": [
"BLD: Release",
@@ -70,6 +48,7 @@
"graceful-fs": "^4.1.2",
"write": "^0.2.1"
},
"deprecated": false,
"description": "A stupidly simple key/value storage using files to persist some data",
"devDependencies": {
"chai": "^3.2.0",
@@ -86,11 +65,6 @@
"sinon-chai": "^2.8.0",
"watch-run": "^1.2.2"
},
"directories": {},
"dist": {
"shasum": "fa86714e72c21db88601761ecf2f555d1abc6b96",
"tarball": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz"
},
"engines": {
"node": ">=0.10.0"
},
@@ -98,7 +72,6 @@
"cache.js",
"utils.js"
],
"gitHead": "9fdf499efd3dfb950e563ed7486623d7dc3e26c8",
"homepage": "https://github.com/royriojas/flat-cache#readme",
"keywords": [
"json cache",
@@ -110,21 +83,13 @@
],
"license": "MIT",
"main": "cache.js",
"maintainers": [
{
"name": "royriojas",
"email": "royriojas@gmail.com"
}
],
"name": "flat-cache",
"optionalDependencies": {},
"precommit": [
"npm run verify --silent"
],
"prepush": [
"npm run verify --silent"
],
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/royriojas/flat-cache.git"
+13 -48
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "fs.realpath@^1.0.0",
"scope": null,
"escapedName": "fs.realpath",
"name": "fs.realpath",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/glob"
]
],
"_from": "fs.realpath@>=1.0.0 <2.0.0",
"_from": "fs.realpath@^1.0.0",
"_id": "fs.realpath@1.0.0",
"_inCache": true,
"_location": "/fs.realpath",
"_nodeVersion": "4.4.4",
"_npmOperationalInternal": {
"host": "packages-16-east.internal.npmjs.com",
"tmp": "tmp/fs.realpath-1.0.0.tgz_1466015941059_0.3332864767871797"
},
"_npmUser": {
"name": "isaacs",
"email": "i@izs.me"
},
"_npmVersion": "3.9.1",
"_inBundle": false,
"_integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"_location": "/eslint/fs.realpath",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "fs.realpath@^1.0.0",
"scope": null,
"escapedName": "fs.realpath",
"name": "fs.realpath",
"escapedName": "fs.realpath",
"rawSpec": "^1.0.0",
"spec": ">=1.0.0 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.0"
},
"_requiredBy": [
"/glob"
"/eslint/glob"
],
"_resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"_shasum": "1504ad2523158caa40db4a2787cb01411994ea4f",
"_shrinkwrap": null,
"_spec": "fs.realpath@^1.0.0",
"_where": "/Users/trott/io.js/tools/node_modules/glob",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/glob",
"author": {
"name": "Isaac Z. Schlueter",
"email": "i@izs.me",
@@ -53,19 +30,15 @@
"bugs": {
"url": "https://github.com/isaacs/fs.realpath/issues"
},
"bundleDependencies": false,
"dependencies": {},
"deprecated": false,
"description": "Use node's fs.realpath, but fall back to the JS implementation if the native one fails",
"devDependencies": {},
"directories": {},
"dist": {
"shasum": "1504ad2523158caa40db4a2787cb01411994ea4f",
"tarball": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
},
"files": [
"old.js",
"index.js"
],
"gitHead": "03e7c884431fe185dfebbc9b771aeca339c1807a",
"homepage": "https://github.com/isaacs/fs.realpath#readme",
"keywords": [
"realpath",
@@ -74,15 +47,7 @@
],
"license": "ISC",
"main": "index.js",
"maintainers": [
{
"name": "isaacs",
"email": "i@izs.me"
}
],
"name": "fs.realpath",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/isaacs/fs.realpath.git"
-13
View File
@@ -1,13 +0,0 @@
{
"root": true,
"extends": "@ljharb",
"rules": {
"max-nested-callbacks": [2, 3],
"max-params": [2, 3],
"max-statements": [2, 20],
"no-new-func": [1],
"strict": [0]
}
}
-159
View File
@@ -1,159 +0,0 @@
{
"es3": true,
"additionalRules": [],
"requireSemicolons": true,
"disallowMultipleSpaces": true,
"disallowIdentifierNames": [],
"requireCurlyBraces": {
"allExcept": [],
"keywords": ["if", "else", "for", "while", "do", "try", "catch"]
},
"requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"],
"disallowSpaceAfterKeywords": [],
"disallowSpaceBeforeComma": true,
"disallowSpaceAfterComma": false,
"disallowSpaceBeforeSemicolon": true,
"disallowNodeTypes": [
"DebuggerStatement",
"ForInStatement",
"LabeledStatement",
"SwitchCase",
"SwitchStatement",
"WithStatement"
],
"requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] },
"requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true },
"requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true },
"disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true },
"requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true },
"disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true },
"requireSpaceBetweenArguments": true,
"disallowSpacesInsideParentheses": true,
"disallowSpacesInsideArrayBrackets": true,
"disallowQuotedKeysInObjects": "allButReserved",
"disallowSpaceAfterObjectKeys": true,
"requireCommaBeforeLineBreak": true,
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
"requireSpaceAfterPrefixUnaryOperators": [],
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
"requireSpaceBeforePostfixUnaryOperators": [],
"disallowSpaceBeforeBinaryOperators": [],
"requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
"requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
"disallowSpaceAfterBinaryOperators": [],
"disallowImplicitTypeConversion": ["binary", "string"],
"disallowKeywords": ["with", "eval"],
"requireKeywordsOnNewLine": [],
"disallowKeywordsOnNewLine": ["else"],
"requireLineFeedAtFileEnd": true,
"disallowTrailingWhitespace": true,
"disallowTrailingComma": true,
"excludeFiles": ["node_modules/**", "vendor/**"],
"disallowMultipleLineStrings": true,
"requireDotNotation": { "allExcept": ["keywords"] },
"requireParenthesesAroundIIFE": true,
"validateLineBreaks": "LF",
"validateQuoteMarks": {
"escape": true,
"mark": "'"
},
"disallowOperatorBeforeLineBreak": [],
"requireSpaceBeforeKeywords": [
"do",
"for",
"if",
"else",
"switch",
"case",
"try",
"catch",
"finally",
"while",
"with",
"return"
],
"validateAlignedFunctionParameters": {
"lineBreakAfterOpeningBraces": true,
"lineBreakBeforeClosingBraces": true
},
"requirePaddingNewLinesBeforeExport": true,
"validateNewlineAfterArrayElements": {
"maximum": 8
},
"requirePaddingNewLinesAfterUseStrict": true,
"disallowArrowFunctions": true,
"disallowMultiLineTernary": true,
"validateOrderInObjectKeys": "asc-insensitive",
"disallowIdenticalDestructuringNames": true,
"disallowNestedTernaries": { "maxLevel": 1 },
"requireSpaceAfterComma": { "allExcept": ["trailing"] },
"requireAlignedMultilineParams": false,
"requireSpacesInGenerator": {
"afterStar": true
},
"disallowSpacesInGenerator": {
"beforeStar": true
},
"disallowVar": false,
"requireArrayDestructuring": false,
"requireEnhancedObjectLiterals": false,
"requireObjectDestructuring": false,
"requireEarlyReturn": false,
"requireCapitalizedConstructorsNew": {
"allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"]
}
}
-16
View File
@@ -1,16 +0,0 @@
.DS_Store
.monitor
.*.swp
.nodemonignore
releases
*.log
*.err
fleet.json
public/browserify
bin/*.json
.bin
build
compile
.lock-wscript
coverage
node_modules
-77
View File
@@ -1,77 +0,0 @@
language: node_js
node_js:
- "5.6"
- "5.5"
- "5.4"
- "5.3"
- "5.2"
- "5.1"
- "5.0"
- "4.3"
- "4.2"
- "4.1"
- "4.0"
- "iojs-v3.3"
- "iojs-v3.2"
- "iojs-v3.1"
- "iojs-v3.0"
- "iojs-v2.5"
- "iojs-v2.4"
- "iojs-v2.3"
- "iojs-v2.2"
- "iojs-v2.1"
- "iojs-v2.0"
- "iojs-v1.8"
- "iojs-v1.7"
- "iojs-v1.6"
- "iojs-v1.5"
- "iojs-v1.4"
- "iojs-v1.3"
- "iojs-v1.2"
- "iojs-v1.1"
- "iojs-v1.0"
- "0.12"
- "0.11"
- "0.10"
- "0.9"
- "0.8"
- "0.6"
- "0.4"
before_install:
- 'if [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi'
- 'if [ "${TRAVIS_NODE_VERSION}" != "0.6" ] && [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then npm install -g npm; fi'
script:
- 'if [ "${TRAVIS_NODE_VERSION}" != "4.3" ]; then npm run tests-only ; else npm test ; fi'
sudo: false
matrix:
fast_finish: true
allow_failures:
- node_js: "5.5"
- node_js: "5.4"
- node_js: "5.3"
- node_js: "5.2"
- node_js: "5.1"
- node_js: "5.0"
- node_js: "4.2"
- node_js: "4.1"
- node_js: "4.0"
- node_js: "iojs-v3.2"
- node_js: "iojs-v3.1"
- node_js: "iojs-v3.0"
- node_js: "iojs-v2.4"
- node_js: "iojs-v2.3"
- node_js: "iojs-v2.2"
- node_js: "iojs-v2.1"
- node_js: "iojs-v2.0"
- node_js: "iojs-v1.7"
- node_js: "iojs-v1.6"
- node_js: "iojs-v1.5"
- node_js: "iojs-v1.4"
- node_js: "iojs-v1.3"
- node_js: "iojs-v1.2"
- node_js: "iojs-v1.1"
- node_js: "iojs-v1.0"
- node_js: "0.11"
- node_js: "0.9"
- node_js: "0.6"
- node_js: "0.4"
+11 -50
View File
@@ -1,50 +1,27 @@
{
"_args": [
[
{
"raw": "function-bind@^1.0.2",
"scope": null,
"escapedName": "function-bind",
"name": "function-bind",
"rawSpec": "^1.0.2",
"spec": ">=1.0.2 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/eslint/node_modules/has"
]
],
"_from": "function-bind@>=1.0.2 <2.0.0",
"_from": "function-bind@^1.0.2",
"_id": "function-bind@1.1.0",
"_inCache": true,
"_inBundle": false,
"_integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=",
"_location": "/function-bind",
"_nodeVersion": "5.6.0",
"_npmOperationalInternal": {
"host": "packages-6-west.internal.npmjs.com",
"tmp": "tmp/function-bind-1.1.0.tgz_1455438520627_0.822420896962285"
},
"_npmUser": {
"name": "ljharb",
"email": "ljharb@gmail.com"
},
"_npmVersion": "3.6.0",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "function-bind@^1.0.2",
"scope": null,
"escapedName": "function-bind",
"name": "function-bind",
"escapedName": "function-bind",
"rawSpec": "^1.0.2",
"spec": ">=1.0.2 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.0.2"
},
"_requiredBy": [
"/has"
],
"_resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz",
"_shasum": "16176714c801798e4e8f2cf7f7529467bb4a5771",
"_shrinkwrap": null,
"_spec": "function-bind@^1.0.2",
"_where": "/Users/trott/io.js/tools/eslint/node_modules/has",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/has",
"author": {
"name": "Raynos",
"email": "raynos2@gmail.com"
@@ -53,6 +30,7 @@
"url": "https://github.com/Raynos/function-bind/issues",
"email": "raynos2@gmail.com"
},
"bundleDependencies": false,
"contributors": [
{
"name": "Raynos"
@@ -63,6 +41,7 @@
}
],
"dependencies": {},
"deprecated": false,
"description": "Implementation of Function.prototype.bind",
"devDependencies": {
"@ljharb/eslint-config": "^2.1.0",
@@ -71,12 +50,6 @@
"jscs": "^2.9.0",
"tape": "^4.4.0"
},
"directories": {},
"dist": {
"shasum": "16176714c801798e4e8f2cf7f7529467bb4a5771",
"tarball": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz"
},
"gitHead": "cb5057f2a0018ac48c812ccee86934a5af30efdb",
"homepage": "https://github.com/Raynos/function-bind",
"keywords": [
"function",
@@ -91,19 +64,7 @@
}
],
"main": "index",
"maintainers": [
{
"name": "raynos",
"email": "raynos2@gmail.com"
},
{
"name": "ljharb",
"email": "ljharb@gmail.com"
}
],
"name": "function-bind",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git://github.com/Raynos/function-bind.git"
-250
View File
@@ -1,250 +0,0 @@
var test = require('tape');
var functionBind = require('../implementation');
var getCurrentContext = function () { return this; };
test('functionBind is a function', function (t) {
t.equal(typeof functionBind, 'function');
t.end();
});
test('non-functions', function (t) {
var nonFunctions = [true, false, [], {}, 42, 'foo', NaN, /a/g];
t.plan(nonFunctions.length);
for (var i = 0; i < nonFunctions.length; ++i) {
try { functionBind.call(nonFunctions[i]); } catch (ex) {
t.ok(ex instanceof TypeError, 'throws when given ' + String(nonFunctions[i]));
}
}
t.end();
});
test('without a context', function (t) {
t.test('binds properly', function (st) {
var args, context;
var namespace = {
func: functionBind.call(function () {
args = Array.prototype.slice.call(arguments);
context = this;
})
};
namespace.func(1, 2, 3);
st.deepEqual(args, [1, 2, 3]);
st.equal(context, getCurrentContext.call());
st.end();
});
t.test('binds properly, and still supplies bound arguments', function (st) {
var args, context;
var namespace = {
func: functionBind.call(function () {
args = Array.prototype.slice.call(arguments);
context = this;
}, undefined, 1, 2, 3)
};
namespace.func(4, 5, 6);
st.deepEqual(args, [1, 2, 3, 4, 5, 6]);
st.equal(context, getCurrentContext.call());
st.end();
});
t.test('returns properly', function (st) {
var args;
var namespace = {
func: functionBind.call(function () {
args = Array.prototype.slice.call(arguments);
return this;
}, null)
};
var context = namespace.func(1, 2, 3);
st.equal(context, getCurrentContext.call(), 'returned context is namespaced context');
st.deepEqual(args, [1, 2, 3], 'passed arguments are correct');
st.end();
});
t.test('returns properly with bound arguments', function (st) {
var args;
var namespace = {
func: functionBind.call(function () {
args = Array.prototype.slice.call(arguments);
return this;
}, null, 1, 2, 3)
};
var context = namespace.func(4, 5, 6);
st.equal(context, getCurrentContext.call(), 'returned context is namespaced context');
st.deepEqual(args, [1, 2, 3, 4, 5, 6], 'passed arguments are correct');
st.end();
});
t.test('called as a constructor', function (st) {
var thunkify = function (value) {
return function () { return value; };
};
st.test('returns object value', function (sst) {
var expectedReturnValue = [1, 2, 3];
var Constructor = functionBind.call(thunkify(expectedReturnValue), null);
var result = new Constructor();
sst.equal(result, expectedReturnValue);
sst.end();
});
st.test('does not return primitive value', function (sst) {
var Constructor = functionBind.call(thunkify(42), null);
var result = new Constructor();
sst.notEqual(result, 42);
sst.end();
});
st.test('object from bound constructor is instance of original and bound constructor', function (sst) {
var A = function (x) {
this.name = x || 'A';
};
var B = functionBind.call(A, null, 'B');
var result = new B();
sst.ok(result instanceof B, 'result is instance of bound constructor');
sst.ok(result instanceof A, 'result is instance of original constructor');
sst.end();
});
st.end();
});
t.end();
});
test('with a context', function (t) {
t.test('with no bound arguments', function (st) {
var args, context;
var boundContext = {};
var namespace = {
func: functionBind.call(function () {
args = Array.prototype.slice.call(arguments);
context = this;
}, boundContext)
};
namespace.func(1, 2, 3);
st.equal(context, boundContext, 'binds a context properly');
st.deepEqual(args, [1, 2, 3], 'supplies passed arguments');
st.end();
});
t.test('with bound arguments', function (st) {
var args, context;
var boundContext = {};
var namespace = {
func: functionBind.call(function () {
args = Array.prototype.slice.call(arguments);
context = this;
}, boundContext, 1, 2, 3)
};
namespace.func(4, 5, 6);
st.equal(context, boundContext, 'binds a context properly');
st.deepEqual(args, [1, 2, 3, 4, 5, 6], 'supplies bound and passed arguments');
st.end();
});
t.test('returns properly', function (st) {
var boundContext = {};
var args;
var namespace = {
func: functionBind.call(function () {
args = Array.prototype.slice.call(arguments);
return this;
}, boundContext)
};
var context = namespace.func(1, 2, 3);
st.equal(context, boundContext, 'returned context is bound context');
st.notEqual(context, getCurrentContext.call(), 'returned context is not lexical context');
st.deepEqual(args, [1, 2, 3], 'passed arguments are correct');
st.end();
});
t.test('returns properly with bound arguments', function (st) {
var boundContext = {};
var args;
var namespace = {
func: functionBind.call(function () {
args = Array.prototype.slice.call(arguments);
return this;
}, boundContext, 1, 2, 3)
};
var context = namespace.func(4, 5, 6);
st.equal(context, boundContext, 'returned context is bound context');
st.notEqual(context, getCurrentContext.call(), 'returned context is not lexical context');
st.deepEqual(args, [1, 2, 3, 4, 5, 6], 'passed arguments are correct');
st.end();
});
t.test('passes the correct arguments when called as a constructor', function (st) {
var expected = { name: 'Correct' };
var namespace = {
Func: functionBind.call(function (arg) {
return arg;
}, { name: 'Incorrect' })
};
var returned = new namespace.Func(expected);
st.equal(returned, expected, 'returns the right arg when called as a constructor');
st.end();
});
t.test('has the new instance\'s context when called as a constructor', function (st) {
var actualContext;
var expectedContext = { foo: 'bar' };
var namespace = {
Func: functionBind.call(function () {
actualContext = this;
}, expectedContext)
};
var result = new namespace.Func();
st.equal(result instanceof namespace.Func, true);
st.notEqual(actualContext, expectedContext);
st.end();
});
t.end();
});
test('bound function length', function (t) {
t.test('sets a correct length without thisArg', function (st) {
var subject = functionBind.call(function (a, b, c) { return a + b + c; });
st.equal(subject.length, 3);
st.equal(subject(1, 2, 3), 6);
st.end();
});
t.test('sets a correct length with thisArg', function (st) {
var subject = functionBind.call(function (a, b, c) { return a + b + c; }, {});
st.equal(subject.length, 3);
st.equal(subject(1, 2, 3), 6);
st.end();
});
t.test('sets a correct length without thisArg and first argument', function (st) {
var subject = functionBind.call(function (a, b, c) { return a + b + c; }, undefined, 1);
st.equal(subject.length, 2);
st.equal(subject(2, 3), 6);
st.end();
});
t.test('sets a correct length with thisArg and first argument', function (st) {
var subject = functionBind.call(function (a, b, c) { return a + b + c; }, {}, 1);
st.equal(subject.length, 2);
st.equal(subject(2, 3), 6);
st.end();
});
t.test('sets a correct length without thisArg and too many arguments', function (st) {
var subject = functionBind.call(function (a, b, c) { return a + b + c; }, undefined, 1, 2, 3, 4);
st.equal(subject.length, 0);
st.equal(subject(), 6);
st.end();
});
t.test('sets a correct length with thisArg and too many arguments', function (st) {
var subject = functionBind.call(function (a, b, c) { return a + b + c; }, {}, 1, 2, 3, 4);
st.equal(subject.length, 0);
st.equal(subject(), 6);
st.end();
});
});
+13 -44
View File
@@ -1,62 +1,39 @@
{
"_args": [
[
{
"raw": "generate-function@^2.0.0",
"scope": null,
"escapedName": "generate-function",
"name": "generate-function",
"rawSpec": "^2.0.0",
"spec": ">=2.0.0 <3.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/is-my-json-valid"
]
],
"_from": "generate-function@>=2.0.0 <3.0.0",
"_from": "generate-function@^2.0.0",
"_id": "generate-function@2.0.0",
"_inCache": true,
"_location": "/generate-function",
"_npmUser": {
"name": "mafintosh",
"email": "mathiasbuus@gmail.com"
},
"_npmVersion": "1.4.23",
"_inBundle": false,
"_integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
"_location": "/eslint/generate-function",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "generate-function@^2.0.0",
"scope": null,
"escapedName": "generate-function",
"name": "generate-function",
"escapedName": "generate-function",
"rawSpec": "^2.0.0",
"spec": ">=2.0.0 <3.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^2.0.0"
},
"_requiredBy": [
"/is-my-json-valid"
"/eslint/is-my-json-valid"
],
"_resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
"_shasum": "6858fe7c0969b7d4e9093337647ac79f60dfbe74",
"_shrinkwrap": null,
"_spec": "generate-function@^2.0.0",
"_where": "/Users/trott/io.js/tools/node_modules/is-my-json-valid",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/is-my-json-valid",
"author": {
"name": "Mathias Buus"
},
"bugs": {
"url": "https://github.com/mafintosh/generate-function/issues"
},
"dependencies": {},
"bundleDependencies": false,
"deprecated": false,
"description": "Module that helps you write generated functions in Node",
"devDependencies": {
"tape": "^2.13.4"
},
"directories": {},
"dist": {
"shasum": "6858fe7c0969b7d4e9093337647ac79f60dfbe74",
"tarball": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz"
},
"gitHead": "3d5fc8de5859be95f58e3af9bfb5f663edd95149",
"homepage": "https://github.com/mafintosh/generate-function",
"keywords": [
"generate",
@@ -67,15 +44,7 @@
],
"license": "MIT",
"main": "index.js",
"maintainers": [
{
"name": "mafintosh",
"email": "mathiasbuus@gmail.com"
}
],
"name": "generate-function",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/mafintosh/generate-function.git"
+13 -44
View File
@@ -1,46 +1,27 @@
{
"_args": [
[
{
"raw": "generate-object-property@^1.1.0",
"scope": null,
"escapedName": "generate-object-property",
"name": "generate-object-property",
"rawSpec": "^1.1.0",
"spec": ">=1.1.0 <2.0.0",
"type": "range"
},
"/Users/trott/io.js/tools/node_modules/is-my-json-valid"
]
],
"_from": "generate-object-property@>=1.1.0 <2.0.0",
"_from": "generate-object-property@^1.1.0",
"_id": "generate-object-property@1.2.0",
"_inCache": true,
"_location": "/generate-object-property",
"_nodeVersion": "2.0.1",
"_npmUser": {
"name": "mafintosh",
"email": "mathiasbuus@gmail.com"
},
"_npmVersion": "2.9.0",
"_inBundle": false,
"_integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
"_location": "/eslint/generate-object-property",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "generate-object-property@^1.1.0",
"scope": null,
"escapedName": "generate-object-property",
"name": "generate-object-property",
"escapedName": "generate-object-property",
"rawSpec": "^1.1.0",
"spec": ">=1.1.0 <2.0.0",
"type": "range"
"saveSpec": null,
"fetchSpec": "^1.1.0"
},
"_requiredBy": [
"/is-my-json-valid"
"/eslint/is-my-json-valid"
],
"_resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
"_shasum": "9c0e1c40308ce804f4783618b937fa88f99d50d0",
"_shrinkwrap": null,
"_spec": "generate-object-property@^1.1.0",
"_where": "/Users/trott/io.js/tools/node_modules/is-my-json-valid",
"_where": "/Users/trott/io.js/tools/eslint-tmp/node_modules/eslint/node_modules/is-my-json-valid",
"author": {
"name": "Mathias Buus",
"url": "@mafintosh"
@@ -48,31 +29,19 @@
"bugs": {
"url": "https://github.com/mafintosh/generate-object-property/issues"
},
"bundleDependencies": false,
"dependencies": {
"is-property": "^1.0.0"
},
"deprecated": false,
"description": "Generate safe JS code that can used to reference a object property",
"devDependencies": {
"tape": "^2.13.0"
},
"directories": {},
"dist": {
"shasum": "9c0e1c40308ce804f4783618b937fa88f99d50d0",
"tarball": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz"
},
"gitHead": "0dd7d411018de54b2eae63b424c15b3e50bd678c",
"homepage": "https://github.com/mafintosh/generate-object-property",
"license": "MIT",
"main": "index.js",
"maintainers": [
{
"name": "mafintosh",
"email": "mathiasbuus@gmail.com"
}
],
"name": "generate-object-property",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/mafintosh/generate-object-property.git"
Loaded 100 of 242 files, more files were not shown because too many files have changed in this diff. Show more