diff --git a/.github/workflows/english-file-transfer.yml b/.github/workflows/english-file-transfer.yml new file mode 100644 index 000000000..94c673012 --- /dev/null +++ b/.github/workflows/english-file-transfer.yml @@ -0,0 +1,31 @@ +name: English File transfer + +on: + push: + branches: + - dev + paths: + - 'src/messages/GE.json' + +jobs: + copy-file: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Set current date as env variable + run: echo "today=$(date +%Y%m%d%H%M)" >> $GITHUB_ENV + + - name: Pushes English file + uses: dmnemec/copy_file_to_another_repo_action@main + env: + API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }} + with: + source_file: 'src/messages/GE.json' + destination_repo: 'microsoftgraph/microsoft-graph-devx-content' + destination_folder: 'messages' + destination_branch: 'dev' + user_email: ${{ secrets.ACTION_EMAIL }} + user_name: ${{ secrets.ACTION_USERNAME }} + commit_message: ${{ env.today }} English file transfer diff --git a/.vscode/settings.json b/.vscode/settings.json index cd8db0543..58979303d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,21 +1,18 @@ { - "search.exclude": { - "**/node_modules": true, - "**/all.min.js": true - }, - "files.exclude": { - "**/node_modules": true, - "**/.github": true, - }, - "files.trimTrailingWhitespace": true, - "editor.codeActionsOnSave": { - "source.fixAll.tslint": true - }, - "editor.formatOnSave": true, - "editor.formatOnPaste": true, - "typescript.updateImportsOnFileMove.enabled": "always", - "eslint.validate": [ - "typescript", - "typescriptreact" - ], -} \ No newline at end of file + "search.exclude": { + "**/node_modules": true, + "**/all.min.js": true + }, + "files.exclude": { + "**/node_modules": true, + "**/.github": true + }, + "files.trimTrailingWhitespace": true, + "editor.codeActionsOnSave": { + "source.fixAll.tslint": true + }, + "editor.formatOnSave": true, + "editor.formatOnPaste": true, + "typescript.updateImportsOnFileMove.enabled": "always", + "eslint.validate": ["typescript", "typescriptreact"] +} diff --git a/package-lock.json b/package-lock.json index 5a2b6a59c..c98c1d3f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,17 @@ { "name": "graph-explorer-v2", - "version": "4.12.0", + "version": "4.13.0", "lockfileVersion": 1, "requires": true, "dependencies": { + "@axe-core/webdriverjs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@axe-core/webdriverjs/-/webdriverjs-4.2.2.tgz", + "integrity": "sha512-h3VrFXAHAIinoHQU/u9bmLUET/gAfab3y7VpUt6HOHe4NKsk9wi+6zoM3L8yCZSWriItmK3nuVrn6byeC+/Pcw==", + "requires": { + "axe-core": "^4.2.3" + } + }, "@azure/msal-browser": { "version": "2.12.0", "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.12.0.tgz", @@ -1686,44 +1694,254 @@ "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" }, "@fluentui/date-time-utilities": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-7.1.0.tgz", - "integrity": "sha512-JvyeEEULbmzutTyZ0HCasEHNB37IKUVV1Ft6stXpi5ffgNxUU+R5FP6qPfyp7bPPYS2GEnIHQlXKj/DN9mw6TQ==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-8.2.2.tgz", + "integrity": "sha512-djHrX/38ty+F93qLQjzmRzPzK598CW9g/RPhQH6GyrFBLPSWM1swYKB5TP6E7FrIf+fT4pVqrNUSYZhgi2rrOQ==", + "requires": { + "@fluentui/set-version": "^8.1.4", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } + }, + "@fluentui/dom-utilities": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@fluentui/dom-utilities/-/dom-utilities-2.1.4.tgz", + "integrity": "sha512-+gsAnEjgoKB37o+tsMdSLtgqZ9z2PzpvnHx/2IqhRWjQQd7Xc7MbQsbZaQ5qfkioFHLnWGc/+WORpqKPy/sWrg==", + "requires": { + "@fluentui/set-version": "^8.1.4", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } + }, + "@fluentui/font-icons-mdl2": { + "version": "8.1.8", + "resolved": "https://registry.npmjs.org/@fluentui/font-icons-mdl2/-/font-icons-mdl2-8.1.8.tgz", + "integrity": "sha512-kZkCHM/mP8WWLLExz3x3wK5yQHPP4tAcvlHVqe69TbG8+3fxRGJSMOxzZO/04CFQp2A7/wOskSRtqeIBtaXJfw==", + "requires": { + "@fluentui/set-version": "^8.1.4", + "@fluentui/style-utilities": "^8.2.2", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } + }, + "@fluentui/foundation-legacy": { + "version": "8.1.8", + "resolved": "https://registry.npmjs.org/@fluentui/foundation-legacy/-/foundation-legacy-8.1.8.tgz", + "integrity": "sha512-m0zbRbZaJbzBjv8Ziv3zpwoGFjuzzPIAmhsn58g66MZvQBd9vN92hFJBNG2bO2+ivlprns4WnLEAiPK8CjoAsA==", "requires": { - "@uifabric/set-version": "^7.0.13", - "tslib": "^1.10.0" + "@fluentui/merge-styles": "^8.1.4", + "@fluentui/set-version": "^8.1.4", + "@fluentui/style-utilities": "^8.2.2", + "@fluentui/utilities": "^8.2.2", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } } }, "@fluentui/keyboard-key": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@fluentui/keyboard-key/-/keyboard-key-0.2.1.tgz", - "integrity": "sha512-s2CYcspWWdqzwXNOvkNURifuRRiZun/5CQ3gcvRw9+S9/ONvPtedRkppNeTyj2wbW6Ctzf218bu2eJqu0aVK/Q==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@fluentui/keyboard-key/-/keyboard-key-0.3.4.tgz", + "integrity": "sha512-pVY2m3IC5+LLmMzsaPApX9eKTzpOzdgQwrR3FNTE6mGx3N/+QWYM7fdF+T1ldZQt87dCRSeQnmAo5kqjtxeA/w==", + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } + }, + "@fluentui/merge-styles": { + "version": "8.1.4", + "resolved": "https://registry.npmjs.org/@fluentui/merge-styles/-/merge-styles-8.1.4.tgz", + "integrity": "sha512-zCAEjZyALk0CGW1H9YNJU+e/MW0P5sFJfrDvac27K4S/dIQvKnOwMUNOWRkNz3yUEt0R9vo0NtiO3cW04cZq3A==", + "requires": { + "@fluentui/set-version": "^8.1.4", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } + }, + "@fluentui/react": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@fluentui/react/-/react-8.28.0.tgz", + "integrity": "sha512-ItVqh8KlZPwU/IfNqkXKwHZ1OCZvKBZ0mhe655Hb8ztuapCEsq7UiALDHsRNQic9yYVWiRf6fR6CTvJJ1nbZYg==", "requires": { - "tslib": "^1.10.0" + "@fluentui/date-time-utilities": "^8.2.2", + "@fluentui/font-icons-mdl2": "^8.1.8", + "@fluentui/foundation-legacy": "^8.1.8", + "@fluentui/merge-styles": "^8.1.4", + "@fluentui/react-focus": "^8.1.10", + "@fluentui/react-hooks": "^8.2.6", + "@fluentui/react-window-provider": "^2.1.4", + "@fluentui/set-version": "^8.1.4", + "@fluentui/style-utilities": "^8.2.2", + "@fluentui/theme": "^2.2.1", + "@fluentui/utilities": "^8.2.2", + "@microsoft/load-themed-styles": "^1.10.26", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } } }, "@fluentui/react-focus": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-7.12.10.tgz", - "integrity": "sha512-Zoj5gYLYxaT9V1fsZVNixRuOw79/xOPZmKB4iK5L/8KV+V0hwJCA0H1G48gqf/UBAz2Euh5EKljfdJbOTnfhtw==", + "version": "8.1.10", + "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-8.1.10.tgz", + "integrity": "sha512-sojXA6epu2QJbFf+XqP1AHOrrWssoQJWJNuzp0MCzQOWCUlLLqRpRUHtUKZzCnrbD9G5MOW8/192m/rSPyM7eA==", + "requires": { + "@fluentui/keyboard-key": "^0.3.4", + "@fluentui/merge-styles": "^8.1.4", + "@fluentui/set-version": "^8.1.4", + "@fluentui/style-utilities": "^8.2.2", + "@fluentui/utilities": "^8.2.2", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } + }, + "@fluentui/react-hooks": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-hooks/-/react-hooks-8.2.6.tgz", + "integrity": "sha512-nz0iycSUmGX6eBKsmW23ocmKn/HdV7c8HnMHx5fcGIQbOqOH8Hv4wq8t3RozsZBapIi/nDjpZs2UvB4zDFsg1g==", + "requires": { + "@fluentui/react-window-provider": "^2.1.4", + "@fluentui/set-version": "^8.1.4", + "@fluentui/utilities": "^8.2.2", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } + }, + "@fluentui/react-window-provider": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-2.1.4.tgz", + "integrity": "sha512-RztmJ7ol2eMDr3NCs2OcAA1cQjZdPPUEa4aurgh4Aq+JM/BiY0aK6S4SeFtVD7F8Q7PBOz/xwOG4HlnSMQtlsg==", "requires": { - "@fluentui/keyboard-key": "^0.2.1", - "@uifabric/merge-styles": "^7.14.1", - "@uifabric/set-version": "^7.0.13", - "@uifabric/styling": "^7.13.1", - "@uifabric/utilities": "^7.21.1", - "tslib": "^1.10.0" + "@fluentui/set-version": "^8.1.4", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } + }, + "@fluentui/set-version": { + "version": "8.1.4", + "resolved": "https://registry.npmjs.org/@fluentui/set-version/-/set-version-8.1.4.tgz", + "integrity": "sha512-2otMyJ+s+W+hjBD4BKjwYKKinJUDeIKYKz93qKrrJS0i3fKfftNroy9dHFlIblZ7n747L334plLi3bzQO1bnvA==", + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } } }, - "@fluentui/react-icons": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-0.1.29.tgz", - "integrity": "sha512-uIAawjA+DbkWhi9jyRVLDSuy33nkfv5cTdBxpjS0pNq0YD0uEhwyXxroDnZOc1TsxGW5w1DC75PiK4nMltwVJQ==", + "@fluentui/style-utilities": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@fluentui/style-utilities/-/style-utilities-8.2.2.tgz", + "integrity": "sha512-PKixlYfY93XOZRPNi+I8Qw9SkcBZsnG/qg2+3IxLGXpCVYKOmP52oR7N5j/nmspQZXdEoHehYa2z/lsKC2xw1w==", "requires": { + "@fluentui/merge-styles": "^8.1.4", + "@fluentui/set-version": "^8.1.4", + "@fluentui/theme": "^2.2.1", + "@fluentui/utilities": "^8.2.2", "@microsoft/load-themed-styles": "^1.10.26", - "@uifabric/set-version": "^7.0.13", - "@uifabric/utilities": "^7.21.1", - "tslib": "^1.10.0" + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } + }, + "@fluentui/theme": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-2.2.1.tgz", + "integrity": "sha512-1G92TftVulrGXklL5upaN/WrrSzY/va39RM1eo0XO/Q3+kAhAajclQAXb7XanqOsVFcAqK1DbVvWayrY9DG2Qg==", + "requires": { + "@fluentui/merge-styles": "^8.1.4", + "@fluentui/set-version": "^8.1.4", + "@fluentui/utilities": "^8.2.2", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } + } + }, + "@fluentui/utilities": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@fluentui/utilities/-/utilities-8.2.2.tgz", + "integrity": "sha512-aM2/CgoTIssMDs7MoTla+q/VXN5Gkk4s12S8GZNp87cmEzDy008tKkiRpHj6PXZuvJL5bctZco9YQgusO0jZEg==", + "requires": { + "@fluentui/dom-utilities": "^2.1.4", + "@fluentui/merge-styles": "^8.1.4", + "@fluentui/set-version": "^8.1.4", + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + } } }, "@hapi/hoek": { @@ -2640,9 +2858,9 @@ } }, "@microsoft/load-themed-styles": { - "version": "1.10.58", - "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.58.tgz", - "integrity": "sha512-/aRXzHhaloOUdEPq1bUNYkriDGz984BUQcOab8222NWpTwycUad/dqjTlG8iI51vXqj4RFr1XGqUfamXBOIM+w==" + "version": "1.10.202", + "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.202.tgz", + "integrity": "sha512-pWoN9hl1vfXnPfu2tS5VndXXKMe+UEWLJXDKNGXSNpmfszVLzG8Ns0TlZHlwtgpSaSD3f0kdVDfqAek8aflD4w==" }, "@microsoft/microsoft-graph-client": { "version": "2.1.0", @@ -2662,6 +2880,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, "requires": { "call-me-maybe": "^1.0.1", "glob-to-regexp": "^0.3.0" @@ -2688,7 +2907,8 @@ "@nodelib/fs.stat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true }, "@nodelib/fs.walk": { "version": "1.2.4", @@ -2894,16 +3114,6 @@ "resolved": "https://registry.npmjs.org/@types/atob-lite/-/atob-lite-2.0.0.tgz", "integrity": "sha512-7bjymPR7Ffa1/L3HskkaxMgTQDtwFObbISzHm9g3T12VyD89IiHS3BBVojlQHyZRiIilzdh0WT1gwwgyyBtLGQ==" }, - "@types/axe-webdriverjs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/axe-webdriverjs/-/axe-webdriverjs-2.1.0.tgz", - "integrity": "sha512-kReHzmOHt3/JRJtyG20xS7UpdO7zyD3wVw1/BiLkgPoo/ImTXNrjXyPOoTbY0hGnN/FK0syfczRII+xF4f3uRw==", - "dev": true, - "requires": { - "@types/selenium-webdriver": "*", - "axe-core": "^3.0.3" - } - }, "@types/babel__core": { "version": "7.1.12", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", @@ -3656,137 +3866,6 @@ } } }, - "@uifabric/azure-themes": { - "version": "7.1.29", - "resolved": "https://registry.npmjs.org/@uifabric/azure-themes/-/azure-themes-7.1.29.tgz", - "integrity": "sha512-Pd0wI93F1ktvnQECPcnVgkkCX23WfcoMbjFpApvBixYFXBKdOaMAOCZy5uAvCZMDLP2gHUQ0TYRJa2xrZ2++4Q==", - "requires": { - "@uifabric/merge-styles": "^7.14.1", - "@uifabric/set-version": "^7.0.13", - "office-ui-fabric-react": "^7.121.2", - "tslib": "^1.10.0" - } - }, - "@uifabric/file-type-icons": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/@uifabric/file-type-icons/-/file-type-icons-7.3.6.tgz", - "integrity": "sha512-uaQfwQTcref+EGN/NaHsvqbcDPVD4YhoLlDW1A2ylWS7Kz3aKvWsVMr7coieVwL8/GP34K+tWpkFNqToHwWR9Q==", - "requires": { - "@uifabric/set-version": "^7.0.13", - "@uifabric/styling": "^7.13.1", - "tslib": "^1.10.0" - } - }, - "@uifabric/foundation": { - "version": "7.7.27", - "resolved": "https://registry.npmjs.org/@uifabric/foundation/-/foundation-7.7.27.tgz", - "integrity": "sha512-0c5qIfe74GilfYoplCq7wSyXAgDCfnh3oKWVyNBjFOElO2wx6hi2Lx0Xsdo8epl82g6MhHjo3JIKNLxfqeWUUA==", - "requires": { - "@uifabric/merge-styles": "^7.14.1", - "@uifabric/set-version": "^7.0.13", - "@uifabric/styling": "^7.13.1", - "@uifabric/utilities": "^7.21.1", - "tslib": "^1.10.0" - } - }, - "@uifabric/icons": { - "version": "7.3.53", - "resolved": "https://registry.npmjs.org/@uifabric/icons/-/icons-7.3.53.tgz", - "integrity": "sha512-2RxOyWZePsTQ6O/62kUI6MgGHx15jpgT+KCEaVZj4Y8dKk/G9ZRY5mEJT6zg7WYTBs072DMsq1LxdlGrq0urjg==", - "requires": { - "@uifabric/set-version": "^7.0.13", - "@uifabric/styling": "^7.13.1", - "tslib": "^1.10.0" - } - }, - "@uifabric/merge-styles": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@uifabric/merge-styles/-/merge-styles-7.14.1.tgz", - "integrity": "sha512-nKkk0o9XyVh8HL174ZSDqw3IUnN2qb+kO73vg/rwioKPEQyuPGoEfij8jrb+CGpcCGnMYi53IeB1tm8ySlNatg==", - "requires": { - "@uifabric/set-version": "^7.0.13", - "tslib": "^1.10.0" - } - }, - "@uifabric/react-cards": { - "version": "0.109.101", - "resolved": "https://registry.npmjs.org/@uifabric/react-cards/-/react-cards-0.109.101.tgz", - "integrity": "sha512-VDvDuUzhy45POCmoZwnCNq8dQBNIveHLdMiwelYYMeg6448PUyjTB+SKSJYuiQpend/zBiuO5vDW7cTlV8vacQ==", - "requires": { - "@microsoft/load-themed-styles": "^1.10.26", - "@uifabric/azure-themes": "^7.1.29", - "@uifabric/file-type-icons": "^7.3.6", - "@uifabric/foundation": "^7.7.27", - "@uifabric/set-version": "^7.0.13", - "@uifabric/styling": "^7.13.1", - "@uifabric/theme-samples": "^7.0.94", - "@uifabric/utilities": "^7.21.1", - "office-ui-fabric-react": "^7.121.2", - "tslib": "^1.10.0" - } - }, - "@uifabric/react-hooks": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@uifabric/react-hooks/-/react-hooks-7.4.7.tgz", - "integrity": "sha512-awfM2Fk1vQ/TdI4wP5VrtElsIXQb1aaxYWi/WOsrEfAriTbWil4wepArVbrRjTdITy6XGmgaqrsegV9c7bZg0g==", - "requires": { - "@uifabric/set-version": "^7.0.13", - "@uifabric/utilities": "^7.21.1", - "tslib": "^1.10.0" - } - }, - "@uifabric/set-version": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@uifabric/set-version/-/set-version-7.0.13.tgz", - "integrity": "sha512-SRsYaacvNykS9lRwKNJgrJuhPV4ytblthFNg0+Wi6+zvIf/w50k/nBlmXVetV5U9dAuX4njSkd+/3iOpgevkyw==", - "requires": { - "tslib": "^1.10.0" - } - }, - "@uifabric/styling": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-7.13.1.tgz", - "integrity": "sha512-FvFSh2/cEx1e4W+zu0WcNo34i6Zuq6ikqHae6ZokU+rPZIZtKNsaagQaddI3k01D7o5Yyuap/DpcD6Qs5AlJlw==", - "requires": { - "@microsoft/load-themed-styles": "^1.10.26", - "@uifabric/merge-styles": "^7.14.1", - "@uifabric/set-version": "^7.0.13", - "@uifabric/utilities": "^7.21.1", - "tslib": "^1.10.0" - } - }, - "@uifabric/theme-samples": { - "version": "7.0.94", - "resolved": "https://registry.npmjs.org/@uifabric/theme-samples/-/theme-samples-7.0.94.tgz", - "integrity": "sha512-5PXcOOeeTp1+/E6uXfKZHCi3lgY+v2k2qpkTDsqWOScYS2dmFNXeCMNMwoU6FCOqFAzCnaMuIrrfnfqdvqw3Uw==", - "requires": { - "@uifabric/set-version": "^7.0.13", - "@uifabric/variants": "^7.1.84", - "office-ui-fabric-react": "^7.121.0", - "tslib": "^1.10.0" - } - }, - "@uifabric/utilities": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-7.21.1.tgz", - "integrity": "sha512-eat/YJf6kPXRI6ULaXC0VdJLCrXeFQUkInSOflOL05JuXmVwiQ+LDso1QXGL2qBmfJmq6nbYht3e9qihSCHbXA==", - "requires": { - "@uifabric/merge-styles": "^7.14.1", - "@uifabric/set-version": "^7.0.13", - "prop-types": "^15.7.2", - "tslib": "^1.10.0" - } - }, - "@uifabric/variants": { - "version": "7.1.84", - "resolved": "https://registry.npmjs.org/@uifabric/variants/-/variants-7.1.84.tgz", - "integrity": "sha512-Z5hdwOj+kDUJt8IXm1rB4fxyER9Drz2SyyKXjWbG2s3DiapIgi6FSEvBGYeTQ9dtIjM/U8LmumtbsOX2EDQtjQ==", - "requires": { - "@uifabric/set-version": "^7.0.13", - "office-ui-fabric-react": "^7.121.0", - "tslib": "^1.10.0" - } - }, "@webassemblyjs/ast": { "version": "1.7.11", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", @@ -4078,7 +4157,8 @@ "address": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", - "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==" + "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==", + "dev": true }, "agent-base": { "version": "6.0.2", @@ -4519,7 +4599,8 @@ "array-filter": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true }, "array-find-index": { "version": "1.0.2", @@ -4550,12 +4631,14 @@ "array-map": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true }, "array-reduce": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true }, "array-union": { "version": "1.0.2", @@ -4760,10 +4843,9 @@ "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" }, "axe-core": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.4.2.tgz", - "integrity": "sha512-aPpM84KPiRfeaK3LhA9ag4OmjLUZkNKMH0sZuK+YRBS+QJcegjveidCyvWSBlBr/iIMQdn/1hU00e3YBiuTEdw==", - "dev": true + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.3.tgz", + "integrity": "sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA==" }, "axe-sarif-converter": { "version": "2.3.0", @@ -4791,6 +4873,12 @@ "color-convert": "^2.0.1" } }, + "axe-core": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.5.6.tgz", + "integrity": "sha512-LEUDjgmdJoA3LqklSTwKYqkjcZ4HKc4ddIYGSAiSkr46NTjzg2L9RNB+lekO9P7Dlpa87+hBtzc2Fzn/+GUWMQ==", + "dev": true + }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -4958,25 +5046,6 @@ } } }, - "axe-webdriverjs": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/axe-webdriverjs/-/axe-webdriverjs-2.3.0.tgz", - "integrity": "sha512-AuUsX5OFTXOJ6reIKjtGay4O656n5G+m8MzhfL1SC8MHINBFFFn3Taucckn8+UZYJuTtNEobllSfiuPTHyKnSA==", - "dev": true, - "requires": { - "axe-core": "^3.3.1", - "babel-runtime": "^6.26.0", - "depd": "^2.0.0" - }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - } - } - }, "axios": { "version": "0.21.1", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", @@ -6717,6 +6786,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "dev": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -6735,12 +6805,14 @@ "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true }, "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.0" } @@ -6749,6 +6821,7 @@ "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.0" } @@ -6757,6 +6830,7 @@ "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.0" } @@ -6765,6 +6839,7 @@ "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.0" } @@ -6773,6 +6848,7 @@ "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", @@ -6782,7 +6858,8 @@ "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==" + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true } } }, @@ -7079,7 +7156,8 @@ "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true }, "caller-callsite": { "version": "2.0.0", @@ -7179,7 +7257,8 @@ "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true }, "check-more-types": { "version": "2.24.0", @@ -7644,6 +7723,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, "requires": { "restore-cursor": "^2.0.0" } @@ -7651,7 +7731,8 @@ "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true }, "cliui": { "version": "4.1.0", @@ -7742,9 +7823,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -10049,6 +10130,7 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dev": true, "requires": { "address": "^1.0.1", "debug": "^2.6.0" @@ -10058,6 +10140,7 @@ "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" } @@ -10065,7 +10148,8 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -10088,6 +10172,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, "requires": { "arrify": "^1.0.1", "path-type": "^3.0.0" @@ -10097,6 +10182,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, "requires": { "pify": "^3.0.0" } @@ -10104,7 +10190,8 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true } } }, @@ -10279,7 +10366,8 @@ "duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true }, "duplexify": { "version": "3.7.1", @@ -10307,9 +10395,10 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.355", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.355.tgz", - "integrity": "sha512-zKO/wS+2ChI/jz9WAo647xSW8t2RmgRLFdbUb/77cORkUTargO+SCj4ctTHjBn2VeNFrsLgDT7IuDVrd3F8mLQ==" + "version": "1.3.822", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.822.tgz", + "integrity": "sha512-k7jG5oYYHxF4jx6PcqwHX3JVME/OjzolqOZiIogi9xtsfsmTjTdie4x88OakYFPEa8euciTgCCzvVNwvmjHb1Q==", + "dev": true }, "elliptic": { "version": "6.5.4", @@ -11004,6 +11093,13 @@ "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", "requires": { "merge": "^1.2.0" + }, + "dependencies": { + "merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" + } } }, "execa": { @@ -11164,6 +11260,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -11215,6 +11312,7 @@ "version": "2.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, "requires": { "@mrmlnc/readdir-enhanced": "^2.2.1", "@nodelib/fs.stat": "^1.1.2", @@ -11227,17 +11325,20 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "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=" + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true }, "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" } @@ -11246,6 +11347,7 @@ "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.3.3", "define-property": "^0.2.5", @@ -11260,6 +11362,7 @@ "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.0" } @@ -11268,6 +11371,7 @@ "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.0" } @@ -11276,6 +11380,7 @@ "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.0.2" }, @@ -11284,6 +11389,7 @@ "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.5" } @@ -11294,6 +11400,7 @@ "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.0.2" }, @@ -11302,6 +11409,7 @@ "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.5" } @@ -11312,6 +11420,7 @@ "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", @@ -11321,7 +11430,8 @@ "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==" + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true } } }, @@ -11329,6 +11439,7 @@ "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", @@ -11344,6 +11455,7 @@ "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.0" } @@ -11352,6 +11464,7 @@ "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.0" } @@ -11362,6 +11475,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, "requires": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -11371,6 +11485,7 @@ "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.0" } @@ -11381,6 +11496,7 @@ "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.0" } @@ -11389,6 +11505,7 @@ "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.0" } @@ -11397,6 +11514,7 @@ "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", @@ -11406,12 +11524,14 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -11419,12 +11539,14 @@ "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==" + "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", @@ -11444,7 +11566,8 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -11463,6 +11586,12 @@ "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" }, + "fast-xml-parser": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz", + "integrity": "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==", + "dev": true + }, "fastparse": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", @@ -11511,6 +11640,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, "requires": { "escape-string-regexp": "^1.0.5" } @@ -11556,12 +11686,14 @@ "filesize": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true }, "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", @@ -11573,6 +11705,7 @@ "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.0" } @@ -11968,565 +12101,85 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "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=" - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "^1.0.0" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", - "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1", - "node-pre-gyp": "*" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.3", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "3.2.6", - "bundled": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.7", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.6", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "optional": true - }, - "minipass": { - "version": "2.9.0", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.4.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.14.0", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.7", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.7.1", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.13", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.1.1", - "bundled": true, - "optional": true - } + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "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=" + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" } }, "fstream": { @@ -13141,25 +12794,55 @@ "requires": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "^2.0.0" + } + } } }, "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.1.tgz", + "integrity": "sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog==", + "dev": true, "requires": { - "is-glob": "^2.0.0" + "is-glob": "^4.0.1" + }, + "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": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + } } }, "glob-to-regexp": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true }, "global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, "requires": { "global-prefix": "^3.0.0" } @@ -13168,6 +12851,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, "requires": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -13177,7 +12861,8 @@ "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==" + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true } } }, @@ -13190,6 +12875,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "dev": true, "requires": { "array-union": "^1.0.1", "dir-glob": "2.0.0", @@ -13203,12 +12889,14 @@ "ignore": { "version": "3.3.10", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true } } }, @@ -13241,6 +12929,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", + "dev": true, "requires": { "duplexer": "^0.1.1", "pify": "^3.0.0" @@ -13249,7 +12938,8 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true } } }, @@ -14088,7 +13778,8 @@ "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "inquirer": { "version": "6.5.2", @@ -14364,6 +14055,7 @@ "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.0.2" } @@ -14427,7 +14119,8 @@ "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true }, "is-regex": { "version": "1.0.5", @@ -14450,7 +14143,8 @@ "is-root": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.0.0.tgz", - "integrity": "sha512-F/pJIk8QD6OX5DNhRB7hWamLsUilmkDGho48KbgZ6xg/lmAZXHxzXQ91jzB3yRSw5kdQGGGc4yz8HYhTYIMWPg==" + "integrity": "sha512-F/pJIk8QD6OX5DNhRB7hWamLsUilmkDGho48KbgZ6xg/lmAZXHxzXQ91jzB3yRSw5kdQGGGc4yz8HYhTYIMWPg==", + "dev": true }, "is-stream": { "version": "1.1.0", @@ -14469,11 +14163,12 @@ "dev": true }, "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.3.1.tgz", + "integrity": "sha512-h2CGs+yPUyvkgTJQS9cJzo9lYK06WgRiXUqBBHtglSzVKAuH4/oWsqk7LGfbSa1hGk9QcZ0SyQtVggvBA8LZXA==", + "dev": true, "requires": { - "html-comment-regex": "^1.1.0" + "fast-xml-parser": "^3.19.0" } }, "is-symbol": { @@ -15331,6 +15026,14 @@ "version": "5.7.4", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" + }, + "ws": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", + "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", + "requires": { + "async-limiter": "~1.0.0" + } } } }, @@ -15436,9 +15139,9 @@ } }, "jszip": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", - "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", + "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", "dev": true, "requires": { "lie": "~3.3.0", @@ -15936,17 +15639,25 @@ "read-pkg-up": "^1.0.1", "redent": "^1.0.0", "trim-newlines": "^1.0.0" + }, + "dependencies": { + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + } } }, "merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==", + "dev": true }, "merge-deep": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", - "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", + "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", "requires": { "arr-union": "^3.1.0", "clone-deep": "^0.2.4", @@ -15969,7 +15680,8 @@ "merge2": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==" + "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", + "dev": true }, "methods": { "version": "1.1.2", @@ -16038,7 +15750,8 @@ "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true }, "min-indent": { "version": "1.0.1", @@ -16286,7 +15999,8 @@ "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true }, "nan": { "version": "2.14.0", @@ -16398,6 +16112,16 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } } } }, @@ -16514,19 +16238,10 @@ } }, "node-releases": { - "version": "1.1.49", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.49.tgz", - "integrity": "sha512-xH8t0LS0disN0mtRCh+eByxFPie+msJUBL/lJDBuap53QGiYPa9joh83K4pCZgWJ+2L4b9h88vCVdXQ60NO2bg==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } + "version": "1.1.75", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", + "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", + "dev": true }, "node-sass": { "version": "4.14.1", @@ -16804,26 +16519,6 @@ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, - "office-ui-fabric-react": { - "version": "7.121.2", - "resolved": "https://registry.npmjs.org/office-ui-fabric-react/-/office-ui-fabric-react-7.121.2.tgz", - "integrity": "sha512-9inrHi8qgHNwDI9eeHuTX3Pi3T0ZO+bCjg17eqrw2k2eM7fd/xls9Uty/8d6MuslNo8CtX8OEGS8/ulthpSozQ==", - "requires": { - "@fluentui/date-time-utilities": "^7.1.0", - "@fluentui/react-focus": "^7.12.10", - "@fluentui/react-icons": "^0.1.29", - "@microsoft/load-themed-styles": "^1.10.26", - "@uifabric/foundation": "^7.7.27", - "@uifabric/icons": "^7.3.53", - "@uifabric/merge-styles": "^7.14.1", - "@uifabric/react-hooks": "^7.4.7", - "@uifabric/set-version": "^7.0.13", - "@uifabric/styling": "^7.13.1", - "@uifabric/utilities": "^7.21.1", - "prop-types": "^15.7.2", - "tslib": "^1.10.0" - } - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -16849,6 +16544,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, "requires": { "mimic-fn": "^1.0.0" } @@ -16857,6 +16553,7 @@ "version": "5.4.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "dev": true, "requires": { "is-wsl": "^1.1.0" } @@ -17097,9 +16794,9 @@ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { "version": "0.1.7", @@ -17232,6 +16929,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, "requires": { "find-up": "^2.1.0" } @@ -19460,6 +19158,14 @@ "svgo": "^1.0.0" }, "dependencies": { + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "requires": { + "html-comment-regex": "^1.1.0" + } + }, "postcss": { "version": "7.0.27", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", @@ -19753,9 +19459,9 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" }, "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "quick-lru": { "version": "4.0.1", @@ -19894,6 +19600,7 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-7.0.3.tgz", "integrity": "sha512-KEFsH1CewnmddPLXIuU+QWKTH/hpJKZClL2+74XN54NkPnR2KnB5gGmuQ0E7DwcCkUpdMxxqBX+rB7aB5sZS4A==", + "dev": true, "requires": { "@babel/code-frame": "7.0.0", "address": "1.0.3", @@ -19925,6 +19632,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, "requires": { "@babel/highlight": "^7.0.0" } @@ -19932,12 +19640,14 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, "browserslist": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz", "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==", + "dev": true, "requires": { "caniuse-lite": "^1.0.30000929", "electron-to-chromium": "^1.3.103", @@ -19947,12 +19657,14 @@ "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, "requires": { "locate-path": "^3.0.0" } @@ -19960,12 +19672,14 @@ "immer": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", - "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" + "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==", + "dev": true }, "inquirer": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "dev": true, "requires": { "ansi-escapes": "^3.0.0", "chalk": "^2.0.0", @@ -19986,6 +19700,7 @@ "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.0" } @@ -19994,6 +19709,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^2.0.0", @@ -20004,6 +19720,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -20013,6 +19730,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "requires": { "p-try": "^2.0.0" } @@ -20021,6 +19739,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, "requires": { "p-limit": "^2.0.0" } @@ -20028,12 +19747,14 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true }, "strip-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "dev": true, "requires": { "ansi-regex": "^4.0.0" } @@ -20054,7 +19775,8 @@ "react-error-overlay": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.6.tgz", - "integrity": "sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q==" + "integrity": "sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q==", + "dev": true }, "react-intl": { "version": "2.8.0", @@ -20470,6 +20192,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "dev": true, "requires": { "minimatch": "3.0.4" } @@ -20774,6 +20497,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -20841,6 +20565,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, "requires": { "is-promise": "^2.1.0" } @@ -20863,6 +20588,7 @@ "version": "6.5.4", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "dev": true, "requires": { "tslib": "^1.9.0" } @@ -21404,32 +21130,33 @@ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" }, "selenium-webdriver": { - "version": "4.0.0-alpha.7", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.7.tgz", - "integrity": "sha512-D4qnTsyTr91jT8f7MfN+OwY0IlU5+5FmlO5xlgRUV6hDEV8JyYx2NerdTEqDDkNq7RZDYc4VoPALk8l578RBHw==", + "version": "4.0.0-beta.4", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.4.tgz", + "integrity": "sha512-+s/CIYkWzmnC9WASBxxVj7Lm0dcyl6OaFxwIJaFCT5WCuACiimEEr4lUnOOFP/QlKfkDQ56m+aRczaq2EvJEJg==", "dev": true, "requires": { - "jszip": "^3.2.2", - "rimraf": "^2.7.1", - "tmp": "0.0.30" + "jszip": "^3.6.0", + "rimraf": "^3.0.2", + "tmp": "^0.2.1", + "ws": ">=7.4.6" }, "dependencies": { "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" } }, "tmp": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", - "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { - "os-tmpdir": "~1.0.1" + "rimraf": "^3.0.0" } } } @@ -21632,6 +21359,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, "requires": { "array-filter": "~0.0.0", "array-map": "~0.0.0", @@ -21833,6 +21561,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "dev": true, "requires": { "debug": "^3.2.5", "eventsource": "^1.0.7", @@ -21846,6 +21575,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "requires": { "ms": "^2.1.1" } @@ -22000,11 +21730,12 @@ } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "minipass": "^3.1.1" } }, "stable": { @@ -22779,13 +22510,37 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, "tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.7.tgz", + "integrity": "sha512-PBoRkOJU0X3lejJ8GaRCsobjXTgFofRDSPdSUhRSdlwJfifRlQBwGXitDItdGFu0/h0XDMCkig0RN1iT7DBxhA==", + "dev": true, "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "tcp-port-used": { @@ -23025,7 +22780,8 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true }, "throat": { "version": "4.1.0", @@ -23035,7 +22791,8 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, "through2": { "version": "2.0.5", @@ -23078,6 +22835,7 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -23166,9 +22924,10 @@ } }, "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.0.2.tgz", + "integrity": "sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew==", + "dev": true }, "trim-off-newlines": { "version": "1.0.1", @@ -23549,9 +23308,9 @@ } }, "url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", + "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -23965,6 +23724,16 @@ "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" + }, + "dependencies": { + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "requires": { + "figgy-pudding": "^3.5.1" + } + } } }, "debug": { @@ -25105,12 +24874,10 @@ } }, "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "requires": { - "async-limiter": "~1.0.0" - } + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.0.0.tgz", + "integrity": "sha512-6AcSIXpBlS0QvCVKk+3cWnWElLsA6SzC0lkQ43ciEglgXJXiCWK3/CGFEJ+Ybgp006CMibamAsqOlxE9s4AvYA==", + "dev": true }, "xml": { "version": "1.0.1", diff --git a/package.json b/package.json index b1bff9a0b..029cf125b 100644 --- a/package.json +++ b/package.json @@ -1,149 +1,157 @@ { - "name": "graph-explorer-v2", - "version": "4.12.0", - "private": true, - "dependencies": { - "@azure/msal-browser": "2.12.0", - "@babel/core": "7.12.13", - "@babel/eslint-parser": "7.12.13", - "@microsoft/applicationinsights-react-js": "2.3.1", - "@microsoft/applicationinsights-web": "2.3.1", - "@microsoft/microsoft-graph-client": "2.1.0", - "@svgr/webpack": "4.1.0", - "@uifabric/react-cards": "0.109.101", - "@uifabric/styling": "7.13.1", - "adaptivecards": "1.2.3", - "adaptivecards-templating": "1.4.0", - "babel-core": "7.0.0-bridge.0", - "babel-loader": "8.2.2", - "babel-plugin-named-asset-import": "0.3.7", - "babel-preset-react-app": "10.0.0", - "bfj": "6.1.1", - "bootstrap": "4.3.1", - "case-sensitive-paths-webpack-plugin": "2.2.0", - "css-loader": "1.0.0", - "dotenv": "6.0.0", - "dotenv-expand": "4.2.0", - "eslint-config-react-app": "3.0.7", - "eslint-loader": "2.1.1", - "eslint-plugin-flowtype": "2.50.1", - "eslint-plugin-import": "2.14.0", - "eslint-plugin-jsx-a11y": "6.1.2", - "eslint-plugin-react": "7.12.4", - "express": "4.16.4", - "file-loader": "2.0.0", - "fork-ts-checker-webpack-plugin-alt": "0.4.14", - "fs-extra": "7.0.1", - "guid-typescript": "1.0.9", - "html-webpack-plugin": "4.0.0-alpha.2", - "identity-obj-proxy": "3.0.0", - "isomorphic-fetch": "2.2.1", - "jest": "23.6.0", - "jest-junit-reporter": "1.1.0", - "jest-pnp-resolver": "1.0.2", - "jest-resolve": "23.6.0", - "jest-watch-typeahead": "0.2.1", - "jwt-decode": "2.2.0", - "localforage": "1.7.3", - "markdown-it": "10.0.0", - "mini-css-extract-plugin": "0.5.0", - "monaco-editor": "0.15.6", - "monaco-editor-webpack-plugin": "1.7.0", - "node-sass": "4.14.1", - "office-ui-fabric-react": "7.121.2", - "optimize-css-assets-webpack-plugin": "5.0.1", - "pnp-webpack-plugin": "1.2.1", - "postcss-flexbugs-fixes": "4.1.0", - "postcss-loader": "3.0.0", - "postcss-preset-env": "6.5.0", - "postcss-safe-parser": "4.0.1", - "re-resizable": "6.9.0", - "react": "16.8.2", - "react-app-polyfill": "0.2.1", - "react-dev-utils": "7.0.3", - "react-dom": "16.8.2", - "react-intl": "2.8.0", - "react-monaco-editor": "0.24.1", - "react-redux": "7.1.0", - "redux": "4.0.1", - "redux-thunk": "2.3.0", - "resolve": "1.10.0", - "sass-loader": "7.1.0", - "style-loader": "0.23.1", - "terser-webpack-plugin": "3.1.0", - "typescript": "4.1.5", - "url-loader": "1.1.2", - "webpack": "4.28.3", - "webpack-dev-server": "3.11.0", - "webpack-manifest-plugin": "2.0.4", - "workbox-webpack-plugin": "3.6.3" - }, - "scripts": { - "start": "node scripts/start.js", - "build": "node scripts/build.js && node versioned-build.js", - "test": "node scripts/test.js --no-watch --testPathIgnorePatterns=src/tests/accessibility", - "lint": "eslint . \"**/*.{js,ts,tsx}\"", - "start-server": "npm start", - "ci": "start-server-and-test start-server http://localhost:3000 test-ci", - "test-ci": "node scripts/test.js --no-watch -f \"src/tests/accessibility/accessibility.spec.ts\" -t \"Graph Explorer accessibility\"", - "prebuild:prod": "standard-version", - "build:prod": "npm run build", - "bump": "standard-version --skip.tag --skip.changelog" - }, - "eslintConfig": { - "extends": "react-app" - }, - "browserslist": [ - ">0.2%", - "not dead", - "not ie <= 11", - "not op_mini all" - ], - "devDependencies": { - "@types/axe-webdriverjs": "2.1.0", - "@types/chromedriver": "2.38.0", - "@types/enzyme": "3.9.0", - "@types/enzyme-adapter-react-16": "1.0.5", - "@types/isomorphic-fetch": "0.0.35", - "@types/jest": "24.0.6", - "@types/jwt-decode": "2.2.1", - "@types/node": "11.9.4", - "@types/react": "16.8.3", - "@types/react-dom": "16.8.2", - "@types/react-intl": "2.3.17", - "@types/react-redux": "7.1.0", - "@types/redux-logger": "3.0.7", - "@types/redux-mock-store": "1.0.0", - "@types/selenium-webdriver": "4.0.6", - "@typescript-eslint/eslint-plugin": "4.15.0", - "@typescript-eslint/eslint-plugin-tslint": "4.15.0", - "@typescript-eslint/parser": "4.15.0", - "axe-core": "3.4.2", - "axe-sarif-converter": "2.3.0", - "axe-webdriverjs": "2.3.0", - "axios": "0.21.1", - "babel-jest": "26.6.3", - "braces": "2.3.1", - "chromedriver": "^88.0.0", - "crypto": "1.0.1", - "enzyme": "3.9.0", - "enzyme-adapter-react-16": "1.9.1", - "eslint": "5.16.0", - "immer": "8.0.1", - "jest-fetch-mock": "3.0.3", - "node-fetch": "2.6.1", - "node-notifier": "8.0.1", - "react-test-renderer": "16.8.3", - "redux-logger": "3.0.6", - "redux-mock-store": "1.5.3", - "selenium-webdriver": "4.0.0-alpha.7", - "serialize-javascript": "3.1.0", - "standard-version": "8.0.2", - "start-server-and-test": "1.11.7", - "ts-jest": "25.2.0", - "tslint": "5.12.1", - "tslint-config-prettier": "1.18.0", - "tslint-react": "4.0.0", - "yargs-parser": "13.1.2" - } + "name": "graph-explorer-v2", + "version": "4.13.0", + "private": true, + "dependencies": { + "@axe-core/webdriverjs": "4.2.2", + "@azure/msal-browser": "2.12.0", + "@babel/core": "7.12.13", + "@babel/eslint-parser": "7.12.13", + "@fluentui/react": "8.28.0", + "@microsoft/applicationinsights-react-js": "2.3.1", + "@microsoft/applicationinsights-web": "2.3.1", + "@microsoft/microsoft-graph-client": "2.1.0", + "@svgr/webpack": "4.1.0", + "adaptivecards": "1.2.3", + "adaptivecards-templating": "1.4.0", + "babel-core": "7.0.0-bridge.0", + "babel-loader": "8.2.2", + "babel-plugin-named-asset-import": "0.3.7", + "babel-preset-react-app": "10.0.0", + "bfj": "6.1.1", + "bootstrap": "4.3.1", + "case-sensitive-paths-webpack-plugin": "2.2.0", + "css-loader": "1.0.0", + "dotenv": "6.0.0", + "dotenv-expand": "4.2.0", + "eslint-config-react-app": "3.0.7", + "eslint-loader": "2.1.1", + "eslint-plugin-flowtype": "2.50.1", + "eslint-plugin-import": "2.14.0", + "eslint-plugin-jsx-a11y": "6.1.2", + "eslint-plugin-react": "7.12.4", + "express": "4.16.4", + "file-loader": "2.0.0", + "fork-ts-checker-webpack-plugin-alt": "0.4.14", + "fs-extra": "7.0.1", + "guid-typescript": "1.0.9", + "html-webpack-plugin": "4.0.0-alpha.2", + "identity-obj-proxy": "3.0.0", + "isomorphic-fetch": "2.2.1", + "jest": "23.6.0", + "jest-junit-reporter": "1.1.0", + "jest-pnp-resolver": "1.0.2", + "jest-resolve": "23.6.0", + "jest-watch-typeahead": "0.2.1", + "jwt-decode": "2.2.0", + "localforage": "1.7.3", + "markdown-it": "10.0.0", + "mini-css-extract-plugin": "0.5.0", + "monaco-editor": "0.15.6", + "monaco-editor-webpack-plugin": "1.7.0", + "node-sass": "4.14.1", + "optimize-css-assets-webpack-plugin": "5.0.1", + "pnp-webpack-plugin": "1.2.1", + "postcss-flexbugs-fixes": "4.1.0", + "postcss-loader": "3.0.0", + "postcss-preset-env": "6.5.0", + "postcss-safe-parser": "4.0.1", + "re-resizable": "6.9.0", + "react": "16.8.2", + "react-app-polyfill": "0.2.1", + "react-dom": "16.8.2", + "react-intl": "2.8.0", + "react-monaco-editor": "0.24.1", + "react-redux": "7.1.0", + "redux": "4.0.1", + "redux-thunk": "2.3.0", + "resolve": "1.10.0", + "sass-loader": "7.1.0", + "style-loader": "0.23.1", + "terser-webpack-plugin": "3.1.0", + "typescript": "4.1.5", + "url-loader": "1.1.2", + "webpack": "4.28.3", + "webpack-dev-server": "3.11.0", + "webpack-manifest-plugin": "2.0.4", + "workbox-webpack-plugin": "3.6.3" + }, + "scripts": { + "start": "node scripts/start.js", + "build": "node scripts/build.js && node versioned-build.js", + "test": "node scripts/test.js --no-watch --testPathIgnorePatterns=src/tests/accessibility", + "lint": "eslint . \"**/*.{js,ts,tsx}\"", + "start-server": "npm start", + "ci": "start-server-and-test start-server http://localhost:3000 test-ci", + "test-ci": "node scripts/test.js --no-watch -f \"src/tests/accessibility/accessibility.spec.ts\" -t \"Graph Explorer accessibility\"", + "prebuild:prod": "standard-version", + "build:prod": "npm run build", + "bump": "standard-version --skip.tag --skip.changelog" + }, + "eslintConfig": { + "extends": "react-app" + }, + "browserslist": [ + ">0.2%", + "not dead", + "not ie <= 11", + "not op_mini all" + ], + "devDependencies": { + "@types/chromedriver": "2.38.0", + "@types/enzyme": "3.9.0", + "@types/enzyme-adapter-react-16": "1.0.5", + "@types/isomorphic-fetch": "0.0.35", + "@types/jest": "24.0.6", + "@types/jwt-decode": "2.2.1", + "@types/node": "11.9.4", + "@types/react": "16.8.3", + "@types/react-dom": "16.8.2", + "@types/react-intl": "2.3.17", + "@types/react-redux": "7.1.0", + "@types/redux-logger": "3.0.7", + "@types/redux-mock-store": "1.0.0", + "@types/selenium-webdriver": "4.0.6", + "@typescript-eslint/eslint-plugin": "4.15.0", + "@typescript-eslint/eslint-plugin-tslint": "4.15.0", + "@typescript-eslint/parser": "4.15.0", + "axe-core": "4.3.3", + "axe-sarif-converter": "2.3.0", + "axios": "0.21.1", + "babel-jest": "26.6.3", + "braces": "2.3.1", + "chromedriver": "^88.0.0", + "color-string": "1.6.0", + "crypto": "1.0.1", + "enzyme": "3.9.0", + "enzyme-adapter-react-16": "1.9.1", + "eslint": "5.16.0", + "glob-parent": "6.0.1", + "immer": "8.0.1", + "is-svg": "4.3.1", + "jest-fetch-mock": "3.0.3", + "merge": "2.1.1", + "merge-deep": "3.0.3", + "node-fetch": "2.6.1", + "node-notifier": "8.0.1", + "path-parse": "1.0.7", + "react-dev-utils": "7.0.3", + "react-test-renderer": "16.8.3", + "redux-logger": "3.0.6", + "redux-mock-store": "1.5.3", + "selenium-webdriver": "4.0.0-beta.4", + "serialize-javascript": "3.1.0", + "ssri": "8.0.1", + "standard-version": "8.0.2", + "start-server-and-test": "1.11.7", + "tar": "6.1.7", + "trim-newlines": "4.0.2", + "ts-jest": "25.2.0", + "tslint": "5.12.1", + "tslint-config-prettier": "1.18.0", + "tslint-react": "4.0.0", + "url-parse": "1.5.3", + "ws": "8.0.0", + "yargs-parser": "13.1.2" + } } diff --git a/src/app/services/actions/permissions-action-creator.ts b/src/app/services/actions/permissions-action-creator.ts index 81a366352..6a9e90861 100644 --- a/src/app/services/actions/permissions-action-creator.ts +++ b/src/app/services/actions/permissions-action-creator.ts @@ -1,13 +1,15 @@ -import { MessageBarType } from 'office-ui-fabric-react'; +import { MessageBarType } from '@fluentui/react'; import { geLocale } from '../../../appLocale'; import { authenticationWrapper } from '../../../modules/authentication'; import { IAction } from '../../../types/action'; +import { IUser } from '../../../types/profile'; import { IRequestOptions } from '../../../types/request'; import { IRootState } from '../../../types/root'; import { sanitizeQueryUrl } from '../../utils/query-url-sanitization'; import { parseSampleUrl } from '../../utils/sample-url-generation'; import { translateMessage } from '../../utils/translate-messages'; +import { getConsentAuthErrorHint } from '../../views/authentication/AuthenticationErrorsHints'; import { ACCOUNT_TYPE, PERMS_SCOPE } from '../graph-constants'; import { FETCH_SCOPES_ERROR, @@ -44,15 +46,10 @@ export function fetchScopes(): Function { return async (dispatch: Function, getState: Function) => { let hasUrl = false; // whether permissions are for a specific url try { - const { devxApi, permissionsPanelOpen, profileType, sampleQuery: query }: IRootState = getState(); + const { devxApi, permissionsPanelOpen, profile, sampleQuery: query }: IRootState = getState(); let permissionsUrl = `${devxApi.baseUrl}/permissions`; - let scope = PERMS_SCOPE.WORK; - if (profileType === ACCOUNT_TYPE.AAD) { - scope = PERMS_SCOPE.WORK; - } else if (profileType === ACCOUNT_TYPE.MSA) { - scope = PERMS_SCOPE.PERSONAL; - } + const scopeType = getPermissionsScopeType(profile); if (!permissionsPanelOpen) { const signature = sanitizeQueryUrl(query.sampleUrl); @@ -62,7 +59,7 @@ export function fetchScopes(): Function { throw new Error('url is invalid'); } - permissionsUrl = `${permissionsUrl}?requesturl=/${requestUrl}&method=${query.selectedVerb}&scopeType=${scope}`; + permissionsUrl = `${permissionsUrl}?requesturl=/${requestUrl}&method=${query.selectedVerb}&scopeType=${scopeType}`; hasUrl = true; } @@ -102,6 +99,13 @@ export function fetchScopes(): Function { }; } +function getPermissionsScopeType(profile: IUser | null | undefined) { + if (profile?.profileType === ACCOUNT_TYPE.MSA) { + return PERMS_SCOPE.PERSONAL; + } + return PERMS_SCOPE.WORK; +} + export function consentToScopes(scopes: string[]): Function { return async (dispatch: Function) => { try { @@ -118,6 +122,7 @@ export function consentToScopes(scopes: string[]): Function { status: errorCode, ok: false, messageType: MessageBarType.error, + hint: getConsentAuthErrorHint(errorCode) }) ); } diff --git a/src/app/services/actions/profile-action-creators.ts b/src/app/services/actions/profile-action-creators.ts index d93ad0135..d6a739a4a 100644 --- a/src/app/services/actions/profile-action-creators.ts +++ b/src/app/services/actions/profile-action-creators.ts @@ -1,6 +1,12 @@ +import { IUser } from '../../../types/profile'; import { IQuery } from '../../../types/query-runner'; -import { PROFILE_IMAGE_REQUEST_SUCCESS, PROFILE_REQUEST_ERROR, PROFILE_REQUEST_SUCCESS, PROFILE_TYPE_SUCCESS } from '../redux-constants'; -import { authenticatedRequest, isBetaURLResponse, isImageResponse, parseResponse } from './query-action-creator-util'; +import { + ACCOUNT_TYPE, BETA_USER_INFO_URL, DEFAULT_USER_SCOPES, + USER_INFO_URL, USER_PICTURE_URL +} from '../graph-constants'; +import { PROFILE_REQUEST_ERROR, PROFILE_REQUEST_SUCCESS } from '../redux-constants'; +import { makeRequest, parseResponse } from './query-action-creator-util'; +import { queryRunningStatus } from './query-loading-action-creators'; export function profileRequestSuccess(response: object): any { return { @@ -9,13 +15,6 @@ export function profileRequestSuccess(response: object): any { }; } -export function profileImageRequestSuccess(response: object): any { - return { - type: PROFILE_IMAGE_REQUEST_SUCCESS, - response, - }; -} - export function profileRequestError(response: object): any { return { type: PROFILE_REQUEST_ERROR, @@ -23,50 +22,81 @@ export function profileRequestError(response: object): any { }; } -export function profileTypeSuccess(response: any): any { - return { - type: PROFILE_TYPE_SUCCESS, - response, - } +const query: IQuery = { + selectedVerb: 'GET', + sampleHeaders: [{ + name: 'Cache-Control', + value: 'no-cache' + }], + selectedVersion: '', + sampleUrl: '' } -export function getProfileInfo(query: IQuery): Function { - return (dispatch: Function) => { - const respHeaders: any = {}; - - if (!query.sampleHeaders) { - query.sampleHeaders = []; +export function getProfileInfo(): Function { + return async (dispatch: Function) => { + dispatch(queryRunningStatus(true)); + try { + const profile: IUser = await getProfileInformation(); + profile.profileType = await getProfileType(); + profile.profileImageUrl = await getProfileImage(); + dispatch(profileRequestSuccess(profile)); + } catch (error) { + dispatch(profileRequestError({ error })); } + }; +} - query.sampleHeaders.push({ - name: 'Cache-Control', - value: 'no-cache' - }); +async function getProfileInformation(): Promise { + const profile: IUser = { + displayName: '', + emailAddress: '', + profileImageUrl: '', + }; + try { + query.sampleUrl = USER_INFO_URL; + const { userInfo } = await getProfileResponse(); + profile.displayName = userInfo.displayName; + profile.emailAddress = userInfo.mail || userInfo.userPrincipalName; + return profile; + } catch (error) { + throw error; + } +} - return authenticatedRequest(dispatch, query).then(async (response: Response) => { +async function getProfileType(): Promise { + try { + query.sampleUrl = BETA_USER_INFO_URL; + const { userInfo } = await getProfileResponse(); + return userInfo?.account?.[0]?.source?.type?.[0]; + } catch (error) { + return ACCOUNT_TYPE.MSA; + } +} - if (response && response.ok) { - const json = await parseResponse(response, respHeaders); - const contentType = respHeaders['content-type']; - const isImageResult = isImageResponse(contentType); - const isBetaUserResult = isBetaURLResponse(json); +async function getProfileImage(): Promise { + let profileImageUrl = ''; + try { + query.sampleUrl = USER_PICTURE_URL; + const { response, userInfo: userPicture } = await getProfileResponse(); + if (userPicture) { + const buffer = await response.arrayBuffer(); + const blob = new Blob([buffer], { type: 'image/jpeg' }); + profileImageUrl = URL.createObjectURL(blob); + } + } catch (error) { + return profileImageUrl; + } + return profileImageUrl; +} - if (isImageResult) { - return dispatch( - profileImageRequestSuccess(json), - ); - } else if (isBetaUserResult) { - return dispatch( - profileTypeSuccess(json?.account?.[0]?.source?.type?.[0]) - ); - } else { - return dispatch( - profileRequestSuccess(json), - ); - } - } - return dispatch(profileRequestError({ response })); - }); +async function getProfileResponse() { + const scopes = DEFAULT_USER_SCOPES.split(' '); + const respHeaders: any = {}; + const response = await makeRequest(query.selectedVerb, scopes)(query); + const userInfo = await parseResponse(response, respHeaders); + return { + userInfo, + response }; } diff --git a/src/app/services/actions/query-action-creator-util.ts b/src/app/services/actions/query-action-creator-util.ts index 2bdbe8216..977f8687b 100644 --- a/src/app/services/actions/query-action-creator-util.ts +++ b/src/app/services/actions/query-action-creator-util.ts @@ -51,12 +51,10 @@ export function createAnonymousRequest(query: IQuery, proxyUrl: string) { return { graphUrl, options }; } -export function authenticatedRequest( - dispatch: Function, - query: IQuery, - scopes: string[] = DEFAULT_USER_SCOPES.split(' ') -) { - return makeRequest(query.selectedVerb, scopes)(dispatch, query); +export function authenticatedRequest(dispatch: Function, query: IQuery, + scopes: string[] = DEFAULT_USER_SCOPES.split(' ')) { + dispatch(queryRunningStatus(true)); + return makeRequest(query.selectedVerb, scopes)(query); } export function isImageResponse(contentType: string | undefined) { @@ -107,8 +105,8 @@ export function parseResponse(response: any, respHeaders: any): Promise { return response; } -const makeRequest = (httpVerb: string, scopes: string[]): Function => { - return async (dispatch: Function, query: IQuery) => { +export function makeRequest(httpVerb: string, scopes: string[]): Function { + return async (query: IQuery) => { const sampleHeaders: any = {}; sampleHeaders.SdkVersion = 'GraphExplorer/4.0'; @@ -131,8 +129,6 @@ const makeRequest = (httpVerb: string, scopes: string[]): Function => { let response; - dispatch(queryRunningStatus(true)); - switch (httpVerb) { case 'GET': response = await client.get(); diff --git a/src/app/services/actions/query-action-creators.ts b/src/app/services/actions/query-action-creators.ts index a447d1bd9..e188f57c9 100644 --- a/src/app/services/actions/query-action-creators.ts +++ b/src/app/services/actions/query-action-creators.ts @@ -1,4 +1,4 @@ -import { MessageBarType } from 'office-ui-fabric-react'; +import { MessageBarType } from '@fluentui/react'; import { ContentType } from '../../../types/enums'; import { IHistoryItem } from '../../../types/history'; diff --git a/src/app/services/reducers/index.ts b/src/app/services/reducers/index.ts index d690563b5..8fd7e4acd 100644 --- a/src/app/services/reducers/index.ts +++ b/src/app/services/reducers/index.ts @@ -7,7 +7,7 @@ import { dimensions } from './dimensions-reducers'; import { permissionsPanelOpen } from './permissions-panel-reducer'; import { graphExplorerMode } from './graph-explorer-mode-reducer'; import { scopes } from './permissions-reducer'; -import { profile, profileType } from './profile-reducer'; +import { profile } from './profile-reducer'; import { sampleQuery } from './query-input-reducers'; import { isLoadingData } from './query-loading-reducers'; import { graphResponse } from './query-runner-reducers'; @@ -44,5 +44,4 @@ export default combineReducers({ theme, dimensions, permissionsPanelOpen, - profileType }); diff --git a/src/app/services/reducers/profile-reducer.ts b/src/app/services/reducers/profile-reducer.ts index 6eb1f3061..5dfbafb3e 100644 --- a/src/app/services/reducers/profile-reducer.ts +++ b/src/app/services/reducers/profile-reducer.ts @@ -1,6 +1,5 @@ import { IAction } from '../../../types/action'; -import { ACCOUNT_TYPE } from '../graph-constants'; -import { LOGOUT_SUCCESS, PROFILE_REQUEST_SUCCESS, PROFILE_TYPE_SUCCESS } from '../redux-constants'; +import { LOGOUT_SUCCESS, PROFILE_REQUEST_SUCCESS } from '../redux-constants'; export function profile(state = null, action: IAction): any { switch (action.type) { @@ -12,12 +11,3 @@ export function profile(state = null, action: IAction): any { return state; } } - -export function profileType(state = ACCOUNT_TYPE.AAD, action: IAction): any { - switch (action.type) { - case PROFILE_TYPE_SUCCESS: - return action.response - default: - return state; - } -} diff --git a/src/app/services/reducers/query-loading-reducers.ts b/src/app/services/reducers/query-loading-reducers.ts index f3652fd44..5c54fa633 100644 --- a/src/app/services/reducers/query-loading-reducers.ts +++ b/src/app/services/reducers/query-loading-reducers.ts @@ -2,7 +2,6 @@ import { IAction } from '../../../types/action'; import { FETCH_SCOPES_ERROR, GET_CONSENT_ERROR, - PROFILE_IMAGE_REQUEST_SUCCESS, PROFILE_REQUEST_ERROR, PROFILE_REQUEST_SUCCESS, QUERY_GRAPH_RUNNING, @@ -28,8 +27,6 @@ export function isLoadingData(state = {}, action: IAction): any { return false; case PROFILE_REQUEST_SUCCESS: return false; - case PROFILE_IMAGE_REQUEST_SUCCESS: - return false; default: return state; } diff --git a/src/app/services/redux-constants.ts b/src/app/services/redux-constants.ts index 271380aad..05fd2d407 100644 --- a/src/app/services/redux-constants.ts +++ b/src/app/services/redux-constants.ts @@ -9,7 +9,6 @@ export const HEADER_REMOVE_SUCCESS = 'HEADER_REMOVE_SUCCESS'; export const SET_GRAPH_EXPLORER_MODE_SUCCESS = 'SET_GRAPH_EXPLORER_MODE_SUCCESS'; export const SET_SAMPLE_QUERY_SUCCESS = 'SET_SAMPLE_QUERY_SUCCESS'; export const PROFILE_REQUEST_SUCCESS = 'PROFILE_REQUEST_SUCCESS'; -export const PROFILE_IMAGE_REQUEST_SUCCESS = 'PROFILE_IMAGE_REQUEST_SUCCESS'; export const PROFILE_REQUEST_ERROR = 'PROFILE_REQUEST_ERROR'; export const GET_SNIPPET_SUCCESS = 'GET_SNIPPET_SUCCESS'; export const GET_SNIPPET_ERROR = 'GET_SNIPPET_ERROR'; @@ -43,4 +42,3 @@ export const RESPONSE_EXPANDED = 'RESPONSE_EXPANDED'; export const PERMISSIONS_PANEL_OPEN = 'PERMISSIONS_PANEL_OPEN'; export const AUTHENTICATION_PENDING = 'AUTHENTICATION_PENDING'; export const SET_GRAPH_PROXY_URL = 'SET_GRAPH_PROXY_URL'; -export const PROFILE_TYPE_SUCCESS = 'PROFILE_TYPE_SUCCESS'; diff --git a/src/app/utils/badge-color.ts b/src/app/utils/badge-color.ts index a668e6517..fe66bf4ad 100644 --- a/src/app/utils/badge-color.ts +++ b/src/app/utils/badge-color.ts @@ -1,6 +1,6 @@ -import { getTheme } from 'office-ui-fabric-react'; +import { getTheme } from '@fluentui/react'; -export function getStyleFor (method: string) { +export function getStyleFor(method: string) { const currentTheme = getTheme(); method = method.toUpperCase(); diff --git a/src/app/utils/generate-groups.ts b/src/app/utils/generate-groups.ts index d3145f67f..1a7d31f8c 100644 --- a/src/app/utils/generate-groups.ts +++ b/src/app/utils/generate-groups.ts @@ -1,4 +1,4 @@ -import { IGroup } from "office-ui-fabric-react"; +import { IGroup } from '@fluentui/react'; export function generateGroupsFromList(list: any[], property: string) { const map = new Map(); diff --git a/src/app/views/App.styles.ts b/src/app/views/App.styles.ts index f828c2929..353abba3a 100644 --- a/src/app/views/App.styles.ts +++ b/src/app/views/App.styles.ts @@ -1,4 +1,4 @@ -import { FontSizes, ITheme } from '@uifabric/styling'; +import { FontSizes, ITheme } from '@fluentui/react'; export const appStyles = (theme: ITheme) => { return { diff --git a/src/app/views/App.tsx b/src/app/views/App.tsx index 86669cc0d..39b9c99ef 100644 --- a/src/app/views/App.tsx +++ b/src/app/views/App.tsx @@ -1,9 +1,4 @@ -import { - Announced, - IStackTokens, - ITheme, - styled, -} from 'office-ui-fabric-react'; +import { Announced, IStackTokens, ITheme, styled } from '@fluentui/react'; import React, { Component } from 'react'; import { InjectedIntl, injectIntl } from 'react-intl'; import { connect } from 'react-redux'; @@ -15,11 +10,7 @@ import { componentNames, eventTypes, telemetry } from '../../telemetry'; import { loadGETheme } from '../../themes'; import { ThemeContext } from '../../themes/theme-context'; import { Mode } from '../../types/enums'; -import { - IInitMessage, - IQuery, - IThemeChangedMessage, -} from '../../types/query-runner'; +import { IInitMessage, IQuery, IThemeChangedMessage } from '../../types/query-runner'; import { IRootState } from '../../types/root'; import { ISharedQueryParams } from '../../types/share-query'; import { ISidebarProps } from '../../types/sidebar'; @@ -273,9 +264,11 @@ class App extends Component { const properties = { ...sidebarProperties }; properties.showSidebar = !properties.showSidebar; this.props.actions!.toggleSidebar(properties); - telemetry.trackEvent(eventTypes.BUTTON_CLICK_EVENT, { - ComponentName: componentNames.SIDEBAR_HAMBURGER_BUTTON, - }); + telemetry.trackEvent( + eventTypes.BUTTON_CLICK_EVENT, + { + ComponentName: componentNames.SIDEBAR_HAMBURGER_BUTTON, + }); }; public displayToggleButton = (mediaQueryList: any) => { @@ -301,8 +294,8 @@ class App extends Component { justifyContent: minimised ? '' : 'center', alignItems: minimised ? '' : 'center', marginLeft: minimised ? '' : '-0.9em', - }} - > + + }}>
@@ -315,17 +308,9 @@ class App extends Component { public render() { const classes = classNames(this.props); - const { - authenticated, - graphExplorerMode, - queryState, - minimised, - termsOfUse, - sampleQuery, - actions, - sidebarProperties, - intl: { messages }, - }: any = this.props; + const { authenticated, graphExplorerMode, queryState, minimised, termsOfUse, sampleQuery, + actions, sidebarProperties, intl: { messages }, }: any = this.props; + const query = createShareLink(sampleQuery, authenticated); const sampleHeaderText = messages['Sample Queries']; // tslint:disable-next-line:no-string-literal @@ -374,19 +359,17 @@ class App extends Component {
{graphExplorerMode === Mode.Complete && (
- {mobileScreen && - appTitleDisplayOnMobileScreen( - stackTokens, - classes, - this.toggleSidebar - )} - - {!mobileScreen && - appTitleDisplayOnFullScreen( - classes, - minimised, - this.toggleSidebar - )} + {mobileScreen && appTitleDisplayOnMobileScreen( + stackTokens, + classes, + this.toggleSidebar + )} + + {!mobileScreen && appTitleDisplayOnFullScreen( + classes, + minimised, + this.toggleSidebar + )}
@@ -395,10 +378,7 @@ class App extends Component { {showSidebar && ( <> - + )}
@@ -428,15 +408,8 @@ class App extends Component { } } -const mapStateToProps = ({ - sidebarProperties, - theme, - queryRunnerStatus, - profile, - sampleQuery, - termsOfUse, - authToken, - graphExplorerMode, +const mapStateToProps = ({ sidebarProperties, theme, + queryRunnerStatus, profile, sampleQuery, termsOfUse, authToken, graphExplorerMode, }: IRootState) => { const mobileScreen = !!sidebarProperties.mobileScreen; const showSidebar = !!sidebarProperties.showSidebar; diff --git a/src/app/views/app-sections/AppTitle.tsx b/src/app/views/app-sections/AppTitle.tsx index e63ee00ee..23cc3a355 100644 --- a/src/app/views/app-sections/AppTitle.tsx +++ b/src/app/views/app-sections/AppTitle.tsx @@ -1,4 +1,4 @@ -import { getId, IconButton, IStackTokens, Label, Stack, TooltipHost } from 'office-ui-fabric-react'; +import { getId, IconButton, IStackTokens, Label, Stack, TooltipHost } from '@fluentui/react'; import React from 'react'; import { FormattedMessage } from 'react-intl'; diff --git a/src/app/views/app-sections/HeaderMessaging.tsx b/src/app/views/app-sections/HeaderMessaging.tsx index 3d79a2bcc..858e073ad 100644 --- a/src/app/views/app-sections/HeaderMessaging.tsx +++ b/src/app/views/app-sections/HeaderMessaging.tsx @@ -1,4 +1,4 @@ -import { MessageBar, MessageBarType } from 'office-ui-fabric-react'; +import { MessageBar, MessageBarType } from '@fluentui/react'; import React from 'react'; import { FormattedMessage } from 'react-intl'; @@ -15,13 +15,13 @@ export function headerMessaging(classes: any, query: string): React.ReactNode {

, - + . - +

. -

+

@@ -30,9 +30,9 @@ export function headerMessaging(classes: any, query: string): React.ReactNode {

, - + . - +

}
); diff --git a/src/app/views/app-sections/StatusMessages.tsx b/src/app/views/app-sections/StatusMessages.tsx index e17ca59be..fa32a087f 100644 --- a/src/app/views/app-sections/StatusMessages.tsx +++ b/src/app/views/app-sections/StatusMessages.tsx @@ -1,4 +1,4 @@ -import { Link, MessageBar } from 'office-ui-fabric-react'; +import { Link, MessageBar } from '@fluentui/react'; import React, { Fragment } from 'react'; import { FormattedMessage } from 'react-intl'; @@ -43,7 +43,7 @@ export function statusMessages(queryState: any, sampleQuery: IQuery, actions: an }; if (queryState) { - const { messageType, statusText, status, duration } = queryState; + const { messageType, statusText, status, duration, hint } = queryState; let urls: any = {}; let message = status; const extractedUrls = extractUrl(status); @@ -72,6 +72,8 @@ export function statusMessages(queryState: any, sampleQuery: IQuery, actions: an } + {hint &&
{hint}
} + ); } } diff --git a/src/app/views/app-sections/TermsOfUseMessage.tsx b/src/app/views/app-sections/TermsOfUseMessage.tsx index b3e7cf260..5a1014f05 100644 --- a/src/app/views/app-sections/TermsOfUseMessage.tsx +++ b/src/app/views/app-sections/TermsOfUseMessage.tsx @@ -1,4 +1,4 @@ -import { MessageBar, MessageBarType } from 'office-ui-fabric-react'; +import { MessageBar, MessageBarType } from '@fluentui/react'; import React from 'react'; import { FormattedMessage } from 'react-intl'; import { componentNames, telemetry } from '../../../telemetry'; diff --git a/src/app/views/authentication/Authentication.styles.ts b/src/app/views/authentication/Authentication.styles.ts index 236730455..87289077e 100644 --- a/src/app/views/authentication/Authentication.styles.ts +++ b/src/app/views/authentication/Authentication.styles.ts @@ -1,4 +1,4 @@ -import { FontSizes, ITheme } from '@uifabric/styling'; +import { FontSizes, ITheme } from '@fluentui/react'; export const authenticationStyles = (theme: ITheme) => { return { diff --git a/src/app/views/authentication/Authentication.tsx b/src/app/views/authentication/Authentication.tsx index e014d2810..195855ca8 100644 --- a/src/app/views/authentication/Authentication.tsx +++ b/src/app/views/authentication/Authentication.tsx @@ -1,25 +1,25 @@ - import { SeverityLevel } from '@microsoft/applicationinsights-web'; -import { Icon, Label, MessageBar, MessageBarType, Spinner, SpinnerSize, styled } from 'office-ui-fabric-react'; +import { Icon, Label, MessageBar, MessageBarType, Spinner, SpinnerSize, styled } from '@fluentui/react'; import React, { useState } from 'react'; import { FormattedMessage, injectIntl } from 'react-intl'; import { useDispatch, useSelector } from 'react-redux'; import { authenticationWrapper } from '../../../modules/authentication'; - import { componentNames, errorTypes, telemetry } from '../../../telemetry'; import { Mode } from '../../../types/enums'; import { IRootState } from '../../../types/root'; import { getAuthTokenSuccess, getConsentedScopesSuccess } from '../../services/actions/auth-action-creators'; import { setQueryResponseStatus } from '../../services/actions/query-status-action-creator'; -import { translateMessage } from '../../utils/translate-messages'; import { classNames } from '../classnames'; import { showSignInButtonOrProfile } from './auth-util-components'; import { authenticationStyles } from './Authentication.styles'; +import { getSignInAuthErrorHint, signInAuthError } from './AuthenticationErrorsHints'; const Authentication = (props: any) => { const dispatch = useDispatch(); const [loginInProgress, setLoginInProgress] = useState(false); - const { sidebarProperties, authToken, graphExplorerMode } = useSelector((state: IRootState) => state); + const { sidebarProperties, authToken, graphExplorerMode } = useSelector( + (state: IRootState) => state + ); const mobileScreen = !!sidebarProperties.mobileScreen; const showSidebar = !!sidebarProperties.showSidebar; const tokenPresent = !!authToken.token; @@ -38,52 +38,76 @@ const Authentication = (props: any) => { const authResponse = await authenticationWrapper.logIn(); if (authResponse) { setLoginInProgress(false); - dispatch(getAuthTokenSuccess(!!authResponse.accessToken)) - dispatch(getConsentedScopesSuccess(authResponse.scopes)) + dispatch(getAuthTokenSuccess(!!authResponse.accessToken)); + dispatch(getConsentedScopesSuccess(authResponse.scopes)); } } catch (error) { const { errorCode } = error; - dispatch(setQueryResponseStatus({ - ok: false, - statusText: messages['Authentication failed'], - status: errorCode === 'popup_window_error' - ? translateMessage('popup blocked, allow pop-up windows in your browser') - : errorCode ? errorCode.replace('_', ' ') : '', - messageType: MessageBarType.error - })); + if (signInAuthError(errorCode)) { + authenticationWrapper.clearSession(); + } + dispatch( + setQueryResponseStatus({ + ok: false, + statusText: messages['Authentication failed'], + status: removeUnderScore(errorCode), + messageType: MessageBarType.error, + hint: getSignInAuthErrorHint(errorCode) + }) + ); setLoginInProgress(false); telemetry.trackException( new Error(errorTypes.OPERATIONAL_ERROR), SeverityLevel.Error, { ComponentName: componentNames.AUTHENTICATION_ACTION, - Message: `Authentication failed: ${errorCode ? errorCode.replace('_', ' ') : ''}`, - }); + Message: `Authentication failed: ${errorCode ? removeUnderScore(errorCode) : '' + }`, + } + ); } }; - const showProgressSpinner = (): React.ReactNode => { - return
- - {!minimised && } -
; + const removeUnderScore = (statusString: string): string => { + if (statusString === '') { + return statusString; + } + else { + return statusString.replace(/_/g, ' '); + } } + const showProgressSpinner = (): React.ReactNode => { + return ( +
+ + {!minimised && ( + + )} +
+ ); + }; + const showUnAuthenticatedText = (): React.ReactNode => { - return <> - + return ( + <> + -
- - - - ; - } +
+ + {' '} + + + + ); + }; if (logoutInProgress) { return showProgressSpinner(); @@ -91,16 +115,29 @@ const Authentication = (props: any) => { return ( <> - {loginInProgress ? showProgressSpinner() - : - mobileScreen ? showSignInButtonOrProfile(tokenPresent, mobileScreen, signIn, minimised) : - <> - {!tokenPresent && graphExplorerMode === Mode.Complete && !minimised && showUnAuthenticatedText()} -
{showSignInButtonOrProfile(tokenPresent, mobileScreen, signIn, minimised)}
- } + {loginInProgress ? ( + showProgressSpinner() + ) : mobileScreen ? ( + showSignInButtonOrProfile(tokenPresent, mobileScreen, signIn, minimised) + ) : ( + <> + {!tokenPresent && + graphExplorerMode === Mode.Complete && + !minimised && + showUnAuthenticatedText()} +
+ {showSignInButtonOrProfile( + tokenPresent, + mobileScreen, + signIn, + minimised + )} +
+ + )} - ) -} + ); +}; // @ts-ignore const IntlAuthentication = injectIntl(Authentication); diff --git a/src/app/views/authentication/AuthenticationErrorsHints.ts b/src/app/views/authentication/AuthenticationErrorsHints.ts new file mode 100644 index 000000000..2de5af827 --- /dev/null +++ b/src/app/views/authentication/AuthenticationErrorsHints.ts @@ -0,0 +1,32 @@ +import { translateMessage } from "../../utils/translate-messages"; + +const authErrorList : string[] = ['user_cancelled','null_or_empty_id_token', +"authorization_code_missing_from_server_response", +'no_tokens_found', 'invalid_request', "user_login_error","nonce_mismatch_error", +'login_progress_error', 'interaction_in_progress', +'interaction_required', 'invalid_grant', 'endpoints_resolution_error'] + +const scopeErrorList : string[] = ['interaction_required', 'consent_required', 'login_required', 'access_denied', 'user_cancelled' ] + +export function getSignInAuthErrorHint(error: string): string{ + const authErrorHintAvailable = signInAuthError(error); + return authErrorHintAvailable ? getHint(error) : ''; +} + +export function signInAuthError(error: string): boolean { + return authErrorList.includes(error.trim()); +} + +export function getConsentAuthErrorHint(error: string): string{ + const authErrorHintAvailable = scopeAuthError(error); + const consentError = error + '_consent'; + return authErrorHintAvailable ? getHint(consentError) : ''; +} + +export function scopeAuthError(error: string): boolean { + return scopeErrorList.includes(error); +} + +function getHint( error: string): string { + return translateMessage('Tip') + ' - ' + translateMessage(error); +} \ No newline at end of file diff --git a/src/app/views/authentication/auth-util-components/UtilComponents.tsx b/src/app/views/authentication/auth-util-components/UtilComponents.tsx index 8e2f0c475..33704e034 100644 --- a/src/app/views/authentication/auth-util-components/UtilComponents.tsx +++ b/src/app/views/authentication/auth-util-components/UtilComponents.tsx @@ -1,4 +1,4 @@ -import { IconButton, PrimaryButton } from 'office-ui-fabric-react'; +import { IconButton, PrimaryButton } from '@fluentui/react'; import React from 'react'; import { FormattedMessage } from 'react-intl'; import { translateMessage } from '../../../utils/translate-messages'; diff --git a/src/app/views/authentication/profile/Profile.tsx b/src/app/views/authentication/profile/Profile.tsx index adfee4447..1c35a44ad 100644 --- a/src/app/views/authentication/profile/Profile.tsx +++ b/src/app/views/authentication/profile/Profile.tsx @@ -1,84 +1,35 @@ -import { ActionButton, IPersonaSharedProps, Persona, PersonaSize, styled } from 'office-ui-fabric-react'; -import React, { Component } from 'react'; -import { injectIntl } from 'react-intl'; -import { connect } from 'react-redux'; -import { bindActionCreators, Dispatch } from 'redux'; +import { ActionButton, IPersonaSharedProps, Persona, PersonaSize, Spinner, SpinnerSize, styled } from '@fluentui/react'; +import React, { useEffect } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; import { geLocale } from '../../../../appLocale'; import { Mode } from '../../../../types/enums'; -import { IProfileProps, IProfileState } from '../../../../types/profile'; import { IRootState } from '../../../../types/root'; -import * as authActionCreators from '../../../services/actions/auth-action-creators'; -import * as profileActionCreators from '../../../services/actions/profile-action-creators'; -import { USER_INFO_URL, USER_PICTURE_URL, BETA_USER_INFO_URL, ACCOUNT_TYPE } from '../../../services/graph-constants'; +import { getProfileInfo } from '../../../services/actions/profile-action-creators'; +import { translateMessage } from '../../../utils/translate-messages'; import { classNames } from '../../classnames'; import { authenticationStyles } from '../Authentication.styles'; -export class Profile extends Component { - constructor(props: IProfileProps) { - super(props); - this.state = { - user: { - displayName: '', - emailAddress: '', - profileImageUrl: '' - } - }; - } - - public componentDidMount = async () => { - const { actions } = this.props; - - const jsonUserInfo = actions - ? await actions.getProfileInfo({ - selectedVerb: 'GET', - sampleUrl: USER_INFO_URL - }) - : null; - - const profileType = actions - ? await actions.getProfileInfo({ - selectedVerb: 'GET', - sampleUrl: BETA_USER_INFO_URL - }) - : null; - - const userInfo = jsonUserInfo.response; - if (userInfo) { - let imageUrl = ''; - - try { - const userPicture = actions - ? await actions.getProfileInfo({ - selectedVerb: 'GET', - sampleUrl: USER_PICTURE_URL - }) - : null; - - if (userPicture) { - const buffer = await userPicture.response.arrayBuffer(); - const blob = new Blob([buffer], { type: 'image/jpeg' }); - imageUrl = URL.createObjectURL(blob); - } - } catch (error) { - imageUrl = ''; - } - - const user = { - ...{}, - displayName: userInfo.displayName, - emailAddress: userInfo.mail || userInfo.userPrincipalName, - profileImageUrl: imageUrl - }; +const Profile = (props: any) => { + const dispatch = useDispatch(); + const { sidebarProperties, profile, authToken, graphExplorerMode } = useSelector((state: IRootState) => state); + const mobileScreen = !!sidebarProperties.mobileScreen; + const showSidebar = !!sidebarProperties.showSidebar; + const minimised = !mobileScreen && !showSidebar; + const authenticated = authToken.token; - this.setState({ - user - }); + useEffect(() => { + if (authenticated && !profile) { + dispatch(getProfileInfo()); } + }, [authenticated]); - }; - public getInitials = (name: string) => { + if (!profile) { + return (); + } + + const getInitials = (name: string) => { let initials = ''; if (name && name !== '') { const n = name.indexOf('('); @@ -94,127 +45,90 @@ export class Profile extends Component { return initials; }; - public handleSignOut = () => { - const { actions } = this.props; + const handleSignOut = () => { + const { actions } = props; if (actions) { actions.signOut(); } } + const persona: IPersonaSharedProps = { + imageUrl: profile.profileImageUrl, + imageInitials: getInitials(profile.displayName), + text: profile.displayName, + secondaryText: profile.emailAddress, + }; - public render() { - const { user } = this.state; - const { - intl: { messages }, - minimised, - graphExplorerMode, - }: any = this.props; - - const persona: IPersonaSharedProps = { - imageUrl: user.profileImageUrl, - imageInitials: this.getInitials(user.displayName), - text: user.displayName, - secondaryText: user.emailAddress, - }; - - const classes = classNames(this.props); - - const menuProperties = { - shouldFocusOnMount: true, - alignTargetEdge: true, - items: [ - { - key: 'office-dev-program', - text: messages['Office Dev Program'], - href: `https://developer.microsoft.com/${geLocale}/office/dev-program`, - target: '_blank', - iconProps: { - iconName: 'CommandPrompt', - }, - }, - { - key: 'sign-out', - text: messages['sign out'], - onClick: () => this.handleSignOut(), - iconProps: { - iconName: 'SignOut', - }, - }, - ] - }; + const classes = classNames(props); - const personaStyleToken: any = { - primaryText: { - paddingBottom: 5, + const menuProperties = { + shouldFocusOnMount: true, + alignTargetEdge: true, + items: [ + { + key: 'office-dev-program', + text: translateMessage('Office Dev Program'), + href: `https://developer.microsoft.com/${geLocale}/office/dev-program`, + target: '_blank', + iconProps: { + iconName: 'CommandPrompt', + }, }, - secondaryText: { - paddingBottom: 10, - textTransform: 'lowercase' + key: 'sign-out', + text: translateMessage('sign out'), + onClick: () => handleSignOut(), + iconProps: { + iconName: 'SignOut', + }, }, - }; - - const defaultSize = minimised ? PersonaSize.size32 : PersonaSize.size48; - - const profileProperties = { - persona, - styles: personaStyleToken, - hidePersonaDetails: minimised, - size: graphExplorerMode === Mode.TryIt ? PersonaSize.size40 : defaultSize - }; - - return ( -
- {this.showProfileComponent(profileProperties, graphExplorerMode, menuProperties)} -
- ); - } - - private showProfileComponent(profileProperties: any, graphExplorerMode: Mode, menuProperties: any): React.ReactNode { + ] + }; - const persona = ; + const personaStyleToken: any = { + primaryText: { + paddingBottom: 5, + }, + secondaryText: + { + paddingBottom: 10, + textTransform: 'lowercase' + }, + }; - if (graphExplorerMode === Mode.TryIt) { - return - {persona} - ; - } + const defaultSize = minimised ? PersonaSize.size32 : PersonaSize.size48; - return persona; - } -} - -function mapDispatchToProps(dispatch: Dispatch): object { - return { - actions: bindActionCreators({ - ...profileActionCreators, - ...authActionCreators - }, dispatch) + const profileProperties = { + persona, + styles: personaStyleToken, + hidePersonaDetails: minimised, + size: graphExplorerMode === Mode.TryIt ? PersonaSize.size40 : defaultSize }; + + return ( +
+ {showProfileComponent(profileProperties, graphExplorerMode, menuProperties)} +
+ ); } -function mapStateToProps({ sidebarProperties, theme, graphExplorerMode }: IRootState) { - const mobileScreen = !!sidebarProperties.mobileScreen; - const showSidebar = !!sidebarProperties.showSidebar; +function showProfileComponent(profileProperties: any, graphExplorerMode: Mode, menuProperties: any): React.ReactNode { + const persona = ; + + if (graphExplorerMode === Mode.TryIt) { + return + {persona} + ; + } - return { - mobileScreen: !!sidebarProperties.mobileScreen, - appTheme: theme, - minimised: !mobileScreen && !showSidebar, - graphExplorerMode - }; + return persona; } - // @ts-ignore const styledProfile = styled(Profile, authenticationStyles); // @ts-ignore -const IntlProfile = injectIntl(styledProfile); -export default connect( - mapStateToProps, - mapDispatchToProps -)(IntlProfile); +export default styledProfile; diff --git a/src/app/views/classnames.ts b/src/app/views/classnames.ts index 6f753c86e..16766feb7 100644 --- a/src/app/views/classnames.ts +++ b/src/app/views/classnames.ts @@ -1,4 +1,4 @@ -import { classNamesFunction, ITheme } from 'office-ui-fabric-react'; +import { classNamesFunction, ITheme } from '@fluentui/react'; interface IClassNames { [prop: string]: unknown; diff --git a/src/app/views/common/monaco/Monaco.tsx b/src/app/views/common/monaco/Monaco.tsx index 58edbaa56..bdcecd2c5 100644 --- a/src/app/views/common/monaco/Monaco.tsx +++ b/src/app/views/common/monaco/Monaco.tsx @@ -1,4 +1,4 @@ -import { FocusZone } from 'office-ui-fabric-react'; +import { FocusZone } from '@fluentui/react'; import React from 'react'; import MonacoEditor, { ChangeHandler } from 'react-monaco-editor'; diff --git a/src/app/views/common/submit-button/SubmitButton.tsx b/src/app/views/common/submit-button/SubmitButton.tsx index d574f6097..e2c3d24a1 100644 --- a/src/app/views/common/submit-button/SubmitButton.tsx +++ b/src/app/views/common/submit-button/SubmitButton.tsx @@ -1,4 +1,4 @@ -import { PrimaryButton, Spinner, SpinnerSize } from 'office-ui-fabric-react'; +import { PrimaryButton, Spinner, SpinnerSize } from '@fluentui/react'; import React from 'react'; import { ISubmitButtonControl } from '../../../../types/submit-button'; @@ -21,7 +21,7 @@ const SubmitButtonControl = ({ > {text} {submitting && <>  - + } diff --git a/src/app/views/query-response/QueryResponse.tsx b/src/app/views/query-response/QueryResponse.tsx index f8f5c6ce2..6f61dde29 100644 --- a/src/app/views/query-response/QueryResponse.tsx +++ b/src/app/views/query-response/QueryResponse.tsx @@ -1,9 +1,8 @@ import { - Announced, + Announced, Dialog, DialogFooter, DialogType, DefaultButton, FontSizes, getId, Icon, IconButton, Modal, Pivot, PivotItem, PrimaryButton, TooltipHost -} from 'office-ui-fabric-react'; -import { Dialog, DialogFooter, DialogType } from 'office-ui-fabric-react/lib/Dialog'; +} from '@fluentui/react'; import { Resizable } from 're-resizable'; import React, { useEffect, useState } from 'react'; import { injectIntl } from 'react-intl'; diff --git a/src/app/views/query-response/adaptive-cards/AdaptiveCard.tsx b/src/app/views/query-response/adaptive-cards/AdaptiveCard.tsx index 4c712617c..2f0990918 100644 --- a/src/app/views/query-response/adaptive-cards/AdaptiveCard.tsx +++ b/src/app/views/query-response/adaptive-cards/AdaptiveCard.tsx @@ -1,5 +1,5 @@ import * as AdaptiveCardsAPI from 'adaptivecards'; -import { IconButton, Label, MessageBar, MessageBarType, Pivot, PivotItem, styled } from 'office-ui-fabric-react'; +import { IconButton, Label, MessageBar, MessageBarType, Pivot, PivotItem, styled } from '@fluentui/react'; import React, { Component } from 'react'; import { FormattedMessage, injectIntl } from 'react-intl'; import { connect } from 'react-redux'; diff --git a/src/app/views/query-response/graph-toolkit/GraphToolkit.tsx b/src/app/views/query-response/graph-toolkit/GraphToolkit.tsx index 48799cde7..2279ef775 100644 --- a/src/app/views/query-response/graph-toolkit/GraphToolkit.tsx +++ b/src/app/views/query-response/graph-toolkit/GraphToolkit.tsx @@ -7,7 +7,7 @@ import { MessageBar, MessageBarType, styled, -} from 'office-ui-fabric-react'; +} from '@fluentui/react'; import { lookupToolkitUrl } from '../../../utils/graph-toolkit-lookup'; import { componentNames, telemetry } from '../../../../telemetry'; import { classNames } from '../../classnames'; diff --git a/src/app/views/query-response/headers/ResponseHeaders.tsx b/src/app/views/query-response/headers/ResponseHeaders.tsx index 282a31f3b..19de68980 100644 --- a/src/app/views/query-response/headers/ResponseHeaders.tsx +++ b/src/app/views/query-response/headers/ResponseHeaders.tsx @@ -1,5 +1,5 @@ -import { IconButton } from 'office-ui-fabric-react'; +import { IconButton } from '@fluentui/react'; import React from 'react'; import { useSelector } from 'react-redux'; import { RESPONSE_HEADERS_COPY_BUTTON } from '../../../../telemetry/component-names'; diff --git a/src/app/views/query-response/pivot-items/pivot-items.tsx b/src/app/views/query-response/pivot-items/pivot-items.tsx index 8a08d104c..8eb2ddc8a 100644 --- a/src/app/views/query-response/pivot-items/pivot-items.tsx +++ b/src/app/views/query-response/pivot-items/pivot-items.tsx @@ -1,4 +1,4 @@ -import { getId, getTheme, Icon, PivotItem, TooltipHost } from 'office-ui-fabric-react'; +import { getId, getTheme, Icon, ITheme, PivotItem, TooltipHost } from '@fluentui/react'; import React from 'react'; import { useSelector } from 'react-redux'; @@ -23,7 +23,7 @@ export const getPivotItems = () => { const { graphExplorerMode: mode, sampleQuery, graphResponse: { body } } = useSelector((state: IRootState) => state); - const currentTheme = getTheme(); + const currentTheme: ITheme = getTheme(); const dotStyle = queryResponseStyles(currentTheme).dot; function showDotIfAdaptiveCardPresent() { diff --git a/src/app/views/query-response/queryResponse.styles.ts b/src/app/views/query-response/queryResponse.styles.ts index 5f8d369b8..32c54b853 100644 --- a/src/app/views/query-response/queryResponse.styles.ts +++ b/src/app/views/query-response/queryResponse.styles.ts @@ -1,4 +1,4 @@ -import { ITheme } from '@uifabric/styling'; +import { ITheme } from '@fluentui/react'; export const queryResponseStyles = (theme: ITheme) => { return { diff --git a/src/app/views/query-response/response/Response.tsx b/src/app/views/query-response/response/Response.tsx index bab03e8f4..92a789c31 100644 --- a/src/app/views/query-response/response/Response.tsx +++ b/src/app/views/query-response/response/Response.tsx @@ -1,5 +1,5 @@ -import { Link, MessageBar, MessageBarType } from 'office-ui-fabric-react'; +import { Link, MessageBar, MessageBarType } from '@fluentui/react'; import React from 'react'; import { FormattedMessage } from 'react-intl'; import { useDispatch, useSelector } from 'react-redux'; diff --git a/src/app/views/query-response/snippets/Snippets.tsx b/src/app/views/query-response/snippets/Snippets.tsx index 368ac4c9d..fed5134d7 100644 --- a/src/app/views/query-response/snippets/Snippets.tsx +++ b/src/app/views/query-response/snippets/Snippets.tsx @@ -1,4 +1,4 @@ -import { Pivot } from 'office-ui-fabric-react'; +import { Pivot } from '@fluentui/react'; import React from 'react'; import { componentNames, telemetry } from '../../../../telemetry'; diff --git a/src/app/views/query-response/snippets/snippets-helper.tsx b/src/app/views/query-response/snippets/snippets-helper.tsx index 07cc42879..dcd2f70b8 100644 --- a/src/app/views/query-response/snippets/snippets-helper.tsx +++ b/src/app/views/query-response/snippets/snippets-helper.tsx @@ -1,4 +1,4 @@ -import { IconButton, Label, PivotItem } from 'office-ui-fabric-react'; +import { IconButton, Label, PivotItem } from '@fluentui/react'; import React, { useEffect } from 'react'; import { shallowEqual, useDispatch, useSelector } from 'react-redux'; diff --git a/src/app/views/query-runner/QueryRunner.tsx b/src/app/views/query-runner/QueryRunner.tsx index 7eb55d12a..0827d8da9 100644 --- a/src/app/views/query-runner/QueryRunner.tsx +++ b/src/app/views/query-runner/QueryRunner.tsx @@ -1,4 +1,4 @@ -import { IDropdownOption, MessageBarType } from 'office-ui-fabric-react'; +import { IDropdownOption, MessageBarType } from '@fluentui/react'; import React, { Component } from 'react'; import { injectIntl } from 'react-intl'; import { connect } from 'react-redux'; @@ -85,6 +85,7 @@ export class QueryRunner extends Component< status: `${translateMessage('Review the request body')} ${error}`, messageType: MessageBarType.error, }); + this.setState({ sampleBody: '' }); return; } } else { @@ -102,6 +103,7 @@ export class QueryRunner extends Component< QuerySignature: `${sampleQuery.selectedVerb} ${sanitizedUrl}` }); } + this.setState({ sampleBody: '' }); }; private handleOnVersionChange = (urlVersion?: IDropdownOption) => { diff --git a/src/app/views/query-runner/query-input/QueryInput.styles.ts b/src/app/views/query-runner/query-input/QueryInput.styles.ts index 4cf2f4124..1562b16e6 100644 --- a/src/app/views/query-runner/query-input/QueryInput.styles.ts +++ b/src/app/views/query-runner/query-input/QueryInput.styles.ts @@ -1,4 +1,4 @@ -import { ITheme } from '@uifabric/styling'; +import { ITheme } from '@fluentui/react'; export const queryInputStyles = (theme: ITheme) => { const controlWidth = '96.5%'; diff --git a/src/app/views/query-runner/query-input/QueryInput.tsx b/src/app/views/query-runner/query-input/QueryInput.tsx index 69524c2f0..473f181dd 100644 --- a/src/app/views/query-runner/query-input/QueryInput.tsx +++ b/src/app/views/query-runner/query-input/QueryInput.tsx @@ -1,5 +1,5 @@ -import { IDropdownOption } from 'office-ui-fabric-react'; -import { Dropdown } from 'office-ui-fabric-react'; +import { IDropdownOption } from '@fluentui/react'; +import { Dropdown } from '@fluentui/react'; import React from 'react'; import { injectIntl } from 'react-intl'; import { useDispatch, useSelector } from 'react-redux'; diff --git a/src/app/views/query-runner/query-input/auto-complete/AutoComplete.tsx b/src/app/views/query-runner/query-input/auto-complete/AutoComplete.tsx index 6f6d60f0b..960557596 100644 --- a/src/app/views/query-runner/query-input/auto-complete/AutoComplete.tsx +++ b/src/app/views/query-runner/query-input/auto-complete/AutoComplete.tsx @@ -1,5 +1,4 @@ -import { getId, getTheme, Icon, ITextField, KeyCodes, Spinner, TextField, TooltipHost } from 'office-ui-fabric-react'; -import { ITooltipHostStyles } from 'office-ui-fabric-react/lib/components/Tooltip/TooltipHost.types'; +import { getId, getTheme, Icon, ITextField, ITooltipHostStyles, KeyCodes, Spinner, TextField, TooltipHost } from '@fluentui/react'; import React, { Component } from 'react'; import { connect } from 'react-redux'; import { bindActionCreators, Dispatch } from 'redux'; diff --git a/src/app/views/query-runner/query-input/auto-complete/SuggestionsList.tsx b/src/app/views/query-runner/query-input/auto-complete/SuggestionsList.tsx index ff7739096..e2bfce68a 100644 --- a/src/app/views/query-runner/query-input/auto-complete/SuggestionsList.tsx +++ b/src/app/views/query-runner/query-input/auto-complete/SuggestionsList.tsx @@ -1,4 +1,4 @@ -import { Label, styled } from 'office-ui-fabric-react'; +import { Label, styled } from '@fluentui/react'; import React, { useEffect } from 'react'; import { ISuggestionsList } from '../../../../../types/auto-complete'; diff --git a/src/app/views/query-runner/query-input/auto-complete/auto-complete.styles.ts b/src/app/views/query-runner/query-input/auto-complete/auto-complete.styles.ts index 61825f809..ff1057888 100644 --- a/src/app/views/query-runner/query-input/auto-complete/auto-complete.styles.ts +++ b/src/app/views/query-runner/query-input/auto-complete/auto-complete.styles.ts @@ -1,4 +1,4 @@ -import { ITheme } from '@uifabric/styling'; +import { ITheme } from '@fluentui/react'; export const autoCompleteStyles = (theme: ITheme) => { const controlWidth = '95.5%'; diff --git a/src/app/views/query-runner/request/Request.tsx b/src/app/views/query-runner/request/Request.tsx index 795490c07..b67f1d2cb 100644 --- a/src/app/views/query-runner/request/Request.tsx +++ b/src/app/views/query-runner/request/Request.tsx @@ -4,7 +4,7 @@ import { Pivot, PivotItem, TooltipHost, -} from 'office-ui-fabric-react'; +} from '@fluentui/react'; import { Resizable } from 're-resizable'; import React, { Component, CSSProperties } from 'react'; import { injectIntl } from 'react-intl'; diff --git a/src/app/views/query-runner/request/auth/Auth.styles.ts b/src/app/views/query-runner/request/auth/Auth.styles.ts index 708357845..83950e198 100644 --- a/src/app/views/query-runner/request/auth/Auth.styles.ts +++ b/src/app/views/query-runner/request/auth/Auth.styles.ts @@ -1,4 +1,4 @@ -import { FontSizes } from '@uifabric/styling'; +import { FontSizes } from '@fluentui/react'; export const authStyles = () => { return { diff --git a/src/app/views/query-runner/request/auth/Auth.tsx b/src/app/views/query-runner/request/auth/Auth.tsx index a896746d1..f640bce1a 100644 --- a/src/app/views/query-runner/request/auth/Auth.tsx +++ b/src/app/views/query-runner/request/auth/Auth.tsx @@ -1,5 +1,5 @@ import { AuthenticationResult } from '@azure/msal-browser'; -import { IconButton, IIconProps, Label, MessageBar, MessageBarType, styled } from 'office-ui-fabric-react'; +import { IconButton, IIconProps, Label, MessageBar, MessageBarType, styled } from '@fluentui/react'; import React, { useEffect, useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { useSelector } from 'react-redux'; diff --git a/src/app/views/query-runner/request/headers/Headers.styles.ts b/src/app/views/query-runner/request/headers/Headers.styles.ts index 3b260f460..cc16c03b8 100644 --- a/src/app/views/query-runner/request/headers/Headers.styles.ts +++ b/src/app/views/query-runner/request/headers/Headers.styles.ts @@ -1,4 +1,4 @@ -import { FontSizes } from '@uifabric/styling'; +import { FontSizes } from '@fluentui/react'; export const headerStyles = () => { return { diff --git a/src/app/views/query-runner/request/headers/HeadersList.tsx b/src/app/views/query-runner/request/headers/HeadersList.tsx index a3b14dfab..47bcbc616 100644 --- a/src/app/views/query-runner/request/headers/HeadersList.tsx +++ b/src/app/views/query-runner/request/headers/HeadersList.tsx @@ -1,4 +1,4 @@ -import { DetailsList, DetailsRow, IColumn, IconButton, SelectionMode } from 'office-ui-fabric-react'; +import { DetailsList, DetailsRow, IColumn, IconButton, SelectionMode } from '@fluentui/react'; import * as React from 'react'; import { IHeadersListControl } from '../../../../../types/request'; import { translateMessage } from '../../../../utils/translate-messages'; diff --git a/src/app/views/query-runner/request/headers/RequestHeaders.tsx b/src/app/views/query-runner/request/headers/RequestHeaders.tsx index 99ee31285..eb0fb9e58 100644 --- a/src/app/views/query-runner/request/headers/RequestHeaders.tsx +++ b/src/app/views/query-runner/request/headers/RequestHeaders.tsx @@ -1,4 +1,4 @@ -import { Announced, ITextField, PrimaryButton, styled, TextField } from 'office-ui-fabric-react'; +import { Announced, ITextField, PrimaryButton, styled, TextField } from '@fluentui/react'; import React, { useState } from 'react'; import { FormattedMessage, injectIntl } from 'react-intl'; import { useDispatch, useSelector } from 'react-redux'; diff --git a/src/app/views/query-runner/request/permissions/PanelList.tsx b/src/app/views/query-runner/request/permissions/PanelList.tsx index 49f2be12e..b26c81cda 100644 --- a/src/app/views/query-runner/request/permissions/PanelList.tsx +++ b/src/app/views/query-runner/request/permissions/PanelList.tsx @@ -2,11 +2,12 @@ import { Announced, DetailsList, DetailsListLayoutMode, + GroupHeader, IColumn, Label, SearchBox, SelectionMode -} from 'office-ui-fabric-react'; +} from '@fluentui/react'; import React, { useState } from 'react'; import { FormattedMessage } from 'react-intl'; import { useSelector } from 'react-redux'; @@ -25,11 +26,12 @@ interface IPanelList { selection: any; renderItemColumn: any; renderDetailsHeader: Function; + renderCustomCheckbox: Function; } const PanelList = ({ messages, columns, classes, selection, - renderItemColumn, renderDetailsHeader }: IPanelList) => { + renderItemColumn, renderDetailsHeader, renderCustomCheckbox }: IPanelList) => { const { consentedScopes, scopes, authToken } = useSelector((state: IRootState) => state); const [permissions, setPermissions] = useState(scopes.data.sort(dynamicSort('value', SortOrder.ASC))); @@ -61,6 +63,16 @@ const PanelList = ({ messages, const groups = generateGroupsFromList(permissionsList, 'groupName'); + + const _onRenderGroupHeader = (props: any): any => { + if (props) { + return ( + + ) + } + return null; + }; + return ( <>