diff --git a/.eslintignore b/.eslintignore
index 4277ae0f..1034aa8a 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1 +1,2 @@
src/core/lib/**
+src/core/config/MetaConfig.js
\ No newline at end of file
diff --git a/.eslintrc.json b/.eslintrc.json
index d1d31b73..58dcc8b3 100755
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -97,6 +97,9 @@
"COMPILE_TIME": false,
"COMPILE_MSG": false,
- "PKG_VERSION": false
+ "PKG_VERSION": false,
+ "ENVIRONMENT_IS_WORKER": false,
+ "ENVIRONMENT_IS_NODE": false,
+ "ENVIRONMENT_IS_WEB": false
}
}
diff --git a/.gitignore b/.gitignore
index deafd4da..79c28325 100755
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@ docs/*
!docs/*.conf.json
!docs/*.ico
.vscode
+src/core/config/MetaConfig.js
\ No newline at end of file
diff --git a/Gruntfile.js b/Gruntfile.js
index fbb650e2..93e58857 100755
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -1,8 +1,16 @@
const webpack = require("webpack");
-const ExtractTextPlugin = require("extract-text-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const NodeExternals = require("webpack-node-externals");
const Inliner = require("web-resource-inliner");
+const fs = require("fs");
+
+/**
+ * Grunt configuration for building the app in various formats.
+ *
+ * @author n1474335 [n1474335@gmail.com]
+ * @copyright Crown Copyright 2017
+ * @license Apache-2.0
+ */
module.exports = function (grunt) {
grunt.file.defaultEncoding = "utf8";
@@ -11,15 +19,15 @@ module.exports = function (grunt) {
// Tasks
grunt.registerTask("dev",
"A persistent task which creates a development build whenever source files are modified.",
- ["clean:dev", "webpack:webDev"]);
+ ["clean:dev", "concurrent:dev"]);
grunt.registerTask("node",
"Compiles CyberChef into a single NodeJS module.",
- ["clean:node", "webpack:node", "chmod:build"]);
+ ["clean:node", "webpack:metaConf", "webpack:node", "chmod:build"]);
grunt.registerTask("test",
"A task which runs all the tests in test/tests.",
- ["clean:test", "webpack:tests", "execute:test"]);
+ ["clean:test", "webpack:metaConf", "webpack:tests", "execute:test"]);
grunt.registerTask("docs",
"Compiles documentation in the /docs directory.",
@@ -27,7 +35,7 @@ module.exports = function (grunt) {
grunt.registerTask("prod",
"Creates a production-ready build. Use the --msg flag to add a compile message.",
- ["eslint", "clean:prod", "webpack:webProd", "inline", "chmod"]);
+ ["eslint", "clean:prod", "webpack:metaConf", "webpack:web", "inline", "chmod"]);
grunt.registerTask("default",
"Lints the code base",
@@ -35,8 +43,10 @@ module.exports = function (grunt) {
grunt.registerTask("inline",
"Compiles a production build of CyberChef into a single, portable web page.",
- runInliner);
+ ["webpack:webInline", "runInliner", "clean:inlineScripts"]);
+
+ grunt.registerTask("runInliner", runInliner);
grunt.registerTask("doc", "docs");
grunt.registerTask("tests", "test");
grunt.registerTask("lint", "eslint");
@@ -52,31 +62,28 @@ module.exports = function (grunt) {
grunt.loadNpmTasks("grunt-exec");
grunt.loadNpmTasks("grunt-execute");
grunt.loadNpmTasks("grunt-accessibility");
+ grunt.loadNpmTasks("grunt-concurrent");
// Project configuration
const compileTime = grunt.template.today("UTC:dd/mm/yyyy HH:MM:ss") + " UTC",
- banner = "/**\n" +
- "* CyberChef - The Cyber Swiss Army Knife\n" +
- "*\n" +
- "* @copyright Crown Copyright 2016\n" +
- "* @license Apache-2.0\n" +
- "*\n" +
- "* Copyright 2016 Crown Copyright\n" +
- "*\n" +
- '* Licensed under the Apache License, Version 2.0 (the "License");\n' +
- "* you may not use this file except in compliance with the License.\n" +
- "* You may obtain a copy of the License at\n" +
- "*\n" +
- "* http://www.apache.org/licenses/LICENSE-2.0\n" +
- "*\n" +
- "* Unless required by applicable law or agreed to in writing, software\n" +
- '* distributed under the License is distributed on an "AS IS" BASIS,\n' +
- "* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
- "* See the License for the specific language governing permissions and\n" +
- "* limitations under the License.\n" +
- "*/\n",
- pkg = grunt.file.readJSON("package.json");
+ pkg = grunt.file.readJSON("package.json"),
+ webpackConfig = require("./webpack.config.js"),
+ BUILD_CONSTANTS = {
+ COMPILE_TIME: JSON.stringify(compileTime),
+ COMPILE_MSG: JSON.stringify(grunt.option("compile-msg") || grunt.option("msg") || ""),
+ PKG_VERSION: JSON.stringify(pkg.version),
+ ENVIRONMENT_IS_WORKER: function() {
+ return typeof importScripts === "function";
+ },
+ ENVIRONMENT_IS_NODE: function() {
+ return typeof process === "object" && typeof require === "function";
+ },
+ ENVIRONMENT_IS_WEB: function() {
+ return typeof window === "object";
+ }
+ },
+ moduleEntryPoints = listEntryModules();
/**
* Compiles a production build of CyberChef into a single, portable web page.
@@ -105,20 +112,36 @@ module.exports = function (grunt) {
});
}
+ /**
+ * Generates an entry list for all the modules.
+ */
+ function listEntryModules() {
+ const path = "./src/core/config/modules/";
+ let entryModules = {};
+
+ fs.readdirSync(path).forEach(file => {
+ if (file !== "Default.js" && file !== "OpModules.js")
+ entryModules[file.split(".js")[0]] = path + file;
+ });
+
+ return entryModules;
+ }
+
grunt.initConfig({
clean: {
- dev: ["build/dev/*"],
- prod: ["build/prod/*"],
- test: ["build/test/*"],
- node: ["build/node/*"],
+ dev: ["build/dev/*", "src/core/config/MetaConfig.js"],
+ prod: ["build/prod/*", "src/core/config/MetaConfig.js"],
+ test: ["build/test/*", "src/core/config/MetaConfig.js"],
+ node: ["build/node/*", "src/core/config/MetaConfig.js"],
docs: ["docs/*", "!docs/*.conf.json", "!docs/*.ico", "!docs/*.png"],
+ inlineScripts: ["build/prod/scripts.js"],
},
eslint: {
options: {
configFile: "./.eslintrc.json"
},
configs: ["Gruntfile.js"],
- core: ["src/core/**/*.js", "!src/core/lib/**/*"],
+ core: ["src/core/**/*.js", "!src/core/lib/**/*", "!src/core/config/MetaConfig.js"],
web: ["src/web/**/*.js"],
node: ["src/node/**/*.js"],
tests: ["test/**/*.js"],
@@ -135,9 +158,16 @@ module.exports = function (grunt) {
src: [
"src/**/*.js",
"!src/core/lib/**/*",
+ "!src/core/config/MetaConfig.js"
],
}
},
+ concurrent: {
+ options: {
+ logConcurrentOutput: true
+ },
+ dev: ["webpack:metaConfDev", "webpack-dev-server:start"]
+ },
accessibility: {
options: {
accessibilityLevel: "WCAG2A",
@@ -151,114 +181,47 @@ module.exports = function (grunt) {
}
},
webpack: {
- options: {
- plugins: [
- new webpack.ProvidePlugin({
- $: "jquery",
- jQuery: "jquery",
- moment: "moment-timezone"
- }),
- new webpack.BannerPlugin({
- banner: banner,
- raw: true,
- entryOnly: true
- }),
- new webpack.DefinePlugin({
- COMPILE_TIME: JSON.stringify(compileTime),
- COMPILE_MSG: JSON.stringify(grunt.option("compile-msg") || grunt.option("msg") || ""),
- PKG_VERSION: JSON.stringify(pkg.version)
- }),
- new ExtractTextPlugin("styles.css"),
- ],
- resolve: {
- alias: {
- jquery: "jquery/src/jquery"
- }
- },
- module: {
- rules: [
- {
- test: /\.js$/,
- exclude: /node_modules/,
- loader: "babel-loader?compact=false"
- },
- {
- test: /\.css$/,
- use: ExtractTextPlugin.extract({
- use: [
- { loader: "css-loader?minimize" },
- { loader: "postcss-loader" },
- ]
- })
- },
- {
- test: /\.less$/,
- use: ExtractTextPlugin.extract({
- use: [
- { loader: "css-loader?minimize" },
- { loader: "postcss-loader" },
- { loader: "less-loader" }
- ]
- })
- },
- {
- test: /\.(ico|eot|ttf|woff|woff2)$/,
- loader: "url-loader",
- options: {
- limit: 10000
- }
- },
- { // First party images are saved as files to be cached
- test: /\.(png|jpg|gif|svg)$/,
- exclude: /node_modules/,
- loader: "file-loader",
- options: {
- name: "images/[name].[ext]"
- }
- },
- { // Third party images are inlined
- test: /\.(png|jpg|gif|svg)$/,
- exclude: /web\/static/,
- loader: "url-loader",
- options: {
- limit: 10000
- }
- },
- ]
- },
- stats: {
- children: false,
- warningsFilter: /source-map/
- },
- node: {
- fs: "empty"
- }
- },
- webDev: {
- target: "web",
- entry: "./src/web/index.js",
+ options: webpackConfig,
+ metaConf: {
+ target: "node",
+ entry: "./src/core/config/OperationConfig.js",
output: {
- filename: "scripts.js",
- path: __dirname + "/build/dev"
+ filename: "MetaConfig.js",
+ path: __dirname + "/src/core/config/",
+ library: "MetaConfig",
+ libraryTarget: "commonjs2",
+ libraryExport: "default"
},
- plugins: [
- new HtmlWebpackPlugin({
- filename: "index.html",
- template: "./src/web/html/index.html",
- compileTime: compileTime,
- version: pkg.version,
- })
- ],
+ externals: [NodeExternals()],
+ },
+ metaConfDev: {
+ target: "node",
+ entry: "./src/core/config/OperationConfig.js",
+ output: {
+ filename: "MetaConfig.js",
+ path: __dirname + "/src/core/config/",
+ library: "MetaConfig",
+ libraryTarget: "commonjs2",
+ libraryExport: "default"
+ },
+ externals: [NodeExternals()],
watch: true
},
- webProd: {
+ web: {
target: "web",
- entry: "./src/web/index.js",
+ entry: Object.assign({
+ main: "./src/web/index.js"
+ }, moduleEntryPoints),
output: {
- filename: "scripts.js",
path: __dirname + "/build/prod"
},
+ resolve: {
+ alias: {
+ "./config/modules/OpModules.js": "./config/modules/Default.js"
+ }
+ },
plugins: [
+ new webpack.DefinePlugin(BUILD_CONSTANTS),
new webpack.optimize.UglifyJsPlugin({
compress: {
"screw_ie8": true,
@@ -268,9 +231,10 @@ module.exports = function (grunt) {
},
comments: false,
}),
- new HtmlWebpackPlugin({ // Main version
+ new HtmlWebpackPlugin({
filename: "index.html",
template: "./src/web/html/index.html",
+ chunks: ["main"],
compileTime: compileTime,
version: pkg.version,
minify: {
@@ -280,7 +244,27 @@ module.exports = function (grunt) {
minifyCSS: true
}
}),
- new HtmlWebpackPlugin({ // Inline version
+ ]
+ },
+ webInline: {
+ target: "web",
+ entry: "./src/web/index.js",
+ output: {
+ filename: "scripts.js",
+ path: __dirname + "/build/prod"
+ },
+ plugins: [
+ new webpack.DefinePlugin(BUILD_CONSTANTS),
+ new webpack.optimize.UglifyJsPlugin({
+ compress: {
+ "screw_ie8": true,
+ "dead_code": true,
+ "unused": true,
+ "warnings": false
+ },
+ comments: false,
+ }),
+ new HtmlWebpackPlugin({
filename: "cyberchef.htm",
template: "./src/web/html/index.html",
compileTime: compileTime,
@@ -302,7 +286,10 @@ module.exports = function (grunt) {
output: {
filename: "index.js",
path: __dirname + "/build/test"
- }
+ },
+ plugins: [
+ new webpack.DefinePlugin(BUILD_CONSTANTS)
+ ]
},
node: {
target: "node",
@@ -313,6 +300,45 @@ module.exports = function (grunt) {
path: __dirname + "/build/node",
library: "CyberChef",
libraryTarget: "commonjs2"
+ },
+ plugins: [
+ new webpack.DefinePlugin(BUILD_CONSTANTS)
+ ]
+ }
+ },
+ "webpack-dev-server": {
+ options: {
+ webpack: webpackConfig,
+ overlay: true,
+ clientLogLevel: "error",
+ stats: {
+ children: false,
+ chunks: false,
+ modules: false,
+ warningsFilter: /source-map/,
+ }
+ },
+ start: {
+ webpack: {
+ target: "web",
+ entry: Object.assign({
+ main: "./src/web/index.js"
+ }, moduleEntryPoints),
+ resolve: {
+ alias: {
+ "./config/modules/OpModules.js": "./config/modules/Default.js"
+ }
+ },
+ plugins: [
+ new webpack.DefinePlugin(BUILD_CONSTANTS),
+ new HtmlWebpackPlugin({
+ filename: "index.html",
+ template: "./src/web/html/index.html",
+ chunks: ["main"],
+ compileTime: compileTime,
+ version: pkg.version,
+ })
+ ]
}
}
},
diff --git a/package-lock.json b/package-lock.json
index 3672783c..d3501a44 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4,6 +4,15 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+ "HTML_CodeSniffer": {
+ "version": "github:squizlabs/HTML_CodeSniffer#d209ce54876657858a8a01528ad812cd234f37f0",
+ "dev": true
+ },
+ "JSONSelect": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.4.0.tgz",
+ "integrity": "sha1-oI7cxn6z/L6Z7WMIVTRKDPKCu40="
+ },
"abab": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz",
@@ -16,18 +25,28 @@
"integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=",
"dev": true
},
+ "accepts": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz",
+ "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=",
+ "dev": true,
+ "requires": {
+ "mime-types": "2.1.17",
+ "negotiator": "0.6.1"
+ }
+ },
"access-sniff": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/access-sniff/-/access-sniff-3.0.1.tgz",
"integrity": "sha1-IJ4W63DAlaA79/yCnsrLfHeS9e4=",
"dev": true,
"requires": {
+ "HTML_CodeSniffer": "github:squizlabs/HTML_CodeSniffer#d209ce54876657858a8a01528ad812cd234f37f0",
"axios": "0.9.1",
"bluebird": "3.5.0",
"chalk": "1.1.3",
"commander": "2.11.0",
"glob": "7.1.2",
- "HTML_CodeSniffer": "github:squizlabs/HTML_CodeSniffer#d209ce54876657858a8a01528ad812cd234f37f0",
"jsdom": "9.12.0",
"mkdirp": "0.5.1",
"phantomjs-prebuilt": "2.1.15",
@@ -146,6 +165,12 @@
"integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=",
"dev": true
},
+ "ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+ "dev": true
+ },
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
@@ -204,6 +229,22 @@
"integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
"dev": true
},
+ "array-flatten": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz",
+ "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=",
+ "dev": true
+ },
+ "array-includes": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.8.2"
+ }
+ },
"array-union": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
@@ -298,7 +339,7 @@
"dev": true,
"requires": {
"browserslist": "1.7.7",
- "caniuse-db": "1.0.30000726",
+ "caniuse-db": "1.0.30000732",
"normalize-range": "0.1.2",
"num2fraction": "1.2.2",
"postcss": "5.2.17",
@@ -311,8 +352,8 @@
"integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
"dev": true,
"requires": {
- "caniuse-db": "1.0.30000726",
- "electron-to-chromium": "1.3.20"
+ "caniuse-db": "1.0.30000732",
+ "electron-to-chromium": "1.3.21"
}
}
}
@@ -374,14 +415,6 @@
"private": "0.1.7",
"slash": "1.0.0",
"source-map": "0.5.7"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
}
},
"babel-generator": {
@@ -398,14 +431,6 @@
"lodash": "4.17.4",
"source-map": "0.5.7",
"trim-right": "1.0.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
}
},
"babel-helper-builder-binary-assignment-operator-visitor": {
@@ -927,7 +952,7 @@
"home-or-tmp": "2.0.0",
"lodash": "4.17.4",
"mkdirp": "0.5.1",
- "source-map-support": "0.4.17"
+ "source-map-support": "0.4.18"
}
},
"babel-runtime": {
@@ -1006,6 +1031,12 @@
"integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==",
"dev": true
},
+ "batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+ "dev": true
+ },
"bcrypt-pbkdf": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
@@ -1017,9 +1048,9 @@
}
},
"big.js": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz",
- "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
"dev": true
},
"binary-extensions": {
@@ -1040,6 +1071,20 @@
"integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
"dev": true
},
+ "bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+ "dev": true,
+ "requires": {
+ "array-flatten": "2.1.1",
+ "deep-equal": "1.0.1",
+ "dns-equal": "1.0.0",
+ "dns-txt": "2.0.2",
+ "multicast-dns": "6.1.1",
+ "multicast-dns-service-types": "1.1.0"
+ }
+ },
"boolbase": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
@@ -1176,8 +1221,8 @@
"integrity": "sha512-aM2Gt4x9bVlCUteADBS6JP0F+2tMWKM1jQzUulVROtdFWFIcIVvY76AJbr7GDqy0eDhn+PcnpzzivGxY4qiaKQ==",
"dev": true,
"requires": {
- "caniuse-lite": "1.0.30000726",
- "electron-to-chromium": "1.3.20"
+ "caniuse-lite": "1.0.30000732",
+ "electron-to-chromium": "1.3.21"
}
},
"buffer": {
@@ -1191,6 +1236,12 @@
"isarray": "1.0.0"
}
},
+ "buffer-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+ "dev": true
+ },
"buffer-xor": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
@@ -1209,6 +1260,12 @@
"integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
"dev": true
},
+ "bytes": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.5.0.tgz",
+ "integrity": "sha1-TJQj6i0lLCcMQbK97+/5u2tiwGo=",
+ "dev": true
+ },
"caller-path": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
@@ -1230,7 +1287,7 @@
"integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
"dev": true,
"requires": {
- "no-case": "2.3.1",
+ "no-case": "2.3.2",
"upper-case": "1.1.3"
}
},
@@ -1257,7 +1314,7 @@
"dev": true,
"requires": {
"browserslist": "1.7.7",
- "caniuse-db": "1.0.30000726",
+ "caniuse-db": "1.0.30000732",
"lodash.memoize": "4.1.2",
"lodash.uniq": "4.5.0"
},
@@ -1268,22 +1325,22 @@
"integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
"dev": true,
"requires": {
- "caniuse-db": "1.0.30000726",
- "electron-to-chromium": "1.3.20"
+ "caniuse-db": "1.0.30000732",
+ "electron-to-chromium": "1.3.21"
}
}
}
},
"caniuse-db": {
- "version": "1.0.30000726",
- "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000726.tgz",
- "integrity": "sha1-m7dC+NAmpi34c7wDwGhD0iVbYNc=",
+ "version": "1.0.30000732",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000732.tgz",
+ "integrity": "sha1-3bPIheiMr3eccIDuCWU/uF0b0ks=",
"dev": true
},
"caniuse-lite": {
- "version": "1.0.30000726",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000726.tgz",
- "integrity": "sha1-lmp1P6EHoJ1BMc+LPWFnI6Bsz34=",
+ "version": "1.0.30000732",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000732.tgz",
+ "integrity": "sha1-fPnKVl9NMaSz36bia3LsIukCfaE=",
"dev": true
},
"caseless": {
@@ -1377,14 +1434,6 @@
"dev": true,
"requires": {
"source-map": "0.5.7"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
}
},
"cli-cursor": {
@@ -1526,6 +1575,30 @@
"integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
"dev": true
},
+ "compressible": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.11.tgz",
+ "integrity": "sha1-FnGKdd4oPtjmBAQWJaIGRYZ5fYo=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "compression": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.0.tgz",
+ "integrity": "sha1-AwyfGY8WQ6BX13anOOki2kNzAS0=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.4",
+ "bytes": "2.5.0",
+ "compressible": "2.0.11",
+ "debug": "2.6.8",
+ "on-headers": "1.0.1",
+ "safe-buffer": "5.1.1",
+ "vary": "1.1.1"
+ }
+ },
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -1543,6 +1616,12 @@
"typedarray": "0.0.6"
}
},
+ "connect-history-api-fallback": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz",
+ "integrity": "sha1-5R0X+PDvDbkKZP20feMFFVbp8Wk=",
+ "dev": true
+ },
"console-browserify": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
@@ -1558,6 +1637,18 @@
"integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
"dev": true
},
+ "content-disposition": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
+ "dev": true
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
"content-type-parser": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.1.tgz",
@@ -1570,6 +1661,18 @@
"integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=",
"dev": true
},
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "dev": true
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
"core-js": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
@@ -1812,14 +1915,6 @@
"requires": {
"clap": "1.2.0",
"source-map": "0.5.7"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
}
},
"cssom": {
@@ -1922,6 +2017,12 @@
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
"dev": true
},
+ "deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
+ "dev": true
+ },
"deep-extend": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
@@ -1942,6 +2043,26 @@
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
},
+ "default-gateway": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.4.0.tgz",
+ "integrity": "sha512-jtdtfL2MWLLHMASg/XlDBHnVPVX+s5IEHRxyNvy/AaWyyf9XZr+ClAAPITevY7k8IdOYZvx1BcrjSyeU6e5W8w==",
+ "dev": true,
+ "requires": {
+ "execa": "0.7.0",
+ "ip-regex": "2.1.0"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
+ "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
+ "dev": true,
+ "requires": {
+ "foreach": "2.0.5",
+ "object-keys": "1.0.11"
+ }
+ },
"defined": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
@@ -1969,6 +2090,12 @@
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
},
+ "depd": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+ "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
+ "dev": true
+ },
"des.js": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
@@ -1979,6 +2106,12 @@
"minimalistic-assert": "1.0.0"
}
},
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
"detect-indent": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
@@ -1988,6 +2121,12 @@
"repeating": "2.0.1"
}
},
+ "detect-node": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz",
+ "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=",
+ "dev": true
+ },
"diff": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz",
@@ -2004,6 +2143,31 @@
"randombytes": "2.0.5"
}
},
+ "dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+ "dev": true
+ },
+ "dns-packet": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.2.2.tgz",
+ "integrity": "sha512-kN+DjfGF7dJGUL7nWRktL9Z18t1rWP3aQlyZdY8XlpvU3Nc6GeFTQApftcjtWKxAZfiggZSGrCEoszNgvnpwDg==",
+ "dev": true,
+ "requires": {
+ "ip": "1.1.5",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "dns-txt": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+ "dev": true,
+ "requires": {
+ "buffer-indexof": "1.1.1"
+ }
+ },
"doctrine": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz",
@@ -2080,6 +2244,18 @@
"domelementtype": "1.3.0"
}
},
+ "duplexify": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz",
+ "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.4.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "stream-shift": "1.0.0"
+ }
+ },
"ebnf-parser": {
"version": "0.1.10",
"resolved": "https://registry.npmjs.org/ebnf-parser/-/ebnf-parser-0.1.10.tgz",
@@ -2104,10 +2280,16 @@
}
}
},
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
"electron-to-chromium": {
- "version": "1.3.20",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.20.tgz",
- "integrity": "sha1-Lu3VzLrn3cVX9orR/OnBcukV5OU=",
+ "version": "1.3.21",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.21.tgz",
+ "integrity": "sha1-qWfr3P6O0Ag/wkTRiUAiqOgRPqI=",
"dev": true
},
"elliptic": {
@@ -2131,6 +2313,21 @@
"integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
"dev": true
},
+ "encodeurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz",
+ "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz",
+ "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ },
"enhanced-resolve": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
@@ -2167,6 +2364,30 @@
"is-arrayish": "0.2.1"
}
},
+ "es-abstract": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.8.2.tgz",
+ "integrity": "sha512-dvhwFL3yjQxNNsOWx6exMlaDrRHCRGMQlnx5lsXDCZ/J7G/frgIIl94zhZSp/galVAYp7VzPi1OrAHta89/yGQ==",
+ "dev": true,
+ "requires": {
+ "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": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
+ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
+ "dev": true,
+ "requires": {
+ "is-callable": "1.1.3",
+ "is-date-object": "1.0.1",
+ "is-symbol": "1.0.1"
+ }
+ },
"es5-ext": {
"version": "0.10.30",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz",
@@ -2243,6 +2464,12 @@
"es6-symbol": "3.1.1"
}
},
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@@ -2265,12 +2492,6 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
"integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "optional": true
}
}
},
@@ -2290,9 +2511,9 @@
}
},
"eslint": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.6.1.tgz",
- "integrity": "sha1-3cf8f9cL+TIFsLNEm7FqHp59SVA=",
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.7.0.tgz",
+ "integrity": "sha1-01/AfEclIL496Fs9oR6ZxXav1RU=",
"dev": true,
"requires": {
"ajv": "5.2.2",
@@ -2300,10 +2521,10 @@
"chalk": "2.1.0",
"concat-stream": "1.6.0",
"cross-spawn": "5.1.0",
- "debug": "2.6.8",
+ "debug": "3.0.1",
"doctrine": "2.0.0",
"eslint-scope": "3.7.1",
- "espree": "3.5.0",
+ "espree": "3.5.1",
"esquery": "1.0.0",
"estraverse": "4.2.0",
"esutils": "2.0.2",
@@ -2315,7 +2536,7 @@
"imurmurhash": "0.1.4",
"inquirer": "3.2.3",
"is-resolvable": "1.0.0",
- "js-yaml": "3.9.1",
+ "js-yaml": "3.10.0",
"json-stable-stringify": "1.0.1",
"levn": "0.3.0",
"lodash": "4.17.4",
@@ -2324,7 +2545,7 @@
"natural-compare": "1.4.0",
"optionator": "0.8.2",
"path-is-inside": "1.0.2",
- "pluralize": "4.0.0",
+ "pluralize": "7.0.0",
"progress": "2.0.0",
"require-uncached": "1.0.3",
"semver": "5.4.1",
@@ -2360,11 +2581,14 @@
"supports-color": "4.4.0"
}
},
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
+ "debug": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.0.1.tgz",
+ "integrity": "sha512-6nVc6S36qbt/mutyt+UGMnawAMrPDZUPQjRZI3FS9tCtDRhvxJbK79unYBLPi+z5SLXQ3ftoVBFCblQtNSls8w==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
},
"glob": {
"version": "7.1.2",
@@ -2387,9 +2611,9 @@
"dev": true
},
"js-yaml": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz",
- "integrity": "sha512-CbcG379L1e+mWBnLvHWWeLs8GyV/EMw862uLI3c+GxVyDHWZcjZinwuBd3iW2pgxgIlksW/1vNJa4to+RvDOww==",
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
+ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
"dev": true,
"requires": {
"argparse": "1.0.9",
@@ -2430,14 +2654,6 @@
"requires": {
"esrecurse": "4.2.0",
"estraverse": "4.2.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
- }
}
},
"esmangle": {
@@ -2524,9 +2740,9 @@
}
},
"espree": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.0.tgz",
- "integrity": "sha1-mDWGJb3QVYYeon4oZ+pyn69GPY0=",
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.1.tgz",
+ "integrity": "sha1-DJiLirRttTEAoZVK5LqZXd0n2H4=",
"dev": true,
"requires": {
"acorn": "5.1.2",
@@ -2553,14 +2769,6 @@
"dev": true,
"requires": {
"estraverse": "4.2.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
- }
}
},
"esrecurse": {
@@ -2571,14 +2779,6 @@
"requires": {
"estraverse": "4.2.0",
"object-assign": "4.1.1"
- },
- "dependencies": {
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
- }
}
},
"esshorten": {
@@ -2608,6 +2808,12 @@
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
},
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
"event-emitter": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
@@ -2624,12 +2830,27 @@
"integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
"dev": true
},
+ "eventemitter3": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
+ "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
+ "dev": true
+ },
"events": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
"integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
"dev": true
},
+ "eventsource": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz",
+ "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
+ "dev": true,
+ "requires": {
+ "original": "1.0.0"
+ }
+ },
"evp_bytestokey": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
@@ -2692,12 +2913,54 @@
"requires": {
"loader-utils": "1.1.0",
"source-map": "0.5.7"
+ }
+ },
+ "express": {
+ "version": "4.15.4",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.15.4.tgz",
+ "integrity": "sha1-Ay4iU0ic+PzgJma+yj0R7XotrtE=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.4",
+ "array-flatten": "1.1.1",
+ "content-disposition": "0.5.2",
+ "content-type": "1.0.4",
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.8",
+ "depd": "1.1.1",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "finalhandler": "1.0.5",
+ "fresh": "0.5.0",
+ "merge-descriptors": "1.0.1",
+ "methods": "1.1.2",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "1.1.5",
+ "qs": "6.5.0",
+ "range-parser": "1.2.0",
+ "send": "0.15.4",
+ "serve-static": "1.12.4",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.3.1",
+ "type-is": "1.6.15",
+ "utils-merge": "1.0.0",
+ "vary": "1.1.1"
},
"dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz",
+ "integrity": "sha512-fjVFjW9yhqMhVGwRExCXLhJKrLlkYSaxNWdyc9rmHlrVZbk35YHH312dFd7191uQeXkI3mKLZTIbSvIeFwFemg==",
"dev": true
}
}
@@ -2714,7 +2977,7 @@
"integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=",
"dev": true,
"requires": {
- "iconv-lite": "0.4.18",
+ "iconv-lite": "0.4.19",
"jschardet": "1.5.1",
"tmp": "0.0.31"
}
@@ -2801,6 +3064,15 @@
"integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=",
"dev": true
},
+ "faye-websocket": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "dev": true,
+ "requires": {
+ "websocket-driver": "0.7.0"
+ }
+ },
"fd-slicer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
@@ -2874,6 +3146,21 @@
}
}
},
+ "finalhandler": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.5.tgz",
+ "integrity": "sha1-pwEwPSV6G8gv6lR6M+WuiVMXI98=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.8",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "statuses": "1.3.1",
+ "unpipe": "1.0.0"
+ }
+ },
"find-cache-dir": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
@@ -2961,6 +3248,12 @@
"for-in": "1.0.2"
}
},
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
+ "dev": true
+ },
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
@@ -2978,6 +3271,18 @@
"mime-types": "2.1.17"
}
},
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+ "dev": true
+ },
+ "fresh": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz",
+ "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=",
+ "dev": true
+ },
"fs-extra": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
@@ -3128,7 +3433,7 @@
"grunt-known-options": "1.1.0",
"grunt-legacy-log": "1.0.0",
"grunt-legacy-util": "1.0.0",
- "iconv-lite": "0.4.18",
+ "iconv-lite": "0.4.19",
"js-yaml": "3.5.5",
"minimatch": "3.0.4",
"nopt": "3.0.6",
@@ -3184,6 +3489,26 @@
"shelljs": "0.5.3"
}
},
+ "grunt-concurrent": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/grunt-concurrent/-/grunt-concurrent-2.3.1.tgz",
+ "integrity": "sha1-Hj2zjM71o9oRleYdYx/n4yE0TSM=",
+ "dev": true,
+ "requires": {
+ "arrify": "1.0.1",
+ "async": "1.5.2",
+ "indent-string": "2.1.0",
+ "pad-stream": "1.2.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
"grunt-contrib-clean": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.1.0.tgz",
@@ -3191,7 +3516,7 @@
"dev": true,
"requires": {
"async": "1.5.2",
- "rimraf": "2.6.1"
+ "rimraf": "2.6.2"
},
"dependencies": {
"async": {
@@ -3201,9 +3526,9 @@
"dev": true
},
"rimraf": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
- "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
"dev": true,
"requires": {
"glob": "7.0.6"
@@ -3228,7 +3553,7 @@
"dev": true,
"requires": {
"chalk": "2.1.0",
- "eslint": "4.6.1"
+ "eslint": "4.7.0"
},
"dependencies": {
"ansi-styles": {
@@ -3392,6 +3717,12 @@
"lodash": "4.17.4"
}
},
+ "handle-thing": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz",
+ "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=",
+ "dev": true
+ },
"har-schema": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
@@ -3530,9 +3861,17 @@
"integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
"dev": true
},
- "HTML_CodeSniffer": {
- "version": "github:squizlabs/HTML_CodeSniffer#d209ce54876657858a8a01528ad812cd234f37f0",
- "dev": true
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "obuf": "1.1.1",
+ "readable-stream": "2.3.3",
+ "wbuf": "1.7.2"
+ }
},
"html-comment-regex": {
"version": "1.1.1",
@@ -3549,10 +3888,16 @@
"whatwg-encoding": "1.0.1"
}
},
+ "html-entities": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
+ "dev": true
+ },
"html-minifier": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.3.tgz",
- "integrity": "sha512-iKRzQQDuTCsq0Ultbi/mfJJnR0D3AdZKTq966Gsp92xkmAPCV4Xi08qhJ0Dl3ZAWemSgJ7qZK+UsZc0gFqK6wg==",
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.5.tgz",
+ "integrity": "sha512-g+1+NBycQI0fGnggd52JM8TRUweG7+9W2wrtjGitMAqc4G7maweAHvVAAjz9veHseIH3tYKE2lk2USGSoewIrQ==",
"dev": true,
"requires": {
"camel-case": "3.0.0",
@@ -3562,7 +3907,7 @@
"ncname": "1.0.0",
"param-case": "2.1.1",
"relateurl": "0.2.7",
- "uglify-js": "3.0.28"
+ "uglify-js": "3.1.1"
}
},
"html-webpack-plugin": {
@@ -3572,7 +3917,7 @@
"dev": true,
"requires": {
"bluebird": "3.5.0",
- "html-minifier": "3.5.3",
+ "html-minifier": "3.5.5",
"loader-utils": "0.2.17",
"lodash": "4.17.4",
"pretty-error": "2.1.1",
@@ -3585,7 +3930,7 @@
"integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
"dev": true,
"requires": {
- "big.js": "3.1.3",
+ "big.js": "3.2.0",
"emojis-list": "2.1.0",
"json5": "0.5.1",
"object-assign": "4.1.1"
@@ -3640,6 +3985,69 @@
}
}
},
+ "http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+ "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "dev": true,
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.3.1"
+ }
+ },
+ "http-parser-js": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.6.tgz",
+ "integrity": "sha1-GVJz9YcExFLWcQdr4gEyndNB3FU=",
+ "dev": true
+ },
+ "http-proxy": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz",
+ "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "1.2.0",
+ "requires-port": "1.0.0"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz",
+ "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=",
+ "dev": true,
+ "requires": {
+ "http-proxy": "1.16.2",
+ "is-glob": "3.1.0",
+ "lodash": "4.17.4",
+ "micromatch": "2.3.11"
+ },
+ "dependencies": {
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
"http-signature": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
@@ -3658,9 +4066,9 @@
"dev": true
},
"iconv-lite": {
- "version": "0.4.18",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz",
- "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==",
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
"dev": true
},
"icss-replace-symbols": {
@@ -3715,12 +4123,6 @@
"supports-color": "4.4.0"
}
},
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
"supports-color": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
@@ -3759,14 +4161,6 @@
"requires": {
"loader-utils": "1.1.0",
"source-map": "0.5.7"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
}
},
"imurmurhash": {
@@ -3902,10 +4296,28 @@
}
}
},
+ "internal-ip": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-2.0.3.tgz",
+ "integrity": "sha512-XxJMiJOjXbb9LlwH6SVTsnUPymYACunXzKg3dqU+HIC+xYIkUhMyTiT/H6xxPmhlE4zHq50lKlx0CZlyN2C76Q==",
+ "dev": true,
+ "requires": {
+ "default-gateway": "2.4.0",
+ "ipaddr.js": "1.5.2"
+ },
+ "dependencies": {
+ "ipaddr.js": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz",
+ "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=",
+ "dev": true
+ }
+ }
+ },
"interpret": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz",
- "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz",
+ "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=",
"dev": true
},
"invariant": {
@@ -3923,6 +4335,24 @@
"integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
"dev": true
},
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "ip-regex": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+ "dev": true
+ },
+ "ipaddr.js": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz",
+ "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=",
+ "dev": true
+ },
"is-absolute-url": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
@@ -3959,6 +4389,18 @@
"builtin-modules": "1.1.1"
}
},
+ "is-callable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz",
+ "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=",
+ "dev": true
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
"is-directory": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
@@ -4082,6 +4524,15 @@
"integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
"dev": true
},
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "1.0.1"
+ }
+ },
"is-resolvable": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz",
@@ -4106,6 +4557,12 @@
"html-comment-regex": "1.1.1"
}
},
+ "is-symbol": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
+ "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
+ "dev": true
+ },
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
@@ -4118,6 +4575,12 @@
"integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
"dev": true
},
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -4147,12 +4610,12 @@
"resolved": "https://registry.npmjs.org/jison/-/jison-0.4.13.tgz",
"integrity": "sha1-kEFwfWIkE2f1iDRTK58ZwsNvrHg=",
"requires": {
+ "JSONSelect": "0.4.0",
"cjson": "0.2.1",
"ebnf-parser": "0.1.10",
"escodegen": "0.0.21",
"esprima": "1.0.4",
"jison-lex": "0.2.1",
- "JSONSelect": "0.4.0",
"lex-parser": "0.1.4",
"nomnom": "1.5.2"
},
@@ -4164,7 +4627,7 @@
"requires": {
"esprima": "1.0.4",
"estraverse": "0.0.4",
- "source-map": "0.2.0"
+ "source-map": "0.5.7"
}
},
"esprima": {
@@ -4194,9 +4657,9 @@
"integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c="
},
"js-base64": {
- "version": "2.1.9",
- "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz",
- "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz",
+ "integrity": "sha512-Y2/+DnfJJXT1/FCwUebUhLWb3QihxiSC42+ctHLGogmW2jPY6LCapMdFZXRvVP2z6qyKW7s6qncE/9gSqZiArw==",
"dev": true
},
"js-crc": {
@@ -4375,6 +4838,12 @@
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true
},
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+ "dev": true
+ },
"json5": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
@@ -4414,11 +4883,6 @@
}
}
},
- "JSONSelect": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.4.0.tgz",
- "integrity": "sha1-oI7cxn6z/L6Z7WMIVTRKDPKCu40="
- },
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
@@ -4497,15 +4961,6 @@
"promise": "7.3.1",
"request": "2.81.0",
"source-map": "0.5.7"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
- "optional": true
- }
}
},
"less-loader": {
@@ -4566,7 +5021,7 @@
"integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
"dev": true,
"requires": {
- "big.js": "3.1.3",
+ "big.js": "3.2.0",
"emojis-list": "2.1.0",
"json5": "0.5.1"
}
@@ -4610,6 +5065,12 @@
"integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
"dev": true
},
+ "loglevel": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.5.0.tgz",
+ "integrity": "sha512-OQ2jhWI5G2qsvO0UFNyCQWgKl/tFiwuPIXxELzACeUO2FqstN/R7mmL09+nhv6xOWVPPojQO1A90sCEoJSgBcQ==",
+ "dev": true
+ },
"longest": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
@@ -4706,6 +5167,12 @@
}
}
},
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
"mem": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
@@ -4751,6 +5218,18 @@
}
}
},
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true
+ },
"micromatch": {
"version": "2.3.11",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
@@ -4786,8 +5265,7 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.4.0.tgz",
"integrity": "sha512-n9ChLv77+QQEapYz8lV+rIZAW3HhAPW2CXnzb1GN5uMkuczshwvkW7XPsbzU0ZQN3sP47Er2KVkp2p3KyqZKSQ==",
- "dev": true,
- "optional": true
+ "dev": true
},
"mime-db": {
"version": "1.30.0",
@@ -4871,6 +5349,22 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
+ "multicast-dns": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.1.1.tgz",
+ "integrity": "sha1-bn3oalcIcqsXBYrepxYLvsqBTd4=",
+ "dev": true,
+ "requires": {
+ "dns-packet": "1.2.2",
+ "thunky": "0.1.0"
+ }
+ },
+ "multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+ "dev": true
+ },
"mute-stream": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
@@ -4892,15 +5386,27 @@
"xml-char-classes": "1.0.0"
}
},
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+ "dev": true
+ },
"no-case": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.1.tgz",
- "integrity": "sha1-euuhxzpSGEJlVUt9wDuvcg34AIE=",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
"dev": true,
"requires": {
"lower-case": "1.1.4"
}
},
+ "node-forge": {
+ "version": "0.6.33",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.33.tgz",
+ "integrity": "sha1-RjgRh59XPUUVWtap9D3ClujoXrw=",
+ "dev": true
+ },
"node-libs-browser": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz",
@@ -5057,6 +5563,12 @@
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true
},
+ "object-keys": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
+ "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
+ "dev": true
+ },
"object.omit": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
@@ -5067,6 +5579,27 @@
"is-extendable": "0.1.1"
}
},
+ "obuf": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz",
+ "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
+ "dev": true
+ },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -5085,6 +5618,15 @@
"mimic-fn": "1.1.0"
}
},
+ "opn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz",
+ "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==",
+ "dev": true,
+ "requires": {
+ "is-wsl": "1.1.0"
+ }
+ },
"optionator": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
@@ -5098,6 +5640,27 @@
"wordwrap": "1.0.0"
}
},
+ "original": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz",
+ "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=",
+ "dev": true,
+ "requires": {
+ "url-parse": "1.0.5"
+ },
+ "dependencies": {
+ "url-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz",
+ "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=",
+ "dev": true,
+ "requires": {
+ "querystringify": "0.0.4",
+ "requires-port": "1.0.0"
+ }
+ }
+ }
+ },
"os-browserify": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz",
@@ -5156,6 +5719,25 @@
"p-limit": "1.1.0"
}
},
+ "p-map": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+ "dev": true
+ },
+ "pad-stream": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pad-stream/-/pad-stream-1.2.0.tgz",
+ "integrity": "sha1-Yx3Mn3mBC3BZZeid7eps/w/B38k=",
+ "dev": true,
+ "requires": {
+ "meow": "3.7.0",
+ "pumpify": "1.3.5",
+ "repeating": "2.0.1",
+ "split2": "1.1.1",
+ "through2": "2.0.3"
+ }
+ },
"pako": {
"version": "0.2.9",
"resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
@@ -5168,7 +5750,7 @@
"integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
"dev": true,
"requires": {
- "no-case": "2.3.1"
+ "no-case": "2.3.2"
}
},
"parse-asn1": {
@@ -5211,6 +5793,12 @@
"integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=",
"dev": true
},
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+ "dev": true
+ },
"path-browserify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
@@ -5241,6 +5829,12 @@
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
"dev": true
},
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
+ },
"path-type": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
@@ -5325,11 +5919,30 @@
}
},
"pluralize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-4.0.0.tgz",
- "integrity": "sha1-WbcIwcAZCi9pLxx2GMRGsFL9F2I=",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
"dev": true
},
+ "portfinder": {
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz",
+ "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "debug": "2.6.8",
+ "mkdirp": "0.5.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
"postcss": {
"version": "5.2.17",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz",
@@ -5337,17 +5950,11 @@
"dev": true,
"requires": {
"chalk": "1.1.3",
- "js-base64": "2.1.9",
+ "js-base64": "2.3.2",
"source-map": "0.5.7",
"supports-color": "3.2.3"
},
"dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
@@ -5439,12 +6046,6 @@
"supports-color": "4.4.0"
}
},
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
"supports-color": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
@@ -5562,12 +6163,6 @@
"supports-color": "4.4.0"
}
},
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
"supports-color": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
@@ -5660,12 +6255,6 @@
"supports-color": "4.4.0"
}
},
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
"supports-color": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
@@ -5716,8 +6305,8 @@
"integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
"dev": true,
"requires": {
- "caniuse-db": "1.0.30000726",
- "electron-to-chromium": "1.3.20"
+ "caniuse-db": "1.0.30000732",
+ "electron-to-chromium": "1.3.21"
}
}
}
@@ -5819,12 +6408,6 @@
"supports-color": "4.4.0"
}
},
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
"supports-color": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
@@ -5883,12 +6466,6 @@
"supports-color": "4.4.0"
}
},
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
"supports-color": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
@@ -5947,12 +6524,6 @@
"supports-color": "4.4.0"
}
},
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
"supports-color": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
@@ -6011,12 +6582,6 @@
"supports-color": "4.4.0"
}
},
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
"supports-color": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
@@ -6201,6 +6766,16 @@
"asap": "2.0.6"
}
},
+ "proxy-addr": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz",
+ "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=",
+ "dev": true,
+ "requires": {
+ "forwarded": "0.1.2",
+ "ipaddr.js": "1.4.0"
+ }
+ },
"prr": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz",
@@ -6226,6 +6801,27 @@
"randombytes": "2.0.5"
}
},
+ "pump": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz",
+ "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.4.0",
+ "once": "1.4.0"
+ }
+ },
+ "pumpify": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz",
+ "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=",
+ "dev": true,
+ "requires": {
+ "duplexify": "3.5.1",
+ "inherits": "2.0.3",
+ "pump": "1.0.2"
+ }
+ },
"punycode": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
@@ -6266,6 +6862,12 @@
"integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
"dev": true
},
+ "querystringify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz",
+ "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=",
+ "dev": true
+ },
"randomatic": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
@@ -6316,6 +6918,12 @@
"safe-buffer": "5.1.1"
}
},
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+ "dev": true
+ },
"rc": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz",
@@ -6652,6 +7260,12 @@
"resolve-from": "1.0.1"
}
},
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
"requizzle": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz",
@@ -6797,12 +7411,83 @@
"ajv": "5.2.2"
}
},
+ "select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
+ "selfsigned": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.1.tgz",
+ "integrity": "sha1-v4y3uDJWxFUeMTR8YxF3jbme7FI=",
+ "dev": true,
+ "requires": {
+ "node-forge": "0.6.33"
+ }
+ },
"semver": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
"integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
"dev": true
},
+ "send": {
+ "version": "0.15.4",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.15.4.tgz",
+ "integrity": "sha1-mF+qPihLAnPHkzZKNcZze9k5Bbk=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.8",
+ "depd": "1.1.1",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "fresh": "0.5.0",
+ "http-errors": "1.6.2",
+ "mime": "1.3.4",
+ "ms": "2.0.0",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.3.1"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=",
+ "dev": true
+ }
+ }
+ },
+ "serve-index": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.0.tgz",
+ "integrity": "sha1-0rKA/FYNYW7oG0i/D6gqvtJIXOc=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.8",
+ "escape-html": "1.0.3",
+ "http-errors": "1.6.2",
+ "mime-types": "2.1.17",
+ "parseurl": "1.3.2"
+ }
+ },
+ "serve-static": {
+ "version": "1.12.4",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.4.tgz",
+ "integrity": "sha1-m2qpjutyU8Tu3Ewfb9vKYJkBqWE=",
+ "dev": true,
+ "requires": {
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "parseurl": "1.3.2",
+ "send": "0.15.4"
+ }
+ },
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
@@ -6821,6 +7506,12 @@
"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
"dev": true
},
+ "setprototypeof": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=",
+ "dev": true
+ },
"sha.js": {
"version": "2.4.8",
"resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz",
@@ -6883,6 +7574,49 @@
"hoek": "2.16.3"
}
},
+ "sockjs": {
+ "version": "0.3.18",
+ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz",
+ "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=",
+ "dev": true,
+ "requires": {
+ "faye-websocket": "0.10.0",
+ "uuid": "2.0.3"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+ "dev": true
+ }
+ }
+ },
+ "sockjs-client": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz",
+ "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.8",
+ "eventsource": "0.1.6",
+ "faye-websocket": "0.11.1",
+ "inherits": "2.0.3",
+ "json3": "3.3.2",
+ "url-parse": "1.1.9"
+ },
+ "dependencies": {
+ "faye-websocket": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
+ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
+ "dev": true,
+ "requires": {
+ "websocket-driver": "0.7.0"
+ }
+ }
+ }
+ },
"sort-keys": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
@@ -6904,29 +7638,17 @@
"dev": true
},
"source-map": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
- "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
- "optional": true,
- "requires": {
- "amdefine": "1.0.1"
- }
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
},
"source-map-support": {
- "version": "0.4.17",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.17.tgz",
- "integrity": "sha512-30c1Ch8FSjV0FwC253iftbbj0dU/OXoSg1LAEGZJUlGgjTNj6cu+DVqJWWIZJY5RXLWV4eFtR+4ouo0VIOYOTg==",
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
"dev": true,
"requires": {
"source-map": "0.5.7"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
}
},
"spdx-correct": {
@@ -6950,11 +7672,49 @@
"integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
"dev": true
},
+ "spdy": {
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz",
+ "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.8",
+ "handle-thing": "1.2.5",
+ "http-deceiver": "1.2.7",
+ "safe-buffer": "5.1.1",
+ "select-hose": "2.0.0",
+ "spdy-transport": "2.0.20"
+ }
+ },
+ "spdy-transport": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz",
+ "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.8",
+ "detect-node": "2.0.3",
+ "hpack.js": "2.1.6",
+ "obuf": "1.1.1",
+ "readable-stream": "2.3.3",
+ "safe-buffer": "5.1.1",
+ "wbuf": "1.7.2"
+ }
+ },
"split.js": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/split.js/-/split.js-1.3.5.tgz",
"integrity": "sha1-YuLOZtLPkcx3SqXwdJ/yUTgDn1A="
},
+ "split2": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-1.1.1.tgz",
+ "integrity": "sha1-Fi2bGIZfAqsvKtlYVSLbm1TEgfk=",
+ "dev": true,
+ "requires": {
+ "through2": "2.0.3"
+ }
+ },
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -7007,7 +7767,7 @@
"requires": {
"esprima": "1.0.4",
"estraverse": "1.3.2",
- "source-map": "0.2.0"
+ "source-map": "0.5.7"
}
},
"esprima": {
@@ -7022,6 +7782,12 @@
}
}
},
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ },
"stream-browserify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
@@ -7051,21 +7817,18 @@
"xtend": "4.0.1"
}
},
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "dev": true
+ },
"strict-uri-encode": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
"integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
"dev": true
},
- "string_decoder": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.1.1"
- }
- },
"string-width": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
@@ -7093,6 +7856,15 @@
}
}
},
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
"stringstream": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
@@ -7244,6 +8016,28 @@
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"dev": true
},
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ }
+ },
+ "thunky": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz",
+ "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=",
+ "dev": true
+ },
+ "time-stamp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz",
+ "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=",
+ "dev": true
+ },
"timers-browserify": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz",
@@ -7343,6 +8137,16 @@
"prelude-ls": "1.1.2"
}
},
+ "type-is": {
+ "version": "1.6.15",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
+ "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "2.1.17"
+ }
+ },
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
@@ -7350,21 +8154,13 @@
"dev": true
},
"uglify-js": {
- "version": "3.0.28",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.28.tgz",
- "integrity": "sha512-0h/qGay016GG2lVav3Kz174F3T2Vjlz2v6HCt+WDQpoXfco0hWwF5gHK9yh88mUYvIC+N7Z8NT8WpjSp1yoqGA==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.1.tgz",
+ "integrity": "sha512-f7DpmEgt/RYAKzQzcfahn3JYZHobDwTZCa8oixC7pweVGEIizTX2kTYdNWcdk00xsMJqUhI8RDAa9HXHXGhNxA==",
"dev": true,
"requires": {
"commander": "2.11.0",
"source-map": "0.5.7"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
}
},
"uglify-to-browserify": {
@@ -7391,12 +8187,6 @@
"integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
"dev": true
},
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
"uglify-js": {
"version": "2.8.29",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
@@ -7480,6 +8270,12 @@
"normalize-path": "2.1.1"
}
},
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
"upper-case": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
@@ -7522,6 +8318,24 @@
}
}
},
+ "url-parse": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz",
+ "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=",
+ "dev": true,
+ "requires": {
+ "querystringify": "1.0.0",
+ "requires-port": "1.0.0"
+ },
+ "dependencies": {
+ "querystringify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz",
+ "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=",
+ "dev": true
+ }
+ }
+ },
"util": {
"version": "0.10.3",
"resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
@@ -7551,12 +8365,27 @@
"integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
"dev": true
},
+ "utils-merge": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz",
+ "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=",
+ "dev": true
+ },
"uuid": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
"integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==",
"dev": true
},
+ "val-loader": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/val-loader/-/val-loader-1.0.2.tgz",
+ "integrity": "sha1-eQkZgJOzfLoKlr9PbSnelw0JnT0=",
+ "dev": true,
+ "requires": {
+ "loader-utils": "1.1.0"
+ }
+ },
"validate-npm-package-license": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
@@ -7573,6 +8402,12 @@
"integrity": "sha1-eoelgUa2laxIYHEUHAxJ1n2gXlw=",
"dev": true
},
+ "vary": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz",
+ "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=",
+ "dev": true
+ },
"vendors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz",
@@ -7623,6 +8458,15 @@
"graceful-fs": "4.1.11"
}
},
+ "wbuf": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz",
+ "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=",
+ "dev": true,
+ "requires": {
+ "minimalistic-assert": "1.0.0"
+ }
+ },
"web-resource-inliner": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-4.1.1.tgz",
@@ -7670,9 +8514,9 @@
"dev": true
},
"webpack": {
- "version": "3.5.6",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.5.6.tgz",
- "integrity": "sha512-sXnxfx6KoZVrFAGLjdhCCwDtDwkYMfwm8mJjkQv3thr5pjTlbxopVlr/kJwc9Bz317gL+gNjvz++ir9TgG1MDg==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.6.0.tgz",
+ "integrity": "sha512-OsHT3D0W0KmPPh60tC7asNnOmST6bKTiR90UyEdT9QYoaJ4OYN4Gg7WK1k3VxHK07ZoiYWPsKvlS/gAjwL/vRA==",
"dev": true,
"requires": {
"acorn": "5.1.2",
@@ -7682,7 +8526,7 @@
"async": "2.5.0",
"enhanced-resolve": "3.4.1",
"escope": "3.6.0",
- "interpret": "1.0.3",
+ "interpret": "1.0.4",
"json-loader": "0.5.7",
"json5": "0.5.1",
"loader-runner": "2.3.0",
@@ -7729,12 +8573,155 @@
"integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
"dev": true
},
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "supports-color": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
+ "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz",
+ "integrity": "sha1-007++y7dp+HTtdvgcolRMhllFwk=",
+ "dev": true,
+ "requires": {
+ "memory-fs": "0.4.1",
+ "mime": "1.4.0",
+ "path-is-absolute": "1.0.1",
+ "range-parser": "1.2.0",
+ "time-stamp": "2.0.0"
+ }
+ },
+ "webpack-dev-server": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.8.2.tgz",
+ "integrity": "sha512-wD9bs+Z1uwvf3Jc+8ZkyMI0Xi+aJJYjC2UZplOWoo/vStelK5Mv62X2uXYEYIQEjy9wJQMzC0fEFqQsg7vVEIg==",
+ "dev": true,
+ "requires": {
+ "ansi-html": "0.0.7",
+ "array-includes": "3.0.3",
+ "bonjour": "3.5.0",
+ "chokidar": "1.7.0",
+ "compression": "1.7.0",
+ "connect-history-api-fallback": "1.3.0",
+ "del": "3.0.0",
+ "express": "4.15.4",
+ "html-entities": "1.2.1",
+ "http-proxy-middleware": "0.17.4",
+ "internal-ip": "2.0.3",
+ "ip": "1.1.5",
+ "loglevel": "1.5.0",
+ "opn": "5.1.0",
+ "portfinder": "1.0.13",
+ "selfsigned": "1.10.1",
+ "serve-index": "1.9.0",
+ "sockjs": "0.3.18",
+ "sockjs-client": "1.1.4",
+ "spdy": "3.4.7",
+ "strip-ansi": "3.0.1",
+ "supports-color": "4.4.0",
+ "webpack-dev-middleware": "1.12.0",
+ "yargs": "6.6.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
"dev": true
},
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ }
+ },
+ "del": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
+ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+ "dev": true,
+ "requires": {
+ "globby": "6.1.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "p-map": "1.2.0",
+ "pify": "3.0.0",
+ "rimraf": "2.2.8"
+ }
+ },
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "glob": "7.0.6",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "dev": true,
+ "requires": {
+ "lcid": "1.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
"supports-color": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
@@ -7743,6 +8730,42 @@
"requires": {
"has-flag": "2.0.0"
}
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
+ "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "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.2",
+ "which-module": "1.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "4.2.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
+ "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0"
+ }
}
}
},
@@ -7760,16 +8783,24 @@
"requires": {
"source-list-map": "2.0.0",
"source-map": "0.5.7"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
}
},
+ "websocket-driver": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
+ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
+ "dev": true,
+ "requires": {
+ "http-parser-js": "0.4.6",
+ "websocket-extensions": "0.1.2"
+ }
+ },
+ "websocket-extensions": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.2.tgz",
+ "integrity": "sha1-Dhh4HeYpoYMIzhSBZQ9n/6JpOl0=",
+ "dev": true
+ },
"whatwg-encoding": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz",
@@ -7837,6 +8868,16 @@
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
"integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
},
+ "worker-loader": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-0.8.1.tgz",
+ "integrity": "sha1-6OmVMx6jTfW/aCloJL+38K1XjUM=",
+ "dev": true,
+ "requires": {
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.3.0"
+ }
+ },
"wrap-ansi": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
diff --git a/package.json b/package.json
index 208f0f5e..325d1241 100644
--- a/package.json
+++ b/package.json
@@ -40,6 +40,7 @@
"grunt": ">=1.0.1",
"grunt-accessibility": "~5.0.0",
"grunt-chmod": "~1.1.1",
+ "grunt-concurrent": "^2.3.1",
"grunt-contrib-clean": "~1.1.0",
"grunt-contrib-copy": "~1.0.0",
"grunt-eslint": "^20.1.0",
@@ -58,9 +59,12 @@
"postcss-loader": "^2.0.6",
"style-loader": "^0.18.2",
"url-loader": "^0.5.9",
+ "val-loader": "^1.0.2",
"web-resource-inliner": "^4.1.1",
"webpack": "^3.5.6",
- "webpack-node-externals": "^1.6.0"
+ "webpack-dev-server": "^2.5.0",
+ "webpack-node-externals": "^1.6.0",
+ "worker-loader": "^0.8.0"
},
"dependencies": {
"babel-polyfill": "^6.26.0",
@@ -95,6 +99,7 @@
"zlibjs": "^0.3.1"
},
"scripts": {
+ "start": "grunt dev",
"build": "grunt prod",
"test": "grunt test",
"docs": "grunt docs"
diff --git a/src/core/Chef.js b/src/core/Chef.js
index 9fa23d22..7c9817df 100755
--- a/src/core/Chef.js
+++ b/src/core/Chef.js
@@ -30,7 +30,6 @@ const Chef = function() {
* @returns {string} response.result - The output of the recipe
* @returns {string} response.type - The data type of the result
* @returns {number} response.progress - The position that we have got to in the recipe
- * @returns {number} response.options - The app options object (which may have been changed)
* @returns {number} response.duration - The number of ms it took to execute the recipe
* @returns {number} response.error - The error object thrown by a failed operation (false if no error)
*/
@@ -40,12 +39,7 @@ Chef.prototype.bake = async function(inputText, recipeConfig, options, progress,
containsFc = recipe.containsFlowControl(),
error = false;
- // Reset attemptHighlight flag
- if (options.hasOwnProperty("attemptHighlight")) {
- options.attemptHighlight = true;
- }
-
- if (containsFc) options.attemptHighlight = false;
+ if (containsFc && ENVIRONMENT_IS_WORKER()) self.setOption("attemptHighlight", false);
// Clean up progress
if (progress >= recipeConfig.length) {
@@ -86,7 +80,6 @@ Chef.prototype.bake = async function(inputText, recipeConfig, options, progress,
this.dish.get(Dish.STRING),
type: Dish.enumLookup(this.dish.type),
progress: progress,
- options: options,
duration: new Date().getTime() - startTime,
error: error
};
@@ -123,4 +116,38 @@ Chef.prototype.silentBake = function(recipeConfig) {
return new Date().getTime() - startTime;
};
+
+/**
+ * Calculates highlight offsets if possible.
+ *
+ * @param {Object[]} recipeConfig
+ * @param {string} direction
+ * @param {Object} pos - The position object for the highlight.
+ * @param {number} pos.start - The start offset.
+ * @param {number} pos.end - The end offset.
+ * @returns {Object}
+ */
+Chef.prototype.calculateHighlights = function(recipeConfig, direction, pos) {
+ const recipe = new Recipe(recipeConfig);
+ const highlights = recipe.generateHighlightList();
+
+ if (!highlights) return false;
+
+ for (let i = 0; i < highlights.length; i++) {
+ // Remove multiple highlights before processing again
+ pos = [pos[0]];
+
+ const func = direction === "forward" ? highlights[i].f : highlights[i].b;
+
+ if (typeof func == "function") {
+ pos = func(pos, highlights[i].args);
+ }
+ }
+
+ return {
+ pos: pos,
+ direction: direction
+ };
+};
+
export default Chef;
diff --git a/src/core/ChefWorker.js b/src/core/ChefWorker.js
new file mode 100644
index 00000000..d3f0c032
--- /dev/null
+++ b/src/core/ChefWorker.js
@@ -0,0 +1,178 @@
+/**
+ * Web Worker to handle communications between the front-end and the core.
+ *
+ * @author n1474335 [n1474335@gmail.com]
+ * @copyright Crown Copyright 2017
+ * @license Apache-2.0
+ */
+
+import "babel-polyfill";
+import Chef from "./Chef.js";
+import OperationConfig from "./config/MetaConfig.js";
+import OpModules from "./config/modules/Default.js";
+
+
+// Set up Chef instance
+self.chef = new Chef();
+
+self.OpModules = OpModules;
+self.OperationConfig = OperationConfig;
+
+// Tell the app that the worker has loaded and is ready to operate
+self.postMessage({
+ action: "workerLoaded",
+ data: {}
+});
+
+/**
+ * Respond to message from parent thread.
+ *
+ * Messages should have the following format:
+ * {
+ * action: "bake" | "silentBake",
+ * data: {
+ * input: {string},
+ * recipeConfig: {[Object]},
+ * options: {Object},
+ * progress: {number},
+ * step: {boolean}
+ * } | undefined
+ * }
+ */
+self.addEventListener("message", function(e) {
+ // Handle message
+ const r = e.data;
+ switch (r.action) {
+ case "bake":
+ bake(r.data);
+ break;
+ case "silentBake":
+ silentBake(r.data);
+ break;
+ case "docURL":
+ // Used to set the URL of the current document so that scripts can be
+ // imported into an inline worker.
+ self.docURL = r.data;
+ break;
+ case "highlight":
+ calculateHighlights(
+ r.data.recipeConfig,
+ r.data.direction,
+ r.data.pos
+ );
+ break;
+ default:
+ break;
+ }
+});
+
+
+/**
+ * Baking handler
+ *
+ * @param {Object} data
+ */
+async function bake(data) {
+ // Ensure the relevant modules are loaded
+ loadRequiredModules(data.recipeConfig);
+
+ try {
+ const response = await self.chef.bake(
+ data.input, // The user's input
+ data.recipeConfig, // The configuration of the recipe
+ data.options, // Options set by the user
+ data.progress, // The current position in the recipe
+ data.step // Whether or not to take one step or execute the whole recipe
+ );
+
+ self.postMessage({
+ action: "bakeSuccess",
+ data: response
+ });
+ } catch (err) {
+ self.postMessage({
+ action: "bakeError",
+ data: err.message
+ });
+ }
+}
+
+
+/**
+ * Silent baking handler
+ */
+function silentBake(data) {
+ const duration = self.chef.silentBake(data.recipeConfig);
+
+ self.postMessage({
+ action: "silentBakeComplete",
+ data: duration
+ });
+}
+
+
+/**
+ * Checks that all required modules are loaded and loads them if not.
+ *
+ * @param {Object} recipeConfig
+ */
+function loadRequiredModules(recipeConfig) {
+ recipeConfig.forEach(op => {
+ let module = self.OperationConfig[op.op].module;
+
+ if (!OpModules.hasOwnProperty(module)) {
+ console.log("Loading module " + module);
+ self.sendStatusMessage("Loading module " + module);
+ self.importScripts(self.docURL + "/" + module + ".js");
+ }
+ });
+}
+
+
+/**
+ * Calculates highlight offsets if possible.
+ *
+ * @param {Object[]} recipeConfig
+ * @param {string} direction
+ * @param {Object} pos - The position object for the highlight.
+ * @param {number} pos.start - The start offset.
+ * @param {number} pos.end - The end offset.
+ */
+function calculateHighlights(recipeConfig, direction, pos) {
+ pos = self.chef.calculateHighlights(recipeConfig, direction, pos);
+
+ self.postMessage({
+ action: "highlightsCalculated",
+ data: pos
+ });
+}
+
+
+/**
+ * Send status update to the app.
+ *
+ * @param {string} msg
+ */
+self.sendStatusMessage = function(msg) {
+ self.postMessage({
+ action: "statusMessage",
+ data: msg
+ });
+};
+
+
+/**
+ * Send an option value update to the app.
+ *
+ * @param {string} option
+ * @param {*} value
+ */
+self.setOption = function(option, value) {
+ self.postMessage({
+ action: "optionUpdate",
+ data: {
+ option: option,
+ value: value
+ }
+ });
+};
diff --git a/src/core/FlowControl.js b/src/core/FlowControl.js
index 8585a160..9e01ef0a 100755
--- a/src/core/FlowControl.js
+++ b/src/core/FlowControl.js
@@ -13,22 +13,6 @@ import Dish from "./Dish.js";
*/
const FlowControl = {
- /**
- * @constant
- * @default
- */
- FORK_DELIM: "\\n",
- /**
- * @constant
- * @default
- */
- MERGE_DELIM: "\\n",
- /**
- * @constant
- * @default
- */
- FORK_IGNORE_ERRORS: false,
-
/**
* Fork operation.
*
@@ -106,17 +90,6 @@ const FlowControl = {
},
- /**
- * @constant
- * @default
- */
- JUMP_NUM: 0,
- /**
- * @constant
- * @default
- */
- MAX_JUMPS: 10,
-
/**
* Jump operation.
*
diff --git a/src/core/Operation.js b/src/core/Operation.js
index d2493718..d4ee21d3 100755
--- a/src/core/Operation.js
+++ b/src/core/Operation.js
@@ -1,5 +1,7 @@
import Dish from "./Dish.js";
import Ingredient from "./Ingredient.js";
+import OperationConfig from "./config/MetaConfig.js";
+import OpModules from "./config/modules/OpModules.js";
/**
@@ -11,10 +13,10 @@ import Ingredient from "./Ingredient.js";
*
* @class
* @param {string} operationName
- * @param {Object} operationConfig
*/
-const Operation = function(operationName, operationConfig) {
+const Operation = function(operationName) {
this.name = operationName;
+ this.module = "";
this.description = "";
this.inputType = -1;
this.outputType = -1;
@@ -25,8 +27,8 @@ const Operation = function(operationName, operationConfig) {
this.disabled = false;
this.ingList = [];
- if (operationConfig) {
- this._parseConfig(operationConfig);
+ if (OperationConfig.hasOwnProperty(this.name)) {
+ this._parseConfig(OperationConfig[this.name]);
}
};
@@ -38,19 +40,28 @@ const Operation = function(operationName, operationConfig) {
* @param {Object} operationConfig
*/
Operation.prototype._parseConfig = function(operationConfig) {
+ this.module = operationConfig.module;
this.description = operationConfig.description;
this.inputType = Dish.typeEnum(operationConfig.inputType);
this.outputType = Dish.typeEnum(operationConfig.outputType);
- this.run = operationConfig.run;
this.highlight = operationConfig.highlight;
this.highlightReverse = operationConfig.highlightReverse;
this.flowControl = operationConfig.flowControl;
+ this.run = OpModules[this.module][this.name];
for (let a = 0; a < operationConfig.args.length; a++) {
const ingredientConfig = operationConfig.args[a];
const ingredient = new Ingredient(ingredientConfig);
this.addIngredient(ingredient);
}
+
+ if (this.highlight === "func") {
+ this.highlight = OpModules[this.module][`${this.name}-highlight`];
+ }
+
+ if (this.highlightReverse === "func") {
+ this.highlightReverse = OpModules[this.module][`${this.name}-highlightReverse`];
+ }
};
diff --git a/src/core/Recipe.js b/src/core/Recipe.js
index e7e5625a..d703ac1e 100755
--- a/src/core/Recipe.js
+++ b/src/core/Recipe.js
@@ -1,5 +1,4 @@
import Operation from "./Operation.js";
-import OperationConfig from "./config/OperationConfig.js";
/**
@@ -30,8 +29,7 @@ const Recipe = function(recipeConfig) {
Recipe.prototype._parseConfig = function(recipeConfig) {
for (let c = 0; c < recipeConfig.length; c++) {
const operationName = recipeConfig[c].op;
- const operationConfig = OperationConfig[operationName];
- const operation = new Operation(operationName, operationConfig);
+ const operation = new Operation(operationName);
operation.setIngValues(recipeConfig[c].args);
operation.setBreakpoint(recipeConfig[c].breakpoint);
operation.setDisabled(recipeConfig[c].disabled);
@@ -217,4 +215,37 @@ Recipe.prototype.fromString = function(recipeStr) {
this._parseConfig(recipeConfig);
};
+
+/**
+ * Generates a list of all the highlight functions assigned to operations in the recipe, if the
+ * entire recipe supports highlighting.
+ *
+ * @returns {Object[]} highlights
+ * @returns {function} highlights[].f
+ * @returns {function} highlights[].b
+ * @returns {Object[]} highlights[].args
+ */
+Recipe.prototype.generateHighlightList = function() {
+ const highlights = [];
+
+ for (let i = 0; i < this.opList.length; i++) {
+ let op = this.opList[i];
+ if (op.isDisabled()) continue;
+
+ // If any breakpoints are set, do not attempt to highlight
+ if (op.isBreakpoint()) return false;
+
+ // If any of the operations do not support highlighting, fail immediately.
+ if (op.highlight === false || op.highlight === undefined) return false;
+
+ highlights.push({
+ f: op.highlight,
+ b: op.highlightReverse,
+ args: op.getIngValues()
+ });
+ }
+
+ return highlights;
+};
+
export default Recipe;
diff --git a/src/core/Utils.js b/src/core/Utils.js
index 508c8e07..375c451d 100755
--- a/src/core/Utils.js
+++ b/src/core/Utils.js
@@ -234,7 +234,7 @@ const Utils = {
* @returns {string}
*/
printable: function(str, preserveWs) {
- if (typeof window !== "undefined" && window.app && !window.app.options.treatAsUtf8) {
+ if (ENVIRONMENT_IS_WEB() && window.app && !window.app.options.treatAsUtf8) {
str = Utils.byteArrayToChars(Utils.strToByteArray(str));
}
@@ -384,8 +384,12 @@ const Utils = {
let wordArray = CryptoJS.enc.Utf8.parse(str),
byteArray = Utils.wordArrayToByteArray(wordArray);
- if (typeof window !== "undefined" && str.length !== wordArray.sigBytes) {
- window.app.options.attemptHighlight = false;
+ if (str.length !== wordArray.sigBytes) {
+ if (ENVIRONMENT_IS_WORKER()) {
+ self.setOption("attemptHighlight", false);
+ } else if (ENVIRONMENT_IS_WEB()) {
+ window.app.options.attemptHighlight = false;
+ }
}
return byteArray;
},
@@ -448,8 +452,13 @@ const Utils = {
let wordArray = new CryptoJS.lib.WordArray.init(words, byteArray.length),
str = CryptoJS.enc.Utf8.stringify(wordArray);
- if (typeof window !== "undefined" && str.length !== wordArray.sigBytes)
- window.app.options.attemptHighlight = false;
+ if (str.length !== wordArray.sigBytes) {
+ if (ENVIRONMENT_IS_WORKER()) {
+ self.setOption("attemptHighlight", false);
+ } else if (ENVIRONMENT_IS_WEB()) {
+ window.app.options.attemptHighlight = false;
+ }
+ }
return str;
} catch (err) {
// If it fails, treat it as ANSI
diff --git a/src/core/config/OperationConfig.js b/src/core/config/OperationConfig.js
index 1bb2a6ef..d8b75ca5 100755
--- a/src/core/config/OperationConfig.js
+++ b/src/core/config/OperationConfig.js
@@ -1,4 +1,3 @@
-import FlowControl from "../FlowControl.js";
import Base from "../operations/Base.js";
import Base58 from "../operations/Base58.js";
import Base64 from "../operations/Base64.js";
@@ -12,9 +11,11 @@ import Code from "../operations/Code.js";
import Compress from "../operations/Compress.js";
import Convert from "../operations/Convert.js";
import DateTime from "../operations/DateTime.js";
+import Diff from "../operations/Diff.js";
import Endian from "../operations/Endian.js";
import Entropy from "../operations/Entropy.js";
import Extract from "../operations/Extract.js";
+import Filetime from "../operations/Filetime.js";
import FileType from "../operations/FileType.js";
import Image from "../operations/Image.js";
import Hash from "../operations/Hash.js";
@@ -46,8 +47,8 @@ import UUID from "../operations/UUID.js";
* Type definition for an OpConf.
*
* @typedef {Object} OpConf
+ * @property {string} module - The module to which the operation belongs
* @property {html} description - A description of the operation with optional HTML tags
- * @property {Function} run - The function which can be called the run the operation
* @property {string} inputType
* @property {string} outputType
* @property {Function|boolean} [highlight] - A function to calculate the highlight offset, or true
@@ -84,8 +85,8 @@ import UUID from "../operations/UUID.js";
*/
const OperationConfig = {
"Fork": {
+ module: "Default",
description: "Split the input data up based on the specified delimiter and run all subsequent operations on each branch separately.
For example, to decode multiple Base64 strings, enter them all on separate lines then add the 'Fork' and 'From Base64' operations to the recipe. Each string will be decoded separately.",
- run: FlowControl.runFork,
inputType: "string",
outputType: "string",
flowControl: true,
@@ -93,31 +94,31 @@ const OperationConfig = {
{
name: "Split delimiter",
type: "binaryShortString",
- value: FlowControl.FORK_DELIM
+ value: "\\n"
},
{
name: "Merge delimiter",
type: "binaryShortString",
- value: FlowControl.MERGE_DELIM
+ value: "\\n"
},
{
name: "Ignore errors",
type: "boolean",
- value: FlowControl.FORK_IGNORE_ERRORS
+ value: false
}
]
},
"Merge": {
+ module: "Default",
description: "Consolidate all branches back into a single trunk. The opposite of Fork.",
- run: FlowControl.runMerge,
inputType: "string",
outputType: "string",
flowControl: true,
args: []
},
"Jump": {
+ module: "Default",
description: "Jump forwards or backwards over the specified number of operations.",
- run: FlowControl.runJump,
inputType: "string",
outputType: "string",
flowControl: true,
@@ -125,18 +126,18 @@ const OperationConfig = {
{
name: "Number of operations to jump over",
type: "number",
- value: FlowControl.JUMP_NUM
+ value: 0
},
{
name: "Maximum jumps (if jumping backwards)",
type: "number",
- value: FlowControl.MAX_JUMPS
+ value: 10
}
]
},
"Conditional Jump": {
+ module: "Default",
description: "Conditionally jump forwards or backwards over the specified number of operations based on whether the data matches the specified regular expression.",
- run: FlowControl.runCondJump,
inputType: "string",
outputType: "string",
flowControl: true,
@@ -149,26 +150,26 @@ const OperationConfig = {
{
name: "Number of operations to jump over if match found",
type: "number",
- value: FlowControl.JUMP_NUM
+ value: 0
},
{
name: "Maximum jumps (if jumping backwards)",
type: "number",
- value: FlowControl.MAX_JUMPS
+ value: 10
}
]
},
"Return": {
+ module: "Default",
description: "End execution of operations at this point in the recipe.",
- run: FlowControl.runReturn,
inputType: "string",
outputType: "string",
flowControl: true,
args: []
},
"Comment": {
+ module: "Default",
description: "Provides a place to write comments within the flow of the recipe. This operation has no computational effect.",
- run: FlowControl.runComment,
inputType: "string",
outputType: "string",
flowControl: true,
@@ -181,10 +182,10 @@ const OperationConfig = {
]
},
"From Base64": {
+ module: "Default",
description: "Base64 is a notation for encoding arbitrary byte data using a restricted set of symbols that can be conveniently used by humans and processed by computers.
This operation decodes data from an ASCII Base64 string back into its raw format.
e.g. aGVsbG8=
becomes hello
",
- run: Base64.runFrom,
- highlight: Base64.highlightFrom,
- highlightReverse: Base64.highlightTo,
+ highlight: "func",
+ highlightReverse: "func",
inputType: "string",
outputType: "byteArray",
args: [
@@ -194,17 +195,17 @@ const OperationConfig = {
value: Base64.ALPHABET_OPTIONS
},
{
- name: "Remove non‑alphabet chars",
+ name: "Remove non-alphabet chars",
type: "boolean",
value: Base64.REMOVE_NON_ALPH_CHARS
}
]
},
"To Base64": {
+ module: "Default",
description: "Base64 is a notation for encoding arbitrary byte data using a restricted set of symbols that can be conveniently used by humans and processed by computers.
This operation encodes data in an ASCII Base64 string.
e.g. hello
becomes aGVsbG8=
",
- run: Base64.runTo,
- highlight: Base64.highlightTo,
- highlightReverse: Base64.highlightFrom,
+ highlight: "func",
+ highlightReverse: "func",
inputType: "byteArray",
outputType: "string",
args: [
@@ -216,8 +217,8 @@ const OperationConfig = {
]
},
"From Base58": {
+ module: "Default",
description: "Base58 (similar to Base64) is a notation for encoding arbitrary byte data. It differs from Base64 by removing easily misread characters (i.e. l, I, 0 and O) to improve human readability.
This operation decodes data from an ASCII string (with an alphabet of your choosing, presets included) back into its raw form.
e.g. StV1DL6CwTryKyV
becomes hello world
Base58 is commonly used in cryptocurrencies (Bitcoin, Ripple, etc).",
- run: Base58.runFrom,
inputType: "string",
outputType: "byteArray",
args: [
@@ -227,15 +228,15 @@ const OperationConfig = {
value: Base58.ALPHABET_OPTIONS
},
{
- name: "Remove non‑alphabet chars",
+ name: "Remove non-alphabet chars",
type: "boolean",
value: Base58.REMOVE_NON_ALPH_CHARS
}
]
},
"To Base58": {
+ module: "Default",
description: "Base58 (similar to Base64) is a notation for encoding arbitrary byte data. It differs from Base64 by removing easily misread characters (i.e. l, I, 0 and O) to improve human readability.
This operation encodes data in an ASCII string (with an alphabet of your choosing, presets included).
e.g. hello world
becomes StV1DL6CwTryKyV
Base58 is commonly used in cryptocurrencies (Bitcoin, Ripple, etc).",
- run: Base58.runTo,
inputType: "byteArray",
outputType: "string",
args: [
@@ -247,8 +248,8 @@ const OperationConfig = {
]
},
"From Base32": {
+ module: "Default",
description: "Base32 is a notation for encoding arbitrary byte data using a restricted set of symbols that can be conveniently used by humans and processed by computers. It uses a smaller set of characters than Base64, usually the uppercase alphabet and the numbers 2 to 7.",
- run: Base64.runFrom32,
inputType: "string",
outputType: "byteArray",
args: [
@@ -258,15 +259,15 @@ const OperationConfig = {
value: Base64.BASE32_ALPHABET
},
{
- name: "Remove non‑alphabet chars",
+ name: "Remove non-alphabet chars",
type: "boolean",
value: Base64.REMOVE_NON_ALPH_CHARS
}
]
},
"To Base32": {
+ module: "Default",
description: "Base32 is a notation for encoding arbitrary byte data using a restricted set of symbols that can be conveniently used by humans and processed by computers. It uses a smaller set of characters than Base64, usually the uppercase alphabet and the numbers 2 to 7.",
- run: Base64.runTo32,
inputType: "byteArray",
outputType: "string",
args: [
@@ -278,8 +279,8 @@ const OperationConfig = {
]
},
"Show Base64 offsets": {
+ module: "Default",
description: "When a string is within a block of data and the whole block is Base64'd, the string itself could be represented in Base64 in three distinct ways depending on its offset within the block.
This operation shows all possible offsets for a given string so that each possible encoding can be considered.",
- run: Base64.runOffsets,
inputType: "byteArray",
outputType: "html",
args: [
@@ -296,8 +297,8 @@ const OperationConfig = {
]
},
"XOR": {
+ module: "Default",
description: "XOR the input with the given key.
e.g. fe023da5
Options
Null preserving: If the current byte is 0x00 or the same as the key, skip it.
Scheme:
fe023da5
",
- run: BitwiseOp.runAnd,
highlight: true,
highlightReverse: true,
inputType: "byteArray",
@@ -395,8 +396,8 @@ const OperationConfig = {
]
},
"OR": {
+ module: "Default",
description: "OR the input with the given key.fe023da5
",
- run: BitwiseOp.runOr,
highlight: true,
highlightReverse: true,
inputType: "byteArray",
@@ -411,8 +412,8 @@ const OperationConfig = {
]
},
"ADD": {
+ module: "Default",
description: "ADD the input with the given key (e.g. fe023da5
), MOD 255",
- run: BitwiseOp.runAdd,
highlight: true,
highlightReverse: true,
inputType: "byteArray",
@@ -427,8 +428,8 @@ const OperationConfig = {
]
},
"SUB": {
+ module: "Default",
description: "SUB the input with the given key (e.g. fe023da5
), MOD 255",
- run: BitwiseOp.runSub,
highlight: true,
highlightReverse: true,
inputType: "byteArray",
@@ -443,10 +444,10 @@ const OperationConfig = {
]
},
"From Hex": {
+ module: "Default",
description: "Converts a hexadecimal byte string back into its raw value.ce 93 ce b5 ce b9 ce ac 20 cf 83 ce bf cf 85 0a
becomes the UTF-8 encoded string Γειά σου
",
- run: ByteRepr.runFromHex,
- highlight: ByteRepr.highlightFrom,
- highlightReverse: ByteRepr.highlightTo,
+ highlight: "func",
+ highlightReverse: "func",
inputType: "string",
outputType: "byteArray",
args: [
@@ -458,10 +459,10 @@ const OperationConfig = {
]
},
"To Hex": {
+ module: "Default",
description: "Converts the input string to hexadecimal bytes separated by the specified delimiter.Γειά σου
becomes ce 93 ce b5 ce b9 ce ac 20 cf 83 ce bf cf 85 0a
",
- run: ByteRepr.runToHex,
- highlight: ByteRepr.highlightTo,
- highlightReverse: ByteRepr.highlightFrom,
+ highlight: "func",
+ highlightReverse: "func",
inputType: "byteArray",
outputType: "string",
args: [
@@ -473,8 +474,8 @@ const OperationConfig = {
]
},
"From Octal": {
+ module: "Default",
description: "Converts an octal byte string back into its raw value.316 223 316 265 316 271 316 254 40 317 203 316 277 317 205
becomes the UTF-8 encoded string Γειά σου
",
- run: ByteRepr.runFromOct,
highlight: false,
highlightReverse: false,
inputType: "string",
@@ -488,8 +489,8 @@ const OperationConfig = {
]
},
"To Octal": {
+ module: "Default",
description: "Converts the input string to octal bytes separated by the specified delimiter.Γειά σου
becomes 316 223 316 265 316 271 316 254 40 317 203 316 277 317 205
",
- run: ByteRepr.runToOct,
highlight: false,
highlightReverse: false,
inputType: "byteArray",
@@ -503,10 +504,10 @@ const OperationConfig = {
]
},
"From Charcode": {
+ module: "Default",
description: "Converts unicode character codes back into text.0393 03b5 03b9 03ac 20 03c3 03bf 03c5
becomes Γειά σου
",
- run: ByteRepr.runFromCharcode,
- highlight: ByteRepr.highlightFrom,
- highlightReverse: ByteRepr.highlightTo,
+ highlight: "func",
+ highlightReverse: "func",
inputType: "string",
outputType: "byteArray",
args: [
@@ -524,10 +525,10 @@ const OperationConfig = {
},
"To Charcode": {
+ module: "Default",
description: "Converts text to its unicode character code equivalent.Γειά σου
becomes 0393 03b5 03b9 03ac 20 03c3 03bf 03c5
",
- run: ByteRepr.runToCharcode,
- highlight: ByteRepr.highlightTo,
- highlightReverse: ByteRepr.highlightFrom,
+ highlight: "func",
+ highlightReverse: "func",
inputType: "string",
outputType: "string",
args: [
@@ -544,10 +545,10 @@ const OperationConfig = {
]
},
"From Binary": {
+ module: "Default",
description: "Converts a binary string back into its raw form.01001000 01101001
becomes Hi
",
- run: ByteRepr.runFromBinary,
- highlight: ByteRepr.highlightFromBinary,
- highlightReverse: ByteRepr.highlightToBinary,
+ highlight: "func",
+ highlightReverse: "func",
inputType: "string",
outputType: "byteArray",
args: [
@@ -559,10 +560,10 @@ const OperationConfig = {
]
},
"To Binary": {
+ module: "Default",
description: "Displays the input data as a binary string.Hi
becomes 01001000 01101001
",
- run: ByteRepr.runToBinary,
- highlight: ByteRepr.highlightToBinary,
- highlightReverse: ByteRepr.highlightFromBinary,
+ highlight: "func",
+ highlightReverse: "func",
inputType: "byteArray",
outputType: "string",
args: [
@@ -574,8 +575,8 @@ const OperationConfig = {
]
},
"From Decimal": {
+ module: "Default",
description: "Converts the data from an ordinal integer array back into its raw form.72 101 108 108 111
becomes Hello
",
- run: ByteRepr.runFromDecimal,
inputType: "string",
outputType: "byteArray",
args: [
@@ -587,8 +588,8 @@ const OperationConfig = {
]
},
"To Decimal": {
+ module: "Default",
description: "Converts the input data to an ordinal integer array.Hello
becomes 72 101 108 108 111
",
- run: ByteRepr.runToDecimal,
inputType: "byteArray",
outputType: "string",
args: [
@@ -600,19 +601,19 @@ const OperationConfig = {
]
},
"From Hexdump": {
+ module: "Default",
description: "Attempts to convert a hexdump back into raw data. This operation supports many different hexdump variations, but probably not all. Make sure you verify that the data it gives you is correct before continuing analysis.",
- run: Hexdump.runFrom,
- highlight: Hexdump.highlightFrom,
- highlightReverse: Hexdump.highlightTo,
+ highlight: "func",
+ highlightReverse: "func",
inputType: "string",
outputType: "byteArray",
args: []
},
"To Hexdump": {
+ module: "Default",
description: "Creates a hexdump of the input data, displaying both the hexadecimal values of each byte and an ASCII representation alongside.",
- run: Hexdump.runTo,
- highlight: Hexdump.highlightTo,
- highlightReverse: Hexdump.highlightFrom,
+ highlight: "func",
+ highlightReverse: "func",
inputType: "byteArray",
outputType: "string",
args: [
@@ -634,8 +635,8 @@ const OperationConfig = {
]
},
"From Base": {
+ module: "Default",
description: "Converts a number to decimal from a given numerical base.",
- run: Base.runFrom,
inputType: "string",
outputType: "number",
args: [
@@ -647,8 +648,8 @@ const OperationConfig = {
]
},
"To Base": {
+ module: "Default",
description: "Converts a decimal number to a given numerical base.",
- run: Base.runTo,
inputType: "number",
outputType: "string",
args: [
@@ -660,15 +661,15 @@ const OperationConfig = {
]
},
"From HTML Entity": {
+ module: "Default",
description: "Converts HTML entities back to characters&
becomes &
", // tags required to stop the browser just printing &
- run: HTML.runFromEntity,
inputType: "string",
outputType: "string",
args: []
},
"To HTML Entity": {
+ module: "Default",
description: "Converts characters to HTML entities&
becomes &
", // tags required to stop the browser just printing &
- run: HTML.runToEntity,
inputType: "string",
outputType: "string",
args: [
@@ -685,8 +686,8 @@ const OperationConfig = {
]
},
"Strip HTML tags": {
+ module: "Default",
description: "Removes all HTML tags from the input.",
- run: HTML.runStripTags,
inputType: "string",
outputType: "string",
args: [
@@ -703,15 +704,15 @@ const OperationConfig = {
]
},
"URL Decode": {
+ module: "Default",
description: "Converts URI/URL percent-encoded characters back to their raw values.%3d
becomes =
",
- run: URL_.runFrom,
inputType: "string",
outputType: "string",
args: []
},
"URL Encode": {
+ module: "Default",
description: "Encodes problematic characters into percent-encoding, a format supported by URIs/URLs.=
becomes %3d
",
- run: URL_.runTo,
inputType: "string",
outputType: "string",
args: [
@@ -723,15 +724,15 @@ const OperationConfig = {
]
},
"Parse URI": {
+ module: "Default",
description: "Pretty prints complicated Uniform Resource Identifier (URI) strings for ease of reading. Particularly useful for Uniform Resource Locators (URLs) with a lot of arguments.",
- run: URL_.runParse,
inputType: "string",
outputType: "string",
args: []
},
"Unescape Unicode Characters": {
+ module: "Default",
description: "Converts unicode-escaped character notation back into raw characters.\\u
%u
U+
\\u03c3\\u03bf\\u03c5
becomes σου
",
- run: Unicode.runUnescape,
inputType: "string",
outputType: "string",
args: [
@@ -743,22 +744,22 @@ const OperationConfig = {
]
},
"From Quoted Printable": {
+ module: "Default",
description: "Converts QP-encoded text back to standard text.",
- run: QuotedPrintable.runFrom,
inputType: "string",
outputType: "byteArray",
args: []
},
"To Quoted Printable": {
+ module: "Default",
description: "Quoted-Printable, or QP encoding, is an encoding using printable ASCII characters (alphanumeric and the equals sign '=') to transmit 8-bit data over a 7-bit data path or, generally, over a medium which is not 8-bit clean. It is defined as a MIME content transfer encoding for use in e-mail.mnchen-3ya
decodes to münchen
",
- run: Punycode.runToUnicode,
inputType: "string",
outputType: "string",
args: [
@@ -770,8 +771,8 @@ const OperationConfig = {
]
},
"To Punycode": {
+ module: "Encodings",
description: "Punycode is a way to represent Unicode with the limited character subset of ASCII supported by the Domain Name System.münchen
encodes to mnchen-3ya
",
- run: Punycode.runToAscii,
inputType: "string",
outputType: "string",
args: [
@@ -783,15 +784,15 @@ const OperationConfig = {
]
},
"From Hex Content": {
+ module: "Default",
description: "Translates hexadecimal bytes in text back to raw bytes.foo|3d|bar
becomes foo=bar
.",
- run: ByteRepr.runFromHexContent,
inputType: "string",
outputType: "byteArray",
args: []
},
"To Hex Content": {
+ module: "Default",
description: "Converts special characters in a string to hexadecimal.foo=bar
becomes foo|3d|bar
.",
- run: ByteRepr.runToHexContent,
inputType: "byteArray",
outputType: "string",
args: [
@@ -808,8 +809,8 @@ const OperationConfig = {
]
},
"Change IP format": {
+ module: "JSBN",
description: "Convert an IP address from one format to another, e.g. 172.20.23.54
to ac141736
",
- run: IP.runChangeIpFormat,
inputType: "string",
outputType: "string",
args: [
@@ -826,8 +827,8 @@ const OperationConfig = {
]
},
"Parse IP range": {
+ module: "JSBN",
description: "Given a CIDR range (e.g. 10.0.0.0/24
) or a hyphenated range (e.g. 10.0.0.0 - 10.0.1.0
), this operation provides network information and enumerates all IP addresses in the range.(ax + b) % 26
, and converted back to a letter.",
- run: Cipher.runAffineEnc,
highlight: true,
highlightReverse: true,
inputType: "string",
@@ -1567,8 +1568,8 @@ const OperationConfig = {
]
},
"Affine Cipher Decode": {
+ module: "Ciphers",
description: "The Affine cipher is a type of monoalphabetic substitution cipher. To decrypt, each letter in an alphabet is mapped to its numeric equivalent, decrypted by a mathematical function, and converted back to a letter.",
- run: Cipher.runAffineDec,
highlight: true,
highlightReverse: true,
inputType: "string",
@@ -1587,8 +1588,8 @@ const OperationConfig = {
]
},
"Atbash Cipher": {
+ module: "Ciphers",
description: "Atbash is a mono-alphabetic substitution cipher originally used to encode the Hebrew alphabet. It has been modified here for use with the Latin alphabet.",
- run: Cipher.runAtbash,
highlight: true,
highlightReverse: true,
inputType: "string",
@@ -1596,8 +1597,8 @@ const OperationConfig = {
args: []
},
"Rotate right": {
+ module: "Default",
description: "Rotates each byte to the right by the number of bits specified, optionally carrying the excess bits over to the next byte. Currently only supports 8-bit values.",
- run: Rotate.runRotr,
highlight: true,
highlightReverse: true,
inputType: "byteArray",
@@ -1616,8 +1617,8 @@ const OperationConfig = {
]
},
"Rotate left": {
+ module: "Default",
description: "Rotates each byte to the left by the number of bits specified, optionally carrying the excess bits over to the next byte. Currently only supports 8-bit values.",
- run: Rotate.runRotl,
highlight: true,
highlightReverse: true,
inputType: "byteArray",
@@ -1636,8 +1637,8 @@ const OperationConfig = {
]
},
"ROT13": {
+ module: "Default",
description: "A simple caesar substitution cipher which rotates alphabet characters by the specified amount (default 13).",
- run: Rotate.runRot13,
highlight: true,
highlightReverse: true,
inputType: "byteArray",
@@ -1661,8 +1662,8 @@ const OperationConfig = {
]
},
"ROT47": {
+ module: "Default",
description: "A slightly more complex variation of a caesar cipher, which includes ASCII characters from 33 '!' to 126 '~'. Default rotation: 47.",
- run: Rotate.runRot47,
highlight: true,
highlightReverse: true,
inputType: "byteArray",
@@ -1676,22 +1677,22 @@ const OperationConfig = {
]
},
"Strip HTTP headers": {
+ module: "HTTP",
description: "Removes HTTP headers from a request or response by looking for the first instance of a double newline.",
- run: HTTP.runStripHeaders,
inputType: "string",
outputType: "string",
args: []
},
"Parse User Agent": {
+ module: "HTTP",
description: "Attempts to identify and categorise information contained in a user-agent string.",
- run: HTTP.runParseUserAgent,
inputType: "string",
outputType: "string",
args: []
},
"Format MAC addresses": {
+ module: "Default",
description: "Displays given MAC addresses in multiple different formats.0x00
) from the input.",
- run: Tidy.runRemoveNulls,
inputType: "byteArray",
outputType: "byteArray",
args: []
},
"Drop bytes": {
+ module: "Default",
description: "Cuts the specified number of bytes out of the data.",
- run: Tidy.runDropBytes,
inputType: "byteArray",
outputType: "byteArray",
args: [
@@ -1830,8 +1831,8 @@ const OperationConfig = {
]
},
"Take bytes": {
+ module: "Default",
description: "Takes a slice of the specified number of bytes from the data.",
- run: Tidy.runTakeBytes,
inputType: "byteArray",
outputType: "byteArray",
args: [
@@ -1853,8 +1854,8 @@ const OperationConfig = {
]
},
"Pad lines": {
+ module: "Default",
description: "Add the specified number of the specified character to the beginning or end of each line",
- run: Tidy.runPad,
inputType: "string",
outputType: "string",
args: [
@@ -1876,8 +1877,8 @@ const OperationConfig = {
]
},
"Reverse": {
+ module: "Default",
description: "Reverses the input string.",
- run: SeqUtils.runReverse,
inputType: "byteArray",
outputType: "byteArray",
args: [
@@ -1889,8 +1890,8 @@ const OperationConfig = {
]
},
"Sort": {
+ module: "Default",
description: "Alphabetically sorts strings separated by the specified delimiter.710.65.0.456
, this will match 10.65.0.45
so always check the original input!",
- run: Extract.runIp,
inputType: "string",
outputType: "string",
args: [
@@ -2101,8 +2102,8 @@ const OperationConfig = {
]
},
"Extract email addresses": {
+ module: "Default",
description: "Extracts all email addresses from the input.",
- run: Extract.runEmail,
inputType: "string",
outputType: "string",
args: [
@@ -2114,8 +2115,8 @@ const OperationConfig = {
]
},
"Extract MAC addresses": {
+ module: "Default",
description: "Extracts all Media Access Control (MAC) addresses from the input.",
- run: Extract.runMac,
inputType: "string",
outputType: "string",
args: [
@@ -2127,8 +2128,8 @@ const OperationConfig = {
]
},
"Extract URLs": {
+ module: "Default",
description: "Extracts Uniform Resource Locators (URLs) from the input. The protocol (http, ftp etc.) is required otherwise there will be far too many false positives.",
- run: Extract.runUrls,
inputType: "string",
outputType: "string",
args: [
@@ -2140,8 +2141,8 @@ const OperationConfig = {
]
},
"Extract domains": {
+ module: "Default",
description: "Extracts domain names.yyyy-mm-dd
dd/mm/yyyy
mm/dd/yyyy
978346800
becomes Mon 1 January 2001 11:00:00 UTC
Mon 1 January 2001 11:00:00
becomes 978346800
a-z
becomes abcdefghijklmnopqrstuvwxyz
.",
- run: SeqUtils.runExpandAlphRange,
inputType: "string",
outputType: "string",
args: [
@@ -3196,20 +3197,20 @@ const OperationConfig = {
]
},
"Diff": {
+ module: "Diff",
description: "Compares two inputs (separated by the specified delimiter) and highlights the differences between them.",
- run: StrUtils.runDiff,
inputType: "string",
outputType: "html",
args: [
{
name: "Sample delimiter",
type: "binaryString",
- value: StrUtils.DIFF_SAMPLE_DELIMITER
+ value: Diff.DIFF_SAMPLE_DELIMITER
},
{
name: "Diff by",
type: "option",
- value: StrUtils.DIFF_BY
+ value: Diff.DIFF_BY
},
{
name: "Show added",
@@ -3229,15 +3230,15 @@ const OperationConfig = {
]
},
"Parse UNIX file permissions": {
+ module: "Default",
description: "Given a UNIX/Linux file permission string in octal or textual format, this operation explains which permissions are granted to which user groups.755
) or textual (e.g. drwxr-xr-x
) format.",
- run: OS.runParseUnixPerms,
inputType: "string",
outputType: "string",
args: []
},
"Swap endianness": {
+ module: "Default",
description: "Switches the data from big-endian to little-endian or vice-versa. Data can be read in as hexadecimal or raw bytes. It will be returned in the same format as it is entered.",
- run: Endian.runSwapEndianness,
highlight: true,
highlightReverse: true,
inputType: "string",
@@ -3261,15 +3262,15 @@ const OperationConfig = {
]
},
"Microsoft Script Decoder": {
+ module: "Default",
description: "Decodes Microsoft Encoded Script files that have been encoded with Microsoft's custom encoding. These are often VBS (Visual Basic Script) files that are encoded and renamed with a '.vbe' extention or JS (JScript) files renamed with a '.jse' extention.#@~^RQAAAA==-mD~sX|:/TP{~J:+dYbxL~@!F@*@!+@*@!&@*eEI@#@&@#@&.jm.raY 214Wv:zms/obI0xEAAA==^#~@
var my_msg = "Testing <1><2><3>!";\n\nVScript.Echo(my_msg);
",
- run: MS.runDecodeScript,
inputType: "string",
outputType: "string",
args: []
},
"Syntax highlighter": {
+ module: "Code",
description: "Adds syntax highlighting to a range of source code languages. Note that this will not indent the code. Use one of the 'Beautify' operations for that.",
- run: Code.runSyntaxHighlight,
highlight: true,
highlightReverse: true,
inputType: "string",
@@ -3288,29 +3289,29 @@ const OperationConfig = {
]
},
"TCP/IP Checksum": {
+ module: "Hashing",
description: "Calculates the checksum for a TCP (Transport Control Protocol) or IP (Internet Protocol) header from an input of raw bytes.",
- run: Checksum.runTCPIP,
inputType: "byteArray",
outputType: "string",
args: []
},
"Parse colour code": {
+ module: "Default",
description: "Converts a colour code in a standard format to other standard formats and displays the colour itself.#d9edf7
rgba(217,237,247,1)
hsla(200,65%,91%,1)
cmyk(0.12, 0.04, 0.00, 0.03)
window.crypto
if available and falling back to Math.random
if not.",
- run: UUID.runGenerateV4,
inputType: "string",
outputType: "string",
args: []
},
"Substitute": {
+ module: "Ciphers",
description: "A substitution cipher allowing you to specify bytes to replace with other byte values. This can be used to create Caesar ciphers but is more powerful as any byte value can be substituted, not just letters, and the substitution values need not be in order.\\n
or \\x0a
.0123456789
can be written as 0-9
.",
- run: Cipher.runSubstitute,
inputType: "string",
outputType: "string",
args: [
@@ -3327,22 +3328,22 @@ const OperationConfig = {
]
},
"Escape string": {
+ module: "Default",
description: "Escapes special characters in a string so that they do not cause conflicts. For example, Don't stop me now
becomes Don\\'t stop me now
.",
- run: StrUtils.runEscape,
inputType: "string",
outputType: "string",
args: []
},
"Unescape string": {
+ module: "Default",
description: "Unescapes characters in a string that have been escaped. For example, Don\\'t stop me now
becomes Don't stop me now
.",
- run: StrUtils.runUnescape,
inputType: "string",
outputType: "string",
args: []
},
"To Morse Code": {
+ module: "Default",
description: "Translates alphanumeric characters into International Morse Code.SOS
becomes ... --- ...
",
- run: MorseCode.runTo,
inputType: "string",
outputType: "string",
args: [
@@ -3364,8 +3365,8 @@ const OperationConfig = {
]
},
"From Morse Code": {
+ module: "Default",
description: "Translates Morse Code into (upper case) alphanumeric characters.",
- run: MorseCode.runFrom,
inputType: "string",
outputType: "string",
args: [
@@ -3382,8 +3383,8 @@ const OperationConfig = {
]
},
"Tar": {
+ module: "Compression",
description: "Packs the input into a tarball.