diff --git a/.babelrc b/.babelrc index eae2e91..95a7192 100644 --- a/.babelrc +++ b/.babelrc @@ -1,8 +1,15 @@ { - "presets": ["es2015", "es2017", "stage-2"], - "plugins": ["transform-runtime", "transform-decorators-legacy", "transform-object-rest-spread", ["transform-async-to-module-method", { - "module": "bluebird", - "method": "coroutine" - }], ["import", {"libraryName": "antd", "style": true}]], - "comments": false + "presets": [ + "react", + [ + "env", + { + "targets": { + "browsers": ["chrome >= 58"] + } + } + ] + ], + "plugins": [["import", { "libraryName": "antd", "style": true }]], + "comments": false } diff --git a/.editorconfig b/.editorconfig index 36197bb..1dfa6d8 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,7 +8,7 @@ end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true -[*.{js,jsx,css,less,scss}] +[*.{ts,tsx,js,jsx,css,less,scss}] indent_size = 4 # Markdown files diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 3501fb5..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,36 +0,0 @@ -// http://eslint.org/docs/user-guide/getting-started#configuration -// "off" or 0 - turn the rule off -// "warn" or 1 - turn the rule on as a warning (doesn’t affect exit code) -// "error" or 2 - turn the rule on as an error (exit code will be 1) - -module.exports = { - parser: "babel-eslint", - root: true, - // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style - extends: "standard", - env: { - es6: true, - node: true, - browser: true - }, - // required to lint *.vue files - plugins: ["html"], - // add your custom rules here - rules: { - // allow paren-less arrow functions - "arrow-parens": 0, - // allow debugger during development - "no-debugger": process.env.NODE_ENV === "production" ? 2 : 0, - // indent - indent: [0, 2, { SwitchCase: 2 }], - // unused vars - "no-unused-vars": 0, - "no-multi-spaces": [ - "error", - { exceptions: { ImportDeclaration: true } } - ], - quotes: ["error", "double"], - semi: ["error", "always", { omitLastInOneLineBlock: true }], - "space-before-function-paren": ["error", "never"] - } -}; diff --git a/.gitignore b/.gitignore index 7174b40..c635b4a 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,6 @@ dist/ release/ .idea/ .vscode/ -debug.log +*.log +venders-config.json +manifest.json \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..a27a5d7 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "tabWidth": 4, + "printWidth": 100 +} diff --git a/.stylelintrc b/.stylelintrc new file mode 100644 index 0000000..8a79861 --- /dev/null +++ b/.stylelintrc @@ -0,0 +1,30 @@ +{ + "extends": "stylelint-config-standard", + "rules": { + "at-rule-empty-line-before": null, + "at-rule-name-space-after": null, + "comment-empty-line-before": null, + "declaration-bang-space-before": null, + "declaration-empty-line-before": null, + "declaration-colon-newline-after": null, + "function-comma-newline-after": null, + "function-name-case": null, + "function-parentheses-newline-inside": null, + "function-max-empty-lines": null, + "function-whitespace-after": null, + "value-list-comma-newline-after": null, + "indentation": null, + "number-leading-zero": null, + "number-no-trailing-zeros": null, + "rule-empty-line-before": null, + "selector-combinator-space-after": null, + "selector-list-comma-newline-after": null, + "selector-pseudo-element-colon-notation": null, + "unit-no-unknown": null, + "value-list-max-empty-lines": null, + "no-empty-source": null, + "selector-combinator-space-before": null, + "selector-pseudo-class-no-unknown": null, + "no-descending-specificity": null + } +} \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 17bb7b6..d708fb8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,7 +25,7 @@ before_install: | tar -xz -C /tmp/git-lfs --strip-components 1 && /tmp/git-lfs/git-lfs pull - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install --no-install-recommends -y icnsutils graphicsmagick xz-utils; fi install: -- nvm install 6 +- nvm install 7 - npm install electron-builder@next - npm install - npm prune diff --git a/.tslintrc.json b/.tslintrc.json new file mode 100644 index 0000000..e619c3e --- /dev/null +++ b/.tslintrc.json @@ -0,0 +1,111 @@ +{ + "extends": ["tslint-react", "tslint-eslint-rules", "custom-tslint-rules-collection"], + "rules": { + "align": [true, "parameters", "statements"], + "class-name": true, + "comment-format": [true, "check-space"], + "curly": true, + "object-curly-spacing": true, + "eofline": true, + "forin": true, + "indent": [true, "spaces"], + "jsdoc-format": false, + "label-position": true, + "max-line-length": [false, 120], + "member-ordering": [ + false, + { + "order": "statics-first" + } + ], + "new-parens": true, + "no-any": false, + "no-arg": true, + "no-bitwise": true, + "no-conditional-assignment": true, + "no-consecutive-blank-lines": true, + "no-console": [true, "debug", "info", "time", "timeEnd", "trace"], + "no-construct": true, + "no-constructor-vars": false, + "no-debugger": true, + "no-duplicate-variable": true, + "no-empty": false, + "no-eval": true, + "no-internal-module": true, + "no-namespace": true, + "no-reference": true, + "no-shadowed-variable": true, + "no-string-literal": true, + "no-switch-case-fall-through": false, + "no-trailing-whitespace": true, + "no-unused-expression": true, + "no-use-before-declare": false, + "no-var-keyword": true, + "no-var-requires": false, + "object-literal-sort-keys": false, + "one-line": [ + true, + "check-catch", + "check-else", + "check-finally", + "check-open-brace", + "check-whitespace" + ], + "one-variable-per-declaration": [true, "ignore-for-loop"], + "quotemark": [true, "double", "jsx-double"], + "radix": true, + "semicolon": [true, "always", "ignore-bound-class-methods"], + "switch-default": true, + "trailing-comma": [ + true, + { + "singleline": "never", + "multiline": "never" + } + ], + "triple-equals": [true, "allow-null-check"], + "typedef": false, + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }, + { + "call-signature": "onespace", + "index-signature": "onespace", + "parameter": "onespace", + "property-declaration": "onespace", + "variable-declaration": "onespace" + } + ], + "use-isnan": true, + "variable-name": [ + true, + "allow-leading-underscore", + "ban-keywords", + "check-format", + "allow-pascal-case" + ], + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type", + "check-typecast" + ], + "tsx-no-any-props": true, + "tsx-no-any-state": true, + "jsx-no-lambda": false, + "jsx-no-string-ref": false, + "jsx-boolean-value": [true, "never"], + "jsx-wrap-multiline": false, + "jsx-alignment": false, + "jsx-no-multiline-js": false + } +} diff --git a/README.md b/README.md index fa4d078..0785f08 100644 --- a/README.md +++ b/README.md @@ -6,37 +6,44 @@ ## StarCabinet -基于React/Electron/Ant Design打造的开源Github Stars管理的跨平台工具 +基于 React/Electron/Ant Design 打造的开源 Github Stars 管理的跨平台工具 + +## Update 2018.1 + +已经基于 TypeScript 重写了整个代码,使用 Mobx 替代 Redux 作为状态管理工具,并优化了开发编译 Webpack 脚本配置。 ## Features * 归类 - * 按自带的语言分类📚 - * 自定义添加分类💼 + + * 按自带的语言分类 📚 + * 自定义添加分类 💼 * 标记 - * 添加仓库的标签🏷 - * 添加仓库的旗标🏁 - * 添加仓库的阅读状态👀 - * 添加仓库的备注✍️ - * 添加仓库的评分💯 + + * 添加仓库的标签 🏷 + * 添加仓库的旗标 🏁 + * 添加仓库的阅读状态 👀 + * 添加仓库的备注 ✍️ + * 添加仓库的评分 💯 * 筛选 - * 归类🎏->选择语言或者分类 - * 搜索词🔍->全部字段|仓库名|仓库原始描述|仓库备注|仓库标签 - * 排序〽️->默认(即star添加时间)|stars数量|forks数量|watchers数量|创建时间|更新时间|推送时间|评分|大小|open issues数量,均支持增序和降序 - * 过滤器⏳->未读|有旗标|有备注 三种可多选 + + * 归类 🎏->选择语言或者分类 + * 搜索词 🔍->全部字段|仓库名|仓库原始描述|仓库备注|仓库标签 + * 排序〽️->默认(即 star 添加时间)|stars 数量|forks 数量|watchers 数量|创建时间|更新时间|推送时间|评分|大小|open issues 数量,均支持增序和降序 + * 过滤器 ⏳->未读|有旗标|有备注 三种可多选 * 离线支持 - 💾利用rxdb库和浏览器的indexed db存储仓库的数据 + 💾 利用 rxdb 库和浏览器的 indexed db 存储仓库的数据 - * 支持离线查看仓库并支持上述所有功能操作,包括readme文件的查看 + * 支持离线查看仓库并支持上述所有功能操作,包括 readme 文件的查看 * 高效的数据条件化呈现(不用频繁请求服务器) -* 数据 - 支持Stars和自定义数据的导出备份和导入恢复 +* 数据支持 Stars 和自定义数据的导出备份和导入恢复 ## Screenshots + ![Login](screenshots/StarCabinet-login.png) ![Main](screenshots/StarCabinet-main.png) @@ -44,18 +51,33 @@ ![Setting](screenshots/StarCabinet-setting.png) ## Demo + [StarCabinet Demo](http://7xrp00.com1.z0.glb.clouddn.com/starcabinet/StarCabinet.mp4) ## Debug + 直接使用源码的用户,按如下操作: ``` npm install npm run dev -npm start +npm run start:dev ``` -如果在install packages出错,提示keytar错误等信息,特别是windows用户,你可能需要安装windows-build-tools的package之后在进行上述步骤 +如果在 install packages 出错,提示 keytar 错误等信息,特别是 windows 用户,你可能需要安装 windows-build-tools 的 package 之后在进行上述步骤 + +或者尝试如下操作: + +``` +npm run rebuild +``` + +或者调试 + +``` +npm install -g --verbose electron +``` ## LICENSE + ### MIT diff --git a/build/dev-server.js b/build/dev-server.js deleted file mode 100644 index b1739e2..0000000 --- a/build/dev-server.js +++ /dev/null @@ -1,53 +0,0 @@ -import express from 'express' -import webpack from 'webpack' -import devConfig from './webpack.dev.conf.babel' -import webpackDevMiddleware from 'webpack-dev-middleware'; -import webpackHotMiddleware from 'webpack-hot-middleware'; -import { spawn } from 'child_process'; - -let app = express() -let compiler = webpack(devConfig) -const PORT = process.env.PORT || 3000 - -const devMiddleware = webpackDevMiddleware(compiler, { - publicPath: devConfig.output.publicPath, - stats: { - colors: true - // chunks: false - } -}) - -let hotMiddleware = webpackHotMiddleware(compiler) - -// force page reload when html-webpack-plugin template changes -compiler.plugin('compilation', function (compilation) { - compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { - hotMiddleware.publish({ action: 'reload' }) - cb() - }) -}) - -// handle fallback for HTML5 history API -app.use(require('connect-history-api-fallback')()) -// serve webpack bundle output -app.use(devMiddleware) -// enable hot-reload and state-preserving -// compilation error display -app.use(hotMiddleware) -// serve pure static assets -app.use('/static', express.static('./static')) - -const server = app.listen(PORT, 'localhost', err => { - if (err) { - return console.error(err) - } - console.log('Listening at http://localhost:' + PORT) -}) - -process.on('SIGTERM', () => { - console.log('Stopping dev server') - devMiddleware.close() - server.close(() => { - process.exit(0) - }) -}) diff --git a/build/webpack.base.conf.babel.js b/build/webpack.base.conf.babel.js deleted file mode 100644 index cdfe588..0000000 --- a/build/webpack.base.conf.babel.js +++ /dev/null @@ -1,126 +0,0 @@ -import path from "path"; -import webpack from "webpack"; -import ExtractTextPlugin from "extract-text-webpack-plugin"; - -export default { - // http://webpack.github.io/docs/configuration.html#node - node: { - __filename: false, - __dirname: false - }, - output: { - path: path.resolve(__dirname, "../dist"), - publicPath: "../dist/", - filename: "[name].js" - }, - resolve: { - extensions: [".js", ".jsx", ".css", ".less", ".scss"], - modules: [path.join(__dirname, "../node_modules")], - alias: { - app: path.resolve(__dirname, "../app"), - dist: path.resolve(__dirname, "../dist"), - src: path.resolve(__dirname, "../src") - } - }, - target: "electron-renderer", // important - module: { - rules: [ - { - test: /\.jsx$/, - loader: "eslint-loader", - exclude: /node_modules/, - enforce: "pre", - options: { - formatter: require("eslint-friendly-formatter") - } - }, - { - test: /\.js$/, - loader: "eslint-loader", - exclude: /node_modules/, - enforce: "pre", - options: { - formatter: require("eslint-friendly-formatter") - } - }, - { - test: /\.js$/, - loader: "babel-loader?presets[]=es2015&presets[]=stage-2", - exclude: /node_modules/ - }, - { - test: /\.json$/, - loader: "json-loader" - }, - { - test: /\.css$/, - include: [/global/, /node_modules/], - loader: ExtractTextPlugin.extract({ - fallback: "style-loader", - use: "css-loader?sourceMap" - }) - }, - { - test: /\.css$/, - exclude: [/global/, /node_modules/], - loader: ExtractTextPlugin.extract({ - fallback: "style-loader", - use: - "css-loader?modules&sourceMap&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]" - }) - }, - { - test: /\.less$/, - include: [/global/, /node_modules/], - loader: ExtractTextPlugin.extract({ - fallback: "style-loader", - use: - 'css-loader?sourceMap!less-loader?{"modifyVars": {"primary-color": "#3498db"}}' - }) - }, - { - test: /\.less$/, - exclude: [/global/, /node_modules/], - loader: ExtractTextPlugin.extract({ - fallback: "style-loader", - use: - "css-loader?modules&sourceMap&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]!less-loader" - }) - }, - { - test: /\.(png|jpg|gif)$/, - exclude: /node_modules/, - loader: "url-loader", - query: { - limit: 2000, - name: "assets/images/[name].[ext]" // 'assets/images/[name].[ext]?[hash:7]' - } - }, - { - test: /\.(woff|woff2|eot|ttf|svg)/, // if /\.(woff|woff2|eot|ttf|svg)$/ the font-awesome with url like xx.woff?v=4.7.0 can not be loaded - exclude: /node_modules/, - loader: "url-loader", - query: { - limit: 10000, - name: "assets/fonts/[name].[ext]" - } - }, - { - test: /\.node$/, - loader: "node-loader" - } - ] - }, - plugins: [ - new webpack.optimize.OccurrenceOrderPlugin(), - // extract css to one file - new ExtractTextPlugin({ - filename: - process.env.NODE_ENV === "production" - ? "style.min.css" - : "style.css", - disable: false, - allChunks: true - }) - ] -}; diff --git a/build/webpack.dev.conf.babel.js b/build/webpack.dev.conf.babel.js deleted file mode 100644 index 8e127b3..0000000 --- a/build/webpack.dev.conf.babel.js +++ /dev/null @@ -1,60 +0,0 @@ -import path from 'path' -import webpack from 'webpack' -import baseConfig from './webpack.base.conf.babel' -import merge from 'webpack-merge' -import HtmlWebpackPlugin from 'html-webpack-plugin' - -const port = process.env.PORT || 3000 - -let devConfig = { - // eval-source-map is faster for development - devtool: '#source-map', // '#eval-source-map', - - entry: { - app: [ - `webpack-hot-middleware/client?path=http://localhost:${port}/__webpack_hmr`, - 'babel-polyfill', - './src/renderer/index.jsx' - ], - electron: [ - `webpack-hot-middleware/client?path=http://localhost:${port}/__webpack_hmr`, - 'babel-polyfill', - './src/main/index.js' - ] - }, - - output: { - path: path.resolve(__dirname, '../dist'), - publicPath: `http://localhost:${port}/static/` - }, - - module: { - rules: [ - { - test: /\.jsx$/, - exclude: /node_modules/, - loaders: ['react-hot-loader', 'babel-loader?presets[]=react&presets[]=es2015&presets[]=es2017&presets[]=stage-2'] - } - ] - }, - - plugins: [ - new webpack.DefinePlugin({ - 'process.env': { - NODE_ENV: JSON.stringify('development') - } - }), - new webpack.HotModuleReplacementPlugin(), - new webpack.NoEmitOnErrorsPlugin(), - // https://github.com/ampedandwired/html-webpack-plugin - new HtmlWebpackPlugin({ - template: 'src/renderer/index.html', - filename: '../dist/index.html', - inject: true, - excludeChunks: ['electron'], - bodyClass: `platform_${process.platform}` - }) - ] -} - -export default merge(baseConfig, devConfig) diff --git a/build/webpack.prod.conf.babel.js b/build/webpack.prod.conf.babel.js deleted file mode 100644 index dd00f39..0000000 --- a/build/webpack.prod.conf.babel.js +++ /dev/null @@ -1,118 +0,0 @@ -import path from 'path' -import webpack from 'webpack' -import baseConfig from './webpack.base.conf.babel' -import HtmlWebpackPlugin from 'html-webpack-plugin' -import merge from 'webpack-merge' -import OptimizeCssAssetsPlugin from 'optimize-css-assets-webpack-plugin' - -baseConfig.entry = {} - -let appProdConfig = { - // whether to generate source map for production files. - // disabling this can speed up the build. - devtool: false, // '#source-map', - - entry: { - app: [ - 'babel-polyfill', - './src/renderer/index.jsx' - ] - }, - - output: { - filename: '[name].[chunkhash:8].js', - chunkFilename: '[id].js', - path: path.resolve(__dirname, '../app/dist'), - publicPath: './' - }, - - module: { - rules: [ - { - test: /\.jsx$/, - loader: 'babel-loader?presets[]=react&presets[]=es2015&presets[]=es2017&presets[]=stage-2', - exclude: /node_modules/ - } - ] - }, - - plugins: [ - new webpack.DefinePlugin({ - 'process.env': { - NODE_ENV: JSON.stringify('production') - } - }), - new webpack.optimize.UglifyJsPlugin({ - compress: { - warnings: false - }, - mangle: { - except: ['exports', 'require', 'RxSchema', 'RxDatabase'] - }, - sourceMap: false - }), - new OptimizeCssAssetsPlugin({ - assetNameRegExp: /\.min\.css$/g, - cssProcessor: require('cssnano'), - cssProcessorOptions: { discardComments: {removeAll: true } }, - canPrint: true - }), - // see https://github.com/ampedandwired/html-webpack-plugin - new HtmlWebpackPlugin({ - filename: '../../app/dist/index.html', - template: 'src/renderer/index.html', - inject: true, - minify: { - removeComments: true, - collapseWhitespace: true, - removeAttributeQuotes: true - // more options: - // https://github.com/kangax/html-minifier#options-quick-reference - }, - bodyClass: `platform_${process.platform}` - }) - ] -} - -let electronProdConfig = { - // whether to generate source map for production files. - // disabling this can speed up the build. - devtool: false, // '#source-map', - - entry: { - electron: [ - 'babel-polyfill', - './src/main/index.js' - ] - }, - - output: { - filename: '[name].js', // for Electron, the main entry name is fixed in package.json, hash should removed - chunkFilename: '[id].js', - path: path.resolve(__dirname, '../app/dist'), - publicPath: './', - libraryTarget: "commonjs" // important for set externals // http://webpack.github.io/docs/configuration.html#externals - }, - - externals: [ - "keytar" - ], - - plugins: [ - new webpack.DefinePlugin({ - 'process.env': { - NODE_ENV: JSON.stringify('production') - } - }), - new webpack.optimize.UglifyJsPlugin({ - compress: { - warnings: false - } - }), - ] -} - -export default [ - merge(baseConfig, appProdConfig), - merge(baseConfig, electronProdConfig) -] diff --git a/chrome/ReactDevTool/2.0.12_0/_metadata/computed_hashes.json b/chrome/ReactDevTool/2.0.12_0/_metadata/computed_hashes.json deleted file mode 100644 index 9cca5b3..0000000 --- a/chrome/ReactDevTool/2.0.12_0/_metadata/computed_hashes.json +++ /dev/null @@ -1 +0,0 @@ -{"file_hashes":[{"block_hashes":["sviif16hMZ8f+0dAO8H9ZinltMYfSQr71PyTyOxj1kk=","s3Qw6hqmkGpYSjcFZJvZd8JEu9YJ7p3gGwvikEMutAg=","8mlVUWucxbAnWBySwJvm2jgHrJW3MSKnqzReW6pCxas=","7vdrEBxp+qShgNU8ZZoc0mOCqO9o9sopEytdsO/wi/4=","uqq/JehVp7LMmtOVWRdf+o2miNxXORURmPxHgFKooPY=","T37oVVOkGGdjHCYu9MB7KCwLA2+psApR5krA/+URfvo=","77mtkJ9NEAtZ2esmcUbT+xeRu7vPbNY4dKYmlU0ZmNs=","3sYgyi1OsmAvJAwb5uMKQhtd9TgVdk/nLj5PWpOmUbE=","1+8ZpncnWyJrqzYfA1JLq+cKNLelhXdKw85baNFLoAY=","KhBU4IhOWQLQMlnc7HNNJZ1FLeuCuWdICp0I4Bfaa0k=","/gsog0f/XKBqL2uXLu30hNsb8THFFf6BUtMpRGvd7ok=","XD23cW1/CumKN2YVcxh2881Bkg6SM8WuGeU8k7iV9XI=","krInVk2HPDpIMJpZ4gqdCcXEOF9q3QzsgMf5q/JPQx8=","6ZSq1UQuMmqVFX1hs1tben8g8yeOcEZimTOGSf7fGuE=","WuQVNkeQrjN026UxzgfjWIXI76JDLwGtlkME5g5Vf7A=","cEk6iJTWSsn/GjACUokROCpAl9SJGKAG+UyE7TvuU+8=","UXqu1XgW1XORcUXm217rau10SYgENyzTYkhCo4S+aig=","gnI1ks+w6/1naBEjNaYgwhr7FxuXrHCf3niM3R8jWVY=","nKoQsyFglYgtXu9HZuN4SydAtRA1ahsgVSYq9P3YebU=","l8Qxxz4Uq8sgQKbD28UmMhSssZyJlkAp+7Is4c0XjOs=","/FwcGh7me96Ln8XKfn6eU9P7NRLF/GaU5uI0D3q+UFM=","tgoEvZMw68wmfL1e6R+56WfysF+LvMsXpXDCVEoG5Ek=","uUuqxmyW5vLj0uO1fwE0diEtF86q973bhDglrNhWfQE=","9iC43t3fVvF/sL6RDIrXNW1wKrxdTBZCmZNuF0XBcVo=","Evl7wlVMup5Y220JGuP/AHQ7U4XH81Ws4k/NUEnuO/k=","kAffcKRLte3ysoLy+2CiCfbMQqZccFkZczwDsLTuZ3U=","fzZrwrTQCTJphnGLVqPY0GFECLTU6QMLOeBUsDYAu0U=","/ojxfrAplE0qucVTBe63iT9FIiczpuhujtOTHtX3svU=","z5oSfXSlem2g/7CBuw7IRiYmyIyGL4jvulKWIhwIM2s=","gf2hb9pdk8ow3jmcr0FOi0b1X6QTgKPR3ZDhvFcnj/M=","4AI6QFd3iWBscbhZnnHdNgWwOR/Z6Db2EaFPuZ2r5Sw=","KoAa7T0UIrmuVs19rtdD657k45aZUjPtbF1AWpgsJdQ=","i5Y0Fit389sUXnA5EGz0L858d5GrfMssHRT0wYHyZew=","huHiBkCSVisjcbCT9O40RqCbXtDCmdU6eSayn0QEv8Q=","Imjpj2Or1DdOrqHSBHo2/p+IzmfRIJB6r/4R0lfmX84=","xHn4APVCqC3gq91ljmCaHO73iGvN6wIvyrRDqFny2OE=","+FFDC+z5IuK4mX7TC7Mv0H7pUd6lkSPK3ehdbAzUwBg=","QAa/SopcvBcwAwDOtAlmqilu4rZOs2kFlmcoNrTrd7c=","5FSOQg5HzOQOWZHgvXoMmyoOBSERyettQgUZUYLWfD8=","/aIhR7ZR6DdRhIgbOE1oa45LjDxedzdL1p0fON3oClk=","DOJF93fcn3h8+bGfe85DMX3whDJjITOKnmNZM8C9HYw=","4QWRSKORXSwGrdv9C2zgjP/ZjKEbPtBLhSgZvIIGgKY=","dwaqM4Vnk6CKQ2he/HDm3wp24tQbBRokrVml8iSp+Qo=","yWzzOsPglfFkuvMFeh/oaBPVT07VCCNCisYiHF/2MgQ=","qjxNLKu1NXFT805qaP8BGruMMfB6SUrVrJTiygAsnaQ=","eLsDeljKywLamYfJ2Ui4Qf3KSUnhu6vrsPEYJuHQ36c=","XEc1+oXvy/xejOJq3uCh2R407jStDXFNIq90hOZSzP4=","Y214VN4v8LpZjuZrG4sstRr2remeP/sqzTLwAM9ZO3s=","Z2bY46sHOEA69wXFeAQV8yhi4w90GmOuHJI820LUqD0=","Yc7q08gLaceVvL3XSz1lLtcPZTY/t18KhdU77bd35AE=","+DQUXz3kg3TUlGZDTRkC2VBR6igsgYMSNQb+mvz7o2o=","MPc377wuX4QG1vthcj+78f0dgXndHJRzl88Uqd4pGrw=","8Z5t/KyBqZugj+PB4RHlLFtb1n0zO2YxrowYeKz6edg=","JW6cfZ9dcNPjSXcMzgMsFkfyMTA+QmZ1J+K34lCuqqA=","RWrbEPLd2O0zGqkuBNYPvMy4f4X8+HyBMB+FuVPtiIg=","FxlfBHfxNaBdrlBvpCfjqczSRTZA36HjpOFTgtsZQds=","74dUBeRSW67sfSUru9cJqrjrA6S1F6nk4zojJtNf5CE=","2X95A132L1GN4VS9Y8kuwg7LJmOjHDdF3Dh8uKb6Dsk=","Pz9GlLXXkgYTqw1Fp6ZvjYx8wItx0stsfInCdm+ShjU=","GMWRM+trdpm4Xs+HsgJiB2FgvRP26OgsmFDnoPLb70Y=","Ewi0QVBuCBFuvYPkBy2lPF+PE/9AhQDkHQg4rbOGF+E=","bT/GqdnAKu7c9PWzrIHz7L+2LnaGNlqPiI2u6/oE4+w=","CqTiPewEp/8G6Rr0j47wAxnzYe0VTXwjO+N0iC1zVHI=","egaVkAuKP3mqd0kYcqqp6tEmOaxtETZ3tc7NuOvfaic=","zs1l2uK4L6NFF1qQZ17UTOtwquY2V7bS/RbIYQST+cA=","hRuDT7LXgpT1XzORZxZ7FQDsnD9ZSuZoCSvlOMUza3A=","2qvETt8V3gaa+Lpw9O4wm7jiJ5h7LYRuoDhcK6c8I/E=","bpNznUjmK5qumB7WPR7nPIRvd+xQ3+T5clKxFKuYKvw=","W1VyObLtLTLz8LIJm2mmMx8IyJ4PSiPOmOQ8FhdilAk=","N3jjydxh+OPF/4nO482lZEKG5h0PAq4WOL/lgdDfFbs=","ONO76MCNAinPiq+1FNjMiVv+YVGC0Hq8daQnxJX4fp4=","VOt1QrxnvNz+CNuZVlRUIhe1otwLTy5DzavOwEYgdtc=","w+Yys9JhzwG1O+zGxXzgNNrz9C9Fcm9mHkphm5XOsKw=","AevEuepRhovsxkrgI4o3bmL69Bx3yGmJN38Ddg4ewew=","ao9bkedMn8b3NdWVjMJWT1jXw8o/71Rr63Ntb2gJacE="],"block_size":4096,"path":"build/backend.js"},{"block_hashes":["R21ABjrmW7qeIQZiPJr+4NtCwMAB30tblSkqEE2MUOA="],"block_size":4096,"path":"build/background.js"},{"block_hashes":["J3jAu+7DEWwRvMzo3kFAOb8Z2Px5hEtmmTnJv6q5c+k="],"block_size":4096,"path":"build/contentScript.js"},{"block_hashes":["YVHQeu7X4qe3HHWni5iN5RN6Ay7jFyCDeUVhgPvIq4Y=","ZjKIrybyFX6bVON3UYC6gJETDydCDFePV875a/sY4As="],"block_size":4096,"path":"build/inject.js"},{"block_hashes":["z+V57jiha3j3dD7OiUseoQtHfnw12EpUTXNTz/wpnDg="],"block_size":4096,"path":"build/main.js"},{"block_hashes":["BguO+RrNp3V2Gwib6VdjY6T0z+l4nHQ4MdvO4QXoioc=","mXCI7TUrtdnnbkIhTGe+kbDBhDsRyQZ0akBpFBdypWY=","J2/g2zdnC7RE3Ohg61r3DMhQx84iQ9A6xSW8VYBbZP4=","+oJthuB/iLSI1I0vEPXx2IIwILo8OCns3izhqnojyn8=","62TjFFKlSfPxOw00qFgemGlBbqVyNF50BUS3S+lp+7g=","cx60TXOwX9jI+gVD7feH7ftlzK5c65nwX12xzGrljUs=","j3N3UQP/gE4p1pRgniikWXhK+ed2g01UJBhoGC3LY8U=","iYszUPctnjHEaRv8tkSPJSW8ezyeMoS0z8C5fFAnCNs=","//kkF4RrC8WMQDPEt4l55BD5dsgi11PuQmgFMqfVHfA=","KFF44cMgPxkjTFMab8lnkuaPKJ78BaojHp4zjcaA6A8=","5AAmGkaPFCHgutmYpYve2WJjcTkIH8jy8FbUDXgND2M=","1NObAGI+VPn8aToVD83FsM/B/apxG9EEY8VZWfvMWGc=","HL5rcsUylnt6iKW5B+PPA208ydYg1kkJ83Km9HBhopA=","MpXuIoazwBGOd7LYmXvITwpk7iUIQYomgMNgoHeKnJI=","ERwnK3LhQ7FcQ3gGG1SZD+lalAK7ieNY3t6or0tj3vI=","E+JVgfaszAujUBGU7K/ugj1At+1TrQWRdzAnpjfi/r8=","zaypCvgzYAz3wEIz+AwdC9yPhwq9k56ia2LCn1FS7j4=","VHovkF3Qavvzs+zmo4aib7G5P1O6iWGBIcXozG9JMZ4=","NdePi/gJ/KrFVhXfYCKsd7tl8m1uhupDIVPwF5g/ua4=","WkLP/0NGmT0Gp80fxzi3UV+lk5IuvxUN6159O2tCo5E=","V4aI3CKbE3gD9tf3fqzNsv2Wzc9pCYxHvV7+EQmDQE0=","rGHV7z7rIbp2RL06H9npx7TPKG9nHfXZEaeebTsMhiE=","T92qRmqcjmA2oBRVCI7x7GpRrqtvzEtwOGqmQtmCEE4=","Lb41zrBREJXLiWDE62bY9/kIysRkEuXNPOmauGBgAUg=","QgbYiORdQMHRUalaFdEsFCCCyMTVvmONcBcCJZO0pso=","g7P2c50L0SAQTWY2uBhj6G4+kQLTVqIeVaBBjRViu1Y=","rAn6u7nZ38Iqxs9EXiqtn6Qcd3l6SxQ57llkGvRRZBM=","6QkuoRaVun9Lpz24KwxBQEK7m08rVNuktPWo2ASXaQY=","4osYAb1JArZiD1AixOH8tuiETBkgDRCb9sNt5XOIHaY=","I0sUv90rus6A+TrPt57HiI1ahkMSoGDJJgS35SYhLdc=","/IjC6wYAsM0wAF5oC6UjSSm1Xtl3Xqpb3745V9ExiCI=","94xYjsGUpeZzX1HCCisG7xDDNTJmKDNOiwNtfNgPRGE=","CXx73+sMgCImKLGXXfiGHTwzjUTNVc4L9kVl2ZEP2fw=","hGf35WeJzJkuRR+uvGRQQcnUvSqxl29UQ3QEvq/LxbI=","K7CfzOm3gJK/snvMsuzcklU6KgcFNW28r/bmkFgovO8=","EeRbaCoTH45tNLW12c3e/Q6YHPdGIEb6MAYxlZ6vNFU=","JogvD3sIiwSzmvZHm/6XOyQdWeUpltsaIV1lN8O+iS8=","uBFxlMmW8btJ6t3VG12SIRJKa3kyCnDo1knP32p+Yps=","r+UP5ISf/8m7vGXzENw9vlWi7WBy3tWkLzh5mMoZTms=","l3zuQcgT5EgzPpAIntwmHu6E7kZVRnyi7RL2UmFsBcs=","y8fHU/1golw98QxrjmBmFYSl/CfWsYaRPzjK3OAkXVI=","0/OccTM2x+Vmqra+02J2DXXaoUTmb7Wvwx9bHK59Ey4=","zuvR7pklOJ+BBAs/9nbRTVz8IxoTGHK9a/sp+qcuIjg=","+B3bu4luvp6C4xyQEpDB1TbWFKbRJ60OYPjqkefXCAg=","AkUZGnooUymzo3S0jH5aPtxon7gko1ePErdvfhHzVBw=","ev+3EiiOW/yHaMPT2uqmSEZrLklbBrGENnsrmGrpIjI=","Kbd4Zt5evnKL9lrj3Bz2n0vVFfoC2RlvrB2Gif8XYJI=","e+zTdT0wBoBt8V4NwyrsXgDKSWNbxEPZ7axE9fIlSEo=","hNiVDEJ78+2cl/7gOE/b0Cr75hc9ifXiK3huS/zaE4E=","TWG56jKCF5baq81fM/8JuGFIrLWAJbqzV5JC3QN2pqE=","YRX/kRldEF9FyBJEsz3ssh+g2OqCpR5KOEbYBtt52Qo=","TGkHM38T0kxQMO7DxEELTyZMC6516uXdwjUwKQOpLNk=","zJ0+kINRpxmizRdqCPPM0y4Y7enL2A4mtUANYBxau6o=","k1KuwJHyZjKvR7G6WXfcUGK0k6B8XGwAa88hnImr/0k=","d2s5yej0ZphJrhM5jzZ7CulYMo8w+2LhIlGk2SCmm/E=","JPmydiAWO+W5eVpp9RJmy8OhIaOfgNZAr9G5vV9/dCs=","r90C9vH40ZqSMPbLszOsahAl1IG1Jlvh3gVJTUUWTxI=","nmrC0MhUcjLSI9xjvnj0m+Dvt30h1boD1XgJNAiYQeo=","wLiPRbXTY13JEs7ggOoj82oK98r6mHlh6WshV/TU8PU=","lGesxDXg7N+eSG0nPMHuZsgcalxkYihPLOuoEv/zjZI=","f07q26964ZddoAIBcNaYkOrqqYFVJTHjf916SnqA3Yg=","ep9B3A0qQ4ACy8StNKDAq3fKFaTnqWWux+qw2Z0sTHg=","BoNtvyBWGd2VAsX7QgdKu2Wjsbo4R3gQ3OrEeapdSL8=","1+65pRl5XrSvqUiBB0lE702fSbVR4nDbzLcxvArdxNo=","bnA0rNLrMzlOnqiMFWJ5eqf5j9VlaPGoymEBYrBF7CM=","6Bne6mx1dt16pH5mwBKSz+jEPsF4Um10yUnOuZtuMVo=","wZ2H9/X6SGZLhbIOuTfD/7Tv+W7DEuLis8VWkaI9q/8=","/bklHh29Ij1IY5gIvQx7uqDI5bHUWvbHcthqUPF6msA=","6ELUmC2lDayr4upHYJeLuQOkqy1Rx9HLZOqVXGoSGc0=","171YWaD7jwxBtqJG7y9KqEdJbt0ucVndG3iY3TRmGqI=","ntNfF+IqLCJTHA9kWdJutK4vE5zbgDdRycEEqUDSGcc=","5Rrmr2ANEnQWt/ix0NMBY83z1FATT5YemceT7AxTt9o=","BqNIUnwe1RTd7rDUYzhJN6jl7Q0I1ibgYh/JQSZDWes=","8S50lYIauStywXdv9ek8mzSOoSw5D6wercDQeATyJl8=","S1w6hu7x4e+2OVNq9B7SlPjM26UZMhM6lA5Tg3NWmRw=","PKeTUAQgeGuqDIk9BPVzBL8Z0bjihU6L63PNRAVesro=","Wj/9Rud/nFGa24UnBeAR0JeijXy7Boy60mDLE9yLx00=","hu8/5izsWoEvi2wzFm74Bb4DSV2TMaDqlYoQEzrzn5Q=","hhVSFkG62e4dC5XIOJ4NE7mR/hiE4TPa62GISbZQVv8=","Iujki1+jg1O8m1s964GV93oXsh59DlV0yMP/V+E6pXI=","Ld1PXp7mq7h1vn/IryFvLkpXaOoDBXZlVCemi3qxuCc=","pA0CjpmKpUGE/h8jK+ba78m5YzP2B3YZo6JfaULZluo=","Podr8xBoiel4kREKmhIclWgo/Vb5pvtEZuIOn3u+o08=","Bd0Z0HXXicuHVxsHtztPmNLwckufXIk6pesf08bDgDU=","35hpUocFoiEA3z6hHkj1iXikT+2AXW1abzDB05uJSXQ=","z9owO4hQU9ZfFQtAnC4ebRpOsZBBXa1TV2Iuq69F4ws=","pcTsRE+3lTQ3d74rSTHjFOuFoQRtE0Lj7aIwVtGvB2g=","6R08duBFUqkc4liZ9kayyVkpmdV987YlkZFcIE50qfs=","CtnB4/L2CxwZ4wOpEezxD1IdfThEd/ajIMGCYZTrDh0=","auq5IMfMOKoonLF3AtwHGckjWfmccp4fMCwm3yw9pcQ=","20w8+obCHBRUfrObCq2ZtTQ9+Y9nroQtPcodAN9nQ2w=","scdXg8046G6LD2u3ZJHlGev82w/FcVYehR25aQjK6ic=","U/rG9xiTajqTBgxUckdiae89FDjUTANc3Co8V02O/Zs=","UYL6pMtvVokgWgAGcB8+hOVRXQYOHbyH9vkP4zF6158=","EZHwSxSTdAvrZMcyfAbs56/MO3JaYuvKaYE6cPqP/nU=","8gPA7xCeBnyrw16XZcsca/iMQAxZ7GOXU0sFtFsiH9Y=","p2Y9vVnJ1fjyKQIoidIcxsp2VGWOO1fnfVvTX2NgRS4=","EjfHeb8JFkXX0xAiECZICvIks/B3CGXIRPP3zAcMjUo=","kFbrlgHVnEV6LbH9cOqcIwB5OEV+vg/sWWWvQwuxmlU=","AoziyKHEPN1YOtvidPJh1lBtGhMmsfFYOPELY8U0F38=","tcOBOhG/pOnRSNjz6vwVV//A0Cfme/8OfpF4bDLvz9I=","wU0IVP8B1kydMoNZ21Dej/1iTGYXJ+CUKvugrmMOIIQ=","xRVQSFIBSL4dDGOomaYbZgUUR1JshCXU/3Wl1C1y7aA=","EH133dd5kgeiGd5sknxVMGximZXl7Kukt9jQTi/9kyU=","bNr9lGpgQJAOnzOKW46McyCARJkwsjaxYQkf4N3zSis=","m4X/DMzekIclCFKOPHq08NUn6jA0fw5UR8ZFLfMG4pA=","vLouS7WmP5jPvieqX1JEw9FadIdLnyw9bpbndvX4ts8=","OUz4BsqoL0jNja5XSJIwCmnCse5s1J4UqmjbPqcvXK8=","G+zCMvBuMlgUROBHlOY7RgkkrUHsvrlyeD/DkZlMCD4=","O6mBwouI+WM0mW5RuIynG0iFVIm0A9e5RU1SuFaHr+U=","pUczYflbW6mkfRqFGZ5ph3dzya/21PsboUJUSR8/Snc=","yI7GEu2nJtNQnR6UR6zRjY3hz5lKZanUwTRdeIrgBI4=","3u2AhjyR6GtfY9T+MxT0duhUOwwmEFfgxaKm1mWDCyo=","3qCszgs6YyvqSdefMrcxwuMgxMvDlw9yL5D8ceWhHjM=","X8Y7eFU4vuMTNmA4UhlmizyoI1D3v6HJQbR7vwbni5M=","zZhknjRnx7Fl4rFUVahVFZ/0kkq4XoBGRJhjuZzKxRo=","2ZPu8LCpXkNmvtKSc8IHzWgxjrFTmvW8RAF5mrdis/A=","LWU0qcAZT03SneB8EixjtQC6v3NJOPw/CSc3OOSJ0T8=","4dnfycY0smms2uBfwpII2vyWBkfTgsGE7mc9ANkjkws=","Hd5LJCP8HezKxVLobvQE/UlX/DcHz4eK21BiGjKT8c8=","76Q9KTGqdWhNXNTTTZv/uFAU1r5hnJtquZkTxHnBY/Y=","N0OTI6KUlQBU589HTDy3UGCBEvVqrqVgcfDC0qGDzj4=","QjmTw5xZkyw9H5LmxPIwUPHV7LWF9yI9cLJ6dQ+ciGY=","NbR5K9JzEYoCcjJnqX84ysuD56L+Qf89thql39csq98=","t9mYSvAMbhFUpzug0sLwdFm33Z1GzI3iS6cFMNDaVus=","W7IJUf3FEQpeGD8vIpMVew2S7VqSJo4E5eq5h0rgylg=","Zy2PnOwuWzRDxjex2NMAdV4kPWyxq1UAWdJnyCitMZ8=","ohhJ2n4ajPSfaG2Ay8u08mMCfu8K2sHA5C+9d8vA2Ec=","C8MRxI3Mf3oyHDVsvmC3zE9v8XTM6V8E89jqHrpEV8A=","/qdGTmtjVKoKORiGwHCeZX2mZeRKQ8xr6tgPiH9nBoc=","OvrD/KCpKpUi19N23ghhzXRR6CnRkAYFkNVnLrJHIcw=","rTNW9YrAzJV4RU5tgq4+z3whJJ1HqZJThvrq5ah0cpQ=","BWrvW2N6XaoxXZAcfjLQFx5IGw1/8LbcyF+hf+VfiWE=","7qTUUK2+rSDEqGbLBSiLuEjXgmFQQi79YvIoH6SDr9c=","m4sjv7hOATmu41f/PRq3++cdYSEADsk4rj1gbdXs7Lo=","O6T/7KiqO0m7zM4tC76WMCoA+dfCHwNh4Kx6rC5NI2I=","+UU1VdbJhKrfxrIT8xJPO3Rki0j4SR5HgtulUZeYeS4=","Ki3DZhrFfgleuiqsA/MJjYLplRL3F5JC9/A6ecsPiXA=","ON7t0gSOhXiRvFas14lJLR9f+CbUNQT/jM3DFD8OCVs=","3/7gdphB6k1D+tEAwXM2KZY0BljB3MO68XYX9R5fbVk=","PHqjHriBGoL8i++ULOKvWbSo7pvXS9gA/S0b8KfzCfA=","O2lGrbbrbO8vrOAoe5H/XRqTcocZwu0Nh9IiJAvLfew=","7N9isXFnai9eqUlXuFMuwdRRcp9OGq8IK7RKBw+dTyc=","bkxMRtYgF/G2iHtOPLwWJ3qcrdCxR1IvEirCSLjYPeM=","LSj60hAmAlmbAO4SOZdj5cg13tulTBmKI0Iz5IKkSO8=","qw5mI35KjCFlMshbrLXsXelfpRSn22m2jYhmXRPNsTo=","jQn0YkOvruCzhBV2qlNjaJYzK7EtUhIFG/LyZjYTbJQ=","b5wGfX7qCTq4TAa/+6ZEkYYcU7xqFHs8679dtQrtKtQ=","NktICQygUO66ZzkdWgtiyvpsFcC75pN5Nil/hA3kC44=","alqHBvf4f+qx3VsB6QS/lY230W54eY3H2SEt4qZjQg4=","AbnJcGPG7WwZUv7sikQaw9QwE78aGj9vHuHx7eJ4xII=","M+AQEFMseSBfBBZHPwfD5jkJsFTVFLE5HHKDZJl+f6c=","I4r7uMzeVQAwDXjwesTvEbsGBPys5kW5WORTEdYK96k=","c993veHxR3UKtTnsfOWuE3N8i1B/BwYtR9mh1PTs/5w=","dyBLMeW3THR38qrQlATSc1ssQfLUYbkvZGPt+QIkQgY=","rybEcpQGq9z/JUtTfEtwVFfHDxT3rvjwCcwkHN1VL/0=","nP1K7iddlRdkzcvy6DWvBrXRGF+PMPRvwIZttIAJFLY=","F92P2fLoA3Bg+XMq20BqRLS+F2pRe57aros+4yAbkjQ=","8J+gs0crtBv5UYECzKcly4GwzbExmO42mPPQBsaqb94=","IJa73pMaaYHS2r6hySCsNr00/7TcVjDeICk48MEBUJ0=","/zVdiVKPCjUDovy4F7pt8JNswpoJyi+EBn+blP//s0I=","qGJUbXHNjT+vwiSix9FnSrhcvewVLRA5CeQrc3362Nc=","qpbOAapf8jgsFNiYjWU6ZjbH253nP4+gZpg+/8664M8=","eDCLnwI+9f3eal42T+pTE0HBX3UoAqAg4VPXomeKa5M=","Ng9+gNJs70gBZkmelDIqIdScvFf/9qKHkYClBrG7juM=","wNHLv22uuZTGnh4shnWYE6PsYuG4cef/eVI4hDC4rzs=","357iEvXXOrm0CZRo5XdIyazHEzHQBtk+je8YfhBg1hE=","gHp4KhQL4mnS5AJBBNR5mtdU3zzO8x8Bxd+jG1luGc0=","q4wtbi0+tCMjV+lLsgE7KsKUsiPZUPcJVrigUWCWfwo=","iPNx9PlJi+HX0bFXZDSp8Pn9ohv2tV8LccmdJmGiWdI=","dEvsPJrBAxOE4RA1dnwWs6+rNFgpObYh9pfHwWWheqQ=","6ZucA24pGWE0yuLwkUYOyaXttxAM8iKSPkcpcAI5Z5Y=","z+R6bzqq47vDB4tcwZ25O/ONI4g6nmPLIJ4lymWOGP4=","o6rdWnI2JxDn4AgYv2uHiDEhr2GkrBRR+dHf/uOk8ZE=","1BOPMuGeju8bCceF+zh5jA1VGD1hLUVkryR94yQvf3I=","ADZeo9ot0oGGEyFCLSh5EHZp1Q+FPj69H9mmrlDaBmU=","WCsR1B4U67uHUVIDFN7moKX7mmtQdbFklLI5ar7droU=","xhQz1PaTMCDLg3Suzm97W3nAHM8+KHg20kdg9wUagqs=","uxn3uOI5E3ogAhNZg0zHtrP0qVwarbGApo0e47wK/YM=","9lncgyrWdf1RGeqUGBXnwKrQCca0sFsGw/44M0XcI8A="],"block_size":4096,"path":"build/panel.js"},{"block_hashes":["O5Bnq1RwRWKpgAe3xKw/qzoLetO+MTjQl9qKxbVz/ow="],"block_size":4096,"path":"main.html"},{"block_hashes":["fTLG1fs71dbK3kBdXDtfZiZcDw7l2ZGiyeS8gRqVq1Q="],"block_size":4096,"path":"panel.html"}],"version":2} \ No newline at end of file diff --git a/chrome/ReactDevTool/2.0.12_0/_metadata/verified_contents.json b/chrome/ReactDevTool/2.0.12_0/_metadata/verified_contents.json deleted file mode 100644 index 0d8bdb9..0000000 --- a/chrome/ReactDevTool/2.0.12_0/_metadata/verified_contents.json +++ /dev/null @@ -1 +0,0 @@ -[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJidWlsZC9iYWNrZW5kLmpzIiwicm9vdF9oYXNoIjoiS01QOEUtNHpaUXFVald1eUNEM1QwSl9SSlZ3dmg4QXU0SUp6QUJicnFwYyJ9LHsicGF0aCI6ImJ1aWxkL2JhY2tncm91bmQuanMiLCJyb290X2hhc2giOiJSMjFBQmpybVc3cWVJUVppUEpyLTROdEN3TUFCMzB0YmxTa3FFRTJNVU9BIn0seyJwYXRoIjoiYnVpbGQvY29udGVudFNjcmlwdC5qcyIsInJvb3RfaGFzaCI6IkozakF1LTdERVd3UnZNem8za0ZBT2I4WjJQeDVoRXRtbVRuSnY2cTVjLWsifSx7InBhdGgiOiJidWlsZC9pbmplY3QuanMiLCJyb290X2hhc2giOiJXS1NtTE1BVUpuUjlwLU5fbjdhcUlkTWpSeW5YNUNPeGNwT19BcW1EMGtJIn0seyJwYXRoIjoiYnVpbGQvbWFpbi5qcyIsInJvb3RfaGFzaCI6InotVjU3amloYTNqM2REN09pVXNlb1F0SGZudzEyRXBVVFhOVHpfd3BuRGcifSx7InBhdGgiOiJidWlsZC9wYW5lbC5qcyIsInJvb3RfaGFzaCI6IkFPSWhBb1B2ZjRyUy1rOTJoU3VBYmZJclFpa2I1TG1GcElpOWZ6RDRJRzQifSx7InBhdGgiOiJpY29ucy9pY29uMTI4LnBuZyIsInJvb3RfaGFzaCI6ImVaN2FyZEt5dHpNZW1MMGtMX3Fnb3JoU2VlNGpfTmFyMC1iZzR1Y1QwTWsifSx7InBhdGgiOiJpY29ucy9pY29uNDgucG5nIiwicm9vdF9oYXNoIjoibjdYX2xURkVZWl8ydzFVVUcwRkFOUXRQR2l5bU5KNzNPOW5uRUhVTXB3USJ9LHsicGF0aCI6Im1haW4uaHRtbCIsInJvb3RfaGFzaCI6Ik81Qm5xMVJ3UldLcGdBZTN4S3dfcXpvTGV0Ty1NVGpRbDlxS3hiVnpfb3cifSx7ImNhbm9uaWNhbF9qc29uX3Jvb3RfaGFzaCI6IjNGalY3RHh4UnV0TlBoZEhFUVpSYWwwbE93MTl0M2xGNi12YkRCVWJ2cFEiLCJwYXRoIjoibWFuaWZlc3QuanNvbiIsInJvb3RfaGFzaCI6InlBZDVVWHNLZmxYbkZpNzlYS00xTXpKZUg3Uk9DOGpleHYtLVFlQWo5MWcifSx7InBhdGgiOiJwYW5lbC5odG1sIiwicm9vdF9oYXNoIjoiZlRMRzFmczcxZGJLM2tCZFhEdGZaaVpjRHc3bDJaR2l5ZVM4Z1JxVnExUSJ9XSwiZm9ybWF0IjoidHJlZWhhc2giLCJoYXNoX2Jsb2NrX3NpemUiOjQwOTZ9XSwiaXRlbV9pZCI6ImZta2FkbWFwZ29mYWRvcGxqYmpma2FwZGtvaWVuaWhpIiwiaXRlbV92ZXJzaW9uIjoiMi4wLjEyIiwicHJvdG9jb2xfdmVyc2lvbiI6MX0","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"IbEsrUQljjRQhIGbjU8tbP0t8jb6sVNmxqJZbi-WapEOmozrMb9499__X3T-yRObM8eQe-qxwUDlABtYLG-CGdVM87V7rSQGEDojDeIRwjYyN-5CalfMX-MdKLzRo7ZShPDQnAlf8QHTeYqY7n3noi70yaQHdOYWlC1PJr7TuTMWcTXyavmejv2MET8bEpwKdSDOs3XVOitMronU3c08ccr9okZiWm99-ZznLXbh3DNlCdQGo9dAfjhX2VBOjwNBYGjDztFtduRfylRqnEb7o_F91W-Ak5qei_Z6qMz6qg8IQHIFa22DvvkL8vxGxch0TmVGqG_k9WZG46h00xz8xg"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"SIrQaR8xdUjQzVq8n-m9UOZ624BANEmuSpvj5kprIOWrP9eBnKXbYwIgbxBu5UNtykWfP-PPcoE30eZFGjH5KEYanou5ugFJpTeWBIadTlcIIweZsJYcK2XQMOzcJh9EAAMl1_wY4EXO95eUPLXzmgpyrto0LD-7y6Ec8WKB5zk8GDwm1kAEihkRpBZ4cygdfvfFg0swovq0ppm9qO9SljswA-Ur9V3VYdPvFCXSo48TxhrXVoHxVNbtZOp0MFREJHZKUozQoN8RJzfFwgo8ycZTsPYEWmnnRwY1_ZF0_ky3Nxkc_G3WaS_Y89mXybl6Jj_h2KnpHC-V-wONauz1Vg"}]}}] \ No newline at end of file diff --git a/chrome/ReactDevTool/2.0.12_0/icons/icon128.png b/chrome/ReactDevTool/2.0.12_0/icons/icon128.png deleted file mode 100644 index 6cea622..0000000 Binary files a/chrome/ReactDevTool/2.0.12_0/icons/icon128.png and /dev/null differ diff --git a/chrome/ReactDevTool/2.0.12_0/icons/icon48.png b/chrome/ReactDevTool/2.0.12_0/icons/icon48.png deleted file mode 100644 index 4746dd3..0000000 Binary files a/chrome/ReactDevTool/2.0.12_0/icons/icon48.png and /dev/null differ diff --git a/chrome/ReactDevTool/2.5.2_0/_metadata/computed_hashes.json b/chrome/ReactDevTool/2.5.2_0/_metadata/computed_hashes.json new file mode 100644 index 0000000..fa9d273 --- /dev/null +++ b/chrome/ReactDevTool/2.5.2_0/_metadata/computed_hashes.json @@ -0,0 +1 @@ +{"file_hashes":[{"block_hashes":["pFIwDQdHGxon1PqVBkmElnOobYAYWgJ0Is2gQEpSheg=","2Yr1jrMdk+f6yBA4h2ARBQttEJ+ANAouA5tQiHbKoD4=","oCthN4eDz2V5pQZywvBADyDkNqitxZ25XBxuQBCUlV0=","AxouOnz/9I3B4u5md20+Jt5Ws8NIemrXvlUIVJ6RNek=","JctlO+oZdyoEcGZkdDcFdDrc+Jua4AcnA9H6UCkxhuw=","ULbq1ogUZFNQaMiKOImnTg/EtswAI6zdYVLtXPWlGm4=","4nwX92N1ap68ctTB/188geHwrhbgkMSv7ii04nSe9tw=","TAgLsTsrR1aib9oX/FuJUkqyXxTHiGy9NYdq2LxFejM=","Q0VwJfNOoxdfM7nHllW2yaYwzWCxAkeq5QaaY4wUJKE=","Yqr+1EqZ6FEJKH+Zo0lc0qsiYzLnsdBzxK+4TzeyVNk=","I57yszsk6bWK8bU8opcDxulpNDKlO972Ig8QYCFb9FI=","OxEL4mettsyU2ONIOeEGYsTR2z3MYs72QrJ53Ry7li0=","+iJE9TsCLN2d4umPBn3Y60+ibU2vJsXlSLGyqaz4Amo=","mDyJNwIKTC7tDw1pb9YQ7Rb81tExe94BqnvSOXP8XWM=","LZW7kezjciQ61JS4fTLrF7N/aL12Efk/aBKlmCAfTwE=","rQu7BHWT2pzqusTm4MADRSPASY0x+LlPRehf0/ON3DU=","cLmgpLYVH5EZx381JS6Fo3bY4Zl+if2qah7EauLKJR4=","pUic+vU6Z7ZaY/1ew0aGkl+hChRJ6nlFS/XC0yGVWWE=","eX4UUwdiiuqij+EL8ncdZHHlnnUyDxeyNVUqmRR911k=","0SCXicxinI07lHpjECMhLd9bR1YLV8KiWgd79TN7FOs=","ZIloqdNdNRGG/ZKy117kWU6ti/aGDKWNMsz7wN2fntI=","6glIBCVuVfwSQJSIFi+Wolx/oIC+X/YIpfUiUPNlHVo=","GUZDz9cKXt7tNsGChSGT2V6dmDsDtdPF5ZY1ZEC0+Gs=","QiTt6sdOM0kdXY37utPNe1FuvhMzOn8QafFUS+ZG9es=","dkqXB+cIJ+bZ6BFvU2JzLpABjZDkXBdF/u0zvl4RvKo=","Cjrdg7rQOT81ubKalzgIvlF566YZCyhO+zUKCje3JYg=","5sVtUbWWA1LLNXMbYt9kDvq/FFOWFZZ0lt9PfxywHKE=","J1MoMNqzJjW4XT68LmprcOabxbjRfYY/sltftdYhF8c=","LZ6U3PrPJSKpkeXxtt8llFeFa5GqrFW2vkhlWiV9+DI=","10PJ0+VfNJl/92y1phP8VUzy6oV8rUr5IrdZQD9+uys=","upLVORf0PGuZyLV8lphigetN8YFpxynrSJZgTtms8n8=","cx6WAdZCUiXpYBBv+QSiHDNZfxzoDxizSxDMBfB/G1U=","qKLxnMkU9lv5CQP5c1Lc458lJKc33EyQm8UPQbCA8rk=","QK/Ue6cNtRbf/65hMIMcaK0DINUW8qlxPjx4QVeywPY=","NMu/ugFuaQ3mtv1GCHdDlnZgv7iDSeG0AoPyybkob9E=","cN9VVZs2LS+IJq2h5MRK8QXXycKZ6cu1gyBHuEa1MUU=","PXHxlEpmKmSgYyhbfwJV44pziDyYj+DmkEURrRiuEEo=","69RkOnKWpFQUkYzgGjqQhDWoO7o1X545Yl2yYSkLMwE=","F8RFJDhb9mjK++OgUJWolaqA326M2AiaO3DyAcY1hFQ=","KC4E8bARtqpzx62HA8+L2wQKEb9ba9WOA+PGGSuPNd8=","sE2sgde434qv9MIF41RWpYXf1w4IsOcm0amVnB9bEHU=","cWI41J7mbLRmGb4dsXwjuX/pLPm2WHJIFZ+H37QEzqI=","wMKyBRgYQYr+s2WDgn1hqiDpGKvStWKMJfsNJ+8QC7Y=","xV6Sx8SVqz2wj0d2pXE4v4VaWRp0/SQp1SRTYlWMaro=","hkw4TYCS6dhx4fpEjl0CvbZXcRY0GhBH1beK2NLL40I=","zqXntbu+fIPT1xE0TNIDXsPcfmGQpKZSusjjRiJ6uqo=","/Q7e9HfXfLW3y63nObg48agyvmhnphmcmjDHbSK5VsE=","kI4SNi7n+9W8xfE3qZP8E1q6PjFKLFFX6AtTVBca6Ng=","6pVpnv7EuXIPZ7zPvEXOKyCsWwqqB80FgmwoEYL5D4M=","4P+s5572ycn3ZntpdLw/Vpae4O7nFwvyMdsLxY9ARow=","FAzdzThjU9Rt8AqXRBPmdM6vJCwf/tDtXgRdLTTCyMs=","p2SpY+/YTmL139Pxanrm05VTWJosEEy3JZOd2PRQs/s=","Nw11L+ETejP3dDp4ZD9Y9uUiaDN0VPoA+eMabHoPjwI=","SN5qwZrXlKnc2bAIi7hxHSKidrDmm2E3dWfEZrA3YbQ=","HqqFtL3+WBMWa3Sa1mdvQaWg6+c+eT25wLcDiQkTJaw=","cRBvLurOt7F3RpUYVkfIqXbXDNfa5KKydcwzUNbdVK8=","pr0mgs23VhL+IJofToAiaofROvqUCpd9UtgjKqMf4QE=","L4RVkZ61x0LulC9MunESKPYmbnqSi1XaKt6zgcFCmyA=","y3bnf/YI4iU11GRroFCfPQBHmW8EmLIfT4oLZAZyQIo=","a8MaMN5pKEYMdb76qSrHcZb+FdbIfPVfaaqA8isx6mA=","9R9M88jyRakT+EdmNBAh3MIHvEvAYChnGhZxa4JDyhA=","oOVicSVlweYKaiQ5ugZMFLghY82h6IoPYCizNCva+g8=","S/SqNEN8nU679dsCANWscKaRvW2rIIG9RVpoDQJyIIE=","w2axl8aMFZWE5FWA9FxcmT7m93l1jqR4mzk3sISmKIQ=","pOXAyXbj7eMTplCP19oiaphIXRhW3E/873+iR2xtTKc=","6fYCYUQmDm+wIdo6dAqoTXJb7iWGht0kO/H8/4pQhGQ=","uu2uxWS6LWmErNuYdcOulmngkXBGATMdcvzfGUh8JRk=","s53IARjcxfAWZeLdqviXi/X5AA1PiqTDryR0mw7WoJs=","y0Qen1tcEcqhZXfxmAI0TnDtR5e7vmzz1hpH+pYbe7I=","i/2rSUuClwKHnj3OBL/lDc0s3gBLz3oa6veMguAzsqs=","Ltw0bcEMZ66zTdKIa6QoeXaj0+WdMBTbTGpF0gk+KJY=","V5I5zuzzmUkaFPNy/twTOmossE/67fN4fY4jFETFvZU=","qt9tdeFkgjS7Zzm3FluUyPAvjQyjQ02GuCqbAtnIZBY=","MqNB4j+jrqXwNSAJPnwm0CJZGCYeeDHak8hQAXI6Tbs=","JlvS+31ECO3VJlcKskbn7wJOkwfn6colc02xBl/wiNU=","Xq7QJV0hcLClttqPKt5bEqrTD6gVtyNOQzzJ9WWrk8k=","7/+Aam7JMLLosMWGM83WJWtJd5ltPWjZPjztSfR/5qI=","FEg5GI84e5bm6ZHr8yARvSftofZm5qvpVKO5tJ1/waU=","t3otqFPHNGrHxPRX6vYthtfz/ZEz8SppVLE06iGqh4A=","/hzEoDOojGKGt524s6wlVTDAC4UWlxclpNSXX0OCxrI=","ZZEo7nT8Fi0B6jEzQyPS7AYZ6qcWYpU5caipVjk6LS8=","OCVMTYAA8zG/vZi1Q6vrRuUbElhCM5MUD8OJungDGZc="],"block_size":4096,"path":"build/backend.js"},{"block_hashes":["pwj6LWbdjCE5xSw3FlJOIWIHYtREXMc621xo2dODj5Q="],"block_size":4096,"path":"build/background.js"},{"block_hashes":["mVRs+tJvxAQGJNciyf1df0ByP23XUbTG68WaVP4MhjU="],"block_size":4096,"path":"build/contentScript.js"},{"block_hashes":["HlIFq/PDbacr/rrPoq0Jd/4ZZjhOw+gDoftZmHlO6uc=","J276OMXFTCPR41tP45Nzjro6xUUV+77/UEN/SgapNbY=","/njAv+SSzVenClzkpPBrB1T9hwhu6Yn5x0zxYcOF6ts="],"block_size":4096,"path":"build/inject.js"},{"block_hashes":["z+V57jiha3j3dD7OiUseoQtHfnw12EpUTXNTz/wpnDg="],"block_size":4096,"path":"build/main.js"},{"block_hashes":["QcAVp61rlK04LD+/IjNZOExgN+dVwbHQRitigeYy/Ow=","RzdiSAEodhLx7KSPrNj3TYNuh98Y4hY+EsI7vtUHXO0=","G/3ckZ1WBpgH0lQw1wYhOr6VcwXOb+ezUrT7daiKmwQ=","u0DsP+Urflxd4H735h4e1+mGDe9x0VT3h084rI0kr9Q=","d77A1Vg4K4etZXXdATf4j6+sHLe5luT+WNJZZfaf0b4=","EU2mcMBQ2jLa51rr309pEWfYDp3tssRzu9IK5TFTOj0=","KaP1g/ul5MNqp8TrBdUMaCGNQVHqAiE+vTUO2zGaBmI=","GPw/Gg7r9k8mJ6OtCfKHX9zmFZQMNb9ctln9locbRaM=","CaN0xr7J5QZmRIZCdMrQ/XD4Z9iJTQDnTP8s8FBTDKo=","iAzal0HBTVmluW6VNVVj284SYRPxIPAj/XW+jt4AzD0=","TEz/D96l/b0rKXaPSh8GiCR1W9vHrcWR863LX0ys/vE=","KF8Rh1o12E20qQeEe4YGQsjTylckokwVKXHM2B65lNI=","u9oTDzCXuoO8+ToxzVqguD0PDBgoo6G5Q2GMrT7eJbM=","U5dSc85SbmmwDr5GpWm0d6h4SsqhscxmjzjvrWbAe2U=","RQwlLpCxpJPStgQ+6DLFHTZJ2xxGxaX+EcJJNCx4tT0=","vgRL3wHjdg33PH1W7y3dwbeal3aCJ/rhh+MnroqGN8M=","Nbs7fB2hAMcPi5uYfZtmukDO1I/923yESkHG4GQYYY8=","kn+RDKvfuAoqzp1nGoX+zqyPdPDoPg8rqFz6+4Xowr8=","3DiTjyS+MBmmutjxTJ4ZHOwyerjmvk5ZzApHelpj+tI=","RSRPxvjlqvDEoLaIYlkc8pWBPspzrndWIWImqOVLKOU=","/pFOYqQRmk/ZO+rgV9P6kQzbUpL/WLNTHmqRlGlFFUk=","Qx3uCVF7Imi5ybRWIPYIzrG60rnWMG53xfXQ+owYGWg=","fbqBb1F9G5Jax7T8iyQzUM8BK6fEi0Ex8oygM0FQfQ8=","rBxyPRn75b5jXyNW3hxFjVjhlZGTRgnhC5hhZCkGahQ=","Y9SuP2hUlMwleJcHccO80gNbSPLcFftX9XeSw2XtNBQ=","I1u00u7kQQPQMGUPNIHo9a4RntgP2Zp2iuIFvcIRawE=","y6b0i8hWmY+yXFbviLg3lE6ig0Ystg/2JEFpOg+OThA=","nG+BCpYWDmwppoju/+ENQbD12xA+0rrNgoU6nsm1AEk=","zkZx/l5fjlGPtP7+2Bx/RjX8HTR/r7L4xze+J57C+3A=","s5TosEzOld1bOWmQph2wzDXlmJ1iEhylrTwnNZt12wI=","XywkreLvspw8E6AmQGlQKkxJJJzFbhCwfHD+ozYtQFQ=","iEfu4QhdFbApbbJS/tssJrOj9yoxmw7nuiGUlKwtEPc=","/2QB3rQ7VtjRK/ZpiMPHgybl1J22Y6l8Nvhk5guKg9c=","qBLOX/AAc9RtBRGJYlJtARoa5XbTEJpIWKcTL5xQKdY=","fF4beSS2qeEPVn1Ub5/dS7OVQj3B+MAmiTRQJtQ2GIo=","zj8of9DG265B0ZiOpyX8cUAvFaQo97W9RsSbSrpQ9jo=","Iqb51xDEifzMiWCyUmDGELKKwemulknICXgvzWgC65Y=","yo2dTv5zea+OmBg2n7RMhCBW6fzyHBm19VSlPEw7rPI=","SnVm3gom+0dzRV2rw8uJa1uGYyjncVspmJAuU5PAuOE=","/g2YEjHj4LTPFUUQNfOg8PrkAbOH5Orl/REVQD8i+wQ=","YbXN7QUncXjj5ZK6rha48CuM5Di7iATjjGbW4gZs9MM=","+97q3G2KwaVo9GXoCJkjtKqjvzRJH7ZKlRStz8GE3R0=","Y0FL5FJz1t2HPtA5QYEvp7U0MIJYCBaAdHKep4MJMsM=","+9rp+N1PnbYTmvp91iBQ2e4t63tPBexQpqb3DH+VpLI=","XmOOr5OZDZDDSZA/XiyX8hGXgygYgYFNdCXLJF6pRWI=","tFIasbzMXgOxgNRawiPdu3LGeLMlkVJBuekR7jtcX9c=","SJET346BrSGy5n4ZE91uVnwxgCvZ7LRxpaWVyo3GMX4=","y3ERIt4yurzpLonjnUT3QZH2ta09xyKPPI7cmEEGBNA=","1vk6ThSWGiIzmR5G4OPdTKc75uMAeHzSWji/OSLeXzQ=","dyVbwT/p1KIUrhZEy8fqydcNdIy8K4gT0yuNb38EsS8=","41k8SuP4waDyt7agvuFndocc4QMTp8+g3CG1FxC8qL8=","J90OVjsql6KGDl1LzgPIdn89bAlKLuAH41IMe9MWwR0=","to3VjB5vEIgDjr177ya/ySpDI6co9k7rCDsg7mCirHQ=","Qxe1rzt1vY+RB1IQ7VxhRZl2myM6tf2MLZQSvXSC6ZQ=","al9DqEgEdl80pMFHpulmNs6vY84JRL60a2aFUlqen0I=","6+Vp08hBl3guS9708EberQ+cwcXXHuc6s7xhmR4IB1o=","/8EG3yTpuOyWujVNXeDvq0nrwf8jjhzykB/pa1xLUik=","1omoFSoCnqsaqNbu/srHoqnPAuHrmqDfpQit+acQXSk=","v5rMePexKN7aR1UvHqcMe/gy2LIjxXB2euWsKp+27LY=","wdZZPRCenj/fhiIkQvXny8jVgcLxTpQeeE2typAdaAo=","S+ocEvPDbIH8W45Dj9fih4xwXQppyhXQntExogFhnp0=","Oy6nCItXHQIT33VuT+4/Qkb6FgilR8h6qtuxfimqmDc=","Q7zaJl/sKy2dm+4Bw7d+bwLUjR7ZZ/23D0OjXY2BWso=","zi7rQvUSklYl1r+5gelZMpS1crLblOfJdXyY1RYsAQ4=","RrKHa85wR1XvcJMlPcqcs4cCQBtFzUiQoEbHigmRpMo=","CGDem/anGdjvviFUo4GJaMX5CTWHj5Da6KVtYD5SW9E=","L3gpb7HxCk3sngxEwiBJMpjzGv4RO4n6YxeVHCQZYv4=","wjxWqg8+V4zVKMMTjmyJ3IEkK4jA7a/+oqAYH3wPuRY=","qArVPAthn4FUY3uz2B8wmBdJQmeSYiVsmf/net2h9fY=","7+NR/idYybo0NeUmlfZrvm1LPTYisNRiB9dKWSBh7r4=","InFOdsPrIE19fxiax8eQIsUa1UZ8CNUPNYfVeUmVlNk=","HOH7NPGUzm5T3l/SAwPMsMRdsVb6YrvpHAwZQ0HTc2k=","WGYyf3x5gOESO8HAeEp/3iyr5l80FupbWpOfaRyRC4A=","2ebva526yxuwpo0q6nvMSFFkjntUTVTyh0v9aTppOqY=","4XSpgI+82gZWSL72/FIYBHzhsY3XydyCTo46FXL+9mI=","kfIOvRptZ/EEsTID4MJvhKeQuF8o55hQk7ZWmwo50wM=","NF9n6rB5u7LPz6GDILQ6747fUWh7XHnBR2gSTX0Mrrs=","htHLIDrpXl9qUV4RGnveq/DYgtmYrnMTn5t3E6Ha2GM=","YI8ck5717McvE0dtij99ZZwKqLa3bkbBbcXqGQY5wjQ=","DdhxpJsNLtfGhUuq6EFe8LYkaWChVcGwEQ7GISjE1J4=","VOS9hKR7/3T8Si9yHtTuCqaeE4fBidlYaAsMl/C5KMg=","cclaSTzCEGZs5Pq2k3V5IKNfulXm7X+owpv1Aw4HBvQ=","57Vq3/5XWOIeSHDdVXTvRL1zhR5F/yy8XXwnSY8qMlY=","dr+R+kwP9Ns6PwfS3sUefRC9XA2GiV0gOAJyMDeuAzE=","h8GLLkSfy4ODh1v1ks2TP75g0tLrw+9cMDBK+4/kcME=","mYdkn+7c1KIR0GDfSvIIrHNImeG89jXGQ7jryDBSIzQ=","JRi5o2ZmVbmUZ/WXcuBZeS7wREijz1QnvpXtPlXTWqY=","q1ISlwhuKZIpLT6MWCPgwbfkagkAtMxQT6iQU08oRKI=","PKpj3tgU2z194jE34bcEluDjCqgGLhDZM/+u97+oQrk=","D6eOxq8u5ojJK1qFmsdaIWtDUiokvrIycmhfZ43aO2s=","AozQ2L6XQstJyGomVwZobuN8I2mrspWeD5EKvghC3kU=","CKx+v/74EIvgSFoxaLiAkAhIuf7NwqC1WSXVCcDPd2E=","4kLYoUYgLynDr1KdsdNiOFS5PdJh0DT7k5DeaqjRP/M=","3/55q+jq3dEzVNjOO1CBSNMHNjFqJwHEQGO4iETEm6s=","iymCkrr3ERf8Jk85QtWK5dfgEhYQDk9vjClSN4Xamvw=","s0sb8BuYrzla9m8B0bCbsGqNFzEeq9vGeMPi5f1p1Bw=","zg8WgIj0TOhl1xhNah3xxEGLtd0XCSRKP1N6KGs7HAs=","G5FM+gtnBXOUB/OOKbEbGtzxL2s7UW1kon8nCQS3s+g=","XfWDxD15arYZbLl0qDTBPe56yKFq7sRzp6E6aT8+Kko=","3p8NqblTMSnIR+6R7REoDgCbxnKoqdhJCh/SmY3EwIA=","9LXQU3oRPyilh3mbFHyEiJhEDXN6rexKRYjfIIZMqls=","r1ow8aeUtEnyBWNxzCLmGDgl76X9YW2fkLErAH4iW60=","FWLAF0sHm+2d1TSoOHbVi4y6T1MRCoeTwxg70KY4VNc=","ckfvb139i5WfdhKZ1NG5QyGIF5kzPU5st6xgtbG4csY=","GT9coRENHchOPNGryAM3cZtsNM9lqiTziLvFRUuw2MM=","YjI0zZlC71dChKv1uTW/cJ3QakSfeLoLDDekJDjSBIo=","LxdmLqBFlRBC4hqWZSXBFuTcY43mQGDV6pFbF7XJa8c=","BdkN67wgx8g1vOWLN4hHnyBobAYeIrsVgZBE5QHFZfo=","cuPYTq8K14phw1lAjvPoT/EcyWMbdEAS8X0FTYdMNjE=","9pfkhJtErvUb7oeGTDdp//DHzgTfL6Ss7JNEBRPQCVg=","s+sJmlPeMlfEjmzNMBUJ0eFIy3gwLTUp9kjGgXtEzJ0=","+7CzoW3EKcfdmcuoyDESJPxx/j5AWAjn6X/li/A7fcY=","XobcFgIHWF5pyHPfaP3R/mWBuk1hY0ffoM/txGNzMZQ=","0WwezO98oT8PnbveMQTJCkJVaSrgjoiurBuUETzkJtE=","Lff7NS8wVfem8FGT4IUIWVavK8uRX5FER3CFknTMxUA=","qMwdOuKW5GteJg/oZbYzdrtplJ6iM6RiHQaIL80kf1c=","PcDm0SExMbpx2X25vXp4+StF6Mub2KK0JSTVWd5e1zs=","K+0GL9kndDzehd7hMEP+jXk6pNA0Ycz1xKssurWbJtY=","SVZ/U65jd1Q9m5Su/MqRgYrzaCdtsAEoklizKiWhcZA=","tzwqGzECtj65MuXE6NWYe92hak72iTopmS1mCGDflqg=","ox1it5T3mqc/pFTvfn1zmZAHugpfQ0EkRDKjnIv47/E=","xoZq7mMsL5947a4fDUFlZj+aVrSwt6Sn2LFC5wgPaVU=","0JdrnKMYdlEyUO3JLK27Kvnl0Gv3KliAQEywOVL2Gdc=","OywRgMyKnM5dOdF+yOBOl0/swxaLAkzTxpweaC518YE=","DG6YKSjOrJW80NKghwBT48TaOWbLd6creTZLTxf2bmw=","074VOsYq+FPEwxlDTVcdtaR+02skze+lxnltGIR2x84=","RBPGxv9DtnxwOyoFGUHuFUZ9ir9AZ363TaDITQSCDjs=","4R+MvorVYI5ckoNDgzPEUciF3jdOkE5kApkuDn9N4ME=","WAc3m/2px1Y/6JZg0eDsnGFiGTAVrYa+FoRevG2yt3o=","UJM8ljOZ5b7ef5B/UmGnIw14tSyUILWUpfDScv76P2I=","ucV+586C+CNPEUbF/d5CHdCoaL2TsmQAYYd0z10LVDQ=","/GXBThTb8WLTo8E7XJZZ0CMSOZ0VXwC0mfrX/Vy/jds=","Z9sdclhkwHWd+uTt3cRND7KiFfE8Ekglv33YmvmMhyk=","BRqJDzcKRlqtEGErirtx2nXuyum7tG8Lje3O1HGE1Rs=","xVqF5x4KADillH1ofBeIqlLi0OLbFcYaG/K4Iz9Anq4=","Cb5eGuHlEd8pceQYSY/EF7ILfDwPqH6VcMa4ltCGLy8=","xR9+XXZMbUoFMd9PMzJYKu8OPFMsPGtQ5YJi4uxW4GI=","xUFMEaaqUPfItkpEcHMwl8ehXgofFg32ZsL05wvUOuw=","bKiWtQ+ZRIwTkpyM8X7SKhicODUbgtDnHb5vwWCAIRg=","d8uHU7tjnwpdm11McxymnISwVGWSpsOfp361p+28AN4=","KpHiFNDYg9DO5XeJKNn+ePnpvOVqlAEUFNLnacrlLs0=","jIph8sXA4levSI2bNIeMFtYKvL1Z5mtaQJ+rtQSpDPM=","p/1ug7xvAvy3oJmNNDol5w+GDkmUmV3Cd2aicxmBOiY=","gxpqk4ANW0WmUTYduzanmyNPi9ImcNtB8uYFoZ2loRQ=","mTea6qJczqW3QCRVBE+O4slSnoBlNe64CvyvwtqHEkQ=","VYUk14dCj0LYzJdkqKL0q2lvH8T5lnX2EoHrYGbpxgc=","IasTF+U5C8xFzuJHhQLOLFMo0GDCzXTU+g+QFVm3wqo=","qCd5IKrxp79+0cnKUQXTiFqmz4PXutOacn5gqa8d9HA=","cWZbxuh+bgc95u+uU2TNtI9MwCESW4ZmwTmV/gaIiv8=","08X1iG5nFJZq/wUtiZgB9uLawVgPo3MeHKmCrzdutgQ=","pXy539yo6+lZ+nxPqO2gUPVsktmqKr4+SDMg00K/VDc=","I5XRFalHv+gmxtYtZYGGuSXNwDvcvJIVD2wdeBFaoOg=","UJiDwcpIwq2SzBqikoBahCM5WN+oFmEqPPqwyMU83dc=","z9MxgjZ9G0FPzDcmsIrIILFZ0U3G7Z8o2UrKdUWHRw0=","nNV3CDgCcq/O5wJDhw7+vZqnAZwCrQ+LQiwcT4eBH+0=","9KKCYDXYQIwFnG7Tz8LMEwtJPjUImmW6Wicj1N+0OcY=","JXWAGks2iCUXl4M8JzPl4wW4nQQbZDedSE34zqDd2ZI=","YZHGWUNyKcaicd6s6ne3iMycRGm1zYq1auQPQGZXSxk=","tJlQRqDBmrY9w+NYZFJzcssVFDzE/8FQtxHgqhAloXo=","mkwAt9BG8lkde7o8kpvXUIC1sQKaEpkBgGXmTToDehQ=","20ugGLtXfh5d1lAa/49AVRQD7wrnTcExjaVlanepTKw=","+eRiPAu0m7rlMBXCcdiFuti5kuPpgBPyc7IcA5uSWeg=","vRAScSdaLlHQbN8frcxpNmYuR338psoJU3CCZ39Wj8k=","5GAsCeEV8fqsYxCtVSjmeREnifAN7w7ewwczcTWOAsQ=","hTxXKD1L/kRGTjqJlQVQQM2g9ewpCam1Urtesf6sGTs=","ZzIOf+j2H9v3Wa/mKkCi/j45mQOg/LZibaul+hrhVlU=","vxeQP3t9YaUWcJzOcbMpV45Q+jM0HU2QaWP7k39yMsQ=","GfAF3HKX5jpHGMrd1c7gAWk1H/nB3LBagVbqXbb2/uw=","RTAqviJ419fvSwv0mHf7cGn0XntcPWSOMFXqrpkHwzM=","4/mtNUYQvAMqi/M2U+65ghPMYSE/fJr7LDWMqWDdZlY=","c5VNUCq84Xr0B/ZHXSUrtNjvskRGDQz4UDkBpqKQ1dc=","2Trgvl6ZCsJ2SxR8unZeuv7firzDHQ3MwrckcEvwrvw=","EkiGm3hL5YrWn+diiVEEJpDItf76wlGDjV7hyixFTyk=","r32iCZiJqXg0/IuKG2DzV+724xYm4ox7Qd1t5ZuBN5o=","Q5v4BWBUBtAtOoa2SXSZDiqhJHApScct1S1LA8W0QWc=","ZR7Z/xyAsmh0zRl/huT3iC+MOjLbwUInjQng4ejjnbg=","OhLCZQfXwftfmd4erUPbdoBDAm8X8w3nufKBEqUyWRw=","KzVeAxGCgNMHg0TJ74aNykBkhX2pGjFFTc2gGtGvGYI=","b5e49sezlr4HGVJ6ni96nD7cflula3cpPz1V+f5Q5nw=","RzdEG0j8UQ+fTHRS1gYkdBxeQZs1jvyQkXnDB6FBtRo=","Bq3vEozeygmdMzG3PPw0n+sGR+LbPmV6eQ6LIMZi0Pw=","hskZJVn6g5Xi7Q7LQfhPikCgMpkL3Cy4FktRjL4vOrM=","zyg2iFcgeVFZOkPwqQ351LJ07PGN0IpoUv3QL505/xU=","G3HAb+swNImd5fwgLpbrMkHOx8vdeJVbKpcD02ZJT58=","RPzARk3RNWwsZomJGDgIaH0AkB8OFTRowGCNpnUoAeo=","GvctCPYAS5p4WBrXlzVgus4ZhmKPp1v6dtKJEZmuFEE=","AqfqXqQL0xmJWO8y4nlTl8jcUeO3JPImVujZ85UonME=","2cSxsuVokxXP6inq1nPdG0j9k9pI1J1ciI3Pxi+aZDw=","Krvl1VrJaK4HXAbNS+GoBet94PQu92nSJKJSVpmFXho=","ldUPB/EaeLZNSA054t7wiX/yN+LiGE+9friCbRRKBPc=","VsmSkwW0fljUHFwwbufqqfvJuMKIaa8cuU1C/sAUo8s=","/B+SnwAUvbSXnodP7Rx4t63yMkIqf9eF0/3z2x24NuU=","LWScgvp+hJ3JSSK9pW5wfVjtk0c/VDmYUkQA6P2OvZ0=","FvRZoEhO2Un2/MPBL/G+eUlivmL46smwbRG9H1gst+o=","JHDsx9ecftdxOo7gN8ONFVVKjUowFkxMKzuEruwuOYE=","OEZ0TIAL8rn7U2eUGeHRw3GC8cG2El4mWRk7SEnA3jQ=","0CbdpYwiVCLyXHSKnbLH8XL+S1kp7f+Mzj4Q/CTRXGw=","C/adms/yjr4Q2pJcrnFePqp1gMRevneqWbSCATW4308=","v7xhqPx9i5neT5Q233beW1xSjMFvSF2DbKzCAelr3Y4=","nWGPfN00lG09u9b/hYV7waoYxbO+jnqft59peakIEJ8=","vssrvYcnFJj3evMf3PwbESgCYEuLmB8AhJlchwXbUdU=","RjtdMd+/1CpxIjhBDmungUNA395MJ9UGXm+sZvHFeks=","UpOHVWHLVewTSMXbn3dgpXlACHdxcZ41yw+VplgikL4=","4njWmqQpx6uwzZd/aof1HKdbCFe7CrJc7bn6kUCNCfM=","tY+BrIh/i0nmuvgI6+RUREi1wrRa7kcoJs8zS8rHSLA=","0Ga1R07R0dEN9bCN4D0zerXXBYLt1tuODngBf7Zjq6o=","qX8TsnXZUxRa2qX2usiWe+9LZcffYvAX9hBxY8EnOAU=","tXzFTxvslCxoY9Mz/bwVxYFhdJ8VsZu6eexx93zWeMw=","92nDnwzWxmPakdX5OZmMcJ8CLMsGm5snrZ5UQCdkwUg=","1eg5fm/7LnEFHVaFt8S7QixMww2dspIrfkPIim8QbsM=","2snRXqNOEX6TfSWxK+N4B8tTUuhBa2cdQBt+cFoK0tM=","PJ0/z/kdRQeVymn3WV3hsE/yVVzX85OELSExLpFH4Z8=","m9KjotanAOqjKwtiXQvJtKQr9Ebb4mh/3IwVXLElttM=","+u/L1cTin8MH5Mu79wWZ5LXxKt12drX/TpAeHy2qi0U=","/vHgU0eWH1VMFRaskHoqom3PzTsEypKKx6QgwcGm6W0=","Z4iUVvSXPR0xk1sfWNCa5Z9R2Fr33zjFkz+9qla3Kwc=","cs8xKPJuigAX2HefXF6iFsBVBU9Ml6X8N8kcLhHC0/4=","GOpkq6waSpfjmu6Bpa5Fkdo6Yp6IrEG3XUgcpikVyRE=","RBWkobTosNKAEG2hmRZeIcNaHI43/41w2EsbejudsrQ=","m2Z8M7QnZopFdHG+lw2x3cbAj7PbKfR5tMkq/j/YLys=","eUtv9pXpBJlr4DSsDVfzj0/43/gSfMEvZb1GbGhQK24=","Bq5JbsoJK5uIne7mCOMZJBrM3NosY4ZbuJqjv7n5ims=","oV/iZOCGx1GZP5mw2jn1J8Nok0FEtFMo53xXMkv9+eo=","7ElWhLK0jM8TpGawmiiNHm7pj+P0MiHwpoPGGDML7r4=","ELS3aHDbSNdhIsT5rW/VhhZ8vL7EAuE7EpGQz1rJmhM=","SfGgNqRKyMsiSsCQJJj37pyUYRqxDhF1ZuTFSU8OfsM=","lxMOv8IJvFHng03lAD5hK0uPFHmNkt0+q30oGEJqOlU=","6eBpSRXJUiy8+pR7CPB7UP5Gf4+Xfbdcgy9tsMzZxKQ=","XJfSlQhFfxXngj63MUO65mMgATpQLFuc/hjxMQk4Gug=","hyHlu3X0mDOgpLcbNlDWMKVk8PeX7u/6+N4D4VAcIgs=","zYZjh0ZxcCMtks5b6KvxZAtDjOzL6lxDO7rJaMOh15Q=","oKf7W6JXFZkzXhld2S6syWfhcdaYwrC/SGn7ZD2L5EI=","s15Ehhcen2D5DtDuL/CSTsjj7PTTzTdMMxHDR1sZQxs=","WnL94uHEx+ZExieRT1vlL2CHJEBNCLh/e3Mr4O2Loqw=","MdUplZsN8De1Vq2Ct3hOodAR8HNajW+pYDfLaa4dYHs=","tSZMWp9cEdVidoKFvQUxYHj+d8DZzYm/IAlhDDeAPt0=","zQOkj1/BEy3uHjMJ6g+NlJTSXvi1kJFdH1EPpk6kqNE=","C1A1x3uLiDeuFvekXNB/krwNgr0/fKXpIMciSNNncg0=","cIkqbt818SkJ9mPwELa9Fd04xl5EImH3YEzP6H6HWsk=","bmEJ6NSVCZFRxCrAH6R7D7kaf/d4ccSB4K5Re/8mqGA=","aSR9TaP6Nx6WYWMrfok7cLLtdjJjvo9ZuSviVRf6W0A=","EYSIuwzD+lLrqmQIPAVoaAn76i1z2r2877hl01AVyR8=","u/1X6jSA7IiB39GLvljKMoG5/k/9j6P4ot5/D6GrJ2c=","exFR4Q5tYDH2SHB3q7dTkGX3t+RFPSnJuwzEU3Q34YY=","t3HQkTRExULLHAi2otRWSaTHu9ZiSb+LUwj8nOu7CIk=","LskqjYYHaJZx9u1CLCCpMr+WXa9KhTOFdxgQKgWnVCA=","SvOwYvN4Ozw+feK0T9iyP7StusZ+t25OlQmSK6oz5Kg=","ufsCv4jQ01cT36kgnKPZqbCqc/DhSjV01ivFiqSFdcM=","C/SiZtpGdy35fuAKrZu6Pcm4jSG2CzkLDqq/E/peyKM=","DWzQpgC+krNt4jq2yfbaqrnMgcyu1MvFEvwkjsyl1SE=","2+HstlaCuKIhaDaiuSMGzRi5h87NfKJJgpliZoqqh5c=","Q5CILD23zAvCL7fNrnFLGPMMKfolmPsmHflar7QZ8As=","7PuhV9YhQ11+Ho7tisxgC5Ha2iT7NeFjFYXc1rTOi+8=","EMk5pD+2UccXJP/AN8oBpk9gR0P6gCHwXeOxq6QeJg0=","AmtpxBtkAOZ2Wkr1CqwekoHqZdF8L9+7hE0OWSLHRpw=","MPLWa+FM8hZz3vvbpvdmr1325exsKmydWA58hF7WZaI=","gCi6XQjSq8SOeVb2ehIAWHIeSo8XWkhVA2/VqrgRmpY=","QW7EWFiNDQE0YaA/0u3QnRqxIVR+i6tU6TkpXWBGuPw=","/NRLW/l+hm7c4MU8PF3WK+vAGwOdDngh0zbY/pW1y7Y=","3IiRFQwyHtquMcwY4JCErkx0zM2wxUBxztCuyaJQTZc=","21bAUPSMCCNc4dANR8Vf8278voBwcfdAvJHSScvBH8A=","gLWNKQMiK+H/V9r1XvtX2QNnYPWGqS9/on1GxL5L7ME=","BqK+NWe8BonlkiP8UHo6+RDTEdQqQtTqckEF9n2pJ0Y=","tk8BvrYRh+X9bu3VIDvAHhe5tfpCkfzo+P67Z94xhvQ=","fYTgde504u5H4BJ4WQYFJEtIjVq8rvo92uMumVIi+5g=","bJt6dDnkJYwZK7vdrDGgayCtGqBNLW2aUjv01bim8aE=","Og0OewcLjHftYIwRU8f/WabS30Kmg0ph1FxsVAv7geg=","7DO41vrm8El3saBEaImJs9bdaTnph5AHICcgzhr2xSw=","B2DkRVYWg64qiaQbGeDtjlJ8ej6tPDMiMj4HodLL1pk=","pb9W2LqOJvGqMzTByh4kBDCiSspNaun8klXRNd5TH04=","MCvQJmLh/xWON1ZBzwug/2hhftw2zJpvoySv8Z0zvkk=","wFR+1dlYKsY4mbyR93L3Wk1T00liB3p70107hbH8Cl4=","e+xJhqmi9/NycHfOYIK+8gV4ADS5iZ9haZQVqdV9cwY=","F8iqVQBP0557bpXyBQjerjXdfIHxDYVaqV7H0rmfQzI=","RE5f8ghTnkhFeVAp9m1hba5DtMWyIeh9cN5414wUc7s=","iZgwdMWo8VHO5ZMsA40/nL2afvekcijeHnPJkFKAsPo=","9pDEAhYXpcxWkpNpKzU5TPm6tDEsAp3VUD+7KFVUCAA=","sHRJdBAFB7Otx6nzixlg1rltJOhsNeG7siNEgU63Ocs=","kVsp6di/hImwze0F1Ee3Imq+cbUTql9OTLL19ptHilc=","SWgr8gPCCq57PxrqDliqBkac0a3LVh3GUvtgem2A25o=","uojPbYUZK1zvOQYhmXOuO1d3n/sLrAqHiT5i9SQG05I=","1FcOr5q0wqbxODkkAbloBOZ0kz/7CR9WGGnwfOLBQkI=","a86IhIIUU2c82QUIoGfK0aUpMTW7SJbhyVHaL5IeF0M=","CwRplimJB+SGDRcEhLH/dObHvkZAH5DXH1S33yejMLY=","f53up8w3qLPESzrln8JTtqW0rlFp5FqYpQ1/0RTldW8=","/DUITGZ8td8HAZlXhHKUnlFNcHJa0McQtMxk4igNhJY=","R+4YgN8yGyPf6M5tzSTgrr7LVloUxRTUQwmSkPayyiA=","56P22VvxTLUxrvlIFt/wMQCRRaNnGwt5c4IfcZh/GUc=","zOUyzPC+aSlqJOjOgWTE+eELWYnp1rlE4HjUNUfmkZM=","NF4nZP77sTAWLyf0KLwceuZuq6c/Rs88I1sikWLa+C0=","b5gY8QO3wQBOIk1/3ZphrTPu7+yJp+Hn6oJWSghgi0g=","UXeTo/J1qysgZRlAnhb/Vtgy0Vls+ZhozVLVDO+Fusk=","vHiEsZOE66N10TS7nF3tti5tRbfjcUdnoyP9Sgddmic=","0TH0a5T4lu1JHBLy350lgA101v3M10cHNflmI0Lz7/k=","lv6nXEx9QeRE+8yP3/zKX1XU4rMxnrA8fzvLyO4zlvg=","uqPHxI5trzFmlMYy7kBptnFrO9JFPMyT2VAE1ARFMwg=","Sk10v9U5sLfGYoRHjA9D8TIc5gp6yms9aQA/GRVvOd4=","/cLz04HCDYbflIqef+ECnhQQbxvRZb1kYENkvR2/fzk=","fNXxL/lqLBbDmuUL96M0RiQX6DuPu+j2QyMevNN6cfI=","Ki3zzqpTfTRVThn5aUmQ2N+cY+B2Q7RW758WCkZM4XU=","qNV5cx7Fk52aJBf7PqYZDukzqJ4Qhv8OAvA9RYedWHc="],"block_size":4096,"path":"build/panel.js"},{"block_hashes":["0WTveHSmUeTH421fRTviI8iDjkFwqvSP/ZrygTnn9Jw=","jluXLKeIDib585A6U3L9OuR6achfXG7jkQKTaWss4Lg="],"block_size":4096,"path":"icons/128-deadcode.png"},{"block_hashes":["0WTveHSmUeTH421fRTviI8iDjkFwqvSP/ZrygTnn9Jw=","jluXLKeIDib585A6U3L9OuR6achfXG7jkQKTaWss4Lg="],"block_size":4096,"path":"icons/128-development.png"},{"block_hashes":["o48eP1/U+UzYPhyduXRBFq4ENdhDJXgIayXQZKhEQE4=","PCo9+9BpXREZrg2b1B35OB0d31pPebAj8u+mKC/kDvg="],"block_size":4096,"path":"icons/128-outdated.png"},{"block_hashes":["0WTveHSmUeTH421fRTviI8iDjkFwqvSP/ZrygTnn9Jw=","jluXLKeIDib585A6U3L9OuR6achfXG7jkQKTaWss4Lg="],"block_size":4096,"path":"icons/128-unminified.png"},{"block_hashes":["/bxiVxniBpe1DnBH1tk4CjXdajwxkP3hRnpHd5DALEI="],"block_size":4096,"path":"icons/16-deadcode.png"},{"block_hashes":["/bxiVxniBpe1DnBH1tk4CjXdajwxkP3hRnpHd5DALEI="],"block_size":4096,"path":"icons/16-development.png"},{"block_hashes":["/EWeZHyZk064lP2X/cY2GpquGBHjzCqNy3Vtsv1/5aE="],"block_size":4096,"path":"icons/16-outdated.png"},{"block_hashes":["/bxiVxniBpe1DnBH1tk4CjXdajwxkP3hRnpHd5DALEI="],"block_size":4096,"path":"icons/16-unminified.png"},{"block_hashes":["99Z6YdK/lL9iQYyMUHIpOVRSWJ6nYAD62lxRCk0/dSI="],"block_size":4096,"path":"icons/32-deadcode.png"},{"block_hashes":["99Z6YdK/lL9iQYyMUHIpOVRSWJ6nYAD62lxRCk0/dSI="],"block_size":4096,"path":"icons/32-development.png"},{"block_hashes":["BVKH+nq22PyP7Kf/eAqXx7U3S9g32F+p+lqUQ56pFl0="],"block_size":4096,"path":"icons/32-outdated.png"},{"block_hashes":["99Z6YdK/lL9iQYyMUHIpOVRSWJ6nYAD62lxRCk0/dSI="],"block_size":4096,"path":"icons/32-unminified.png"},{"block_hashes":["gGrqVraNIx7bz3IZm3t1BqopXHTTAOmwFSxzqtXhfB8="],"block_size":4096,"path":"icons/48-deadcode.png"},{"block_hashes":["gGrqVraNIx7bz3IZm3t1BqopXHTTAOmwFSxzqtXhfB8="],"block_size":4096,"path":"icons/48-development.png"},{"block_hashes":["xtV8STAVn6W52Yp9h2qtwGrGrW9x+71GE4QFg26zFoo="],"block_size":4096,"path":"icons/48-outdated.png"},{"block_hashes":["gGrqVraNIx7bz3IZm3t1BqopXHTTAOmwFSxzqtXhfB8="],"block_size":4096,"path":"icons/48-unminified.png"},{"block_hashes":["rMZnMyVDzUkQl7KB/TW9Sb9DV2jUyyq49Xl0AHJ1YxM="],"block_size":4096,"path":"icons/deadcode.svg"},{"block_hashes":["rMZnMyVDzUkQl7KB/TW9Sb9DV2jUyyq49Xl0AHJ1YxM="],"block_size":4096,"path":"icons/development.svg"},{"block_hashes":["J5MQwt/ocfP2qHXvPVz7iSLTf67rnBJ+wxKu6+HFHNM="],"block_size":4096,"path":"icons/disabled.svg"},{"block_hashes":["193k33vjSLNB1NgMqH4i+R76axGyy+UmUTSIbhZvSJI="],"block_size":4096,"path":"icons/outdated.svg"},{"block_hashes":["EPxpqHAOHG9pQKG1rXzTIfcvq/jMF1SLQGx5oTdbaP8="],"block_size":4096,"path":"icons/production.svg"},{"block_hashes":["s79DjXDmvx7mgrHVMrjhwrg4Y7IF2wbnQLDruCKhTYM="],"block_size":4096,"path":"main.html"},{"block_hashes":["IBOJOrDxkA2AFuIHOB2A2e+8h1EhWVG5FOUWpK3TIH4="],"block_size":4096,"path":"panel.html"},{"block_hashes":["sHpnIEYx8yHZ2p98z7drW8vDSBmRQaiwxj8ra7t49Jo="],"block_size":4096,"path":"popups/deadcode.html"},{"block_hashes":["L9493Jmv5rrTObfCYINl2bXrI4GqjwNqqDlLyajl/ys="],"block_size":4096,"path":"popups/development.html"},{"block_hashes":["dkqY+sSd+Fzo9qDi/m7Z4llgCOyKEGPfTJz0Fv7pDCI="],"block_size":4096,"path":"popups/disabled.html"},{"block_hashes":["DcUMqtUoH2c4yF9yAyvTDpqw8MXKtY4AJ8UTbIwdD3g="],"block_size":4096,"path":"popups/outdated.html"},{"block_hashes":["KuQwcmT9vp8GJ3KtmBDctykt89dS+eni1/RKFAvlwL8="],"block_size":4096,"path":"popups/production.html"},{"block_hashes":["ir0ZHW3KhQi+EU74m7grow19nf1ZO1fg3xTcnfKRzuI="],"block_size":4096,"path":"popups/shared.js"},{"block_hashes":["coE9svdx2Yp800YwkMvaZVFlo1Uu3gapd8ftY9HnUjc="],"block_size":4096,"path":"popups/unminified.html"}],"version":2} \ No newline at end of file diff --git a/chrome/ReactDevTool/2.5.2_0/_metadata/verified_contents.json b/chrome/ReactDevTool/2.5.2_0/_metadata/verified_contents.json new file mode 100644 index 0000000..768af18 --- /dev/null +++ b/chrome/ReactDevTool/2.5.2_0/_metadata/verified_contents.json @@ -0,0 +1 @@ +[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJidWlsZC9iYWNrZW5kLmpzIiwicm9vdF9oYXNoIjoiV191di1mTGFiWFU0MUJOUTg1RDFBcXNpUkZGczlkZlkwc1ZHTXVmNlZhMCJ9LHsicGF0aCI6ImJ1aWxkL2JhY2tncm91bmQuanMiLCJyb290X2hhc2giOiJwd2o2TFdiZGpDRTV4U3czRmxKT0lXSUhZdFJFWE1jNjIxeG8yZE9EajVRIn0seyJwYXRoIjoiYnVpbGQvY29udGVudFNjcmlwdC5qcyIsInJvb3RfaGFzaCI6Im1WUnMtdEp2eEFRR0pOY2l5ZjFkZjBCeVAyM1hVYlRHNjhXYVZQNE1oalUifSx7InBhdGgiOiJidWlsZC9pbmplY3QuanMiLCJyb290X2hhc2giOiJsbEtUT1BUdXJQdk5WYXBxamxRM254LXZBZ2prYUNMbE9lSklyMjBDaXVjIn0seyJwYXRoIjoiYnVpbGQvbWFpbi5qcyIsInJvb3RfaGFzaCI6InotVjU3amloYTNqM2REN09pVXNlb1F0SGZudzEyRXBVVFhOVHpfd3BuRGcifSx7InBhdGgiOiJidWlsZC9wYW5lbC5qcyIsInJvb3RfaGFzaCI6IlNLX1VrRVFDaDBzaXhvbWstejh6T0xucGQ0Y3FRX0tJcUEtZjZpQm14Z2MifSx7InBhdGgiOiJpY29ucy8xMjgtZGVhZGNvZGUucG5nIiwicm9vdF9oYXNoIjoiMUF4MUl2eXRyeUtYQTFzQkZxU1FIWmtjWnJMbVJaNjBvcEVQcWIzSDZiNCJ9LHsicGF0aCI6Imljb25zLzEyOC1kZXZlbG9wbWVudC5wbmciLCJyb290X2hhc2giOiIxQXgxSXZ5dHJ5S1hBMXNCRnFTUUhaa2NackxtUlo2MG9wRVBxYjNINmI0In0seyJwYXRoIjoiaWNvbnMvMTI4LWRpc2FibGVkLnBuZyIsInJvb3RfaGFzaCI6InIta3JhcWpva3FJbHozTTFwQmxiSWk4dGdDXzFHU3hrT2VFMlFwU1FDblUifSx7InBhdGgiOiJpY29ucy8xMjgtb3V0ZGF0ZWQucG5nIiwicm9vdF9oYXNoIjoidVNIdEo2cUFsTHVETWRGYkxnSkpwTHBVSEVEVjRHckRSeVhHcGdSUVNfZyJ9LHsicGF0aCI6Imljb25zLzEyOC1wcm9kdWN0aW9uLnBuZyIsInJvb3RfaGFzaCI6ImF3VDBvNEVpVGowQm1lMFRBUmJaeS1ZSklEcDAzdlBpOG5XU1JPSlFMd2sifSx7InBhdGgiOiJpY29ucy8xMjgtdW5taW5pZmllZC5wbmciLCJyb290X2hhc2giOiIxQXgxSXZ5dHJ5S1hBMXNCRnFTUUhaa2NackxtUlo2MG9wRVBxYjNINmI0In0seyJwYXRoIjoiaWNvbnMvMTYtZGVhZGNvZGUucG5nIiwicm9vdF9oYXNoIjoiX2J4aVZ4bmlCcGUxRG5CSDF0azRDalhkYWp3eGtQM2hSbnBIZDVEQUxFSSJ9LHsicGF0aCI6Imljb25zLzE2LWRldmVsb3BtZW50LnBuZyIsInJvb3RfaGFzaCI6Il9ieGlWeG5pQnBlMURuQkgxdGs0Q2pYZGFqd3hrUDNoUm5wSGQ1REFMRUkifSx7InBhdGgiOiJpY29ucy8xNi1kaXNhYmxlZC5wbmciLCJyb290X2hhc2giOiJ2QWZQVW4xd3UtbU1MclFSTlNrM2pSVUN1V2ZZZWRIUHFKR1p0RUFRV1BZIn0seyJwYXRoIjoiaWNvbnMvMTYtb3V0ZGF0ZWQucG5nIiwicm9vdF9oYXNoIjoiX0VXZVpIeVprMDY0bFAyWF9jWTJHcHF1R0JIanpDcU55M1Z0c3YxXzVhRSJ9LHsicGF0aCI6Imljb25zLzE2LXByb2R1Y3Rpb24ucG5nIiwicm9vdF9oYXNoIjoiR19FcWRrQmtTQ09Tb3M5NHN6bldwUWNhZUhWcFJwN3NRbUNrd3cySUVlRSJ9LHsicGF0aCI6Imljb25zLzE2LXVubWluaWZpZWQucG5nIiwicm9vdF9oYXNoIjoiX2J4aVZ4bmlCcGUxRG5CSDF0azRDalhkYWp3eGtQM2hSbnBIZDVEQUxFSSJ9LHsicGF0aCI6Imljb25zLzMyLWRlYWRjb2RlLnBuZyIsInJvb3RfaGFzaCI6Ijk5WjZZZEtfbEw5aVFZeU1VSElwT1ZSU1dKNm5ZQUQ2Mmx4UkNrMF9kU0kifSx7InBhdGgiOiJpY29ucy8zMi1kZXZlbG9wbWVudC5wbmciLCJyb290X2hhc2giOiI5OVo2WWRLX2xMOWlRWXlNVUhJcE9WUlNXSjZuWUFENjJseFJDazBfZFNJIn0seyJwYXRoIjoiaWNvbnMvMzItZGlzYWJsZWQucG5nIiwicm9vdF9oYXNoIjoiUzN3T25MeFBzd013UGotQXRuNUF1Ny1iTklTREtWbWtlUl9hVDNlSnNXVSJ9LHsicGF0aCI6Imljb25zLzMyLW91dGRhdGVkLnBuZyIsInJvb3RfaGFzaCI6IkJWS0gtbnEyMlB5UDdLZl9lQXFYeDdVM1M5ZzMyRi1wLWxxVVE1NnBGbDAifSx7InBhdGgiOiJpY29ucy8zMi1wcm9kdWN0aW9uLnBuZyIsInJvb3RfaGFzaCI6Il9Fdzc5ODc4bGRYWlVSUGlaemw5NjhPelA5NURURmpNT3l1TlhqejdpUWsifSx7InBhdGgiOiJpY29ucy8zMi11bm1pbmlmaWVkLnBuZyIsInJvb3RfaGFzaCI6Ijk5WjZZZEtfbEw5aVFZeU1VSElwT1ZSU1dKNm5ZQUQ2Mmx4UkNrMF9kU0kifSx7InBhdGgiOiJpY29ucy80OC1kZWFkY29kZS5wbmciLCJyb290X2hhc2giOiJnR3JxVnJhTkl4N2J6M0labTN0MUJxb3BYSFRUQU9td0ZTeHpxdFhoZkI4In0seyJwYXRoIjoiaWNvbnMvNDgtZGV2ZWxvcG1lbnQucG5nIiwicm9vdF9oYXNoIjoiZ0dycVZyYU5JeDdiejNJWm0zdDFCcW9wWEhUVEFPbXdGU3h6cXRYaGZCOCJ9LHsicGF0aCI6Imljb25zLzQ4LWRpc2FibGVkLnBuZyIsInJvb3RfaGFzaCI6InZXMkZBNXlWRzhDRGtNcjBRekVsS1lfQmxTdWxURnB5YkpDdmlIOFplU00ifSx7InBhdGgiOiJpY29ucy80OC1vdXRkYXRlZC5wbmciLCJyb290X2hhc2giOiJ4dFY4U1RBVm42VzUyWXA5aDJxdHdHckdyVzl4LTcxR0U0UUZnMjZ6Rm9vIn0seyJwYXRoIjoiaWNvbnMvNDgtcHJvZHVjdGlvbi5wbmciLCJyb290X2hhc2giOiJHUzczNkQ5TXp3UUhzRW5JOTU4UGxNVnp4RkdGaF92TEt2MFN2VGVTdkdVIn0seyJwYXRoIjoiaWNvbnMvNDgtdW5taW5pZmllZC5wbmciLCJyb290X2hhc2giOiJnR3JxVnJhTkl4N2J6M0labTN0MUJxb3BYSFRUQU9td0ZTeHpxdFhoZkI4In0seyJwYXRoIjoiaWNvbnMvZGVhZGNvZGUuc3ZnIiwicm9vdF9oYXNoIjoick1abk15VkR6VWtRbDdLQl9UVzlTYjlEVjJqVXl5cTQ5WGwwQUhKMVl4TSJ9LHsicGF0aCI6Imljb25zL2RldmVsb3BtZW50LnN2ZyIsInJvb3RfaGFzaCI6InJNWm5NeVZEelVrUWw3S0JfVFc5U2I5RFYyalV5eXE0OVhsMEFISjFZeE0ifSx7InBhdGgiOiJpY29ucy9kaXNhYmxlZC5zdmciLCJyb290X2hhc2giOiJKNU1Rd3Rfb2NmUDJxSFh2UFZ6N2lTTFRmNjdybkJKLXd4S3U2LUhGSE5NIn0seyJwYXRoIjoiaWNvbnMvb3V0ZGF0ZWQuc3ZnIiwicm9vdF9oYXNoIjoiMTkzazMzdmpTTE5CMU5nTXFINGktUjc2YXhHeXktVW1VVFNJYmhadlNKSSJ9LHsicGF0aCI6Imljb25zL3Byb2R1Y3Rpb24uc3ZnIiwicm9vdF9oYXNoIjoiRVB4cHFIQU9IRzlwUUtHMXJYelRJZmN2cV9qTUYxU0xRR3g1b1RkYmFQOCJ9LHsicGF0aCI6Im1haW4uaHRtbCIsInJvb3RfaGFzaCI6InM3OURqWERtdng3bWdySFZNcmpod3JnNFk3SUYyd2JuUUxEcnVDS2hUWU0ifSx7InBhdGgiOiJtYW5pZmVzdC5qc29uIiwicm9vdF9oYXNoIjoicjQxdU1Nc3lYQ3FPeTdtVDlkTDYyaTRTWlVXUnFreHVBWUIzUTAzZTgxTSJ9LHsicGF0aCI6InBhbmVsLmh0bWwiLCJyb290X2hhc2giOiJJQk9KT3JEeGtBMkFGdUlIT0IyQTJlLThoMUVoV1ZHNUZPVVdwSzNUSUg0In0seyJwYXRoIjoicG9wdXBzL2RlYWRjb2RlLmh0bWwiLCJyb290X2hhc2giOiJzSHBuSUVZeDh5SFoycDk4ejdkclc4dkRTQm1SUWFpd3hqOHJhN3Q0OUpvIn0seyJwYXRoIjoicG9wdXBzL2RldmVsb3BtZW50Lmh0bWwiLCJyb290X2hhc2giOiJMOTQ5M0ptdjVyclRPYmZDWUlObDJiWHJJNEdxandOcXFEbEx5YWpsX3lzIn0seyJwYXRoIjoicG9wdXBzL2Rpc2FibGVkLmh0bWwiLCJyb290X2hhc2giOiJka3FZLXNTZC1Gem85cURpX203WjRsbGdDT3lLRUdQZlRKejBGdjdwRENJIn0seyJwYXRoIjoicG9wdXBzL291dGRhdGVkLmh0bWwiLCJyb290X2hhc2giOiJEY1VNcXRVb0gyYzR5Rjl5QXl2VERwcXc4TVhLdFk0QUo4VVRiSXdkRDNnIn0seyJwYXRoIjoicG9wdXBzL3Byb2R1Y3Rpb24uaHRtbCIsInJvb3RfaGFzaCI6Ikt1UXdjbVQ5dnA4R0ozS3RtQkRjdHlrdDg5ZFMtZW5pMV9SS0ZBdmx3TDgifSx7InBhdGgiOiJwb3B1cHMvc2hhcmVkLmpzIiwicm9vdF9oYXNoIjoiaXIwWkhXM0toUWktRVU3NG03Z3JvdzE5bmYxWk8xZmczeFRjbmZLUnp1SSJ9LHsicGF0aCI6InBvcHVwcy91bm1pbmlmaWVkLmh0bWwiLCJyb290X2hhc2giOiJjb0U5c3ZkeDJZcDgwMFl3a012YVpWRmxvMVV1M2dhcGQ4ZnRZOUhuVWpjIn1dLCJmb3JtYXQiOiJ0cmVlaGFzaCIsImhhc2hfYmxvY2tfc2l6ZSI6NDA5Nn1dLCJpdGVtX2lkIjoiZm1rYWRtYXBnb2ZhZG9wbGpiamZrYXBka29pZW5paGkiLCJpdGVtX3ZlcnNpb24iOiIyLjUuMiIsInByb3RvY29sX3ZlcnNpb24iOjF9","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"xetMEeo2DPwtxVbykRLH79iTjCX_TqlFwPRduxSiHfgNScSQMSpygJtvx8ZrpadzpcW3rXFLWnzd0ynNW17mlKBkmZhJ5GMdp2bg0Qy2b0ByGLv_hftIKnV8Krd1yjeoWDkazgLpBDN-TPZk8YqKqBpuRfgEsy94Zry-hekB_kQCc62daw9cIVZ4Wo3E42uX3aWBJfAc7XkwGr2z9yDIag9iDzLRf5IfXKNEwS1iByp6pTEpkmkzsoedtmwPpC4m33-ADJ-FjsJQOg_1EjmuAIW2hgSEB-RmZsnUZF2FnaY0TJfDfkqoeXDpQhjBRP6RE5UXSFZRsjK9QLmRkmEN6A"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"ZMVunaCiJpaFNJHNoCRhiZ-OBJ8Q5gxVSf8e-2tzh1Wf8yj1DF4lBUzNYHyqyWyfWq4_BEratjC5n-oPKJ5TkyNQ3ddLFh0DXH53skS8KJR12YMPNIifyS9OxlnmDddqepoybyFzwep-II6Ekq551TCKY00MPmHgRrAcBGeppgBpL8Kl7X74USI25voMpNiWZpPMl5kW2DWgsxorSdrsCIn7dB9mXBZlNA_IAruaaVqVzAb8KOwOzC8cidzBCy-fZWWlI51_yzwwe-wypUD8ByN8Ioumx2WZmQv2jXmpm_hSn9NK9kPMqQbFM7HwtFZdkYMxpYq5yad7LM_V1241aA"}]}}] \ No newline at end of file diff --git a/chrome/ReactDevTool/2.0.12_0/build/backend.js b/chrome/ReactDevTool/2.5.2_0/build/backend.js similarity index 85% rename from chrome/ReactDevTool/2.0.12_0/build/backend.js rename to chrome/ReactDevTool/2.5.2_0/build/backend.js index 4c396b5..c3887c7 100644 --- a/chrome/ReactDevTool/2.0.12_0/build/backend.js +++ b/chrome/ReactDevTool/2.5.2_0/build/backend.js @@ -57,21 +57,16 @@ 'use strict'; var Agent = __webpack_require__(1); - var BananaSlugBackendManager = __webpack_require__(9); - var Bridge = __webpack_require__(18); - var inject = __webpack_require__(43); - var setupHighlighter = __webpack_require__(53); + var TraceUpdatesBackendManager = __webpack_require__(10); + var Bridge = __webpack_require__(19); + var inject = __webpack_require__(44); var setupRNStyle = __webpack_require__(57); - var setupRelay = __webpack_require__(58); - - // TODO: check to see if we're in RN before doing this? - setInterval(function () { - // this is needed to force refresh on react native - }, 100); + var setupHighlighter = __webpack_require__(59); + var setupRelay = __webpack_require__(64); window.addEventListener('message', welcome); function welcome(evt) { - if (evt.data.source !== 'react-devtools-content-script') { + if (evt.source !== window || evt.data.source !== 'react-devtools-content-script') { return; } @@ -85,7 +80,7 @@ var wall = { listen: function listen(fn) { var listener = function listener(evt) { - if (evt.data.source !== 'react-devtools-content-script' || !evt.data.payload) { + if (evt.source !== window || !evt.data || evt.data.source !== 'react-devtools-content-script' || !evt.data.payload) { return; } fn(evt.data.payload); @@ -101,11 +96,13 @@ } }; - var isReactNative = !!hook.resolveRNStyle; + // Note: this is only useful for react-native-web (and equivalents). + // They would have to set this field directly on the hook. + var isRNStyleEnabled = !!hook.resolveRNStyle; var bridge = new Bridge(wall); var agent = new Agent(window, { - rnStyle: isReactNative + rnStyle: isRNStyleEnabled }); agent.addBridge(bridge); @@ -113,7 +110,7 @@ inject(hook, agent); }); - if (isReactNative) { + if (isRNStyleEnabled) { setupRNStyle(bridge, agent, hook.resolveRNStyle); } @@ -127,11 +124,8 @@ listeners = []; }); - if (!isReactNative) { - setupHighlighter(agent); - } - - BananaSlugBackendManager.init(agent); + setupHighlighter(agent); + TraceUpdatesBackendManager.init(agent); } /***/ }, @@ -165,6 +159,7 @@ var assign = __webpack_require__(7); var guid = __webpack_require__(8); + var getIn = __webpack_require__(9); /** * The agent lives on the page in the same context as React, observes events @@ -228,14 +223,15 @@ var Agent = function (_EventEmitter) { _inherits(Agent, _EventEmitter); + // the window or global -> used to "make a value available in the console" function Agent(global, capabilities) { _classCallCheck(this, Agent); var _this = _possibleConstructorReturn(this, (Agent.__proto__ || Object.getPrototypeOf(Agent)).call(this)); _this.global = global; - _this.reactElements = new Map(); - _this.ids = new WeakMap(); + _this.internalInstancesById = new Map(); + _this.idsByInternalInstances = new WeakMap(); _this.renderers = new Map(); _this.elementData = new Map(); _this.roots = new Set(); @@ -260,14 +256,15 @@ if (isReactDOM) { _this._updateScroll = _this._updateScroll.bind(_this); window.addEventListener('scroll', _this._onScroll.bind(_this), true); + window.addEventListener('click', _this._onClick.bind(_this), true); + window.addEventListener('mouseover', _this._onMouseOver.bind(_this), true); + window.addEventListener('resize', _this._onResize.bind(_this), true); } return _this; } // returns an "unsubscribe" function - // the window or global -> used to "make a value available in the console" - _createClass(Agent, [{ key: 'sub', @@ -317,6 +314,10 @@ bridge.on('selected', function (id) { return _this3.emit('selected', id); }); + bridge.on('setInspectEnabled', function (enabled) { + _this3._inspectEnabled = enabled; + _this3.emit('stopInspecting'); + }); bridge.on('shutdown', function () { return _this3.emit('shutdown'); }); @@ -337,6 +338,11 @@ // used to "view source in Sources pane" bridge.on('putSelectedInstance', function (id) { var node = _this3.elementData.get(id); + if (node) { + window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$type = node.type; + } else { + window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$type = null; + } if (node && node.publicInstance) { window.__REACT_DEVTOOLS_GLOBAL_HOOK__.$inst = node.publicInstance; } else { @@ -357,8 +363,8 @@ bridge.on('scrollToNode', function (id) { return _this3.scrollToNode(id); }); - bridge.on('bananaslugchange', function (value) { - return _this3.emit('bananaslugchange', value); + bridge.on('traceupdatesstatechange', function (value) { + return _this3.emit('traceupdatesstatechange', value); }); bridge.on('colorizerchange', function (value) { return _this3.emit('colorizerchange', value); @@ -383,6 +389,9 @@ this.on('setSelection', function (data) { return bridge.send('select', data); }); + this.on('setInspectEnabled', function (data) { + return bridge.send('setInspectEnabled', data); + }); } }, { key: 'scrollToNode', @@ -392,16 +401,16 @@ console.warn('unable to get the node for scrolling'); return; } - var element = node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement; - if (!element) { - console.warn('unable to get the element for scrolling'); + var domElement = node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement; + if (!domElement) { + console.warn('unable to get the domElement for scrolling'); return; } - if (typeof element.scrollIntoViewIfNeeded === 'function') { - element.scrollIntoViewIfNeeded(); - } else if (typeof element.scrollIntoView === 'function') { - element.scrollIntoView(); + if (typeof domElement.scrollIntoViewIfNeeded === 'function') { + domElement.scrollIntoViewIfNeeded(); + } else if (typeof domElement.scrollIntoView === 'function') { + domElement.scrollIntoView(); } this.highlight(id); } @@ -433,7 +442,7 @@ }, { key: 'getNodeForID', value: function getNodeForID(id) { - var component = this.reactElements.get(id); + var component = this.internalInstancesById.get(id); if (!component) { return null; } @@ -446,12 +455,20 @@ }, { key: 'selectFromDOMNode', value: function selectFromDOMNode(node, quiet) { + var offsetFromLeaf = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + var id = this.getIDForNode(node); if (!id) { return; } - this.emit('setSelection', { id: id, quiet: quiet }); + this.emit('setSelection', { id: id, quiet: quiet, offsetFromLeaf: offsetFromLeaf }); } + + // TODO: remove this method because it's breaking encapsulation. + // It was used by RN inspector but this required leaking Fibers to it. + // RN inspector will use selectFromDOMNode() instead now. + // Remove this method in a few months after this comment was added. + }, { key: 'selectFromReactInstance', value: function selectFromReactInstance(instance, quiet) { @@ -520,7 +537,7 @@ if (data && data.updater && data.updater.setInContext) { data.updater.setInContext(path, value); } else { - console.warn("trying to set state on a component that doesn't support it"); + console.warn("trying to set context on a component that doesn't support it"); } } }, { @@ -544,20 +561,20 @@ } }, { key: 'getId', - value: function getId(element) { - if ((typeof element === 'undefined' ? 'undefined' : _typeof(element)) !== 'object' || !element) { - return element; + value: function getId(internalInstance) { + if ((typeof internalInstance === 'undefined' ? 'undefined' : _typeof(internalInstance)) !== 'object' || !internalInstance) { + return internalInstance; } - if (!this.ids.has(element)) { - this.ids.set(element, guid()); - this.reactElements.set(this.ids.get(element), element); + if (!this.idsByInternalInstances.has(internalInstance)) { + this.idsByInternalInstances.set(internalInstance, guid()); + this.internalInstancesById.set(this.idsByInternalInstances.get(internalInstance), internalInstance); } - return this.ids.get(element); + return this.idsByInternalInstances.get(internalInstance); } }, { key: 'addRoot', - value: function addRoot(renderer, element) { - var id = this.getId(element); + value: function addRoot(renderer, internalInstance) { + var id = this.getId(internalInstance); this.roots.add(id); this.emit('root', id); } @@ -610,7 +627,7 @@ this.roots.delete(id); this.renderers.delete(id); this.emit('unmount', id); - this.ids.delete(component); + this.idsByInternalInstances.delete(component); } }, { key: '_onScroll', @@ -624,19 +641,49 @@ key: '_updateScroll', value: function _updateScroll() { this.emit('refreshMultiOverlay'); + this.emit('stopInspecting'); this._scrollUpdate = false; } + }, { + key: '_onClick', + value: function _onClick(event) { + if (!this._inspectEnabled) { + return; + } + + var id = this.getIDForNode(event.target); + if (!id) { + return; + } + + event.stopPropagation(); + event.preventDefault(); + + this.emit('setSelection', { id: id }); + this.emit('setInspectEnabled', false); + } + }, { + key: '_onMouseOver', + value: function _onMouseOver(event) { + if (this._inspectEnabled) { + var id = this.getIDForNode(event.target); + if (!id) { + return; + } + + this.highlight(id); + } + } + }, { + key: '_onResize', + value: function _onResize(event) { + this.emit('stopInspecting'); + } }]); return Agent; }(EventEmitter); - function getIn(base, path) { - return path.reduce(function (obj, attr) { - return obj ? obj[attr] : null; - }, base); - } - module.exports = Agent; /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(3), __webpack_require__(4), __webpack_require__(5))) @@ -1086,6 +1133,48 @@ /***/ }, /* 9 */ +/***/ function(module, exports) { + + 'use strict'; + + function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + + /** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + + /** + * Retrieves the value from the path of nested objects + * @param {Object} base Base or root object for path + * @param {Array} path nested path + * @return {any} Value at end of path or `mull` + */ + function getIn(base, path) { + return path.reduce(function (obj, attr) { + if (obj) { + if (obj.hasOwnProperty(attr)) { + return obj[attr]; + } + if (typeof obj[Symbol.iterator] === 'function') { + // Convert iterable to array and return array[index] + return [].concat(_toConsumableArray(obj))[attr]; + } + } + + return null; + }, base); + } + + module.exports = getIn; + +/***/ }, +/* 10 */ /***/ function(module, exports, __webpack_require__) { /** @@ -1105,32 +1194,32 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var BananaSlugAbstractNodeMeasurer = __webpack_require__(10); - var BananaSlugAbstractNodePresenter = __webpack_require__(15); - var BananaSlugWebNodeMeasurer = __webpack_require__(16); - var BananaSlugWebNodePresenter = __webpack_require__(17); + var TraceUpdatesAbstractNodeMeasurer = __webpack_require__(11); + var TraceUpdatesAbstractNodePresenter = __webpack_require__(16); + var TraceUpdatesWebNodeMeasurer = __webpack_require__(17); + var TraceUpdatesWebNodePresenter = __webpack_require__(18); var NODE_TYPE_COMPOSITE = 'Composite'; - var BananaSlugBackendManager = function () { - function BananaSlugBackendManager(agent) { - _classCallCheck(this, BananaSlugBackendManager); + var TraceUpdatesBackendManager = function () { + function TraceUpdatesBackendManager(agent) { + _classCallCheck(this, TraceUpdatesBackendManager); this._onMeasureNode = this._onMeasureNode.bind(this); var useDOM = agent.capabilities.dom; - this._measurer = useDOM ? new BananaSlugWebNodeMeasurer() : new BananaSlugAbstractNodeMeasurer(); + this._measurer = useDOM ? new TraceUpdatesWebNodeMeasurer() : new TraceUpdatesAbstractNodeMeasurer(); - this._presenter = useDOM ? new BananaSlugWebNodePresenter() : new BananaSlugAbstractNodePresenter(); + this._presenter = useDOM ? new TraceUpdatesWebNodePresenter() : new TraceUpdatesAbstractNodePresenter(); this._isActive = false; - agent.on('bananaslugchange', this._onBananaSlugChange.bind(this)); + agent.on('traceupdatesstatechange', this._onTraceUpdatesStateChange.bind(this)); agent.on('update', this._onUpdate.bind(this, agent)); agent.on('shutdown', this._shutdown.bind(this)); } - _createClass(BananaSlugBackendManager, [{ + _createClass(TraceUpdatesBackendManager, [{ key: '_onUpdate', value: function _onUpdate(agent, obj) { if (!this._isActive || !obj.publicInstance || !obj.id || obj.nodeType !== NODE_TYPE_COMPOSITE) { @@ -1150,8 +1239,8 @@ this._presenter.present(measurement); } }, { - key: '_onBananaSlugChange', - value: function _onBananaSlugChange(state) { + key: '_onTraceUpdatesStateChange', + value: function _onTraceUpdatesStateChange(state) { this._isActive = state.enabled; this._presenter.setEnabled(state.enabled); } @@ -1163,11 +1252,11 @@ } }]); - return BananaSlugBackendManager; + return TraceUpdatesBackendManager; }(); function init(agent) { - return new BananaSlugBackendManager(agent); + return new TraceUpdatesBackendManager(agent); } module.exports = { @@ -1175,7 +1264,7 @@ }; /***/ }, -/* 10 */ +/* 11 */ /***/ function(module, exports, __webpack_require__) { /** @@ -1198,8 +1287,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var requestAnimationFrame = __webpack_require__(11); - var immutable = __webpack_require__(14); + var requestAnimationFrame = __webpack_require__(12); + var immutable = __webpack_require__(15); // How long the measurement can be cached in ms. var DURATION = 800; @@ -1224,9 +1313,9 @@ var _id = 100; - var BananaSlugAbstractNodeMeasurer = function () { - function BananaSlugAbstractNodeMeasurer() { - _classCallCheck(this, BananaSlugAbstractNodeMeasurer); + var TraceUpdatesAbstractNodeMeasurer = function () { + function TraceUpdatesAbstractNodeMeasurer() { + _classCallCheck(this, TraceUpdatesAbstractNodeMeasurer); // pending nodes to measure. this._nodes = new Map(); @@ -1246,7 +1335,7 @@ this._measureNodes = this._measureNodes.bind(this); } - _createClass(BananaSlugAbstractNodeMeasurer, [{ + _createClass(TraceUpdatesAbstractNodeMeasurer, [{ key: 'request', value: function request(node, callback) { var requestID = this._nodes.has(node) ? this._nodes.get(node) : String(_id++); @@ -1416,13 +1505,13 @@ } }]); - return BananaSlugAbstractNodeMeasurer; + return TraceUpdatesAbstractNodeMeasurer; }(); - module.exports = BananaSlugAbstractNodeMeasurer; + module.exports = TraceUpdatesAbstractNodeMeasurer; /***/ }, -/* 11 */ +/* 12 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {/** @@ -1438,8 +1527,8 @@ 'use strict'; - var emptyFunction = __webpack_require__(12); - var nativeRequestAnimationFrame = __webpack_require__(13); + var emptyFunction = __webpack_require__(13); + var nativeRequestAnimationFrame = __webpack_require__(14); var lastTime = 0; @@ -1459,7 +1548,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) /***/ }, -/* 12 */ +/* 13 */ /***/ function(module, exports) { /** @@ -1502,7 +1591,7 @@ module.exports = emptyFunction; /***/ }, -/* 13 */ +/* 14 */ /***/ function(module, exports) { /* WEBPACK VAR INJECTION */(function(global) {/** @@ -1524,7 +1613,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) /***/ }, -/* 14 */ +/* 15 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(__webpack_provided_Object_dot_create, WeakMap, Map, Set) {/** @@ -6512,7 +6601,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(4), __webpack_require__(3), __webpack_require__(5))) /***/ }, -/* 15 */ +/* 16 */ /***/ function(module, exports, __webpack_require__) { /** @@ -6533,8 +6622,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var immutable = __webpack_require__(14); - var requestAnimationFrame = __webpack_require__(11); + var immutable = __webpack_require__(15); + var requestAnimationFrame = __webpack_require__(12); // How long the measurement should be presented for. var DURATION = 250; @@ -6548,9 +6637,9 @@ hit: 0 }); - var BananaSlugAbstractNodePresenter = function () { - function BananaSlugAbstractNodePresenter() { - _classCallCheck(this, BananaSlugAbstractNodePresenter); + var TraceUpdatesAbstractNodePresenter = function () { + function TraceUpdatesAbstractNodePresenter() { + _classCallCheck(this, TraceUpdatesAbstractNodePresenter); this._pool = new Map(); this._drawing = false; @@ -6561,7 +6650,7 @@ this._redraw = this._redraw.bind(this); } - _createClass(BananaSlugAbstractNodePresenter, [{ + _createClass(TraceUpdatesAbstractNodePresenter, [{ key: 'present', value: function present(measurement) { if (!this._enabled) { @@ -6686,13 +6775,13 @@ } }]); - return BananaSlugAbstractNodePresenter; + return TraceUpdatesAbstractNodePresenter; }(); - module.exports = BananaSlugAbstractNodePresenter; + module.exports = TraceUpdatesAbstractNodePresenter; /***/ }, -/* 16 */ +/* 17 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(__webpack_provided_Object_dot_create) {/** @@ -6716,7 +6805,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = __webpack_provided_Object_dot_create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var BananaSlugAbstractNodeMeasurer = __webpack_require__(10); + var TraceUpdatesAbstractNodeMeasurer = __webpack_require__(11); var DUMMY = { bottom: 0, @@ -6731,16 +6820,16 @@ width: 0 }; - var BananaSlugWebNodeMeasurer = function (_BananaSlugAbstractNo) { - _inherits(BananaSlugWebNodeMeasurer, _BananaSlugAbstractNo); + var TraceUpdatesWebNodeMeasurer = function (_TraceUpdatesAbstract) { + _inherits(TraceUpdatesWebNodeMeasurer, _TraceUpdatesAbstract); - function BananaSlugWebNodeMeasurer() { - _classCallCheck(this, BananaSlugWebNodeMeasurer); + function TraceUpdatesWebNodeMeasurer() { + _classCallCheck(this, TraceUpdatesWebNodeMeasurer); - return _possibleConstructorReturn(this, (BananaSlugWebNodeMeasurer.__proto__ || Object.getPrototypeOf(BananaSlugWebNodeMeasurer)).apply(this, arguments)); + return _possibleConstructorReturn(this, (TraceUpdatesWebNodeMeasurer.__proto__ || Object.getPrototypeOf(TraceUpdatesWebNodeMeasurer)).apply(this, arguments)); } - _createClass(BananaSlugWebNodeMeasurer, [{ + _createClass(TraceUpdatesWebNodeMeasurer, [{ key: 'measureImpl', value: function measureImpl(node) { if (!node || typeof node.getBoundingClientRect !== 'function') { @@ -6767,14 +6856,14 @@ } }]); - return BananaSlugWebNodeMeasurer; - }(BananaSlugAbstractNodeMeasurer); + return TraceUpdatesWebNodeMeasurer; + }(TraceUpdatesAbstractNodeMeasurer); - module.exports = BananaSlugWebNodeMeasurer; + module.exports = TraceUpdatesWebNodeMeasurer; /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) /***/ }, -/* 17 */ +/* 18 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(__webpack_provided_Object_dot_create) {/** @@ -6800,7 +6889,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = __webpack_provided_Object_dot_create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - var BananaSlugAbstractNodePresenter = __webpack_require__(15); + var TraceUpdatesAbstractNodePresenter = __webpack_require__(16); var OUTLINE_COLOR = '#f0f0f0'; @@ -6838,21 +6927,21 @@ ctx.setLineDash([0]); } - var CANVAS_NODE_ID = 'BananaSlugWebNodePresenter'; + var CANVAS_NODE_ID = 'TraceUpdatesWebNodePresenter'; - var BananaSlugWebNodePresenter = function (_BananaSlugAbstractNo) { - _inherits(BananaSlugWebNodePresenter, _BananaSlugAbstractNo); + var TraceUpdatesWebNodePresenter = function (_TraceUpdatesAbstract) { + _inherits(TraceUpdatesWebNodePresenter, _TraceUpdatesAbstract); - function BananaSlugWebNodePresenter() { - _classCallCheck(this, BananaSlugWebNodePresenter); + function TraceUpdatesWebNodePresenter() { + _classCallCheck(this, TraceUpdatesWebNodePresenter); - var _this = _possibleConstructorReturn(this, (BananaSlugWebNodePresenter.__proto__ || Object.getPrototypeOf(BananaSlugWebNodePresenter)).call(this)); + var _this = _possibleConstructorReturn(this, (TraceUpdatesWebNodePresenter.__proto__ || Object.getPrototypeOf(TraceUpdatesWebNodePresenter)).call(this)); _this._canvas = null; return _this; } - _createClass(BananaSlugWebNodePresenter, [{ + _createClass(TraceUpdatesWebNodePresenter, [{ key: 'drawImpl', value: function drawImpl(pool) { this._ensureCanvas(); @@ -6926,17 +7015,17 @@ } }]); - return BananaSlugWebNodePresenter; - }(BananaSlugAbstractNodePresenter); + return TraceUpdatesWebNodePresenter; + }(TraceUpdatesAbstractNodePresenter); - module.exports = BananaSlugWebNodePresenter; + module.exports = TraceUpdatesWebNodePresenter; /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) /***/ }, -/* 18 */ +/* 19 */ /***/ function(module, exports, __webpack_require__) { - /* WEBPACK VAR INJECTION */(function(Map) {/** + /* WEBPACK VAR INJECTION */(function(Map, __webpack_provided_Object_dot_create) {/** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * @@ -6956,16 +7045,25 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - var consts = __webpack_require__(19); - var hydrate = __webpack_require__(38); - var dehydrate = __webpack_require__(39); - var performanceNow = __webpack_require__(40); + var consts = __webpack_require__(20); + var hydrate = __webpack_require__(39); + var dehydrate = __webpack_require__(40); + var getIn = __webpack_require__(9); + var performanceNow = __webpack_require__(41); + + // Use the polyfill if the function is not native implementation + function getWindowFunction(name, polyfill) { + if (String(window[name]).indexOf('[native code]') === -1) { + return polyfill; + } + return window[name]; + } // Custom polyfill that runs the queue with a backoff. // If you change it, make sure it behaves reasonably well in Firefox. var lastRunTimeMS = 5; - var cancelIdleCallback = window.cancelIdleCallback || clearTimeout; - var requestIdleCallback = window.requestIdleCallback || function (cb, options) { + var cancelIdleCallback = getWindowFunction('cancelIdleCallback', clearTimeout); + var requestIdleCallback = getWindowFunction('requestIdleCallback', function (cb, options) { // Magic numbers determined by tweaking in Firefox. // There is no special meaning to them. var delayMS = 3000 * lastRunTimeMS; @@ -6984,7 +7082,7 @@ var endTime = performanceNow(); lastRunTimeMS = (endTime - startTime) / 1000; }, delayMS); - }; + }); /** * The bridge is responsible for serializing requests between the Agent and @@ -7317,15 +7415,52 @@ key: '_inspectResponse', value: function _inspectResponse(id, path, callback) { var inspectable = this._inspectables.get(id); - var result = {}; var cleaned = []; var proto = null; var protoclean = []; + if (inspectable) { var val = getIn(inspectable, path); var protod = false; var isFn = typeof val === 'function'; + + if (val && typeof val[Symbol.iterator] === 'function') { + var iterVal = __webpack_provided_Object_dot_create({}); // flow throws "object literal incompatible with object type" + var count = 0; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = val[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var entry = _step.value; + + if (count > 100) { + // TODO: replace this if block with better logic to handle large iterables + break; + } + iterVal[count] = entry; + count++; + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + val = iterVal; + } + Object.getOwnPropertyNames(val).forEach(function (name) { if (name === '__proto__') { protod = true; @@ -7362,17 +7497,11 @@ return Bridge; }(); - function getIn(base, path) { - return path.reduce(function (obj, attr) { - return obj ? obj[attr] : null; - }, base); - } - module.exports = Bridge; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3), __webpack_require__(2))) /***/ }, -/* 19 */ +/* 20 */ /***/ function(module, exports, __webpack_require__) { /** @@ -7387,7 +7516,7 @@ */ 'use strict'; - var _Symbol = __webpack_require__(20); + var _Symbol = __webpack_require__(21); module.exports = { name: _Symbol('name'), @@ -7398,16 +7527,16 @@ }; /***/ }, -/* 20 */ +/* 21 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - module.exports = __webpack_require__(21)() ? Symbol : __webpack_require__(22); + module.exports = __webpack_require__(22)() ? Symbol : __webpack_require__(23); /***/ }, -/* 21 */ +/* 22 */ /***/ function(module, exports) { 'use strict'; @@ -7431,15 +7560,15 @@ /***/ }, -/* 22 */ +/* 23 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(__webpack_provided_Object_dot_create) {// ES2015 Symbol polyfill for environments that do not support it (or partially support it_ 'use strict'; - var d = __webpack_require__(23) - , validateSymbol = __webpack_require__(36) + var d = __webpack_require__(24) + , validateSymbol = __webpack_require__(37) , create = __webpack_provided_Object_dot_create, defineProperties = Object.defineProperties , defineProperty = Object.defineProperty, objPrototype = Object.prototype @@ -7545,15 +7674,15 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) /***/ }, -/* 23 */ +/* 24 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var assign = __webpack_require__(24) - , normalizeOpts = __webpack_require__(31) - , isCallable = __webpack_require__(32) - , contains = __webpack_require__(33) + var assign = __webpack_require__(25) + , normalizeOpts = __webpack_require__(32) + , isCallable = __webpack_require__(33) + , contains = __webpack_require__(34) , d; @@ -7614,18 +7743,18 @@ /***/ }, -/* 24 */ +/* 25 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - module.exports = __webpack_require__(25)() + module.exports = __webpack_require__(26)() ? Object.assign - : __webpack_require__(26); + : __webpack_require__(27); /***/ }, -/* 25 */ +/* 26 */ /***/ function(module, exports) { 'use strict'; @@ -7640,13 +7769,13 @@ /***/ }, -/* 26 */ +/* 27 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var keys = __webpack_require__(27) - , value = __webpack_require__(30) + var keys = __webpack_require__(28) + , value = __webpack_require__(31) , max = Math.max; @@ -7668,18 +7797,18 @@ /***/ }, -/* 27 */ +/* 28 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - module.exports = __webpack_require__(28)() + module.exports = __webpack_require__(29)() ? Object.keys - : __webpack_require__(29); + : __webpack_require__(30); /***/ }, -/* 28 */ +/* 29 */ /***/ function(module, exports) { 'use strict'; @@ -7693,7 +7822,7 @@ /***/ }, -/* 29 */ +/* 30 */ /***/ function(module, exports) { 'use strict'; @@ -7706,7 +7835,7 @@ /***/ }, -/* 30 */ +/* 31 */ /***/ function(module, exports) { 'use strict'; @@ -7718,7 +7847,7 @@ /***/ }, -/* 31 */ +/* 32 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(__webpack_provided_Object_dot_create) {'use strict'; @@ -7742,7 +7871,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) /***/ }, -/* 32 */ +/* 33 */ /***/ function(module, exports) { // Deprecated @@ -7753,18 +7882,18 @@ /***/ }, -/* 33 */ +/* 34 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - module.exports = __webpack_require__(34)() + module.exports = __webpack_require__(35)() ? String.prototype.contains - : __webpack_require__(35); + : __webpack_require__(36); /***/ }, -/* 34 */ +/* 35 */ /***/ function(module, exports) { 'use strict'; @@ -7778,7 +7907,7 @@ /***/ }, -/* 35 */ +/* 36 */ /***/ function(module, exports) { 'use strict'; @@ -7791,12 +7920,12 @@ /***/ }, -/* 36 */ +/* 37 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - var isSymbol = __webpack_require__(37); + var isSymbol = __webpack_require__(38); module.exports = function (value) { if (!isSymbol(value)) throw new TypeError(value + " is not a symbol"); @@ -7805,7 +7934,7 @@ /***/ }, -/* 37 */ +/* 38 */ /***/ function(module, exports) { 'use strict'; @@ -7816,7 +7945,7 @@ /***/ }, -/* 38 */ +/* 39 */ /***/ function(module, exports, __webpack_require__) { /** @@ -7831,7 +7960,7 @@ */ 'use strict'; - var consts = __webpack_require__(19); + var consts = __webpack_require__(20); function hydrate(data, cleaned) { cleaned.forEach(function (path) { @@ -7854,7 +7983,7 @@ module.exports = hydrate; /***/ }, -/* 39 */ +/* 40 */ /***/ function(module, exports) { /** @@ -7869,6 +7998,67 @@ */ 'use strict'; + /** + * Get a enhanced/artificial type string based on the object instance + */ + + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + + function getPropType(data) { + if (!data) { + return null; + } + var type = typeof data === 'undefined' ? 'undefined' : _typeof(data); + + if (type === 'object') { + if (data._reactFragment) { + return 'react_fragment'; + } + if (Array.isArray(data)) { + return 'array'; + } + if (ArrayBuffer.isView(data)) { + if (data instanceof DataView) { + return 'data_view'; + } + return 'typed_array'; + } + if (data instanceof ArrayBuffer) { + return 'array_buffer'; + } + if (typeof data[Symbol.iterator] === 'function') { + return 'iterator'; + } + if (Object.prototype.toString.call(data) === '[object Date]') { + return 'date'; + } + } + + return type; + } + + /** + * Generate the dehydrated metadata for complex object instances + */ + function createDehydrated(type, data, cleaned, path) { + var meta = {}; + + if (type === 'array' || type === 'typed_array') { + meta.length = data.length; + } + if (type === 'iterator' || type === 'typed_array') { + meta.readOnly = true; + } + + cleaned.push(path); + + return { + type: type, + meta: meta, + name: !data.constructor || data.constructor.name === 'Object' ? '' : data.constructor.name + }; + } + /** * Strip out complex data (instances, functions, and data nested > 2 levels * deep). The paths of the stripped out objects are appended to the `cleaned` @@ -7889,74 +8079,92 @@ * } * and cleaned = [["some", "attr"], ["other"]] */ + function dehydrate(data, cleaned) { + var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; + var level = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - function dehydrate(data, cleaned, path, level) { - level = level || 0; - path = path || []; - if (typeof data === 'function') { - cleaned.push(path); - return { - name: data.name, - type: 'function' - }; - } - if (!data || (typeof data === 'undefined' ? 'undefined' : _typeof(data)) !== 'object') { - if (typeof data === 'string' && data.length > 500) { - return data.slice(0, 500) + '...'; - } + var type = getPropType(data); + + switch (type) { + + case 'function': + cleaned.push(path); + return { + name: data.name, + type: 'function' + }; + + case 'string': + return data.length <= 500 ? data : data.slice(0, 500) + '...'; + // We have to do this assignment b/c Flow doesn't think "symbol" is // something typeof would return. Error 'unexpected predicate "symbol"' - var type = typeof data === 'undefined' ? 'undefined' : _typeof(data); - if (type === 'symbol') { + case 'symbol': cleaned.push(path); return { type: 'symbol', name: data.toString() }; - } - return data; - } - if (data._reactFragment) { + // React Fragments error if you try to inspect them. - return 'A react fragment'; - } - if (level > 2) { - cleaned.push(path); - return { - type: Array.isArray(data) ? 'array' : 'object', - name: !data.constructor || data.constructor.name === 'Object' ? '' : data.constructor.name, - meta: Array.isArray(data) ? { - length: data.length - } : null - }; - } - if (Array.isArray(data)) { - // $FlowFixMe path is not undefined. - return data.map(function (item, i) { - return dehydrate(item, cleaned, path.concat([i]), level + 1); - }); - } - // TODO when this is in the iframe window, we can just use Object - if (data.constructor && typeof data.constructor === 'function' && data.constructor.name !== 'Object') { - cleaned.push(path); - return { - name: data.constructor.name, - type: 'object' - }; - } - var res = {}; - for (var name in data) { - res[name] = dehydrate(data[name], cleaned, path.concat([name]), level + 1); + case 'react_fragment': + return 'A React Fragment'; + + // ArrayBuffers error if you try to inspect them. + case 'array_buffer': + case 'data_view': + cleaned.push(path); + return { + type: type, + name: type === 'data_view' ? 'DataView' : 'ArrayBuffer', + meta: { + length: data.byteLength, + uninspectable: true + } + }; + + case 'array': + if (level > 2) { + return createDehydrated(type, data, cleaned, path); + } + return data.map(function (item, i) { + return dehydrate(item, cleaned, path.concat([i]), level + 1); + }); + + case 'typed_array': + case 'iterator': + return createDehydrated(type, data, cleaned, path); + case 'date': + cleaned.push(path); + return { + name: data.toString(), + type: 'date', + meta: { + uninspectable: true + } + }; + case 'object': + if (level > 2 || data.constructor && typeof data.constructor === 'function' && data.constructor.name !== 'Object') { + return createDehydrated(type, data, cleaned, path); + } else { + + var res = {}; + for (var name in data) { + res[name] = dehydrate(data[name], cleaned, path.concat([name]), level + 1); + } + return res; + } + + default: + return data; } - return res; } module.exports = dehydrate; /***/ }, -/* 40 */ +/* 41 */ /***/ function(module, exports, __webpack_require__) { /** @@ -7973,7 +8181,7 @@ 'use strict'; - var performance = __webpack_require__(41); + var performance = __webpack_require__(42); var performanceNow; @@ -7995,7 +8203,7 @@ module.exports = performanceNow; /***/ }, -/* 41 */ +/* 42 */ /***/ function(module, exports, __webpack_require__) { /** @@ -8012,7 +8220,7 @@ 'use strict'; - var ExecutionEnvironment = __webpack_require__(42); + var ExecutionEnvironment = __webpack_require__(43); var performance; @@ -8023,7 +8231,7 @@ module.exports = performance || {}; /***/ }, -/* 42 */ +/* 43 */ /***/ function(module, exports) { /** @@ -8064,7 +8272,7 @@ module.exports = ExecutionEnvironment; /***/ }, -/* 43 */ +/* 44 */ /***/ function(module, exports, __webpack_require__) { /** @@ -8079,7 +8287,7 @@ */ 'use strict'; - var setupBackend = __webpack_require__(44); + var setupBackend = __webpack_require__(45); module.exports = function (hook, agent) { var subs = [hook.sub('renderer-attached', function (_ref) { @@ -8091,22 +8299,22 @@ helpers.walkTree(agent.onMounted.bind(agent, id), agent.addRoot.bind(agent, id)); }), hook.sub('root', function (_ref2) { var renderer = _ref2.renderer, - element = _ref2.element; - return agent.addRoot(renderer, element); + internalInstance = _ref2.internalInstance; + return agent.addRoot(renderer, internalInstance); }), hook.sub('mount', function (_ref3) { var renderer = _ref3.renderer, - element = _ref3.element, + internalInstance = _ref3.internalInstance, data = _ref3.data; - return agent.onMounted(renderer, element, data); + return agent.onMounted(renderer, internalInstance, data); }), hook.sub('update', function (_ref4) { var renderer = _ref4.renderer, - element = _ref4.element, + internalInstance = _ref4.internalInstance, data = _ref4.data; - return agent.onUpdated(element, data); + return agent.onUpdated(internalInstance, data); }), hook.sub('unmount', function (_ref5) { var renderer = _ref5.renderer, - element = _ref5.element; - return agent.onUnmounted(element); + internalInstance = _ref5.internalInstance; + return agent.onUnmounted(internalInstance); })]; var success = setupBackend(hook); @@ -8125,7 +8333,7 @@ }; /***/ }, -/* 44 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { /** @@ -8153,7 +8361,7 @@ */ 'use strict'; - var attachRenderer = __webpack_require__(45); + var attachRenderer = __webpack_require__(46); module.exports = function setupBackend(hook) { var oldReact = window.React && window.React.__internals; @@ -8186,7 +8394,7 @@ }; /***/ }, -/* 45 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(Map) {/** @@ -8201,9 +8409,9 @@ */ 'use strict'; - var getData = __webpack_require__(46); - var getData012 = __webpack_require__(49); - var attachRendererFiber = __webpack_require__(50); + var getData = __webpack_require__(47); + var getData012 = __webpack_require__(53); + var attachRendererFiber = __webpack_require__(54); /** * This takes care of patching the renderer to emit events on the global @@ -8267,13 +8475,13 @@ // React DOM if (renderer.Mount._renderNewRootComponent) { - oldRenderRoot = decorateResult(renderer.Mount, '_renderNewRootComponent', function (element) { - hook.emit('root', { renderer: rid, element: element }); + oldRenderRoot = decorateResult(renderer.Mount, '_renderNewRootComponent', function (internalInstance) { + hook.emit('root', { renderer: rid, internalInstance: internalInstance }); }); // React Native } else if (renderer.Mount.renderComponent) { - oldRenderComponent = decorateResult(renderer.Mount, 'renderComponent', function (element) { - hook.emit('root', { renderer: rid, element: element._reactInternalInstance }); + oldRenderComponent = decorateResult(renderer.Mount, 'renderComponent', function (internalInstance) { + hook.emit('root', { renderer: rid, internalInstance: internalInstance._reactInternalInstance }); }); } @@ -8292,37 +8500,37 @@ // (do we have access to DOMComponent here?) so that we don't have to // setTimeout. setTimeout(function () { - hook.emit('mount', { element: _this, data: getData012(_this), renderer: rid }); + hook.emit('mount', { internalInstance: _this, data: getData012(_this), renderer: rid }); }, 0); }, updateComponent: function updateComponent() { var _this2 = this; setTimeout(function () { - hook.emit('update', { element: _this2, data: getData012(_this2), renderer: rid }); + hook.emit('update', { internalInstance: _this2, data: getData012(_this2), renderer: rid }); }, 0); }, unmountComponent: function unmountComponent() { - hook.emit('unmount', { element: this, renderer: rid }); + hook.emit('unmount', { internalInstance: this, renderer: rid }); rootNodeIDMap.delete(this._rootNodeID, this); } }); } else if (renderer.Reconciler) { oldMethods = decorateMany(renderer.Reconciler, { - mountComponent: function mountComponent(element, rootID, transaction, context) { - var data = getData(element); - rootNodeIDMap.set(element._rootNodeID, element); - hook.emit('mount', { element: element, data: data, renderer: rid }); + mountComponent: function mountComponent(internalInstance, rootID, transaction, context) { + var data = getData(internalInstance); + rootNodeIDMap.set(internalInstance._rootNodeID, internalInstance); + hook.emit('mount', { internalInstance: internalInstance, data: data, renderer: rid }); }, - performUpdateIfNecessary: function performUpdateIfNecessary(element, nextChild, transaction, context) { - hook.emit('update', { element: element, data: getData(element), renderer: rid }); + performUpdateIfNecessary: function performUpdateIfNecessary(internalInstance, nextChild, transaction, context) { + hook.emit('update', { internalInstance: internalInstance, data: getData(internalInstance), renderer: rid }); }, - receiveComponent: function receiveComponent(element, nextChild, transaction, context) { - hook.emit('update', { element: element, data: getData(element), renderer: rid }); + receiveComponent: function receiveComponent(internalInstance, nextChild, transaction, context) { + hook.emit('update', { internalInstance: internalInstance, data: getData(internalInstance), renderer: rid }); }, - unmountComponent: function unmountComponent(element) { - hook.emit('unmount', { element: element, renderer: rid }); - rootNodeIDMap.delete(element._rootNodeID, element); + unmountComponent: function unmountComponent(internalInstance) { + hook.emit('unmount', { internalInstance: internalInstance, renderer: rid }); + rootNodeIDMap.delete(internalInstance._rootNodeID, internalInstance); } }); } @@ -8364,14 +8572,14 @@ } } - function walkNode(element, onMount, isPre013) { - var data = isPre013 ? getData012(element) : getData(element); + function walkNode(internalInstance, onMount, isPre013) { + var data = isPre013 ? getData012(internalInstance) : getData(internalInstance); if (data.children && Array.isArray(data.children)) { data.children.forEach(function (child) { return walkNode(child, onMount, isPre013); }); } - onMount(element, data); + onMount(internalInstance, data); } function decorateResult(obj, attr, fn) { @@ -8412,7 +8620,7 @@ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3))) /***/ }, -/* 46 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { /** @@ -8431,13 +8639,14 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - var copyWithSet = __webpack_require__(47); - var getDisplayName = __webpack_require__(48); + var copyWithSet = __webpack_require__(48); + var getDisplayName = __webpack_require__(49); + var traverseAllChildrenImpl = __webpack_require__(50); /** * Convert a react internal instance to a sanitized data object. */ - function getData(element) { + function getData(internalInstance) { var children = null; var props = null; var state = null; @@ -8454,72 +8663,99 @@ // If the parent is a native node without rendered children, but with // multiple string children, then the `element` that gets passed in here is // a plain value -- a string or number. - if ((typeof element === 'undefined' ? 'undefined' : _typeof(element)) !== 'object') { + if ((typeof internalInstance === 'undefined' ? 'undefined' : _typeof(internalInstance)) !== 'object') { nodeType = 'Text'; - text = element + ''; - } else if (element._currentElement === null || element._currentElement === false) { + text = internalInstance + ''; + } else if (internalInstance._currentElement === null || internalInstance._currentElement === false) { nodeType = 'Empty'; - } else if (element._renderedComponent) { + } else if (internalInstance._renderedComponent) { nodeType = 'NativeWrapper'; - children = [element._renderedComponent]; - props = element._instance.props; - state = element._instance.state; - context = element._instance.context; + children = [internalInstance._renderedComponent]; + props = internalInstance._instance.props; + state = internalInstance._instance.state; + context = internalInstance._instance.context; if (context && Object.keys(context).length === 0) { context = null; } - } else if (element._renderedChildren) { - children = childrenList(element._renderedChildren); - } else if (element._currentElement && element._currentElement.props) { + } else if (internalInstance._renderedChildren) { + children = childrenList(internalInstance._renderedChildren); + } else if (internalInstance._currentElement && internalInstance._currentElement.props) { // This is a native node without rendered children -- meaning the children - // prop is just a string or (in the case of the