diff --git a/.gitignore b/.gitignore index 185bf48..75f162b 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,6 @@ bld/ /src/DotNetBlog.Admin/node_modules /src/DotNetBlog.Admin/**/*.js.map /src/DotNetBlog.Web/wwwroot/app/**/*.js.map -/src/DotNetBlog.Web/wwwroot/dist /src/DotNetBlog.Web/wwwroot/upload /src/DotNetBlog.Web/wwwroot/app/dist !/src/DotNetBlog.Web/wwwroot/app/webpack.config.js diff --git a/DotNetBlog.sln b/DotNetBlog.sln index ab8ccf6..881e95b 100644 --- a/DotNetBlog.sln +++ b/DotNetBlog.sln @@ -1,15 +1,10 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26403.3 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30309.148 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9728357A-237B-4337-A648-6F56FE479A6F}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{61946056-1D5C-4774-B0D8-8FABADBDBE81}" - ProjectSection(SolutionItems) = preProject - global.json = global.json - EndProjectSection -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetBlog.Web", "src\DotNetBlog.Web\DotNetBlog.Web.csproj", "{89F9B8C8-2F34-41CF-B39E-C23935AFADC8}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetBlog.Core", "src\DotNetBlog.Core\DotNetBlog.Core.csproj", "{89065586-C5EF-4EF4-BCD5-63D47E6E3816}" @@ -62,4 +57,7 @@ Global {89065586-C5EF-4EF4-BCD5-63D47E6E3816} = {9728357A-237B-4337-A648-6F56FE479A6F} {D2657CFC-8E57-49BB-9BE9-4FE37599F0E3} = {9728357A-237B-4337-A648-6F56FE479A6F} EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A8BDBED8-2603-4771-8572-3EBAA91BF2E5} + EndGlobalSection EndGlobal diff --git a/Nuget.config b/Nuget.config deleted file mode 100644 index 49e1c77..0000000 --- a/Nuget.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/global.json b/global.json deleted file mode 100644 index 1d7c06c..0000000 --- a/global.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "projects": [ "src", "test" ], - "sdk": { "version": "2.0.0" } -} \ No newline at end of file diff --git a/src/DotNetBlog.Admin/components/editor.jsx b/src/DotNetBlog.Admin/components/editor.jsx index 8386dfb..4caa802 100644 --- a/src/DotNetBlog.Admin/components/editor.jsx +++ b/src/DotNetBlog.Admin/components/editor.jsx @@ -35,12 +35,12 @@ class Editor extends React.Component{ } }, this.props.options); - this.editor = editormd(this.id, options); + var currentEditor = this.editor = editormd(this.id, options); var lang = "editorLang".L(); + if (lang != "zh-cn") { editormd.loadScript("lib/editor.md/languages/" + lang, function () { - this.editor.lang = editormd.defaults.lang; - this.editor.recreate(); + currentEditor.lang = editormd.defaults.lang; }); } } @@ -49,14 +49,15 @@ class Editor extends React.Component{ return this.editor.markdownTextarea.val(); } - setContent(content){ - this.editor.markdownTextarea.val(content) + setContent(content) { + this.editor.markdownTextarea.val(content); + this.editor.recreate(); } componentDidUpdate(prevProps){ if(prevProps.content != this.props.content){ - if(this.editor){ - this.editor.markdownTextarea.val(this.props.content) + if (this.editor) { + this.setContent(this.props.content) } } } diff --git a/src/DotNetBlog.Admin/package-lock.json b/src/DotNetBlog.Admin/package-lock.json new file mode 100644 index 0000000..9c92d21 --- /dev/null +++ b/src/DotNetBlog.Admin/package-lock.json @@ -0,0 +1,6475 @@ +{ + "name": "app", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@allenfang/react-toastr": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@allenfang/react-toastr/-/react-toastr-2.8.2.tgz", + "integrity": "sha1-C+9lhRieBXHda9/E75i8n5xH2gw=", + "dev": true, + "requires": { + "classnames": "2.2.6", + "element-class": "0.2.2", + "lodash": "4.17.19", + "react": "15.3.2", + "react-addons-update": "15.3.2", + "react-dom": "15.3.2" + }, + "dependencies": { + "react": { + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/react/-/react-15.3.2.tgz", + "integrity": "sha1-p7zNL+6K8SawMX4iLCjR1UUo0J4=", + "dev": true, + "requires": { + "fbjs": "0.8.17", + "loose-envify": "1.4.0", + "object-assign": "4.1.1" + } + }, + "react-dom": { + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.3.2.tgz", + "integrity": "sha1-xGsKpTgNe4OOelnEp77/LtMVUx8=", + "dev": true + } + } + }, + "@babel/runtime": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.0.tgz", + "integrity": "sha512-qArkXsjJq7H+T86WrIFV0Fnu/tNOkZ4cgXmjkzAu3b/58D5mFIO8JH/y77t7C9q0OdDRdh9s7Ue5GasYssxtXw==", + "dev": true, + "requires": { + "regenerator-runtime": "0.13.7" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + } + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "2.1.27", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "4.17.19" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30001110", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.3", + "js-tokens": "3.0.2" + }, + "dependencies": { + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + } + } + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.7.0", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.19", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.19", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-helper-bindify-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-builder-react-jsx": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", + "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "esutils": "2.0.3" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.19" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-explode-class": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "dev": true, + "requires": { + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.19" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-loader": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-6.4.1.tgz", + "integrity": "sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=", + "dev": true, + "requires": { + "find-cache-dir": "0.1.1", + "loader-utils": "0.2.17", + "mkdirp": "0.5.5", + "object-assign": "4.1.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-add-module-exports": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz", + "integrity": "sha1-mumh9KjcZ/DN7E9K7aHkOl/2XiU=", + "dev": true + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-dev-expression": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-dev-expression/-/babel-plugin-dev-expression-0.2.2.tgz", + "integrity": "sha512-y32lfBif+c2FIh5dwGfcc/IfX5aw/Bru7Du7W2n17sJE/GJGAsmIk5DPW/8JOoeKpXW5evJfJOvRq5xkiS6vng==", + "dev": true + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-async-generators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", + "dev": true + }, + "babel-plugin-syntax-class-constructor-call": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", + "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", + "dev": true + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", + "dev": true + }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, + "babel-plugin-syntax-do-expressions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz", + "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=", + "dev": true + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-export-extensions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", + "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", + "dev": true + }, + "babel-plugin-syntax-flow": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", + "dev": true + }, + "babel-plugin-syntax-function-bind": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz", + "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=", + "dev": true + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-generator-functions": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-class-constructor-call": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", + "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", + "dev": true, + "requires": { + "babel-plugin-syntax-class-constructor-call": "6.18.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "dev": true, + "requires": { + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-do-expressions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz", + "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", + "dev": true, + "requires": { + "babel-plugin-syntax-do-expressions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.19" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-export-extensions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", + "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", + "dev": true, + "requires": { + "babel-plugin-syntax-export-extensions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-flow-strip-types": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", + "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "dev": true, + "requires": { + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-function-bind": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz", + "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", + "dev": true, + "requires": { + "babel-plugin-syntax-function-bind": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-object-assign": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz", + "integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-display-name": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", + "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-jsx": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", + "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", + "dev": true, + "requires": { + "babel-helper-builder-react-jsx": "6.26.0", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-jsx-self": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", + "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", + "dev": true, + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-jsx-source": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", + "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", + "dev": true, + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", + "dev": true + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0" + } + }, + "babel-preset-flow": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", + "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", + "dev": true, + "requires": { + "babel-plugin-transform-flow-strip-types": "6.22.0" + } + }, + "babel-preset-react": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", + "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", + "dev": true, + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.24.1", + "babel-plugin-transform-react-jsx-self": "6.22.0", + "babel-plugin-transform-react-jsx-source": "6.22.0", + "babel-preset-flow": "6.23.0" + } + }, + "babel-preset-stage-0": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz", + "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", + "dev": true, + "requires": { + "babel-plugin-transform-do-expressions": "6.22.0", + "babel-plugin-transform-function-bind": "6.22.0", + "babel-preset-stage-1": "6.24.1" + } + }, + "babel-preset-stage-1": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", + "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", + "dev": true, + "requires": { + "babel-plugin-transform-class-constructor-call": "6.24.1", + "babel-plugin-transform-export-extensions": "6.22.0", + "babel-preset-stage-2": "6.24.1" + } + }, + "babel-preset-stage-2": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "dev": true, + "requires": { + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" + } + }, + "babel-preset-stage-3": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.3", + "babel-runtime": "6.26.0", + "core-js": "2.6.11", + "home-or-tmp": "2.0.0", + "lodash": "4.17.19", + "mkdirp": "0.5.5", + "source-map-support": "0.4.18" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.6.11", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.19" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.19" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.3", + "lodash": "4.17.19", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.3.0", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.2", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.3" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.3" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "base62": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/base62/-/base62-1.2.8.tgz", + "integrity": "sha512-V6YHUbjLxN1ymqNLb1DPHoU1CpfdL7d2YTIp5W3U4hhoG4hhxNmsFDs66M9EXxBiSEke5Bt5dwdfMwwZF70iLA==", + "dev": true + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "1.6.18" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } + } + }, + "bootstrap": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz", + "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA==", + "dev": true + }, + "bootstrap-tagsinput": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/bootstrap-tagsinput/-/bootstrap-tagsinput-0.7.1.tgz", + "integrity": "sha1-/+Owa74qEGlF7ygUVoAFqU8hGTc=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.3" + } + }, + "browserify-aes": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz", + "integrity": "sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=", + "dev": true, + "requires": { + "inherits": "2.0.4" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true, + "requires": { + "pako": "0.2.9" + } + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30001110", + "electron-to-chromium": "1.3.518" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "1.3.1", + "ieee754": "1.1.13", + "isarray": "1.0.0" + } + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.3.0", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.1", + "to-object-path": "0.3.0", + "union-value": "1.0.1", + "unset-value": "1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30001110", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" + } + }, + "caniuse-db": { + "version": "1.0.30001110", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001110.tgz", + "integrity": "sha512-xQfHc6YlMJHJCST7DgbGFztXvXCDb8ueefhATdgWrW0DOvm1b/xjecH3xQZughGklclLkchZzwvPRUu4CTJ4hQ==", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.3", + "fsevents": "1.2.13", + "glob-parent": "2.0.0", + "inherits": "2.0.4", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.2.1" + } + }, + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "requires": { + "q": "1.5.1" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "requires": { + "clone": "1.0.4", + "color-convert": "1.9.3", + "color-string": "0.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "requires": { + "color": "0.11.4", + "css-color-names": "0.0.4", + "has": "1.0.3" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "commoner": { + "version": "0.10.8", + "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", + "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", + "dev": true, + "requires": { + "commander": "2.20.3", + "detective": "4.7.1", + "glob": "5.0.15", + "graceful-fs": "4.2.4", + "iconv-lite": "0.4.24", + "mkdirp": "0.5.5", + "private": "0.1.8", + "q": "1.5.1", + "recast": "0.11.23" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "1.3.7", + "bytes": "3.0.0", + "compressible": "2.0.18", + "debug": "2.6.9", + "on-headers": "1.0.2", + "safe-buffer": "5.1.2", + "vary": "1.1.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "create-react-class": { + "version": "15.6.3", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", + "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", + "dev": true, + "requires": { + "fbjs": "0.8.17", + "loose-envify": "1.4.0", + "object-assign": "4.1.1" + } + }, + "crypto-browserify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.3.0.tgz", + "integrity": "sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=", + "dev": true, + "requires": { + "browserify-aes": "0.4.0", + "pbkdf2-compat": "2.0.1", + "ripemd160": "0.2.0", + "sha.js": "2.2.6" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-loader": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.23.1.tgz", + "integrity": "sha1-n6I/K1wJZSNZEK1ezvO4o2OQ/lA=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.5.4", + "cssnano": "3.10.0", + "loader-utils": "0.2.17", + "lodash.camelcase": "3.0.1", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-modules-extract-imports": "1.2.1", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "source-list-map": "0.1.8" + } + }, + "css-selector-tokenizer": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.5.4.tgz", + "integrity": "sha1-E5uv00o1/QwUKEhwSeBpnm9qLCE=", + "dev": true, + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.2" + } + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "requires": { + "autoprefixer": "6.7.7", + "decamelize": "1.2.0", + "defined": "1.0.0", + "has": "1.0.3", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-calc": "5.3.1", + "postcss-colormin": "2.2.2", + "postcss-convert-values": "2.6.1", + "postcss-discard-comments": "2.0.4", + "postcss-discard-duplicates": "2.1.0", + "postcss-discard-empty": "2.1.0", + "postcss-discard-overridden": "0.1.1", + "postcss-discard-unused": "2.2.3", + "postcss-filter-plugins": "2.0.3", + "postcss-merge-idents": "2.1.7", + "postcss-merge-longhand": "2.0.2", + "postcss-merge-rules": "2.1.2", + "postcss-minify-font-values": "1.0.5", + "postcss-minify-gradients": "1.0.5", + "postcss-minify-params": "1.2.2", + "postcss-minify-selectors": "2.1.1", + "postcss-normalize-charset": "1.1.1", + "postcss-normalize-url": "3.0.8", + "postcss-ordered-values": "2.2.3", + "postcss-reduce-idents": "2.4.0", + "postcss-reduce-initial": "1.0.1", + "postcss-reduce-transforms": "1.0.4", + "postcss-svgo": "2.1.6", + "postcss-unique-selectors": "2.0.2", + "postcss-value-parser": "3.3.1", + "postcss-zindex": "2.2.0" + } + }, + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "requires": { + "clap": "1.2.3", + "source-map": "0.5.7" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "1.0.4", + "is-date-object": "1.0.2", + "is-regex": "1.1.1", + "object-is": "1.1.2", + "object-keys": "1.1.1", + "regexp.prototype.flags": "1.3.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "1.1.1" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.3" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.3" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "detective": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", + "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", + "dev": true, + "requires": { + "acorn": "5.7.4", + "defined": "1.0.0" + } + }, + "dom-helpers": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-2.4.0.tgz", + "integrity": "sha1-m7SyRfY3NnsfpnAnQnKqKP4Gw2c=", + "dev": true + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.518", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.518.tgz", + "integrity": "sha512-IspiwXYDKZMxo+qc3Vof4WtwbG9BMDbJfati8PYj7uS4DJmJ67pwjCKZxlTBSAuCZSMcbRnj2Xz2H14uiKT7bQ==", + "dev": true + }, + "element-class": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/element-class/-/element-class-0.2.2.tgz", + "integrity": "sha1-nTu9B2f5AT744cjr5yLBQCpgBQ4=", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "requires": { + "iconv-lite": "0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } + } + } + }, + "enhanced-resolve": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", + "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", + "dev": true, + "requires": { + "graceful-fs": "4.2.4", + "memory-fs": "0.2.0", + "tapable": "0.1.10" + }, + "dependencies": { + "memory-fs": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", + "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=", + "dev": true + } + } + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "1.0.1" + } + }, + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.0", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.0", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "1.2.0", + "is-date-object": "1.0.2", + "is-symbol": "1.0.3" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "requires": { + "original": "1.0.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.4" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.6", + "qs": "6.7.0", + "range-parser": "1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "1.5.0", + "type-is": "1.6.18", + "utils-merge": "1.0.1", + "vary": "1.1.2" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": "0.7.4" + } + }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "dev": true, + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "promise": "7.3.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.21" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "dev": true + } + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "3.1.1", + "repeat-element": "1.1.3", + "repeat-string": "1.6.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.3", + "statuses": "1.5.0", + "unpipe": "1.0.0" + } + }, + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.5", + "pkg-dir": "1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", + "dev": true + }, + "follow-redirects": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz", + "integrity": "sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "form-data-to-object": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/form-data-to-object/-/form-data-to-object-0.2.0.tgz", + "integrity": "sha1-96jmjd2RChEApl4lrGpIQUP/gWg=", + "dev": true + }, + "formsy-react": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/formsy-react/-/formsy-react-0.18.1.tgz", + "integrity": "sha1-xS7pW67yiW8VR85t+Nrl/NvZq0A=", + "dev": true, + "requires": { + "form-data-to-object": "0.2.0" + } + }, + "formsy-react-components": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/formsy-react-components/-/formsy-react-components-0.8.1.tgz", + "integrity": "sha1-LOTcF+25xz44nB5yBTIyXgj58Sg=", + "dev": true, + "requires": { + "classnames": "2.2.6" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "1.5.0", + "nan": "2.14.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.4", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "history": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/history/-/history-3.3.0.tgz", + "integrity": "sha1-/O3M6PEpdTcVRdc1RhAzV5ptrpw=", + "dev": true, + "requires": { + "invariant": "2.2.4", + "loose-envify": "1.4.0", + "query-string": "4.3.4", + "warning": "3.0.0" + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dev": true, + "requires": { + "react-is": "16.13.1" + } + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": "1.5.0", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.2.tgz", + "integrity": "sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "4.0.4", + "follow-redirects": "1.12.1", + "requires-port": "1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "dev": true, + "requires": { + "http-proxy": "1.18.1", + "is-glob": "3.1.0", + "lodash": "4.17.19", + "micromatch": "2.3.11" + }, + "dependencies": { + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "interpret": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz", + "integrity": "sha1-/s16GOfOXKar+5U+H4YhOknxYls=", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "1.4.0" + } + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.13.1" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "requires": { + "html-comment-regex": "1.1.2" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "1.0.1" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dev": true, + "requires": { + "node-fetch": "1.7.3", + "whatwg-fetch": "1.1.1" + } + }, + "js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "2.7.3" + } + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jstransform": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz", + "integrity": "sha1-CaeJk+CuTU70SH9hVakfYZDLQiM=", + "dev": true, + "requires": { + "base62": "1.2.8", + "commoner": "0.10.8", + "esprima-fb": "15001.1.0-dev-harmony-fb", + "object-assign": "2.1.1", + "source-map": "0.4.4" + }, + "dependencies": { + "esprima-fb": { + "version": "15001.1.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz", + "integrity": "sha1-MKlHMDxrjV6VW+4rmbHSMyBqaQE=", + "dev": true + }, + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", + "dev": true + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "jsx-loader": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/jsx-loader/-/jsx-loader-0.13.2.tgz", + "integrity": "sha1-l2f2Q5dcePXlq+upvFeIUpfnMtQ=", + "dev": true, + "requires": { + "jstransform": "11.0.3", + "loader-utils": "0.2.17" + } + }, + "keycode": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz", + "integrity": "sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + }, + "lodash-compat": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/lodash-compat/-/lodash-compat-3.10.2.tgz", + "integrity": "sha1-xpQBKKnTD46QLNLPmf0Muk7PwYM=", + "dev": true + }, + "lodash-es": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", + "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==", + "dev": true + }, + "lodash._createcompounder": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz", + "integrity": "sha1-XdLLVTctbnDg4jkvsjBNZjEJEHU=", + "dev": true, + "requires": { + "lodash.deburr": "3.2.0", + "lodash.words": "3.2.0" + } + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.camelcase": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-3.0.1.tgz", + "integrity": "sha1-kyyLh/ikN3iXxnGXUzKC+Xrqwpg=", + "dev": true, + "requires": { + "lodash._createcompounder": "3.0.0" + } + }, + "lodash.deburr": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-3.2.0.tgz", + "integrity": "sha1-baj1QzSjZqfPTEx2742Aqhs2XtU=", + "dev": true, + "requires": { + "lodash._root": "3.0.1" + } + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "lodash.words": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.words/-/lodash.words-3.2.0.tgz", + "integrity": "sha1-TiqGSbwIdFsXxpWxo86P7llmI7M=", + "dev": true, + "requires": { + "lodash._root": "3.0.1" + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "4.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, + "math-expression-evaluator": { + "version": "1.2.22", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.22.tgz", + "integrity": "sha512-L0j0tFVZBQQLeEjmWOvDLoRciIY8gQGWahvkztXUal8jH8R5Rlqo9GCvgqvXcy9LQhEWdQCVvzqAbxgYNt4blQ==", + "dev": true + }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz", + "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=", + "dev": true, + "requires": { + "errno": "0.1.7", + "readable-stream": "2.3.7" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "1.2.5" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-windows": "1.0.2", + "kind-of": "6.0.3", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dev": true, + "requires": { + "encoding": "0.1.13", + "is-stream": "1.1.0" + } + }, + "node-libs-browser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.7.0.tgz", + "integrity": "sha1-PicsCBnjCJNeJmdECNevDhSRuDs=", + "dev": true, + "requires": { + "assert": "1.5.0", + "browserify-zlib": "0.1.4", + "buffer": "4.9.2", + "console-browserify": "1.2.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.3.0", + "domain-browser": "1.2.0", + "events": "1.1.1", + "https-browserify": "0.0.1", + "os-browserify": "0.2.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.7", + "stream-browserify": "2.0.2", + "stream-http": "2.8.3", + "string_decoder": "0.10.31", + "timers-browserify": "2.0.11", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.4", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + }, + "object-is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", + "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "dev": true, + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.17.6" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "1.1.3", + "function-bind": "1.1.1", + "has-symbols": "1.0.1", + "object-keys": "1.1.1" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "open": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/open/-/open-0.0.5.tgz", + "integrity": "sha1-QsPhjslUZra/DcQvOilFw/DK2Pw=", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + } + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "1.4.7" + } + }, + "os-browserify": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", + "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "pbkdf2-compat": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz", + "integrity": "sha1-tuDI+plJTZTgURV1gCpZpcFC8og=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "1.1.2" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.6.4", + "source-map": "0.5.7", + "supports-color": "3.2.3" + }, + "dependencies": { + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-message-helpers": "2.0.0", + "reduce-css-calc": "1.3.0" + } + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "requires": { + "colormin": "1.1.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "uniqs": "2.0.0" + } + }, + "postcss-filter-plugins": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", + "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "requires": { + "has": "1.0.3", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-api": "1.6.1", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3", + "vendors": "1.0.4" + } + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" + } + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" + } + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1", + "uniqs": "2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "has": "1.0.3", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3" + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", + "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", + "dev": true, + "requires": { + "postcss": "6.0.23" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.3" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "5.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.3", + "postcss": "6.0.23" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.3" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "dev": true, + "requires": { + "cssesc": "3.0.0", + "fastparse": "1.1.2" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "5.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.3", + "postcss": "6.0.23" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.3" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "dev": true, + "requires": { + "cssesc": "3.0.0", + "fastparse": "1.1.2" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "5.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.23" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.3" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "5.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "requires": { + "is-absolute-url": "2.1.0", + "normalize-url": "1.9.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" + } + }, + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" + } + }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "requires": { + "has": "1.0.3", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "1.0.3", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "requires": { + "is-svg": "2.1.0", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1", + "svgo": "0.7.2" + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "uniqs": "2.0.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "requires": { + "has": "1.0.3", + "postcss": "5.2.18", + "uniqs": "2.0.0" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "requires": { + "asap": "2.0.6" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "react-is": "16.13.1" + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "dev": true + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "requires": { + "is-number": "4.0.0", + "kind-of": "6.0.3", + "math-random": "1.0.4" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } + } + }, + "react": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz", + "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=", + "dev": true, + "requires": { + "create-react-class": "15.6.3", + "fbjs": "0.8.17", + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "prop-types": "15.7.2" + } + }, + "react-addons-update": { + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/react-addons-update/-/react-addons-update-15.3.2.tgz", + "integrity": "sha1-tjhcTbHl3zcYJeBhWwQ2DtlEMP4=", + "dev": true + }, + "react-bootstrap": { + "version": "0.29.5", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-0.29.5.tgz", + "integrity": "sha1-DG96fQaDSw24WhjM3cBLEpxfIFg=", + "dev": true, + "requires": { + "babel-runtime": "5.8.38", + "classnames": "2.2.6", + "dom-helpers": "2.4.0", + "invariant": "2.2.4", + "keycode": "2.2.0", + "lodash-compat": "3.10.2", + "react-overlays": "0.6.12", + "react-prop-types": "0.3.2", + "uncontrollable": "3.3.1", + "warning": "2.1.0" + }, + "dependencies": { + "babel-runtime": { + "version": "5.8.38", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-5.8.38.tgz", + "integrity": "sha1-HAsC62MxL18If/IEUIJ7QlydTBk=", + "dev": true, + "requires": { + "core-js": "1.2.7" + } + }, + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "dev": true + }, + "warning": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz", + "integrity": "sha1-ISINnGOvx3qMkhEeARr3Bc4MaQE=", + "dev": true, + "requires": { + "loose-envify": "1.4.0" + } + } + } + }, + "react-bootstrap-table": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/react-bootstrap-table/-/react-bootstrap-table-2.11.2.tgz", + "integrity": "sha1-e4A2p53hQMBStbLtjubDTnhqPbw=", + "dev": true, + "requires": { + "@allenfang/react-toastr": "2.8.2", + "classnames": "2.2.6" + } + }, + "react-dom": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.2.tgz", + "integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=", + "dev": true, + "requires": { + "fbjs": "0.8.17", + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "prop-types": "15.7.2" + } + }, + "react-hot-api": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/react-hot-api/-/react-hot-api-0.4.7.tgz", + "integrity": "sha1-p+IqVtJS4Rq9k2a2EmTPRJLFgXE=", + "dev": true + }, + "react-hot-loader": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-1.3.1.tgz", + "integrity": "sha1-yVZHrni3Pfzv9uxx/8sEGC/22vk=", + "dev": true, + "requires": { + "react-hot-api": "0.4.7", + "source-map": "0.4.4" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-lazy-cache": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/react-lazy-cache/-/react-lazy-cache-3.0.1.tgz", + "integrity": "sha1-DcZNON8XZ+93Z4xclBkAZMsRsM0=", + "dev": true, + "requires": { + "deep-equal": "1.1.1" + } + }, + "react-localization": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/react-localization/-/react-localization-0.0.13.tgz", + "integrity": "sha1-7fv2kZoflFY7caCyjF5t7l8eVCU=" + }, + "react-overlays": { + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-0.6.12.tgz", + "integrity": "sha1-oHnHUMxCnX20x0dKlbS1QDPiVcM=", + "dev": true, + "requires": { + "classnames": "2.2.6", + "dom-helpers": "3.4.0", + "react-prop-types": "0.4.0", + "warning": "3.0.0" + }, + "dependencies": { + "dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "dev": true, + "requires": { + "@babel/runtime": "7.11.0" + } + }, + "react-prop-types": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/react-prop-types/-/react-prop-types-0.4.0.tgz", + "integrity": "sha1-+ZsL+0AGkpya8gUefBQUpcdbk9A=", + "dev": true, + "requires": { + "warning": "3.0.0" + } + } + } + }, + "react-prop-types": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/react-prop-types/-/react-prop-types-0.3.2.tgz", + "integrity": "sha1-4nY6xvOoAZnYmBw2R8RLBVTJe38=", + "dev": true, + "requires": { + "warning": "2.1.0" + }, + "dependencies": { + "warning": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz", + "integrity": "sha1-ISINnGOvx3qMkhEeARr3Bc4MaQE=", + "dev": true, + "requires": { + "loose-envify": "1.4.0" + } + } + } + }, + "react-redux": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-4.4.10.tgz", + "integrity": "sha512-tjL0Bmpkj75Td0k+lXlF8Fc8a9GuXFv/3ahUOCXExWs/jhsKiQeTffdH0j5byejCGCRL4tvGFYlrwBF1X/Aujg==", + "dev": true, + "requires": { + "create-react-class": "15.6.3", + "hoist-non-react-statics": "3.3.2", + "invariant": "2.2.4", + "lodash": "4.17.19", + "loose-envify": "1.4.0", + "prop-types": "15.7.2" + } + }, + "react-router": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-2.8.1.tgz", + "integrity": "sha1-c+lJH2zrMW0Pd5gpCBhj43juTtc=", + "dev": true, + "requires": { + "history": "2.1.2", + "hoist-non-react-statics": "1.2.0", + "invariant": "2.2.4", + "loose-envify": "1.4.0", + "warning": "3.0.0" + }, + "dependencies": { + "history": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/history/-/history-2.1.2.tgz", + "integrity": "sha1-SqLeiXoOSGfkU5hDvm7Nsphr/ew=", + "dev": true, + "requires": { + "deep-equal": "1.1.1", + "invariant": "2.2.4", + "query-string": "3.0.3", + "warning": "2.1.0" + }, + "dependencies": { + "warning": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz", + "integrity": "sha1-ISINnGOvx3qMkhEeARr3Bc4MaQE=", + "dev": true, + "requires": { + "loose-envify": "1.4.0" + } + } + } + }, + "hoist-non-react-statics": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", + "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=", + "dev": true + }, + "query-string": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-3.0.3.tgz", + "integrity": "sha1-ri4UtNBQcdTpuetIc8NbDc1C5jg=", + "dev": true, + "requires": { + "strict-uri-encode": "1.1.0" + } + } + } + }, + "react-sortable": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/react-sortable/-/react-sortable-1.3.2.tgz", + "integrity": "sha512-9THnR4dmYVPex87ay/5FAazAXXwF+optvJKqaojS37AZMSId6wCH5Wo6+CiXM0fZxWTn7+dcabpYf/f4/CjrpA==", + "requires": { + "react": "16.13.1", + "react-dom": "16.13.1" + }, + "dependencies": { + "react": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", + "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", + "requires": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "prop-types": "15.7.2" + } + }, + "react-dom": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", + "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", + "requires": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "prop-types": "15.7.2", + "scheduler": "0.19.1" + } + } + } + }, + "react-tagsinput": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/react-tagsinput/-/react-tagsinput-3.19.0.tgz", + "integrity": "sha512-ni+/qnZrYrvLg83LtTFHErKy1KQHL0fi0Y6C5jgC1dNUePE9cS/OlQ4XH6JRSjv9GGoeVE0R/ujSBaS1uzCRYQ==", + "dev": true + }, + "react-tinymce": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/react-tinymce/-/react-tinymce-0.5.1.tgz", + "integrity": "sha1-j1a3+Bzv7Qb0rKa2bJA+LbFlwsQ=", + "dev": true, + "requires": { + "lodash": "3.10.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "4.2.4", + "micromatch": "3.1.10", + "readable-stream": "2.3.7" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.3" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.3" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + } + } + }, + "recast": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "dev": true, + "requires": { + "ast-types": "0.9.6", + "esprima": "3.1.3", + "private": "0.1.8", + "source-map": "0.5.7" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + } + } + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "math-expression-evaluator": "1.2.22", + "reduce-function-call": "1.0.3" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reduce-function-call": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", + "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==", + "dev": true, + "requires": { + "balanced-match": "1.0.0" + } + }, + "redux": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", + "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", + "dev": true, + "requires": { + "lodash": "4.17.19", + "lodash-es": "4.17.15", + "loose-envify": "1.4.0", + "symbol-observable": "1.2.0" + } + }, + "redux-form": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-5.4.0.tgz", + "integrity": "sha512-Ssftdf3Or6nwEBl1SqgPbZdxhmZC8AejHTTLnt1R6SfCqyoHgPnPyxu8NuewS2KvDN925nwRT9dGxeIYDgtAWQ==", + "dev": true, + "requires": { + "deep-equal": "1.1.1", + "hoist-non-react-statics": "2.5.5", + "invariant": "2.2.4", + "is-promise": "2.2.2", + "prop-types": "15.7.2", + "react-lazy-cache": "3.0.1" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==", + "dev": true + } + } + }, + "redux-thunk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", + "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==", + "dev": true + }, + "regenerate": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.17.6" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "1.4.1", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.1.0" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "0.1.4" + } + }, + "ripemd160": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz", + "integrity": "sha1-K/GYveFnys+lHAqSjoS2i74XH84=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "requires": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1" + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "2.3.0", + "range-parser": "1.2.1", + "statuses": "1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "1.3.7", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "1.0.3", + "http-errors": "1.6.3", + "mime-types": "2.1.27", + "parseurl": "1.3.3" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.5.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.3", + "send": "0.17.1" + } + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.2.6.tgz", + "integrity": "sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.3", + "use": "3.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.3" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.3" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "dev": true, + "requires": { + "faye-websocket": "0.11.3", + "uuid": "3.4.0", + "websocket-driver": "0.7.4" + } + }, + "sockjs-client": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.0.tgz", + "integrity": "sha512-8Dt3BDi4FYNrCFGTL/HtwVzkARrENdwOUf1ZoW/9p3M8lZdFT35jVdrHza+qgxuG9H3/shR4cuX/X9umUrjP8Q==", + "dev": true, + "requires": { + "debug": "3.2.6", + "eventsource": "1.0.7", + "faye-websocket": "0.11.3", + "inherits": "2.0.4", + "json3": "3.3.3", + "url-parse": "1.4.7" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "1.1.0" + } + }, + "source-list-map": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", + "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "2.1.2", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "2.0.4", + "readable-stream": "2.3.7" + } + }, + "stream-cache": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stream-cache/-/stream-cache-0.0.2.tgz", + "integrity": "sha1-GsWtaDJCjKVWZ9ve45Xa1ObbEY8=", + "dev": true + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.4", + "readable-stream": "2.3.7", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.2" + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.17.6" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.17.6" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "style-loader": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.2.tgz", + "integrity": "sha1-dFMzhM9pjHEEx5URULSXF63C87s=", + "dev": true, + "requires": { + "loader-utils": "1.4.0" + }, + "dependencies": { + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "1.2.5" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + } + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "1.0.4", + "colors": "1.1.2", + "csso": "2.3.2", + "js-yaml": "3.7.0", + "mkdirp": "0.5.5", + "sax": "1.2.4", + "whet.extend": "0.9.9" + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "dev": true + }, + "tapable": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", + "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=", + "dev": true + }, + "time-stamp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.2.0.tgz", + "integrity": "sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + } + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.27" + } + }, + "ua-parser-js": { + "version": "0.7.21", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", + "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==", + "dev": true + }, + "uglify-js": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz", + "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=", + "dev": true, + "requires": { + "async": "0.2.10", + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true + }, + "uncontrollable": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-3.3.1.tgz", + "integrity": "sha1-4jtALnpMabGFP7S0PONLZIDGW28=", + "dev": true, + "requires": { + "invariant": "2.2.4" + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dev": true, + "requires": { + "querystringify": "2.1.1", + "requires-port": "1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "dev": true, + "requires": { + "loose-envify": "1.4.0" + } + }, + "watchpack": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz", + "integrity": "sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=", + "dev": true, + "requires": { + "async": "0.9.2", + "chokidar": "1.7.0", + "graceful-fs": "4.2.4" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + } + } + }, + "webpack": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.15.0.tgz", + "integrity": "sha1-T/MfU9sDM55VFkqdRo7gMklo/pg=", + "dev": true, + "requires": { + "acorn": "3.3.0", + "async": "1.5.2", + "clone": "1.0.4", + "enhanced-resolve": "0.9.1", + "interpret": "0.6.6", + "loader-utils": "0.2.17", + "memory-fs": "0.3.0", + "mkdirp": "0.5.5", + "node-libs-browser": "0.7.0", + "optimist": "0.6.1", + "supports-color": "3.2.3", + "tapable": "0.1.10", + "uglify-js": "2.7.5", + "watchpack": "0.2.9", + "webpack-core": "0.6.9" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "webpack-core": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", + "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", + "dev": true, + "requires": { + "source-list-map": "0.1.8", + "source-map": "0.4.4" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.6.0", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.1", + "time-stamp": "2.2.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.7", + "readable-stream": "2.3.7" + } + } + } + }, + "webpack-dev-server": { + "version": "1.16.5", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-1.16.5.tgz", + "integrity": "sha1-DL1fLSrI1OWTqs1clwLnu9XlmJI=", + "dev": true, + "requires": { + "compression": "1.7.4", + "connect-history-api-fallback": "1.6.0", + "express": "4.17.1", + "http-proxy-middleware": "0.17.4", + "open": "0.0.5", + "optimist": "0.6.1", + "serve-index": "1.9.1", + "sockjs": "0.3.21", + "sockjs-client": "1.5.0", + "stream-cache": "0.0.2", + "strip-ansi": "3.0.1", + "supports-color": "3.2.3", + "webpack-dev-middleware": "1.12.2" + }, + "dependencies": { + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": "0.5.2", + "safe-buffer": "5.1.2", + "websocket-extensions": "0.1.4" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "whatwg-fetch": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz", + "integrity": "sha1-rDydOfMgxtzlM5lp0FTvQ90zMxk=", + "dev": true + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } +} diff --git a/src/DotNetBlog.Core/ClientManager.cs b/src/DotNetBlog.Core/ClientManager.cs index a2ba81b..e2c7954 100644 --- a/src/DotNetBlog.Core/ClientManager.cs +++ b/src/DotNetBlog.Core/ClientManager.cs @@ -1,12 +1,10 @@ using DotNetBlog.Core.Data; using DotNetBlog.Core.Entity; +using DotNetBlog.Core.Extensions; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using System; -using System.Collections.Generic; using System.Linq; -using System.Threading.Tasks; -using DotNetBlog.Core.Extensions; namespace DotNetBlog.Core { diff --git a/src/DotNetBlog.Core/Data/BlogContext.cs b/src/DotNetBlog.Core/Data/BlogContext.cs index b32287e..a01085e 100644 --- a/src/DotNetBlog.Core/Data/BlogContext.cs +++ b/src/DotNetBlog.Core/Data/BlogContext.cs @@ -1,10 +1,7 @@ -using DotNetBlog.Core.Entity; +using DotNetBlog.Core.Data.Mappings; +using DotNetBlog.Core.Entity; using Microsoft.EntityFrameworkCore; using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using DotNetBlog.Core.Data.Mappings; namespace DotNetBlog.Core.Data { @@ -43,7 +40,7 @@ public BlogContext(DbContextOptions options, IServiceProvider servi protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); - + modelBuilder.Entity(SettingMapping.Map); modelBuilder.Entity(CategoryMapping.Map); modelBuilder.Entity(CategoryTopicMapping.Map); diff --git a/src/DotNetBlog.Core/Data/Mappings/CategoryMapping.cs b/src/DotNetBlog.Core/Data/Mappings/CategoryMapping.cs index abcddb8..f851de0 100644 --- a/src/DotNetBlog.Core/Data/Mappings/CategoryMapping.cs +++ b/src/DotNetBlog.Core/Data/Mappings/CategoryMapping.cs @@ -1,10 +1,6 @@ using DotNetBlog.Core.Entity; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace DotNetBlog.Core.Data.Mappings { diff --git a/src/DotNetBlog.Core/Data/Mappings/CategoryTopicMapping.cs b/src/DotNetBlog.Core/Data/Mappings/CategoryTopicMapping.cs index e028eb1..5cf75da 100644 --- a/src/DotNetBlog.Core/Data/Mappings/CategoryTopicMapping.cs +++ b/src/DotNetBlog.Core/Data/Mappings/CategoryTopicMapping.cs @@ -1,10 +1,6 @@ using DotNetBlog.Core.Entity; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace DotNetBlog.Core.Data.Mappings { diff --git a/src/DotNetBlog.Core/Data/Mappings/CommentMapping.cs b/src/DotNetBlog.Core/Data/Mappings/CommentMapping.cs index 3b232cd..9d31c36 100644 --- a/src/DotNetBlog.Core/Data/Mappings/CommentMapping.cs +++ b/src/DotNetBlog.Core/Data/Mappings/CommentMapping.cs @@ -1,10 +1,6 @@ using DotNetBlog.Core.Entity; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace DotNetBlog.Core.Data.Mappings { diff --git a/src/DotNetBlog.Core/Data/Mappings/LinkMapping.cs b/src/DotNetBlog.Core/Data/Mappings/LinkMapping.cs index d30582f..0447f5b 100644 --- a/src/DotNetBlog.Core/Data/Mappings/LinkMapping.cs +++ b/src/DotNetBlog.Core/Data/Mappings/LinkMapping.cs @@ -1,11 +1,4 @@ -using DotNetBlog.Core.Entity; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Data.Mappings +namespace DotNetBlog.Core.Data.Mappings { public sealed class LinkMapping { diff --git a/src/DotNetBlog.Core/Data/Mappings/PageMapping.cs b/src/DotNetBlog.Core/Data/Mappings/PageMapping.cs index 4514f0e..6b2c084 100644 --- a/src/DotNetBlog.Core/Data/Mappings/PageMapping.cs +++ b/src/DotNetBlog.Core/Data/Mappings/PageMapping.cs @@ -1,10 +1,6 @@ using DotNetBlog.Core.Entity; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace DotNetBlog.Core.Data.Mappings { diff --git a/src/DotNetBlog.Core/Data/Mappings/SettingMapping.cs b/src/DotNetBlog.Core/Data/Mappings/SettingMapping.cs index 59dac71..4f0ab79 100644 --- a/src/DotNetBlog.Core/Data/Mappings/SettingMapping.cs +++ b/src/DotNetBlog.Core/Data/Mappings/SettingMapping.cs @@ -1,10 +1,6 @@ using DotNetBlog.Core.Entity; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace DotNetBlog.Core.Data.Mappings { diff --git a/src/DotNetBlog.Core/Data/Mappings/TagMapping.cs b/src/DotNetBlog.Core/Data/Mappings/TagMapping.cs index e189bc1..6094fa6 100644 --- a/src/DotNetBlog.Core/Data/Mappings/TagMapping.cs +++ b/src/DotNetBlog.Core/Data/Mappings/TagMapping.cs @@ -1,10 +1,6 @@ using DotNetBlog.Core.Entity; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace DotNetBlog.Core.Data.Mappings { diff --git a/src/DotNetBlog.Core/Data/Mappings/TagTopicMapping.cs b/src/DotNetBlog.Core/Data/Mappings/TagTopicMapping.cs index 8b8076e..2c34007 100644 --- a/src/DotNetBlog.Core/Data/Mappings/TagTopicMapping.cs +++ b/src/DotNetBlog.Core/Data/Mappings/TagTopicMapping.cs @@ -1,10 +1,6 @@ using DotNetBlog.Core.Entity; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace DotNetBlog.Core.Data.Mappings { diff --git a/src/DotNetBlog.Core/Data/Mappings/TopicMapping.cs b/src/DotNetBlog.Core/Data/Mappings/TopicMapping.cs index c226ac2..06cf212 100644 --- a/src/DotNetBlog.Core/Data/Mappings/TopicMapping.cs +++ b/src/DotNetBlog.Core/Data/Mappings/TopicMapping.cs @@ -1,10 +1,6 @@ using DotNetBlog.Core.Entity; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace DotNetBlog.Core.Data.Mappings { diff --git a/src/DotNetBlog.Core/Data/Mappings/UserMapping.cs b/src/DotNetBlog.Core/Data/Mappings/UserMapping.cs index 3403b44..cded68f 100644 --- a/src/DotNetBlog.Core/Data/Mappings/UserMapping.cs +++ b/src/DotNetBlog.Core/Data/Mappings/UserMapping.cs @@ -1,10 +1,6 @@ using DotNetBlog.Core.Entity; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace DotNetBlog.Core.Data.Mappings { diff --git a/src/DotNetBlog.Core/Data/Mappings/UserTokenMapping.cs b/src/DotNetBlog.Core/Data/Mappings/UserTokenMapping.cs index 367173f..1abbfa0 100644 --- a/src/DotNetBlog.Core/Data/Mappings/UserTokenMapping.cs +++ b/src/DotNetBlog.Core/Data/Mappings/UserTokenMapping.cs @@ -1,10 +1,6 @@ using DotNetBlog.Core.Entity; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace DotNetBlog.Core.Data.Mappings { diff --git a/src/DotNetBlog.Core/Data/Mappings/WidgetMapping.cs b/src/DotNetBlog.Core/Data/Mappings/WidgetMapping.cs index a48231a..b706483 100644 --- a/src/DotNetBlog.Core/Data/Mappings/WidgetMapping.cs +++ b/src/DotNetBlog.Core/Data/Mappings/WidgetMapping.cs @@ -1,10 +1,6 @@ using DotNetBlog.Core.Entity; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace DotNetBlog.Core.Data.Mappings { diff --git a/src/DotNetBlog.Core/DotNetBlog.Core.csproj b/src/DotNetBlog.Core/DotNetBlog.Core.csproj index 570916c..2bcb239 100644 --- a/src/DotNetBlog.Core/DotNetBlog.Core.csproj +++ b/src/DotNetBlog.Core/DotNetBlog.Core.csproj @@ -1,29 +1,24 @@ - 1.2.0 - netstandard2.0 + netstandard2.1 DotNetBlog.Core DotNetBlog.Core - $(PackageTargetFallback);dotnet5.6;dnxcore50;portable-net45+win8 - false - false - false - - + + + - - - - - - - - - + + + + + + + + diff --git a/src/DotNetBlog.Core/Entity/Category.cs b/src/DotNetBlog.Core/Entity/Category.cs index 8c9bc00..10b875b 100644 --- a/src/DotNetBlog.Core/Entity/Category.cs +++ b/src/DotNetBlog.Core/Entity/Category.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Entity +namespace DotNetBlog.Core.Entity { public class Category { diff --git a/src/DotNetBlog.Core/Entity/CategoryTopic.cs b/src/DotNetBlog.Core/Entity/CategoryTopic.cs index d1cc2e4..8a83dfc 100644 --- a/src/DotNetBlog.Core/Entity/CategoryTopic.cs +++ b/src/DotNetBlog.Core/Entity/CategoryTopic.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Entity +namespace DotNetBlog.Core.Entity { public class CategoryTopic { diff --git a/src/DotNetBlog.Core/Entity/Comment.cs b/src/DotNetBlog.Core/Entity/Comment.cs index de50e33..37c1abf 100644 --- a/src/DotNetBlog.Core/Entity/Comment.cs +++ b/src/DotNetBlog.Core/Entity/Comment.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Core.Entity { diff --git a/src/DotNetBlog.Core/Entity/Link.cs b/src/DotNetBlog.Core/Entity/Link.cs index fa429ab..84152ba 100644 --- a/src/DotNetBlog.Core/Entity/Link.cs +++ b/src/DotNetBlog.Core/Entity/Link.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Entity +namespace DotNetBlog.Core.Entity { public class Link { diff --git a/src/DotNetBlog.Core/Entity/Page.cs b/src/DotNetBlog.Core/Entity/Page.cs index b7109cb..77d9ac5 100644 --- a/src/DotNetBlog.Core/Entity/Page.cs +++ b/src/DotNetBlog.Core/Entity/Page.cs @@ -1,8 +1,5 @@ using DotNetBlog.Core.Enums; using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Core.Entity { diff --git a/src/DotNetBlog.Core/Entity/Setting.cs b/src/DotNetBlog.Core/Entity/Setting.cs index be8c3b5..392da2c 100644 --- a/src/DotNetBlog.Core/Entity/Setting.cs +++ b/src/DotNetBlog.Core/Entity/Setting.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Entity +namespace DotNetBlog.Core.Entity { public class Setting { diff --git a/src/DotNetBlog.Core/Entity/Tag.cs b/src/DotNetBlog.Core/Entity/Tag.cs index c09b015..88f11a5 100644 --- a/src/DotNetBlog.Core/Entity/Tag.cs +++ b/src/DotNetBlog.Core/Entity/Tag.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Entity +namespace DotNetBlog.Core.Entity { public class Tag { diff --git a/src/DotNetBlog.Core/Entity/TagTopic.cs b/src/DotNetBlog.Core/Entity/TagTopic.cs index 079338e..f7b2487 100644 --- a/src/DotNetBlog.Core/Entity/TagTopic.cs +++ b/src/DotNetBlog.Core/Entity/TagTopic.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Entity +namespace DotNetBlog.Core.Entity { public class TagTopic { diff --git a/src/DotNetBlog.Core/Entity/Topic.cs b/src/DotNetBlog.Core/Entity/Topic.cs index a910edc..1b47004 100644 --- a/src/DotNetBlog.Core/Entity/Topic.cs +++ b/src/DotNetBlog.Core/Entity/Topic.cs @@ -1,8 +1,5 @@ using DotNetBlog.Core.Enums; using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Core.Entity { diff --git a/src/DotNetBlog.Core/Entity/User.cs b/src/DotNetBlog.Core/Entity/User.cs index fe69bd4..752aade 100644 --- a/src/DotNetBlog.Core/Entity/User.cs +++ b/src/DotNetBlog.Core/Entity/User.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Core.Entity { diff --git a/src/DotNetBlog.Core/Entity/UserToken.cs b/src/DotNetBlog.Core/Entity/UserToken.cs index d609d34..fdefe23 100644 --- a/src/DotNetBlog.Core/Entity/UserToken.cs +++ b/src/DotNetBlog.Core/Entity/UserToken.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Entity +namespace DotNetBlog.Core.Entity { public class UserToken { diff --git a/src/DotNetBlog.Core/Entity/Widget.cs b/src/DotNetBlog.Core/Entity/Widget.cs index e21a8b2..01281b1 100644 --- a/src/DotNetBlog.Core/Entity/Widget.cs +++ b/src/DotNetBlog.Core/Entity/Widget.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Entity +namespace DotNetBlog.Core.Entity { public class Widget { diff --git a/src/DotNetBlog.Core/Enums/CommentStatus.cs b/src/DotNetBlog.Core/Enums/CommentStatus.cs index 445f176..2c4f69a 100644 --- a/src/DotNetBlog.Core/Enums/CommentStatus.cs +++ b/src/DotNetBlog.Core/Enums/CommentStatus.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Enums +namespace DotNetBlog.Core.Enums { public enum CommentStatus : byte { diff --git a/src/DotNetBlog.Core/Enums/PageStatus.cs b/src/DotNetBlog.Core/Enums/PageStatus.cs index 1d42f31..b43f0f1 100644 --- a/src/DotNetBlog.Core/Enums/PageStatus.cs +++ b/src/DotNetBlog.Core/Enums/PageStatus.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Enums +namespace DotNetBlog.Core.Enums { public enum PageStatus { diff --git a/src/DotNetBlog.Core/Enums/TopicStatus.cs b/src/DotNetBlog.Core/Enums/TopicStatus.cs index 0aa0a27..374ca26 100644 --- a/src/DotNetBlog.Core/Enums/TopicStatus.cs +++ b/src/DotNetBlog.Core/Enums/TopicStatus.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Enums +namespace DotNetBlog.Core.Enums { public enum TopicStatus : byte { diff --git a/src/DotNetBlog.Core/Enums/WidgetType.cs b/src/DotNetBlog.Core/Enums/WidgetType.cs index bc90a19..baf4e56 100644 --- a/src/DotNetBlog.Core/Enums/WidgetType.cs +++ b/src/DotNetBlog.Core/Enums/WidgetType.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Enums +namespace DotNetBlog.Core.Enums { public enum WidgetType : byte { diff --git a/src/DotNetBlog.Core/Extensions/BlogContextExtensions.cs b/src/DotNetBlog.Core/Extensions/BlogContextExtensions.cs index e6b0f2c..c00fb3b 100644 --- a/src/DotNetBlog.Core/Extensions/BlogContextExtensions.cs +++ b/src/DotNetBlog.Core/Extensions/BlogContextExtensions.cs @@ -1,15 +1,14 @@ using DotNetBlog.Core.Data; using DotNetBlog.Core.Entity; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Caching.Memory; -using Microsoft.EntityFrameworkCore; using DotNetBlog.Core.Model.Category; using DotNetBlog.Core.Model.Tag; using DotNetBlog.Core.Model.Topic; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Linq; namespace DotNetBlog.Core.Extensions { @@ -37,8 +36,14 @@ public static List QueryAllCategoryFromCache(this BlogContext con { ID = ct.Key, Total = ct.Count(), - Published = ct.Count(t => t.Topic.Status == Enums.TopicStatus.Published), - Draft = ct.Count(t => t.Topic.Status == Enums.TopicStatus.Draft) + Published = + context.Topics + .Where(w => w.Status == Enums.TopicStatus.Published) + .Count(), + Draft = + context.Topics + .Where(w => w.Status == Enums.TopicStatus.Draft) + .Count() }) .ToList(); @@ -76,8 +81,8 @@ public static List QueryAllTagFromCache(this BlogContext context) { ID = ct.Key, Total = ct.Count(), - Published = ct.Count(t => t.Topic.Status == Enums.TopicStatus.Published), - Draft = ct.Count(t => t.Topic.Status == Enums.TopicStatus.Draft) + Published = context.TagTopics.Where(t => t.Topic.Status == Enums.TopicStatus.Published).Count(), + Draft = context.TagTopics.Where(t => t.Topic.Status == Enums.TopicStatus.Draft).Count() }) .ToList(); diff --git a/src/DotNetBlog.Core/Extensions/MemoryCacheExtensions.cs b/src/DotNetBlog.Core/Extensions/MemoryCacheExtensions.cs index 09467de..3796b31 100644 --- a/src/DotNetBlog.Core/Extensions/MemoryCacheExtensions.cs +++ b/src/DotNetBlog.Core/Extensions/MemoryCacheExtensions.cs @@ -1,7 +1,5 @@ using Microsoft.Extensions.Caching.Memory; using System; -using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; namespace DotNetBlog.Core.Extensions diff --git a/src/DotNetBlog.Core/Extensions/StringExtensions.cs b/src/DotNetBlog.Core/Extensions/StringExtensions.cs index a08a822..8476c7b 100644 --- a/src/DotNetBlog.Core/Extensions/StringExtensions.cs +++ b/src/DotNetBlog.Core/Extensions/StringExtensions.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text.RegularExpressions; -using System.Threading.Tasks; +using System.Text.RegularExpressions; namespace DotNetBlog.Core.Extensions { @@ -54,7 +50,7 @@ public static string TrimHtml(this string input) public static string ToLength(this string input, int length) { - if(string.IsNullOrWhiteSpace(input)) + if (string.IsNullOrWhiteSpace(input)) { return input; } diff --git a/src/DotNetBlog.Core/IServiceCollectionExtensions.cs b/src/DotNetBlog.Core/IServiceCollectionExtensions.cs index 97994a6..f45692a 100644 --- a/src/DotNetBlog.Core/IServiceCollectionExtensions.cs +++ b/src/DotNetBlog.Core/IServiceCollectionExtensions.cs @@ -1,14 +1,7 @@ -using DotNetBlog.Core.Model.Page; -using DotNetBlog.Core.Model.Setting; -using DotNetBlog.Core.Service; +using DotNetBlog.Core.Service; using Microsoft.Extensions.DependencyInjection; -using System; -using System.Collections.Generic; using System.Linq; -using System.Threading.Tasks; using System.Reflection; -using DotNetBlog.Core.Model.Theme; -using Microsoft.AspNetCore.Http; namespace DotNetBlog.Core { @@ -34,7 +27,6 @@ public static void AddBlogService(this IServiceCollection services) }); services.AddScoped(); - } } } diff --git a/src/DotNetBlog.Core/Model/Category/CategoryBasicModel.cs b/src/DotNetBlog.Core/Model/Category/CategoryBasicModel.cs index b96c7ae..279da5f 100644 --- a/src/DotNetBlog.Core/Model/Category/CategoryBasicModel.cs +++ b/src/DotNetBlog.Core/Model/Category/CategoryBasicModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Model.Category +namespace DotNetBlog.Core.Model.Category { public class CategoryBasicModel { diff --git a/src/DotNetBlog.Core/Model/Category/CategoryModel.cs b/src/DotNetBlog.Core/Model/Category/CategoryModel.cs index b04e3b3..eec4228 100644 --- a/src/DotNetBlog.Core/Model/Category/CategoryModel.cs +++ b/src/DotNetBlog.Core/Model/Category/CategoryModel.cs @@ -1,8 +1,4 @@ using DotNetBlog.Core.Model.Topic; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Core.Model.Category { diff --git a/src/DotNetBlog.Core/Model/Comment/AddCommentModel.cs b/src/DotNetBlog.Core/Model/Comment/AddCommentModel.cs index 23fed32..3e8cd01 100644 --- a/src/DotNetBlog.Core/Model/Comment/AddCommentModel.cs +++ b/src/DotNetBlog.Core/Model/Comment/AddCommentModel.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; namespace DotNetBlog.Core.Model.Comment { diff --git a/src/DotNetBlog.Core/Model/Comment/CommentCountModel.cs b/src/DotNetBlog.Core/Model/Comment/CommentCountModel.cs index 41db230..c9ff91e 100644 --- a/src/DotNetBlog.Core/Model/Comment/CommentCountModel.cs +++ b/src/DotNetBlog.Core/Model/Comment/CommentCountModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Model.Comment +namespace DotNetBlog.Core.Model.Comment { public class CommentCountModel { diff --git a/src/DotNetBlog.Core/Model/Comment/CommentItemModel.cs b/src/DotNetBlog.Core/Model/Comment/CommentItemModel.cs index a6f10ea..838d622 100644 --- a/src/DotNetBlog.Core/Model/Comment/CommentItemModel.cs +++ b/src/DotNetBlog.Core/Model/Comment/CommentItemModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Model.Comment +namespace DotNetBlog.Core.Model.Comment { public class CommentItemModel { diff --git a/src/DotNetBlog.Core/Model/Comment/CommentModel.cs b/src/DotNetBlog.Core/Model/Comment/CommentModel.cs index edeb67a..e529051 100644 --- a/src/DotNetBlog.Core/Model/Comment/CommentModel.cs +++ b/src/DotNetBlog.Core/Model/Comment/CommentModel.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Core.Model.Comment { diff --git a/src/DotNetBlog.Core/Model/Email/CommentEmailModel.cs b/src/DotNetBlog.Core/Model/Email/CommentEmailModel.cs index f35a83c..644a097 100644 --- a/src/DotNetBlog.Core/Model/Email/CommentEmailModel.cs +++ b/src/DotNetBlog.Core/Model/Email/CommentEmailModel.cs @@ -1,8 +1,4 @@ using DotNetBlog.Core.Model.Topic; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Core.Model.Email { diff --git a/src/DotNetBlog.Core/Model/Email/TestEmailConfigModel.cs b/src/DotNetBlog.Core/Model/Email/TestEmailConfigModel.cs index 95747c9..ce3f66f 100644 --- a/src/DotNetBlog.Core/Model/Email/TestEmailConfigModel.cs +++ b/src/DotNetBlog.Core/Model/Email/TestEmailConfigModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Model.Email +namespace DotNetBlog.Core.Model.Email { public class TestEmailConfigModel { diff --git a/src/DotNetBlog.Core/Model/Install/InstallModel.cs b/src/DotNetBlog.Core/Model/Install/InstallModel.cs index aa9d2b8..a08d923 100644 --- a/src/DotNetBlog.Core/Model/Install/InstallModel.cs +++ b/src/DotNetBlog.Core/Model/Install/InstallModel.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Text; +using System.ComponentModel.DataAnnotations; namespace DotNetBlog.Core.Model.Install { diff --git a/src/DotNetBlog.Core/Model/OperationResult.cs b/src/DotNetBlog.Core/Model/OperationResult.cs index 698df7c..3c1ee9a 100644 --- a/src/DotNetBlog.Core/Model/OperationResult.cs +++ b/src/DotNetBlog.Core/Model/OperationResult.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; +using System.Collections.Generic; namespace DotNetBlog.Core.Model { diff --git a/src/DotNetBlog.Core/Model/Page/AddPageModel.cs b/src/DotNetBlog.Core/Model/Page/AddPageModel.cs index 56527e7..05676b8 100644 --- a/src/DotNetBlog.Core/Model/Page/AddPageModel.cs +++ b/src/DotNetBlog.Core/Model/Page/AddPageModel.cs @@ -1,8 +1,5 @@ using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Core.Model.Page { diff --git a/src/DotNetBlog.Core/Model/Page/EditPageModel.cs b/src/DotNetBlog.Core/Model/Page/EditPageModel.cs index a39d20e..007dfad 100644 --- a/src/DotNetBlog.Core/Model/Page/EditPageModel.cs +++ b/src/DotNetBlog.Core/Model/Page/EditPageModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Model.Page +namespace DotNetBlog.Core.Model.Page { public class EditPageModel : AddPageModel { diff --git a/src/DotNetBlog.Core/Model/Page/PageBasicModel.cs b/src/DotNetBlog.Core/Model/Page/PageBasicModel.cs index 38f71c0..002a3a8 100644 --- a/src/DotNetBlog.Core/Model/Page/PageBasicModel.cs +++ b/src/DotNetBlog.Core/Model/Page/PageBasicModel.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Core.Model.Page { diff --git a/src/DotNetBlog.Core/Model/Page/PageCountModel.cs b/src/DotNetBlog.Core/Model/Page/PageCountModel.cs index 3258947..95b1be6 100644 --- a/src/DotNetBlog.Core/Model/Page/PageCountModel.cs +++ b/src/DotNetBlog.Core/Model/Page/PageCountModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Model.Page +namespace DotNetBlog.Core.Model.Page { public class PageCountModel { diff --git a/src/DotNetBlog.Core/Model/Page/PageModel.cs b/src/DotNetBlog.Core/Model/Page/PageModel.cs index 2188f0d..8e16481 100644 --- a/src/DotNetBlog.Core/Model/Page/PageModel.cs +++ b/src/DotNetBlog.Core/Model/Page/PageModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Model.Page +namespace DotNetBlog.Core.Model.Page { public class PageModel : PageBasicModel { diff --git a/src/DotNetBlog.Core/Model/Setting/SettingModel.cs b/src/DotNetBlog.Core/Model/Setting/SettingModel.cs index 8e3d8ce..efc4e35 100644 --- a/src/DotNetBlog.Core/Model/Setting/SettingModel.cs +++ b/src/DotNetBlog.Core/Model/Setting/SettingModel.cs @@ -1,9 +1,5 @@ -using Microsoft.AspNetCore.Mvc.Localization; -using Microsoft.Extensions.Localization; -using System; +using Microsoft.Extensions.Localization; using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Core.Model.Setting { diff --git a/src/DotNetBlog.Core/Model/Statistics/BlogStatisticsModel.cs b/src/DotNetBlog.Core/Model/Statistics/BlogStatisticsModel.cs index 1d09db1..0a2df58 100644 --- a/src/DotNetBlog.Core/Model/Statistics/BlogStatisticsModel.cs +++ b/src/DotNetBlog.Core/Model/Statistics/BlogStatisticsModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Model.Statistics +namespace DotNetBlog.Core.Model.Statistics { public class BlogStatisticsModel { diff --git a/src/DotNetBlog.Core/Model/Tag/TagModel.cs b/src/DotNetBlog.Core/Model/Tag/TagModel.cs index 73347e3..c3e1bbd 100644 --- a/src/DotNetBlog.Core/Model/Tag/TagModel.cs +++ b/src/DotNetBlog.Core/Model/Tag/TagModel.cs @@ -1,8 +1,4 @@ using DotNetBlog.Core.Model.Topic; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Core.Model.Tag { diff --git a/src/DotNetBlog.Core/Model/Theme/ThemeModel.cs b/src/DotNetBlog.Core/Model/Theme/ThemeModel.cs index d756eef..d375cd6 100644 --- a/src/DotNetBlog.Core/Model/Theme/ThemeModel.cs +++ b/src/DotNetBlog.Core/Model/Theme/ThemeModel.cs @@ -1,7 +1,4 @@ using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Text; namespace DotNetBlog.Core.Model.Theme { @@ -9,7 +6,7 @@ public class ThemeModel { [JsonIgnore] public string Path { get; set; } - + public string Key { get; set; } public string Name { get; set; } diff --git a/src/DotNetBlog.Core/Model/Topic/AddTopicModel.cs b/src/DotNetBlog.Core/Model/Topic/AddTopicModel.cs index bcc9a6d..ba8fbe5 100644 --- a/src/DotNetBlog.Core/Model/Topic/AddTopicModel.cs +++ b/src/DotNetBlog.Core/Model/Topic/AddTopicModel.cs @@ -1,9 +1,6 @@ using DotNetBlog.Core.Enums; using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Core.Model.Topic { diff --git a/src/DotNetBlog.Core/Model/Topic/EditTopicModel.cs b/src/DotNetBlog.Core/Model/Topic/EditTopicModel.cs index e392d8f..4470096 100644 --- a/src/DotNetBlog.Core/Model/Topic/EditTopicModel.cs +++ b/src/DotNetBlog.Core/Model/Topic/EditTopicModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Model.Topic +namespace DotNetBlog.Core.Model.Topic { public class EditTopicModel : AddTopicModel { diff --git a/src/DotNetBlog.Core/Model/Topic/ITopicModel.cs b/src/DotNetBlog.Core/Model/Topic/ITopicModel.cs index 2b61f75..c622938 100644 --- a/src/DotNetBlog.Core/Model/Topic/ITopicModel.cs +++ b/src/DotNetBlog.Core/Model/Topic/ITopicModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Model.Topic +namespace DotNetBlog.Core.Model.Topic { public interface ITopicModel { diff --git a/src/DotNetBlog.Core/Model/Topic/MonthStatisticsModel.cs b/src/DotNetBlog.Core/Model/Topic/MonthStatisticsModel.cs index 3eb0045..d2f7d9b 100644 --- a/src/DotNetBlog.Core/Model/Topic/MonthStatisticsModel.cs +++ b/src/DotNetBlog.Core/Model/Topic/MonthStatisticsModel.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Core.Model.Topic { diff --git a/src/DotNetBlog.Core/Model/Topic/TopicBasicModel.cs b/src/DotNetBlog.Core/Model/Topic/TopicBasicModel.cs index cb24e86..dc87c8f 100644 --- a/src/DotNetBlog.Core/Model/Topic/TopicBasicModel.cs +++ b/src/DotNetBlog.Core/Model/Topic/TopicBasicModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Model.Topic +namespace DotNetBlog.Core.Model.Topic { public class TopicBasicModel : ITopicModel { diff --git a/src/DotNetBlog.Core/Model/Topic/TopicCountModel.cs b/src/DotNetBlog.Core/Model/Topic/TopicCountModel.cs index 2d3c9a7..03a12fd 100644 --- a/src/DotNetBlog.Core/Model/Topic/TopicCountModel.cs +++ b/src/DotNetBlog.Core/Model/Topic/TopicCountModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Model.Topic +namespace DotNetBlog.Core.Model.Topic { public class TopicCountModel { diff --git a/src/DotNetBlog.Core/Model/Topic/TopicModel.cs b/src/DotNetBlog.Core/Model/Topic/TopicModel.cs index e02a665..3f93be1 100644 --- a/src/DotNetBlog.Core/Model/Topic/TopicModel.cs +++ b/src/DotNetBlog.Core/Model/Topic/TopicModel.cs @@ -1,8 +1,5 @@ using DotNetBlog.Core.Model.Category; using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Core.Model.Topic { diff --git a/src/DotNetBlog.Core/Model/Widget/AvailableWidgetModel.cs b/src/DotNetBlog.Core/Model/Widget/AvailableWidgetModel.cs index 2f892ec..4fbc39c 100644 --- a/src/DotNetBlog.Core/Model/Widget/AvailableWidgetModel.cs +++ b/src/DotNetBlog.Core/Model/Widget/AvailableWidgetModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Core.Model.Widget +namespace DotNetBlog.Core.Model.Widget { public class AvailableWidgetModel { diff --git a/src/DotNetBlog.Core/Model/Widget/WidgetConfigModel.cs b/src/DotNetBlog.Core/Model/Widget/WidgetConfigModel.cs index 0d72288..e21292f 100644 --- a/src/DotNetBlog.Core/Model/Widget/WidgetConfigModel.cs +++ b/src/DotNetBlog.Core/Model/Widget/WidgetConfigModel.cs @@ -1,11 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using DotNetBlog.Core.Enums; +using Microsoft.Extensions.Localization; using Newtonsoft.Json; -using Microsoft.AspNetCore.Mvc.Localization; -using Microsoft.Extensions.Localization; +using System.Collections.Generic; namespace DotNetBlog.Core.Model.Widget { @@ -63,7 +58,7 @@ public override bool IsValid } } } - + public class MonthStatisticeWidgetConfigModel : WidgetConfigModelBase { public MonthStatisticeWidgetConfigModel(IStringLocalizer L) diff --git a/src/DotNetBlog.Core/Model/Widget/WidgetModel.cs b/src/DotNetBlog.Core/Model/Widget/WidgetModel.cs index 59a84f9..9487626 100644 --- a/src/DotNetBlog.Core/Model/Widget/WidgetModel.cs +++ b/src/DotNetBlog.Core/Model/Widget/WidgetModel.cs @@ -1,8 +1,4 @@ using DotNetBlog.Core.Enums; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Core.Model.Widget { diff --git a/src/DotNetBlog.Core/Properties/AssemblyInfo.cs b/src/DotNetBlog.Core/Properties/AssemblyInfo.cs deleted file mode 100644 index 59e5cff..0000000 --- a/src/DotNetBlog.Core/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("DotNetBlog.Core")] -[assembly: AssemblyTrademark("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("89065586-c5ef-4ef4-bcd5-63d47e6e3816")] diff --git a/src/DotNetBlog.Core/Service/AuthService.cs b/src/DotNetBlog.Core/Service/AuthService.cs index 2ca91b7..9cca046 100644 --- a/src/DotNetBlog.Core/Service/AuthService.cs +++ b/src/DotNetBlog.Core/Service/AuthService.cs @@ -1,13 +1,11 @@ using DotNetBlog.Core.Data; using DotNetBlog.Core.Entity; +using DotNetBlog.Core.Extensions; using DotNetBlog.Core.Model; +using Microsoft.AspNetCore.Mvc.Localization; +using Microsoft.EntityFrameworkCore; using System; -using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore; -using DotNetBlog.Core.Extensions; -using Microsoft.AspNetCore.Mvc.Localization; namespace DotNetBlog.Core.Service { @@ -28,7 +26,7 @@ public async Task> Login(string userName, string passwor User userEntity = await BlogContext.Users.SingleOrDefaultAsync(t => t.UserName == userName && t.Password == password); - if(userEntity == null) + if (userEntity == null) { return OperationResult.Failure(L["Wrong username or password"].Value); } diff --git a/src/DotNetBlog.Core/Service/CategoryService.cs b/src/DotNetBlog.Core/Service/CategoryService.cs index e582231..9f9a646 100644 --- a/src/DotNetBlog.Core/Service/CategoryService.cs +++ b/src/DotNetBlog.Core/Service/CategoryService.cs @@ -1,15 +1,14 @@ using DotNetBlog.Core.Data; using DotNetBlog.Core.Entity; -using Microsoft.Extensions.Caching.Memory; +using DotNetBlog.Core.Extensions; +using DotNetBlog.Core.Model; +using DotNetBlog.Core.Model.Category; +using Microsoft.AspNetCore.Mvc.Localization; +using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore; -using DotNetBlog.Core.Model; -using DotNetBlog.Core.Model.Category; -using DotNetBlog.Core.Extensions; -using Microsoft.AspNetCore.Mvc.Localization; namespace DotNetBlog.Core.Service { @@ -58,7 +57,7 @@ public async Task Edit(int id, string name, string description) } Category entity = await BlogContext.Categories.SingleOrDefaultAsync(t => t.ID == id); - if(entity == null) + if (entity == null) { return OperationResult.Failure(L["Category does not exists"].Value); } @@ -67,7 +66,7 @@ public async Task Edit(int id, string name, string description) entity.Description = description; await BlogContext.SaveChangesAsync(); - BlogContext.RemoveCategoryCache(); + BlogContext.RemoveCategoryCache(); return new OperationResult(); } diff --git a/src/DotNetBlog.Core/Service/CommentService.cs b/src/DotNetBlog.Core/Service/CommentService.cs index b67bd13..ac51dfb 100644 --- a/src/DotNetBlog.Core/Service/CommentService.cs +++ b/src/DotNetBlog.Core/Service/CommentService.cs @@ -1,18 +1,18 @@ using DotNetBlog.Core.Data; using DotNetBlog.Core.Entity; +using DotNetBlog.Core.Extensions; using DotNetBlog.Core.Model; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore; using DotNetBlog.Core.Model.Comment; -using DotNetBlog.Core.Extensions; +using DotNetBlog.Core.Model.Setting; using DotNetBlog.Core.Model.Topic; +using Microsoft.AspNetCore.Mvc.Localization; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; -using DotNetBlog.Core.Model.Setting; -using Microsoft.AspNetCore.Mvc.Localization; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; namespace DotNetBlog.Core.Service { @@ -32,12 +32,12 @@ public class CommentService private IHtmlLocalizer L { get; set; } - public CommentService(BlogContext blogContext, - ClientManager clientManager, + public CommentService(BlogContext blogContext, + ClientManager clientManager, IMemoryCache cache, - IServiceProvider serviceProvider, - SettingModel settings, - EmailService emailService, + IServiceProvider serviceProvider, + SettingModel settings, + EmailService emailService, IHtmlLocalizer localizer) { this.BlogContext = blogContext; diff --git a/src/DotNetBlog.Core/Service/EmailService.cs b/src/DotNetBlog.Core/Service/EmailService.cs index 8f4bc7f..fca1467 100644 --- a/src/DotNetBlog.Core/Service/EmailService.cs +++ b/src/DotNetBlog.Core/Service/EmailService.cs @@ -4,14 +4,12 @@ using DotNetBlog.Core.Model.Email; using DotNetBlog.Core.Model.Setting; using MailKit.Net.Smtp; +using Microsoft.AspNetCore.Mvc.Localization; +using Microsoft.EntityFrameworkCore; using MimeKit; using NLog; using System; -using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore; -using Microsoft.AspNetCore.Mvc.Localization; namespace DotNetBlog.Core.Service { @@ -56,13 +54,13 @@ public async Task TestEmailConfig(TestEmailConfigModel model) client.Authenticate(model.User, model.Password); await client.SendAsync(message); - + await client.DisconnectAsync(true); return new OperationResult(); } } - catch(Exception ex) + catch (Exception ex) { return OperationResult.Failure(ex.Message); } @@ -115,7 +113,7 @@ private async Task SendEmail(MimeMessage message) return new OperationResult(); } } - catch(Exception ex) + catch (Exception ex) { Logger.Error(ex); return OperationResult.Failure(ex.Message); diff --git a/src/DotNetBlog.Core/Service/InstallService.cs b/src/DotNetBlog.Core/Service/InstallService.cs index 444839e..8994fec 100644 --- a/src/DotNetBlog.Core/Service/InstallService.cs +++ b/src/DotNetBlog.Core/Service/InstallService.cs @@ -1,21 +1,18 @@ using DotNetBlog.Core.Data; using DotNetBlog.Core.Entity; -using DotNetBlog.Core.Model.Widget; -using Microsoft.AspNetCore.Mvc.Localization; -using System; -using System.Linq; -using System.Collections.Generic; -using System.Text; using DotNetBlog.Core.Enums; -using Newtonsoft.Json; -using System.Threading.Tasks; using DotNetBlog.Core.Model; using DotNetBlog.Core.Model.Install; using DotNetBlog.Core.Model.Setting; +using DotNetBlog.Core.Model.Widget; +using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Localization; -using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Options; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; namespace DotNetBlog.Core.Service { diff --git a/src/DotNetBlog.Core/Service/PageService.cs b/src/DotNetBlog.Core/Service/PageService.cs index fd41564..0c3e892 100644 --- a/src/DotNetBlog.Core/Service/PageService.cs +++ b/src/DotNetBlog.Core/Service/PageService.cs @@ -1,22 +1,23 @@ -using DotNetBlog.Core.Data; +using AutoMapper; +using DotNetBlog.Core.Data; using DotNetBlog.Core.Entity; +using DotNetBlog.Core.Extensions; using DotNetBlog.Core.Model; using DotNetBlog.Core.Model.Page; +using Microsoft.AspNetCore.Mvc.Localization; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Memory; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using DotNetBlog.Core.Extensions; -using Microsoft.EntityFrameworkCore; -using AutoMapper; -using Microsoft.AspNetCore.Mvc.Localization; namespace DotNetBlog.Core.Service { public class PageService { private static readonly string CACHE_KEY = "Cache_Page"; + private readonly IMapper _mapper; private BlogContext BlogContext { get; set; } @@ -24,11 +25,16 @@ public class PageService private IHtmlLocalizer L { get; set; } - public PageService(BlogContext blogContext, IMemoryCache cache, IHtmlLocalizer localizer) + + public PageService(BlogContext blogContext, + IMemoryCache cache, + IHtmlLocalizer localizer, + IMapper mapper) { this.BlogContext = blogContext; this.Cache = cache; this.L = localizer; + _mapper = mapper; } public async Task> All() @@ -55,7 +61,7 @@ public async Task> Add(AddPageModel model) model.Alias = await this.GenerateAlias(null, model.Alias, model.Title); - var entity = Mapper.Map(model); + var entity = _mapper.Map(model); entity.CreateDate = DateTime.Now; entity.EditDate = model.Date ?? DateTime.Now; @@ -96,7 +102,7 @@ public async Task> Edit(EditPageModel model) model.Alias = await this.GenerateAlias(model.ID, model.Alias, model.Title); - Mapper.Map(model, entity); + _mapper.Map(model, entity); entity.EditDate = model.Date ?? DateTime.Now; entity.ParentID = model.Parent; @@ -115,12 +121,12 @@ public async Task> Query() var result = entityList.Select(entity => { - var pageModel = Mapper.Map(entity); + var pageModel = _mapper.Map(entity); if (entity.ParentID.HasValue) { var parent = entityList.SingleOrDefault(t => t.ID == entity.ParentID.Value); - pageModel.Parent = Mapper.Map(parent); + pageModel.Parent = _mapper.Map(parent); } return pageModel; @@ -131,16 +137,16 @@ public async Task> Query() public async Task> QueryPublished() { - var entityList = (await this.All()).Where(t=>t.Status == Enums.PageStatus.Published); + var entityList = (await this.All()).Where(t => t.Status == Enums.PageStatus.Published); var result = entityList.Select(entity => { - var pageModel = Mapper.Map(entity); + var pageModel = _mapper.Map(entity); if (entity.ParentID.HasValue) { var parent = entityList.SingleOrDefault(t => t.ID == entity.ParentID.Value); - pageModel.Parent = Mapper.Map(parent); + pageModel.Parent = _mapper.Map(parent); } return pageModel; @@ -174,7 +180,7 @@ public async Task Get(string alias) return pageModel; } - + public async Task BatchUpdateStatus(int[] idList, Enums.PageStatus status) { var pageList = await BlogContext.Pages.Where(t => idList.Contains(t.ID)).ToListAsync(); @@ -217,11 +223,11 @@ private async Task> Transform(params Page[] entityList) var result = entityList.Select(entity => { - var pageModel = Mapper.Map(entity); + var pageModel = _mapper.Map(entity); if (entity.ParentID.HasValue) { var parent = allEntityList.SingleOrDefault(t => t.ID == entity.ParentID.Value); - pageModel.Parent = Mapper.Map(parent); + pageModel.Parent = _mapper.Map(parent); } return pageModel; diff --git a/src/DotNetBlog.Core/Service/SettingService.cs b/src/DotNetBlog.Core/Service/SettingService.cs index 7802bfc..c01862c 100644 --- a/src/DotNetBlog.Core/Service/SettingService.cs +++ b/src/DotNetBlog.Core/Service/SettingService.cs @@ -1,15 +1,12 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using System.Reflection; -using DotNetBlog.Core.Data; -using Microsoft.Extensions.Caching.Memory; -using DotNetBlog.Core.Model.Setting; +using DotNetBlog.Core.Data; using DotNetBlog.Core.Entity; +using DotNetBlog.Core.Model.Setting; using Microsoft.EntityFrameworkCore; -using Microsoft.AspNetCore.Mvc.Localization; +using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Localization; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; namespace DotNetBlog.Core.Service { diff --git a/src/DotNetBlog.Core/Service/StatisticsService.cs b/src/DotNetBlog.Core/Service/StatisticsService.cs index 7c7cdfc..97308b7 100644 --- a/src/DotNetBlog.Core/Service/StatisticsService.cs +++ b/src/DotNetBlog.Core/Service/StatisticsService.cs @@ -1,10 +1,7 @@ using DotNetBlog.Core.Data; using DotNetBlog.Core.Model.Statistics; -using System; -using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore; namespace DotNetBlog.Core.Service { @@ -26,14 +23,20 @@ public async Task GetBlogStatistics() Topics = new Model.Topic.TopicCountModel() }; - var topicQuery = await this.BlogContext.Topics.GroupBy(t => t.Status) - .ToDictionaryAsync(t => t.Key, t => t.Count()); + var topicQuery = this.BlogContext.Topics + .ToArray() + .GroupBy(t => t.Status) + .ToDictionary(t => t.Key, t => t.Count()); - var pageQuery = await this.BlogContext.Pages.GroupBy(t => t.Status) - .ToDictionaryAsync(t => t.Key, t => t.Count()); + var pageQuery = this.BlogContext.Pages + .ToArray() + .GroupBy(t => t.Status) + .ToDictionary(t => t.Key, t => t.Count()); - var commentQuery = await this.BlogContext.Comments.GroupBy(t => t.Status) - .ToDictionaryAsync(t => t.Key, t => t.Count()); + var commentQuery = this.BlogContext.Comments + .ToArray() + .GroupBy(t => t.Status) + .ToDictionary(t => t.Key, t => t.Count()); if (topicQuery.ContainsKey(Enums.TopicStatus.Published)) { diff --git a/src/DotNetBlog.Core/Service/TagService.cs b/src/DotNetBlog.Core/Service/TagService.cs index 1099a58..af25dbf 100644 --- a/src/DotNetBlog.Core/Service/TagService.cs +++ b/src/DotNetBlog.Core/Service/TagService.cs @@ -1,13 +1,13 @@ using DotNetBlog.Core.Data; +using DotNetBlog.Core.Extensions; +using DotNetBlog.Core.Model; using DotNetBlog.Core.Model.Tag; +using Microsoft.AspNetCore.Mvc.Localization; +using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using DotNetBlog.Core.Extensions; -using DotNetBlog.Core.Model; -using Microsoft.EntityFrameworkCore; -using Microsoft.AspNetCore.Mvc.Localization; namespace DotNetBlog.Core.Service { @@ -69,7 +69,7 @@ public async Task Edit(int id, string keyword) var entity = await this.BlogContext.Tags.SingleOrDefaultAsync(t => t.ID == id); - if(entity == null) + if (entity == null) { return OperationResult.Failure(L["The label does not exists"].Value); } diff --git a/src/DotNetBlog.Core/Service/ThemeService.cs b/src/DotNetBlog.Core/Service/ThemeService.cs index 153a137..643cea4 100644 --- a/src/DotNetBlog.Core/Service/ThemeService.cs +++ b/src/DotNetBlog.Core/Service/ThemeService.cs @@ -1,11 +1,8 @@ using DotNetBlog.Core.Model.Setting; using DotNetBlog.Core.Model.Theme; using Microsoft.AspNetCore.Hosting; -using System; using System.Collections.Generic; using System.IO; -using System.Text; -using System.Threading.Tasks; namespace DotNetBlog.Core.Service { diff --git a/src/DotNetBlog.Core/Service/TopicService.cs b/src/DotNetBlog.Core/Service/TopicService.cs index 9e043fb..ae94311 100644 --- a/src/DotNetBlog.Core/Service/TopicService.cs +++ b/src/DotNetBlog.Core/Service/TopicService.cs @@ -1,22 +1,25 @@ -using DotNetBlog.Core.Model; -using DotNetBlog.Core.Model.Topic; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using DotNetBlog.Core.Extensions; +using AutoMapper; using DotNetBlog.Core.Data; using DotNetBlog.Core.Entity; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Caching.Memory; +using DotNetBlog.Core.Extensions; +using DotNetBlog.Core.Model; using DotNetBlog.Core.Model.Category; using DotNetBlog.Core.Model.Setting; +using DotNetBlog.Core.Model.Topic; using Microsoft.AspNetCore.Mvc.Localization; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Caching.Memory; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; namespace DotNetBlog.Core.Service { public class TopicService { + private readonly IMapper _mapper; + private BlogContext BlogContext { get; set; } private IMemoryCache Cache { get; set; } @@ -27,17 +30,19 @@ public class TopicService private IHtmlLocalizer L { get; set; } - public TopicService(BlogContext blogContext, - IMemoryCache cache, - SettingModel settings, + public TopicService(BlogContext blogContext, + IMemoryCache cache, + SettingModel settings, ClientManager clientManager, - IHtmlLocalizer localizer) + IHtmlLocalizer localizer, + IMapper mapper) { BlogContext = blogContext; Cache = cache; Settings = settings; ClientManager = clientManager; L = localizer; + _mapper = mapper; } public async Task> Add(AddTopicModel model) @@ -486,22 +491,22 @@ private async Task> Transform(params Topic[] entityList) int[] idList = entityList.Select(t => t.ID).ToArray(); - List categoryTopicList = await BlogContext.CategoryTopics.Include(t => t.Category).Where(t => idList.Contains(t.TopicID)).ToListAsync(); - List tagTopicList = await BlogContext.TagTopics.Include(t => t.Tag).Where(t => idList.Contains(t.TopicID)).ToListAsync(); + var categoryTopicList = await BlogContext.CategoryTopics.Include(t => t.Category).Where(t => idList.Contains(t.TopicID)).ToListAsync(); + var tagTopicList = await BlogContext.TagTopics.Include(t => t.Tag).Where(t => idList.Contains(t.TopicID)).ToListAsync(); var topicComments = await BlogContext.Comments.Where(t => idList.Contains(t.TopicID)) .GroupBy(t => t.TopicID) .Select(t => new { TopicID = t.Key, - Approved = t.Count(c => c.Status == Enums.CommentStatus.Approved), - Reject = t.Count(c => c.Status == Enums.CommentStatus.Reject), - Pending = t.Count(c => c.Status == Enums.CommentStatus.Pending), + Approved = BlogContext.Comments.Where(c => c.Status == Enums.CommentStatus.Approved).Count(), + Reject = BlogContext.Comments.Where(c => c.Status == Enums.CommentStatus.Reject).Count(), + Pending = BlogContext.Comments.Where(c => c.Status == Enums.CommentStatus.Pending).Count(), Total = t.Count() }).ToListAsync(); List result = entityList.Select(entity => { - var model = AutoMapper.Mapper.Map(entity); + var model = _mapper.Map(entity); model.Categories = categoryTopicList.Where(category => category.TopicID == entity.ID) .Select(category => new CategoryBasicModel { @@ -552,14 +557,14 @@ private async Task GenerateAlias(int? id, string alias, string title) else { r_alias = null; - } + } return r_alias; } private string GenerateSummary(string summary, string content) { - if(string.IsNullOrWhiteSpace(summary)) + if (string.IsNullOrWhiteSpace(summary)) { summary = content; } @@ -569,7 +574,7 @@ private string GenerateSummary(string summary, string content) return string.Empty; } - return CommonMark.CommonMarkConverter.Convert(summary).TrimHtml().ToLength(200); + return summary.FromMarkdown().TrimHtml().ToLength(200); } public bool CanComment(Topic entity) diff --git a/src/DotNetBlog.Core/Service/UserService.cs b/src/DotNetBlog.Core/Service/UserService.cs index 1aded8a..451f3a5 100644 --- a/src/DotNetBlog.Core/Service/UserService.cs +++ b/src/DotNetBlog.Core/Service/UserService.cs @@ -1,13 +1,10 @@ using DotNetBlog.Core.Data; using DotNetBlog.Core.Entity; -using DotNetBlog.Core.Model; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore; using DotNetBlog.Core.Extensions; +using DotNetBlog.Core.Model; using Microsoft.AspNetCore.Mvc.Localization; +using Microsoft.EntityFrameworkCore; +using System.Threading.Tasks; namespace DotNetBlog.Core.Service { diff --git a/src/DotNetBlog.Core/Service/WidgetService.cs b/src/DotNetBlog.Core/Service/WidgetService.cs index e0002f7..5d2ec83 100644 --- a/src/DotNetBlog.Core/Service/WidgetService.cs +++ b/src/DotNetBlog.Core/Service/WidgetService.cs @@ -1,19 +1,18 @@ using DotNetBlog.Core.Data; using DotNetBlog.Core.Entity; using DotNetBlog.Core.Enums; +using DotNetBlog.Core.Extensions; +using DotNetBlog.Core.Model; using DotNetBlog.Core.Model.Widget; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.Localization; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using DotNetBlog.Core.Extensions; -using Microsoft.EntityFrameworkCore; -using DotNetBlog.Core.Model; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using Microsoft.AspNetCore.Mvc.Localization; -using Microsoft.Extensions.Localization; namespace DotNetBlog.Core.Service { @@ -65,7 +64,7 @@ public List QueryAvailable() List result = new List(); var arr = Enum.GetValues(typeof(WidgetType)); - foreach(byte item in arr) + foreach (byte item in arr) { var type = (WidgetType)item; var configType = DefaultWidgetConfigTypes[type]; @@ -123,7 +122,7 @@ public async Task Save(List widgetList) Config = JsonConvert.SerializeObject(t.Config) }).ToList(); this.BlogContext.AddRange(entityList); - await this.BlogContext.SaveChangesAsync(); + await this.BlogContext.SaveChangesAsync(); tran.Commit(); diff --git a/src/DotNetBlog.Core/Utilities/EncryptHelper.cs b/src/DotNetBlog.Core/Utilities/EncryptHelper.cs index 4012703..5fb1d6d 100644 --- a/src/DotNetBlog.Core/Utilities/EncryptHelper.cs +++ b/src/DotNetBlog.Core/Utilities/EncryptHelper.cs @@ -1,9 +1,6 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Security.Cryptography; using System.Text; -using System.Threading.Tasks; namespace DotNetBlog.Core.Utilities { diff --git a/src/DotNetBlog.Core/Utilities/MarkdownUtils.cs b/src/DotNetBlog.Core/Utilities/MarkdownUtils.cs new file mode 100644 index 0000000..b50f600 --- /dev/null +++ b/src/DotNetBlog.Core/Utilities/MarkdownUtils.cs @@ -0,0 +1,28 @@ +using Markdig; + +namespace DotNetBlog +{ + public static class MarkdownUtils + { + private static MarkdownPipeline pipeline; + + static MarkdownUtils() + { + var builder = new MarkdownPipelineBuilder() + .UsePipeTables(new Markdig.Extensions.Tables.PipeTableOptions + { + RequireHeaderSeparator = false + }) + .UseAdvancedExtensions() + .UseBootstrap(); + + pipeline = builder.Build(); + } + + public static string FromMarkdown(this string markdown) + { + return Markdown.ToHtml(markdown, pipeline); + } + + } +} diff --git a/src/DotNetBlog.Web/Areas/Api/Controllers/CategoryController.cs b/src/DotNetBlog.Web/Areas/Api/Controllers/CategoryController.cs index b17a03a..62c51af 100644 --- a/src/DotNetBlog.Web/Areas/Api/Controllers/CategoryController.cs +++ b/src/DotNetBlog.Web/Areas/Api/Controllers/CategoryController.cs @@ -1,11 +1,7 @@ using DotNetBlog.Core.Model; -using DotNetBlog.Core.Model.Category; using DotNetBlog.Core.Service; using DotNetBlog.Web.Areas.Api.Models.Category; using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; namespace DotNetBlog.Web.Areas.Api.Controllers @@ -39,7 +35,7 @@ public async Task Add([FromBody] SaveCategoryModel model) OperationResult result = await CategoryService.Add(model.Name, model.Description); - if(result.Success) + if (result.Success) { return Success(result.Data); } @@ -50,7 +46,7 @@ public async Task Add([FromBody] SaveCategoryModel model) } [HttpPost("{id:int}")] - public async Task Edit([FromRoute]int id, [FromBody] SaveCategoryModel model) + public async Task Edit([FromRoute] int id, [FromBody] SaveCategoryModel model) { if (model == null) { @@ -72,7 +68,7 @@ public async Task Edit([FromRoute]int id, [FromBody] SaveCategory [HttpPost("remove")] public async Task Remove([FromBody] RemoveCategoryModel model) { - if(model == null) + if (model == null) { return InvalidRequest(); } diff --git a/src/DotNetBlog.Web/Areas/Api/Controllers/CommentController.cs b/src/DotNetBlog.Web/Areas/Api/Controllers/CommentController.cs index c7d5dce..3c9687c 100644 --- a/src/DotNetBlog.Web/Areas/Api/Controllers/CommentController.cs +++ b/src/DotNetBlog.Web/Areas/Api/Controllers/CommentController.cs @@ -1,9 +1,6 @@ using DotNetBlog.Core.Service; using DotNetBlog.Web.Areas.Api.Models.Comment; using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; namespace DotNetBlog.Web.Areas.Api.Controllers @@ -20,7 +17,7 @@ public CommentController(CommentService commentService) } [HttpGet("query")] - public async Task Query([FromQuery]QueryCommentModel model) + public async Task Query([FromQuery] QueryCommentModel model) { var result = await this.CommentService.Query(model.PageIndex, model.PageSize, model.Status, model.Keywords); @@ -28,7 +25,7 @@ public async Task Query([FromQuery]QueryCommentModel model) } [HttpPost("batch/approve")] - public async Task BatchApprove([FromBody]BatchModel model) + public async Task BatchApprove([FromBody] BatchModel model) { if (model == null) { @@ -41,7 +38,7 @@ public async Task BatchApprove([FromBody]BatchModel model) } [HttpPost("batch/reject")] - public async Task BatchReject([FromBody]BatchModel model) + public async Task BatchReject([FromBody] BatchModel model) { if (model == null) { @@ -54,7 +51,7 @@ public async Task BatchReject([FromBody]BatchModel model) } [HttpPost("delete")] - public async Task Delete([FromBody]BatchModel model) + public async Task Delete([FromBody] BatchModel model) { if (model == null) { @@ -67,7 +64,7 @@ public async Task Delete([FromBody]BatchModel model) } [HttpPost("reply")] - public async Task Reply([FromBody]ReplyCommentModel model) + public async Task Reply([FromBody] ReplyCommentModel model) { if (model == null) { diff --git a/src/DotNetBlog.Web/Areas/Api/Controllers/ConfigController.cs b/src/DotNetBlog.Web/Areas/Api/Controllers/ConfigController.cs index 6b8d678..32a955e 100644 --- a/src/DotNetBlog.Web/Areas/Api/Controllers/ConfigController.cs +++ b/src/DotNetBlog.Web/Areas/Api/Controllers/ConfigController.cs @@ -1,12 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; +using AutoMapper; +using DotNetBlog.Core.Model.Email; using DotNetBlog.Core.Service; using DotNetBlog.Web.Areas.Api.Models.Config; -using AutoMapper; -using DotNetBlog.Core.Model.Email; +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; // For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860 @@ -16,17 +13,24 @@ namespace DotNetBlog.Web.Areas.Api.Controllers [Route("api/config")] public class ConfigController : ControllerBase { + private readonly IMapper _mapper; + private SettingService SettingService { get; set; } private EmailService EmailService { get; set; } private ThemeService ThemeService { get; set; } - public ConfigController(SettingService settingService, EmailService emailService, ThemeService themeService) + public ConfigController( + SettingService settingService, + EmailService emailService, + ThemeService themeService, + IMapper mapper) { SettingService = settingService; EmailService = emailService; ThemeService = themeService; + _mapper = mapper; } [HttpGet("themes")] @@ -40,13 +44,13 @@ public IActionResult GetThemes() public IActionResult GetBasicConfig() { var config = SettingService.Get(); - var model = Mapper.Map(config); + var model = _mapper.Map(config); return Success(model); } [HttpPost("basic")] - public async Task SaveBasicConfig([FromBody]BasicConfigModel model) + public async Task SaveBasicConfig([FromBody] BasicConfigModel model) { return await this.SaveConfig(model); } @@ -55,19 +59,19 @@ public async Task SaveBasicConfig([FromBody]BasicConfigModel mode public IActionResult GetEmailConfig() { var config = SettingService.Get(); - var model = Mapper.Map(config); + var model = _mapper.Map(config); return Success(model); } [HttpPost("email")] - public async Task SaveEmailConfig([FromBody]EmailConfigModel model) + public async Task SaveEmailConfig([FromBody] EmailConfigModel model) { return await this.SaveConfig(model); } [HttpPost("email/test")] - public async Task TestEmailConfig([FromBody]EmailConfigModel model) + public async Task TestEmailConfig([FromBody] EmailConfigModel model) { if (model == null) { @@ -100,13 +104,13 @@ public async Task TestEmailConfig([FromBody]EmailConfigModel mode public IActionResult GetCommentConfig() { var config = SettingService.Get(); - var model = Mapper.Map(config); + var model = _mapper.Map(config); return Success(model); } [HttpPost("comment")] - public async Task SaveCommentConfig([FromBody]CommentConfigModel model) + public async Task SaveCommentConfig([FromBody] CommentConfigModel model) { return await this.SaveConfig(model); } @@ -115,13 +119,13 @@ public async Task SaveCommentConfig([FromBody]CommentConfigModel public IActionResult GetAdvanceConfig() { var config = SettingService.Get(); - var model = Mapper.Map(config); + var model = _mapper.Map(config); return Success(model); } [HttpPost("advance")] - public async Task SaveAdvanceConfig([FromBody]AdvanceConfigModel model) + public async Task SaveAdvanceConfig([FromBody] AdvanceConfigModel model) { return await this.SaveConfig(model); } @@ -135,7 +139,7 @@ private async Task SaveConfig(object model) } var config = SettingService.Get(); - Mapper.Map(model, config); + _mapper.Map(model, config); await SettingService.Save(config); diff --git a/src/DotNetBlog.Web/Areas/Api/Controllers/ControllerBase.cs b/src/DotNetBlog.Web/Areas/Api/Controllers/ControllerBase.cs index 6352365..540274f 100644 --- a/src/DotNetBlog.Web/Areas/Api/Controllers/ControllerBase.cs +++ b/src/DotNetBlog.Web/Areas/Api/Controllers/ControllerBase.cs @@ -2,13 +2,9 @@ using DotNetBlog.Web.Areas.Api.Models; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Localization; -using Microsoft.AspNetCore.Mvc.ModelBinding; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; -using System; using System.Collections.Generic; using System.Linq; -using System.Threading.Tasks; +using System.Text.Json; namespace DotNetBlog.Web.Areas.Api.Controllers { @@ -17,13 +13,15 @@ namespace DotNetBlog.Web.Areas.Api.Controllers [ValidateRequestApiFilter] public class ControllerBase : Controller { - private static readonly JsonSerializerSettings _DefaultJsonSerializerSettings; + private static readonly JsonSerializerOptions _DefaultJsonSerializerSettings; IHtmlLocalizer localizer; private IHtmlLocalizer L { - get { - if (localizer == null) { + get + { + if (localizer == null) + { localizer = this.HttpContext.RequestServices.GetService(typeof(IHtmlLocalizer)) as IHtmlLocalizer; } return localizer; @@ -32,10 +30,12 @@ private IHtmlLocalizer L static ControllerBase() { - _DefaultJsonSerializerSettings = new JsonSerializerSettings + _DefaultJsonSerializerSettings = new JsonSerializerOptions { - DateFormatString = "yyyy-MM-dd HH:mm:ss", - ContractResolver = new CamelCasePropertyNamesContractResolver() + //DateFormatString = "yyyy-MM-dd HH:mm:ss", + //ContractResolver = new CamelCasePropertyNamesContractResolver() + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + }; } @@ -103,7 +103,7 @@ public IActionResult InvalidRequest() } else { - errorMessage = ModelState.Where(t => t.Value.Errors.Any()).Select(t => t.Value).FirstOrDefault()?.Errors.FirstOrDefault()?.ErrorMessage; + errorMessage = ModelState.Where(t => t.Value.Errors.Any()).Select(t => t.Value).FirstOrDefault()?.Errors.FirstOrDefault()?.ErrorMessage; } errorMessage = string.IsNullOrWhiteSpace(errorMessage) ? L["Bad request"].Value : errorMessage; diff --git a/src/DotNetBlog.Web/Areas/Api/Controllers/MyController.cs b/src/DotNetBlog.Web/Areas/Api/Controllers/MyController.cs index 257d35f..cd8a04d 100644 --- a/src/DotNetBlog.Web/Areas/Api/Controllers/MyController.cs +++ b/src/DotNetBlog.Web/Areas/Api/Controllers/MyController.cs @@ -2,9 +2,6 @@ using DotNetBlog.Core.Service; using DotNetBlog.Web.Areas.Api.Models.My; using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; namespace DotNetBlog.Web.Areas.Api.Controllers @@ -30,7 +27,7 @@ public IActionResult GetMyInfo() } [HttpPost("")] - public async Task EditMyInfo([FromBody]EditMyInfoModel model) + public async Task EditMyInfo([FromBody] EditMyInfoModel model) { if (model == null) { diff --git a/src/DotNetBlog.Web/Areas/Api/Controllers/PageController.cs b/src/DotNetBlog.Web/Areas/Api/Controllers/PageController.cs index e007b3c..7a5a48b 100644 --- a/src/DotNetBlog.Web/Areas/Api/Controllers/PageController.cs +++ b/src/DotNetBlog.Web/Areas/Api/Controllers/PageController.cs @@ -3,9 +3,6 @@ using DotNetBlog.Core.Service; using DotNetBlog.Web.Areas.Api.Models.Page; using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; namespace DotNetBlog.Web.Areas.Api.Controllers @@ -30,7 +27,7 @@ public async Task All() } [HttpPost] - public async Task Add([FromBody]AddPageModel model) + public async Task Add([FromBody] AddPageModel model) { if (model == null) { @@ -58,7 +55,7 @@ public async Task Get(int id) } [HttpPost("{id:int}")] - public async Task Edit([FromRoute]int id, [FromBody]EditPageModel model) + public async Task Edit([FromRoute] int id, [FromBody] EditPageModel model) { if (model == null) { @@ -80,7 +77,7 @@ public async Task Edit([FromRoute]int id, [FromBody]EditPageModel } [HttpPost("batch/publish")] - public async Task BatchPublish([FromBody]BatchModel model) + public async Task BatchPublish([FromBody] BatchModel model) { if (model == null) { @@ -88,12 +85,12 @@ public async Task BatchPublish([FromBody]BatchModel model) } await this.PageService.BatchUpdateStatus(model.PageList, PageStatus.Published); - + return this.Success(); } [HttpPost("batch/draft")] - public async Task BatchDraft([FromBody]BatchModel model) + public async Task BatchDraft([FromBody] BatchModel model) { if (model == null) { diff --git a/src/DotNetBlog.Web/Areas/Api/Controllers/StatisticsController.cs b/src/DotNetBlog.Web/Areas/Api/Controllers/StatisticsController.cs index f94a0f6..300a135 100644 --- a/src/DotNetBlog.Web/Areas/Api/Controllers/StatisticsController.cs +++ b/src/DotNetBlog.Web/Areas/Api/Controllers/StatisticsController.cs @@ -1,8 +1,5 @@ using DotNetBlog.Core.Service; using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; namespace DotNetBlog.Web.Areas.Api.Controllers diff --git a/src/DotNetBlog.Web/Areas/Api/Controllers/TagController.cs b/src/DotNetBlog.Web/Areas/Api/Controllers/TagController.cs index f6750bd..f8d28af 100644 --- a/src/DotNetBlog.Web/Areas/Api/Controllers/TagController.cs +++ b/src/DotNetBlog.Web/Areas/Api/Controllers/TagController.cs @@ -1,9 +1,6 @@ using DotNetBlog.Core.Service; using DotNetBlog.Web.Areas.Api.Models.Tag; using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; namespace DotNetBlog.Web.Areas.Api.Controllers @@ -20,7 +17,7 @@ public TagController(TagService tagService) } [HttpGet("query")] - public async Task Query([FromQuery]QueryTagModel model) + public async Task Query([FromQuery] QueryTagModel model) { if (model == null) { @@ -33,7 +30,7 @@ public async Task Query([FromQuery]QueryTagModel model) } [HttpPost("delete")] - public async Task Delete([FromBody]DeleteTagModel model) + public async Task Delete([FromBody] DeleteTagModel model) { if (model == null) { @@ -46,7 +43,7 @@ public async Task Delete([FromBody]DeleteTagModel model) } [HttpPost("{id:int}")] - public async Task Edit([FromRoute]int id, [FromBody]SaveTagModel model) + public async Task Edit([FromRoute] int id, [FromBody] SaveTagModel model) { if (model == null) { diff --git a/src/DotNetBlog.Web/Areas/Api/Controllers/TopicController.cs b/src/DotNetBlog.Web/Areas/Api/Controllers/TopicController.cs index c2de5e7..c0c20a3 100644 --- a/src/DotNetBlog.Web/Areas/Api/Controllers/TopicController.cs +++ b/src/DotNetBlog.Web/Areas/Api/Controllers/TopicController.cs @@ -3,9 +3,6 @@ using DotNetBlog.Web.Areas.Api.Models.Topic; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Localization; -using System; -using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; namespace DotNetBlog.Web.Areas.Api.Controllers @@ -25,7 +22,7 @@ public TopicController(TopicService topicService, IHtmlLocalizer Add([FromBody]AddTopicModel model) + public async Task Add([FromBody] AddTopicModel model) { if (model == null) { @@ -44,7 +41,7 @@ public async Task Add([FromBody]AddTopicModel model) } [HttpPost("{id:int}")] - public async Task Edit([FromRoute]int id, [FromBody]EditTopicModel model) + public async Task Edit([FromRoute] int id, [FromBody] EditTopicModel model) { if (model == null) { @@ -65,7 +62,7 @@ public async Task Edit([FromRoute]int id, [FromBody]EditTopicMode } [HttpGet("query")] - public async Task Query([FromQuery]QueryTopicModel model) + public async Task Query([FromQuery] QueryTopicModel model) { if (model == null) { @@ -87,7 +84,7 @@ public async Task Query([FromQuery]QueryTopicModel model) public async Task Get(int id) { var model = await TopicService.Get(id); - if(model == null) + if (model == null) { return Error(L["Article does not exist"].Value); } @@ -95,7 +92,7 @@ public async Task Get(int id) } [HttpPost("batch/publish")] - public async Task BatchPublish([FromBody]BatchModel model) + public async Task BatchPublish([FromBody] BatchModel model) { if (model == null) { @@ -108,7 +105,7 @@ public async Task BatchPublish([FromBody]BatchModel model) } [HttpPost("batch/draft")] - public async Task BatchDraft([FromBody]BatchModel model) + public async Task BatchDraft([FromBody] BatchModel model) { if (model == null) { @@ -121,7 +118,7 @@ public async Task BatchDraft([FromBody]BatchModel model) } [HttpPost("batch/trash")] - public async Task BatchTrash([FromBody]BatchModel model) + public async Task BatchTrash([FromBody] BatchModel model) { if (model == null) { diff --git a/src/DotNetBlog.Web/Areas/Api/Controllers/UploadController.cs b/src/DotNetBlog.Web/Areas/Api/Controllers/UploadController.cs index 49d2bac..4fb8d32 100644 --- a/src/DotNetBlog.Web/Areas/Api/Controllers/UploadController.cs +++ b/src/DotNetBlog.Web/Areas/Api/Controllers/UploadController.cs @@ -3,7 +3,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Localization; using System; -using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; @@ -13,20 +12,20 @@ namespace DotNetBlog.Web.Areas.Api.Controllers [Route("api/upload")] public class UploadController : ControllerBase { - private IHostingEnvironment Enviroment { get; set; } + private IWebHostEnvironment Enviroment { get; set; } private IHtmlLocalizer L { get; set; } private static readonly string[] AvailableImageExtensionList = new string[] { ".jpg", ".png", ".gif", ".bmp", "" }; - public UploadController(IHostingEnvironment enviroment, IHtmlLocalizer localizer) + public UploadController(IWebHostEnvironment enviroment, IHtmlLocalizer localizer) { this.Enviroment = enviroment; this.L = localizer; } [HttpPost("image")] - public async Task UploadImage([FromForm]UploadImageModel model) + public async Task UploadImage([FromForm] UploadImageModel model) { if (model == null) { diff --git a/src/DotNetBlog.Web/Areas/Api/Controllers/WidgetController.cs b/src/DotNetBlog.Web/Areas/Api/Controllers/WidgetController.cs index c96e61b..73da17f 100644 --- a/src/DotNetBlog.Web/Areas/Api/Controllers/WidgetController.cs +++ b/src/DotNetBlog.Web/Areas/Api/Controllers/WidgetController.cs @@ -2,7 +2,6 @@ using DotNetBlog.Core.Service; using DotNetBlog.Web.Areas.Api.Models.Widget; using Microsoft.AspNetCore.Mvc; -using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -38,7 +37,7 @@ public async Task QueryAll() } [HttpPost("")] - public async Task Save([FromBody]List model) + public async Task Save([FromBody] List model) { if (model == null) { diff --git a/src/DotNetBlog.Web/Areas/Api/Filters/ErrorHandlerFilter.cs b/src/DotNetBlog.Web/Areas/Api/Filters/ErrorHandlerFilter.cs index 3b016db..38d6318 100644 --- a/src/DotNetBlog.Web/Areas/Api/Filters/ErrorHandlerFilter.cs +++ b/src/DotNetBlog.Web/Areas/Api/Filters/ErrorHandlerFilter.cs @@ -1,14 +1,10 @@ -using Microsoft.AspNetCore.Mvc.Filters; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; -using NLog; -using DotNetBlog.Web.Areas.Api.Models; -using Microsoft.AspNetCore.Mvc; +using DotNetBlog.Web.Areas.Api.Models; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.Localization; +using Microsoft.Extensions.DependencyInjection; +using NLog; namespace DotNetBlog.Web.Areas.Api.Filters { diff --git a/src/DotNetBlog.Web/Areas/Api/Filters/RequireLoginApiFilter.cs b/src/DotNetBlog.Web/Areas/Api/Filters/RequireLoginApiFilter.cs index def3964..c37e00d 100644 --- a/src/DotNetBlog.Web/Areas/Api/Filters/RequireLoginApiFilter.cs +++ b/src/DotNetBlog.Web/Areas/Api/Filters/RequireLoginApiFilter.cs @@ -1,11 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.AspNetCore.Mvc.Localization; using Microsoft.Extensions.DependencyInjection; -using Microsoft.AspNetCore.Mvc.Filters; using System.Net; -using Microsoft.AspNetCore.Mvc.Localization; namespace DotNetBlog.Web.Areas.Api.Filters { diff --git a/src/DotNetBlog.Web/Areas/Api/Filters/ValidateRequestApiFilter.cs b/src/DotNetBlog.Web/Areas/Api/Filters/ValidateRequestApiFilter.cs index 95756aa..0302cd6 100644 --- a/src/DotNetBlog.Web/Areas/Api/Filters/ValidateRequestApiFilter.cs +++ b/src/DotNetBlog.Web/Areas/Api/Filters/ValidateRequestApiFilter.cs @@ -1,9 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Filters; -using Microsoft.AspNetCore.Http; namespace DotNetBlog.Web.Areas.Api.Filters { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/ApiResponse.cs b/src/DotNetBlog.Web/Areas/Api/Models/ApiResponse.cs index 6957479..5eb1b82 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/ApiResponse.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/ApiResponse.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; +using System.Collections.Generic; namespace DotNetBlog.Web.Areas.Api.Models { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Category/RemoveCategoryModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Category/RemoveCategoryModel.cs index 7a5fa8b..40793aa 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Category/RemoveCategoryModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Category/RemoveCategoryModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Web.Areas.Api.Models.Category +namespace DotNetBlog.Web.Areas.Api.Models.Category { public class RemoveCategoryModel { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Category/SaveCategoryModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Category/SaveCategoryModel.cs index 61afd92..b8fc77b 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Category/SaveCategoryModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Category/SaveCategoryModel.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; namespace DotNetBlog.Web.Areas.Api.Models.Category { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Comment/BatchModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Comment/BatchModel.cs index 1f360d7..bba8a82 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Comment/BatchModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Comment/BatchModel.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; namespace DotNetBlog.Web.Areas.Api.Models.Comment { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Comment/QueryCommentModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Comment/QueryCommentModel.cs index 779e793..d3195cb 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Comment/QueryCommentModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Comment/QueryCommentModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Web.Areas.Api.Models.Comment +namespace DotNetBlog.Web.Areas.Api.Models.Comment { public class QueryCommentModel { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Comment/ReplyCommentModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Comment/ReplyCommentModel.cs index b82fc16..d6c367e 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Comment/ReplyCommentModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Comment/ReplyCommentModel.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; namespace DotNetBlog.Web.Areas.Api.Models.Comment { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Config/AdvanceConfigModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Config/AdvanceConfigModel.cs index 6477d04..b38c56f 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Config/AdvanceConfigModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Config/AdvanceConfigModel.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; namespace DotNetBlog.Web.Areas.Api.Models.Config { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Config/BasicConfigModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Config/BasicConfigModel.cs index 874333c..6ac2b5e 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Config/BasicConfigModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Config/BasicConfigModel.cs @@ -1,8 +1,5 @@ using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Web.Areas.Api.Models.Config { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Config/CommentConfigModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Config/CommentConfigModel.cs index 4525c48..aba7cdb 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Config/CommentConfigModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Config/CommentConfigModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Web.Areas.Api.Models.Config +namespace DotNetBlog.Web.Areas.Api.Models.Config { public class CommentConfigModel { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Config/EmailConfigModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Config/EmailConfigModel.cs index fdbcc7c..40e8c7a 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Config/EmailConfigModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Config/EmailConfigModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace DotNetBlog.Web.Areas.Api.Models.Config +namespace DotNetBlog.Web.Areas.Api.Models.Config { public class EmailConfigModel { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/My/EditMyInfoModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/My/EditMyInfoModel.cs index 9265e30..70ce595 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/My/EditMyInfoModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/My/EditMyInfoModel.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; namespace DotNetBlog.Web.Areas.Api.Models.My { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Page/BatchModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Page/BatchModel.cs index ca1bb25..8014bb1 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Page/BatchModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Page/BatchModel.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; namespace DotNetBlog.Web.Areas.Api.Models.Page { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Tag/DeleteTagModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Tag/DeleteTagModel.cs index 4b13381..915f2db 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Tag/DeleteTagModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Tag/DeleteTagModel.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; namespace DotNetBlog.Web.Areas.Api.Models.Tag { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Tag/QueryTagModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Tag/QueryTagModel.cs index 941aae5..f6fda95 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Tag/QueryTagModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Tag/QueryTagModel.cs @@ -1,8 +1,5 @@ using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Web.Areas.Api.Models.Tag { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Tag/SaveTagModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Tag/SaveTagModel.cs index 131a06c..29bfd99 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Tag/SaveTagModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Tag/SaveTagModel.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; namespace DotNetBlog.Web.Areas.Api.Models.Tag { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Topic/BatchModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Topic/BatchModel.cs index c5216ea..e55f753 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Topic/BatchModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Topic/BatchModel.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; namespace DotNetBlog.Web.Areas.Api.Models.Topic { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Topic/QueryTopicModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Topic/QueryTopicModel.cs index dbda3c2..22dce29 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Topic/QueryTopicModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Topic/QueryTopicModel.cs @@ -1,9 +1,6 @@ using DotNetBlog.Core.Enums; using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Web.Areas.Api.Models.Topic { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Upload/UploadImageModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Upload/UploadImageModel.cs index 18c58a0..b311147 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Upload/UploadImageModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Upload/UploadImageModel.cs @@ -1,9 +1,5 @@ using Microsoft.AspNetCore.Http; -using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Web.Areas.Api.Models.Upload { diff --git a/src/DotNetBlog.Web/Areas/Api/Models/Widget/SaveWidgetModel.cs b/src/DotNetBlog.Web/Areas/Api/Models/Widget/SaveWidgetModel.cs index 1db6522..db012a1 100644 --- a/src/DotNetBlog.Web/Areas/Api/Models/Widget/SaveWidgetModel.cs +++ b/src/DotNetBlog.Web/Areas/Api/Models/Widget/SaveWidgetModel.cs @@ -1,10 +1,5 @@ -using DotNetBlog.Core.Model.Widget; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; +using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Web.Areas.Api.Models.Widget { diff --git a/src/DotNetBlog.Web/AutoMapperConfig.cs b/src/DotNetBlog.Web/AutoMapperConfig.cs index 20421f2..b272fff 100644 --- a/src/DotNetBlog.Web/AutoMapperConfig.cs +++ b/src/DotNetBlog.Web/AutoMapperConfig.cs @@ -1,21 +1,18 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using AutoMapper; -using DotNetBlog.Web.Areas.Api.Models.Config; -using DotNetBlog.Core.Model.Setting; -using DotNetBlog.Core.Model.Topic; +using AutoMapper; using DotNetBlog.Core.Entity; using DotNetBlog.Core.Model.Page; +using DotNetBlog.Core.Model.Setting; +using DotNetBlog.Core.Model.Topic; +using DotNetBlog.Web.Areas.Api.Models.Config; +using Microsoft.Extensions.DependencyInjection; namespace DotNetBlog.Web { - public sealed class AutoMapperConfig + public static class AutoMapperConfig { - public static void Configure() + public static void AddAutoMapper(this IServiceCollection services) { - Mapper.Initialize(config => + var mapperConfig = new MapperConfiguration(config => { config.CreateMap(); config.CreateMap(); @@ -32,6 +29,9 @@ public static void Configure() config.CreateMap(); config.CreateMap(); }); + + var mapper = mapperConfig.CreateMapper(); + services.AddSingleton(mapper); } } } diff --git a/src/DotNetBlog.Web/Controllers/AccountController.cs b/src/DotNetBlog.Web/Controllers/AccountController.cs index e3400c2..e0f876e 100644 --- a/src/DotNetBlog.Web/Controllers/AccountController.cs +++ b/src/DotNetBlog.Web/Controllers/AccountController.cs @@ -3,9 +3,6 @@ using DotNetBlog.Web.ViewModels.Account; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Localization; -using System; -using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; namespace DotNetBlog.Web.Controllers @@ -47,7 +44,7 @@ public IActionResult Login(string redirect = null) [HttpPost("login")] [ValidateAntiForgeryToken] - public async Task Login([FromForm]LoginModel model) + public async Task Login([FromForm] LoginModel model) { if (model == null || !ModelState.IsValid) { @@ -103,7 +100,7 @@ public IActionResult ChangePassword() [HttpPost("changepassword")] [Filters.RequireLoginFilter] [ValidateAntiForgeryToken] - public async Task ChangePassword([FromForm]ChangePasswordModel model) + public async Task ChangePassword([FromForm] ChangePasswordModel model) { if (model == null || !ModelState.IsValid) { diff --git a/src/DotNetBlog.Web/Controllers/AdminController.cs b/src/DotNetBlog.Web/Controllers/AdminController.cs index 4cd1a0e..d597b58 100644 --- a/src/DotNetBlog.Web/Controllers/AdminController.cs +++ b/src/DotNetBlog.Web/Controllers/AdminController.cs @@ -1,8 +1,4 @@ using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Web.Controllers { diff --git a/src/DotNetBlog.Web/Controllers/ExceptionController.cs b/src/DotNetBlog.Web/Controllers/ExceptionController.cs index b267c49..f3c65d6 100644 --- a/src/DotNetBlog.Web/Controllers/ExceptionController.cs +++ b/src/DotNetBlog.Web/Controllers/ExceptionController.cs @@ -2,10 +2,6 @@ using DotNetBlog.Web.ViewModels.Exception; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Web.Controllers { diff --git a/src/DotNetBlog.Web/Controllers/HomeController.cs b/src/DotNetBlog.Web/Controllers/HomeController.cs index aebd056..2e5a4af 100644 --- a/src/DotNetBlog.Web/Controllers/HomeController.cs +++ b/src/DotNetBlog.Web/Controllers/HomeController.cs @@ -1,17 +1,15 @@ -using DotNetBlog.Core.Model.Comment; +using DotNetBlog.Core; +using DotNetBlog.Core.Model.Comment; using DotNetBlog.Core.Model.Page; using DotNetBlog.Core.Model.Setting; using DotNetBlog.Core.Model.Topic; using DotNetBlog.Core.Service; using DotNetBlog.Web.ViewModels.Home; using Microsoft.AspNetCore.Mvc; -using System; +using Microsoft.AspNetCore.Mvc.Localization; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using DotNetBlog.Core; -using Microsoft.AspNetCore.Mvc.Localization; namespace DotNetBlog.Web.Controllers { @@ -39,11 +37,11 @@ public class HomeController : Controller private IHtmlLocalizer L { get; set; } public HomeController( - TopicService topicService, - CategoryService categoryService, - SettingModel settingModel, - TagService tagService, - CommentService commentService, + TopicService topicService, + CategoryService categoryService, + SettingModel settingModel, + TagService tagService, + CommentService commentService, PageService pageService, ClientManager clientManager, IHtmlLocalizer localizer) @@ -276,7 +274,7 @@ private IActionResult PageView(PageModel page) } [HttpPost("comment/add")] - public async Task AddComment([FromForm]AddCommentModel model) + public async Task AddComment([FromForm] AddCommentModel model) { if (model == null || !ModelState.IsValid) { diff --git a/src/DotNetBlog.Web/Controllers/InstallController.cs b/src/DotNetBlog.Web/Controllers/InstallController.cs index abec830..5352307 100644 --- a/src/DotNetBlog.Web/Controllers/InstallController.cs +++ b/src/DotNetBlog.Web/Controllers/InstallController.cs @@ -1,24 +1,12 @@ -using DotNetBlog.Core.Data; -using DotNetBlog.Core.Entity; -using DotNetBlog.Core.Enums; -using DotNetBlog.Core.Model.Widget; +using DotNetBlog.Core.Model.Install; using DotNetBlog.Core.Service; using DotNetBlog.Web.ViewModels.Install; using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.Localization; -using Microsoft.Extensions.Options; -using Newtonsoft.Json; -using NLog; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.Rendering; -using DotNetBlog.Core.Model.Install; using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Options; namespace DotNetBlog.Web.Controllers { @@ -95,7 +83,7 @@ private IndexViewModel CreateViewModel(InstallModel model) return vm; } - + public override void OnActionExecuting(ActionExecutingContext context) { if (!InstallService.NeedToInstall()) diff --git a/src/DotNetBlog.Web/Controllers/QuickActionController.cs b/src/DotNetBlog.Web/Controllers/QuickActionController.cs index 8f3a9a0..bc58509 100644 --- a/src/DotNetBlog.Web/Controllers/QuickActionController.cs +++ b/src/DotNetBlog.Web/Controllers/QuickActionController.cs @@ -1,9 +1,5 @@ -using DotNetBlog.Core.Model.Comment; -using DotNetBlog.Core.Service; +using DotNetBlog.Core.Service; using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; namespace DotNetBlog.Web.Controllers diff --git a/src/DotNetBlog.Web/DotNetBlog.Web.csproj b/src/DotNetBlog.Web/DotNetBlog.Web.csproj index 21e08c5..94c79ea 100644 --- a/src/DotNetBlog.Web/DotNetBlog.Web.csproj +++ b/src/DotNetBlog.Web/DotNetBlog.Web.csproj @@ -1,14 +1,8 @@ - 1.2.0 - netcoreapp2.0 - true - DotNetBlog.Web - Exe - DotNetBlog.Web - 2.0 - $(PackageTargetFallback);dotnet5.6;dnxcore50;portable-net45+win8 + netcoreapp3.1 + 1.3.0 @@ -39,18 +33,9 @@ - - - - - - - - - - - - + + + diff --git a/src/DotNetBlog.Web/Filters/ErrorHandleFilter.cs b/src/DotNetBlog.Web/Filters/ErrorHandleFilter.cs index 196f3a1..47e2030 100644 --- a/src/DotNetBlog.Web/Filters/ErrorHandleFilter.cs +++ b/src/DotNetBlog.Web/Filters/ErrorHandleFilter.cs @@ -11,7 +11,7 @@ public override void OnException(ExceptionContext context) { Logger.Error(context.Exception, context.Exception.Message); - base.OnException(context); + base.OnException(context); } } } diff --git a/src/DotNetBlog.Web/Filters/RequireLoginFilter.cs b/src/DotNetBlog.Web/Filters/RequireLoginFilter.cs index 9cd9f14..1b09d31 100644 --- a/src/DotNetBlog.Web/Filters/RequireLoginFilter.cs +++ b/src/DotNetBlog.Web/Filters/RequireLoginFilter.cs @@ -1,11 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; +using DotNetBlog.Core; +using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.DependencyInjection; -using DotNetBlog.Core; -using Microsoft.AspNetCore.Mvc; using System.Net; namespace DotNetBlog.Web.Filters @@ -26,7 +22,7 @@ public override void OnActionExecuting(ActionExecutingContext context) } protected virtual void HandleUnauthorizedRequest(ActionExecutingContext context) - { + { string sourceUrl = null; if (context.HttpContext.Request.Path.HasValue) { @@ -41,7 +37,7 @@ protected virtual void HandleUnauthorizedRequest(ActionExecutingContext context) context.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized; context.Result = new RedirectToActionResult("Login", "Account", new { redirect = sourceUrl }); - + } } } diff --git a/src/DotNetBlog.Web/Filters/ValidateRequestFilter.cs b/src/DotNetBlog.Web/Filters/ValidateRequestFilter.cs index 7a10e01..928a5e4 100644 --- a/src/DotNetBlog.Web/Filters/ValidateRequestFilter.cs +++ b/src/DotNetBlog.Web/Filters/ValidateRequestFilter.cs @@ -1,10 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc.Filters; namespace DotNetBlog.Web.Filters { diff --git a/src/DotNetBlog.Web/Middlewares/ClientManagerMiddleware.cs b/src/DotNetBlog.Web/Middlewares/ClientManagerMiddleware.cs index 6066fcd..76c1eae 100644 --- a/src/DotNetBlog.Web/Middlewares/ClientManagerMiddleware.cs +++ b/src/DotNetBlog.Web/Middlewares/ClientManagerMiddleware.cs @@ -1,11 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; +using DotNetBlog.Core; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; -using DotNetBlog.Core; +using System.Threading.Tasks; namespace DotNetBlog.Web.Middlewares { diff --git a/src/DotNetBlog.Web/Program.cs b/src/DotNetBlog.Web/Program.cs index ce83f2a..7e5c8fa 100644 --- a/src/DotNetBlog.Web/Program.cs +++ b/src/DotNetBlog.Web/Program.cs @@ -1,9 +1,6 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; +using NLog.Extensions.Hosting; namespace DotNetBlog.Web { @@ -11,17 +8,16 @@ public class Program { public static void Main(string[] args) { - var host = new WebHostBuilder() - .UseKestrel() - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIISIntegration() - .UseStartup() -#if DEBUG - .UseUrls("http://0.0.0.0:5000") -#endif - .Build(); + var logger = NLog.LogManager.LoadConfiguration("NLog.config").GetCurrentClassLogger(); - host.Run(); + CreateHostBuilder(args).UseNLog().Build().Run(); } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); } } diff --git a/src/DotNetBlog.Web/Properties/PublishProfiles/publish-module.psm1 b/src/DotNetBlog.Web/Properties/PublishProfiles/publish-module.psm1 deleted file mode 100644 index adc6ada..0000000 --- a/src/DotNetBlog.Web/Properties/PublishProfiles/publish-module.psm1 +++ /dev/null @@ -1,1231 +0,0 @@ -# WARNING: DO NOT MODIFY this file. Visual Studio will override it. -param() - -$script:AspNetPublishHandlers = @{} - -<# -These settings can be overridden with environment variables. -The name of the environment variable should use "Publish" as a -prefix and the names below. For example: - - $env:PublishMSDeployUseChecksum = $true -#> -$global:AspNetPublishSettings = New-Object -TypeName PSCustomObject @{ - MsdeployDefaultProperties = @{ - 'MSDeployUseChecksum'=$false - 'SkipExtraFilesOnServer'=$true - 'retryAttempts' = 20 - 'EnableMSDeployBackup' = $false - 'DeleteExistingFiles' = $false - 'AllowUntrustedCertificate'= $false - 'MSDeployPackageContentFoldername'='website\' - 'EnvironmentName' = 'Production' - 'AuthType'='Basic' - 'MSDeployPublishMethod'='WMSVC' - } -} - -function InternalOverrideSettingsFromEnv{ - [cmdletbinding()] - param( - [Parameter(Position=0)] - [object[]]$settings = ($global:AspNetPublishSettings,$global:AspNetPublishSettings.MsdeployDefaultProperties), - - [Parameter(Position=1)] - [string]$prefix = 'Publish' - ) - process{ - foreach($settingsObj in $settings){ - if($settingsObj -eq $null){ - continue - } - - $settingNames = $null - if($settingsObj -is [hashtable]){ - $settingNames = $settingsObj.Keys - } - else{ - $settingNames = ($settingsObj | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name) - - } - - foreach($name in @($settingNames)){ - $fullname = ('{0}{1}' -f $prefix,$name) - if(Test-Path "env:$fullname"){ - $settingsObj.$name = ((get-childitem "env:$fullname").Value) - } - } - } - } -} - -InternalOverrideSettingsFromEnv -prefix 'Publish' -settings $global:AspNetPublishSettings,$global:AspNetPublishSettings.MsdeployDefaultProperties - -function Register-AspnetPublishHandler{ - [cmdletbinding()] - param( - [Parameter(Mandatory=$true,Position=0)] - $name, - [Parameter(Mandatory=$true,Position=1)] - [ScriptBlock]$handler, - [switch]$force - ) - process{ - if(!($script:AspNetPublishHandlers[$name]) -or $force ){ - 'Adding handler for [{0}]' -f $name | Write-Verbose - $script:AspNetPublishHandlers[$name] = $handler - } - elseif(!($force)){ - 'Ignoring call to Register-AspnetPublishHandler for [name={0}], because a handler with that name exists and -force was not passed.' -f $name | Write-Verbose - } - } -} - -function Get-AspnetPublishHandler{ - [cmdletbinding()] - param( - [Parameter(Mandatory=$true,Position=0)] - $name - ) - process{ - $foundHandler = $script:AspNetPublishHandlers[$name] - - if(!$foundHandler){ - throw ('AspnetPublishHandler with name "{0}" was not found' -f $name) - } - - $foundHandler - } -} - -function GetInternal-ExcludeFilesArg{ - [cmdletbinding()] - param( - $publishProperties - ) - process{ - $excludeFiles = $publishProperties['ExcludeFiles'] - foreach($exclude in $excludeFiles){ - if($exclude){ - [string]$objName = $exclude['objectname'] - - if([string]::IsNullOrEmpty($objName)){ - $objName = 'filePath' - } - - $excludePath = $exclude['absolutepath'] - - # output the result to the return list - ('-skip:objectName={0},absolutePath=''{1}''' -f $objName, $excludePath) - } - } - } -} - -function GetInternal-ReplacementsMSDeployArgs{ - [cmdletbinding()] - param( - $publishProperties - ) - process{ - foreach($replace in ($publishProperties['Replacements'])){ - if($replace){ - $typeValue = $replace['type'] - if(!$typeValue){ $typeValue = 'TextFile' } - - $file = $replace['file'] - $match = $replace['match'] - $newValue = $replace['newValue'] - - if($file -and $match -and $newValue){ - $setParam = ('-setParam:type={0},scope={1},match={2},value={3}' -f $typeValue,$file, $match,$newValue) - 'Adding setparam [{0}]' -f $setParam | Write-Verbose - - # return it - $setParam - } - else{ - 'Skipping replacement because its missing a required value.[file="{0}",match="{1}",newValue="{2}"]' -f $file,$match,$newValue | Write-Verbose - } - } - } - } -} - -<# -.SYNOPSIS -Returns an array of msdeploy arguments that are used across different providers. -For example this will handle useChecksum, AppOffline etc. -This will also add default properties if they are missing. -#> -function GetInternal-SharedMSDeployParametersFrom{ - [cmdletbinding()] - param( - [Parameter(Mandatory=$true,Position=0)] - [HashTable]$publishProperties, - [Parameter(Mandatory=$true,Position=1)] - [System.IO.FileInfo]$packOutput - ) - process{ - $sharedArgs = New-Object psobject -Property @{ - ExtraArgs = @() - DestFragment = '' - EFMigrationData = @{} - } - - # add default properties if they are missing - foreach($propName in $global:AspNetPublishSettings.MsdeployDefaultProperties.Keys){ - if($publishProperties["$propName"] -eq $null){ - $defValue = $global:AspNetPublishSettings.MsdeployDefaultProperties["$propName"] - 'Adding default property to publishProperties ["{0}"="{1}"]' -f $propName,$defValue | Write-Verbose - $publishProperties["$propName"] = $defValue - } - } - - if($publishProperties['MSDeployUseChecksum'] -eq $true){ - $sharedArgs.ExtraArgs += '-usechecksum' - } - - if($publishProperties['EnableMSDeployAppOffline'] -eq $true){ - $sharedArgs.ExtraArgs += '-enablerule:AppOffline' - } - - if($publishProperties['WebPublishMethod'] -eq 'MSDeploy'){ - if($publishProperties['SkipExtraFilesOnServer'] -eq $true){ - $sharedArgs.ExtraArgs += '-enableRule:DoNotDeleteRule' - } - } - - if($publishProperties['WebPublishMethod'] -eq 'FileSystem'){ - if($publishProperties['DeleteExistingFiles'] -eq $false){ - $sharedArgs.ExtraArgs += '-enableRule:DoNotDeleteRule' - } - } - - if($publishProperties['retryAttempts']){ - $sharedArgs.ExtraArgs += ('-retryAttempts:{0}' -f ([int]$publishProperties['retryAttempts'])) - } - - if($publishProperties['EncryptWebConfig'] -eq $true){ - $sharedArgs.ExtraArgs += '-EnableRule:EncryptWebConfig' - } - - if($publishProperties['EnableMSDeployBackup'] -eq $false){ - $sharedArgs.ExtraArgs += '-disablerule:BackupRule' - } - - if($publishProperties['AllowUntrustedCertificate'] -eq $true){ - $sharedArgs.ExtraArgs += '-allowUntrusted' - } - - # add excludes - $sharedArgs.ExtraArgs += (GetInternal-ExcludeFilesArg -publishProperties $publishProperties) - # add replacements - $sharedArgs.ExtraArgs += (GetInternal-ReplacementsMSDeployArgs -publishProperties $publishProperties) - - # add EF Migration - if (($publishProperties['EfMigrations'] -ne $null) -and $publishProperties['EfMigrations'].Count -gt 0){ - if (!(Test-Path -Path $publishProperties['ProjectPath'])) { - throw 'ProjectPath property needs to be defined in the pubxml for EF migration.' - } - try { - # generate T-SQL files - $EFSqlFiles = GenerateInternal-EFMigrationScripts -projectPath $publishProperties['ProjectPath'] -packOutput $packOutput -EFMigrations $publishProperties['EfMigrations'] - $sharedArgs.EFMigrationData.Add('EFSqlFiles',$EFSqlFiles) - } - catch { - throw ('An error occurred while generating EF migrations. {0} {1}' -f $_.Exception,(Get-PSCallStack)) - } - } - # add connection string update - if (($publishProperties['DestinationConnectionStrings'] -ne $null) -and $publishProperties['DestinationConnectionStrings'].Count -gt 0) { - try { - # create/update appsettings.[environment].json - GenerateInternal-AppSettingsFile -packOutput $packOutput -environmentName $publishProperties['EnvironmentName'] -connectionStrings $publishProperties['DestinationConnectionStrings'] - } - catch { - throw ('An error occurred while generating the publish appsettings file. {0} {1}' -f $_.Exception,(Get-PSCallStack)) - } - } - - if(-not [string]::IsNullOrWhiteSpace($publishProperties['ProjectGuid'])) { - AddInternal-ProjectGuidToWebConfig -publishProperties $publishProperties -packOutput $packOutput - } - - # return the args - $sharedArgs - } -} - -<# -.SYNOPSIS -This will publish the folder based on the properties in $publishProperties - -.PARAMETER publishProperties -This is a hashtable containing the publish properties. See the examples here for more info on how to use this parameter. - -.PARAMETER packOutput -The folder path to the output of the dnu publish command. This folder contains the files -that will be published. - -.PARAMETER pubProfilePath -Path to a publish profile (.pubxml file) to import publish properties from. If the same property exists in -publishProperties and the publish profile then publishProperties will win. - -.EXAMPLE - Publish-AspNet -packOutput $packOutput -publishProperties @{ - 'WebPublishMethod'='MSDeploy' - 'MSDeployServiceURL'='contoso.scm.azurewebsites.net:443';` - 'DeployIisAppPath'='contoso';'Username'='$contoso';'Password'="$env:PublishPwd"} - -.EXAMPLE -Publish-AspNet -packOutput $packOutput -publishProperties @{ - 'WebPublishMethod'='FileSystem' - 'publishUrl'="$publishDest" - } - -.EXAMPLE -Publish-AspNet -packOutput $packOutput -publishProperties @{ - 'WebPublishMethod'='MSDeploy' - 'MSDeployServiceURL'='contoso.scm.azurewebsites.net:443';` -'DeployIisAppPath'='contoso';'Username'='$contoso';'Password'="$env:PublishPwd" - 'ExcludeFiles'=@( - @{'absolutepath'='test.txt'}, - @{'absolutepath'='references.js'} -)} - -.EXAMPLE -Publish-AspNet -packOutput $packOutput -publishProperties @{ - 'WebPublishMethod'='FileSystem' - 'publishUrl'="$publishDest" - 'ExcludeFiles'=@( - @{'absolutepath'='test.txt'}, - @{'absolutepath'='_references.js'}) - 'Replacements' = @( - @{'file'='test.txt$';'match'='REPLACEME';'newValue'='updatedValue'}) - } - -Publish-AspNet -packOutput $packOutput -publishProperties @{ - 'WebPublishMethod'='FileSystem' - 'publishUrl'="$publishDest" - 'ExcludeFiles'=@( - @{'absolutepath'='test.txt'}, - @{'absolutepath'='c:\\full\\path\\ok\\as\\well\\_references.js'}) - 'Replacements' = @( - @{'file'='test.txt$';'match'='REPLACEME';'newValue'='updatedValue'}) - } - -.EXAMPLE -Publish-AspNet -packOutput $packOutput -publishProperties @{ - 'WebPublishMethod'='FileSystem' - 'publishUrl'="$publishDest" - 'EnableMSDeployAppOffline'='true' - 'AppOfflineTemplate'='offline-template.html' - 'MSDeployUseChecksum'='true' -} -#> -function Publish-AspNet{ - param( - [Parameter(Position=0,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)] - [hashtable]$publishProperties = @{}, - - [Parameter(Mandatory = $true,Position=1,ValueFromPipelineByPropertyName=$true)] - [System.IO.FileInfo]$packOutput, - - [Parameter(Position=2,ValueFromPipelineByPropertyName=$true)] - [System.IO.FileInfo]$pubProfilePath - ) - process{ - if($publishProperties['WebPublishMethodOverride']){ - 'Overriding publish method from $publishProperties[''WebPublishMethodOverride''] to [{0}]' -f ($publishProperties['WebPublishMethodOverride']) | Write-Verbose - $publishProperties['WebPublishMethod'] = $publishProperties['WebPublishMethodOverride'] - } - - if(-not [string]::IsNullOrWhiteSpace($pubProfilePath)){ - $profileProperties = Get-PropertiesFromPublishProfile -filepath $pubProfilePath - foreach($key in $profileProperties.Keys){ - if(-not ($publishProperties.ContainsKey($key))){ - 'Adding properties from publish profile [''{0}''=''{1}'']' -f $key,$profileProperties[$key] | Write-Verbose - $publishProperties.Add($key,$profileProperties[$key]) - } - } - } - - if(!([System.IO.Path]::IsPathRooted($packOutput))){ - $packOutput = [System.IO.Path]::GetFullPath((Join-Path $pwd $packOutput)) - } - - $pubMethod = $publishProperties['WebPublishMethod'] - 'Publishing with publish method [{0}]' -f $pubMethod | Write-Output - - # get the handler based on WebPublishMethod, and call it. - &(Get-AspnetPublishHandler -name $pubMethod) $publishProperties $packOutput - } -} - -<# -.SYNOPSIS - -Inputs: - -Example of $xmlDocument: '' -Example of $providerDataArray: - - [System.Collections.ArrayList]$providerDataArray = @() - - $iisAppSourceKeyValue=@{"iisApp" = @{"path"='c:\temp\pathtofiles';"appOfflineTemplate" ='offline-template.html'}} - $providerDataArray.Add($iisAppSourceKeyValue) - - $dbfullsqlKeyValue=@{"dbfullsql" = @{"path"="c:\Temp\PathToSqlFile"}} - $providerDataArray.Add($dbfullsqlKeyValue) - - $dbfullsqlKeyValue=@{"dbfullsql" = @{"path"="c:\Temp\PathToSqlFile2"}} - $providerDataArray.Add($dbfullsqlKeyValue) - - Manifest File content: - - - - - - -#> -function AddInternal-ProviderDataToManifest { - [cmdletbinding()] - param( - [Parameter(Mandatory=$true, Position=0)] - [XML]$xmlDocument, - [Parameter(Position=1)] - [System.Collections.ArrayList]$providerDataArray - ) - process { - $siteNode = $xmlDocument.SelectSingleNode("/sitemanifest") - if ($siteNode -eq $null) { - throw 'sitemanifest element is missing in the xml object' - } - foreach ($providerData in $providerDataArray) { - foreach ($providerName in $providerData.Keys) { - $providerValue = $providerData[$providerName] - $xmlNode = $xmlDocument.CreateElement($providerName) - foreach ($providerValueKey in $providerValue.Keys) { - $xmlNode.SetAttribute($providerValueKey, $providerValue[$providerValueKey]) | Out-Null - } - $siteNode.AppendChild($xmlNode) | Out-Null - } - } - } -} - -function AddInternal-ProjectGuidToWebConfig { - [cmdletbinding()] - param( - [Parameter(Position=0)] - [HashTable]$publishProperties, - [Parameter(Position=1)] - [System.IO.FileInfo]$packOutput - ) - process { - try { - [Reflection.Assembly]::LoadWithPartialName("System.Xml.Linq") | Out-Null - $webConfigPath = Join-Path $packOutput 'web.config' - $projectGuidCommentValue = 'ProjectGuid: {0}' -f $publishProperties['ProjectGuid'] - $xDoc = [System.Xml.Linq.XDocument]::Load($webConfigPath) - $allNodes = $xDoc.DescendantNodes() - $projectGuidComment = $allNodes | Where-Object { $_.NodeType -eq [System.Xml.XmlNodeType]::Comment -and $_.Value -eq $projectGuidCommentValue } | Select -First 1 - if($projectGuidComment -ne $null) { - if($publishProperties['IgnoreProjectGuid'] -eq $true) { - $projectGuidComment.Remove() | Out-Null - $xDoc.Save($webConfigPath) | Out-Null - } - } - else { - if(-not ($publishProperties['IgnoreProjectGuid'] -eq $true)) { - $projectGuidComment = New-Object -TypeName System.Xml.Linq.XComment -ArgumentList $projectGuidCommentValue - $xDoc.LastNode.AddAfterSelf($projectGuidComment) | Out-Null - $xDoc.Save($webConfigPath) | Out-Null - } - } - } - catch { - } - } -} - -<# -.SYNOPSIS - -Example of $EFMigrations: - $EFMigrations = @{'CarContext'='Car Context ConnectionString';'MovieContext'='Movie Context Connection String'} - -#> - -function GenerateInternal-EFMigrationScripts { - [cmdletbinding()] - param( - [Parameter(Mandatory=$true,Position=0)] - [System.IO.FileInfo]$projectPath, - [Parameter(Mandatory=$true,Position=1)] - [System.IO.FileInfo]$packOutput, - [Parameter(Position=2)] - [HashTable]$EFMigrations - ) - process { - $files = @{} - $dotnetExePath = GetInternal-DotNetExePath - foreach ($dbContextName in $EFMigrations.Keys) { - try - { - $tempDir = GetInternal-PublishTempPath -packOutput $packOutput - $efScriptFile = Join-Path $tempDir ('{0}.sql' -f $dbContextName) - $arg = ('ef migrations script --idempotent --output {0} --context {1}' -f - $efScriptFile, - $dbContextName) - - Execute-Command $dotnetExePath $arg $projectPath | Out-Null - if (Test-Path -Path $efScriptFile) { - if (!($files.ContainsKey($dbContextName))) { - $files.Add($dbContextName, $efScriptFile) | Out-Null - } - } - } - catch - { - throw 'error occured when executing dotnet.exe to generate EF T-SQL file' - } - } - # return files object - $files - } -} - -<# -.SYNOPSIS - -Example of $connectionStrings: - $connectionStrings = @{'DefaultConnection'='Default ConnectionString';'CarConnection'='Car Connection String'} - -#> -function GenerateInternal-AppSettingsFile { - [cmdletbinding()] - param( - [Parameter(Mandatory = $true,Position=0)] - [System.IO.FileInfo]$packOutput, - [Parameter(Mandatory = $true,Position=1)] - [string]$environmentName, - [Parameter(Position=2)] - [HashTable]$connectionStrings - ) - process { - $configProdJsonFile = 'appsettings.{0}.json' -f $environmentName - $configProdJsonFilePath = Join-Path -Path $packOutput -ChildPath $configProdJsonFile - - if ([string]::IsNullOrEmpty($configProdJsonFilePath)) { - throw ('The path of {0} is empty' -f $configProdJsonFilePath) - } - - if(!(Test-Path -Path $configProdJsonFilePath)) { - # create new file - '{}' | out-file -encoding utf8 -filePath $configProdJsonFilePath -Force - } - - $jsonObj = ConvertFrom-Json -InputObject (Get-Content -Path $configProdJsonFilePath -Raw) - # update when there exists one or more connection strings - if ($connectionStrings -ne $null) { - foreach ($name in $connectionStrings.Keys) { - #check for hierarchy style - if ($jsonObj.ConnectionStrings.$name) { - $jsonObj.ConnectionStrings.$name = $connectionStrings[$name] - continue - } - #check for horizontal style - $horizontalName = 'ConnectionStrings.{0}:' -f $name - if ($jsonObj.$horizontalName) { - $jsonObj.$horizontalName = $connectionStrings[$name] - continue - } - # create new one - if (!($jsonObj.ConnectionStrings)) { - $contentForDefaultConnection = '{}' - $jsonObj | Add-Member -name 'ConnectionStrings' -value (ConvertFrom-Json -InputObject $contentForDefaultConnection) -MemberType NoteProperty | Out-Null - } - if (!($jsonObj.ConnectionStrings.$name)) { - $jsonObj.ConnectionStrings | Add-Member -name $name -value $connectionStrings[$name] -MemberType NoteProperty | Out-Null - } - } - } - - $jsonObj | ConvertTo-Json | out-file -encoding utf8 -filePath $configProdJsonFilePath -Force - - #return the path of config.[environment].json - $configProdJsonFilePath - } -} - -<# -.SYNOPSIS - -Inputs: -Example of $providerDataArray: - - [System.Collections.ArrayList]$providerDataArray = @() - - $iisAppSourceKeyValue=@{"iisApp" = @{"path"='c:\temp\pathtofiles';"appOfflineTemplate" ='offline-template.html'}} - $providerDataArray.Add($iisAppSourceKeyValue) - - $dbfullsqlKeyValue=@{"dbfullsql" = @{"path"="c:\Temp\PathToSqlFile"}} - $providerDataArray.Add($dbfullsqlKeyValue) - - $dbfullsqlKeyValue=@{"dbfullsql" = @{"path"="c:\Temp\PathToSqlFile2"}} - $providerDataArray.Add($dbfullsqlKeyValue) - - Manifest File content: - - - - - - - -#> - -function GenerateInternal-ManifestFile { - [cmdletbinding()] - param( - [Parameter(Mandatory=$true,Position=0)] - [System.IO.FileInfo]$packOutput, - [Parameter(Mandatory=$true,Position=1)] - $publishProperties, - [Parameter(Mandatory=$true,Position=2)] - [System.Collections.ArrayList]$providerDataArray, - [Parameter(Mandatory=$true,Position=3)] - [ValidateNotNull()] - $manifestFileName - ) - process{ - $xmlDocument = [xml]'' - AddInternal-ProviderDataToManifest -xmlDocument $xmlDocument -providerDataArray $providerDataArray | Out-Null - $publishTempDir = GetInternal-PublishTempPath -packOutput $packOutput - $XMLFile = Join-Path $publishTempDir $manifestFileName - $xmlDocument.OuterXml | out-file -encoding utf8 -filePath $XMLFile -Force - - # return - [System.IO.FileInfo]$XMLFile - } -} - -function GetInternal-PublishTempPath { - [cmdletbinding()] - param( - [Parameter(Mandatory=$true, Position=0)] - [System.IO.FileInfo]$packOutput - ) - process { - $tempDir = [io.path]::GetTempPath() - $packOutputFolderName = Split-Path $packOutput -Leaf - $publishTempDir = [io.path]::combine($tempDir,'PublishTemp','obj',$packOutputFolderName) - if (!(Test-Path -Path $publishTempDir)) { - New-Item -Path $publishTempDir -type directory | Out-Null - } - # return - [System.IO.FileInfo]$publishTempDir - } -} - -function Publish-AspNetMSDeploy{ - param( - [Parameter(Mandatory = $true,Position=0,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)] - $publishProperties, - [Parameter(Mandatory = $true,Position=1,ValueFromPipelineByPropertyName=$true)] - $packOutput - ) - process{ - if($publishProperties){ - $publishPwd = $publishProperties['Password'] - - $sharedArgs = GetInternal-SharedMSDeployParametersFrom -publishProperties $publishProperties -packOutput $packOutput - $iisAppPath = $publishProperties['DeployIisAppPath'] - - # create source manifest - - # e.g - # - # - # - # - # - # - - [System.Collections.ArrayList]$providerDataArray = @() - $iisAppValues = @{"path"=$packOutput}; - $iisAppSourceKeyValue=@{"iisApp" = $iisAppValues} - $providerDataArray.Add($iisAppSourceKeyValue) | Out-Null - - if ($sharedArgs.EFMigrationData -ne $null -and $sharedArgs.EFMigrationData.Contains('EFSqlFiles')) { - foreach ($sqlFile in $sharedArgs.EFMigrationData['EFSqlFiles'].Values) { - $dbFullSqlSourceKeyValue=@{"dbFullSql" = @{"path"=$sqlFile}} - $providerDataArray.Add($dbFullSqlSourceKeyValue) | Out-Null - } - } - - [System.IO.FileInfo]$sourceXMLFile = GenerateInternal-ManifestFile -packOutput $packOutput -publishProperties $publishProperties -providerDataArray $providerDataArray -manifestFileName 'SourceManifest.xml' - - $providerDataArray.Clear() | Out-Null - # create destination manifest - - # e.g - # - # - # - # - # - - $iisAppValues = @{"path"=$iisAppPath}; - if(-not [string]::IsNullOrWhiteSpace($publishProperties['AppOfflineTemplate'])){ - $iisAppValues.Add("appOfflineTemplate", $publishProperties['AppOfflineTemplate']) | Out-Null - } - - $iisAppDestinationKeyValue=@{"iisApp" = $iisAppValues} - $providerDataArray.Add($iisAppDestinationKeyValue) | Out-Null - - if ($publishProperties['EfMigrations'] -ne $null -and $publishProperties['EfMigrations'].Count -gt 0) { - foreach ($connectionString in $publishProperties['EfMigrations'].Values) { - $dbFullSqlDestinationKeyValue=@{"dbFullSql" = @{"path"=$connectionString}} - $providerDataArray.Add($dbFullSqlDestinationKeyValue) | Out-Null - } - } - - - [System.IO.FileInfo]$destXMLFile = GenerateInternal-ManifestFile -packOutput $packOutput -publishProperties $publishProperties -providerDataArray $providerDataArray -manifestFileName 'DestinationManifest.xml' - - <# - "C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe" - -source:manifest='C:\Users\testuser\AppData\Local\Temp\PublishTemp\obj\SourceManifest.xml' - -dest:manifest='C:\Users\testuser\AppData\Local\Temp\PublishTemp\obj\DestManifest.xml',ComputerName='https://contoso.scm.azurewebsites.net/msdeploy.axd',UserName='$contoso',Password='',IncludeAcls='False',AuthType='Basic' - -verb:sync - -enableRule:DoNotDeleteRule - -retryAttempts=2" - #> - - if(-not [string]::IsNullOrWhiteSpace($publishProperties['MSDeployPublishMethod'])){ - $serviceMethod = $publishProperties['MSDeployPublishMethod'] - } - - $msdeployComputerName= InternalNormalize-MSDeployUrl -serviceUrl $publishProperties['MSDeployServiceURL'] -siteName $iisAppPath -serviceMethod $publishProperties['MSDeployPublishMethod'] - if($publishProperties['UseMSDeployServiceURLAsIs'] -eq $true){ - $msdeployComputerName = $publishProperties['MSDeployServiceURL'] - } - - $publishArgs = @() - #use manifest to publish - $publishArgs += ('-source:manifest=''{0}''' -f $sourceXMLFile.FullName) - $publishArgs += ('-dest:manifest=''{0}'',ComputerName=''{1}'',UserName=''{2}'',Password=''{3}'',IncludeAcls=''False'',AuthType=''{4}''{5}' -f - $destXMLFile.FullName, - $msdeployComputerName, - $publishProperties['UserName'], - $publishPwd, - $publishProperties['AuthType'], - $sharedArgs.DestFragment) - $publishArgs += '-verb:sync' - $publishArgs += $sharedArgs.ExtraArgs - - $command = '"{0}" {1}' -f (Get-MSDeploy),($publishArgs -join ' ') - - if (! [String]::IsNullOrEmpty($publishPwd)) { - $command.Replace($publishPwd,'{PASSWORD-REMOVED-FROM-LOG}') | Print-CommandString - } - Execute-Command -exePath (Get-MSDeploy) -arguments ($publishArgs -join ' ') - } - else{ - throw 'publishProperties is empty, cannot publish' - } - } -} - -function Escape-TextForRegularExpressions{ - [cmdletbinding()] - param( - [Parameter(Position=0,Mandatory=$true)] - [string]$text - ) - process{ - [regex]::Escape($text) - } -} - -function Publish-AspNetMSDeployPackage{ - param( - [Parameter(Mandatory = $true,Position=0,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)] - $publishProperties, - [Parameter(Mandatory = $true,Position=1,ValueFromPipelineByPropertyName=$true)] - $packOutput - ) - process{ - if($publishProperties){ - $packageDestinationFilepath = $publishProperties['DesktopBuildPackageLocation'] - - if(!$packageDestinationFilepath){ - throw ('The package destination property (DesktopBuildPackageLocation) was not found in the publish properties') - } - - if(!([System.IO.Path]::IsPathRooted($packageDestinationFilepath))){ - $packageDestinationFilepath = [System.IO.Path]::GetFullPath((Join-Path $pwd $packageDestinationFilepath)) - } - - # if the dir doesn't exist create it - $pkgDir = ((new-object -typename System.IO.FileInfo($packageDestinationFilepath)).Directory) - if(!(Test-Path -Path $pkgDir)) { - New-Item $pkgDir -type Directory | Out-Null - } - - <# - "C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe" - -source:manifest='C:\Users\testuser\AppData\Local\Temp\PublishTemp\obj\SourceManifest.xml' - -dest:package=c:\temp\path\contosoweb.zip - -verb:sync - -enableRule:DoNotDeleteRule - -retryAttempts=2 - #> - - $sharedArgs = GetInternal-SharedMSDeployParametersFrom -publishProperties $publishProperties -packOutput $packOutput - - # create source manifest - - # e.g - # - # - # - # - - [System.Collections.ArrayList]$providerDataArray = @() - $iisAppSourceKeyValue=@{"iisApp" = @{"path"=$packOutput}} - $providerDataArray.Add($iisAppSourceKeyValue) | Out-Null - - [System.IO.FileInfo]$sourceXMLFile = GenerateInternal-ManifestFile -packOutput $packOutput -publishProperties $publishProperties -providerDataArray $providerDataArray -manifestFileName 'SourceManifest.xml' - - $publishArgs = @() - $publishArgs += ('-source:manifest=''{0}''' -f $sourceXMLFile.FullName) - $publishArgs += ('-dest:package=''{0}''' -f $packageDestinationFilepath) - $publishArgs += '-verb:sync' - $packageContentFolder = $publishProperties['MSDeployPackageContentFoldername'] - if(!$packageContentFolder){ $packageContentFolder = 'website' } - $publishArgs += ('-replace:match=''{0}'',replace=''{1}''' -f (Escape-TextForRegularExpressions $packOutput), $packageContentFolder ) - $publishArgs += $sharedArgs.ExtraArgs - - $command = '"{0}" {1}' -f (Get-MSDeploy),($publishArgs -join ' ') - $command | Print-CommandString - Execute-Command -exePath (Get-MSDeploy) -arguments ($publishArgs -join ' ') - } - else{ - throw 'publishProperties is empty, cannot publish' - } - } -} - -function Publish-AspNetFileSystem{ - param( - [Parameter(Mandatory = $true,Position=0,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)] - $publishProperties, - [Parameter(Mandatory = $true,Position=1,ValueFromPipelineByPropertyName=$true)] - $packOutput - ) - process{ - $pubOut = $publishProperties['publishUrl'] - - if([string]::IsNullOrWhiteSpace($pubOut)){ - throw ('publishUrl is a required property for FileSystem publish but it was empty.') - } - - # if it's a relative path then update it to a full path - if(!([System.IO.Path]::IsPathRooted($pubOut))){ - $pubOut = [System.IO.Path]::GetFullPath((Join-Path $pwd $pubOut)) - $publishProperties['publishUrl'] = "$pubOut" - } - - 'Publishing files to {0}' -f $pubOut | Write-Output - - # we use msdeploy.exe because it supports incremental publish/skips/replacements/etc - # msdeploy.exe -verb:sync -source:manifest='C:\Users\testuser\AppData\Local\Temp\PublishTemp\obj\SourceManifest.xml' -dest:manifest='C:\Users\testuser\AppData\Local\Temp\PublishTemp\obj\DestManifest.xml' - - $sharedArgs = GetInternal-SharedMSDeployParametersFrom -publishProperties $publishProperties -packOutput $packOutput - - # create source manifest - - # e.g - # - # - # - # - - [System.Collections.ArrayList]$providerDataArray = @() - $contentPathValues = @{"path"=$packOutput}; - $contentPathSourceKeyValue=@{"contentPath" = $contentPathValues} - $providerDataArray.Add($contentPathSourceKeyValue) | Out-Null - - [System.IO.FileInfo]$sourceXMLFile = GenerateInternal-ManifestFile -packOutput $packOutput -publishProperties $publishProperties -providerDataArray $providerDataArray -manifestFileName 'SourceManifest.xml' - - $providerDataArray.Clear() | Out-Null - # create destination manifest - - # e.g - # - # - # - $contentPathValues = @{"path"=$publishProperties['publishUrl']}; - if(-not [string]::IsNullOrWhiteSpace($publishProperties['AppOfflineTemplate'])){ - $contentPathValues.Add("appOfflineTemplate", $publishProperties['AppOfflineTemplate']) | Out-Null - } - $contentPathDestinationKeyValue=@{"contentPath" = $contentPathValues} - $providerDataArray.Add($contentPathDestinationKeyValue) | Out-Null - - [System.IO.FileInfo]$destXMLFile = GenerateInternal-ManifestFile -packOutput $packOutput -publishProperties $publishProperties -providerDataArray $providerDataArray -manifestFileName 'DestinationManifest.xml' - - $publishArgs = @() - $publishArgs += ('-source:manifest=''{0}''' -f $sourceXMLFile.FullName) - $publishArgs += ('-dest:manifest=''{0}''{1}' -f $destXMLFile.FullName, $sharedArgs.DestFragment) - $publishArgs += '-verb:sync' - $publishArgs += $sharedArgs.ExtraArgs - - $command = '"{0}" {1}' -f (Get-MSDeploy),($publishArgs -join ' ') - $command | Print-CommandString - Execute-Command -exePath (Get-MSDeploy) -arguments ($publishArgs -join ' ') - - # copy sql script to script folder - if (($sharedArgs.EFMigrationData['EFSqlFiles'] -ne $null) -and ($sharedArgs.EFMigrationData['EFSqlFiles'].Count -gt 0)) { - $scriptsDir = Join-Path $pubOut 'efscripts' - - if (!(Test-Path -Path $scriptsDir)) { - New-Item -Path $scriptsDir -type directory | Out-Null - } - - foreach ($sqlFile in $sharedArgs.EFMigrationData['EFSqlFiles'].Values) { - Copy-Item $sqlFile -Destination $scriptsDir -Force -Recurse | Out-Null - } - } - } -} - -<# -.SYNOPSIS - This can be used to read a publish profile to extract the property values into a hashtable. - -.PARAMETER filepath - Path to the publish profile to get the properties from. Currenlty this only supports reading - .pubxml files. - -.EXAMPLE - Get-PropertiesFromPublishProfile -filepath c:\projects\publish\devpublish.pubxml -#> -function Get-PropertiesFromPublishProfile{ - [cmdletbinding()] - param( - [Parameter(Position=0,Mandatory=$true)] - [ValidateNotNull()] - [ValidateScript({Test-Path $_})] - [System.IO.FileInfo]$filepath - ) - begin{ - Add-Type -AssemblyName System.Core - Add-Type -AssemblyName Microsoft.Build - } - process{ - 'Reading publish properties from profile [{0}]' -f $filepath | Write-Verbose - # use MSBuild to get the project and read properties - $projectCollection = (New-Object Microsoft.Build.Evaluation.ProjectCollection) - if(!([System.IO.Path]::IsPathRooted($filepath))){ - $filepath = [System.IO.Path]::GetFullPath((Join-Path $pwd $filepath)) - } - $project = ([Microsoft.Build.Construction.ProjectRootElement]::Open([string]$filepath.Fullname, $projectCollection)) - - $properties = @{} - foreach($property in $project.Properties){ - $properties[$property.Name]=$property.Value - } - - $properties - } -} - -function Print-CommandString{ - [cmdletbinding()] - param( - [Parameter(Mandatory=$true,Position=0,ValueFromPipeline=$true)] - $command - ) - process{ - 'Executing command [{0}]' -f $command | Write-Output - } -} - -function Execute-CommandString{ - [cmdletbinding()] - param( - [Parameter(Mandatory=$true,Position=0,ValueFromPipeline=$true)] - [string[]]$command, - - [switch] - $useInvokeExpression, - - [switch] - $ignoreErrors - ) - process{ - foreach($cmdToExec in $command){ - 'Executing command [{0}]' -f $cmdToExec | Write-Verbose - if($useInvokeExpression){ - try { - Invoke-Expression -Command $cmdToExec - } - catch { - if(-not $ignoreErrors){ - $msg = ('The command [{0}] exited with exception [{1}]' -f $cmdToExec, $_.ToString()) - throw $msg - } - } - } - else { - cmd.exe /D /C $cmdToExec - - if(-not $ignoreErrors -and ($LASTEXITCODE -ne 0)){ - $msg = ('The command [{0}] exited with code [{1}]' -f $cmdToExec, $LASTEXITCODE) - throw $msg - } - } - } - } -} - -function Execute-Command { - [cmdletbinding()] - param( - [Parameter(Mandatory = $true,Position=0,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)] - [String]$exePath, - [Parameter(Mandatory = $true,Position=1,ValueFromPipelineByPropertyName=$true)] - [String]$arguments, - [Parameter(Position=2)] - [System.IO.FileInfo]$workingDirectory - ) - process{ - $psi = New-Object -TypeName System.Diagnostics.ProcessStartInfo - $psi.CreateNoWindow = $true - $psi.UseShellExecute = $false - $psi.RedirectStandardOutput = $true - $psi.RedirectStandardError=$true - $psi.FileName = $exePath - $psi.Arguments = $arguments - if($workingDirectory -and (Test-Path -Path $workingDirectory)) { - $psi.WorkingDirectory = $workingDirectory - } - - $process = New-Object -TypeName System.Diagnostics.Process - $process.StartInfo = $psi - $process.EnableRaisingEvents=$true - - # Register the event handler for error - $stdErrEvent = Register-ObjectEvent -InputObject $process -EventName 'ErrorDataReceived' -Action { - if (! [String]::IsNullOrEmpty($EventArgs.Data)) { - $EventArgs.Data | Write-Error - } - } - - # Starting process. - $process.Start() | Out-Null - $process.BeginErrorReadLine() | Out-Null - $output = $process.StandardOutput.ReadToEnd() - $process.WaitForExit() | Out-Null - $output | Write-Output - - # UnRegister the event handler for error - Unregister-Event -SourceIdentifier $stdErrEvent.Name | Out-Null - } -} - - -function GetInternal-DotNetExePath { - process { - $dotnetinstallpath = $env:dotnetinstallpath - if (!$dotnetinstallpath) { - $DotNetRegItem = Get-ItemProperty -Path 'hklm:\software\dotnet\setup\' - if ($env:DOTNET_HOME) { - $dotnetinstallpath = Join-Path $env:DOTNET_HOME -ChildPath 'dotnet.exe' - } - elseif ($DotNetRegItem -and $DotNetRegItem.InstallDir){ - $dotnetinstallpath = Join-Path $DotNetRegItem.InstallDir -ChildPath 'dotnet.exe' - } - } - if (!(Test-Path $dotnetinstallpath)) { - throw 'Unable to find dotnet.exe, please install it and try again' - } - # return - [System.IO.FileInfo]$dotnetinstallpath - } -} - -function Get-MSDeploy{ - [cmdletbinding()] - param() - process{ - $installPath = $env:msdeployinstallpath - - if(!$installPath){ - $keysToCheck = @('hklm:\SOFTWARE\Microsoft\IIS Extensions\MSDeploy\3','hklm:\SOFTWARE\Microsoft\IIS Extensions\MSDeploy\2','hklm:\SOFTWARE\Microsoft\IIS Extensions\MSDeploy\1') - - foreach($keyToCheck in $keysToCheck){ - if(Test-Path $keyToCheck){ - $installPath = (Get-itemproperty $keyToCheck -Name InstallPath -ErrorAction SilentlyContinue | select -ExpandProperty InstallPath -ErrorAction SilentlyContinue) - } - - if($installPath){ - break; - } - } - } - - if(!$installPath){ - throw "Unable to find msdeploy.exe, please install it and try again" - } - - [string]$msdInstallLoc = (join-path $installPath 'msdeploy.exe') - - "Found msdeploy.exe at [{0}]" -f $msdInstallLoc | Write-Verbose - - $msdInstallLoc - } -} - -function InternalNormalize-MSDeployUrl{ - [cmdletbinding()] - param( - [Parameter(Position=0,Mandatory=$true)] - [string]$serviceUrl, - - [string] $siteName, - - [ValidateSet('WMSVC','RemoteAgent','InProc')] - [string]$serviceMethod = 'WMSVC' - ) - process{ - $tempUrl = $serviceUrl - $resultUrl = $serviceUrl - - $httpsStr = 'https://' - $httpStr = 'http://' - $msdeployAxd = 'msdeploy.axd' - - if(-not [string]::IsNullOrWhiteSpace($serviceUrl)){ - if([string]::Compare($serviceMethod,'WMSVC',[StringComparison]::OrdinalIgnoreCase) -eq 0){ - # if no http or https then add one - if(-not ($serviceUrl.StartsWith($httpStr,[StringComparison]::OrdinalIgnoreCase) -or - $serviceUrl.StartsWith($httpsStr,[StringComparison]::OrdinalIgnoreCase)) ){ - - $serviceUrl = [string]::Concat($httpsStr,$serviceUrl.TrimStart()) - } - [System.Uri]$serviceUri = New-Object -TypeName 'System.Uri' $serviceUrl - [System.UriBuilder]$serviceUriBuilder = New-Object -TypeName 'System.UriBuilder' $serviceUrl - - # if it's https and the port was not passed in override it to 8172 - if( ([string]::Compare('https',$serviceUriBuilder.Scheme,[StringComparison]::OrdinalIgnoreCase) -eq 0) -and - -not $serviceUrl.Contains((':{0}' -f $serviceUriBuilder.Port)) ) { - $serviceUriBuilder.Port = 8172 - } - - # if no path then add one - if([string]::Compare('/',$serviceUriBuilder.Path,[StringComparison]::OrdinalIgnoreCase) -eq 0){ - $serviceUriBuilder.Path = $msdeployAxd - } - - if ([string]::IsNullOrEmpty($serviceUriBuilder.Query) -and -not([string]::IsNullOrEmpty($siteName))) - { - $serviceUriBuilder.Query = "site=" + $siteName; - } - - $resultUrl = $serviceUriBuilder.Uri.AbsoluteUri - } - elseif([string]::Compare($serviceMethod,'RemoteAgent',[StringComparison]::OrdinalIgnoreCase) -eq 0){ - [System.UriBuilder]$serviceUriBuilder = New-Object -TypeName 'System.UriBuilder' $serviceUrl - # http://{computername}/MSDEPLOYAGENTSERVICE - # remote agent must use http - $serviceUriBuilder.Scheme = 'http' - $serviceUriBuilder.Path = '/MSDEPLOYAGENTSERVICE' - - $resultUrl = $serviceUriBuilder.Uri.AbsoluteUri - } - else{ - # see if it's for localhost - [System.Uri]$serviceUri = New-Object -TypeName 'System.Uri' $serviceUrl - $resultUrl = $serviceUri.AbsoluteUri - } - } - - # return the result to the caller - $resultUrl - } -} - -function InternalRegister-AspNetKnownPublishHandlers{ - [cmdletbinding()] - param() - process{ - 'Registering MSDeploy handler' | Write-Verbose - Register-AspnetPublishHandler -name 'MSDeploy' -force -handler { - [cmdletbinding()] - param( - [Parameter(Mandatory = $true,Position=0,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)] - $publishProperties, - [Parameter(Mandatory = $true,Position=1,ValueFromPipelineByPropertyName=$true)] - $packOutput - ) - - Publish-AspNetMSDeploy -publishProperties $publishProperties -packOutput $packOutput - } - - 'Registering MSDeploy package handler' | Write-Verbose - Register-AspnetPublishHandler -name 'Package' -force -handler { - [cmdletbinding()] - param( - [Parameter(Mandatory = $true,Position=0,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)] - $publishProperties, - [Parameter(Mandatory = $true,Position=1,ValueFromPipelineByPropertyName=$true)] - $packOutput - ) - - Publish-AspNetMSDeployPackage -publishProperties $publishProperties -packOutput $packOutput - } - - 'Registering FileSystem handler' | Write-Verbose - Register-AspnetPublishHandler -name 'FileSystem' -force -handler { - [cmdletbinding()] - param( - [Parameter(Mandatory = $true,Position=0,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)] - $publishProperties, - [Parameter(Mandatory = $true,Position=1,ValueFromPipelineByPropertyName=$true)] - $packOutput - ) - - Publish-AspNetFileSystem -publishProperties $publishProperties -packOutput $packOutput - } - } -} - -<# -.SYNOPSIS - Used for testing purposes only. -#> -function InternalReset-AspNetPublishHandlers{ - [cmdletbinding()] - param() - process{ - $script:AspNetPublishHandlers = @{} - InternalRegister-AspNetKnownPublishHandlers - } -} - -Export-ModuleMember -function Get-*,Publish-*,Register-*,Enable-* -if($env:IsDeveloperMachine){ - # you can set the env var to expose all functions to importer. easy for development. - # this is required for executing pester test cases, it's set by build.ps1 - Export-ModuleMember -function * -} - -# register the handlers so that Publish-AspNet can be called -InternalRegister-AspNetKnownPublishHandlers - diff --git a/src/DotNetBlog.Web/Properties/PublishProfiles/release-publish.ps1 b/src/DotNetBlog.Web/Properties/PublishProfiles/release-publish.ps1 deleted file mode 100644 index e9dd5e3..0000000 --- a/src/DotNetBlog.Web/Properties/PublishProfiles/release-publish.ps1 +++ /dev/null @@ -1,19 +0,0 @@ -[cmdletbinding(SupportsShouldProcess=$true)] -param($publishProperties=@{}, $packOutput, $pubProfilePath) - -# to learn more about this file visit https://go.microsoft.com/fwlink/?LinkId=524327 - -try{ - if ($publishProperties['ProjectGuid'] -eq $null){ - $publishProperties['ProjectGuid'] = '89f9b8c8-2f34-41cf-b39e-c23935afadc8' - } - - $publishModulePath = Join-Path (Split-Path $MyInvocation.MyCommand.Path) 'publish-module.psm1' - Import-Module $publishModulePath -DisableNameChecking -Force - - # call Publish-AspNet to perform the publish operation - Publish-AspNet -publishProperties $publishProperties -packOutput $packOutput -pubProfilePath $pubProfilePath -} -catch{ - "An error occurred during publish.`n{0}" -f $_.Exception.Message | Write-Error -} \ No newline at end of file diff --git a/src/DotNetBlog.Web/Properties/PublishProfiles/release.pubxml b/src/DotNetBlog.Web/Properties/PublishProfiles/release.pubxml deleted file mode 100644 index af7d949..0000000 --- a/src/DotNetBlog.Web/Properties/PublishProfiles/release.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - FileSystem - Release - Any CPU - - True - False - netcoreapp1.0 - True - .\bin\Release\PublishOutput - True - - \ No newline at end of file diff --git a/src/DotNetBlog.Web/Properties/launchSettings.json b/src/DotNetBlog.Web/Properties/launchSettings.json deleted file mode 100644 index a2eae21..0000000 --- a/src/DotNetBlog.Web/Properties/launchSettings.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:10142/", - "sslPort": 0 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "DotNetBlog.Web": { - "commandName": "Project", - "launchBrowser": true, - "launchUrl": "http://localhost:10142", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} \ No newline at end of file diff --git a/src/DotNetBlog.Web/Resources/Views/Home/Components/MonthStatisticsWidget/Default.en-GB.resx b/src/DotNetBlog.Web/Resources/Views/Home/Components/MonthStatisticsWidget/Default.en-GB.resx index d510f9f..4ec67c0 100644 --- a/src/DotNetBlog.Web/Resources/Views/Home/Components/MonthStatisticsWidget/Default.en-GB.resx +++ b/src/DotNetBlog.Web/Resources/Views/Home/Components/MonthStatisticsWidget/Default.en-GB.resx @@ -118,6 +118,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - MM + {0:MMMM} \ No newline at end of file diff --git a/src/DotNetBlog.Web/Resources/Views/Home/Components/MonthStatisticsWidget/Default.zh-CN.resx b/src/DotNetBlog.Web/Resources/Views/Home/Components/MonthStatisticsWidget/Default.zh-CN.resx index c655e3c..011dc4a 100644 --- a/src/DotNetBlog.Web/Resources/Views/Home/Components/MonthStatisticsWidget/Default.zh-CN.resx +++ b/src/DotNetBlog.Web/Resources/Views/Home/Components/MonthStatisticsWidget/Default.zh-CN.resx @@ -118,6 +118,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - MM月 + {0:MM} 月 \ No newline at end of file diff --git a/src/DotNetBlog.Web/Startup.cs b/src/DotNetBlog.Web/Startup.cs index 5fcc8bc..ae42228 100644 --- a/src/DotNetBlog.Web/Startup.cs +++ b/src/DotNetBlog.Web/Startup.cs @@ -1,24 +1,26 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; +using DotNetBlog.Core; +using DotNetBlog.Core.Data; +using DotNetBlog.Web.Middlewares; +using DotNetBlog.Web.ViewEngines; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Localization; +using Microsoft.AspNetCore.Mvc.Razor; +using Microsoft.AspNetCore.SpaServices.ReactDevelopmentServer; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; -using DotNetBlog.Core; -using Microsoft.AspNetCore.Mvc.Formatters; -using Microsoft.Extensions.Logging; -using NLog.Extensions.Logging; -using DotNetBlog.Web.Middlewares; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; -using System.IO; -using System.Globalization; -using Microsoft.AspNetCore.Localization; -using Microsoft.AspNetCore.Mvc.Razor; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Threading.Tasks; namespace DotNetBlog.Web { @@ -33,8 +35,6 @@ public Startup() .Build(); } - // This method gets called by the runtime. Use this method to add services to the container. - // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; }); @@ -65,14 +65,12 @@ public void ConfigureServices(IServiceCollection services) opt.UseSqlServer(this.Configuration["connectionString"], builder => { builder.MigrationsAssembly("DotNetBlog.Web"); - builder.UseRowNumberForPaging(); }); }); } services.AddBlogService(); - - AutoMapperConfig.Configure(); + services.AddAutoMapper(); services.Configure( opts => @@ -90,9 +88,6 @@ public void ConfigureServices(IServiceCollection services) opts.SupportedUICultures = supportedCultures; //Uncomment for change language by user - //opts.RequestCultureProviders.Add(new CookieRequestCultureProvider()); - //opts.RequestCultureProviders.Add(new AcceptLanguageHeaderRequestCultureProvider()); - //opts.RequestCultureProviders.Add(new QueryStringRequestCultureProvider() { QueryStringKey = "lang", UIQueryStringKey = "ui-lang" }); opts.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context => { var settingService = context.RequestServices.GetService(); @@ -105,21 +100,33 @@ public void ConfigureServices(IServiceCollection services) { options.ViewLocationExpanders.Add(new ViewEngines.ThemeViewEngine()); }); + + services.AddSpaStaticFiles(configuration => + { + configuration.RootPath = "ClientApp/build"; + }); + + services.AddSingleton(); + } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IHostingEnvironment enviroment, ILoggerFactory loggerFactory) + public void Configure(IApplicationBuilder app, + IWebHostEnvironment env, + ILoggerFactory loggerFactory, + BlogContext blogContext) { - string uploadFolder = enviroment.ContentRootPath + "/App_Data/upload"; + var uploadFolder = env.ContentRootPath + "/App_Data/upload"; Directory.CreateDirectory(uploadFolder); - if (enviroment.IsDevelopment()) + + if (env.IsDevelopment()) { - string databaseFolder = enviroment.ContentRootPath + "/bin/Debug/netcoreapp2.0/App_Data"; - Directory.CreateDirectory(databaseFolder); + app.UseDeveloperExceptionPage(); + } + else + { + app.UseExceptionHandler("/Home/Error"); } - - var options = app.ApplicationServices.GetService>(); - app.UseRequestLocalization(options.Value); /* Path for static files */ app.UseStaticFiles(); @@ -129,26 +136,32 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment enviroment, I FileProvider = new PhysicalFileProvider(uploadFolder) }); - /* Error page manager */ - if (enviroment.IsDevelopment()) - { - loggerFactory.AddConsole(); - app.UseDeveloperExceptionPage(); - } - else - { - app.UseExceptionHandler("/exception/500"); - app.UseStatusCodePagesWithReExecute("/exception/{0}"); - } + var options = app.ApplicationServices.GetService>(); + app.UseRequestLocalization(options.Value); + app.UseRouting(); app.UseClientManager(); - app.UseMvc(); + blogContext.Database.EnsureCreated(); + blogContext.Database.Migrate(); - loggerFactory.AddNLog(); - loggerFactory.ConfigureNLog("NLog.config"); + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute( + name: "default", + pattern: "{controller=Home}/{action=Index}/{id?}"); + endpoints.MapRazorPages(); + }); + + app.UseSpa(spa => + { + spa.Options.SourcePath = "../DotNetBlog.Admin"; - app.ApplicationServices.GetService().Database.EnsureCreated(); + if (env.IsDevelopment()) + { + spa.UseReactDevelopmentServer(npmScript: "start"); + } + }); } } } diff --git a/src/DotNetBlog.Web/TagHelpers/BlogTitleTagHelper.cs b/src/DotNetBlog.Web/TagHelpers/BlogTitleTagHelper.cs index 3f68771..d52b0e5 100644 --- a/src/DotNetBlog.Web/TagHelpers/BlogTitleTagHelper.cs +++ b/src/DotNetBlog.Web/TagHelpers/BlogTitleTagHelper.cs @@ -1,11 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.TagHelpers; -using Microsoft.AspNetCore.Mvc.ViewFeatures; +using DotNetBlog.Core.Model.Setting; using Microsoft.AspNetCore.Mvc.Rendering; -using DotNetBlog.Core.Model.Setting; +using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.AspNetCore.Razor.TagHelpers; namespace DotNetBlog.Web.TagHelpers { diff --git a/src/DotNetBlog.Web/TagHelpers/MarkdownTagHelper.cs b/src/DotNetBlog.Web/TagHelpers/MarkdownTagHelper.cs index 4c922bc..7f91046 100644 --- a/src/DotNetBlog.Web/TagHelpers/MarkdownTagHelper.cs +++ b/src/DotNetBlog.Web/TagHelpers/MarkdownTagHelper.cs @@ -1,12 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using Microsoft.AspNetCore.Razor.TagHelpers; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.Runtime.TagHelpers; -using Microsoft.AspNetCore.Razor.TagHelpers; -using CommonMark; -using Microsoft.AspNetCore.Mvc.Rendering; -using Microsoft.AspNetCore.Mvc.ViewFeatures; namespace DotNetBlog.Web.TagHelpers { @@ -32,7 +25,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu output.TagName = ""; - string html = CommonMarkConverter.Convert(content); + string html = content.FromMarkdown(); output.Content.SetHtmlContent(html); } diff --git a/src/DotNetBlog.Web/TagHelpers/PageLinkTagHelper.cs b/src/DotNetBlog.Web/TagHelpers/PageLinkTagHelper.cs index 8950141..64dc4c7 100644 --- a/src/DotNetBlog.Web/TagHelpers/PageLinkTagHelper.cs +++ b/src/DotNetBlog.Web/TagHelpers/PageLinkTagHelper.cs @@ -1,13 +1,9 @@ using DotNetBlog.Core.Model.Page; +using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.Routing; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; namespace DotNetBlog.Web.TagHelpers { diff --git a/src/DotNetBlog.Web/TagHelpers/PagerTagHelper.cs b/src/DotNetBlog.Web/TagHelpers/PagerTagHelper.cs index 454dc76..66d4f64 100644 --- a/src/DotNetBlog.Web/TagHelpers/PagerTagHelper.cs +++ b/src/DotNetBlog.Web/TagHelpers/PagerTagHelper.cs @@ -1,14 +1,12 @@ -using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Localization; +using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.Routing; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; using System; using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.Localization; namespace DotNetBlog.Web.TagHelpers { @@ -176,7 +174,7 @@ private string GetPageLink(int page, string text) return $"{text}"; } - private IHtmlLocalizer GetViewLocalizer() + private IHtmlLocalizer GetViewLocalizer() { /* In this way we can connect localization to loaded view */ diff --git a/src/DotNetBlog.Web/TagHelpers/ThemeUrlResolutionTagHelper.cs b/src/DotNetBlog.Web/TagHelpers/ThemeUrlResolutionTagHelper.cs index 012d4c5..dd7eacc 100644 --- a/src/DotNetBlog.Web/TagHelpers/ThemeUrlResolutionTagHelper.cs +++ b/src/DotNetBlog.Web/TagHelpers/ThemeUrlResolutionTagHelper.cs @@ -8,9 +8,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.IO; -using System.Linq; using System.Text.Encodings.Web; -using System.Threading.Tasks; namespace DotNetBlog.Web.TagHelpers { diff --git a/src/DotNetBlog.Web/TagHelpers/TopicLinkTagHelper.cs b/src/DotNetBlog.Web/TagHelpers/TopicLinkTagHelper.cs index 03ce933..001f6bf 100644 --- a/src/DotNetBlog.Web/TagHelpers/TopicLinkTagHelper.cs +++ b/src/DotNetBlog.Web/TagHelpers/TopicLinkTagHelper.cs @@ -3,12 +3,7 @@ using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.Routing; using Microsoft.AspNetCore.Mvc.ViewFeatures; -using Microsoft.AspNetCore.Mvc.TagHelpers; using Microsoft.AspNetCore.Razor.TagHelpers; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; namespace DotNetBlog.Web.TagHelpers { @@ -55,7 +50,7 @@ public override void Process(TagHelperContext context, TagHelperOutput output) } else { - url = urlHelper.Action("Topic", "Home", new { id = this.Topic.ID }); + url = urlHelper.Action("Topic", "Home", new { id = this.Topic.ID }); } if (!string.IsNullOrWhiteSpace(this.Fragment)) diff --git a/src/DotNetBlog.Web/TagHelpers/VisibleTagHelper.cs b/src/DotNetBlog.Web/TagHelpers/VisibleTagHelper.cs index c6c7522..090edc9 100644 --- a/src/DotNetBlog.Web/TagHelpers/VisibleTagHelper.cs +++ b/src/DotNetBlog.Web/TagHelpers/VisibleTagHelper.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.Runtime.TagHelpers; -using Microsoft.AspNetCore.Razor.TagHelpers; +using Microsoft.AspNetCore.Razor.TagHelpers; namespace DotNetBlog.Web.TagHelpers { @@ -20,7 +15,7 @@ public override void Process(TagHelperContext context, TagHelperOutput output) if (output.TagName == "visible") { output.TagName = ""; - } + } if (!this.Condition) { diff --git a/src/DotNetBlog.Web/Themes/default/Home/Components/MonthStatisticsWidget/Default.cshtml b/src/DotNetBlog.Web/Themes/default/Home/Components/MonthStatisticsWidget/Default.cshtml index 63fa393..83242ae 100644 --- a/src/DotNetBlog.Web/Themes/default/Home/Components/MonthStatisticsWidget/Default.cshtml +++ b/src/DotNetBlog.Web/Themes/default/Home/Components/MonthStatisticsWidget/Default.cshtml @@ -13,12 +13,12 @@ @foreach (var year in groupList) { - + @year.Key @foreach (var month in year) { - @L["MM", month.Month] (@month.Topics.Published) + @string.Format(L["MM"].Value, month.Month) (@month.Topics.Published) } diff --git a/src/DotNetBlog.Web/Themes/default/Home/Components/PageWidget/Default.cshtml b/src/DotNetBlog.Web/Themes/default/Home/Components/PageWidget/Default.cshtml index 7dade8c..981173b 100644 --- a/src/DotNetBlog.Web/Themes/default/Home/Components/PageWidget/Default.cshtml +++ b/src/DotNetBlog.Web/Themes/default/Home/Components/PageWidget/Default.cshtml @@ -10,7 +10,7 @@ @foreach (var page in Model) { - @page.Title + @(page.Title) } diff --git a/src/DotNetBlog.Web/Themes/default/Home/_Layout.cshtml b/src/DotNetBlog.Web/Themes/default/Home/_Layout.cshtml index c3a6eba..6d3696a 100644 --- a/src/DotNetBlog.Web/Themes/default/Home/_Layout.cshtml +++ b/src/DotNetBlog.Web/Themes/default/Home/_Layout.cshtml @@ -71,7 +71,7 @@ - Copyright © 2016 @settingModel.Title - Powered by BlogEngine.NET 3.3.0.1 - Design by FS + Copyright © 2016 @settingModel.Title - Powered by DotNetBlog 1.3.0 - Design by FS
Copyright © 2016 @settingModel.Title - Powered by BlogEngine.NET 3.3.0.1 - Design by FS
Copyright © 2016 @settingModel.Title - Powered by DotNetBlog 1.3.0 - Design by FS