Bug 1521864 - It should be possible to open the debugger in a tab. r=davidwalsh

Differential Revision: https://phabricator.services.mozilla.com/D20485

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Jason Laster 2019-02-21 14:56:47 +00:00
parent c0f6271420
commit b7ff50f82a
25 changed files with 47199 additions and 44228 deletions

4
.gitignore vendored
View file

@ -88,6 +88,10 @@ third_party/python/psutil/tmp/
devtools/client/chrome.manifest
devtools/shared/chrome.manifest
# Ignore debugger build directories
devtools/client/debugger/new/assets/build
devtools/client/debugger/new/assets/module-manifest.json
# Ignore node_modules directories in devtools
devtools/**/node_modules

View file

@ -0,0 +1,210 @@
.mozconfig
.png
config.yml
1x
7x
8x
addon
Aframe
airtable
amelzer
APIs
args
asm
Assaf
Asynchronicity
AUTOCLOBBER=1
benchmarking
blackboxed
blandy
Bomsy
ci-badge
CLRF
cmd
componentDidMount
componentWillUnmount
contextmenu
createClass
CRM
discoverable.
dispel
displayNames
errored
extns
featureFlag
findSource
findSources
fixup
GH
href
intermittents
Jiel
Klabnik
li
lifecycle
linter
mapDispatchToProps
mc
mk_add_options
MobX
mochii
monospace
nuxt
onKeyDown
param
prettyPrint
profiler
q4
rebases
rebasing
retext
runtime
scrollbars
secondaryPanel
selectLocation
selectSource
setPopupObjectProperties
sexualized
sha
ship2gecko
Sneha
stacktraces
subdirectory
svgs
Talos
talos
togglePaneCollapse
Tohm
travis
UIs
un-hide
Unselects
unstaged
urls
Varenya
waitForPaused
webpage
Yulia
Yura
Yury
whitespace
destructuring
isReactComponent
uri
prettyprint
hasJsx
workerChange
exe
prettyprint
tojs
HighlightLine
isMinified
setInScopeLines
updateScopeBindings
getSplitConsole
wasmparser
getSymbols
codefolding
vscode
Fis
maxListeners
Lukas
paddings
Moar
pushPref
Dont
mozilla
highlightLine
welcomebox
Quickopen
CommandBarButton
dbg
getFramework
Anshul
sourcemap
isPaused
QuickOpen
named-evals
Greenkeeper
headlessly
natively
outputed
threadClient
tabTarget
bpClients
originalToGeneratedId
stopSourceMapWorker
PreferencesHelper
don't
url
sendPacket
ws
Unclickable
takeScreenshot
debug-brk
ChromeUtils
cmdOrControl
cmdOrCtrl
flexbox
theme-content-color3
getFrameScopes
localizations
Vue
sourceMapURL
onmessage
un-mapped
2x
vue
shouldComponentUpdate
goto
HTM
WinCCOV
requestLongerTimeout
frontend
VisibilityHandler
unmounting
img
contenxt
typeErrors
SourceRecord
typeErrors
getIcon
cheap-eval-mode
enums
ImmutableJS
Fennec
v59
tabIndex
react-inlinesvg
findClosestScope
findClosestFunction
paren
parens
namespaces
getMappedExpression
getIn
TypeError
lastStatement
defs
BreakpointItem
destructured
getExtraProps
SpiderMonkey
mozconfig
JIT
checkboxes
objectProperties
addons
debugBtn
P1s
pausePoints
DocSearch
220ms
55ms
mdn
bytecode
eval
asyncStore
CPG
TodoMVC
pseudocode

View file

@ -0,0 +1,96 @@
const {
tools: { makeBundle, copyFile }
} = require("devtools-launchpad/index");
const sourceMapAssets = require("devtools-source-map/assets");
const path = require("path");
const minimist = require("minimist");
var fs = require("fs");
const rimraf = require("rimraf");
const projectPath = path.resolve(__dirname, "..");
const bundlePath = path.join(projectPath, "./dist");
const clientPath = path.join(projectPath, "../../");
const watch = false;
const updateAssets = false;
process.env.NODE_ENV = "production"
function moveFile(src, dest, opts) {
if (!fs.existsSync(src)) {
return;
}
copyFile(src, dest, opts);
rimraf.sync(src);
}
async function bundle() {
makeBundle({
outputPath: bundlePath,
projectPath,
watch,
updateAssets,
onFinish: () => onBundleFinish({bundlePath, projectPath })
})
.then()
.catch(err => {
console.log(
"[copy-assets] Uhoh, something went wrong. " +
"The error was written to assets-error.log"
);
fs.writeFileSync("assets-error.log", JSON.stringify(err, null, 2));
});
}
function onBundleFinish({ bundlePath, projectPath }) {
console.log("[copy-assets] delete debugger.js bundle");
const debuggerPath = path.join(bundlePath, "debugger.js");
if (fs.existsSync(debuggerPath)) {
fs.unlinkSync(debuggerPath);
}
console.log("[copy-assets] copy shared bundles to client/shared");
moveFile(
path.join(bundlePath, "source-map-worker.js"),
path.join(clientPath, "shared/source-map/worker.js"),
{ cwd: projectPath }
);
for (const filename of Object.keys(sourceMapAssets)) {
moveFile(
path.join(bundlePath, "source-map-worker-assets", filename),
path.join(clientPath, "shared/source-map/assets", filename),
{ cwd: projectPath }
);
}
moveFile(
path.join(bundlePath, "source-map-index.js"),
path.join(clientPath, "shared/source-map/index.js"),
{ cwd: projectPath }
);
moveFile(
path.join(bundlePath, "reps.js"),
path.join(clientPath, "shared/components/reps/reps.js"),
{ cwd: projectPath }
);
moveFile(
path.join(bundlePath, "reps.css"),
path.join(clientPath, "shared/components/reps/reps.css"),
{ cwd: projectPath }
);
console.log("[copy-assets] done");
}
bundle();

View file

@ -0,0 +1,29 @@
const fs = require("fs");
const path = require("path");
const toolbox = require("devtools-launchpad/index");
const feature = require("devtools-config");
const getConfig = require("./getConfig");
const express = require("express");
const serve = require("express-static");
const envConfig = getConfig();
feature.setConfig(envConfig);
let webpackConfig = require("../webpack.config");
let { app } = toolbox.startDevServer(envConfig, webpackConfig, __dirname);
app.use("/integration/examples", express.static("test/mochitest/examples"));
app.use("/images", serve(path.join(__dirname, "../images")));
// Serve devtools-reps images
app.use("/devtools-reps/images/", serve(path.join(__dirname, "../src/shared/images")));
// As well as devtools-components ones, with a different path, which we are going to
// write in the postCSS config in development mode.
app.use("/devtools-components/images/",
serve(path.join(__dirname, "../node_modules/devtools-components/src/images")));
console.log("View debugger examples here:");
console.log("https://github.com/firefox-devtools/debugger-examples");

