chore: eslint instead of standard

This commit is contained in:
Julien Fontanet 2017-11-17 17:42:48 +01:00
parent 4a6ba998d4
commit 5dfefe8d35
51 changed files with 603 additions and 896 deletions

11
.eslintrc.js Normal file
View File

@ -0,0 +1,11 @@
module.exports = {
'extends': [
'standard',
],
'parser': 'babel-eslint',
'rules': {
'comma-dangle': ['error', 'always-multiline'],
'no-var': 'error',
'prefer-const': 'error'
}
}

View File

@ -1,12 +1,17 @@
{
"devDependencies": {
"babel-eslint": "^8.0.1",
"eslint": "^4.11.0",
"eslint-config-standard": "^10.2.1",
"eslint-plugin-import": "^2.8.0",
"eslint-plugin-node": "^5.2.1",
"eslint-plugin-promise": "^3.6.0",
"eslint-plugin-standard": "^3.0.1",
"exec-promise": "^0.7.0",
"husky": "^0.14.3",
"jest": "^21.2.1",
"lint-staged": "^5.0.0",
"promise-toolbox": "^0.9.5",
"standard": "^10.0.3"
"promise-toolbox": "^0.9.5"
},
"engines": {
"yarn": "^1.2.1"
@ -23,7 +28,7 @@
"lint-staged": {
"*.js": [
"lint-staged-stash",
"standard --fix",
"eslint --fix",
"jest --findRelatedTests",
"lint-staged-unstash"
]
@ -35,15 +40,9 @@
"lint-staged-unstash": "git stash pop && rm -f .lint-staged && true",
"precommit": "lint-staged",
"prepublish": "scripts/run-script prepublish",
"pretest": "standard && jest",
"pretest": "eslint --ignore-path .gitignore . && jest",
"test": "scripts/run-script test"
},
"standard": {
"ignore": [
"packages/*/dist"
],
"parser": "babel-eslint"
},
"workspaces": [
"packages/*"
]

View File

@ -30,7 +30,7 @@ const fuFooter = fu.struct([
fu.uint32('fileFormatVersion'), // 12
fu.struct('dataOffset', [
fu.uint32('high'), // 16
fu.uint32('low') // 20
fu.uint32('low'), // 20
]),
fu.uint32('timestamp'), // 24
fu.char('creatorApplication', 4), // 28
@ -38,23 +38,23 @@ const fuFooter = fu.struct([
fu.uint32('creatorHostOs'), // 36
fu.struct('originalSize', [ // At the creation, current size of the hard disk.
fu.uint32('high'), // 40
fu.uint32('low') // 44
fu.uint32('low'), // 44
]),
fu.struct('currentSize', [ // Current size of the virtual disk. At the creation: currentSize = originalSize.
fu.uint32('high'), // 48
fu.uint32('low') // 52
fu.uint32('low'), // 52
]),
fu.struct('diskGeometry', [
fu.uint16('cylinders'), // 56
fu.uint8('heads'), // 58
fu.uint8('sectorsPerTrackCylinder') // 59
fu.uint8('sectorsPerTrackCylinder'), // 59
]),
fu.uint32('diskType'), // 60 Disk type, must be equal to HARD_DISK_TYPE_DYNAMIC/HARD_DISK_TYPE_DIFFERENCING.
fu.uint32('checksum'), // 64
fu.uint8('uuid', 16), // 68
fu.char('saved'), // 84
fu.char('hidden'), // 85
fu.byte('reserved', 426) // 86
fu.byte('reserved', 426), // 86
])
const FOOTER_SIZE = fuFooter.size
@ -62,11 +62,11 @@ const fuHeader = fu.struct([
fu.char('cookie', 8),
fu.struct('dataOffset', [
fu.uint32('high'),
fu.uint32('low')
fu.uint32('low'),
]),
fu.struct('tableOffset', [ // Absolute byte offset of the Block Allocation Table.
fu.uint32('high'),
fu.uint32('low')
fu.uint32('low'),
]),
fu.uint32('headerVersion'),
fu.uint32('maxTableEntries'), // Max entries in the Block Allocation Table.
@ -83,10 +83,10 @@ const fuHeader = fu.struct([
fu.uint32('reserved'),
fu.struct('platformDataOffset', [ // Absolute byte offset of the locator data.
fu.uint32('high'),
fu.uint32('low')
])
fu.uint32('low'),
]),
], 8),
fu.byte('reserved2', 256)
fu.byte('reserved2', 256),
])
const HEADER_SIZE = fuHeader.size
@ -265,7 +265,7 @@ export default class Vhd {
return this._handler.createReadStream(this._path, {
end: begin + length - 1,
start: begin
start: begin,
}).then(buf
? stream => streamToExistingBuffer(stream, buf, offset, (offset || 0) + length)
: streamToNewBuffer
@ -324,7 +324,7 @@ export default class Vhd {
const sectorsPerBlock = header.blockSize / SECTOR_SIZE
assert(sectorsPerBlock % 1 === 0)
// 1 bit per sector, rounded up to full sectors
// 1 bit per sector, rounded up to full sectors
this._blockBitmapSize = Math.ceil(sectorsPerBlock / 8 / SECTOR_SIZE) * SECTOR_SIZE
assert(this._blockBitmapSize === SECTOR_SIZE)

View File

@ -39,8 +39,8 @@ const main = async args => {
debounce: 'd',
help: 'h',
'read-only': 'ro',
verbose: 'v'
}
verbose: 'v',
},
})
if (opts.help) {
@ -72,12 +72,12 @@ const main = async args => {
allowUnauthorized: opts.au,
auth,
debounce: opts.debounce != null ? +opts.debounce : null,
readOnly: opts.ro
readOnly: opts.ro,
})
await xapi.connect()
const repl = createRepl({
prompt: `${xapi._humanId}> `
prompt: `${xapi._humanId}> `,
})
repl.context.xapi = xapi

View File

@ -14,7 +14,7 @@ import {
defer,
delay as pDelay,
fromEvents,
lastly
lastly,
} from 'promise-toolbox'
import autoTransport from './transports/auto'
@ -41,7 +41,7 @@ const NETWORK_ERRORS = {
EHOSTUNREACH: true,
// Connection configured timed out has been reach.
ETIMEDOUT: true
ETIMEDOUT: true,
}
const isNetworkError = ({code}) => NETWORK_ERRORS[code]
@ -50,7 +50,7 @@ const isNetworkError = ({code}) => NETWORK_ERRORS[code]
const XAPI_NETWORK_ERRORS = {
HOST_STILL_BOOTING: true,
HOST_HAS_NO_MANAGEMENT_IP: true
HOST_HAS_NO_MANAGEMENT_IP: true,
}
const isXapiNetworkError = ({code}) => XAPI_NETWORK_ERRORS[code]
@ -101,7 +101,7 @@ const {
create: createObject,
defineProperties,
defineProperty,
freeze: freezeObject
freeze: freezeObject,
} = Object
// -------------------------------------------------------------------
@ -171,7 +171,7 @@ export class Xapi extends EventEmitter {
if (user !== undefined) {
this._auth = {
user,
password: url.password
password: url.password,
}
delete url.username
delete url.password
@ -214,7 +214,7 @@ export class Xapi extends EventEmitter {
this.__url = url
this._call = autoTransport({
allowUnauthorized: this._allowUnauthorized,
url
url,
})
}
@ -306,7 +306,7 @@ export class Xapi extends EventEmitter {
return this._transportCall('session.login_with_password', [
auth.user,
auth.password
auth.password,
]).then(
sessionId => {
this._sessionId = sessionId
@ -363,7 +363,7 @@ export class Xapi extends EventEmitter {
createTask (nameLabel, nameDescription = '') {
const promise = this._sessionCall('task.create', [
nameLabel,
nameDescription
nameDescription,
])
promise.then(taskRef => {
@ -423,7 +423,7 @@ export class Xapi extends EventEmitter {
getResource ($cancelToken, pathname, {
host,
query,
task
task,
}) {
return this._autoTask(
task,
@ -444,12 +444,12 @@ export class Xapi extends EventEmitter {
$cancelToken,
this._url,
host && {
hostname: this.getObject(host).address
hostname: this.getObject(host).address,
},
{
pathname,
query,
rejectUnauthorized: !this._allowUnauthorized
rejectUnauthorized: !this._allowUnauthorized,
}
)
@ -468,7 +468,7 @@ export class Xapi extends EventEmitter {
putResource ($cancelToken, body, pathname, {
host,
query,
task
task,
} = {}) {
return this._autoTask(
task,
@ -500,14 +500,14 @@ export class Xapi extends EventEmitter {
$cancelToken,
this._url,
host && {
hostname: this.getObject(host).address
hostname: this.getObject(host).address,
},
{
body,
headers,
pathname,
query,
rejectUnauthorized: !this._allowUnauthorized
rejectUnauthorized: !this._allowUnauthorized,
},
override
)
@ -523,7 +523,7 @@ export class Xapi extends EventEmitter {
? omit(query, 'task_id')
: query,
maxRedirects: 0
maxRedirects: 0,
}).then(
response => {
response.req.abort()
@ -645,7 +645,7 @@ export class Xapi extends EventEmitter {
id: true,
pool: true,
ref: true,
type: true
type: true,
}
const getKey = (key, obj) => reservedKeys[key] && obj === object
? `$$${key}`
@ -659,7 +659,7 @@ export class Xapi extends EventEmitter {
// it is not supposed to contain links, therefore, in
// benefice of the doubt, a resolved property is defined.
defineProperty(object, getKey(key, object), {
value: EMPTY_ARRAY
value: EMPTY_ARRAY,
})
// Minor memory optimization, use the same empty array for
@ -668,7 +668,7 @@ export class Xapi extends EventEmitter {
} else if (isOpaqueRef(value[0])) {
// This is an array of refs.
defineProperty(object, getKey(key, object), {
get: () => freezeObject(map(value, (ref) => objectsByRefs[ref]))
get: () => freezeObject(map(value, (ref) => objectsByRefs[ref])),
})
freezeObject(value)
@ -679,7 +679,7 @@ export class Xapi extends EventEmitter {
freezeObject(value)
} else if (isOpaqueRef(value)) {
defineProperty(object, getKey(key, object), {
get: () => objectsByRefs[value]
get: () => objectsByRefs[value],
})
}
})
@ -689,7 +689,7 @@ export class Xapi extends EventEmitter {
$id: { value: object.uuid || ref },
$pool: { get: this._getPool },
$ref: { value: ref },
$type: { value: type }
$type: { value: type },
})
// Finally freezes the object.
@ -711,7 +711,7 @@ export class Xapi extends EventEmitter {
this._pool = object
} else if (type === 'task') {
const taskWatchers = this._taskWatchers
let taskWatcher = taskWatchers[ref]
const taskWatcher = taskWatchers[ref]
if (
taskWatcher !== undefined &&
getTaskResult(object, taskWatcher.resolve, taskWatcher.reject)
@ -768,7 +768,7 @@ export class Xapi extends EventEmitter {
const loop = () => this.status === CONNECTED && this._sessionCall('event.from', [
['*'],
this._fromToken,
60 + 0.1 // Force float.
60 + 0.1, // Force float.
]).then(onSuccess, onFailure)
const onSuccess = ({token, events}) => {
@ -906,7 +906,7 @@ Xapi.prototype._transportCall = reduce([
const newUrl = {
...this._url,
hostname: master
hostname: master,
}
this.emit('redirect', newUrl)
this._url = newUrl
@ -938,7 +938,7 @@ Xapi.prototype._transportCall = reduce([
throw error
}
)
}
},
], (call, decorator) => decorator(call))
// ===================================================================

View File

@ -10,7 +10,7 @@ const xapi = (() => {
return createClient({
auth: { user, password },
url,
watchEvents: false
watchEvents: false,
})
})()

View File

@ -18,5 +18,5 @@ const [ , , url, user, password ] = process.argv
createClient({
auth: { user, password },
readOnly: true,
url
url,
}).connect()

View File

@ -9,9 +9,9 @@ export default ({ allowUnauthorized, url }) => {
body: format.request(0, method, args),
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
'Content-Type': 'application/json',
},
path: '/jsonrpc'
path: '/jsonrpc',
}).readAll('utf8').then(
text => {
let response

View File

@ -18,7 +18,7 @@ const logError = error => {
const SPECIAL_CHARS = {
'\r': '\\r',
'\t': '\\t'
'\t': '\\t',
}
const SPECIAL_CHARS_RE = new RegExp(
Object.keys(SPECIAL_CHARS).join('|'),
@ -76,7 +76,7 @@ const parseResult = result => {
export default ({
allowUnauthorized,
url: { hostname, path, port, protocol }
url: { hostname, path, port, protocol },
}) => {
const client = (
protocol === 'https:'
@ -86,7 +86,7 @@ export default ({
host: hostname,
path: '/json',
port,
rejectUnauthorized: !allowUnauthorized
rejectUnauthorized: !allowUnauthorized,
})
const call = promisify(client.methodCall, client)

View File

@ -32,7 +32,7 @@ const parseResult = result => {
export default ({
allowUnauthorized,
url: { hostname, path, port, protocol }
url: { hostname, path, port, protocol },
}) => {
const client = (
protocol === 'https:'
@ -41,7 +41,7 @@ export default ({
)({
host: hostname,
port,
rejectUnauthorized: !allowUnauthorized
rejectUnauthorized: !allowUnauthorized,
})
const call = promisify(client.methodCall, client)

View File

@ -85,7 +85,7 @@ const checkAuthorizationByTypes = {
'VM-snapshot': checkMember('$snapshot_of'),
'VM-template': or(checkSelf, checkMember('$pool'))
'VM-template': or(checkSelf, checkMember('$pool')),
}
// Hoisting is important for this function.

View File

@ -2,24 +2,24 @@
// ===================================================================
var promisify = require('bluebird').promisify
const promisify = require('bluebird').promisify
var readFile = promisify(require('fs').readFile)
var writeFile = promisify(require('fs').writeFile)
const readFile = promisify(require('fs').readFile)
const writeFile = promisify(require('fs').writeFile)
var assign = require('lodash/assign')
var l33t = require('l33teral')
var mkdirp = promisify(require('mkdirp'))
var xdgBasedir = require('xdg-basedir')
const assign = require('lodash/assign')
const l33t = require('l33teral')
const mkdirp = promisify(require('mkdirp'))
const xdgBasedir = require('xdg-basedir')
// ===================================================================
var configPath = xdgBasedir.config + '/xo-cli'
var configFile = configPath + '/config.json'
const configPath = xdgBasedir.config + '/xo-cli'
const configFile = configPath + '/config.json'
// ===================================================================
var load = exports.load = function () {
const load = exports.load = function () {
return readFile(configFile).then(JSON.parse).catch(function () {
return {}
})
@ -31,7 +31,7 @@ exports.get = function (path) {
})
}
var save = exports.save = function (config) {
const save = exports.save = function (config) {
return mkdirp(configPath).then(function () {
return writeFile(configFile, JSON.stringify(config))
})
@ -45,7 +45,7 @@ exports.set = function (data) {
exports.unset = function (paths) {
return load().then(function (config) {
var l33tConfig = l33t(config)
const l33tConfig = l33t(config)
;[].concat(paths).forEach(function (path) {
l33tConfig.purge(path, true)
})

View File

@ -103,7 +103,7 @@ function parseParameters (args) {
const humanFormatOpts = {
unit: 'B',
scale: 'binary'
scale: 'binary',
}
function printProgress (progress) {
@ -214,7 +214,7 @@ async function register (args) {
password = await new Promise(function (resolve) {
process.stdout.write('Password: ')
pw(resolve)
})
}),
] = args
const xo = new Xo({ url })
@ -224,7 +224,7 @@ async function register (args) {
await config.set({
server: url,
token: await xo.call('token.create', { expiresIn })
token: await xo.call('token.create', { expiresIn }),
})
}
exports.register = register
@ -232,7 +232,7 @@ exports.register = register
function unregister () {
return config.unset([
'server',
'token'
'token',
])
}
exports.unregister = unregister
@ -367,7 +367,7 @@ async function call (args) {
}
}),
progress,
output
output,
]), 'finish')
}
@ -381,16 +381,16 @@ async function call (args) {
createReadStream(file),
progressStream({
length: length,
time: 1e3
}, printProgress)
time: 1e3,
}, printProgress),
])
const response = await got.post(url, {
body: input,
headers: {
'content-length': length
'content-length': length,
},
method: 'POST'
method: 'POST',
})
return response.body
}

View File

@ -10,7 +10,7 @@ import isObject from './is-object'
const {
create: createObject,
prototype: { hasOwnProperty }
prototype: { hasOwnProperty },
} = Object
export const ACTION_ADD = 'add'
@ -269,7 +269,7 @@ export default class Collection extends EventEmitter {
const data = {
add: createObject(null),
remove: createObject(null),
update: createObject(null)
update: createObject(null),
}
for (const key in this._buffer) {

View File

@ -261,58 +261,58 @@ describe('Collection', function () {
'add & update → add': [
[
['add', 'foo', 0],
['update', 'foo', 1]
['update', 'foo', 1],
],
{
add: {
foo: 1
}
}
foo: 1,
},
},
],
'add & remove → ∅': [
[
['add', 'foo', 0],
['remove', 'foo']
['remove', 'foo'],
],
{}
{},
],
'update & update → update': [
[
['update', 'bar', 1],
['update', 'bar', 2]
['update', 'bar', 2],
],
{
update: {
bar: 2
}
}
bar: 2,
},
},
],
'update & remove → remove': [
[
['update', 'bar', 1],
['remove', 'bar']
['remove', 'bar'],
],
{
remove: {
bar: undefined
}
}
bar: undefined,
},
},
],
'remove & add → update': [
[
['remove', 'bar'],
['add', 'bar', 0]
['add', 'bar', 0],
],
{
update: {
bar: 0
}
}
]
bar: 0,
},
},
],
}, ([operations, results], label) => {
it(label, function () {
forEach(operations, ([method, ...args]) => {

View File

@ -6,7 +6,7 @@ import NotImplemented from './not-implemented'
import {
ACTION_ADD,
ACTION_UPDATE,
ACTION_REMOVE
ACTION_REMOVE,
} from './collection'
// ===================================================================
@ -77,7 +77,7 @@ export default class Index {
const {
computeHash,
_itemsByHash: itemsByHash,
_keysToHash: keysToHash
_keysToHash: keysToHash,
} = this
for (const key in items) {
@ -104,7 +104,7 @@ export default class Index {
const {
computeHash,
_itemsByHash: itemsByHash,
_keysToHash: keysToHash
_keysToHash: keysToHash,
} = this
for (const key in items) {
@ -135,7 +135,7 @@ export default class Index {
_onRemove (items) {
const {
_itemsByHash: itemsByHash,
_keysToHash: keysToHash
_keysToHash: keysToHash,
} = this
for (const key in items) {

View File

@ -29,18 +29,18 @@ describe('Index', function () {
let col, byGroup
const item1 = {
id: '2ccb8a72-dc65-48e4-88fe-45ef541f2cba',
group: 'foo'
group: 'foo',
}
const item2 = {
id: '7d21dc51-4da8-4538-a2e9-dd6f4784eb76',
group: 'bar'
group: 'bar',
}
const item3 = {
id: '668c1274-4442-44a6-b99a-512188e0bb09',
group: 'foo'
group: 'foo',
}
const item4 = {
id: 'd90b7335-e540-4a44-ad22-c4baae9cd0a9'
id: 'd90b7335-e540-4a44-ad22-c4baae9cd0a9',
}
beforeEach(function () {
@ -61,19 +61,19 @@ describe('Index', function () {
byGroup: {
foo: {
[item1.id]: item1,
[item3.id]: item3
[item3.id]: item3,
},
bar: {
[item2.id]: item2
}
}
[item2.id]: item2,
},
},
})
})
it('works with added items', function () {
const item5 = {
id: '823b56c4-4b96-4f3a-9533-5d08177167ac',
group: 'baz'
group: 'baz',
}
col.add(item5)
@ -83,15 +83,15 @@ describe('Index', function () {
byGroup: {
foo: {
[item1.id]: item1,
[item3.id]: item3
[item3.id]: item3,
},
bar: {
[item2.id]: item2
[item2.id]: item2,
},
baz: {
[item5.id]: item5
}
}
[item5.id]: item5,
},
},
})
})
})
@ -99,7 +99,7 @@ describe('Index', function () {
it('works with updated items', function () {
const item1bis = {
id: item1.id,
group: 'bar'
group: 'bar',
}
col.update(item1bis)
@ -108,13 +108,13 @@ describe('Index', function () {
expect(col.indexes).toEqual({
byGroup: {
foo: {
[item3.id]: item3
[item3.id]: item3,
},
bar: {
[item1.id]: item1bis,
[item2.id]: item2
}
}
[item2.id]: item2,
},
},
})
})
})
@ -127,10 +127,10 @@ describe('Index', function () {
byGroup: {
foo: {
[item1.id]: item1,
[item3.id]: item3
[item3.id]: item3,
},
bar: {}
}
bar: {},
},
})
})
})
@ -139,7 +139,7 @@ describe('Index', function () {
const item1bis = {
id: item1.id,
group: item1.group,
newProp: true
newProp: true,
}
col.update(item1bis)
@ -149,12 +149,12 @@ describe('Index', function () {
byGroup: {
foo: {
[item1.id]: item1bis,
[item3.id]: item3
[item3.id]: item3,
},
bar: {
[item2.id]: item2
}
}
[item2.id]: item2,
},
},
})
})
})
@ -170,9 +170,9 @@ describe('Index', function () {
byGroup: {
foo: {
[item1.id]: item1,
[item3.id]: item3
}
}
[item3.id]: item3,
},
},
})
})
})

View File

@ -5,7 +5,7 @@ import NotImplemented from './not-implemented'
import {
ACTION_ADD,
ACTION_UPDATE,
ACTION_REMOVE
ACTION_REMOVE,
} from './collection'
// ===================================================================
@ -66,7 +66,7 @@ export default class UniqueIndex {
const {
computeHash,
_itemByHash: itemByHash,
_keysToHash: keysToHash
_keysToHash: keysToHash,
} = this
for (const key in items) {
@ -85,7 +85,7 @@ export default class UniqueIndex {
const {
computeHash,
_itemByHash: itemByHash,
_keysToHash: keysToHash
_keysToHash: keysToHash,
} = this
for (const key in items) {
@ -110,7 +110,7 @@ export default class UniqueIndex {
_onRemove (items) {
const {
_itemByHash: itemByHash,
_keysToHash: keysToHash
_keysToHash: keysToHash,
} = this
for (const key in items) {

View File

@ -29,14 +29,14 @@ describe('UniqueIndex', function () {
let col, byKey
const item1 = {
id: '2ccb8a72-dc65-48e4-88fe-45ef541f2cba',
key: '036dee1b-9a3b-4fb5-be8a-4f535b355581'
key: '036dee1b-9a3b-4fb5-be8a-4f535b355581',
}
const item2 = {
id: '7d21dc51-4da8-4538-a2e9-dd6f4784eb76',
key: '103cd893-d2cc-4d37-96fd-c259ad04c0d4'
key: '103cd893-d2cc-4d37-96fd-c259ad04c0d4',
}
const item3 = {
id: '668c1274-4442-44a6-b99a-512188e0bb09'
id: '668c1274-4442-44a6-b99a-512188e0bb09',
}
beforeEach(function () {
@ -56,15 +56,15 @@ describe('UniqueIndex', function () {
expect(col.indexes).toEqual({
byKey: {
[item1.key]: item1,
[item2.key]: item2
}
[item2.key]: item2,
},
})
})
it('works with added items', function () {
const item4 = {
id: '823b56c4-4b96-4f3a-9533-5d08177167ac',
key: '1437af14-429a-40db-8a51-8a2f5ed03201'
key: '1437af14-429a-40db-8a51-8a2f5ed03201',
}
col.add(item4)
@ -74,8 +74,8 @@ describe('UniqueIndex', function () {
byKey: {
[item1.key]: item1,
[item2.key]: item2,
[item4.key]: item4
}
[item4.key]: item4,
},
})
})
})
@ -83,7 +83,7 @@ describe('UniqueIndex', function () {
it('works with updated items', function () {
const item1bis = {
id: item1.id,
key: 'e03d4a3a-0331-4aca-97a2-016bbd43a29b'
key: 'e03d4a3a-0331-4aca-97a2-016bbd43a29b',
}
col.update(item1bis)
@ -92,8 +92,8 @@ describe('UniqueIndex', function () {
expect(col.indexes).toEqual({
byKey: {
[item1bis.key]: item1bis,
[item2.key]: item2
}
[item2.key]: item2,
},
})
})
})
@ -104,8 +104,8 @@ describe('UniqueIndex', function () {
return waitTicks().then(() => {
expect(col.indexes).toEqual({
byKey: {
[item1.key]: item1
}
[item1.key]: item1,
},
})
})
})
@ -114,7 +114,7 @@ describe('UniqueIndex', function () {
const item1bis = {
id: item1.id,
key: item1.key,
newProp: true
newProp: true,
}
col.update(item1bis)
@ -123,8 +123,8 @@ describe('UniqueIndex', function () {
expect(col.indexes).toEqual({
byKey: {
[item1.key]: item1bis,
[item2.key]: item2
}
[item2.key]: item2,
},
})
})
})

View File

@ -11,18 +11,18 @@ users.getKey = (user) => user.name
// Inserts some data.
users.add({
name: 'bob'
name: 'bob',
})
users.add({
name: 'clara',
active: true
active: true,
})
users.add({
name: 'ophelia'
name: 'ophelia',
})
users.add({
name: 'Steve',
active: true
active: true,
})
// -------------------------------------------------------------------
@ -48,9 +48,9 @@ setTimeout(function () {
users.set({
name: 'ophelia',
active: true
active: true,
})
users.set({
name: 'Steve'
name: 'Steve',
})
}, 10)

View File

@ -3,7 +3,7 @@ import { bind, forEach, iteratee as createCallback } from 'lodash'
import Collection, {
ACTION_ADD,
ACTION_UPDATE,
ACTION_REMOVE
ACTION_REMOVE,
} from './collection'
// ===================================================================

View File

@ -12,7 +12,7 @@ class XoError extends BaseError {
return {
message: this.message,
code: this.code,
data: this.data
data: this.data,
}
}
}
@ -28,44 +28,44 @@ const create = (code, getProps) => {
// =============================================================================
export const notImplemented = create(0, () => ({
message: 'not implemented'
message: 'not implemented',
}))
export const noSuchObject = create(1, (id, type) => ({
data: { id, type },
message: 'no such object'
message: 'no such object',
}))
export const unauthorized = create(2, () => ({
message: 'not authenticated or not enough permissions'
message: 'not authenticated or not enough permissions',
}))
export const invalidCredentials = create(3, () => ({
message: 'invalid credentials'
message: 'invalid credentials',
}))
// Deprecated alreadyAuthenticated (4)
export const forbiddenOperation = create(5, (operation, reason) => ({
data: { operation, reason },
message: `forbidden operation: ${operation}`
message: `forbidden operation: ${operation}`,
}))
// Deprecated GenericError (6)
export const noHostsAvailable = create(7, () => ({
message: 'no hosts available'
message: 'no hosts available',
}))
export const authenticationFailed = create(8, () => ({
message: 'authentication failed'
message: 'authentication failed',
}))
export const serverUnreachable = create(9, objectId => ({
data: {
objectId
objectId,
},
message: 'server unreachable'
message: 'server unreachable',
}))
export const invalidParameters = create(10, (message, errors) => {
@ -76,22 +76,22 @@ export const invalidParameters = create(10, (message, errors) => {
return {
data: { errors },
message: message || 'invalid parameters'
message: message || 'invalid parameters',
}
})
export const vmMissingPvDrivers = create(11, ({ vm }) => ({
data: {
objectId: vm
objectId: vm,
},
message: 'missing PV drivers'
message: 'missing PV drivers',
}))
export const vmIsTemplate = create(12, ({ vm }) => ({
data: {
objectId: vm
objectId: vm,
},
message: 'VM is a template'
message: 'VM is a template',
}))
// TODO: We should probably create a more generic error which gathers all incorrect state errors.
@ -109,58 +109,58 @@ export const vmBadPowerState = create(13, ({ vm, expected, actual }) => ({
data: {
objectId: vm,
expected,
actual
actual,
},
message: `VM state is ${actual} but should be ${expected}`
message: `VM state is ${actual} but should be ${expected}`,
}))
export const vmLacksFeature = create(14, ({ vm, feature }) => ({
data: {
objectId: vm,
feature
feature,
},
message: `VM lacks feature ${feature || ''}`
message: `VM lacks feature ${feature || ''}`,
}))
export const notSupportedDuringUpgrade = create(15, () => ({
message: 'not supported during upgrade'
message: 'not supported during upgrade',
}))
export const objectAlreadyExists = create(16, ({ objectId, objectType }) => ({
data: {
objectId,
objectType
objectType,
},
message: `${objectType || 'object'} already exists`
message: `${objectType || 'object'} already exists`,
}))
export const vdiInUse = create(17, ({ vdi, operation }) => ({
data: {
objectId: vdi,
operation
operation,
},
message: 'VDI in use'
message: 'VDI in use',
}))
export const hostOffline = create(18, ({ host }) => ({
data: {
objectId: host
objectId: host,
},
message: 'host offline'
message: 'host offline',
}))
export const operationBlocked = create(19, ({ objectId, code }) => ({
data: {
objectId,
code
code,
},
message: 'operation blocked'
message: 'operation blocked',
}))
export const patchPrecheckFailed = create(20, ({ errorType, patch }) => ({
data: {
objectId: patch,
errorType
errorType,
},
message: `patch precheck failed: ${errorType}`
message: `patch precheck failed: ${errorType}`,
}))

View File

@ -4,10 +4,10 @@ process.on('unhandledRejection', function (error) {
console.log(error)
})
var Xo = require('./').default
const Xo = require('./').default
var xo = new Xo({
url: 'localhost:9000'
const xo = new Xo({
url: 'localhost:9000',
})
xo.open().then(function () {
@ -19,7 +19,7 @@ xo.open().then(function () {
}).then(function () {
return xo.signIn({
email: 'admin@admin.net',
password: 'admin'
password: 'admin',
}).then(function () {
console.log('connected as ', xo.user)
}).catch(function (error) {
@ -28,7 +28,7 @@ xo.open().then(function () {
}).then(function () {
return xo.signIn({
email: 'tom',
password: 'tom'
password: 'tom',
}).then(function () {
console.log('connected as', xo.user)

View File

@ -1,6 +1,6 @@
import JsonRpcWebSocketClient, {
OPEN,
CLOSED
CLOSED,
} from 'jsonrpc-websocket-client'
import { BaseError } from 'make-error'
import { startsWith } from 'lodash'

View File

@ -12,8 +12,8 @@ const data = deepFreeze({
string: 'file:///var/lib/xoa/backup',
object: {
type: 'file',
path: '/var/lib/xoa/backup'
}
path: '/var/lib/xoa/backup',
},
},
SMB: {
string: 'smb://Administrator:pas:sw@ord@toto\\\\192.168.100.225\\smb\0',
@ -23,17 +23,17 @@ const data = deepFreeze({
path: '',
domain: 'toto',
username: 'Administrator',
password: 'pas:sw@ord'
}
password: 'pas:sw@ord',
},
},
NFS: {
string: 'nfs://192.168.100.225:/media/nfs',
object: {
type: 'nfs',
host: '192.168.100.225',
path: '/media/nfs'
}
}
path: '/media/nfs',
},
},
})
const parseData = deepFreeze({
@ -43,17 +43,17 @@ const parseData = deepFreeze({
string: 'file://var/lib/xoa/backup',
object: {
type: 'file',
path: '/var/lib/xoa/backup'
}
path: '/var/lib/xoa/backup',
},
},
'nfs with missing leading slash': {
string: 'nfs://192.168.100.225:media/nfs',
object: {
type: 'nfs',
host: '192.168.100.225',
path: '/media/nfs'
}
}
path: '/media/nfs',
},
},
})
const formatData = deepFreeze({
@ -63,9 +63,9 @@ const formatData = deepFreeze({
string: 'file:///var/lib/xoa/backup',
object: {
type: 'local',
path: '/var/lib/xoa/backup'
}
}
path: '/var/lib/xoa/backup',
},
},
})
// -------------------------------------------------------------------

View File

@ -6,13 +6,13 @@ export const configurationSchema = {
type: 'object',
properties: {
clientID: {
type: 'string'
type: 'string',
},
clientSecret: {
type: 'string'
}
type: 'string',
},
},
required: ['clientID', 'clientSecret']
required: ['clientID', 'clientSecret'],
}
// ===================================================================

View File

@ -7,22 +7,22 @@ export const configurationSchema = {
properties: {
callbackURL: {
type: 'string',
description: 'Must be exactly the same as specified on the Google developer console.'
description: 'Must be exactly the same as specified on the Google developer console.',
},
clientID: {
type: 'string'
type: 'string',
},
clientSecret: {
type: 'string'
type: 'string',
},
scope: {
default: 'https://www.googleapis.com/auth/plus.login',
description: 'Note that changing this value will break existing users.',
enum: [ 'https://www.googleapis.com/auth/plus.login', 'email' ],
enumNames: [ 'Google+ name', 'Simple email address' ]
}
enumNames: [ 'Google+ name', 'Simple email address' ],
},
},
required: ['callbackURL', 'clientID', 'clientSecret']
required: ['callbackURL', 'clientID', 'clientSecret'],
}
// ===================================================================

View File

@ -25,7 +25,7 @@ export const configurationSchema = {
properties: {
uri: {
description: 'URI of the LDAP server.',
type: 'string'
type: 'string',
},
certificateAuthorities: {
description: `
@ -35,13 +35,13 @@ If not specified, it will use a default set of well-known CAs.
`.trim(),
type: 'array',
items: {
type: 'string'
}
type: 'string',
},
},
checkCertificate: {
description: 'Enforce the validity of the server\'s certificates. You can disable it when connecting to servers that use a self-signed certificate.',
type: 'boolean',
default: true
default: true,
},
bind: {
description: 'Credentials to use before looking for the user record.',
@ -55,18 +55,18 @@ Example: uid=xoa-auth,ou=people,dc=company,dc=net
For Microsoft Active Directory, it can also be \`<user>@<domain>\`.
`.trim(),
type: 'string'
type: 'string',
},
password: {
description: 'Password of the user permitted of search the LDAP directory.',
type: 'string'
}
type: 'string',
},
},
required: ['dn', 'password']
required: ['dn', 'password'],
},
base: {
description: 'The base is the part of the description tree where the users are looked for.',
type: 'string'
type: 'string',
},
filter: {
description: `
@ -85,10 +85,10 @@ something like:
- \`(&(uid={{name}})(memberOf=<group DN>))\`
`.trim(),
type: 'string',
default: '(uid={{name}})'
}
default: '(uid={{name}})',
},
},
required: ['uri', 'base']
required: ['uri', 'base'],
}
export const testSchema = {
@ -96,14 +96,14 @@ export const testSchema = {
properties: {
username: {
description: 'LDAP username',
type: 'string'
type: 'string',
},
password: {
description: 'LDAP password',
type: 'string'
}
type: 'string',
},
},
required: ['username', 'password']
required: ['username', 'password'],
}
// ===================================================================
@ -119,14 +119,14 @@ class AuthLdap {
const clientOpts = this._clientOpts = {
url: conf.uri,
maxConnections: 5,
tlsOptions: {}
tlsOptions: {},
}
{
const {
bind,
checkCertificate = true,
certificateAuthorities
certificateAuthorities,
} = conf
if (bind) {
@ -147,7 +147,7 @@ class AuthLdap {
const {
bind: credentials,
base: searchBase,
filter: searchFilter = '(uid={{name}})'
filter: searchFilter = '(uid={{name}})',
} = conf
this._credentials = credentials
@ -166,7 +166,7 @@ class AuthLdap {
test ({ username, password }) {
return this._authenticate({
username,
password
password,
}).then(result => {
if (result === null) {
throw new Error('could not authenticate user')
@ -207,8 +207,8 @@ class AuthLdap {
const response = await search(this._searchBase, {
scope: 'sub',
filter: evalFilter(this._searchFilter, {
name: username
})
name: username,
}),
})
response.on('searchEntry', entry => {

View File

@ -9,46 +9,46 @@ const EMPTY_OBJECT = Object.freeze({ __proto__: null })
const _extractValue = ({ value }) => value
export const confirm = (message, {
default: defaultValue = null
default: defaultValue = null,
} = EMPTY_OBJECT) => prompt({
default: defaultValue,
message,
name: 'value',
type: 'confirm'
type: 'confirm',
}).then(_extractValue)
export const input = (message, {
default: defaultValue = null,
filter = undefined,
validate = undefined
validate = undefined,
} = EMPTY_OBJECT) => prompt({
default: defaultValue,
message,
name: 'value',
type: 'input',
validate
validate,
}).then(_extractValue)
export const list = (message, choices, {
default: defaultValue = null
default: defaultValue = null,
} = EMPTY_OBJECT) => prompt({
default: defaultValue,
choices,
message,
name: 'value',
type: 'list'
type: 'list',
}).then(_extractValue)
export const password = (message, {
default: defaultValue = null,
filter = undefined,
validate = undefined
validate = undefined,
} = EMPTY_OBJECT) => prompt({
default: defaultValue,
message,
name: 'value',
type: 'password',
validate
validate,
}).then(_extractValue)
// ===================================================================
@ -86,7 +86,7 @@ const promptByType = {
while (
i < n && // eslint-disable-line no-unmodified-loop-condition
await confirm('additional item?', {
default: false
default: false,
})
) {
await promptItem()
@ -96,23 +96,23 @@ const promptByType = {
},
boolean: (schema, defaultValue, path) => confirm(path, {
default: defaultValue != null ? defaultValue : schema.default
default: defaultValue != null ? defaultValue : schema.default,
}),
enum: (schema, defaultValue, path) => list(path, schema.enum, {
defaultValue: defaultValue || schema.defaultValue
defaultValue: defaultValue || schema.defaultValue,
}),
integer: (schema, defaultValue, path) => input(path, {
default: defaultValue || schema.default,
filter: input => +input,
validate: input => isInteger(+input)
validate: input => isInteger(+input),
}),
number: (schema, defaultValue, path) => input(path, {
default: defaultValue || schema.default,
filter: input => +input,
validate: input => isFinite(+input)
validate: input => isFinite(+input),
}),
object: async (schema, defaultValue, path) => {
@ -131,7 +131,7 @@ const promptByType = {
if (
required[name] ||
await confirm(`fill optional ${subpath}?`, {
default: Boolean(defaultValue && name in defaultValue)
default: Boolean(defaultValue && name in defaultValue),
})
) {
value[name] = await promptGeneric(
@ -148,8 +148,8 @@ const promptByType = {
},
string: (schema, defaultValue, path) => input(path, {
default: defaultValue || schema.default
})
default: defaultValue || schema.default,
}),
}
export default function promptGeneric (schema, defaultValue, path) {

View File

@ -7,10 +7,10 @@ import { readFile, writeFile } from 'fs'
import promptSchema, {
input,
password
password,
} from './prompt-schema'
import createPlugin, {
configurationSchema
configurationSchema,
} from './'
// ===================================================================
@ -42,8 +42,8 @@ execPromise(async args => {
await plugin._authenticate({
username: await input('Username', {
validate: input => !!input.length
validate: input => !!input.length,
}),
password: await password('Password')
password: await password('Password'),
}, bind(console.log, console))
})

View File

@ -6,19 +6,19 @@ export const configurationSchema = {
type: 'object',
properties: {
cert: {
type: 'string'
type: 'string',
},
entryPoint: {
type: 'string'
type: 'string',
},
issuer: {
type: 'string'
type: 'string',
},
usernameField: {
type: 'string'
}
type: 'string',
},
},
required: ['cert', 'entryPoint', 'issuer']
required: ['cert', 'entryPoint', 'issuer'],
}
// ===================================================================

View File

@ -14,9 +14,9 @@ export const configurationSchema = {
description: 'an array of recipients (mails)',
items: {
type: 'string'
type: 'string',
},
minItems: 1
minItems: 1,
},
toXmpp: {
type: 'array',
@ -24,11 +24,11 @@ export const configurationSchema = {
description: 'an array of recipients (xmpp)',
items: {
type: 'string'
type: 'string',
},
minItems: 1
}
}
minItems: 1,
},
},
}
// ===================================================================
@ -50,13 +50,13 @@ const formatMethod = method =>
const formatSize = bytes =>
humanFormat(bytes, {
scale: 'binary',
unit: 'B'
unit: 'B',
})
const formatSpeed = (bytes, milliseconds) =>
humanFormat(bytes * 1e3 / milliseconds, {
scale: 'binary',
unit: 'B/s'
unit: 'B/s',
})
const logError = e => {
@ -115,7 +115,7 @@ class BackupReportsXoPlugin {
const reportOnFailure =
reportWhen === 'fail' || // xo-web < 5
reportWhen === 'failure' // xo-web >= 5
reportWhen === 'failure' // xo-web >= 5
let globalMergeSize = 0
let globalTransferSize = 0
@ -143,7 +143,7 @@ class BackupReportsXoPlugin {
`- **UUID**: ${vm !== undefined ? vm.uuid : id}`,
`- **Start time**: ${formatDate(start)}`,
`- **End time**: ${formatDate(end)}`,
`- **Duration**: ${formatDuration(duration)}`
`- **Duration**: ${formatDuration(duration)}`,
]
const { error } = call
@ -205,7 +205,7 @@ class BackupReportsXoPlugin {
`- **Start time**: ${formatDate(start)}`,
`- **End time**: ${formatDate(end)}`,
`- **Duration**: ${formatDuration(duration)}`,
`- **Successes**: ${nSuccesses} / ${nCalls}`
`- **Successes**: ${nSuccesses} / ${nCalls}`,
]
if (globalTransferSize !== 0) {
markdown.push(
@ -256,21 +256,21 @@ class BackupReportsXoPlugin {
} Backup report for ${tag} ${
globalSuccess ? ICON_SUCCESS : ICON_FAILURE
}`,
markdown
markdown,
}),
xo.sendToXmppClient !== undefined && xo.sendToXmppClient({
to: this._xmppReceivers,
message: markdown
message: markdown,
}),
xo.sendSlackMessage !== undefined && xo.sendSlackMessage({
message: markdown
message: markdown,
}),
xo.sendPassiveCheck !== undefined && xo.sendPassiveCheck({
status: globalSuccess ? 0 : 2,
message: globalSuccess
? `[Xen Orchestra] [Success] Backup report for ${tag}`
: `[Xen Orchestra] [Failure] Backup report for ${tag} - VMs : ${nagiosText.join(' ')}`
})
: `[Xen Orchestra] [Failure] Backup report for ${tag} - VMs : ${nagiosText.join(' ')}`,
}),
])
}
}

View File

@ -13,7 +13,7 @@ class XoServerCloud {
constructor ({ xo }) {
this._xo = xo
// Defined in configure().
// Defined in configure().
this._conf = null
this._key = null
}
@ -31,16 +31,16 @@ class XoServerCloud {
registerResource.description = 'Register a resource via cloud plugin'
registerResource.params = {
namespace: {
type: 'string'
}
type: 'string',
},
}
registerResource.permission = 'admin'
this._unsetApiMethods = this._xo.addApiMethods({
cloud: {
getResourceCatalog,
registerResource
}
registerResource,
},
})
this._unsetRequestResource = this._xo.defineProperty('requestResource', this._requestResource, this)
@ -127,7 +127,7 @@ class XoServerCloud {
const downloadToken = await this._updater.call('getResourceDownloadToken', {
token: namespaceCatalog._token,
id,
version
version,
})
if (!downloadToken) {

View File

@ -21,11 +21,11 @@ export default class DensityPlan extends Plan {
const {
hosts,
toOptimize
toOptimize,
} = results
let {
averages: hostsAverages
averages: hostsAverages,
} = results
const pools = await this._getPlanPools()
@ -34,11 +34,11 @@ export default class DensityPlan extends Plan {
for (const hostToOptimize of toOptimize) {
const {
id: hostId,
$poolId: poolId
$poolId: poolId,
} = hostToOptimize
const {
master: masterId
master: masterId,
} = pools[poolId]
// Avoid master optimization.
@ -60,7 +60,7 @@ export default class DensityPlan extends Plan {
for (const dest of hosts) {
const {
id: destId,
$poolId: destPoolId
$poolId: destPoolId,
} = dest
// Destination host != Host to optimize!
@ -87,9 +87,9 @@ export default class DensityPlan extends Plan {
[ poolMaster ],
poolHosts,
masters,
otherHosts
otherHosts,
],
hostsAverages: clone(hostsAverages)
hostsAverages: clone(hostsAverages),
})
if (simulResults) {
@ -127,7 +127,7 @@ export default class DensityPlan extends Plan {
const simulResults = {
hostsAverages,
moves: []
moves: [],
}
// Try to find a destination for each VM.
@ -140,7 +140,7 @@ export default class DensityPlan extends Plan {
vm,
destinations: subDestinations,
hostsAverages,
vmsAverages
vmsAverages,
})
// Destination found.
@ -164,8 +164,8 @@ export default class DensityPlan extends Plan {
_testMigration ({ vm, destinations, hostsAverages, vmsAverages }) {
const {
_thresholds: {
critical: criticalThreshold
}
critical: criticalThreshold,
},
} = this
// Sort the destinations by available memory. (- -> +)
@ -192,7 +192,7 @@ export default class DensityPlan extends Plan {
// Available movement.
return {
vm,
destination
destination,
}
}
}
@ -206,7 +206,7 @@ export default class DensityPlan extends Plan {
mapToArray(moves, move => {
const {
vm,
destination
destination,
} = move
const xapiDest = this.xo.getXapi(destination)
debug(`Migrate VM (${vm.id}) to Host (${destination.id}) from Host (${vm.$container}).`)

View File

@ -7,11 +7,11 @@ import DensityPlan from './density-plan'
import PerformancePlan from './performance-plan'
import {
DEFAULT_CRITICAL_THRESHOLD_CPU,
DEFAULT_CRITICAL_THRESHOLD_MEMORY_FREE
DEFAULT_CRITICAL_THRESHOLD_MEMORY_FREE,
} from './plan'
import {
EXECUTION_DELAY,
debug
debug,
} from './utils'
// ===================================================================
@ -37,12 +37,12 @@ export const configurationSchema = {
properties: {
name: {
type: 'string',
title: 'Name'
title: 'Name',
},
mode: {
enum: [ 'Performance mode', 'Density mode' ],
title: 'Mode'
title: 'Mode',
},
pools: {
@ -51,8 +51,8 @@ export const configurationSchema = {
items: {
type: 'string',
$type: 'Pool'
}
$type: 'Pool',
},
},
thresholds: {
@ -63,14 +63,14 @@ export const configurationSchema = {
cpu: {
type: 'integer',
title: 'CPU (%)',
default: DEFAULT_CRITICAL_THRESHOLD_CPU
default: DEFAULT_CRITICAL_THRESHOLD_CPU,
},
memoryFree: {
type: 'integer',
title: 'RAM, Free memory (MB)',
default: DEFAULT_CRITICAL_THRESHOLD_MEMORY_FREE
}
}
default: DEFAULT_CRITICAL_THRESHOLD_MEMORY_FREE,
},
},
},
excludedHosts: {
@ -80,19 +80,19 @@ export const configurationSchema = {
items: {
type: 'string',
$type: 'Host'
}
}
$type: 'Host',
},
},
},
required: [ 'name', 'mode', 'pools' ]
required: [ 'name', 'mode', 'pools' ],
},
minItems: 1
}
minItems: 1,
},
},
additionalProperties: false
additionalProperties: false,
}
// ===================================================================
@ -102,7 +102,7 @@ export const configurationSchema = {
const makeJob = (cronPattern, fn) => {
const job = {
running: false,
emitter: new EventEmitter()
emitter: new EventEmitter(),
}
job.cron = new CronJob(cronPattern, async () => {

View File

@ -54,7 +54,7 @@ export default class PerformancePlan extends Plan {
const {
averages,
toOptimize
toOptimize,
} = results
let { hosts } = results
@ -75,7 +75,7 @@ export default class PerformancePlan extends Plan {
await this._optimize({
exceededHost,
hosts,
hostsAverages: averages
hostsAverages: averages,
})
}
}

View File

@ -2,7 +2,7 @@ import { filter, includes, map as mapToArray } from 'lodash'
import {
EXECUTION_DELAY,
debug
debug,
} from './utils'
const MINUTES_OF_HISTORICAL_DATA = 30
@ -58,7 +58,7 @@ function computeRessourcesAverage (objects, objectsStats, nPoints) {
),
nCpus: stats.cpus.length,
memoryFree: computeAverage(stats.memoryFree, nPoints),
memory: computeAverage(stats.memory, nPoints)
memory: computeAverage(stats.memory, nPoints),
}
}
@ -91,7 +91,7 @@ function setRealCpuAverageOfVms (vms, vmsAverages, nCpus) {
export default class Plan {
constructor (xo, name, poolIds, {
excludedHosts,
thresholds
thresholds,
} = {}) {
this.xo = xo
this._name = name
@ -99,11 +99,11 @@ export default class Plan {
this._excludedHosts = excludedHosts
this._thresholds = {
cpu: {
critical: numberOrDefault(thresholds && thresholds.cpu, DEFAULT_CRITICAL_THRESHOLD_CPU)
critical: numberOrDefault(thresholds && thresholds.cpu, DEFAULT_CRITICAL_THRESHOLD_CPU),
},
memoryFree: {
critical: numberOrDefault(thresholds && thresholds.memoryFree, DEFAULT_CRITICAL_THRESHOLD_MEMORY_FREE) * 1024
}
critical: numberOrDefault(thresholds && thresholds.memoryFree, DEFAULT_CRITICAL_THRESHOLD_MEMORY_FREE) * 1024,
},
}
for (const key in this._thresholds) {
@ -157,7 +157,7 @@ export default class Plan {
return {
toOptimize,
averages: avgWithRatio,
hosts
hosts,
}
}
@ -213,7 +213,7 @@ export default class Plan {
hostsStats[host.id] = {
nPoints: hostStats.stats.cpus[0].length,
stats: hostStats.stats,
averages: {}
averages: {},
}
})
))
@ -229,7 +229,7 @@ export default class Plan {
vmsStats[vm.id] = {
nPoints: vmStats.stats.cpus[0].length,
stats: vmStats.stats,
averages: {}
averages: {},
}
})
))

View File

@ -9,10 +9,10 @@ exports.configurationSchema = {
type: 'object',
properties: {
foo: {
type: 'string'
}
type: 'string',
},
},
required: ['foo']
required: ['foo'],
}
// This (optional) schema is used to test the configuration
@ -21,10 +21,10 @@ exports.testSchema = {
type: 'object',
properties: {
test: {
type: 'string'
}
type: 'string',
},
},
required: ['test']
required: ['test'],
}
// The default export is just a factory function which will create an
@ -73,6 +73,6 @@ exports.default = function (opts) {
test: function (data) {
console.log('the configuration is about to be tested')
// TODO: test the configuration, i.e, use the main feature of the plugin and throws any errors.
}
},
}
}

View File

@ -33,16 +33,16 @@ export const configurationSchema = {
properties: {
name: {
type: 'string',
description: 'human readable name of the sender'
description: 'human readable name of the sender',
},
address: {
type: 'string',
description: 'email address of the sender'
}
description: 'email address of the sender',
},
},
additionalProperties: false,
required: ['address']
required: ['address'],
},
transport: {
@ -51,11 +51,11 @@ export const configurationSchema = {
properties: {
host: {
type: 'string',
description: 'hostname or IP address of the SMTP server'
description: 'hostname or IP address of the SMTP server',
},
port: {
type: 'integer',
description: 'port of the SMTP server (defaults to 25 or 465 for TLS)'
description: 'port of the SMTP server (defaults to 25 or 465 for TLS)',
},
secure: {
default: false,
@ -64,24 +64,24 @@ export const configurationSchema = {
'auto (uses STARTTLS if available)',
'force (requires STARTTLS or fail)',
'disabled (never use STARTTLS)',
'TLS'
'TLS',
],
description: 'whether the connection should use TLS'
description: 'whether the connection should use TLS',
},
ignoreUnauthorized: {
type: 'boolean',
description: 'ignore certificates error (e.g. self-signed certificate)'
description: 'ignore certificates error (e.g. self-signed certificate)',
},
// FIXME: xo-web does not support edition of too nested
user: {
type: 'string',
description: 'name to use to authenticate'
description: 'name to use to authenticate',
},
password: {
type: 'string',
description: 'password to use to authenticate'
}
description: 'password to use to authenticate',
},
// properties.
// auth: {
// type: 'object',
@ -103,12 +103,12 @@ export const configurationSchema = {
},
additionalProperties: false,
required: ['host']
}
required: ['host'],
},
},
additionalProperties: false,
required: ['from', 'transport']
required: ['from', 'transport'],
}
export const testSchema = {
@ -117,12 +117,12 @@ export const testSchema = {
properties: {
to: {
type: 'string',
description: 'recipient of the test mail'
}
description: 'recipient of the test mail',
},
},
additionalProperties: false,
required: ['to']
required: ['to'],
}
// ===================================================================
@ -144,7 +144,7 @@ class TransportEmailPlugin {
secure,
user,
...transportConf
}
},
}) {
if (ignoreUnauthorized != null) {
(
@ -190,8 +190,8 @@ The transport-email plugin for Xen Orchestra server seems to be working fine, ni
`,
attachments: [ {
filename: 'example.txt',
content: 'Attachments are working too, great!\n'
} ]
content: 'Attachments are working too, great!\n',
} ],
})
}
@ -200,7 +200,7 @@ The transport-email plugin for Xen Orchestra server seems to be working fine, ni
to, cc, bcc,
subject,
markdown,
attachments
attachments,
}) {
return this._send(removeUndefined({
from,
@ -209,7 +209,7 @@ The transport-email plugin for Xen Orchestra server seems to be working fine, ni
bcc,
subject,
markdown,
attachments
attachments,
})).catch(logAndRethrow)
}
}

View File

@ -10,27 +10,27 @@ export const configurationSchema = {
properties: {
server: {
type: 'string',
description: 'The nagios server adress'
description: 'The nagios server adress',
},
port: {
type: 'integer',
description: 'The NSCA port'
description: 'The NSCA port',
},
key: {
type: 'string',
description: 'The encryption key'
description: 'The encryption key',
},
host: {
type: 'string',
description: 'The host name in Nagios'
description: 'The host name in Nagios',
},
service: {
type: 'string',
description: 'The service description in Nagios'
}
description: 'The service description in Nagios',
},
},
additionalProperties: false,
required: ['server', 'port', 'key', 'host', 'service']
required: ['server', 'port', 'key', 'host', 'service'],
}
// ===================================================================
@ -45,7 +45,7 @@ function nscaPacketBuilder ({
message,
service,
status,
timestamp
timestamp,
}) {
// Building NSCA packet
const SIZE = 720
@ -92,7 +92,7 @@ class XoServerNagios {
this._set = bind(xo.defineProperty, xo)
this._unset = null
// Defined in configure().
// Defined in configure().
this._conf = null
this._key = null
}
@ -113,13 +113,13 @@ class XoServerNagios {
test () {
return this._sendPassiveCheck({
message: 'The server-nagios plugin for Xen Orchestra server seems to be working fine, nicely done :)',
status: OK
status: OK,
})
}
_sendPassiveCheck ({
message,
status
status,
}) {
return new Promise((resolve, reject) => {
if (/\r|\n/.test(message)) {
@ -140,7 +140,7 @@ class XoServerNagios {
iv,
message,
status,
timestamp
timestamp,
})
// 1) Using xor between the NSCA packet and the initialization vector

View File

@ -16,23 +16,23 @@ export const configurationSchema = {
properties: {
webhookUri: {
type: 'string',
description: 'The Mattermost or Slack webhook URL.'
description: 'The Mattermost or Slack webhook URL.',
},
channel: {
type: 'string',
description: 'Channel, private group, or IM channel to send message to.'
description: 'Channel, private group, or IM channel to send message to.',
},
username: {
type: 'string',
description: 'Bot username.'
description: 'Bot username.',
},
icon_emoji: {
type: 'string',
description: 'The bot icon. It can be a slack emoji or a URL image.'
}
description: 'The bot icon. It can be a slack emoji or a URL image.',
},
},
additionalProperties: false,
required: ['webhookUri', 'channel']
required: ['webhookUri', 'channel'],
}
// ===================================================================
@ -43,7 +43,7 @@ class XoServerTransportSlack {
this._set = ::xo.defineProperty
this._unset = null
// Defined in configure().
// Defined in configure().
this._conf = null
this._send = null
}
@ -70,12 +70,12 @@ class XoServerTransportSlack {
return this._sendSlack({
message: `Hi there,
The transport-slack plugin for Xen Orchestra server seems to be working fine, nicely done :)`
The transport-slack plugin for Xen Orchestra server seems to be working fine, nicely done :)`,
})
}
_sendSlack ({
message
message,
}) {
// TODO: handle errors
return this._send({ ...this._conf, text: message }).catch(logAndRethrow)

View File

@ -9,26 +9,26 @@ export const configurationSchema = {
properties: {
host: {
type: 'string',
description: 'host where the XMPP server is located'
description: 'host where the XMPP server is located',
},
port: {
type: 'integer',
description: 'port of the XMPP server (default to 5222)',
default: 5222
default: 5222,
},
jid: {
type: 'string',
title: 'user',
description: 'Xmpp address to use to authenticate'
description: 'Xmpp address to use to authenticate',
},
password: {
type: 'string',
description: 'password to use to authenticate'
}
description: 'password to use to authenticate',
},
},
additionalProperties: false,
required: ['jid', 'password']
required: ['jid', 'password'],
}
// ===================================================================
@ -73,7 +73,7 @@ class TransportXmppPlugin {
this._client.send(
new XmppClient.Stanza('message', {
to: receiver,
type: 'chat'
type: 'chat',
}).c('body').t(message)
)
}

View File

@ -12,14 +12,14 @@ import {
orderBy,
round,
values,
zipObject
zipObject,
} from 'lodash'
import {
promisify
promisify,
} from 'promise-toolbox'
import {
readFile,
writeFile
writeFile,
} from 'fs'
// ===================================================================
@ -30,10 +30,10 @@ const pWriteFile = promisify(writeFile)
const currDate = new Date().toISOString().slice(0, 10)
const compareOperators = {
'>': (l, r) => l > r
'>': (l, r) => l > r,
}
const mathOperators = {
'+': (l, r) => l + r
'+': (l, r) => l + r,
}
const gibPower = Math.pow(2, 30)
@ -50,7 +50,7 @@ pReadFile(`${__dirname}/../report.html.tpl`, 'utf8')
removeAttributeQuotes: true,
removeComments: true,
removeOptionalTags: true,
removeRedundantAttributes: true
removeRedundantAttributes: true,
}))
})
@ -69,18 +69,18 @@ export const configurationSchema = {
emails: {
type: 'array',
items: {
type: 'string'
}
type: 'string',
},
},
periodicity: {
type: 'string',
enum: ['monthly', 'weekly'],
description: 'If you choose weekly you will receive the report every sunday and if you choose monthly you will receive it every first day of the month.'
}
description: 'If you choose weekly you will receive the report every sunday and if you choose monthly you will receive it every first day of the month.',
},
},
additionalProperties: false,
required: [ 'emails', 'periodicity' ]
required: [ 'emails', 'periodicity' ],
}
// ===================================================================
@ -137,7 +137,7 @@ function computeMeans (objects, options) {
options,
map(
options,
opt => round(computeMean(map(objects, opt)), 2)
opt => round(computeMean(map(objects, opt)), 2)
)
)
}
@ -156,7 +156,7 @@ function getTop (objects, options) {
obj => ({
uuid: obj.uuid,
name: obj.name,
value: round(obj[opt], 2)
value: round(obj[opt], 2),
})
)
)
@ -176,7 +176,7 @@ function conputePercentage (curr, prev, options) {
function getDiff (oldElements, newElements) {
return {
added: differenceBy(oldElements, newElements, 'uuid'),
removed: differenceBy(newElements, oldElements, 'uuid')
removed: differenceBy(newElements, oldElements, 'uuid'),
}
}
@ -184,7 +184,7 @@ function getDiff (oldElements, newElements) {
function getVmsStats ({
runningVms,
xo
xo,
}) {
return Promise.all(map(runningVms, async vm => {
const vmStats = await xo.getXapiVmStats(vm, 'days')
@ -196,14 +196,14 @@ function getVmsStats ({
diskRead: computeDoubleMean(values(vmStats.stats.xvds.r)) / mibPower,
diskWrite: computeDoubleMean(values(vmStats.stats.xvds.w)) / mibPower,
netReception: computeDoubleMean(vmStats.stats.vifs.rx) / kibPower,
netTransmission: computeDoubleMean(vmStats.stats.vifs.tx) / kibPower
netTransmission: computeDoubleMean(vmStats.stats.vifs.tx) / kibPower,
}
}))
}
function getHostsStats ({
runningHosts,
xo
xo,
}) {
return Promise.all(map(runningHosts, async host => {
const hostStats = await xo.getXapiHostStats(host, 'days')
@ -214,7 +214,7 @@ function getHostsStats ({
ram: computeMean(hostStats.stats.memoryUsed) / gibPower,
load: computeMean(hostStats.stats.load),
netReception: computeDoubleMean(hostStats.stats.pifs.rx) / kibPower,
netTransmission: computeDoubleMean(hostStats.stats.pifs.tx) / kibPower
netTransmission: computeDoubleMean(hostStats.stats.pifs.tx) / kibPower,
}
}))
}
@ -222,76 +222,76 @@ function getHostsStats ({
function computeGlobalVmsStats ({
haltedVms,
vmsStats,
xo
xo,
}) {
const allVms = concat(
map(vmsStats, vm => ({
uuid: vm.uuid,
name: vm.name
name: vm.name,
})),
map(haltedVms, vm => ({
uuid: vm.uuid,
name: vm.name_label
name: vm.name_label,
}))
)
return assign(computeMeans(vmsStats, ['cpu', 'ram', 'diskRead', 'diskWrite', 'netReception', 'netTransmission']), {
number: allVms.length,
allVms
allVms,
})
}
function computeGlobalHostsStats ({
haltedHosts,
hostsStats,
xo
xo,
}) {
const allHosts = concat(
map(hostsStats, host => ({
uuid: host.uuid,
name: host.name
name: host.name,
})),
map(haltedHosts, host => ({
uuid: host.uuid,
name: host.name_label
name: host.name_label,
}))
)
return assign(computeMeans(hostsStats, ['cpu', 'ram', 'load', 'netReception', 'netTransmission']), {
number: allHosts.length,
allHosts
allHosts,
})
}
function getTopVms ({
vmsStats,
xo
xo,
}) {
return getTop(vmsStats, ['cpu', 'ram', 'diskRead', 'diskWrite', 'netReception', 'netTransmission'])
}
function getTopHosts ({
hostsStats,
xo
xo,
}) {
return getTop(hostsStats, ['cpu', 'ram', 'load', 'netReception', 'netTransmission'])
}
function getMostAllocatedSpaces ({
disks,
xo
xo,
}) {
return map(
orderBy(disks, ['size'], ['desc']).slice(0, 3), disk => ({
uuid: disk.uuid,
name: disk.name_label,
size: round(disk.size / gibPower, 2)
size: round(disk.size / gibPower, 2),
}))
}
async function getHostsMissingPatches ({
runningHosts,
xo
xo,
}) {
const hostsMissingPatches = await Promise.all(map(runningHosts, async host => {
const hostsPatches = await xo.getXapi(host).listMissingPoolPatchesOnHost(host._xapiId)
@ -299,7 +299,7 @@ async function getHostsMissingPatches ({
return {
uuid: host.uuid,
name: host.name_label,
patches: map(hostsPatches, 'name')
patches: map(hostsPatches, 'name'),
}
}
}))
@ -312,7 +312,7 @@ function getAllUsersEmail (users) {
async function storeStats ({
data,
storedStatsPath
storedStatsPath,
}) {
await pWriteFile(storedStatsPath, JSON.stringify(data))
}
@ -332,12 +332,12 @@ async function computeEvolution ({
const vmsEvolution = {
number: newStatsVms.number - oldStatsVms.number,
...conputePercentage(newStatsVms, oldStatsVms, ['cpu', 'ram', 'diskRead', 'diskWrite', 'netReception', 'netTransmission'])
...conputePercentage(newStatsVms, oldStatsVms, ['cpu', 'ram', 'diskRead', 'diskWrite', 'netReception', 'netTransmission']),
}
const hostsEvolution = {
number: newStatsHosts.number - oldStatsHosts.number,
...conputePercentage(newStatsHosts, oldStatsHosts, ['cpu', 'ram', 'load', 'netReception', 'netTransmission'])
...conputePercentage(newStatsHosts, oldStatsHosts, ['cpu', 'ram', 'load', 'netReception', 'netTransmission']),
}
const vmsRessourcesEvolution = getDiff(oldStatsVms.allVms, newStatsVms.allVms)
@ -351,7 +351,7 @@ async function computeEvolution ({
prevDate,
vmsRessourcesEvolution,
hostsRessourcesEvolution,
usersEvolution
usersEvolution,
}
} catch (err) {
if (err.code !== 'ENOENT') throw err
@ -360,7 +360,7 @@ async function computeEvolution ({
async function dataBuilder ({
xo,
storedStatsPath
storedStatsPath,
}) {
const xoObjects = values(xo.getObjects())
const runningVms = filter(xoObjects, {type: 'VM', power_state: 'Running'})
@ -373,7 +373,7 @@ async function dataBuilder ({
getVmsStats({xo, runningVms}),
getHostsStats({xo, runningHosts}),
getMostAllocatedSpaces({xo, disks}),
getHostsMissingPatches({xo, runningHosts})
getHostsMissingPatches({xo, runningHosts}),
])
const [globalVmsStats, globalHostsStats, topVms, topHosts, usersEmail] = await Promise.all([
@ -381,13 +381,13 @@ async function dataBuilder ({
computeGlobalHostsStats({xo, hostsStats, haltedHosts}),
getTopVms({xo, vmsStats}),
getTopHosts({xo, hostsStats}),
getAllUsersEmail(users)
getAllUsersEmail(users),
])
const evolution = await computeEvolution({
storedStatsPath,
hosts: globalHostsStats,
usersEmail,
vms: globalVmsStats
vms: globalVmsStats,
})
const data = {
@ -395,7 +395,7 @@ async function dataBuilder ({
vms: globalVmsStats,
hosts: globalHostsStats,
vmsEvolution: evolution && evolution.vmsEvolution,
hostsEvolution: evolution && evolution.hostsEvolution
hostsEvolution: evolution && evolution.hostsEvolution,
},
topVms,
topHosts,
@ -409,8 +409,8 @@ async function dataBuilder ({
imgXo,
currDate,
prevDate: evolution && evolution.prevDate,
page: '{{page}}'
}
page: '{{page}}',
},
}
return data
@ -432,7 +432,7 @@ class UsageReportPlugin {
this._job = new CronJob({
cronTime: configuration.periodicity === 'monthly' ? '00 06 1 * *' : '00 06 * * 0',
onTick: () => this._sendReport(),
start: false
start: false,
})
}
@ -454,7 +454,7 @@ class UsageReportPlugin {
async _sendReport () {
const data = await dataBuilder({
xo: this._xo,
storedStatsPath: this._storedStatsPath
storedStatsPath: this._storedStatsPath,
})
await Promise.all([
@ -469,13 +469,13 @@ class UsageReportPlugin {
best regards.`,
attachments: [{
filename: `xoReport_${currDate}.html`,
content: template(data)
}]
content: template(data),
}],
}),
storeStats({
data,
storedStatsPath: this._storedStatsPath
})
storedStatsPath: this._storedStatsPath,
}),
])
}
}

View File

@ -124,7 +124,7 @@ export class VHDFile {
}
export function computeGeometryForSize (size) {
let totalSectors = Math.ceil(size / 512)
const totalSectors = Math.ceil(size / 512)
let sectorsPerTrack
let heads
let cylinderTimesHeads
@ -154,13 +154,13 @@ export function computeGeometryForSize (size) {
cylinderTimesHeads = totalSectors / sectorsPerTrack
}
}
let cylinders = Math.floor(cylinderTimesHeads / heads)
let actualSize = cylinders * heads * sectorsPerTrack * sectorSize
const cylinders = Math.floor(cylinderTimesHeads / heads)
const actualSize = cylinders * heads * sectorsPerTrack * sectorSize
return {cylinders, heads, sectorsPerTrack, actualSize}
}
export function createFooter (size, timestamp, geometry, diskType, dataOffsetLow = 0xFFFFFFFF, dataOffsetHigh = 0xFFFFFFFF) {
let footer = Buffer.alloc(512)
const footer = Buffer.alloc(512)
Buffer.from(footerCookie, 'ascii').copy(footer)
footer.writeUInt32BE(2, 8)
footer.writeUInt32BE(0x00010000, 12)
@ -180,13 +180,13 @@ export function createFooter (size, timestamp, geometry, diskType, dataOffsetLow
footer.writeUInt8(geometry['heads'], 58)
footer.writeUInt8(geometry['sectorsPerTrack'], 59)
footer.writeUInt32BE(diskType, 60)
let checksum = computeChecksum(footer)
const checksum = computeChecksum(footer)
footer.writeUInt32BE(checksum, 64)
return footer
}
export function createDynamicDiskHeader (tableEntries, blockSize) {
let header = Buffer.alloc(1024)
const header = Buffer.alloc(1024)
Buffer.from(headerCookie, 'ascii').copy(header)
// hard code no next data
header.writeUInt32BE(0xFFFFFFFF, 8)
@ -197,7 +197,7 @@ export function createDynamicDiskHeader (tableEntries, blockSize) {
header.writeUInt32BE(0x00010000, 24)
header.writeUInt32BE(tableEntries, 28)
header.writeUInt32BE(blockSize, 32)
let checksum = computeChecksum(header)
const checksum = computeChecksum(header)
header.writeUInt32BE(checksum, 36)
return header
}
@ -213,7 +213,7 @@ export class ReadableRawVHDStream extends stream.Readable {
constructor (size, vmdkParser) {
super()
this.size = size
var geometry = computeGeometryForSize(size)
const geometry = computeGeometryForSize(size)
this.footer = createFooter(size, Math.floor(Date.now() / 1000), geometry, fixedHardDiskType)
this.position = 0
this.vmdkParser = vmdkParser

View File

@ -12,7 +12,7 @@ import {
createDynamicDiskHeader,
createFooter,
ReadableRawVHDStream,
VHDFile
VHDFile,
} from './vhd-write'
describe('VHD writing', () => {
@ -37,10 +37,10 @@ describe('VHD writing', () => {
it('ReadableRawVHDStream does not crash', () => {
const data = [{
lbaBytes: 100,
grain: Buffer.from('azerzaerazeraze', 'ascii')
grain: Buffer.from('azerzaerazeraze', 'ascii'),
}, {
lbaBytes: 700,
grain: Buffer.from('gdfslkdfguer', 'ascii')
grain: Buffer.from('gdfslkdfguer', 'ascii'),
}]
let index = 0
const mockParser = {
@ -52,7 +52,7 @@ describe('VHD writing', () => {
} else {
return null
}
}
},
}
const stream = new ReadableRawVHDStream(100000, mockParser)
const pipe = stream.pipe(createWriteStream('outputStream'))
@ -65,10 +65,10 @@ describe('VHD writing', () => {
it('ReadableRawVHDStream detects when blocks are out of order', () => {
const data = [{
lbaBytes: 700,
grain: Buffer.from('azerzaerazeraze', 'ascii')
grain: Buffer.from('azerzaerazeraze', 'ascii'),
}, {
lbaBytes: 100,
grain: Buffer.from('gdfslkdfguer', 'ascii')
grain: Buffer.from('gdfslkdfguer', 'ascii'),
}]
let index = 0
const mockParser = {
@ -80,7 +80,7 @@ describe('VHD writing', () => {
} else {
return null
}
}
},
}
return expect(new Promise((resolve, reject) => {
const stream = new ReadableRawVHDStream(100000, mockParser)

View File

@ -7,7 +7,7 @@ import {VirtualBuffer} from './virtual-buffer'
describe('Virtual Buffer', function () {
it('can read a file correctly', async () => {
let rawFileName = 'random-data'
const rawFileName = 'random-data'
await exec('base64 /dev/urandom | head -c 104448 > ' + rawFileName)
const buffer = new VirtualBuffer(createReadStream(rawFileName))
const part1 = await buffer.readChunk(10)

View File

@ -37,8 +37,8 @@ function parseDescriptor (descriptorSlice) {
const lines = descriptorText.split(/\r?\n/).filter((line) => {
return line.trim().length > 0 && line[0] !== '#'
})
for (let line of lines) {
let defLine = line.split('=')
for (const line of lines) {
const defLine = line.split('=')
// the wonky quote test is to avoid having an equal sign in the name of an extent
if (defLine.length === 2 && defLine[0].indexOf('"') === -1) {
descriptorDict[defLine[0]] = defLine[1].replace(/['"]+/g, '')
@ -49,7 +49,7 @@ function parseDescriptor (descriptorSlice) {
sizeSectors: items[1],
type: items[2],
name: items[3],
offset: items.length > 4 ? items[4] : 0
offset: items.length > 4 ? items[4] : 0,
})
}
}
@ -63,7 +63,7 @@ function parseFlags (flagBuffer) {
useSecondaryGrain: !!(number & (1 << 1)),
useZeroedGrainTable: !!(number & (1 << 2)),
compressedGrains: !!(number & (1 << 16)),
hasMarkers: !!(number & (1 << 17))
hasMarkers: !!(number & (1 << 17)),
}
}
@ -98,7 +98,7 @@ function parseHeader (buffer) {
grainDirectoryOffsetSectors,
rGrainDirectoryOffsetSectors,
l1EntrySectors,
numGTEsPerGT
numGTEsPerGT,
}
}
async function readGrain (offsetSectors, buffer, compressed) {
@ -115,7 +115,7 @@ async function readGrain (offsetSectors, buffer, compressed) {
size,
buffer: grainBuffer,
grain: grainContent,
grainSize: grainContent.byteLength
grainSize: grainContent.byteLength,
}
}

View File

@ -7,8 +7,8 @@ import {VMDKDirectParser} from './vmdk-read'
describe('VMDK reading', () => {
it('VMDKDirectParser reads OK', async () => {
let rawFileName = 'random-data'
let fileName = 'random-data.vmdk'
const rawFileName = 'random-data'
const fileName = 'random-data.vmdk'
await exec('base64 /dev/urandom | head -c 104448 > ' + rawFileName)
await exec('rm -f ' + fileName + '&& VBoxManage convertfromraw --format VMDK --variant Stream ' + rawFileName + ' ' + fileName)
const parser = new VMDKDirectParser(createReadStream(fileName))

View File

@ -9,11 +9,11 @@ import {VHDFile, convertFromVMDK, computeGeometryForSize} from './vhd-write'
describe('VMDK to VHD conversion', () => {
it('can convert a random data file with readRawContent()', async () => {
let inputRawFileName = 'random-data.raw'
let vmdkFileName = 'random-data.vmdk'
let vhdFileName = 'from-vmdk-readRawContent.vhd'
let reconvertedRawFilemane = 'from-vhd.raw'
let dataSize = 5222400
const inputRawFileName = 'random-data.raw'
const vmdkFileName = 'random-data.vmdk'
const vhdFileName = 'from-vmdk-readRawContent.vhd'
const reconvertedRawFilemane = 'from-vhd.raw'
const dataSize = 5222400
await exec('rm -f ' + [inputRawFileName, vmdkFileName, vhdFileName, reconvertedRawFilemane].join(' '))
await exec('base64 /dev/urandom | head -c ' + dataSize + ' > ' + inputRawFileName)
await exec('VBoxManage convertfromraw --format VMDK --variant Stream ' + inputRawFileName + ' ' + vmdkFileName)
@ -33,12 +33,12 @@ describe('VMDK to VHD conversion', () => {
})
it('can convert a random data file with VMDKDirectParser', async () => {
let inputRawFileName = 'random-data.raw'
let vmdkFileName = 'random-data.vmdk'
let vhdFileName = 'from-vmdk-VMDKDirectParser.vhd'
let reconvertedRawFilemane = 'from-vhd.raw'
let reconvertedByVBoxRawFilemane = 'from-vhd-by-vbox.raw'
let dataSize = computeGeometryForSize(8 * 1024 * 1024).actualSize
const inputRawFileName = 'random-data.raw'
const vmdkFileName = 'random-data.vmdk'
const vhdFileName = 'from-vmdk-VMDKDirectParser.vhd'
const reconvertedRawFilemane = 'from-vhd.raw'
const reconvertedByVBoxRawFilemane = 'from-vhd-by-vbox.raw'
const dataSize = computeGeometryForSize(8 * 1024 * 1024).actualSize
await exec('rm -f ' + [inputRawFileName, vmdkFileName, vhdFileName, reconvertedRawFilemane, reconvertedByVBoxRawFilemane].join(' '))
await exec('base64 /dev/urandom | head -c ' + dataSize + ' > ' + inputRawFileName)
await exec('VBoxManage convertfromraw --format VMDK --variant Stream ' + inputRawFileName + ' ' + vmdkFileName)

View File

@ -9,7 +9,7 @@ exports.getPackages = (readPackageJson = false) => {
).then(names => {
const pkgs = names.map(name => ({
dir: `${PKGS_DIR}/${name}`,
name
name,
}))
return readPackageJson
? Promise.all(pkgs.map(pkg =>

531
yarn.lock
View File

@ -140,18 +140,18 @@ acorn@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7"
ajv-keywords@^1.0.0:
version "1.5.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
ajv-keywords@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
ajv@^4.7.0, ajv@^4.9.1:
ajv@^4.9.1:
version "4.11.8"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
dependencies:
co "^4.6.0"
json-stable-stringify "^1.0.1"
ajv@^5.1.0:
ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda"
dependencies:
@ -172,7 +172,7 @@ amdefine@>=0.0.4:
version "1.0.1"
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
ansi-escapes@^1.0.0, ansi-escapes@^1.1.0:
ansi-escapes@^1.0.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
@ -280,13 +280,6 @@ array-unique@^0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
array.prototype.find@^2.0.1:
version "2.0.4"
resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90"
dependencies:
define-properties "^1.1.2"
es-abstract "^1.7.0"
arrify@^1.0.0, arrify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
@ -398,7 +391,7 @@ babel-code-frame@7.0.0-beta.3:
esutils "^2.0.2"
js-tokens "^3.0.0"
babel-code-frame@^6.16.0, babel-code-frame@^6.26.0:
babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
dependencies:
@ -1887,7 +1880,7 @@ clean-css@4.1.x:
dependencies:
source-map "0.5.x"
cli-cursor@^1.0.1, cli-cursor@^1.0.2:
cli-cursor@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
dependencies:
@ -1973,7 +1966,7 @@ concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
concat-stream@^1.5.2:
concat-stream@^1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
dependencies:
@ -2083,12 +2076,6 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
dependencies:
cssom "0.3.x"
d@1:
version "1.0.0"
resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
dependencies:
es5-ext "^0.10.9"
dashdash@^1.12.0, dashdash@^1.14.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
@ -2099,17 +2086,13 @@ date-fns@^1.27.2:
version "1.29.0"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6"
debug-log@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f"
debug@3.1.0, debug@^3.0.1, debug@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
dependencies:
ms "2.0.0"
debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8:
debug@^2.2.0, debug@^2.3.3, debug@^2.6.8:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
dependencies:
@ -2151,13 +2134,6 @@ default-require-extensions@^1.0.0:
dependencies:
strip-bom "^2.0.0"
define-properties@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
dependencies:
foreach "^2.0.5"
object-keys "^1.0.8"
define-property@^0.2.5:
version "0.2.5"
resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
@ -2178,17 +2154,6 @@ deflate-js@^0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/deflate-js/-/deflate-js-0.2.3.tgz#f85abb58ebc5151a306147473d57c3e4f7e4426b"
deglob@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/deglob/-/deglob-2.1.0.tgz#4d44abe16ef32c779b4972bd141a80325029a14a"
dependencies:
find-root "^1.0.0"
glob "^7.0.5"
ignore "^3.0.9"
pkg-config "^1.1.0"
run-parallel "^1.1.2"
uniq "^1.0.1"
del@^2.0.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
@ -2247,7 +2212,7 @@ diff@^3.2.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c"
doctrine@1.5.0, doctrine@^1.2.2:
doctrine@1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
dependencies:
@ -2313,76 +2278,6 @@ error-ex@^1.2.0, error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
es-abstract@^1.7.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227"
dependencies:
es-to-primitive "^1.1.1"
function-bind "^1.1.1"
has "^1.0.1"
is-callable "^1.1.3"
is-regex "^1.0.4"
es-to-primitive@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
dependencies:
is-callable "^1.1.1"
is-date-object "^1.0.1"
is-symbol "^1.0.1"
es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
version "0.10.35"
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.35.tgz#18ee858ce6a3c45c7d79e91c15fcca9ec568494f"
dependencies:
es6-iterator "~2.0.1"
es6-symbol "~3.1.1"
es6-iterator@^2.0.1, es6-iterator@~2.0.1:
version "2.0.3"
resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
dependencies:
d "1"
es5-ext "^0.10.35"
es6-symbol "^3.1.1"
es6-map@^0.1.3:
version "0.1.5"
resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
dependencies:
d "1"
es5-ext "~0.10.14"
es6-iterator "~2.0.1"
es6-set "~0.1.5"
es6-symbol "~3.1.1"
event-emitter "~0.3.5"
es6-set@~0.1.5:
version "0.1.5"
resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
dependencies:
d "1"
es5-ext "~0.10.14"
es6-iterator "~2.0.1"
es6-symbol "3.1.1"
event-emitter "~0.3.5"
es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
dependencies:
d "1"
es5-ext "~0.10.14"
es6-weak-map@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
dependencies:
d "1"
es5-ext "^0.10.14"
es6-iterator "^2.0.1"
es6-symbol "^3.1.1"
escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
@ -2398,122 +2293,106 @@ escodegen@^1.6.1:
optionalDependencies:
source-map "~0.5.6"
escope@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
dependencies:
es6-map "^0.1.3"
es6-weak-map "^2.0.1"
esrecurse "^4.1.0"
estraverse "^4.1.1"
eslint-config-standard-jsx@4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz#009e53c4ddb1e9ee70b4650ffe63a7f39f8836e1"
eslint-config-standard@10.2.1:
eslint-config-standard@^10.2.1:
version "10.2.1"
resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz#c061e4d066f379dc17cd562c64e819b4dd454591"
eslint-import-resolver-node@^0.2.0:
version "0.2.3"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c"
eslint-import-resolver-node@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc"
dependencies:
debug "^2.2.0"
object-assign "^4.0.1"
resolve "^1.1.6"
debug "^2.6.8"
resolve "^1.2.0"
eslint-module-utils@^2.0.0:
eslint-module-utils@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449"
dependencies:
debug "^2.6.8"
pkg-dir "^1.0.0"
eslint-plugin-import@~2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e"
eslint-plugin-import@^2.8.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894"
dependencies:
builtin-modules "^1.1.1"
contains-path "^0.1.0"
debug "^2.2.0"
debug "^2.6.8"
doctrine "1.5.0"
eslint-import-resolver-node "^0.2.0"
eslint-module-utils "^2.0.0"
eslint-import-resolver-node "^0.3.1"
eslint-module-utils "^2.1.1"
has "^1.0.1"
lodash.cond "^4.3.0"
minimatch "^3.0.3"
pkg-up "^1.0.0"
read-pkg-up "^2.0.0"
eslint-plugin-node@~4.2.2:
version "4.2.3"
resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-4.2.3.tgz#c04390ab8dbcbb6887174023d6f3a72769e63b97"
eslint-plugin-node@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz#80df3253c4d7901045ec87fa660a284e32bdca29"
dependencies:
ignore "^3.0.11"
minimatch "^3.0.2"
object-assign "^4.0.1"
resolve "^1.1.7"
ignore "^3.3.6"
minimatch "^3.0.4"
resolve "^1.3.3"
semver "5.3.0"
eslint-plugin-promise@~3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca"
eslint-plugin-promise@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz#54b7658c8f454813dc2a870aff8152ec4969ba75"
eslint-plugin-react@~6.10.0:
version "6.10.3"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78"
dependencies:
array.prototype.find "^2.0.1"
doctrine "^1.2.2"
has "^1.0.1"
jsx-ast-utils "^1.3.4"
object.assign "^4.0.4"
eslint-plugin-standard@~3.0.1:
eslint-plugin-standard@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz#34d0c915b45edc6f010393c7eef3823b08565cf2"
eslint@~3.19.0:
version "3.19.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc"
eslint-scope@^3.7.1:
version "3.7.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
dependencies:
babel-code-frame "^6.16.0"
chalk "^1.1.3"
concat-stream "^1.5.2"
debug "^2.1.1"
esrecurse "^4.1.0"
estraverse "^4.1.1"
eslint@^4.11.0:
version "4.11.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.11.0.tgz#39a8c82bc0a3783adf5a39fa27fdd9d36fac9a34"
dependencies:
ajv "^5.3.0"
babel-code-frame "^6.22.0"
chalk "^2.1.0"
concat-stream "^1.6.0"
cross-spawn "^5.1.0"
debug "^3.0.1"
doctrine "^2.0.0"
escope "^3.6.0"
espree "^3.4.0"
eslint-scope "^3.7.1"
espree "^3.5.2"
esquery "^1.0.0"
estraverse "^4.2.0"
esutils "^2.0.2"
file-entry-cache "^2.0.0"
glob "^7.0.3"
globals "^9.14.0"
ignore "^3.2.0"
functional-red-black-tree "^1.0.1"
glob "^7.1.2"
globals "^9.17.0"
ignore "^3.3.3"
imurmurhash "^0.1.4"
inquirer "^0.12.0"
is-my-json-valid "^2.10.0"
inquirer "^3.0.6"
is-resolvable "^1.0.0"
js-yaml "^3.5.1"
json-stable-stringify "^1.0.0"
js-yaml "^3.9.1"
json-stable-stringify-without-jsonify "^1.0.1"
levn "^0.3.0"
lodash "^4.0.0"
mkdirp "^0.5.0"
lodash "^4.17.4"
minimatch "^3.0.2"
mkdirp "^0.5.1"
natural-compare "^1.4.0"
optionator "^0.8.2"
path-is-inside "^1.0.1"
pluralize "^1.2.1"
progress "^1.1.8"
require-uncached "^1.0.2"
shelljs "^0.7.5"
strip-bom "^3.0.0"
path-is-inside "^1.0.2"
pluralize "^7.0.0"
progress "^2.0.0"
require-uncached "^1.0.3"
semver "^5.3.0"
strip-ansi "^4.0.0"
strip-json-comments "~2.0.1"
table "^3.7.8"
table "^4.0.1"
text-table "~0.2.0"
user-home "^2.0.0"
espree@^3.4.0:
espree@^3.5.2:
version "3.5.2"
resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca"
dependencies:
@ -2549,13 +2428,6 @@ esutils@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
event-emitter@~0.3.5:
version "0.3.5"
resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
dependencies:
d "1"
es5-ext "~0.10.14"
event-to-promise@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/event-to-promise/-/event-to-promise-0.7.0.tgz#cb07dfcd418da2221d90f77eab713bc235e2090f"
@ -2719,7 +2591,7 @@ fb-watchman@^2.0.0:
dependencies:
bser "^2.0.0"
figures@^1.3.5, figures@^1.7.0:
figures@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
dependencies:
@ -2773,10 +2645,6 @@ find-parent-dir@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54"
find-root@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
find-up@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
@ -2813,10 +2681,6 @@ for-own@^0.1.4:
dependencies:
for-in "^1.0.1"
foreach@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
@ -2901,10 +2765,14 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
mkdirp ">=0.5 0"
rimraf "2"
function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1:
function-bind@^1.0.2:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
functional-red-black-tree@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
gauge@~2.7.3:
version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
@ -2918,16 +2786,6 @@ gauge@~2.7.3:
strip-ansi "^3.0.1"
wide-align "^1.1.0"
generate-function@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
generate-object-property@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
dependencies:
is-property "^1.0.0"
get-caller-file@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
@ -2936,10 +2794,6 @@ get-own-enumerable-property-symbols@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b"
get-stdin@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
get-stream@^2.1.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de"
@ -2999,7 +2853,7 @@ globals@^10.0.0:
version "10.4.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7"
globals@^9.14.0, globals@^9.18.0:
globals@^9.17.0, globals@^9.18.0:
version "9.18.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
@ -3245,7 +3099,7 @@ iconv-lite@0.4.19, iconv-lite@^0.4.17:
version "0.4.19"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
ignore@^3.0.11, ignore@^3.0.9, ignore@^3.2.0:
ignore@^3.3.3, ignore@^3.3.6:
version "3.3.7"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021"
@ -3278,25 +3132,7 @@ ini@~1.3.0:
version "1.3.4"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
inquirer@^0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
dependencies:
ansi-escapes "^1.1.0"
ansi-regex "^2.0.0"
chalk "^1.0.0"
cli-cursor "^1.0.1"
cli-width "^2.0.0"
figures "^1.3.5"
lodash "^4.3.0"
readline2 "^1.0.1"
run-async "^0.1.0"
rx-lite "^3.1.2"
string-width "^1.0.1"
strip-ansi "^3.0.0"
through "^2.3.6"
inquirer@^3.0.1:
inquirer@^3.0.1, inquirer@^3.0.6:
version "3.3.0"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
dependencies:
@ -3315,10 +3151,6 @@ inquirer@^3.0.1:
strip-ansi "^4.0.0"
through "^2.3.6"
interpret@^1.0.0:
version "1.0.4"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0"
invariant@^2.2.0, invariant@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
@ -3359,10 +3191,6 @@ is-builtin-module@^1.0.0:
dependencies:
builtin-modules "^1.0.0"
is-callable@^1.1.1, is-callable@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
is-ci@^1.0.10:
version "1.0.10"
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e"
@ -3375,10 +3203,6 @@ is-data-descriptor@^0.1.4:
dependencies:
kind-of "^3.0.2"
is-date-object@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
is-descriptor@^0.1.0:
version "0.1.6"
resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
@ -3455,15 +3279,6 @@ is-glob@^4.0.0:
dependencies:
is-extglob "^2.1.1"
is-my-json-valid@^2.10.0:
version "2.16.1"
resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11"
dependencies:
generate-function "^2.0.0"
generate-object-property "^1.1.0"
jsonpointer "^4.0.0"
xtend "^4.0.0"
is-number@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
@ -3534,20 +3349,10 @@ is-promise@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
is-property@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
is-redirect@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
is-regex@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
dependencies:
has "^1.0.1"
is-regexp@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
@ -3572,10 +3377,6 @@ is-stream@^1.0.0, is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
is-symbol@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
@ -3919,7 +3720,7 @@ js-tokens@^3.0.0, js-tokens@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
js-yaml@^3.5.1, js-yaml@^3.7.0, js-yaml@^3.9.0:
js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1:
version "3.10.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
dependencies:
@ -3993,7 +3794,11 @@ json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
json-stable-stringify-without-jsonify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
json-stable-stringify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
dependencies:
@ -4017,10 +3822,6 @@ jsonify@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
jsonpointer@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
jsonrpc-websocket-client@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/jsonrpc-websocket-client/-/jsonrpc-websocket-client-0.2.0.tgz#553e35687e8d6cf81a9a6655734ba9774caa90c2"
@ -4041,10 +3842,6 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
jsx-ast-utils@^1.3.4:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1"
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
@ -4291,7 +4088,7 @@ lodash.keys@^3.0.0:
dependencies:
lodash._createwrapper "^3.0.0"
lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.16.2, lodash@^4.16.6, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0:
lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.16.2, lodash@^4.16.6, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
@ -4462,7 +4259,7 @@ minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0:
minimist@^1.1.1, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
@ -4477,7 +4274,7 @@ mixin-deep@^1.2.0:
for-in "^1.0.2"
is-extendable "^0.1.1"
mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
@ -4522,10 +4319,6 @@ must@^0.13.2:
lodash.wrap ">= 3 < 4"
oolong ">= 1.11.0 < 2"
mute-stream@0.0.5:
version "0.0.5"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
mute-stream@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
@ -4759,24 +4552,12 @@ object-copy@^0.1.0:
define-property "^0.2.5"
kind-of "^3.0.3"
object-keys@^1.0.10, object-keys@^1.0.8:
version "1.0.11"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
object-visit@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
dependencies:
isobject "^3.0.0"
object.assign@^4.0.4:
version "4.0.4"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc"
dependencies:
define-properties "^1.1.2"
function-bind "^1.1.0"
object-keys "^1.0.10"
object.omit@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
@ -5060,42 +4841,21 @@ pipette@^0.9.3:
dependencies:
typ "~0.6.1"
pkg-conf@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.0.0.tgz#071c87650403bccfb9c627f58751bfe47c067279"
dependencies:
find-up "^2.0.0"
load-json-file "^2.0.0"
pkg-config@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4"
dependencies:
debug-log "^1.0.0"
find-root "^1.0.0"
xtend "^4.0.1"
pkg-dir@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
dependencies:
find-up "^1.0.0"
pkg-up@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26"
dependencies:
find-up "^1.0.0"
plur@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a"
dependencies:
irregular-plurals "^1.0.0"
pluralize@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
pluralize@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
posix-character-classes@^0.1.0:
version "0.1.1"
@ -5146,9 +4906,9 @@ progress-stream@^2.0.0:
speedometer "~1.0.0"
through2 "~2.0.3"
progress@^1.1.8:
version "1.1.8"
resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
progress@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
promise-polyfill@^6.0.1:
version "6.0.2"
@ -5278,20 +5038,6 @@ readdirp@^2.0.0:
readable-stream "^2.0.2"
set-immediate-shim "^1.0.1"
readline2@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
dependencies:
code-point-at "^1.0.0"
is-fullwidth-code-point "^1.0.0"
mute-stream "0.0.5"
rechoir@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
dependencies:
resolve "^1.1.6"
"reconnect-core@https://github.com/dodo/reconnect-core/tarball/merged":
version "0.0.1"
resolved "https://github.com/dodo/reconnect-core/tarball/merged#b9daf2adc45b19a6cc5fd2f048f8d9406cece498"
@ -5483,7 +5229,7 @@ require-package-name@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9"
require-uncached@^1.0.2:
require-uncached@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
dependencies:
@ -5502,7 +5248,7 @@ resolve@1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2:
resolve@^1.1.7, resolve@^1.2.0, resolve@^1.3.2, resolve@^1.3.3:
version "1.5.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
dependencies:
@ -5540,22 +5286,12 @@ rimraf@~2.4.0:
dependencies:
glob "^6.0.1"
run-async@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
dependencies:
once "^1.3.0"
run-async@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
dependencies:
is-promise "^2.1.0"
run-parallel@^1.1.2:
version "1.1.6"
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.6.tgz#29003c9a2163e01e2d2dfc90575f2c6c1d61a039"
rx-lite-aggregates@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
@ -5566,10 +5302,6 @@ rx-lite@*, rx-lite@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
rx-lite@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
rxjs@^5.4.2:
version "5.5.2"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.2.tgz#28d403f0071121967f18ad665563255d54236ac3"
@ -5652,14 +5384,6 @@ shebang-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
shelljs@^0.7.5:
version "0.7.8"
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3"
dependencies:
glob "^7.0.0"
interpret "^1.0.0"
rechoir "^0.6.2"
shellwords@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
@ -5682,6 +5406,12 @@ slice-ansi@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
slice-ansi@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
dependencies:
is-fullwidth-code-point "^2.0.0"
snapdragon-node@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
@ -5801,29 +5531,6 @@ staged-git-files@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35"
standard-engine@~7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-7.0.0.tgz#ebb77b9c8fc2c8165ffa353bd91ba0dff41af690"
dependencies:
deglob "^2.1.0"
get-stdin "^5.0.1"
minimist "^1.1.0"
pkg-conf "^2.0.0"
standard@^10.0.3:
version "10.0.3"
resolved "https://registry.yarnpkg.com/standard/-/standard-10.0.3.tgz#7869bcbf422bdeeaab689a1ffb1fea9677dd50ea"
dependencies:
eslint "~3.19.0"
eslint-config-standard "10.2.1"
eslint-config-standard-jsx "4.0.2"
eslint-plugin-import "~2.2.0"
eslint-plugin-node "~4.2.2"
eslint-plugin-promise "~3.5.0"
eslint-plugin-react "~6.10.0"
eslint-plugin-standard "~3.0.1"
standard-engine "~7.0.0"
static-extend@^0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
@ -5852,7 +5559,7 @@ string-width@^1.0.1, string-width@^1.0.2:
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"
string-width@^2.0.0, string-width@^2.1.0:
string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
dependencies:
@ -5960,16 +5667,16 @@ symbol-tree@^3.2.1:
version "3.2.2"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
table@^3.7.8:
version "3.8.3"
resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
table@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
dependencies:
ajv "^4.7.0"
ajv-keywords "^1.0.0"
chalk "^1.1.1"
lodash "^4.0.0"
slice-ansi "0.0.4"
string-width "^2.0.0"
ajv "^5.2.3"
ajv-keywords "^2.1.0"
chalk "^2.1.0"
lodash "^4.17.4"
slice-ansi "1.0.0"
string-width "^2.1.1"
tar-pack@^3.4.0:
version "3.4.1"
@ -6186,10 +5893,6 @@ union-value@^1.0.0:
is-extendable "^0.1.1"
set-value "^0.4.3"
uniq@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
unset-value@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
@ -6227,12 +5930,6 @@ user-home@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
user-home@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
dependencies:
os-homedir "^1.0.0"
util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@ -6468,7 +6165,7 @@ xpath@0.0.5:
version "0.0.5"
resolved "https://registry.yarnpkg.com/xpath/-/xpath-0.0.5.tgz#454036f6ef0f3df5af5d4ba4a119fb75674b3e6c"
xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
xtend@^4.0.1, xtend@~4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"