@ -1,2 +1,3 @@
|
|||||||
wappalyzer.js
|
/apps.json
|
||||||
apps.json
|
/wappalyzer.js
|
||||||
|
/node_modules
|
||||||
|
@ -1,228 +1,79 @@
|
|||||||
/**
|
'use strict';
|
||||||
* PhantomJS driver
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** global: phantom */
|
|
||||||
/** global: wappalyzer */
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
var
|
|
||||||
url,
|
|
||||||
originalUrl,
|
|
||||||
scriptDir,
|
|
||||||
scriptPath = require('fs').absolute(require('system').args[0]),
|
|
||||||
resourceTimeout = 9000,
|
|
||||||
args = [], // TODO: Not used, maybe should be `arg`
|
|
||||||
debug = false, // Output debug messages
|
|
||||||
quiet = false; // Don't output errors
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Working directory
|
|
||||||
scriptDir = scriptPath.split('/'); scriptDir.pop(); scriptDir = scriptDir.join('/');
|
|
||||||
|
|
||||||
require('fs').changeWorkingDirectory(scriptDir);
|
|
||||||
|
|
||||||
require('system').args.forEach(function(arg) {
|
|
||||||
var
|
|
||||||
value,
|
|
||||||
arr = /^(--[^=]+)=(.+)$/.exec(arg);
|
|
||||||
|
|
||||||
if ( arr && arr.length === 3 ) {
|
|
||||||
arg = arr[1];
|
|
||||||
value = arr[2];
|
|
||||||
}
|
|
||||||
|
|
||||||
switch ( arg ) {
|
const wappalyzer = require('./wappalyzer');
|
||||||
case '-v':
|
const request = require('request');
|
||||||
case '--verbose':
|
const fs = require('fs');
|
||||||
debug = true;
|
const Browser = require('zombie');
|
||||||
|
|
||||||
break;
|
const json = JSON.parse(fs.readFileSync(__dirname + '/apps.json'));
|
||||||
case '-q':
|
|
||||||
case '--quiet':
|
|
||||||
quiet = true;
|
|
||||||
|
|
||||||
break;
|
wappalyzer.apps = json.apps;
|
||||||
case '--resource-timeout':
|
wappalyzer.categories = json.categories;
|
||||||
if ( value ) {
|
|
||||||
resourceTimeout = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
const driver = {
|
||||||
default:
|
quiet: true,
|
||||||
url = originalUrl = arg;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if ( !url ) {
|
analyze: url => {
|
||||||
throw new Error('Usage: phantomjs ' + require('system').args[0] + ' <url>');
|
return new Promise((resolve, reject) => {
|
||||||
|
wappalyzer.driver.log = (message, source, type) => {
|
||||||
|
if ( type === 'error' ) {
|
||||||
|
return reject(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !phantom.injectJs('wappalyzer.js') ) {
|
if ( !driver.quiet ) {
|
||||||
throw new Error('Unable to open file js/wappalyzer.js');
|
console.log('[wappalyzer ' + type + ']', '[' + source + ']', message);
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
wappalyzer.driver = {
|
wappalyzer.driver.displayApps = detected => {
|
||||||
timeout: 1000,
|
var apps = [];
|
||||||
|
|
||||||
/**
|
Object.keys(detected).forEach(appName => {
|
||||||
* Log messages to console
|
const app = detected[appName];
|
||||||
*/
|
|
||||||
log: function(args) {
|
|
||||||
if ( args.type === 'error' ) {
|
|
||||||
if ( !quiet ) {
|
|
||||||
require('system').stderr.write(args.message + "\n");
|
|
||||||
}
|
|
||||||
} else if ( debug || args.type !== 'debug' ) {
|
|
||||||
require('system').stdout.write(args.message + "\n");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
var categories = [];
|
||||||
* Display apps
|
|
||||||
*/
|
|
||||||
displayApps: function() {
|
|
||||||
var
|
|
||||||
app, cats,
|
|
||||||
apps = [];
|
|
||||||
|
|
||||||
wappalyzer.log('driver.displayApps');
|
app.props.cats.forEach(id => {
|
||||||
|
var category = {};
|
||||||
|
|
||||||
for ( app in wappalyzer.detected[url] ) {
|
category[id] = wappalyzer.categories[id].name;
|
||||||
cats = [];
|
|
||||||
|
|
||||||
wappalyzer.apps[app].cats.forEach(function(cat) {
|
categories.push(category)
|
||||||
cats.push(wappalyzer.categories[cat].name);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
apps.push({
|
apps.push({
|
||||||
name: app,
|
name: app.name,
|
||||||
confidence: wappalyzer.detected[url][app].confidenceTotal.toString(),
|
confidence: app.confidenceTotal.toString(),
|
||||||
version: wappalyzer.detected[url][app].version,
|
version: app.version,
|
||||||
icon: wappalyzer.apps[app].icon || 'default.svg',
|
icon: app.props.icon || 'default.svg',
|
||||||
website: wappalyzer.apps[app].website,
|
website: app.props.website,
|
||||||
categories: cats
|
categories
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
wappalyzer.driver.sendResponse(apps);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Send response
|
|
||||||
*/
|
|
||||||
sendResponse: function(apps) {
|
|
||||||
apps = apps || [];
|
|
||||||
|
|
||||||
require('system').stdout.write(JSON.stringify({ url: url, originalUrl: originalUrl, applications: apps }) + "\n");
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize
|
|
||||||
*/
|
|
||||||
init: function() {
|
|
||||||
var
|
|
||||||
page, hostname,
|
|
||||||
headers = {},
|
|
||||||
a = document.createElement('a'),
|
|
||||||
json = JSON.parse(require('fs').read('apps.json'));
|
|
||||||
|
|
||||||
wappalyzer.log('driver.init');
|
|
||||||
|
|
||||||
a.href = url.replace(/#.*$/, '');
|
|
||||||
|
|
||||||
hostname = a.hostname;
|
|
||||||
|
|
||||||
wappalyzer.apps = json.apps;
|
|
||||||
wappalyzer.categories = json.categories;
|
|
||||||
|
|
||||||
page = require('webpage').create();
|
|
||||||
|
|
||||||
page.settings.loadImages = false;
|
|
||||||
page.settings.userAgent = 'Mozilla/5.0 (compatible; Wappalyzer; +https://github.com/AliasIO/Wappalyzer)';
|
|
||||||
page.settings.resourceTimeout = resourceTimeout;
|
|
||||||
|
|
||||||
page.onError = function(message) {
|
|
||||||
wappalyzer.log(message, 'error');
|
|
||||||
};
|
|
||||||
|
|
||||||
page.onResourceTimeout = function() {
|
|
||||||
wappalyzer.log('Resource timeout', 'error');
|
|
||||||
|
|
||||||
wappalyzer.driver.sendResponse();
|
|
||||||
|
|
||||||
phantom.exit(1);
|
|
||||||
};
|
|
||||||
|
|
||||||
page.onResourceReceived = function(response) {
|
|
||||||
if ( response.url.replace(/\/$/, '') === url.replace(/\/$/, '') ) {
|
|
||||||
if ( response.redirectURL ) {
|
|
||||||
url = response.redirectURL;
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( response.stage === 'end' && response.status === 200 && response.contentType.indexOf('text/html') !== -1 ) {
|
|
||||||
response.headers.forEach(function(header) {
|
|
||||||
headers[header.name.toLowerCase()] = header.value;
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
page.onResourceError = function(resourceError) {
|
resolve(apps);
|
||||||
wappalyzer.log(resourceError.errorString, 'error');
|
|
||||||
};
|
};
|
||||||
|
|
||||||
page.open(url, function(status) {
|
const browser = new Browser();
|
||||||
var html, environmentVars = '';
|
|
||||||
|
|
||||||
if ( status === 'success' ) {
|
|
||||||
html = page.content;
|
|
||||||
|
|
||||||
if ( html.length > 50000 ) {
|
browser.visit(url, error => {
|
||||||
html = html.substring(0, 25000) + html.substring(html.length - 25000, html.length);
|
wappalyzer.driver.document = browser.document;
|
||||||
}
|
|
||||||
|
|
||||||
// Collect environment variables
|
const headers = browser.resources['0'].response.headers;
|
||||||
environmentVars = page.evaluate(function() {
|
const vars = Object.getOwnPropertyNames(browser.window);
|
||||||
var i, environmentVars = '';
|
const html = browser.html();
|
||||||
|
|
||||||
for ( i in window ) {
|
const hostname = wappalyzer.parseUrl(url).hostname;
|
||||||
environmentVars += i + ' ';
|
|
||||||
}
|
|
||||||
|
|
||||||
return environmentVars;
|
|
||||||
});
|
|
||||||
|
|
||||||
wappalyzer.log({ message: 'environmentVars: ' + environmentVars });
|
|
||||||
|
|
||||||
environmentVars = environmentVars.split(' ').slice(0, 500);
|
|
||||||
|
|
||||||
wappalyzer.analyze(hostname, url, {
|
wappalyzer.analyze(hostname, url, {
|
||||||
html: html,
|
headers,
|
||||||
headers: headers,
|
html,
|
||||||
env: environmentVars
|
env: vars
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
phantom.exit(0);
|
|
||||||
} else {
|
|
||||||
wappalyzer.log('Failed to fetch page', 'error');
|
|
||||||
|
|
||||||
wappalyzer.driver.sendResponse();
|
|
||||||
|
|
||||||
phantom.exit(1);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
wappalyzer.init();
|
|
||||||
} catch ( e ) {
|
|
||||||
wappalyzer.log(e, 'error');
|
|
||||||
|
|
||||||
wappalyzer.driver.sendResponse();
|
|
||||||
|
|
||||||
phantom.exit(1);
|
|
||||||
}
|
}
|
||||||
})();
|
|
||||||
|
module.exports = driver;
|
||||||
|
@ -1,21 +1,23 @@
|
|||||||
{
|
{
|
||||||
"name": "Wappalyzer",
|
"name": "wappalyzer",
|
||||||
"description": "Uncovers the technologies used on websites",
|
"description": "Uncovers the technologies used on websites",
|
||||||
"homepage": "https://github.com/AliasIO/Wappalyzer",
|
"homepage": "https://github.com/AliasIO/Wappalyzer",
|
||||||
"version": "4.1.4",
|
"version": "5.0.5",
|
||||||
"author": "Elbert Alias",
|
"author": "Elbert Alias",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/AliasIO/Wappalyzer"
|
"url": "https://github.com/AliasIO/Wappalyzer"
|
||||||
},
|
},
|
||||||
"main": "index.js",
|
"main": "driver.js",
|
||||||
"files": [
|
"files": [
|
||||||
"apps.json",
|
"apps.json",
|
||||||
|
"index.js",
|
||||||
"driver.js",
|
"driver.js",
|
||||||
"wappalyzer.js"
|
"wappalyzer.js"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"phantomjs-prebuilt": "*"
|
"request": "^2.81.0",
|
||||||
|
"zombie": "^5.0.7"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
/apps.json
|
/apps.json
|
||||||
/images/icons/converted/*
|
|
||||||
/images/icons/*
|
/images/icons/*
|
||||||
|
/images/icons/converted/*
|
||||||
/js/wappalyzer.js
|
/js/wappalyzer.js
|
||||||
|
/node_modules
|
||||||
|
|
||||||
|
!.gitkeep
|
||||||
|
@ -0,0 +1,66 @@
|
|||||||
|
{
|
||||||
|
"github": { "message": "Salin Wappalyzer di GitHub!" },
|
||||||
|
"twitter": { "message": "Ikuti Wappalyzer di Twitter" },
|
||||||
|
"website": { "message": "Kunjungi wappalyzer.com" },
|
||||||
|
"options": { "message": "Pilihan" },
|
||||||
|
"optionsSave": { "message": "Simpan pilihan" },
|
||||||
|
"optionsSaved": { "message": "Tersimpan" },
|
||||||
|
"optionUpgradeMessage": { "message": "Beritahu Tentang Peningkatan Versi" },
|
||||||
|
"optionDynamicIcon": { "message": "Gunakan ikon aplikasi dan bukan logo Wappalyzer" },
|
||||||
|
"optionTracking": { "message": "Secara anonim kirimkan laporan tentang aplikasi yang terdeteksi ke wappalyzer.com untuk penelitian" },
|
||||||
|
"nothingToDo": { "message": "Tak ada yang dilakukan disini." },
|
||||||
|
"noAppsDetected": { "message": "Tidak ada aplikasi yang terdeteksi." },
|
||||||
|
"categoryName1": { "message": "Sistem Pengelola Konten" },
|
||||||
|
"categoryName2": { "message": "Papan Pesan" },
|
||||||
|
"categoryName3": { "message": "Pengelola Basis Data" },
|
||||||
|
"categoryName4": { "message": "Alat Dokumentasi" },
|
||||||
|
"categoryName5": { "message": "Widget" },
|
||||||
|
"categoryName6": { "message": "Toko Online" },
|
||||||
|
"categoryName7": { "message": "Galeri Foto" },
|
||||||
|
"categoryName8": { "message": "Wiki" },
|
||||||
|
"categoryName9": { "message": "Panel Hosting" },
|
||||||
|
"categoryName10": { "message": "Analistik" },
|
||||||
|
"categoryName11": { "message": "Blog" },
|
||||||
|
"categoryName12": { "message": "Bingkai Kerja JavaScript" },
|
||||||
|
"categoryName13": { "message": "Pelacak Masalah" },
|
||||||
|
"categoryName14": { "message": "Pemutar Video" },
|
||||||
|
"categoryName15": { "message": "Sistem Komentar" },
|
||||||
|
"categoryName16": { "message": "Captcha" },
|
||||||
|
"categoryName17": { "message": "Font Script" },
|
||||||
|
"categoryName18": { "message": "Bingkai Kerja Web" },
|
||||||
|
"categoryName19": { "message": "Serba Serbi" },
|
||||||
|
"categoryName20": { "message": "Editor" },
|
||||||
|
"categoryName21": { "message": "LMS" },
|
||||||
|
"categoryName22": { "message": "Server Website" },
|
||||||
|
"categoryName23": { "message": "Alat Cache" },
|
||||||
|
"categoryName24": { "message": "Rich Text Editor" },
|
||||||
|
"categoryName25": { "message": "JavaScript Graphics" },
|
||||||
|
"categoryName26": { "message": "Bingkai Kerja Mobile" },
|
||||||
|
"categoryName27": { "message": "Bahasa Pemrograman" },
|
||||||
|
"categoryName28": { "message": "Sistem Operasi" },
|
||||||
|
"categoryName29": { "message": "Mesin Pencari" },
|
||||||
|
"categoryName30": { "message": "Web Mail" },
|
||||||
|
"categoryName31": { "message": "CDN" },
|
||||||
|
"categoryName32": { "message": "Otomasi Pemasaran" },
|
||||||
|
"categoryName33": { "message": "Ekstensi Web Server" },
|
||||||
|
"categoryName34": { "message": "Basis Data" },
|
||||||
|
"categoryName35": { "message": "Peta" },
|
||||||
|
"categoryName36": { "message": "Jaringan Periklanan" },
|
||||||
|
"categoryName37": { "message": "Layanan Jaringan" },
|
||||||
|
"categoryName38": { "message": "Server Media" },
|
||||||
|
"categoryName39": { "message": "Webcam" },
|
||||||
|
"categoryName40": { "message": "Pencetak" },
|
||||||
|
"categoryName41": { "message": "Pemroses Pembayaran" },
|
||||||
|
"categoryName42": { "message": "Pengelola Tag" },
|
||||||
|
"categoryName43": { "message": "Paywall" },
|
||||||
|
"categoryName44": { "message": "Sistem Pembuatan/CI" },
|
||||||
|
"categoryName45": { "message": "Sistem SCADA" },
|
||||||
|
"categoryName46": { "message": "Akses Remote" },
|
||||||
|
"categoryName47": { "message": "Alat Pengembangan" },
|
||||||
|
"categoryName48": { "message": "Penyimpanan Jaringan" },
|
||||||
|
"categoryName49": { "message": "Umpan Pembaca" },
|
||||||
|
"categoryName50": { "message": "Sistem Manajemen Dokumen" },
|
||||||
|
"categoryName51": { "message": "Pembuat Laman Landas" },
|
||||||
|
"categoryName52": { "message": "Chat Langsung" },
|
||||||
|
"categoryName53": { "message": "CRM" }
|
||||||
|
}
|
@ -1,14 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
|
|
||||||
<script src="js/browser-polyfill.js"></script>
|
|
||||||
<script src="js/wappalyzer.js"></script>
|
|
||||||
<script src="js/driver.js"></script>
|
|
||||||
<script src="js/network.js"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -0,0 +1,14 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<script src="../node_modules/webextension-polyfill/dist/browser-polyfill.js"></script>
|
||||||
|
<script src="../js/wappalyzer.js"></script>
|
||||||
|
<script src="../js/driver.js"></script>
|
||||||
|
<script src="../js/network.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,15 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../css/popup.css">
|
||||||
|
|
||||||
|
<script src="../node_modules/webextension-polyfill/dist/browser-polyfill.js"></script>
|
||||||
|
<script src="../js/jsontodom.js"></script>
|
||||||
|
<script src="../js/popup.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -1,851 +0,0 @@
|
|||||||
/* webextension-polyfill - v0.1.0 - Sat Mar 11 2017 11:35:13 */
|
|
||||||
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* vim: set sts=2 sw=2 et tw=80: */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
if (typeof browser === "undefined") {
|
|
||||||
// Wrapping the bulk of this polyfill in a one-time-use function is a minor
|
|
||||||
// optimization for Firefox. Since Spidermonkey does not fully parse the
|
|
||||||
// contents of a function until the first time it's called, and since it will
|
|
||||||
// never actually need to be called, this allows the polyfill to be included
|
|
||||||
// in Firefox nearly for free.
|
|
||||||
const wrapAPIs = () => {
|
|
||||||
const apiMetadata = {
|
|
||||||
"alarms": {
|
|
||||||
"clear": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"clearAll": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"get": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getAll": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"bookmarks": {
|
|
||||||
"create": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"export": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"get": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getChildren": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getRecent": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getTree": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"getSubTree": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"import": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"move": {
|
|
||||||
"minArgs": 2,
|
|
||||||
"maxArgs": 2
|
|
||||||
},
|
|
||||||
"remove": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"removeTree": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"search": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"minArgs": 2,
|
|
||||||
"maxArgs": 2
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"browserAction": {
|
|
||||||
"getBadgeBackgroundColor": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getBadgeText": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getPopup": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getTitle": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"setIcon": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"commands": {
|
|
||||||
"getAll": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"contextMenus": {
|
|
||||||
"update": {
|
|
||||||
"minArgs": 2,
|
|
||||||
"maxArgs": 2
|
|
||||||
},
|
|
||||||
"remove": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"removeAll": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"cookies": {
|
|
||||||
"get": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getAll": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getAllCookieStores": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"remove": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"set": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"downloads": {
|
|
||||||
"download": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"cancel": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"erase": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getFileIcon": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 2
|
|
||||||
},
|
|
||||||
"open": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"pause": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"removeFile": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"resume": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"search": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"show": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"extension": {
|
|
||||||
"isAllowedFileSchemeAccess": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"isAllowedIncognitoAccess": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"history": {
|
|
||||||
"addUrl": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getVisits": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"deleteAll": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"deleteRange": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"deleteUrl": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"search": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"i18n": {
|
|
||||||
"detectLanguage": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getAcceptLanguages": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idle": {
|
|
||||||
"queryState": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"management": {
|
|
||||||
"get": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getAll": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"getSelf": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"uninstallSelf": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notifications": {
|
|
||||||
"clear": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 2
|
|
||||||
},
|
|
||||||
"getAll": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"getPermissionLevel": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"minArgs": 2,
|
|
||||||
"maxArgs": 2
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pageAction": {
|
|
||||||
"getPopup": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getTitle": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"hide": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"setIcon": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"show": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"getBackgroundPage": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"getBrowserInfo": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"getPlatformInfo": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"openOptionsPage": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"requestUpdateCheck": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"sendMessage": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 3
|
|
||||||
},
|
|
||||||
"sendNativeMessage": {
|
|
||||||
"minArgs": 2,
|
|
||||||
"maxArgs": 2
|
|
||||||
},
|
|
||||||
"setUninstallURL": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"storage": {
|
|
||||||
"local": {
|
|
||||||
"clear": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"get": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getBytesInUse": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"remove": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"set": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"managed": {
|
|
||||||
"get": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getBytesInUse": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sync": {
|
|
||||||
"clear": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"get": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getBytesInUse": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"remove": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"set": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tabs": {
|
|
||||||
"create": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"captureVisibleTab": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 2
|
|
||||||
},
|
|
||||||
"detectLanguage": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"duplicate": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"executeScript": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 2
|
|
||||||
},
|
|
||||||
"get": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getCurrent": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
},
|
|
||||||
"getZoom": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getZoomSettings": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"highlight": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"insertCSS": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 2
|
|
||||||
},
|
|
||||||
"move": {
|
|
||||||
"minArgs": 2,
|
|
||||||
"maxArgs": 2
|
|
||||||
},
|
|
||||||
"reload": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 2
|
|
||||||
},
|
|
||||||
"remove": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"query": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"removeCSS": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 2
|
|
||||||
},
|
|
||||||
"sendMessage": {
|
|
||||||
"minArgs": 2,
|
|
||||||
"maxArgs": 3
|
|
||||||
},
|
|
||||||
"setZoom": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 2
|
|
||||||
},
|
|
||||||
"setZoomSettings": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 2
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 2
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"webNavigation": {
|
|
||||||
"getAllFrames": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getFrame": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"webRequest": {
|
|
||||||
"handlerBehaviorChanged": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"windows": {
|
|
||||||
"create": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"get": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 2
|
|
||||||
},
|
|
||||||
"getAll": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getCurrent": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"getLastFocused": {
|
|
||||||
"minArgs": 0,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"remove": {
|
|
||||||
"minArgs": 1,
|
|
||||||
"maxArgs": 1
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"minArgs": 2,
|
|
||||||
"maxArgs": 2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A WeakMap subclass which creates and stores a value for any key which does
|
|
||||||
* not exist when accessed, but behaves exactly as an ordinary WeakMap
|
|
||||||
* otherwise.
|
|
||||||
*
|
|
||||||
* @param {function} createItem
|
|
||||||
* A function which will be called in order to create the value for any
|
|
||||||
* key which does not exist, the first time it is accessed. The
|
|
||||||
* function receives, as its only argument, the key being created.
|
|
||||||
*/
|
|
||||||
class DefaultWeakMap extends WeakMap {
|
|
||||||
constructor(createItem, items = undefined) {
|
|
||||||
super(items);
|
|
||||||
this.createItem = createItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
get(key) {
|
|
||||||
if (!this.has(key)) {
|
|
||||||
this.set(key, this.createItem(key));
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.get(key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if the given object is an object with a `then` method, and can
|
|
||||||
* therefore be assumed to behave as a Promise.
|
|
||||||
*
|
|
||||||
* @param {*} value The value to test.
|
|
||||||
* @returns {boolean} True if the value is thenable.
|
|
||||||
*/
|
|
||||||
const isThenable = value => {
|
|
||||||
return value && typeof value === "object" && typeof value.then === "function";
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates and returns a function which, when called, will resolve or reject
|
|
||||||
* the given promise based on how it is called:
|
|
||||||
*
|
|
||||||
* - If, when called, `chrome.runtime.lastError` contains a non-null object,
|
|
||||||
* the promise is rejected with that value.
|
|
||||||
* - If the function is called with exactly one argument, the promise is
|
|
||||||
* resolved to that value.
|
|
||||||
* - Otherwise, the promise is resolved to an array containing all of the
|
|
||||||
* function's arguments.
|
|
||||||
*
|
|
||||||
* @param {object} promise
|
|
||||||
* An object containing the resolution and rejection functions of a
|
|
||||||
* promise.
|
|
||||||
* @param {function} promise.resolve
|
|
||||||
* The promise's resolution function.
|
|
||||||
* @param {function} promise.rejection
|
|
||||||
* The promise's rejection function.
|
|
||||||
*
|
|
||||||
* @returns {function}
|
|
||||||
* The generated callback function.
|
|
||||||
*/
|
|
||||||
const makeCallback = promise => {
|
|
||||||
return (...callbackArgs) => {
|
|
||||||
if (chrome.runtime.lastError) {
|
|
||||||
promise.reject(chrome.runtime.lastError);
|
|
||||||
} else if (callbackArgs.length === 1) {
|
|
||||||
promise.resolve(callbackArgs[0]);
|
|
||||||
} else {
|
|
||||||
promise.resolve(callbackArgs);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a wrapper function for a method with the given name and metadata.
|
|
||||||
*
|
|
||||||
* @param {string} name
|
|
||||||
* The name of the method which is being wrapped.
|
|
||||||
* @param {object} metadata
|
|
||||||
* Metadata about the method being wrapped.
|
|
||||||
* @param {integer} metadata.minArgs
|
|
||||||
* The minimum number of arguments which must be passed to the
|
|
||||||
* function. If called with fewer than this number of arguments, the
|
|
||||||
* wrapper will raise an exception.
|
|
||||||
* @param {integer} metadata.maxArgs
|
|
||||||
* The maximum number of arguments which may be passed to the
|
|
||||||
* function. If called with more than this number of arguments, the
|
|
||||||
* wrapper will raise an exception.
|
|
||||||
*
|
|
||||||
* @returns {function(object, ...*)}
|
|
||||||
* The generated wrapper function.
|
|
||||||
*/
|
|
||||||
const wrapAsyncFunction = (name, metadata) => {
|
|
||||||
const pluralizeArguments = (numArgs) => numArgs == 1 ? "argument" : "arguments";
|
|
||||||
|
|
||||||
return function asyncFunctionWrapper(target, ...args) {
|
|
||||||
if (args.length < metadata.minArgs) {
|
|
||||||
throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.length > metadata.maxArgs) {
|
|
||||||
throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
target[name](...args, makeCallback({resolve, reject}));
|
|
||||||
});
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wraps an existing method of the target object, so that calls to it are
|
|
||||||
* intercepted by the given wrapper function. The wrapper function receives,
|
|
||||||
* as its first argument, the original `target` object, followed by each of
|
|
||||||
* the arguments passed to the orginal method.
|
|
||||||
*
|
|
||||||
* @param {object} target
|
|
||||||
* The original target object that the wrapped method belongs to.
|
|
||||||
* @param {function} method
|
|
||||||
* The method being wrapped. This is used as the target of the Proxy
|
|
||||||
* object which is created to wrap the method.
|
|
||||||
* @param {function} wrapper
|
|
||||||
* The wrapper function which is called in place of a direct invocation
|
|
||||||
* of the wrapped method.
|
|
||||||
*
|
|
||||||
* @returns {Proxy<function>}
|
|
||||||
* A Proxy object for the given method, which invokes the given wrapper
|
|
||||||
* method in its place.
|
|
||||||
*/
|
|
||||||
const wrapMethod = (target, method, wrapper) => {
|
|
||||||
return new Proxy(method, {
|
|
||||||
apply(targetMethod, thisObj, args) {
|
|
||||||
return wrapper.call(thisObj, target, ...args);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
let hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wraps an object in a Proxy which intercepts and wraps certain methods
|
|
||||||
* based on the given `wrappers` and `metadata` objects.
|
|
||||||
*
|
|
||||||
* @param {object} target
|
|
||||||
* The target object to wrap.
|
|
||||||
*
|
|
||||||
* @param {object} [wrappers = {}]
|
|
||||||
* An object tree containing wrapper functions for special cases. Any
|
|
||||||
* function present in this object tree is called in place of the
|
|
||||||
* method in the same location in the `target` object tree. These
|
|
||||||
* wrapper methods are invoked as described in {@see wrapMethod}.
|
|
||||||
*
|
|
||||||
* @param {object} [metadata = {}]
|
|
||||||
* An object tree containing metadata used to automatically generate
|
|
||||||
* Promise-based wrapper functions for asynchronous. Any function in
|
|
||||||
* the `target` object tree which has a corresponding metadata object
|
|
||||||
* in the same location in the `metadata` tree is replaced with an
|
|
||||||
* automatically-generated wrapper function, as described in
|
|
||||||
* {@see wrapAsyncFunction}
|
|
||||||
*
|
|
||||||
* @returns {Proxy<object>}
|
|
||||||
*/
|
|
||||||
const wrapObject = (target, wrappers = {}, metadata = {}) => {
|
|
||||||
let cache = Object.create(null);
|
|
||||||
|
|
||||||
let handlers = {
|
|
||||||
has(target, prop) {
|
|
||||||
return prop in target || prop in cache;
|
|
||||||
},
|
|
||||||
|
|
||||||
get(target, prop, receiver) {
|
|
||||||
if (prop in cache) {
|
|
||||||
return cache[prop];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(prop in target)) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
let value = target[prop];
|
|
||||||
|
|
||||||
if (typeof value === "function") {
|
|
||||||
// This is a method on the underlying object. Check if we need to do
|
|
||||||
// any wrapping.
|
|
||||||
|
|
||||||
if (typeof wrappers[prop] === "function") {
|
|
||||||
// We have a special-case wrapper for this method.
|
|
||||||
value = wrapMethod(target, target[prop], wrappers[prop]);
|
|
||||||
} else if (hasOwnProperty(metadata, prop)) {
|
|
||||||
// This is an async method that we have metadata for. Create a
|
|
||||||
// Promise wrapper for it.
|
|
||||||
let wrapper = wrapAsyncFunction(prop, metadata[prop]);
|
|
||||||
value = wrapMethod(target, target[prop], wrapper);
|
|
||||||
} else {
|
|
||||||
// This is a method that we don't know or care about. Return the
|
|
||||||
// original method, bound to the underlying object.
|
|
||||||
value = value.bind(target);
|
|
||||||
}
|
|
||||||
} else if (typeof value === "object" && value !== null &&
|
|
||||||
(hasOwnProperty(wrappers, prop) ||
|
|
||||||
hasOwnProperty(metadata, prop))) {
|
|
||||||
// This is an object that we need to do some wrapping for the children
|
|
||||||
// of. Create a sub-object wrapper for it with the appropriate child
|
|
||||||
// metadata.
|
|
||||||
value = wrapObject(value, wrappers[prop], metadata[prop]);
|
|
||||||
} else {
|
|
||||||
// We don't need to do any wrapping for this property,
|
|
||||||
// so just forward all access to the underlying object.
|
|
||||||
Object.defineProperty(cache, prop, {
|
|
||||||
configurable: true,
|
|
||||||
enumerable: true,
|
|
||||||
get() {
|
|
||||||
return target[prop];
|
|
||||||
},
|
|
||||||
set(value) {
|
|
||||||
target[prop] = value;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
cache[prop] = value;
|
|
||||||
return value;
|
|
||||||
},
|
|
||||||
|
|
||||||
set(target, prop, value, receiver) {
|
|
||||||
if (prop in cache) {
|
|
||||||
cache[prop] = value;
|
|
||||||
} else {
|
|
||||||
target[prop] = value;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
|
|
||||||
defineProperty(target, prop, desc) {
|
|
||||||
return Reflect.defineProperty(cache, prop, desc);
|
|
||||||
},
|
|
||||||
|
|
||||||
deleteProperty(target, prop) {
|
|
||||||
return Reflect.deleteProperty(cache, prop);
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
return new Proxy(target, handlers);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a set of wrapper functions for an event object, which handles
|
|
||||||
* wrapping of listener functions that those messages are passed.
|
|
||||||
*
|
|
||||||
* A single wrapper is created for each listener function, and stored in a
|
|
||||||
* map. Subsequent calls to `addListener`, `hasListener`, or `removeListener`
|
|
||||||
* retrieve the original wrapper, so that attempts to remove a
|
|
||||||
* previously-added listener work as expected.
|
|
||||||
*
|
|
||||||
* @param {DefaultWeakMap<function, function>} wrapperMap
|
|
||||||
* A DefaultWeakMap object which will create the appropriate wrapper
|
|
||||||
* for a given listener function when one does not exist, and retrieve
|
|
||||||
* an existing one when it does.
|
|
||||||
*
|
|
||||||
* @returns {object}
|
|
||||||
*/
|
|
||||||
const wrapEvent = wrapperMap => ({
|
|
||||||
addListener(target, listener, ...args) {
|
|
||||||
target.addListener(wrapperMap.get(listener), ...args);
|
|
||||||
},
|
|
||||||
|
|
||||||
hasListener(target, listener) {
|
|
||||||
return target.hasListener(wrapperMap.get(listener));
|
|
||||||
},
|
|
||||||
|
|
||||||
removeListener(target, listener) {
|
|
||||||
target.removeListener(wrapperMap.get(listener));
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const onMessageWrappers = new DefaultWeakMap(listener => {
|
|
||||||
if (typeof listener !== "function") {
|
|
||||||
return listener;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wraps a message listener function so that it may send responses based on
|
|
||||||
* its return value, rather than by returning a sentinel value and calling a
|
|
||||||
* callback. If the listener function returns a Promise, the response is
|
|
||||||
* sent when the promise either resolves or rejects.
|
|
||||||
*
|
|
||||||
* @param {*} message
|
|
||||||
* The message sent by the other end of the channel.
|
|
||||||
* @param {object} sender
|
|
||||||
* Details about the sender of the message.
|
|
||||||
* @param {function(*)} sendResponse
|
|
||||||
* A callback which, when called with an arbitrary argument, sends
|
|
||||||
* that value as a response.
|
|
||||||
* @returns {boolean}
|
|
||||||
* True if the wrapped listener returned a Promise, which will later
|
|
||||||
* yield a response. False otherwise.
|
|
||||||
*/
|
|
||||||
return function onMessage(message, sender, sendResponse) {
|
|
||||||
let result = listener(message, sender);
|
|
||||||
|
|
||||||
if (isThenable(result)) {
|
|
||||||
result.then(sendResponse, error => {
|
|
||||||
console.error(error);
|
|
||||||
sendResponse(error);
|
|
||||||
});
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} else if (result !== undefined) {
|
|
||||||
sendResponse(result);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
const staticWrappers = {
|
|
||||||
runtime: {
|
|
||||||
onMessage: wrapEvent(onMessageWrappers),
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
return wrapObject(chrome, staticWrappers, apiMetadata);
|
|
||||||
};
|
|
||||||
|
|
||||||
this.browser = wrapAPIs();
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
/** global: browser */
|
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
|
||||||
var nodes = document.querySelectorAll('[data-i18n]');
|
|
||||||
|
|
||||||
Array.prototype.forEach.call(nodes, function (node) {
|
|
||||||
node.childNodes[0].nodeValue = browser.i18n.getMessage(node.dataset.i18n);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,72 +1,67 @@
|
|||||||
/** global: browser */
|
/** global: browser */
|
||||||
/** global: wappalyzer */
|
/** global: wappalyzer */
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
function getOption(name, defaultValue, callback) {
|
||||||
var d = document;
|
browser.storage.local.get(name)
|
||||||
|
.then(item => {
|
||||||
|
callback(item.hasOwnProperty(name) ? item[name] : defaultValue);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function setOption(name, value) {
|
||||||
|
var option = {};
|
||||||
|
|
||||||
|
option[name] = value;
|
||||||
|
|
||||||
|
browser.storage.local.set(option);
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
var nodes = document.querySelectorAll('[data-i18n]');
|
||||||
|
|
||||||
var options = {
|
Array.prototype.forEach.call(nodes, node => {
|
||||||
init: function() {
|
node.childNodes[0].nodeValue = browser.i18n.getMessage(node.dataset.i18n);
|
||||||
options.load();
|
});
|
||||||
|
|
||||||
d.querySelector('#github').addEventListener('click', function() {
|
document.querySelector('#github').addEventListener('click', () => {
|
||||||
open(wappalyzer.config.githubURL);
|
open(wappalyzer.config.githubURL);
|
||||||
});
|
});
|
||||||
|
|
||||||
d.querySelector('#twitter').addEventListener('click', function() {
|
document.querySelector('#twitter').addEventListener('click', () => {
|
||||||
open(wappalyzer.config.twitterURL);
|
open(wappalyzer.config.twitterURL);
|
||||||
});
|
});
|
||||||
|
|
||||||
d.querySelector('#wappalyzer').addEventListener('click', function() {
|
document.querySelector('#wappalyzer').addEventListener('click', () => {
|
||||||
open(wappalyzer.config.websiteURL);
|
open(wappalyzer.config.websiteURL);
|
||||||
});
|
});
|
||||||
},
|
|
||||||
|
|
||||||
get: function(name, defaultValue, callback) {
|
getOption('upgradeMessage', true, value => {
|
||||||
browser.storage.local.get(name).then(function(item) {
|
const el = document.querySelector('#option-upgrade-message');
|
||||||
callback(item.hasOwnProperty(name) ? item[name] : defaultValue);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
set: function(name, value) {
|
|
||||||
var option = {};
|
|
||||||
|
|
||||||
option[name] = value;
|
|
||||||
|
|
||||||
browser.storage.local.set(option);
|
|
||||||
},
|
|
||||||
|
|
||||||
load: function() {
|
|
||||||
options.get('upgradeMessage', true, function(value) {
|
|
||||||
var el = d.querySelector('#option-upgrade-message');
|
|
||||||
|
|
||||||
el.checked = value;
|
el.checked = value;
|
||||||
|
|
||||||
el.addEventListener('change', function() {
|
el.addEventListener('change', () => {
|
||||||
options.set('upgradeMessage', el.checked);
|
setOption('upgradeMessage', el.checked);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
options.get('dynamicIcon', true, function(value) {
|
getOption('dynamicIcon', true, value => {
|
||||||
var el = d.querySelector('#option-dynamic-icon');
|
const el = document.querySelector('#option-dynamic-icon');
|
||||||
|
|
||||||
el.checked = value;
|
el.checked = value;
|
||||||
|
|
||||||
el.addEventListener('change', function() {
|
el.addEventListener('change', () => {
|
||||||
options.set('dynamicIcon', el.checked);
|
setOption('dynamicIcon', el.checked);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
options.get('tracking', true, function(value) {
|
getOption('tracking', true, value => {
|
||||||
var el = d.querySelector('#option-tracking');
|
const el = document.querySelector('#option-tracking');
|
||||||
|
|
||||||
el.checked = value;
|
el.checked = value;
|
||||||
|
|
||||||
el.addEventListener('change', function() {
|
el.addEventListener('change', () => {
|
||||||
options.set('tracking', el.checked);
|
setOption('tracking', el.checked);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
options.init();
|
|
||||||
});
|
});
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"webextension-polyfill": "^0.1.1"
|
||||||
|
}
|
||||||
|
}
|
@ -1,16 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="css/popup.css">
|
|
||||||
|
|
||||||
<script src="js/browser-polyfill.js"></script>
|
|
||||||
<script src="js/jsontodom.js"></script>
|
|
||||||
<script src="js/popup.js"></script>
|
|
||||||
<script src="js/i18n.js"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -0,0 +1,7 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
webextension-polyfill@^0.1.1:
|
||||||
|
version "0.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.1.1.tgz#1d172e59b9ee8706d5ce2c55eebfe0cf23972d70"
|
After Width: | Height: | Size: 783 B |
After Width: | Height: | Size: 923 B |
Before Width: | Height: | Size: 681 B |
After Width: | Height: | Size: 669 B |
After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 892 B |
After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 970 B After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 8.6 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 432 B |
After Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 674 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 814 B |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 688 B After Width: | Height: | Size: 678 B |
@ -0,0 +1,814 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
ansi-regex@^2.0.0:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
|
||||||
|
|
||||||
|
ansi-styles@^2.2.1:
|
||||||
|
version "2.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
|
||||||
|
|
||||||
|
asn1@~0.2.3:
|
||||||
|
version "0.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
|
||||||
|
|
||||||
|
assert-plus@1.0.0, assert-plus@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
|
||||||
|
|
||||||
|
assert-plus@^0.2.0:
|
||||||
|
version "0.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
|
||||||
|
|
||||||
|
async@~1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9"
|
||||||
|
|
||||||
|
asynckit@^0.4.0:
|
||||||
|
version "0.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
||||||
|
|
||||||
|
aws-sign2@~0.6.0:
|
||||||
|
version "0.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
|
||||||
|
|
||||||
|
aws4@^1.2.1:
|
||||||
|
version "1.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
|
||||||
|
|
||||||
|
bcrypt-pbkdf@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
|
||||||
|
dependencies:
|
||||||
|
tweetnacl "^0.14.3"
|
||||||
|
|
||||||
|
boom@2.x.x:
|
||||||
|
version "2.10.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
|
||||||
|
dependencies:
|
||||||
|
hoek "2.x.x"
|
||||||
|
|
||||||
|
builtin-modules@^1.0.0:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
|
||||||
|
|
||||||
|
camelcase@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
|
||||||
|
|
||||||
|
caseless@~0.11.0:
|
||||||
|
version "0.11.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
|
||||||
|
|
||||||
|
chalk@^1.1.1:
|
||||||
|
version "1.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
|
||||||
|
dependencies:
|
||||||
|
ansi-styles "^2.2.1"
|
||||||
|
escape-string-regexp "^1.0.2"
|
||||||
|
has-ansi "^2.0.0"
|
||||||
|
strip-ansi "^3.0.0"
|
||||||
|
supports-color "^2.0.0"
|
||||||
|
|
||||||
|
cliui@^3.2.0:
|
||||||
|
version "3.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
|
||||||
|
dependencies:
|
||||||
|
string-width "^1.0.1"
|
||||||
|
strip-ansi "^3.0.1"
|
||||||
|
wrap-ansi "^2.0.0"
|
||||||
|
|
||||||
|
code-point-at@^1.0.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
|
||||||
|
|
||||||
|
colors@1.0.x:
|
||||||
|
version "1.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
|
||||||
|
|
||||||
|
combined-stream@^1.0.5, combined-stream@~1.0.5:
|
||||||
|
version "1.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
|
||||||
|
dependencies:
|
||||||
|
delayed-stream "~1.0.0"
|
||||||
|
|
||||||
|
commander@^2.9.0:
|
||||||
|
version "2.11.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
|
||||||
|
|
||||||
|
concat-stream@1.5.0:
|
||||||
|
version "1.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.0.tgz#53f7d43c51c5e43f81c8fdd03321c631be68d611"
|
||||||
|
dependencies:
|
||||||
|
inherits "~2.0.1"
|
||||||
|
readable-stream "~2.0.0"
|
||||||
|
typedarray "~0.0.5"
|
||||||
|
|
||||||
|
core-util-is@~1.0.0:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||||
|
|
||||||
|
cryptiles@2.x.x:
|
||||||
|
version "2.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
|
||||||
|
dependencies:
|
||||||
|
boom "2.x.x"
|
||||||
|
|
||||||
|
cycle@1.0.x:
|
||||||
|
version "1.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2"
|
||||||
|
|
||||||
|
dashdash@^1.12.0:
|
||||||
|
version "1.14.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
|
||||||
|
dependencies:
|
||||||
|
assert-plus "^1.0.0"
|
||||||
|
|
||||||
|
debug@0.7.4:
|
||||||
|
version "0.7.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39"
|
||||||
|
|
||||||
|
decamelize@^1.1.1:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
||||||
|
|
||||||
|
delayed-stream@~1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||||
|
|
||||||
|
ecc-jsbn@~0.1.1:
|
||||||
|
version "0.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
|
||||||
|
dependencies:
|
||||||
|
jsbn "~0.1.0"
|
||||||
|
|
||||||
|
error-ex@^1.2.0:
|
||||||
|
version "1.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
|
||||||
|
dependencies:
|
||||||
|
is-arrayish "^0.2.1"
|
||||||
|
|
||||||
|
es6-promise@~4.0.3:
|
||||||
|
version "4.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.0.5.tgz#7882f30adde5b240ccfa7f7d78c548330951ae42"
|
||||||
|
|
||||||
|
escape-string-regexp@^1.0.2:
|
||||||
|
version "1.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||||
|
|
||||||
|
extend@~3.0.0:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
|
||||||
|
|
||||||
|
extract-zip@~1.5.0:
|
||||||
|
version "1.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.5.0.tgz#92ccf6d81ef70a9fa4c1747114ccef6d8688a6c4"
|
||||||
|
dependencies:
|
||||||
|
concat-stream "1.5.0"
|
||||||
|
debug "0.7.4"
|
||||||
|
mkdirp "0.5.0"
|
||||||
|
yauzl "2.4.1"
|
||||||
|
|
||||||
|
extsprintf@1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
|
||||||
|
|
||||||
|
eyes@0.1.x:
|
||||||
|
version "0.1.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0"
|
||||||
|
|
||||||
|
fd-slicer@~1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
|
||||||
|
dependencies:
|
||||||
|
pend "~1.2.0"
|
||||||
|
|
||||||
|
file-type@3.8.*:
|
||||||
|
version "3.8.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.8.0.tgz#bcadf6a8f624ebe4a10e5ad26727b6b93f16d78d"
|
||||||
|
|
||||||
|
find-up@^1.0.0:
|
||||||
|
version "1.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
|
||||||
|
dependencies:
|
||||||
|
path-exists "^2.0.0"
|
||||||
|
pinkie-promise "^2.0.0"
|
||||||
|
|
||||||
|
forever-agent@~0.6.1:
|
||||||
|
version "0.6.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
||||||
|
|
||||||
|
form-data@~2.1.1:
|
||||||
|
version "2.1.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
|
||||||
|
dependencies:
|
||||||
|
asynckit "^0.4.0"
|
||||||
|
combined-stream "^1.0.5"
|
||||||
|
mime-types "^2.1.12"
|
||||||
|
|
||||||
|
fs-extra@~1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950"
|
||||||
|
dependencies:
|
||||||
|
graceful-fs "^4.1.2"
|
||||||
|
jsonfile "^2.1.0"
|
||||||
|
klaw "^1.0.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"
|
||||||
|
|
||||||
|
getpass@^0.1.1:
|
||||||
|
version "0.1.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
|
||||||
|
dependencies:
|
||||||
|
assert-plus "^1.0.0"
|
||||||
|
|
||||||
|
graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
|
||||||
|
version "4.1.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
||||||
|
|
||||||
|
har-validator@~2.0.6:
|
||||||
|
version "2.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
|
||||||
|
dependencies:
|
||||||
|
chalk "^1.1.1"
|
||||||
|
commander "^2.9.0"
|
||||||
|
is-my-json-valid "^2.12.4"
|
||||||
|
pinkie-promise "^2.0.0"
|
||||||
|
|
||||||
|
has-ansi@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
|
||||||
|
dependencies:
|
||||||
|
ansi-regex "^2.0.0"
|
||||||
|
|
||||||
|
hasha@~2.2.0:
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1"
|
||||||
|
dependencies:
|
||||||
|
is-stream "^1.0.1"
|
||||||
|
pinkie-promise "^2.0.0"
|
||||||
|
|
||||||
|
hawk@~3.1.3:
|
||||||
|
version "3.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
|
||||||
|
dependencies:
|
||||||
|
boom "2.x.x"
|
||||||
|
cryptiles "2.x.x"
|
||||||
|
hoek "2.x.x"
|
||||||
|
sntp "1.x.x"
|
||||||
|
|
||||||
|
hoek@2.x.x:
|
||||||
|
version "2.16.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
|
||||||
|
|
||||||
|
hosted-git-info@^2.1.4:
|
||||||
|
version "2.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
|
||||||
|
|
||||||
|
html-comment-regex@^1.1.0:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
|
||||||
|
|
||||||
|
http-signature@~1.1.0:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
|
||||||
|
dependencies:
|
||||||
|
assert-plus "^0.2.0"
|
||||||
|
jsprim "^1.2.2"
|
||||||
|
sshpk "^1.7.0"
|
||||||
|
|
||||||
|
inherits@~2.0.1:
|
||||||
|
version "2.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
||||||
|
|
||||||
|
invert-kv@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
|
||||||
|
|
||||||
|
is-arrayish@^0.2.1:
|
||||||
|
version "0.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
|
||||||
|
|
||||||
|
is-builtin-module@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
|
||||||
|
dependencies:
|
||||||
|
builtin-modules "^1.0.0"
|
||||||
|
|
||||||
|
is-fullwidth-code-point@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
|
||||||
|
dependencies:
|
||||||
|
number-is-nan "^1.0.0"
|
||||||
|
|
||||||
|
is-my-json-valid@^2.12.4:
|
||||||
|
version "2.16.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693"
|
||||||
|
dependencies:
|
||||||
|
generate-function "^2.0.0"
|
||||||
|
generate-object-property "^1.1.0"
|
||||||
|
jsonpointer "^4.0.0"
|
||||||
|
xtend "^4.0.0"
|
||||||
|
|
||||||
|
is-property@^1.0.0:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
|
||||||
|
|
||||||
|
is-stream@^1.0.1:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||||
|
|
||||||
|
is-svg@2.0.*:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.0.1.tgz#f93ab3bf1d6bbca30e9753cd3485b1300eebc013"
|
||||||
|
dependencies:
|
||||||
|
html-comment-regex "^1.1.0"
|
||||||
|
|
||||||
|
is-typedarray@~1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
||||||
|
|
||||||
|
is-utf8@^0.2.0:
|
||||||
|
version "0.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
|
||||||
|
|
||||||
|
isarray@~1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||||
|
|
||||||
|
isexe@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||||
|
|
||||||
|
isstream@0.1.x, isstream@~0.1.2:
|
||||||
|
version "0.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
||||||
|
|
||||||
|
jsbn@~0.1.0:
|
||||||
|
version "0.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
|
||||||
|
|
||||||
|
json-schema@0.2.3:
|
||||||
|
version "0.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
|
||||||
|
|
||||||
|
json-stringify-safe@~5.0.1:
|
||||||
|
version "5.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
||||||
|
|
||||||
|
jsonfile@^2.1.0:
|
||||||
|
version "2.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
|
||||||
|
optionalDependencies:
|
||||||
|
graceful-fs "^4.1.6"
|
||||||
|
|
||||||
|
jsonpointer@^4.0.0:
|
||||||
|
version "4.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
|
||||||
|
|
||||||
|
jsprim@^1.2.2:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918"
|
||||||
|
dependencies:
|
||||||
|
assert-plus "1.0.0"
|
||||||
|
extsprintf "1.0.2"
|
||||||
|
json-schema "0.2.3"
|
||||||
|
verror "1.3.6"
|
||||||
|
|
||||||
|
kew@~0.7.0:
|
||||||
|
version "0.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b"
|
||||||
|
|
||||||
|
klaw@^1.0.0:
|
||||||
|
version "1.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
|
||||||
|
optionalDependencies:
|
||||||
|
graceful-fs "^4.1.9"
|
||||||
|
|
||||||
|
lcid@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
|
||||||
|
dependencies:
|
||||||
|
invert-kv "^1.0.0"
|
||||||
|
|
||||||
|
linerstream@^0.1.4:
|
||||||
|
version "0.1.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/linerstream/-/linerstream-0.1.4.tgz#5de7bf69faa2b0f9d85e8332099b70e419a845d5"
|
||||||
|
|
||||||
|
load-json-file@^1.0.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
|
||||||
|
dependencies:
|
||||||
|
graceful-fs "^4.1.2"
|
||||||
|
parse-json "^2.2.0"
|
||||||
|
pify "^2.0.0"
|
||||||
|
pinkie-promise "^2.0.0"
|
||||||
|
strip-bom "^2.0.0"
|
||||||
|
|
||||||
|
lodash.assign@^4.0.3, lodash.assign@^4.0.6:
|
||||||
|
version "4.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
|
||||||
|
|
||||||
|
mime-db@~1.27.0:
|
||||||
|
version "1.27.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1"
|
||||||
|
|
||||||
|
mime-types@^2.1.12, mime-types@~2.1.7:
|
||||||
|
version "2.1.15"
|
||||||
|
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed"
|
||||||
|
dependencies:
|
||||||
|
mime-db "~1.27.0"
|
||||||
|
|
||||||
|
minimist@0.0.8:
|
||||||
|
version "0.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
||||||
|
|
||||||
|
mkdirp@0.5.0:
|
||||||
|
version "0.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12"
|
||||||
|
dependencies:
|
||||||
|
minimist "0.0.8"
|
||||||
|
|
||||||
|
normalize-package-data@^2.3.2:
|
||||||
|
version "2.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
|
||||||
|
dependencies:
|
||||||
|
hosted-git-info "^2.1.4"
|
||||||
|
is-builtin-module "^1.0.0"
|
||||||
|
semver "2 || 3 || 4 || 5"
|
||||||
|
validate-npm-package-license "^3.0.1"
|
||||||
|
|
||||||
|
number-is-nan@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
||||||
|
|
||||||
|
oauth-sign@~0.8.1:
|
||||||
|
version "0.8.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
|
||||||
|
|
||||||
|
os-locale@^1.4.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
|
||||||
|
dependencies:
|
||||||
|
lcid "^1.0.0"
|
||||||
|
|
||||||
|
parse-json@^2.2.0:
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
|
||||||
|
dependencies:
|
||||||
|
error-ex "^1.2.0"
|
||||||
|
|
||||||
|
path-exists@^2.0.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
|
||||||
|
dependencies:
|
||||||
|
pinkie-promise "^2.0.0"
|
||||||
|
|
||||||
|
path-type@^1.0.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
|
||||||
|
dependencies:
|
||||||
|
graceful-fs "^4.1.2"
|
||||||
|
pify "^2.0.0"
|
||||||
|
pinkie-promise "^2.0.0"
|
||||||
|
|
||||||
|
pend@~1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
|
||||||
|
|
||||||
|
phantom@^2.0.x:
|
||||||
|
version "2.1.21"
|
||||||
|
resolved "https://registry.yarnpkg.com/phantom/-/phantom-2.1.21.tgz#76b7790ff62cf09fbe922ae844b9fb745ce8bb28"
|
||||||
|
dependencies:
|
||||||
|
linerstream "^0.1.4"
|
||||||
|
phantomjs-prebuilt "^2.1.4"
|
||||||
|
winston "^2.2.0"
|
||||||
|
|
||||||
|
phantomjs-prebuilt@^2.1.4:
|
||||||
|
version "2.1.14"
|
||||||
|
resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz#d53d311fcfb7d1d08ddb24014558f1188c516da0"
|
||||||
|
dependencies:
|
||||||
|
es6-promise "~4.0.3"
|
||||||
|
extract-zip "~1.5.0"
|
||||||
|
fs-extra "~1.0.0"
|
||||||
|
hasha "~2.2.0"
|
||||||
|
kew "~0.7.0"
|
||||||
|
progress "~1.1.8"
|
||||||
|
request "~2.79.0"
|
||||||
|
request-progress "~2.0.1"
|
||||||
|
which "~1.2.10"
|
||||||
|
|
||||||
|
pify@^2.0.0, pify@^2.3.0:
|
||||||
|
version "2.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
|
||||||
|
|
||||||
|
pinkie-promise@^2.0.0:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
|
||||||
|
dependencies:
|
||||||
|
pinkie "^2.0.0"
|
||||||
|
|
||||||
|
pinkie@^2.0.0:
|
||||||
|
version "2.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
|
||||||
|
|
||||||
|
process-nextick-args@~1.0.6:
|
||||||
|
version "1.0.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
|
||||||
|
|
||||||
|
progress@~1.1.8:
|
||||||
|
version "1.1.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
|
||||||
|
|
||||||
|
punycode@^1.4.1:
|
||||||
|
version "1.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
|
||||||
|
|
||||||
|
qs@~6.3.0:
|
||||||
|
version "6.3.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c"
|
||||||
|
|
||||||
|
read-chunk@2.0.*:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-2.0.0.tgz#3246e877829116cec059674c4d5f300f7a9261f3"
|
||||||
|
dependencies:
|
||||||
|
pify "^2.3.0"
|
||||||
|
|
||||||
|
read-pkg-up@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
|
||||||
|
dependencies:
|
||||||
|
find-up "^1.0.0"
|
||||||
|
read-pkg "^1.0.0"
|
||||||
|
|
||||||
|
read-pkg@^1.0.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
|
||||||
|
dependencies:
|
||||||
|
load-json-file "^1.0.0"
|
||||||
|
normalize-package-data "^2.3.2"
|
||||||
|
path-type "^1.0.0"
|
||||||
|
|
||||||
|
readable-stream@~2.0.0:
|
||||||
|
version "2.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
|
||||||
|
dependencies:
|
||||||
|
core-util-is "~1.0.0"
|
||||||
|
inherits "~2.0.1"
|
||||||
|
isarray "~1.0.0"
|
||||||
|
process-nextick-args "~1.0.6"
|
||||||
|
string_decoder "~0.10.x"
|
||||||
|
util-deprecate "~1.0.1"
|
||||||
|
|
||||||
|
request-progress@~2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08"
|
||||||
|
dependencies:
|
||||||
|
throttleit "^1.0.0"
|
||||||
|
|
||||||
|
request@~2.79.0:
|
||||||
|
version "2.79.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
|
||||||
|
dependencies:
|
||||||
|
aws-sign2 "~0.6.0"
|
||||||
|
aws4 "^1.2.1"
|
||||||
|
caseless "~0.11.0"
|
||||||
|
combined-stream "~1.0.5"
|
||||||
|
extend "~3.0.0"
|
||||||
|
forever-agent "~0.6.1"
|
||||||
|
form-data "~2.1.1"
|
||||||
|
har-validator "~2.0.6"
|
||||||
|
hawk "~3.1.3"
|
||||||
|
http-signature "~1.1.0"
|
||||||
|
is-typedarray "~1.0.0"
|
||||||
|
isstream "~0.1.2"
|
||||||
|
json-stringify-safe "~5.0.1"
|
||||||
|
mime-types "~2.1.7"
|
||||||
|
oauth-sign "~0.8.1"
|
||||||
|
qs "~6.3.0"
|
||||||
|
stringstream "~0.0.4"
|
||||||
|
tough-cookie "~2.3.0"
|
||||||
|
tunnel-agent "~0.4.1"
|
||||||
|
uuid "^3.0.0"
|
||||||
|
|
||||||
|
require-directory@^2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
||||||
|
|
||||||
|
require-main-filename@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
|
||||||
|
|
||||||
|
"semver@2 || 3 || 4 || 5":
|
||||||
|
version "5.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
|
||||||
|
|
||||||
|
set-blocking@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||||
|
|
||||||
|
sntp@1.x.x:
|
||||||
|
version "1.0.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
|
||||||
|
dependencies:
|
||||||
|
hoek "2.x.x"
|
||||||
|
|
||||||
|
spdx-correct@~1.0.0:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
|
||||||
|
dependencies:
|
||||||
|
spdx-license-ids "^1.0.2"
|
||||||
|
|
||||||
|
spdx-expression-parse@~1.0.0:
|
||||||
|
version "1.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
|
||||||
|
|
||||||
|
spdx-license-ids@^1.0.2:
|
||||||
|
version "1.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
|
||||||
|
|
||||||
|
sshpk@^1.7.0:
|
||||||
|
version "1.13.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
|
||||||
|
dependencies:
|
||||||
|
asn1 "~0.2.3"
|
||||||
|
assert-plus "^1.0.0"
|
||||||
|
dashdash "^1.12.0"
|
||||||
|
getpass "^0.1.1"
|
||||||
|
optionalDependencies:
|
||||||
|
bcrypt-pbkdf "^1.0.0"
|
||||||
|
ecc-jsbn "~0.1.1"
|
||||||
|
jsbn "~0.1.0"
|
||||||
|
tweetnacl "~0.14.0"
|
||||||
|
|
||||||
|
stack-trace@0.0.x:
|
||||||
|
version "0.0.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
|
||||||
|
|
||||||
|
string-width@^1.0.1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
|
||||||
|
dependencies:
|
||||||
|
code-point-at "^1.0.0"
|
||||||
|
is-fullwidth-code-point "^1.0.0"
|
||||||
|
strip-ansi "^3.0.0"
|
||||||
|
|
||||||
|
string_decoder@~0.10.x:
|
||||||
|
version "0.10.31"
|
||||||
|
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
|
||||||
|
|
||||||
|
stringstream@~0.0.4:
|
||||||
|
version "0.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
|
||||||
|
|
||||||
|
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
|
||||||
|
dependencies:
|
||||||
|
ansi-regex "^2.0.0"
|
||||||
|
|
||||||
|
strip-bom@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
|
||||||
|
dependencies:
|
||||||
|
is-utf8 "^0.2.0"
|
||||||
|
|
||||||
|
supports-color@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
||||||
|
|
||||||
|
svg2png-many@*:
|
||||||
|
version "0.0.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/svg2png-many/-/svg2png-many-0.0.7.tgz#e478f65fa38ca0f23a21f9519a85025e054b5552"
|
||||||
|
dependencies:
|
||||||
|
phantom "^2.0.x"
|
||||||
|
yargs "^4.6.0"
|
||||||
|
|
||||||
|
throttleit@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
|
||||||
|
|
||||||
|
tough-cookie@~2.3.0:
|
||||||
|
version "2.3.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
|
||||||
|
dependencies:
|
||||||
|
punycode "^1.4.1"
|
||||||
|
|
||||||
|
tunnel-agent@~0.4.1:
|
||||||
|
version "0.4.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
|
||||||
|
|
||||||
|
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
|
||||||
|
version "0.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
|
||||||
|
|
||||||
|
typedarray@~0.0.5:
|
||||||
|
version "0.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||||
|
|
||||||
|
util-deprecate@~1.0.1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||||
|
|
||||||
|
uuid@^3.0.0:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
|
||||||
|
|
||||||
|
validate-npm-package-license@^3.0.1:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
|
||||||
|
dependencies:
|
||||||
|
spdx-correct "~1.0.0"
|
||||||
|
spdx-expression-parse "~1.0.0"
|
||||||
|
|
||||||
|
verror@1.3.6:
|
||||||
|
version "1.3.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
|
||||||
|
dependencies:
|
||||||
|
extsprintf "1.0.2"
|
||||||
|
|
||||||
|
which-module@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
|
||||||
|
|
||||||
|
which@~1.2.10:
|
||||||
|
version "1.2.14"
|
||||||
|
resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5"
|
||||||
|
dependencies:
|
||||||
|
isexe "^2.0.0"
|
||||||
|
|
||||||
|
window-size@^0.2.0:
|
||||||
|
version "0.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075"
|
||||||
|
|
||||||
|
winston@^2.2.0:
|
||||||
|
version "2.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/winston/-/winston-2.3.1.tgz#0b48420d978c01804cf0230b648861598225a119"
|
||||||
|
dependencies:
|
||||||
|
async "~1.0.0"
|
||||||
|
colors "1.0.x"
|
||||||
|
cycle "1.0.x"
|
||||||
|
eyes "0.1.x"
|
||||||
|
isstream "0.1.x"
|
||||||
|
stack-trace "0.0.x"
|
||||||
|
|
||||||
|
wrap-ansi@^2.0.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
|
||||||
|
dependencies:
|
||||||
|
string-width "^1.0.1"
|
||||||
|
strip-ansi "^3.0.1"
|
||||||
|
|
||||||
|
xtend@^4.0.0:
|
||||||
|
version "4.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
|
||||||
|
|
||||||
|
y18n@^3.2.1:
|
||||||
|
version "3.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
|
||||||
|
|
||||||
|
yargs-parser@^2.4.1:
|
||||||
|
version "2.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4"
|
||||||
|
dependencies:
|
||||||
|
camelcase "^3.0.0"
|
||||||
|
lodash.assign "^4.0.6"
|
||||||
|
|
||||||
|
yargs@^4.6.0:
|
||||||
|
version "4.8.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0"
|
||||||
|
dependencies:
|
||||||
|
cliui "^3.2.0"
|
||||||
|
decamelize "^1.1.1"
|
||||||
|
get-caller-file "^1.0.1"
|
||||||
|
lodash.assign "^4.0.3"
|
||||||
|
os-locale "^1.4.0"
|
||||||
|
read-pkg-up "^1.0.1"
|
||||||
|
require-directory "^2.1.1"
|
||||||
|
require-main-filename "^1.0.1"
|
||||||
|
set-blocking "^2.0.0"
|
||||||
|
string-width "^1.0.1"
|
||||||
|
which-module "^1.0.0"
|
||||||
|
window-size "^0.2.0"
|
||||||
|
y18n "^3.2.1"
|
||||||
|
yargs-parser "^2.4.1"
|
||||||
|
|
||||||
|
yauzl@2.4.1:
|
||||||
|
version "2.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"
|
||||||
|
dependencies:
|
||||||
|
fd-slicer "~1.0.1"
|