View file

@ -0,0 +1,23 @@
const merge = require("lodash/merge");
const fs = require("fs");
const path = require("path");
function getConfig() {
const firefoxConfig = require("../configs/firefox-panel.json");
const developmentConfig = require("../configs/development.json");
let localConfig = {};
if (fs.existsSync(path.resolve(__dirname, "../configs/local.json"))) {
localConfig = require("../configs/local.json");
}
if (process.env.TARGET === "firefox-panel") {
return firefoxConfig;
}
const envConfig = developmentConfig;
return merge({}, envConfig, localConfig);
}
module.exports = getConfig;

View file

@ -0,0 +1,33 @@
{
"title": "Debugger",
"environment": "development",
"favicon": "images/favicon.png",
"theme": "light",
"dir": "ltr",
"defaultURL": "https://devtools-html.github.io/debugger-examples/",
"logging": {
"firefoxProxy": false
},
"chrome": {
"debug": true,
"host": "localhost",
"port": 9222
},
"node": {
"debug": true,
"host": "localhost",
"port": 9229
},
"firefox": {
"webSocketConnection": false,
"host": "localhost",
"webSocketPort": 8116,
"tcpPort": 6080,
"mcPath": "./firefox"
},
"development": {
"serverPort": 8000,
"examplesPort": 7999
}
}

View file

@ -0,0 +1,15 @@
{
"environment": "firefox-panel",
"logging": false,
"clientLogging": false,
"firefox": {
"mcPath": "./firefox"
},
"workers": {
"parserURL": "resource://devtools/client/debugger/new/parser-worker.js",
"prettyPrintURL":
"resource://devtools/client/debugger/new/pretty-print-worker.js",
"searchURL": "resource://devtools/client/debugger/new/search-worker.js"
},
"features": {}
}

View file

@ -0,0 +1,33 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
// The excluded files below should not be required while the Debugger runs
// in Firefox. Here, "devtools/shared/flags" is used as a dummy module.
const EXCLUDED_FILES = {
"../assets/panel/debugger.properties": "devtools/shared/flags",
"devtools-connection": "devtools/shared/flags",
"chrome-remote-interface": "devtools/shared/flags",
"devtools-launchpad": "devtools/shared/flags"
};
module.exports = Object.assign(
{
"./source-editor": "devtools/client/sourceeditor/editor",
"../editor/source-editor": "devtools/client/sourceeditor/editor",
"./test-flag": "devtools/shared/flags",
"./fronts-device": "devtools/shared/fronts/device",
immutable: "devtools/client/shared/vendor/immutable",
lodash: "devtools/client/shared/vendor/lodash",
react: "devtools/client/shared/vendor/react",
"react-dom": "devtools/client/shared/vendor/react-dom",
"react-dom-factories": "devtools/client/shared/vendor/react-dom-factories",
"react-redux": "devtools/client/shared/vendor/react-redux",
redux: "devtools/client/shared/vendor/redux",
"prop-types": "devtools/client/shared/vendor/react-prop-types",
"devtools-services": "Services",
"wasmparser/dist/WasmParser": "devtools/client/shared/vendor/WasmParser",
"wasmparser/dist/WasmDis": "devtools/client/shared/vendor/WasmDis"
},
EXCLUDED_FILES
);

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,10 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
// Using this custom definition of the enzyme module avoids generating some
// flow errors that are unrelated to uses of enzyme itself...
// It would be nice to clean this up.
declare module "enzyme" {
declare module.exports: any;
}

View file

@ -0,0 +1,7 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
declare module "prettier" {
declare module.exports: any;
}

View file

@ -0,0 +1,6 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11 13" width="11" height="13">
<path d="M5.07.5H1.5c-.54 0-1 .46-1 1v10c0 .54.46 1 1 1h3.57c.58 0 1.15-.26 1.53-.7l3.7-5.3-3.7-5.3C6.22.76 5.65.5 5.07.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 431 B

View file

@ -3,18 +3,50 @@
"version": "0.6.0",
"license": "MPL-2.0",
"repository": {
"url": "git://github.com/devtools-html/debugger.html.git",
"url": "git://github.com/firefox-devtools/debugger.html.git",
"type": "git"
},
"bugs": {
"url": "https://github.com/devtools-html/debugger.html/issues"
"url": "https://github.com/firefox-devtools/debugger.html/issues"
},
"homepage": "https://github.com/devtools-html/debugger.html#readme",
"homepage": "https://github.com/firefox-devtools/debugger.html#readme",
"engineStrict": true,
"engines": {
"node": ">=7.7.0"
"node": ">=10.15.0"
},
"scripts": {
"start": "node bin/dev-server",
"start-app": "TARGET=application node bin/dev-server",
"flow": "flow",
"eslint-check": "eslint --print-config .eslintrc.js | eslint-config-prettier-check",
"prettier": "node bin/prettier.js",
"license-check": "devtools-license-check",
"links": "ls -l node_modules/ | grep ^l || echo 'no linked packages'",
"lint": "run-p lint:css lint:js lint:jsx-a11y lint:md",
"lint:css": "stylelint \"src/components/**/*.css\"",
"lint:js": "eslint *.js \"src/**/*.js\" \"packages/*/src/**/*.js\" --fix",
"lint:jsx-a11y": "eslint *.js \"src/**/*.js\" \"packages/*/src/**/*.js\" --plugin=jsx-a11y --config=.eslintrc.jsx-a11y",
"lint:md": "remark -u devtools-linters/markdown/preset -qf *.md src configs docs",
"mochi": "mochii --mc ./firefox --interactive --default-test-path devtools/client/debugger/new",
"mochid": "yarn mochi -- --jsdebugger --",
"mochir": "yarn mochi -- --repeat 10 --",
"mochih": "yarn mochi -- --headless --",
"mochici": "mochii --mc ./firefox --ci --default-test-path devtools/client/debugger/new --headless --",
"test": "jest",
"test:watch": "jest --watch",
"test:coverage": "yarn test --coverage",
"test:all": "yarn test; yarn lint; yarn flow",
"firefox": "start-firefox --start --location https://firefox-devtools.github.io/debugger-examples/",
"chrome": "start-chrome --location https://firefox-devtools.github.io/debugger-examples/",
"watch": "node bin/copy --watch --symlink",
"copy": "node bin/copy --assets",
"flow-coverage": "flow-coverage-report --threshold 50 -i 'src/actions/*.js' -i 'src/reducers/*.js' -i 'src/utils/*.js' -i 'src/components/*.js' -i 'src/components/**/*.js' -t html -t text",
"flow-utils": "flow-coverage-report -i 'src/utils/*.js' -i 'src/utils/**/*.js' -t text",
"flow-redux": "flow-coverage-report -i 'src/reducers/*.js' -i 'src/actions/*.js' -t text",
"flow-react": "flow-coverage-report -i 'src/components/**/*.js' -t text",
"nom": "node bin/nom",
"diff": "node bin/diff",
"install": "prettier --write package.json"
},
"dependencies": {
"@babel/core": "^7.0.0-beta.55",
@ -24,7 +56,7 @@
"babel-plugin-transform-imports": "^1.5.0",
"codemirror": "^5.28.0",
"devtools-environment": "^0.0.6",
"devtools-launchpad": "^0.0.141",
"devtools-launchpad": "^0.0.149",
"devtools-linters": "^0.0.4",
"devtools-reps": "0.23.0",
"devtools-source-map": "0.16.0",
@ -87,24 +119,24 @@
"enzyme-adapter-react-16": "^1.1.1",
"enzyme-to-json": "3.3.4",
"eslint": "^5.0.0",
"eslint-config-prettier": "^3.0.0",
"eslint-config-prettier": "^4.0.0",
"eslint-plugin-babel": "^5.0.0",
"eslint-plugin-file-header": "0.0.1",
"eslint-plugin-flowtype": "^3.0.0",
"eslint-plugin-import": "^2.8.0",
"eslint-plugin-jest": "^21.15.1",
"eslint-plugin-jsx-a11y": "^6.1.2",
"eslint-plugin-mozilla": "1.0.4",
"eslint-plugin-mozilla": "1.1.1",
"eslint-plugin-prettier": "^3.0.0",
"eslint-plugin-react": "^7.2.1",
"expect.js": "^0.3.1",
"flow-bin": "^0.89.0",
"flow-bin": "0.93.0",
"glob": "^7.0.3",
"husky": "^1.0.1",
"jest": "^23.0.0",
"jest-environment-jsdom": "^23.0.0",
"jest-in-case": "^1.0.2",
"jest-junit": "^5.0.0",
"jest-junit": "^6.0.0",
"jest-localstorage-mock": "^2.2.0",
"jest-serializer-babel-ast": "^0.0.5",
"lint-staged": "^8.0.0",
@ -126,7 +158,7 @@
"remark-lint-table-cell-padding": "^1.0.0",
"remark-lint-table-pipes": "^1.0.0",
"remark-preset-lint-recommended": "^3.0.0",
"remark-validate-links": "^7.0.0",
"remark-validate-links": "^8.0.0",
"rimraf": "^2.6.1",
"single-line-log": "^1.1.2",
"stylelint": "^9.0.0",

View file

@ -0,0 +1,47 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
var mapUrl = require("postcss-url-mapper");
const debug = require("debug")("launchpad");
function mapUrlProduction(url) {
const newUrl = url.replace(
/\/images\//,
"resource://devtools/client/debugger/new/images/"
);
debug("map url", { url, newUrl });
return newUrl;
}
function mapUrlDevelopment(url) {
const newUrl = url
.replace(/(chrome:\/\/|resource:\/\/)/, "/mc/")
.replace(/devtools\/skin/, "devtools/client/themes")
.replace(/devtools\/content/, "devtools/client");
debug("map url", { url, newUrl });
return newUrl;
}
module.exports = ({ file, options, env }) => {
if (env === "production") {
return {
plugins: [mapUrl(mapUrlProduction)]
};
}
return {
plugins: [
require("postcss-bidirection"),
require("autoprefixer")({
browsers: ["last 2 Firefox versions", "last 2 Chrome versions"],
flexbox: false,
grid: false
}),
require("postcss-class-namespace")(),
mapUrl(mapUrlDevelopment)
]
};
};

View file

@ -0,0 +1,40 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
// @flow
import React from "react";
import ReactDOM from "react-dom";
import { isFirefoxPanel } from "devtools-environment";
import { onConnect } from "./client";
import { teardownWorkers } from "./utils/bootstrap";
import sourceQueue from "./utils/source-queue";
function unmountRoot() {
const mount = document.querySelector("#mount .launchpad-root");
ReactDOM.unmountComponentAtNode(mount);
}
const { bootstrap, L10N } = require("devtools-launchpad");
window.L10N = L10N;
// $FlowIgnore:
window.L10N.setBundle(require("../../../locales/en-us/debugger.properties"));
bootstrap(React, ReactDOM).then(connection => {
onConnect(connection, require("devtools-source-map"), {
emit: eventName => console.log(`emitted: ${eventName}`),
openLink: url => {
const win = window.open(url, "_blank");
win.focus();
},
openWorkerToolbox: worker => alert(worker.url),
openElementInInspector: grip =>
alert(`Opening node in Inspector: ${grip.class}`),
openConsoleAndEvaluate: input => alert(`console.log: ${input}`)
});
});

View file

@ -7,8 +7,6 @@
import React from "react";
import ReactDOM from "react-dom";
import { isFirefoxPanel } from "devtools-environment";
import { onConnect } from "./client";
import { teardownWorkers } from "./utils/bootstrap";
import sourceQueue from "./utils/source-queue";
@ -18,52 +16,29 @@ function unmountRoot() {
ReactDOM.unmountComponentAtNode(mount);
}
if (isFirefoxPanel()) {
module.exports = {
bootstrap: ({
threadClient,
tabTarget,
debuggerClient,
sourceMaps,
panel
}: any) => {
return onConnect(
{
tab: { clientType: "firefox" },
tabConnection: {
tabTarget,
threadClient,
debuggerClient
}
},
sourceMaps,
panel
);
module.exports = {
bootstrap: ({
threadClient,
tabTarget,
debuggerClient,
sourceMaps,
panel
}: any) =>
onConnect(
{
tab: { clientType: "firefox" },
tabConnection: {
tabTarget,
threadClient,
debuggerClient
}
},
destroy: () => {
unmountRoot();
sourceQueue.clear();
teardownWorkers();
}
};
} else {
const { bootstrap, L10N } = require("devtools-launchpad");
window.L10N = L10N;
// $FlowIgnore:
window.L10N.setBundle(require("../assets/panel/debugger.properties"));
bootstrap(React, ReactDOM).then(connection => {
onConnect(connection, require("devtools-source-map"), {
emit: eventName => console.log(`emitted: ${eventName}`),
openLink: url => {
const win = window.open(url, "_blank");
win.focus();
},
openWorkerToolbox: worker => alert(worker.url),
openElementInInspector: grip =>
alert(`Opening node in Inspector: ${grip.class}`),
openConsoleAndEvaluate: input => alert(`console.log: ${input}`)
});
});
}
sourceMaps,
panel
),
destroy: () => {
unmountRoot();
sourceQueue.clear();
teardownWorkers();
}
};

View file

@ -0,0 +1,98 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
const toolbox = require("devtools-launchpad/index");
const sourceMapAssets = require("devtools-source-map/assets");
const CopyWebpackPlugin = require("copy-webpack-plugin");
const getConfig = require("./bin/getConfig");
const mozillaCentralMappings = require("./configs/mozilla-central-mappings");
const { NormalModuleReplacementPlugin } = require("webpack");
const path = require("path");
var Visualizer = require("webpack-visualizer-plugin");
const ObjectRestSpreadPlugin = require("@sucrase/webpack-object-rest-spread-plugin");
const isProduction = process.env.NODE_ENV === "production";
/*
* builds a path that's relative to the project path
* returns an array so that we can prepend
* hot-module-reloading in local development
*/
function getEntry(filename) {
return [path.join(__dirname, filename)];
}
const webpackConfig = {
entry: {
// We always generate the debugger bundle, but we will only copy the CSS
// artifact over to mozilla-central.
debugger: getEntry(isProduction ? "src/main.js" : "src/main.development.js"),
"parser-worker": getEntry("src/workers/parser/worker.js"),
"pretty-print-worker": getEntry("src/workers/pretty-print/worker.js"),
"search-worker": getEntry("src/workers/search/worker.js"),
"source-map-worker": getEntry("packages/devtools-source-map/src/worker.js"),
"source-map-index": getEntry("packages/devtools-source-map/src/index.js")
},
output: {
path: path.join(__dirname, "assets/build"),
filename: "[name].js",
publicPath: "/assets/build"
},
plugins: [
new CopyWebpackPlugin(
Object.entries(sourceMapAssets).map(([name, filePath]) => ({
from: filePath,
to: `source-map-worker-assets/${name}`
}))
)
]
};
if (isProduction) {
// In the firefox panel, build the vendored dependencies as a bundle instead,
// the other debugger modules will be transpiled to a format that is
// compatible with the DevTools Loader.
webpackConfig.entry.vendors = getEntry("src/vendors.js");
webpackConfig.entry.reps = getEntry("packages/devtools-reps/src/index.js");
}
const envConfig = getConfig();
const extra = {
babelIncludes: ["react-aria-components"]
};
webpackConfig.plugins.push(new ObjectRestSpreadPlugin());
if (!isProduction) {
webpackConfig.module = webpackConfig.module || {};
webpackConfig.module.rules = webpackConfig.module.rules || [];
} else {
webpackConfig.output.libraryTarget = "umd";
if (process.env.vis) {
const viz = new Visualizer({
filename: "webpack-stats.html"
});
webpackConfig.plugins.push(viz);
}
const mappings = [
[/\.\/mocha/, "./mochitest"],
[/\.\.\/utils\/mocha/, "../utils/mochitest"],
[/\.\/utils\/mocha/, "./utils/mochitest"],
[/\.\/percy-stub/, "./percy-webpack"]
];
extra.excludeMap = mozillaCentralMappings;
mappings.forEach(([regex, res]) => {
webpackConfig.plugins.push(new NormalModuleReplacementPlugin(regex, res));
});
}
module.exports = toolbox.toolboxConfig(webpackConfig, envConfig, extra);

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -70,350 +70,12 @@ return /******/ (function(modules) { // webpackBootstrap
/******/ __webpack_require__.p = "/assets/build";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 3727);
/******/ return __webpack_require__(__webpack_require__.s = 760);
/******/ })
/************************************************************************/
/******/ ({
/***/ 248:
/***/ (function(module, exports, __webpack_require__) {
(function(){
var crypt = __webpack_require__(249),
utf8 = __webpack_require__(250).utf8,
isBuffer = __webpack_require__(251),
bin = __webpack_require__(250).bin,
// The core
md5 = function (message, options) {
// Convert to byte array
if (message.constructor == String)
if (options && options.encoding === 'binary')
message = bin.stringToBytes(message);
else
message = utf8.stringToBytes(message);
else if (isBuffer(message))
message = Array.prototype.slice.call(message, 0);
else if (!Array.isArray(message))
message = message.toString();
// else, assume byte array already
var m = crypt.bytesToWords(message),
l = message.length * 8,
a = 1732584193,
b = -271733879,
c = -1732584194,
d = 271733878;
// Swap endian
for (var i = 0; i < m.length; i++) {
m[i] = ((m[i] << 8) | (m[i] >>> 24)) & 0x00FF00FF |
((m[i] << 24) | (m[i] >>> 8)) & 0xFF00FF00;
}
// Padding
m[l >>> 5] |= 0x80 << (l % 32);
m[(((l + 64) >>> 9) << 4) + 14] = l;
// Method shortcuts
var FF = md5._ff,
GG = md5._gg,
HH = md5._hh,
II = md5._ii;
for (var i = 0; i < m.length; i += 16) {
var aa = a,
bb = b,
cc = c,
dd = d;
a = FF(a, b, c, d, m[i+ 0], 7, -680876936);
d = FF(d, a, b, c, m[i+ 1], 12, -389564586);
c = FF(c, d, a, b, m[i+ 2], 17, 606105819);
b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);
a = FF(a, b, c, d, m[i+ 4], 7, -176418897);
d = FF(d, a, b, c, m[i+ 5], 12, 1200080426);
c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);
b = FF(b, c, d, a, m[i+ 7], 22, -45705983);
a = FF(a, b, c, d, m[i+ 8], 7, 1770035416);
d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);
c = FF(c, d, a, b, m[i+10], 17, -42063);
b = FF(b, c, d, a, m[i+11], 22, -1990404162);
a = FF(a, b, c, d, m[i+12], 7, 1804603682);
d = FF(d, a, b, c, m[i+13], 12, -40341101);
c = FF(c, d, a, b, m[i+14], 17, -1502002290);
b = FF(b, c, d, a, m[i+15], 22, 1236535329);
a = GG(a, b, c, d, m[i+ 1], 5, -165796510);
d = GG(d, a, b, c, m[i+ 6], 9, -1069501632);
c = GG(c, d, a, b, m[i+11], 14, 643717713);
b = GG(b, c, d, a, m[i+ 0], 20, -373897302);
a = GG(a, b, c, d, m[i+ 5], 5, -701558691);
d = GG(d, a, b, c, m[i+10], 9, 38016083);
c = GG(c, d, a, b, m[i+15], 14, -660478335);
b = GG(b, c, d, a, m[i+ 4], 20, -405537848);
a = GG(a, b, c, d, m[i+ 9], 5, 568446438);
d = GG(d, a, b, c, m[i+14], 9, -1019803690);
c = GG(c, d, a, b, m[i+ 3], 14, -187363961);
b = GG(b, c, d, a, m[i+ 8], 20, 1163531501);
a = GG(a, b, c, d, m[i+13], 5, -1444681467);
d = GG(d, a, b, c, m[i+ 2], 9, -51403784);
c = GG(c, d, a, b, m[i+ 7], 14, 1735328473);
b = GG(b, c, d, a, m[i+12], 20, -1926607734);
a = HH(a, b, c, d, m[i+ 5], 4, -378558);
d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);
c = HH(c, d, a, b, m[i+11], 16, 1839030562);
b = HH(b, c, d, a, m[i+14], 23, -35309556);
a = HH(a, b, c, d, m[i+ 1], 4, -1530992060);
d = HH(d, a, b, c, m[i+ 4], 11, 1272893353);
c = HH(c, d, a, b, m[i+ 7], 16, -155497632);
b = HH(b, c, d, a, m[i+10], 23, -1094730640);
a = HH(a, b, c, d, m[i+13], 4, 681279174);
d = HH(d, a, b, c, m[i+ 0], 11, -358537222);
c = HH(c, d, a, b, m[i+ 3], 16, -722521979);
b = HH(b, c, d, a, m[i+ 6], 23, 76029189);
a = HH(a, b, c, d, m[i+ 9], 4, -640364487);
d = HH(d, a, b, c, m[i+12], 11, -421815835);
c = HH(c, d, a, b, m[i+15], 16, 530742520);
b = HH(b, c, d, a, m[i+ 2], 23, -995338651);
a = II(a, b, c, d, m[i+ 0], 6, -198630844);
d = II(d, a, b, c, m[i+ 7], 10, 1126891415);
c = II(c, d, a, b, m[i+14], 15, -1416354905);
b = II(b, c, d, a, m[i+ 5], 21, -57434055);
a = II(a, b, c, d, m[i+12], 6, 1700485571);
d = II(d, a, b, c, m[i+ 3], 10, -1894986606);
c = II(c, d, a, b, m[i+10], 15, -1051523);
b = II(b, c, d, a, m[i+ 1], 21, -2054922799);
a = II(a, b, c, d, m[i+ 8], 6, 1873313359);
d = II(d, a, b, c, m[i+15], 10, -30611744);
c = II(c, d, a, b, m[i+ 6], 15, -1560198380);
b = II(b, c, d, a, m[i+13], 21, 1309151649);
a = II(a, b, c, d, m[i+ 4], 6, -145523070);
d = II(d, a, b, c, m[i+11], 10, -1120210379);
c = II(c, d, a, b, m[i+ 2], 15, 718787259);
b = II(b, c, d, a, m[i+ 9], 21, -343485551);
a = (a + aa) >>> 0;
b = (b + bb) >>> 0;
c = (c + cc) >>> 0;
d = (d + dd) >>> 0;
}
return crypt.endian([a, b, c, d]);
};
// Auxiliary functions
md5._ff = function (a, b, c, d, x, s, t) {
var n = a + (b & c | ~b & d) + (x >>> 0) + t;
return ((n << s) | (n >>> (32 - s))) + b;
};
md5._gg = function (a, b, c, d, x, s, t) {
var n = a + (b & d | c & ~d) + (x >>> 0) + t;
return ((n << s) | (n >>> (32 - s))) + b;
};
md5._hh = function (a, b, c, d, x, s, t) {
var n = a + (b ^ c ^ d) + (x >>> 0) + t;
return ((n << s) | (n >>> (32 - s))) + b;
};
md5._ii = function (a, b, c, d, x, s, t) {
var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;
return ((n << s) | (n >>> (32 - s))) + b;
};
// Package private blocksize
md5._blocksize = 16;
md5._digestsize = 16;
module.exports = function (message, options) {
if (message === undefined || message === null)
throw new Error('Illegal argument ' + message);
var digestbytes = crypt.wordsToBytes(md5(message, options));
return options && options.asBytes ? digestbytes :
options && options.asString ? bin.bytesToString(digestbytes) :
crypt.bytesToHex(digestbytes);
};
})();
/***/ }),
/***/ 249:
/***/ (function(module, exports) {
(function() {
var base64map
= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
crypt = {
// Bit-wise rotation left
rotl: function(n, b) {
return (n << b) | (n >>> (32 - b));
},
// Bit-wise rotation right
rotr: function(n, b) {
return (n << (32 - b)) | (n >>> b);
},
// Swap big-endian to little-endian and vice versa
endian: function(n) {
// If number given, swap endian
if (n.constructor == Number) {
return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;
}
// Else, assume array and swap all items
for (var i = 0; i < n.length; i++)
n[i] = crypt.endian(n[i]);
return n;
},
// Generate an array of any length of random bytes
randomBytes: function(n) {
for (var bytes = []; n > 0; n--)
bytes.push(Math.floor(Math.random() * 256));
return bytes;
},
// Convert a byte array to big-endian 32-bit words
bytesToWords: function(bytes) {
for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)
words[b >>> 5] |= bytes[i] << (24 - b % 32);
return words;
},
// Convert big-endian 32-bit words to a byte array
wordsToBytes: function(words) {
for (var bytes = [], b = 0; b < words.length * 32; b += 8)
bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);
return bytes;
},
// Convert a byte array to a hex string
bytesToHex: function(bytes) {
for (var hex = [], i = 0; i < bytes.length; i++) {
hex.push((bytes[i] >>> 4).toString(16));
hex.push((bytes[i] & 0xF).toString(16));
}
return hex.join('');
},
// Convert a hex string to a byte array
hexToBytes: function(hex) {
for (var bytes = [], c = 0; c < hex.length; c += 2)
bytes.push(parseInt(hex.substr(c, 2), 16));
return bytes;
},
// Convert a byte array to a base-64 string
bytesToBase64: function(bytes) {
for (var base64 = [], i = 0; i < bytes.length; i += 3) {
var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];
for (var j = 0; j < 4; j++)
if (i * 8 + j * 6 <= bytes.length * 8)
base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));
else
base64.push('=');
}
return base64.join('');
},
// Convert a base-64 string to a byte array
base64ToBytes: function(base64) {
// Remove non-base-64 characters
base64 = base64.replace(/[^A-Z0-9+\/]/ig, '');
for (var bytes = [], i = 0, imod4 = 0; i < base64.length;
imod4 = ++i % 4) {
if (imod4 == 0) continue;
bytes.push(((base64map.indexOf(base64.charAt(i - 1))
& (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))
| (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));
}
return bytes;
}
};
module.exports = crypt;
})();
/***/ }),
/***/ 250:
/***/ (function(module, exports) {
var charenc = {
// UTF-8 encoding
utf8: {
// Convert a string to a byte array
stringToBytes: function(str) {
return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));
},
// Convert a byte array to a string
bytesToString: function(bytes) {
return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));
}
},
// Binary encoding
bin: {
// Convert a string to a byte array
stringToBytes: function(str) {
for (var bytes = [], i = 0; i < str.length; i++)
bytes.push(str.charCodeAt(i) & 0xFF);
return bytes;
},
// Convert a byte array to a string
bytesToString: function(bytes) {
for (var str = [], i = 0; i < bytes.length; i++)
str.push(String.fromCharCode(bytes[i]));
return str.join('');
}
}
};
module.exports = charenc;
/***/ }),
/***/ 251:
/***/ (function(module, exports) {
/*!
* Determine if an object is a Buffer
*
* @author Feross Aboukhadijeh <https://feross.org>
* @license MIT
*/
// The _isBuffer check is for Safari 5-7 support, because it's missing
// Object.prototype.constructor. Remove this eventually
module.exports = function (obj) {
return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
}
function isBuffer (obj) {
return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
}
// For Node v0.10 support. Remove this eventually.
function isSlowBuffer (obj) {
return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
}
/***/ }),
/***/ 3646:
/***/ 14:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
@ -424,7 +86,7 @@ Object.defineProperty(exports, "__esModule", {
});
exports.stopSourceMapWorker = exports.startSourceMapWorker = exports.isOriginalId = exports.isGeneratedId = exports.generatedToOriginalId = exports.originalToGeneratedId = exports.getOriginalStackFrames = exports.hasMappedSource = exports.clearSourceMaps = exports.applySourceMap = exports.getOriginalSourceText = exports.getLocationScopes = exports.getFileGeneratedRange = exports.getOriginalLocation = exports.getAllGeneratedLocations = exports.getGeneratedLocation = exports.getGeneratedRanges = exports.getOriginalRanges = exports.hasOriginalURL = exports.getOriginalURLs = exports.setAssetRootURL = exports.dispatcher = undefined;
var _utils = __webpack_require__(3652);
var _utils = __webpack_require__(69);
Object.defineProperty(exports, "originalToGeneratedId", {
enumerable: true,
@ -451,7 +113,7 @@ Object.defineProperty(exports, "isOriginalId", {
}
});
var _devtoolsSourceMap = __webpack_require__(3646);
var _devtoolsSourceMap = __webpack_require__(14);
var self = _interopRequireWildcard(_devtoolsSourceMap);
@ -463,7 +125,7 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj;
const {
workerUtils: { WorkerDispatcher }
} = __webpack_require__(3651);
} = __webpack_require__(16);
const dispatcher = exports.dispatcher = new WorkerDispatcher();
@ -517,15 +179,15 @@ exports.default = self;
/***/ }),
/***/ 3651:
/***/ 16:
/***/ (function(module, exports, __webpack_require__) {
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
const networkRequest = __webpack_require__(3653);
const workerUtils = __webpack_require__(3654);
const networkRequest = __webpack_require__(27);
const workerUtils = __webpack_require__(28);
module.exports = {
networkRequest,
@ -534,95 +196,7 @@ module.exports = {
/***/ }),
/***/ 3652:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
const md5 = __webpack_require__(248);
function originalToGeneratedId(originalId) {
const match = originalId.match(/(.*)\/originalSource/);
return match ? match[1] : "";
}
function generatedToOriginalId(generatedId, url) {
return `${generatedId}/originalSource-${md5(url)}`;
}
function isOriginalId(id) {
return (/\/originalSource/.test(id)
);
}
function isGeneratedId(id) {
return !isOriginalId(id);
}
/**
* Trims the query part or reference identifier of a URL string, if necessary.
*/
function trimUrlQuery(url) {
const length = url.length;
const q1 = url.indexOf("?");
const q2 = url.indexOf("&");
const q3 = url.indexOf("#");
const q = Math.min(q1 != -1 ? q1 : length, q2 != -1 ? q2 : length, q3 != -1 ? q3 : length);
return url.slice(0, q);
}
// Map suffix to content type.
const contentMap = {
js: "text/javascript",
jsm: "text/javascript",
mjs: "text/javascript",
ts: "text/typescript",
tsx: "text/typescript-jsx",
jsx: "text/jsx",
vue: "text/vue",
coffee: "text/coffeescript",
elm: "text/elm",
cljc: "text/x-clojure",
cljs: "text/x-clojurescript"
};
/**
* Returns the content type for the specified URL. If no specific
* content type can be determined, "text/plain" is returned.
*
* @return String
* The content type.
*/
function getContentType(url) {
url = trimUrlQuery(url);
const dot = url.lastIndexOf(".");
if (dot >= 0) {
const name = url.substring(dot + 1);
if (name in contentMap) {
return contentMap[name];
}
}
return "text/plain";
}
module.exports = {
originalToGeneratedId,
generatedToOriginalId,
isOriginalId,
isGeneratedId,
getContentType,
contentMapForTesting: contentMap
};
/***/ }),
/***/ 3653:
/***/ 27:
/***/ (function(module, exports) {
/* This Source Code Form is subject to the terms of the Mozilla Public
@ -650,7 +224,7 @@ module.exports = networkRequest;
/***/ }),
/***/ 3654:
/***/ 28:
/***/ (function(module, exports) {
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
@ -828,10 +402,436 @@ module.exports = {
/***/ }),
/***/ 3727:
/***/ 51:
/***/ (function(module, exports) {
var charenc = {
// UTF-8 encoding
utf8: {
// Convert a string to a byte array
stringToBytes: function(str) {
return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));
},
// Convert a byte array to a string
bytesToString: function(bytes) {
return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));
}
},
// Binary encoding
bin: {
// Convert a string to a byte array
stringToBytes: function(str) {
for (var bytes = [], i = 0; i < str.length; i++)
bytes.push(str.charCodeAt(i) & 0xFF);
return bytes;
},
// Convert a byte array to a string
bytesToString: function(bytes) {
for (var str = [], i = 0; i < bytes.length; i++)
str.push(String.fromCharCode(bytes[i]));
return str.join('');
}
}
};
module.exports = charenc;
/***/ }),
/***/ 69:
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(3646);
"use strict";
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
const md5 = __webpack_require__(80);
function originalToGeneratedId(originalId) {
const match = originalId.match(/(.*)\/originalSource/);
return match ? match[1] : "";
}
function generatedToOriginalId(generatedId, url) {
return `${generatedId}/originalSource-${md5(url)}`;
}
function isOriginalId(id) {
return (/\/originalSource/.test(id)
);
}
function isGeneratedId(id) {
return !isOriginalId(id);
}
/**
* Trims the query part or reference identifier of a URL string, if necessary.
*/
function trimUrlQuery(url) {
const length = url.length;
const q1 = url.indexOf("?");
const q2 = url.indexOf("&");
const q3 = url.indexOf("#");
const q = Math.min(q1 != -1 ? q1 : length, q2 != -1 ? q2 : length, q3 != -1 ? q3 : length);
return url.slice(0, q);
}
// Map suffix to content type.
const contentMap = {
js: "text/javascript",
jsm: "text/javascript",
mjs: "text/javascript",
ts: "text/typescript",
tsx: "text/typescript-jsx",
jsx: "text/jsx",
vue: "text/vue",
coffee: "text/coffeescript",
elm: "text/elm",
cljc: "text/x-clojure",
cljs: "text/x-clojurescript"
};
/**
* Returns the content type for the specified URL. If no specific
* content type can be determined, "text/plain" is returned.
*
* @return String
* The content type.
*/
function getContentType(url) {
url = trimUrlQuery(url);
const dot = url.lastIndexOf(".");
if (dot >= 0) {
const name = url.substring(dot + 1);
if (name in contentMap) {
return contentMap[name];
}
}
return "text/plain";
}
module.exports = {
originalToGeneratedId,
generatedToOriginalId,
isOriginalId,
isGeneratedId,
getContentType,
contentMapForTesting: contentMap
};
/***/ }),
/***/ 760:
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(14);
/***/ }),
/***/ 80:
/***/ (function(module, exports, __webpack_require__) {
(function(){
var crypt = __webpack_require__(81),
utf8 = __webpack_require__(51).utf8,
isBuffer = __webpack_require__(82),
bin = __webpack_require__(51).bin,
// The core
md5 = function (message, options) {
// Convert to byte array
if (message.constructor == String)
if (options && options.encoding === 'binary')
message = bin.stringToBytes(message);
else
message = utf8.stringToBytes(message);
else if (isBuffer(message))
message = Array.prototype.slice.call(message, 0);
else if (!Array.isArray(message))
message = message.toString();
// else, assume byte array already
var m = crypt.bytesToWords(message),
l = message.length * 8,
a = 1732584193,
b = -271733879,
c = -1732584194,
d = 271733878;
// Swap endian
for (var i = 0; i < m.length; i++) {
m[i] = ((m[i] << 8) | (m[i] >>> 24)) & 0x00FF00FF |
((m[i] << 24) | (m[i] >>> 8)) & 0xFF00FF00;
}
// Padding
m[l >>> 5] |= 0x80 << (l % 32);
m[(((l + 64) >>> 9) << 4) + 14] = l;
// Method shortcuts
var FF = md5._ff,
GG = md5._gg,
HH = md5._hh,
II = md5._ii;
for (var i = 0; i < m.length; i += 16) {
var aa = a,
bb = b,
cc = c,
dd = d;
a = FF(a, b, c, d, m[i+ 0], 7, -680876936);
d = FF(d, a, b, c, m[i+ 1], 12, -389564586);
c = FF(c, d, a, b, m[i+ 2], 17, 606105819);
b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);
a = FF(a, b, c, d, m[i+ 4], 7, -176418897);
d = FF(d, a, b, c, m[i+ 5], 12, 1200080426);
c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);
b = FF(b, c, d, a, m[i+ 7], 22, -45705983);
a = FF(a, b, c, d, m[i+ 8], 7, 1770035416);
d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);
c = FF(c, d, a, b, m[i+10], 17, -42063);
b = FF(b, c, d, a, m[i+11], 22, -1990404162);
a = FF(a, b, c, d, m[i+12], 7, 1804603682);
d = FF(d, a, b, c, m[i+13], 12, -40341101);
c = FF(c, d, a, b, m[i+14], 17, -1502002290);
b = FF(b, c, d, a, m[i+15], 22, 1236535329);
a = GG(a, b, c, d, m[i+ 1], 5, -165796510);
d = GG(d, a, b, c, m[i+ 6], 9, -1069501632);
c = GG(c, d, a, b, m[i+11], 14, 643717713);
b = GG(b, c, d, a, m[i+ 0], 20, -373897302);
a = GG(a, b, c, d, m[i+ 5], 5, -701558691);
d = GG(d, a, b, c, m[i+10], 9, 38016083);
c = GG(c, d, a, b, m[i+15], 14, -660478335);
b = GG(b, c, d, a, m[i+ 4], 20, -405537848);
a = GG(a, b, c, d, m[i+ 9], 5, 568446438);
d = GG(d, a, b, c, m[i+14], 9, -1019803690);
c = GG(c, d, a, b, m[i+ 3], 14, -187363961);
b = GG(b, c, d, a, m[i+ 8], 20, 1163531501);
a = GG(a, b, c, d, m[i+13], 5, -1444681467);
d = GG(d, a, b, c, m[i+ 2], 9, -51403784);
c = GG(c, d, a, b, m[i+ 7], 14, 1735328473);
b = GG(b, c, d, a, m[i+12], 20, -1926607734);
a = HH(a, b, c, d, m[i+ 5], 4, -378558);
d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);
c = HH(c, d, a, b, m[i+11], 16, 1839030562);
b = HH(b, c, d, a, m[i+14], 23, -35309556);
a = HH(a, b, c, d, m[i+ 1], 4, -1530992060);
d = HH(d, a, b, c, m[i+ 4], 11, 1272893353);
c = HH(c, d, a, b, m[i+ 7], 16, -155497632);
b = HH(b, c, d, a, m[i+10], 23, -1094730640);
a = HH(a, b, c, d, m[i+13], 4, 681279174);
d = HH(d, a, b, c, m[i+ 0], 11, -358537222);
c = HH(c, d, a, b, m[i+ 3], 16, -722521979);
b = HH(b, c, d, a, m[i+ 6], 23, 76029189);
a = HH(a, b, c, d, m[i+ 9], 4, -640364487);
d = HH(d, a, b, c, m[i+12], 11, -421815835);
c = HH(c, d, a, b, m[i+15], 16, 530742520);
b = HH(b, c, d, a, m[i+ 2], 23, -995338651);
a = II(a, b, c, d, m[i+ 0], 6, -198630844);
d = II(d, a, b, c, m[i+ 7], 10, 1126891415);
c = II(c, d, a, b, m[i+14], 15, -1416354905);
b = II(b, c, d, a, m[i+ 5], 21, -57434055);
a = II(a, b, c, d, m[i+12], 6, 1700485571);
d = II(d, a, b, c, m[i+ 3], 10, -1894986606);
c = II(c, d, a, b, m[i+10], 15, -1051523);
b = II(b, c, d, a, m[i+ 1], 21, -2054922799);
a = II(a, b, c, d, m[i+ 8], 6, 1873313359);
d = II(d, a, b, c, m[i+15], 10, -30611744);
c = II(c, d, a, b, m[i+ 6], 15, -1560198380);
b = II(b, c, d, a, m[i+13], 21, 1309151649);
a = II(a, b, c, d, m[i+ 4], 6, -145523070);
d = II(d, a, b, c, m[i+11], 10, -1120210379);
c = II(c, d, a, b, m[i+ 2], 15, 718787259);
b = II(b, c, d, a, m[i+ 9], 21, -343485551);
a = (a + aa) >>> 0;
b = (b + bb) >>> 0;
c = (c + cc) >>> 0;
d = (d + dd) >>> 0;
}
return crypt.endian([a, b, c, d]);
};
// Auxiliary functions
md5._ff = function (a, b, c, d, x, s, t) {
var n = a + (b & c | ~b & d) + (x >>> 0) + t;
return ((n << s) | (n >>> (32 - s))) + b;
};
md5._gg = function (a, b, c, d, x, s, t) {
var n = a + (b & d | c & ~d) + (x >>> 0) + t;
return ((n << s) | (n >>> (32 - s))) + b;
};
md5._hh = function (a, b, c, d, x, s, t) {
var n = a + (b ^ c ^ d) + (x >>> 0) + t;
return ((n << s) | (n >>> (32 - s))) + b;
};
md5._ii = function (a, b, c, d, x, s, t) {
var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;
return ((n << s) | (n >>> (32 - s))) + b;
};
// Package private blocksize
md5._blocksize = 16;
md5._digestsize = 16;
module.exports = function (message, options) {
if (message === undefined || message === null)
throw new Error('Illegal argument ' + message);
var digestbytes = crypt.wordsToBytes(md5(message, options));
return options && options.asBytes ? digestbytes :
options && options.asString ? bin.bytesToString(digestbytes) :
crypt.bytesToHex(digestbytes);
};
})();
/***/ }),
/***/ 81:
/***/ (function(module, exports) {
(function() {
var base64map
= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
crypt = {
// Bit-wise rotation left
rotl: function(n, b) {
return (n << b) | (n >>> (32 - b));
},
// Bit-wise rotation right
rotr: function(n, b) {
return (n << (32 - b)) | (n >>> b);
},
// Swap big-endian to little-endian and vice versa
endian: function(n) {
// If number given, swap endian
if (n.constructor == Number) {
return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;
}
// Else, assume array and swap all items
for (var i = 0; i < n.length; i++)
n[i] = crypt.endian(n[i]);
return n;
},
// Generate an array of any length of random bytes
randomBytes: function(n) {
for (var bytes = []; n > 0; n--)
bytes.push(Math.floor(Math.random() * 256));
return bytes;
},
// Convert a byte array to big-endian 32-bit words
bytesToWords: function(bytes) {
for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)
words[b >>> 5] |= bytes[i] << (24 - b % 32);
return words;
},
// Convert big-endian 32-bit words to a byte array
wordsToBytes: function(words) {
for (var bytes = [], b = 0; b < words.length * 32; b += 8)
bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);
return bytes;
},
// Convert a byte array to a hex string
bytesToHex: function(bytes) {
for (var hex = [], i = 0; i < bytes.length; i++) {
hex.push((bytes[i] >>> 4).toString(16));
hex.push((bytes[i] & 0xF).toString(16));
}
return hex.join('');
},
// Convert a hex string to a byte array
hexToBytes: function(hex) {
for (var bytes = [], c = 0; c < hex.length; c += 2)
bytes.push(parseInt(hex.substr(c, 2), 16));
return bytes;
},
// Convert a byte array to a base-64 string
bytesToBase64: function(bytes) {
for (var base64 = [], i = 0; i < bytes.length; i += 3) {
var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];
for (var j = 0; j < 4; j++)
if (i * 8 + j * 6 <= bytes.length * 8)
base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));
else
base64.push('=');
}
return base64.join('');
},
// Convert a base-64 string to a byte array
base64ToBytes: function(base64) {
// Remove non-base-64 characters
base64 = base64.replace(/[^A-Z0-9+\/]/ig, '');
for (var bytes = [], i = 0, imod4 = 0; i < base64.length;
imod4 = ++i % 4) {
if (imod4 == 0) continue;
bytes.push(((base64map.indexOf(base64.charAt(i - 1))
& (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))
| (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));
}
return bytes;
}
};
module.exports = crypt;
})();
/***/ }),
/***/ 82:
/***/ (function(module, exports) {
/*!
* Determine if an object is a Buffer
*
* @author Feross Aboukhadijeh <https://feross.org>
* @license MIT
*/
// The _isBuffer check is for Safari 5-7 support, because it's missing
// Object.prototype.constructor. Remove this eventually
module.exports = function (obj) {
return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
}
function isBuffer (obj) {
return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
}
// For Node v0.10 support. Remove this eventually.
function isSlowBuffer (obj) {
return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
}
/***/ })

File diff suppressed because one or more lines are too long